all: use of nettest, remove internal/nettest

This change uses the nettest package where possible and removes the
internal/nettest package.

Change-Id: I5615a3ab7957183fecea6b5646df99dbb7c186e2
Reviewed-on: https://go-review.googlesource.com/c/net/+/123057
Run-TryBot: Mikio Hara <mikioh.public.networking@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matt Layher <mdlayher@gmail.com>
diff --git a/ipv4/helper_posix_test.go b/ipv4/helper_posix_test.go
new file mode 100644
index 0000000..ee66dd2
--- /dev/null
+++ b/ipv4/helper_posix_test.go
@@ -0,0 +1,31 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris windows
+
+package ipv4_test
+
+import (
+	"os"
+	"syscall"
+)
+
+func protocolNotSupported(err error) bool {
+	switch err := err.(type) {
+	case syscall.Errno:
+		switch err {
+		case syscall.EPROTONOSUPPORT, syscall.ENOPROTOOPT:
+			return true
+		}
+	case *os.SyscallError:
+		switch err := err.Err.(type) {
+		case syscall.Errno:
+			switch err {
+			case syscall.EPROTONOSUPPORT, syscall.ENOPROTOOPT:
+				return true
+			}
+		}
+	}
+	return false
+}
diff --git a/ipv4/helper_stub_test.go b/ipv4/helper_stub_test.go
new file mode 100644
index 0000000..4ba0171
--- /dev/null
+++ b/ipv4/helper_stub_test.go
@@ -0,0 +1,11 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build !aix,!darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris,!windows
+
+package ipv4_test
+
+func protocolNotSupported(err error) bool {
+	return false
+}
diff --git a/ipv4/icmp_test.go b/ipv4/icmp_test.go
index 3324b54..d51acce 100644
--- a/ipv4/icmp_test.go
+++ b/ipv4/icmp_test.go
@@ -10,8 +10,8 @@
 	"runtime"
 	"testing"
 
-	"golang.org/x/net/internal/nettest"
 	"golang.org/x/net/ipv4"
+	"golang.org/x/net/nettest"
 )
 
 var icmpStringTests = []struct {
@@ -66,8 +66,8 @@
 	default:
 		t.Skipf("not supported on %s", runtime.GOOS)
 	}
-	if m, ok := nettest.SupportsRawIPSocket(); !ok {
-		t.Skip(m)
+	if !nettest.SupportsRawSocket() {
+		t.Skipf("not supported on %s/%s", runtime.GOOS, runtime.GOARCH)
 	}
 
 	c, err := net.ListenPacket("ip4:icmp", "127.0.0.1")
diff --git a/ipv4/multicast_test.go b/ipv4/multicast_test.go
index fd9efe0..7271dd0 100644
--- a/ipv4/multicast_test.go
+++ b/ipv4/multicast_test.go
@@ -14,8 +14,8 @@
 
 	"golang.org/x/net/icmp"
 	"golang.org/x/net/internal/iana"
-	"golang.org/x/net/internal/nettest"
 	"golang.org/x/net/ipv4"
+	"golang.org/x/net/nettest"
 )
 
 var packetConnReadWriteMulticastUDPTests = []struct {
@@ -32,8 +32,8 @@
 	case "aix", "fuchsia", "hurd", "js", "nacl", "plan9", "solaris", "windows":
 		t.Skipf("not supported on %s", runtime.GOOS)
 	}
