done <- 1;
}
-func connect(t *testing.T, network, addr string) {
+func connect(t *testing.T, network, addr string, isEmpty bool) {
var laddr string;
if network == "unixgram" {
laddr = addr + ".local"
if err != nil {
t.Fatalf("net.Dial(%q, %q, %q) = _, %v", network, laddr, addr, err)
}
+ fd.SetReadTimeout(10e6); // 10ms
- b := strings.Bytes("hello, world\n");
+ var b []byte;
+ if !isEmpty {
+ b = strings.Bytes("hello, world\n")
+ }
var b1 [100]byte;
- n, errno := fd.Write(b);
+ n, err := fd.Write(b);
if n != len(b) {
- t.Fatalf("fd.Write(%q) = %d, %v", b, n, errno)
+ t.Fatalf("fd.Write(%q) = %d, %v", b, n, err)
}
- n, errno = fd.Read(&b1);
- if n != len(b) {
- t.Fatalf("fd.Read() = %d, %v", n, errno)
+ n, err = fd.Read(&b1);
+ if n != len(b) || err != nil {
+ t.Fatalf("fd.Read() = %d, %v (want %d, nil)", n, err, len(b))
}
fd.Close();
}
if network == "tcp" {
dialaddr += addr[strings.LastIndex(addr, ":"):]
}
- connect(t, network, dialaddr);
+ connect(t, network, dialaddr, false);
<-done; // make sure server stopped
}
done <- 1;
}
-func doTestPacket(t *testing.T, network, listenaddr, dialaddr string) {
+func doTestPacket(t *testing.T, network, listenaddr, dialaddr string, isEmpty bool) {
t.Logf("TestPacket %s %s %s\n", network, listenaddr, dialaddr);
listening := make(chan string);
done := make(chan int);
if network == "udp" {
dialaddr += addr[strings.LastIndex(addr, ":"):]
}
- connect(t, network, dialaddr);
+ connect(t, network, dialaddr, isEmpty);
<-done; // tell server to stop
<-done; // wait for stop
}
func TestUDPServer(t *testing.T) {
- doTestPacket(t, "udp", "0.0.0.0", "127.0.0.1");
- doTestPacket(t, "udp", "", "127.0.0.1");
- if kernelSupportsIPv6() {
- doTestPacket(t, "udp", "[::]", "[::ffff:127.0.0.1]");
- doTestPacket(t, "udp", "[::]", "127.0.0.1");
- doTestPacket(t, "udp", "0.0.0.0", "[::ffff:127.0.0.1]");
+ for _, isEmpty := range []bool{false, true} {
+ doTestPacket(t, "udp", "0.0.0.0", "127.0.0.1", isEmpty);
+ doTestPacket(t, "udp", "", "127.0.0.1", isEmpty);
+ if kernelSupportsIPv6() {
+ doTestPacket(t, "udp", "[::]", "[::ffff:127.0.0.1]", isEmpty);
+ doTestPacket(t, "udp", "[::]", "127.0.0.1", isEmpty);
+ doTestPacket(t, "udp", "0.0.0.0", "[::ffff:127.0.0.1]", isEmpty);
+ }
}
}
func TestUnixDatagramServer(t *testing.T) {
- os.Remove("/tmp/gotest1.net");
- os.Remove("/tmp/gotest1.net.local");
- doTestPacket(t, "unixgram", "/tmp/gotest1.net", "/tmp/gotest1.net");
- os.Remove("/tmp/gotest1.net");
- os.Remove("/tmp/gotest1.net.local");
- if syscall.OS == "linux" {
- // Test abstract unix domain socket, a Linux-ism
- doTestPacket(t, "unixgram", "@gotest1/net", "@gotest1/net")
+ for _, isEmpty := range []bool{false, true} {
+ os.Remove("/tmp/gotest1.net");
+ os.Remove("/tmp/gotest1.net.local");
+ doTestPacket(t, "unixgram", "/tmp/gotest1.net", "/tmp/gotest1.net", isEmpty);
+ os.Remove("/tmp/gotest1.net");
+ os.Remove("/tmp/gotest1.net.local");
+ if syscall.OS == "linux" {
+ // Test abstract unix domain socket, a Linux-ism
+ doTestPacket(t, "unixgram", "@gotest1/net", "@gotest1/net", isEmpty)
+ }
}
}