diff options
Diffstat (limited to 'libgo/go/net/mockserver_test.go')
-rw-r--r-- | libgo/go/net/mockserver_test.go | 69 |
1 files changed, 38 insertions, 31 deletions
diff --git a/libgo/go/net/mockserver_test.go b/libgo/go/net/mockserver_test.go index dd6f4df3b9..766de6a815 100644 --- a/libgo/go/net/mockserver_test.go +++ b/libgo/go/net/mockserver_test.go @@ -30,10 +30,20 @@ func testUnixAddr() string { func newLocalListener(network string) (Listener, error) { switch network { - case "tcp", "tcp4", "tcp6": + case "tcp": + if supportsIPv4 { + if ln, err := Listen("tcp4", "127.0.0.1:0"); err == nil { + return ln, nil + } + } + if supportsIPv6 { + return Listen("tcp6", "[::1]:0") + } + case "tcp4": if supportsIPv4 { return Listen("tcp4", "127.0.0.1:0") } + case "tcp6": if supportsIPv6 { return Listen("tcp6", "[::1]:0") } @@ -142,13 +152,6 @@ func (dss *dualStackServer) buildup(handler func(*dualStackServer, Listener)) er return nil } -func (dss *dualStackServer) putConn(c Conn) error { - dss.cmu.Lock() - dss.cs = append(dss.cs, c) - dss.cmu.Unlock() - return nil -} - func (dss *dualStackServer) teardownNetwork(network string) error { dss.lnmu.Lock() for i := range dss.lns { @@ -181,28 +184,24 @@ func (dss *dualStackServer) teardown() error { return nil } -func newDualStackServer(lns []streamListener) (*dualStackServer, error) { - dss := &dualStackServer{lns: lns, port: "0"} - for i := range dss.lns { - ln, err := Listen(dss.lns[i].network, JoinHostPort(dss.lns[i].address, dss.port)) - if err != nil { - for _, ln := range dss.lns[:i] { - ln.Listener.Close() - } - return nil, err - } - dss.lns[i].Listener = ln - dss.lns[i].done = make(chan bool) - if dss.port == "0" { - if _, dss.port, err = SplitHostPort(ln.Addr().String()); err != nil { - for _, ln := range dss.lns { - ln.Listener.Close() - } - return nil, err - } - } +func newDualStackServer() (*dualStackServer, error) { + lns, err := newDualStackListener() + if err != nil { + return nil, err + } + _, port, err := SplitHostPort(lns[0].Addr().String()) + if err != nil { + lns[0].Close() + lns[1].Close() + return nil, err } - return dss, nil + return &dualStackServer{ + lns: []streamListener{ + {network: "tcp4", address: lns[0].Addr().String(), Listener: lns[0], done: make(chan bool)}, + {network: "tcp6", address: lns[1].Addr().String(), Listener: lns[1], done: make(chan bool)}, + }, + port: port, + }, nil } func transponder(ln Listener, ch chan<- error) { @@ -225,7 +224,7 @@ func transponder(ln Listener, ch chan<- error) { defer c.Close() network := ln.Addr().Network() - if c.LocalAddr().Network() != network || c.LocalAddr().Network() != network { + if c.LocalAddr().Network() != network || c.RemoteAddr().Network() != network { ch <- fmt.Errorf("got %v->%v; expected %v->%v", c.LocalAddr().Network(), c.RemoteAddr().Network(), network, network) return } @@ -333,10 +332,18 @@ func timeoutTransmitter(c Conn, d, min, max time.Duration, ch chan<- error) { func newLocalPacketListener(network string) (PacketConn, error) { switch network { - case "udp", "udp4", "udp6": + case "udp": + if supportsIPv4 { + return ListenPacket("udp4", "127.0.0.1:0") + } + if supportsIPv6 { + return ListenPacket("udp6", "[::1]:0") + } + case "udp4": if supportsIPv4 { return ListenPacket("udp4", "127.0.0.1:0") } + case "udp6": if supportsIPv6 { return ListenPacket("udp6", "[::1]:0") } |