]> Cypherpunks repositories - gostls13.git/commitdiff
net: re-enable raw socket tests on windows
authorAlex Brainman <alex.brainman@gmail.com>
Tue, 24 Sep 2013 03:15:49 +0000 (13:15 +1000)
committerAlex Brainman <alex.brainman@gmail.com>
Tue, 24 Sep 2013 03:15:49 +0000 (13:15 +1000)
Since CL 38bf89161a72 raw socket tests are not executed
on windows builders. This change re-enable them again.
It will attempt to run raw socket tests only if user
is permitted to create raw socket by OS.

Fixes #6392

R=golang-dev
CC=golang-dev, mikioh.mikioh, rsc
https://golang.org/cl/13422044

src/pkg/net/fd_plan9.go
src/pkg/net/fd_unix.go
src/pkg/net/fd_windows.go
src/pkg/net/ipraw_test.go
src/pkg/net/multicast_test.go
src/pkg/net/packetconn_test.go
src/pkg/net/protoconn_test.go
src/pkg/syscall/ztypes_windows.go

index 38515f20e3dc03cbd66ab8716ba35f37f258a122..acc8294021716f9742f1576a20ce96851c209bcb 100644 (file)
@@ -125,3 +125,7 @@ func setReadBuffer(fd *netFD, bytes int) error {
 func setWriteBuffer(fd *netFD, bytes int) error {
        return syscall.EPLAN9
 }
+
+func skipRawSocketTests() (skip bool, skipmsg string, err error) {
+       return true, "skipping test on plan9", nil
+}
index 2e62ba0ec47e315e6b3fdc22c5f3b940e5546351..9ed4f753649aeeb13ee0a6404503eba919e3a2fe 100644 (file)
@@ -473,3 +473,10 @@ func (fd *netFD) dup() (f *os.File, err error) {
 func closesocket(s int) error {
        return syscall.Close(s)
 }
+
+func skipRawSocketTests() (skip bool, skipmsg string, err error) {
+       if os.Getuid() != 0 {
+               return true, "skipping test; must be root", nil
+       }
+       return false, "", nil
+}
index d480fb40579308800b8c838d50cf88296f8bdd0e..64d56c73e06c4316fb0c9fcc143257120db03775 100644 (file)
@@ -568,6 +568,25 @@ func (fd *netFD) accept(toAddr func(syscall.Sockaddr) Addr) (*netFD, error) {
        return netfd, nil
 }
 
+func skipRawSocketTests() (skip bool, skipmsg string, err error) {
+       // From http://msdn.microsoft.com/en-us/library/windows/desktop/ms740548.aspx:
+       // Note: To use a socket of type SOCK_RAW requires administrative privileges.
+       // Users running Winsock applications that use raw sockets must be a member of
+       // the Administrators group on the local computer, otherwise raw socket calls
+       // will fail with an error code of WSAEACCES. On Windows Vista and later, access
+       // for raw sockets is enforced at socket creation. In earlier versions of Windows,
+       // access for raw sockets is enforced during other socket operations.
+       s, err := syscall.Socket(syscall.AF_INET, syscall.SOCK_RAW, 0)
+       if err == syscall.WSAEACCES {
+               return true, "skipping test; no access to raw socket allowed", nil
+       }
+       if err != nil {
+               return true, "", err
+       }
+       defer syscall.Closesocket(s)
+       return false, "", nil
+}
+
 // Unimplemented functions.
 
 func (fd *netFD) dup() (*os.File, error) {
index 13c977cac4d0ccf543a7239c205d2baecd9be4a6..ea183f1d3ebe36d741ad701c5a2890d1f5b800f3 100644 (file)
@@ -59,6 +59,14 @@ func init() {
        }
 }
 
+func skipRawSocketTest(t *testing.T) (skip bool, skipmsg string) {
+       skip, skipmsg, err := skipRawSocketTests()
+       if err != nil {
+               t.Fatal(err)
+       }
+       return skip, skipmsg
+}
+
 func TestResolveIPAddr(t *testing.T) {
        for _, tt := range resolveIPAddrTests {
                addr, err := ResolveIPAddr(tt.net, tt.litAddrOrName)
@@ -80,17 +88,8 @@ var icmpEchoTests = []struct {
 }
 
 func TestConnICMPEcho(t *testing.T) {
-       switch runtime.GOOS {
-       case "plan9":
-               t.Skipf("skipping test on %q", runtime.GOOS)
-       case "windows":
-               if testing.Short() || !*testExternal {
-                       t.Skipf("skipping test on %q to avoid network firewall", runtime.GOOS)
-               }
-       default:
-               if os.Getuid() != 0 {
-                       t.Skip("skipping test; must be root")
-               }
+       if skip, skipmsg := skipRawSocketTest(t); skip {
+               t.Skip(skipmsg)
        }
 
        for i, tt := range icmpEchoTests {
@@ -157,17 +156,8 @@ func TestConnICMPEcho(t *testing.T) {
 }
 
 func TestPacketConnICMPEcho(t *testing.T) {
-       switch runtime.GOOS {
-       case "plan9":
-               t.Skipf("skipping test on %q", runtime.GOOS)
-       case "windows":
-               if testing.Short() || !*testExternal {
-                       t.Skipf("skipping test on %q to avoid network firewall", runtime.GOOS)
-               }
-       default:
-               if os.Getuid() != 0 {
-                       t.Skip("skipping test; must be root")
-               }
+       if skip, skipmsg := skipRawSocketTest(t); skip {
+               t.Skip(skipmsg)
        }
 
        for i, tt := range icmpEchoTests {
index 31a650aa28003c4c005370f87ec4f55ab26dd898..5660fd42f8c712feea6a4c8050444b094bc2349e 100644 (file)
@@ -25,10 +25,6 @@ var ipv4MulticastListenerTests = []struct {
 // port.
 func TestIPv4MulticastListener(t *testing.T) {
        switch runtime.GOOS {
-       case "windows":
-               if testing.Short() || !*testExternal {
-                       t.Skipf("skipping test on %q to avoid network firewall", runtime.GOOS)
-               }
        case "plan9":
                t.Skipf("skipping test on %q", runtime.GOOS)
        }
index e64457bd37874155f8227d0d3a617aca95cc6220..53e8be9c89214fea63f7bd8eea89260eeec5fe72 100644 (file)
@@ -26,20 +26,9 @@ func packetConnTestData(t *testing.T, net string, i int) ([]byte, func()) {
        case "udp":
                return []byte("UDP PACKETCONN TEST"), nil
        case "ip":
-               switch runtime.GOOS {
-               case "plan9":
+               if skip, skipmsg := skipRawSocketTest(t); skip {
                        return nil, func() {
-                               t.Logf("skipping %q test on %q", net, runtime.GOOS)
-                       }
-               case "windows":
-                       if testing.Short() || !*testExternal {
-                               t.Skipf("skipping test on %q to avoid network firewall", runtime.GOOS)
-                       }
-               default:
-                       if os.Getuid() != 0 {
-                               return nil, func() {
-                                       t.Logf("skipping %q test; must be root", net)
-                               }
+                               t.Logf(skipmsg)
                        }
                }
                b, err := (&icmpMessage{
index 2c268a91d210b68367cd6939d8c19abde5f66a8b..5a8958b086646545e356b03e5f81002fc33ac3ca 100644 (file)
@@ -173,17 +173,8 @@ func TestUDPConnSpecificMethods(t *testing.T) {
 }
 
 func TestIPConnSpecificMethods(t *testing.T) {
-       switch runtime.GOOS {
-       case "plan9":
-               t.Skipf("skipping test on %q", runtime.GOOS)
-       case "windows":
-               if testing.Short() || !*testExternal {
-                       t.Skipf("skipping test on %q to avoid network firewall", runtime.GOOS)
-               }
-       default:
-               if os.Getuid() != 0 {
-                       t.Skipf("skipping test; must be root")
-               }
+       if skip, skipmsg := skipRawSocketTest(t); skip {
+               t.Skip(skipmsg)
        }
 
        la, err := ResolveIPAddr("ip4", "127.0.0.1")
index e706e89f99036e2572ffb1f99ce627f2cd04e339..bdc15ce3bc5da847a3829f0549b581c101656876 100644 (file)
@@ -22,6 +22,7 @@ const (
        ERROR_OPERATION_ABORTED   Errno = 995
        ERROR_IO_PENDING          Errno = 997
        ERROR_NOT_FOUND           Errno = 1168
+       WSAEACCES                 Errno = 10013
 )
 
 const (