summaryrefslogtreecommitdiff
path: root/libgo/go/net/mockserver_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'libgo/go/net/mockserver_test.go')
-rw-r--r--libgo/go/net/mockserver_test.go69
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")
}