diff options
Diffstat (limited to 'llgo/third_party/gofrontend/libgo/go/net/conn_test.go')
| -rw-r--r-- | llgo/third_party/gofrontend/libgo/go/net/conn_test.go | 107 |
1 files changed, 24 insertions, 83 deletions
diff --git a/llgo/third_party/gofrontend/libgo/go/net/conn_test.go b/llgo/third_party/gofrontend/libgo/go/net/conn_test.go index 9c9d1a8057d..6995c110f20 100644 --- a/llgo/third_party/gofrontend/libgo/go/net/conn_test.go +++ b/llgo/third_party/gofrontend/libgo/go/net/conn_test.go @@ -8,117 +8,58 @@ package net import ( - "os" - "runtime" "testing" "time" ) -var connTests = []struct { - net string - addr string -}{ - {"tcp", "127.0.0.1:0"}, - {"unix", testUnixAddr()}, - {"unixpacket", testUnixAddr()}, -} - // someTimeout is used just to test that net.Conn implementations // don't explode when their SetFooDeadline methods are called. // It isn't actually used for testing timeouts. const someTimeout = 10 * time.Second func TestConnAndListener(t *testing.T) { - for _, tt := range connTests { - switch tt.net { - case "unix": - switch runtime.GOOS { - case "nacl", "plan9", "windows": - continue - } - case "unixpacket": - switch runtime.GOOS { - case "android", "darwin", "nacl", "openbsd", "plan9", "windows": - continue - case "freebsd": // FreeBSD 8 doesn't support unixpacket - continue - } + for i, network := range []string{"tcp", "unix", "unixpacket"} { + if !testableNetwork(network) { + t.Logf("skipping %s test", network) + continue } - ln, err := Listen(tt.net, tt.addr) + ls, err := newLocalServer(network) if err != nil { - t.Fatalf("Listen failed: %v", err) + t.Fatal(err) } - defer func(ln Listener, net, addr string) { - ln.Close() - switch net { - case "unix", "unixpacket": - os.Remove(addr) - } - }(ln, tt.net, tt.addr) - if ln.Addr().Network() != tt.net { - t.Fatalf("got %v; expected %v", ln.Addr().Network(), tt.net) + defer ls.teardown() + ch := make(chan error, 1) + handler := func(ls *localServer, ln Listener) { transponder(ln, ch) } + if err := ls.buildup(handler); err != nil { + t.Fatal(err) + } + if ls.Listener.Addr().Network() != network { + t.Fatalf("got %s; want %s", ls.Listener.Addr().Network(), network) } - done := make(chan int) - go transponder(t, ln, done) - - c, err := Dial(tt.net, ln.Addr().String()) + c, err := Dial(ls.Listener.Addr().Network(), ls.Listener.Addr().String()) if err != nil { - t.Fatalf("Dial failed: %v", err) + t.Fatal(err) } defer c.Close() - if c.LocalAddr().Network() != tt.net || c.LocalAddr().Network() != tt.net { - t.Fatalf("got %v->%v; expected %v->%v", c.LocalAddr().Network(), c.RemoteAddr().Network(), tt.net, tt.net) + if c.LocalAddr().Network() != network || c.LocalAddr().Network() != network { + t.Fatalf("got %s->%s; want %s->%s", c.LocalAddr().Network(), c.RemoteAddr().Network(), network, network) } c.SetDeadline(time.Now().Add(someTimeout)) c.SetReadDeadline(time.Now().Add(someTimeout)) c.SetWriteDeadline(time.Now().Add(someTimeout)) - if _, err := c.Write([]byte("CONN TEST")); err != nil { - t.Fatalf("Conn.Write failed: %v", err) + if _, err := c.Write([]byte("CONN AND LISTENER TEST")); err != nil { + t.Fatal(err) } rb := make([]byte, 128) if _, err := c.Read(rb); err != nil { - t.Fatalf("Conn.Read failed: %v", err) + t.Fatal(err) } - <-done - } -} - -func transponder(t *testing.T, ln Listener, done chan<- int) { - defer func() { done <- 1 }() - - switch ln := ln.(type) { - case *TCPListener: - ln.SetDeadline(time.Now().Add(someTimeout)) - case *UnixListener: - ln.SetDeadline(time.Now().Add(someTimeout)) - } - c, err := ln.Accept() - if err != nil { - t.Errorf("Listener.Accept failed: %v", err) - return - } - defer c.Close() - network := ln.Addr().Network() - if c.LocalAddr().Network() != network || c.LocalAddr().Network() != network { - t.Errorf("got %v->%v; expected %v->%v", c.LocalAddr().Network(), c.RemoteAddr().Network(), network, network) - return - } - c.SetDeadline(time.Now().Add(someTimeout)) - c.SetReadDeadline(time.Now().Add(someTimeout)) - c.SetWriteDeadline(time.Now().Add(someTimeout)) - - b := make([]byte, 128) - n, err := c.Read(b) - if err != nil { - t.Errorf("Conn.Read failed: %v", err) - return - } - if _, err := c.Write(b[:n]); err != nil { - t.Errorf("Conn.Write failed: %v", err) - return + for err := range ch { + t.Errorf("#%d: %v", i, err) + } } } |

