Переглянути джерело

go.net/ipv4: make use of internal/nettest package

LGTM=iant
R=iant
CC=golang-codereviews
https://golang.org/cl/155950043
Mikio Hara 11 роки тому
батько
коміт
2c60c92f6b

+ 0 - 61
ipv4/mocktransponder_test.go

@@ -9,67 +9,6 @@ import (
 	"testing"
 )
 
-func isUnicast(ip net.IP) bool {
-	return ip.To4() != nil && (ip.IsLoopback() || ip.IsLinkLocalUnicast() || ip.IsGlobalUnicast())
-}
-
-// LoopbackInterface returns a logical network interface for loopback
-// tests.
-func loopbackInterface() *net.Interface {
-	ift, err := net.Interfaces()
-	if err != nil {
-		return nil
-	}
-	for _, ifi := range ift {
-		if ifi.Flags&net.FlagLoopback == 0 || ifi.Flags&net.FlagUp == 0 {
-			continue
-		}
-		ifat, err := ifi.Addrs()
-		if err != nil {
-			continue
-		}
-		for _, ifa := range ifat {
-			switch ifa := ifa.(type) {
-			case *net.IPAddr:
-				if isUnicast(ifa.IP) {
-					return &ifi
-				}
-			case *net.IPNet:
-				if isUnicast(ifa.IP) {
-					return &ifi
-				}
-			}
-		}
-	}
-	return nil
-}
-
-// isMulticastAvailable returns true if ifi is a multicast access
-// enabled network interface.  It also returns a unicast IPv4 address
-// that can be used for listening on ifi.
-func isMulticastAvailable(ifi *net.Interface) (net.IP, bool) {
-	if ifi == nil || ifi.Flags&net.FlagUp == 0 || ifi.Flags&net.FlagMulticast == 0 {
-		return nil, false
-	}
-	ifat, err := ifi.Addrs()
-	if err != nil {
-		return nil, false
-	}
-	for _, ifa := range ifat {
-		switch ifa := ifa.(type) {
-		case *net.IPAddr:
-			if isUnicast(ifa.IP) {
-				return ifa.IP, true
-			}
-		case *net.IPNet:
-			if isUnicast(ifa.IP) {
-				return ifa.IP, true
-			}
-		}
-	}
-	return nil, false
-}
-
 func acceptor(t *testing.T, ln net.Listener, done chan<- bool) {
 	defer func() { done <- true }()
 

+ 5 - 4
ipv4/multicast_test.go

@@ -13,6 +13,7 @@ import (
 
 	"code.google.com/p/go.net/internal/iana"
 	"code.google.com/p/go.net/internal/icmp"
+	"code.google.com/p/go.net/internal/nettest"
 	"code.google.com/p/go.net/ipv4"
 )
 
@@ -21,7 +22,7 @@ func TestPacketConnReadWriteMulticastUDP(t *testing.T) {
 	case "plan9", "windows":
 		t.Skipf("not supported on %q", runtime.GOOS)
 	}
-	ifi := loopbackInterface()
+	ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
 	if ifi == nil {
 		t.Skipf("not available on %q", runtime.GOOS)
 	}
@@ -88,7 +89,7 @@ func TestPacketConnReadWriteMulticastICMP(t *testing.T) {
 	if os.Getuid() != 0 {
 		t.Skip("must be root")
 	}
-	ifi := loopbackInterface()
+	ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
 	if ifi == nil {
 		t.Skipf("not available on %q", runtime.GOOS)
 	}
@@ -170,7 +171,7 @@ func TestRawConnReadWriteMulticastICMP(t *testing.T) {
 	if os.Getuid() != 0 {
 		t.Skip("must be root")
 	}
-	ifi := loopbackInterface()
+	ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
 	if ifi == nil {
 		t.Skipf("not available on %q", runtime.GOOS)
 	}
@@ -247,7 +248,7 @@ func TestRawConnReadWriteMulticastICMP(t *testing.T) {
 				t.Fatalf("icmp.ParseMessage failed: %v", err)
 			}
 			switch {
-			case isUnicast(rh.Dst) && m.Type == ipv4.ICMPTypeEchoReply && m.Code == 0: // net.inet.icmp.bmcastecho=1
+			case (rh.Dst.IsLoopback() || rh.Dst.IsLinkLocalUnicast() || rh.Dst.IsGlobalUnicast()) && m.Type == ipv4.ICMPTypeEchoReply && m.Code == 0: // net.inet.icmp.bmcastecho=1
 			case rh.Dst.IsMulticast() && m.Type == ipv4.ICMPTypeEcho && m.Code == 0: // net.inet.icmp.bmcastecho=0
 			default:
 				t.Fatalf("got type=%v, code=%v; expected type=%v, code=%v", m.Type, m.Code, ipv4.ICMPTypeEchoReply, 0)

+ 6 - 5
ipv4/multicastlistener_test.go

@@ -10,6 +10,7 @@ import (
 	"runtime"
 	"testing"
 
+	"code.google.com/p/go.net/internal/nettest"
 	"code.google.com/p/go.net/ipv4"
 )
 
@@ -43,7 +44,7 @@ func TestUDPSinglePacketConnWithMultipleGroupListeners(t *testing.T) {
 			t.Fatalf("net.Interfaces failed: %v", err)
 		}
 		for i, ifi := range ift {
-			if _, ok := isMulticastAvailable(&ifi); !ok {
+			if _, ok := nettest.IsMulticastCapable("ip4", &ifi); !ok {
 				continue
 			}
 			if err := p.JoinGroup(&ifi, gaddr); err != nil {
@@ -91,7 +92,7 @@ func TestUDPMultiplePacketConnWithMultipleGroupListeners(t *testing.T) {
 			t.Fatalf("net.Interfaces failed: %v", err)
 		}
 		for i, ifi := range ift {
-			if _, ok := isMulticastAvailable(&ifi); !ok {
+			if _, ok := nettest.IsMulticastCapable("ip4", &ifi); !ok {
 				continue
 			}
 			for _, p := range ps {
@@ -132,7 +133,7 @@ func TestUDPPerInterfaceSinglePacketConnWithSingleGroupListener(t *testing.T) {
 		t.Fatalf("net.Interfaces failed: %v", err)
 	}
 	for i, ifi := range ift {
-		ip, ok := isMulticastAvailable(&ifi)
+		ip, ok := nettest.IsMulticastCapable("ip4", &ifi)
 		if !ok {
 			continue
 		}
@@ -184,7 +185,7 @@ func TestIPSingleRawConnWithSingleGroupListener(t *testing.T) {
 		t.Fatalf("net.Interfaces failed: %v", err)
 	}
 	for i, ifi := range ift {
-		if _, ok := isMulticastAvailable(&ifi); !ok {
+		if _, ok := nettest.IsMulticastCapable("ip4", &ifi); !ok {
 			continue
 		}
 		if err := r.JoinGroup(&ifi, &gaddr); err != nil {
@@ -223,7 +224,7 @@ func TestIPPerInterfaceSingleRawConnWithSingleGroupListener(t *testing.T) {
 		t.Fatalf("net.Interfaces failed: %v", err)
 	}
 	for i, ifi := range ift {
-		ip, ok := isMulticastAvailable(&ifi)
+		ip, ok := nettest.IsMulticastCapable("ip4", &ifi)
 		if !ok {
 			continue
 		}

+ 3 - 2
ipv4/multicastsockopt_test.go

@@ -10,6 +10,7 @@ import (
 	"runtime"
 	"testing"
 
+	"code.google.com/p/go.net/internal/nettest"
 	"code.google.com/p/go.net/ipv4"
 )
 
@@ -26,7 +27,7 @@ func TestPacketConnMulticastSocketOptions(t *testing.T) {
 	case "plan9":
 		t.Skipf("not supported on %q", runtime.GOOS)
 	}
-	ifi := loopbackInterface()
+	ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
 	if ifi == nil {
 		t.Skipf("not available on %q", runtime.GOOS)
 	}
@@ -53,7 +54,7 @@ func TestRawConnMulticastSocketOptions(t *testing.T) {
 	if os.Getuid() != 0 {
 		t.Skip("must be root")
 	}
-	ifi := loopbackInterface()
+	ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
 	if ifi == nil {
 		t.Skipf("not available on %q", runtime.GOOS)
 	}

+ 5 - 4
ipv4/unicast_test.go

@@ -13,6 +13,7 @@ import (
 
 	"code.google.com/p/go.net/internal/iana"
 	"code.google.com/p/go.net/internal/icmp"
+	"code.google.com/p/go.net/internal/nettest"
 	"code.google.com/p/go.net/ipv4"
 )
 
@@ -65,7 +66,7 @@ func BenchmarkReadWriteIPv4UDP(b *testing.B) {
 	if err := p.SetControlMessage(cf, true); err != nil {
 		b.Fatalf("ipv4.PacketConn.SetControlMessage failed: %v", err)
 	}
-	ifi := loopbackInterface()
+	ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
 
 	wb, rb := []byte("HELLO-R-U-THERE"), make([]byte, 128)
 	b.ResetTimer()
@@ -92,7 +93,7 @@ func TestPacketConnReadWriteUnicastUDP(t *testing.T) {
 	case "plan9", "windows":
 		t.Skipf("not supported on %q", runtime.GOOS)
 	}
-	ifi := loopbackInterface()
+	ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
 	if ifi == nil {
 		t.Skipf("not available on %q", runtime.GOOS)
 	}
@@ -142,7 +143,7 @@ func TestPacketConnReadWriteUnicastICMP(t *testing.T) {
 	if os.Getuid() != 0 {
 		t.Skip("must be root")
 	}
-	ifi := loopbackInterface()
+	ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
 	if ifi == nil {
 		t.Skipf("not available on %q", runtime.GOOS)
 	}
@@ -214,7 +215,7 @@ func TestRawConnReadWriteUnicastICMP(t *testing.T) {
 	if os.Getuid() != 0 {
 		t.Skip("must be root")
 	}
-	ifi := loopbackInterface()
+	ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
 	if ifi == nil {
 		t.Skipf("not available on %q", runtime.GOOS)
 	}

+ 4 - 3
ipv4/unicastsockopt_test.go

@@ -11,6 +11,7 @@ import (
 	"testing"
 
 	"code.google.com/p/go.net/internal/iana"
+	"code.google.com/p/go.net/internal/nettest"
 	"code.google.com/p/go.net/ipv4"
 )
 
@@ -19,7 +20,7 @@ func TestConnUnicastSocketOptions(t *testing.T) {
 	case "plan9":
 		t.Skipf("not supported on %q", runtime.GOOS)
 	}
-	ifi := loopbackInterface()
+	ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
 	if ifi == nil {
 		t.Skipf("not available on %q", runtime.GOOS)
 	}
@@ -56,7 +57,7 @@ func TestPacketConnUnicastSocketOptions(t *testing.T) {
 	case "plan9":
 		t.Skipf("not supported on %q", runtime.GOOS)
 	}
-	ifi := loopbackInterface()
+	ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
 	if ifi == nil {
 		t.Skipf("not available on %q", runtime.GOOS)
 	}
@@ -83,7 +84,7 @@ func TestRawConnUnicastSocketOptions(t *testing.T) {
 	if os.Getuid() != 0 {
 		t.Skip("must be root")
 	}
-	ifi := loopbackInterface()
+	ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
 	if ifi == nil {
 		t.Skipf("not available on %q", runtime.GOOS)
 	}