You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
1.3 KiB
Go

package ch3
import (
"io"
"net"
"testing"
)
func TestDial(t *testing.T) {
//create a listener on a random port to make out test connection to
listener, err := net.Listen("tcp", "127.0.0.1:0")
t.Log("Test server listening on:", listener.Addr().String())
if err != nil {
t.Fatal(err)
}
// channel that receives struct objects
done := make(chan struct{})
// Goroutine (aka handler) for listening for connections
go func() {
defer func() { done <- struct{}{} }()
for {
conn, err := listener.Accept()
if err != nil {
t.Log(err)
return
}
// goroutine for responding to connection requests
go func(c net.Conn) {
defer func() {
c.Close()
done <- struct{}{}
}()
// create a slice of size 1024 (1 kilobyte)
buf := make([]byte, 1024)
for {
// reads up to 1024 bytes at a time from the socket
n, err := c.Read(buf)
if err != nil {
// c.Read returns io.EOF when FIN packet (graceful termination) is received
if err != io.EOF {
t.Log("FIN packet received.")
t.Error(err)
}
return
}
// logs the bytes it receives
t.Logf("received: %q", buf[:n])
}
}(conn)
}
}()
// Now we make our client
conn, err := net.Dial("tcp", listener.Addr().String())
if err != nil {
t.Fatal(err)
}
conn.Close()
<-done
listener.Close()
<-done
}