-	ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
-	if ifi == nil {
+	ifi, err := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
+	if err != nil {
 		t.Skipf("not available on %s", runtime.GOOS)
 	}
 
@@ -82,7 +82,7 @@
 
 		for i, toggle := range []bool{true, false, true} {
 			if err := p.SetControlMessage(cf, toggle); err != nil {
-				if nettest.ProtocolNotSupported(err) {
+				if protocolNotSupported(err) {
 					t.Logf("not supported on %s", runtime.GOOS)
 					continue
 				}
@@ -120,11 +120,11 @@
 	case "aix", "fuchsia", "hurd", "js", "nacl", "plan9", "solaris", "windows":
 		t.Skipf("not supported on %s", runtime.GOOS)
 	}
-	if m, ok := nettest.SupportsRawIPSocket(); !ok {
-		t.Skip(m)
+	if !nettest.SupportsRawSocket() {
+		t.Skipf("not supported on %s/%s", runtime.GOOS, runtime.GOARCH)
 	}
-	ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
-	if ifi == nil {
+	ifi, err := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
+	if err != nil {
 		t.Skipf("not available on %s", runtime.GOOS)
 	}
 
@@ -184,7 +184,7 @@
 				t.Fatal(err)
 			}
 			if err := p.SetControlMessage(cf, toggle); err != nil {
-				if nettest.ProtocolNotSupported(err) {
+				if protocolNotSupported(err) {
 					t.Logf("not supported on %s", runtime.GOOS)
 					continue
 				}
@@ -234,11 +234,11 @@
 	if testing.Short() {
 		t.Skip("to avoid external network")
 	}
-	if m, ok := nettest.SupportsRawIPSocket(); !ok {
-		t.Skip(m)
+	if !nettest.SupportsRawSocket() {
+		t.Skipf("not supported on %s/%s", runtime.GOOS, runtime.GOARCH)
 	}
-	ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
-	if ifi == nil {
+	ifi, err := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
+	if err != nil {
 		t.Skipf("not available on %s", runtime.GOOS)
 	}
 
@@ -305,7 +305,7 @@
 				Dst:      tt.grp.IP,
 			}
 			if err := r.SetControlMessage(cf, toggle); err != nil {
-				if nettest.ProtocolNotSupported(err) {
+				if protocolNotSupported(err) {
 					t.Logf("not supported on %s", runtime.GOOS)
 					continue
 				}
diff --git a/ipv4/multicastlistener_test.go b/ipv4/multicastlistener_test.go
index 73e509d..591489e 100644
--- a/ipv4/multicastlistener_test.go
+++ b/ipv4/multicastlistener_test.go
@@ -9,8 +9,8 @@
 	"runtime"
 	"testing"
 
-	"golang.org/x/net/internal/nettest"
 	"golang.org/x/net/ipv4"
+	"golang.org/x/net/nettest"
 )
 
 var udpMultipleGroupListenerTests = []net.Addr{
@@ -43,7 +43,7 @@
 			t.Fatal(err)
 		}
 		for i, ifi := range ift {
-			if _, ok := nettest.IsMulticastCapable("ip4", &ifi); !ok {
+			if _, err := nettest.MulticastSource("ip4", &ifi); err != nil {
 				continue
 			}
 			if err := p.JoinGroup(&ifi, gaddr); err != nil {
@@ -94,7 +94,7 @@
 			t.Fatal(err)
 		}
 		for i, ifi := range ift {
-			if _, ok := nettest.IsMulticastCapable("ip4", &ifi); !ok {
+			if _, err := nettest.MulticastSource("ip4", &ifi); err != nil {
 				continue
 			}
 			for _, p := range ps {
@@ -136,8 +136,8 @@
 	}
 	port := "0"
 	for i, ifi := range ift {
-		ip, ok := nettest.IsMulticastCapable("ip4", &ifi)
-		if !ok {
+		ip, err := nettest.MulticastSource("ip4", &ifi)
+		if err != nil {
 			continue
 		}
 		c, err := net.ListenPacket("udp4", net.JoinHostPort(ip.String(), port)) // unicast address with non-reusable port
@@ -178,8 +178,8 @@
 	if testing.Short() {
 		t.Skip("to avoid external network")
 	}
-	if m, ok := nettest.SupportsRawIPSocket(); !ok {
-		t.Skip(m)
+	if !nettest.SupportsRawSocket() {
+		t.Skipf("not supported on %s/%s", runtime.GOOS, runtime.GOARCH)
 	}
 
 	c, err := net.ListenPacket("ip4:icmp", "0.0.0.0") // wildcard address
@@ -200,7 +200,7 @@
 		t.Fatal(err)
 	}
 	for i, ifi := range ift {
-		if _, ok := nettest.IsMulticastCapable("ip4", &ifi); !ok {
+		if _, err := nettest.MulticastSource("ip4", &ifi); err != nil {
 			continue
 		}
 		if err := r.JoinGroup(&ifi, &gaddr); err != nil {
@@ -223,8 +223,8 @@
 	if testing.Short() {
 		t.Skip("to avoid external network")
 	}
-	if m, ok := nettest.SupportsRawIPSocket(); !ok {
-		t.Skip(m)
+	if !nettest.SupportsRawSocket() {
+		t.Skipf("not supported on %s/%s", runtime.GOOS, runtime.GOARCH)
 	}
 
 	gaddr := net.IPAddr{IP: net.IPv4(224, 0, 0, 254)} // see RFC 4727
@@ -239,8 +239,8 @@
 		t.Fatal(err)
 	}
 	for i, ifi := range ift {
-		ip, ok := nettest.IsMulticastCapable("ip4", &ifi)
-		if !ok {
+		ip, err := nettest.MulticastSource("ip4", &ifi)
+		if err != nil {
 			continue
 		}
 		c, err := net.ListenPacket("ip4:253", ip.String()) // unicast address
diff --git a/ipv4/multicastsockopt_test.go b/ipv4/multicastsockopt_test.go
index fd783d0..e9f2c57 100644
--- a/ipv4/multicastsockopt_test.go
+++ b/ipv4/multicastsockopt_test.go
@@ -9,8 +9,8 @@
 	"runtime"
 	"testing"
 
-	"golang.org/x/net/internal/nettest"
 	"golang.org/x/net/ipv4"
+	"golang.org/x/net/nettest"
 )
 
 var packetConnMulticastSocketOptionTests = []struct {
@@ -29,15 +29,15 @@
 	case "aix", "fuchsia", "hurd", "js", "nacl", "plan9":
 		t.Skipf("not supported on %s", runtime.GOOS)
 	}
-	ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
-	if ifi == nil {
+	ifi, err := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
+	if err != nil {
 		t.Skipf("not available on %s", runtime.GOOS)
 	}
 
-	m, ok := nettest.SupportsRawIPSocket()
+	ok := nettest.SupportsRawSocket()
 	for _, tt := range packetConnMulticastSocketOptionTests {
 		if tt.net == "ip4" && !ok {
-			t.Log(m)
+			t.Logf("not supported on %s/%s", runtime.GOOS, runtime.GOARCH)
 			continue
 		}
 		c, err := net.ListenPacket(tt.net+tt.proto, tt.addr)
@@ -69,11 +69,11 @@
 	case "aix", "fuchsia", "hurd", "js", "nacl", "plan9":
 		t.Skipf("not supported on %s", runtime.GOOS)
 	}
-	if m, ok := nettest.SupportsRawIPSocket(); !ok {
-		t.Skip(m)
+	if !nettest.SupportsRawSocket() {
+		t.Skipf("not supported on %s/%s", runtime.GOOS, runtime.GOARCH)
 	}
-	ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
-	if ifi == nil {
+	ifi, err := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
+	if err != nil {
 		t.Skipf("not available on %s", runtime.GOOS)
 	}
 
diff --git a/ipv4/readwrite_test.go b/ipv4/readwrite_test.go
index acf87d1..5b8b9d3 100644
--- a/ipv4/readwrite_test.go
+++ b/ipv4/readwrite_test.go
@@ -14,8 +14,8 @@
 	"testing"
 
 	"golang.org/x/net/internal/iana"
-	"golang.org/x/net/internal/nettest"
 	"golang.org/x/net/ipv4"
+	"golang.org/x/net/nettest"
 )
 
 func BenchmarkReadWriteUnicast(b *testing.B) {
@@ -50,7 +50,7 @@
 			b.Fatal(err)
 		}
 		cm := ipv4.ControlMessage{TTL: 1}
-		ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
+		ifi, _ := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
 		if ifi != nil {
 			cm.IfIndex = ifi.Index
 		}
@@ -91,7 +91,8 @@
 	cm := ipv4.ControlMessage{
 		Src: net.IPv4(127, 0, 0, 1),
 	}
-	if ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback); ifi != nil {
+	ifi, _ := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
+	if ifi != nil {
 		cm.IfIndex = ifi.Index
 	}
 
@@ -231,12 +232,12 @@
 	defer p.Close()
 
 	dst := c.LocalAddr()
-	ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
+	ifi, _ := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
 	cf := ipv4.FlagTTL | ipv4.FlagSrc | ipv4.FlagDst | ipv4.FlagInterface
 	wb := []byte("HELLO-R-U-THERE")
 
 	if err := p.SetControlMessage(cf, true); err != nil { // probe before test
-		if nettest.ProtocolNotSupported(err) {
+		if protocolNotSupported(err) {
 			t.Skipf("not supported on %s", runtime.GOOS)
 		}
 		t.Fatal(err)
@@ -358,11 +359,11 @@
 func testPacketConnConcurrentReadWriteUnicast(t *testing.T, p *ipv4.PacketConn, data []byte, dst net.Addr, batch bool) {
 	t.Helper()
 
-	ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
+	ifi, _ := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
 	cf := ipv4.FlagTTL | ipv4.FlagSrc | ipv4.FlagDst | ipv4.FlagInterface
 
 	if err := p.SetControlMessage(cf, true); err != nil { // probe before test
-		if nettest.ProtocolNotSupported(err) {
+		if protocolNotSupported(err) {
 			t.Skipf("not supported on %s", runtime.GOOS)
 		}
 		t.Fatal(err)
diff --git a/ipv4/unicast_test.go b/ipv4/unicast_test.go
index a75f54e..a4ddfb7 100644
--- a/ipv4/unicast_test.go
+++ b/ipv4/unicast_test.go
@@ -14,8 +14,8 @@
 
 	"golang.org/x/net/icmp"
 	"golang.org/x/net/internal/iana"
-	"golang.org/x/net/internal/nettest"
 	"golang.org/x/net/ipv4"
+	"golang.org/x/net/nettest"
 )
 
 func TestPacketConnReadWriteUnicastUDP(t *testing.T) {
@@ -23,8 +23,7 @@
 	case "aix", "fuchsia", "hurd", "js", "nacl", "plan9", "windows":
 		t.Skipf("not supported on %s", runtime.GOOS)
 	}
-	ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
-	if ifi == nil {
+	if _, err := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback); err != nil {
 		t.Skipf("not available on %s", runtime.GOOS)
 	}
 
@@ -42,7 +41,7 @@
 
 	for i, toggle := range []bool{true, false, true} {
 		if err := p.SetControlMessage(cf, toggle); err != nil {
-			if nettest.ProtocolNotSupported(err) {
+			if protocolNotSupported(err) {
 				t.Logf("not supported on %s", runtime.GOOS)
 				continue
 			}
@@ -74,11 +73,10 @@
 	case "aix", "fuchsia", "hurd", "js", "nacl", "plan9", "windows":
 		t.Skipf("not supported on %s", runtime.GOOS)
 	}
-	if m, ok := nettest.SupportsRawIPSocket(); !ok {
-		t.Skip(m)
+	if !nettest.SupportsRawSocket() {
+		t.Skipf("not supported on %s/%s", runtime.GOOS, runtime.GOARCH)
 	}
-	ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
-	if ifi == nil {
+	if _, err := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback); err != nil {
 		t.Skipf("not available on %s", runtime.GOOS)
 	}
 
@@ -112,7 +110,7 @@
 			t.Fatal(err)
 		}
 		if err := p.SetControlMessage(cf, toggle); err != nil {
-			if nettest.ProtocolNotSupported(err) {
+			if protocolNotSupported(err) {
 				t.Logf("not supported on %s", runtime.GOOS)
 				continue
 			}
@@ -160,11 +158,10 @@
 	case "aix", "fuchsia", "hurd", "js", "nacl", "plan9", "windows":
 		t.Skipf("not supported on %s", runtime.GOOS)
 	}
-	if m, ok := nettest.SupportsRawIPSocket(); !ok {
-		t.Skip(m)
+	if !nettest.SupportsRawSocket() {
+		t.Skipf("not supported on %s/%s", runtime.GOOS, runtime.GOARCH)
 	}
-	ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
-	if ifi == nil {
+	if _, err := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback); err != nil {
 		t.Skipf("not available on %s", runtime.GOOS)
 	}
 
@@ -206,7 +203,7 @@
 			Dst:      dst.IP,
 		}
 		if err := r.SetControlMessage(cf, toggle); err != nil {
-			if nettest.ProtocolNotSupported(err) {
+			if protocolNotSupported(err) {
 				t.Logf("not supported on %s", runtime.GOOS)
 				continue
 			}
diff --git a/ipv4/unicastsockopt_test.go b/ipv4/unicastsockopt_test.go
index 9a279b7..7ff9acc 100644
--- a/ipv4/unicastsockopt_test.go
+++ b/ipv4/unicastsockopt_test.go
@@ -10,8 +10,8 @@
 	"testing"
 
 	"golang.org/x/net/internal/iana"
-	"golang.org/x/net/internal/nettest"
 	"golang.org/x/net/ipv4"
+	"golang.org/x/net/nettest"
 )
 
 func TestConnUnicastSocketOptions(t *testing.T) {
@@ -19,8 +19,7 @@
 	case "aix", "fuchsia", "hurd", "js", "nacl", "plan9", "windows":
 		t.Skipf("not supported on %s", runtime.GOOS)
 	}
-	ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
-	if ifi == nil {
+	if _, err := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback); err != nil {
 		t.Skipf("not available on %s", runtime.GOOS)
 	}
 
@@ -65,15 +64,14 @@
 	case "aix", "fuchsia", "hurd", "js", "nacl", "plan9", "windows":
 		t.Skipf("not supported on %s", runtime.GOOS)
 	}
-	ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
-	if ifi == nil {
+	if _, err := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback); err != nil {
 		t.Skipf("not available on %s", runtime.GOOS)
 	}
 
-	m, ok := nettest.SupportsRawIPSocket()
+	ok := nettest.SupportsRawSocket()
 	for _, tt := range packetConnUnicastSocketOptionTests {
 		if tt.net == "ip4" && !ok {
-			t.Log(m)
+			t.Logf("not supported on %s/%s", runtime.GOOS, runtime.GOARCH)
 			continue
 		}
 		c, err := net.ListenPacket(tt.net+tt.proto, tt.addr)
@@ -91,11 +89,10 @@
 	case "aix", "fuchsia", "hurd", "js", "nacl", "plan9", "windows":
 		t.Skipf("not supported on %s", runtime.GOOS)
 	}
-	if m, ok := nettest.SupportsRawIPSocket(); !ok {
-		t.Skip(m)
+	if !nettest.SupportsRawSocket() {
+		t.Skipf("not supported on %s/%s", runtime.GOOS, runtime.GOARCH)
 	}
-	ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
-	if ifi == nil {
+	if _, err := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback); err != nil {
 		t.Skipf("not available on %s", runtime.GOOS)
 	}