]> Cypherpunks repositories - gostls13.git/commitdiff
net: enable unixpacket test on available platforms
authorMikio Hara <mikioh.mikioh@gmail.com>
Wed, 2 Apr 2014 10:43:39 +0000 (19:43 +0900)
committerMikio Hara <mikioh.mikioh@gmail.com>
Wed, 2 Apr 2014 10:43:39 +0000 (19:43 +0900)
DragonFlyBSD, FreeBSD 9 and beyond, NetBSD 6 and beyond, and
Solaris (illumos) support AF_UNIX+SOCK_SEQPACKET socket.

LGTM=dave
R=golang-codereviews, dave
CC=golang-codereviews
https://golang.org/cl/83390043

src/pkg/net/conn_test.go
src/pkg/net/protoconn_test.go
src/pkg/net/server_test.go

index 78aaa130df8acd43d756773b6fb8cf79908be8f3..37bb4e2c0710ee7022a6168ba708d43a0dec8b0f 100644 (file)
@@ -16,11 +16,11 @@ import (
 
 var connTests = []struct {
        net  string
-       addr func() string
+       addr string
 }{
-       {"tcp", func() string { return "127.0.0.1:0" }},
-       {"unix", testUnixAddr},
-       {"unixpacket", testUnixAddr},
+       {"tcp", "127.0.0.1:0"},
+       {"unix", testUnixAddr()},
+       {"unixpacket", testUnixAddr()},
 }
 
 // someTimeout is used just to test that net.Conn implementations
@@ -31,18 +31,21 @@ const someTimeout = 10 * time.Second
 func TestConnAndListener(t *testing.T) {
        for _, tt := range connTests {
                switch tt.net {
-               case "unix", "unixpacket":
+               case "unix":
                        switch runtime.GOOS {
-                       case "plan9", "windows", "nacl":
+                       case "nacl", "plan9", "windows":
                                continue
                        }
-                       if tt.net == "unixpacket" && runtime.GOOS != "linux" {
+               case "unixpacket":
+                       switch runtime.GOOS {
+                       case "darwin", "nacl", "openbsd", "plan9", "windows":
+                               continue
+                       case "freebsd": // FreeBSD 8 doesn't support unixpacket
                                continue
                        }
                }
 
-               addr := tt.addr()
-               ln, err := Listen(tt.net, addr)
+               ln, err := Listen(tt.net, tt.addr)
                if err != nil {
                        t.Fatalf("Listen failed: %v", err)
                }
@@ -52,7 +55,7 @@ func TestConnAndListener(t *testing.T) {
                        case "unix", "unixpacket":
                                os.Remove(addr)
                        }
-               }(ln, tt.net, addr)
+               }(ln, tt.net, tt.addr)
                if ln.Addr().Network() != tt.net {
                        t.Fatalf("got %v; expected %v", ln.Addr().Network(), tt.net)
                }
index 5a8958b086646545e356b03e5f81002fc33ac3ca..47ae0efde39a64e796e3f11cdafbe525c788a5b2 100644 (file)
@@ -19,7 +19,7 @@ import (
 // also uses /tmp directory in case it is prohibited to create UNIX
 // sockets in TMPDIR.
 func testUnixAddr() string {
-       f, err := ioutil.TempFile("/tmp", "nettest")
+       f, err := ioutil.TempFile("", "nettest")
        if err != nil {
                panic(err)
        }
index 9194a8ec24dd077fcd7b7defa15e78970528f594..86ebfb3e9561b36442c55aa337b10923bcaa375c 100644 (file)
@@ -9,12 +9,11 @@ import (
        "io"
        "os"
        "runtime"
-       "strconv"
        "testing"
        "time"
 )
 
-func skipServerTest(net, unixsotype, addr string, ipv6, ipv4map, linuxonly bool) bool {
+func skipServerTest(net, unixsotype, addr string, ipv6, ipv4map, linuxOnly bool) bool {
        switch runtime.GOOS {
        case "linux":
        case "plan9", "windows":
@@ -23,7 +22,7 @@ func skipServerTest(net, unixsotype, addr string, ipv6, ipv4map, linuxonly bool)
                        return true
                }
        default:
-               if net == unixsotype && linuxonly {
+               if net == unixsotype && linuxOnly {
                        return true
                }
        }
@@ -42,21 +41,15 @@ func skipServerTest(net, unixsotype, addr string, ipv6, ipv4map, linuxonly bool)
        return false
 }
 
-func tempfile(filename string) string {
-       // use /tmp in case it is prohibited to create
-       // UNIX sockets in TMPDIR
-       return "/tmp/" + filename + "." + strconv.Itoa(os.Getpid())
-}
-
 var streamConnServerTests = []struct {
-       snet    string // server side
-       saddr   string
-       cnet    string // client side
-       caddr   string
-       ipv6    bool // test with underlying AF_INET6 socket
-       ipv4map bool // test with IPv6 IPv4-mapping functionality
-       empty   bool // test with empty data
-       linux   bool // test with abstract unix domain socket, a Linux-ism
+       snet      string // server side
+       saddr     string
+       cnet      string // client side
+       caddr     string
+       ipv6      bool // test with underlying AF_INET6 socket
+       ipv4map   bool // test with IPv6 IPv4-mapping functionality
+       empty     bool // test with empty data
+       linuxOnly bool // test with abstract unix domain socket, a Linux-ism
 }{
        {snet: "tcp", saddr: "", cnet: "tcp", caddr: "127.0.0.1"},
        {snet: "tcp", saddr: "0.0.0.0", cnet: "tcp", caddr: "127.0.0.1"},
@@ -93,13 +86,13 @@ var streamConnServerTests = []struct {
 
        {snet: "tcp6", saddr: "[::1]", cnet: "tcp6", caddr: "[::1]", ipv6: true},
 
-       {snet: "unix", saddr: tempfile("gotest1.net"), cnet: "unix", caddr: tempfile("gotest1.net.local")},
-       {snet: "unix", saddr: "@gotest2/net", cnet: "unix", caddr: "@gotest2/net.local", linux: true},
+       {snet: "unix", saddr: testUnixAddr(), cnet: "unix", caddr: testUnixAddr()},
+       {snet: "unix", saddr: "@gotest2/net", cnet: "unix", caddr: "@gotest2/net.local", linuxOnly: true},
 }
 
 func TestStreamConnServer(t *testing.T) {
        for _, tt := range streamConnServerTests {
-               if skipServerTest(tt.snet, "unix", tt.saddr, tt.ipv6, tt.ipv4map, tt.linux) {
+               if skipServerTest(tt.snet, "unix", tt.saddr, tt.ipv6, tt.ipv4map, tt.linuxOnly) {
                        continue
                }
 
@@ -137,21 +130,28 @@ func TestStreamConnServer(t *testing.T) {
 }
 
 var seqpacketConnServerTests = []struct {
-       net   string
-       saddr string // server address
-       caddr string // client address
-       empty bool   // test with empty data
+       net       string
+       saddr     string // server address
+       caddr     string // client address
+       empty     bool   // test with empty data
+       linuxOnly bool   // test with abstract unix domain socket, a Linux-ism
 }{
-       {net: "unixpacket", saddr: tempfile("/gotest3.net"), caddr: tempfile("gotest3.net.local")},
-       {net: "unixpacket", saddr: "@gotest4/net", caddr: "@gotest4/net.local"},
+       {net: "unixpacket", saddr: testUnixAddr(), caddr: testUnixAddr()},
+       {net: "unixpacket", saddr: "@gotest4/net", caddr: "@gotest4/net.local", linuxOnly: true},
 }
 
 func TestSeqpacketConnServer(t *testing.T) {
-       if runtime.GOOS != "linux" {
+       switch runtime.GOOS {
+       case "darwin", "nacl", "openbsd", "plan9", "windows":
+               fallthrough
+       case "freebsd": // FreeBSD 8 doesn't support unixpacket
                t.Skipf("skipping test on %q", runtime.GOOS)
        }
 
        for _, tt := range seqpacketConnServerTests {
+               if runtime.GOOS != "linux" && tt.linuxOnly {
+                       continue
+               }
                listening := make(chan string)
                done := make(chan int)
                switch tt.net {
@@ -248,15 +248,15 @@ func runStreamConnClient(t *testing.T, net, taddr string, isEmpty bool) {
 var testDatagram = flag.Bool("datagram", false, "whether to test udp and unixgram")
 
 var datagramPacketConnServerTests = []struct {
-       snet    string // server side
-       saddr   string
-       cnet    string // client side
-       caddr   string
-       ipv6    bool // test with underlying AF_INET6 socket
-       ipv4map bool // test with IPv6 IPv4-mapping functionality
-       dial    bool // test with Dial or DialUnix
-       empty   bool // test with empty data
-       linux   bool // test with abstract unix domain socket, a Linux-ism
+       snet      string // server side
+       saddr     string
+       cnet      string // client side
+       caddr     string
+       ipv6      bool // test with underlying AF_INET6 socket
+       ipv4map   bool // test with IPv6 IPv4-mapping functionality
+       dial      bool // test with Dial or DialUnix
+       empty     bool // test with empty data
+       linuxOnly bool // test with abstract unix domain socket, a Linux-ism
 }{
        {snet: "udp", saddr: "", cnet: "udp", caddr: "127.0.0.1"},
        {snet: "udp", saddr: "0.0.0.0", cnet: "udp", caddr: "127.0.0.1"},
@@ -301,12 +301,12 @@ var datagramPacketConnServerTests = []struct {
        {snet: "udp", saddr: "[::1]", cnet: "udp", caddr: "[::1]", ipv6: true, empty: true},
        {snet: "udp", saddr: "[::1]", cnet: "udp", caddr: "[::1]", ipv6: true, dial: true, empty: true},
 
-       {snet: "unixgram", saddr: tempfile("gotest5.net"), cnet: "unixgram", caddr: tempfile("gotest5.net.local")},
-       {snet: "unixgram", saddr: tempfile("gotest5.net"), cnet: "unixgram", caddr: tempfile("gotest5.net.local"), dial: true},
-       {snet: "unixgram", saddr: tempfile("gotest5.net"), cnet: "unixgram", caddr: tempfile("gotest5.net.local"), empty: true},
-       {snet: "unixgram", saddr: tempfile("gotest5.net"), cnet: "unixgram", caddr: tempfile("gotest5.net.local"), dial: true, empty: true},
+       {snet: "unixgram", saddr: testUnixAddr(), cnet: "unixgram", caddr: testUnixAddr()},
+       {snet: "unixgram", saddr: testUnixAddr(), cnet: "unixgram", caddr: testUnixAddr(), dial: true},
+       {snet: "unixgram", saddr: testUnixAddr(), cnet: "unixgram", caddr: testUnixAddr(), empty: true},
+       {snet: "unixgram", saddr: testUnixAddr(), cnet: "unixgram", caddr: testUnixAddr(), dial: true, empty: true},
 
-       {snet: "unixgram", saddr: "@gotest6/net", cnet: "unixgram", caddr: "@gotest6/net.local", linux: true},
+       {snet: "unixgram", saddr: "@gotest6/net", cnet: "unixgram", caddr: "@gotest6/net.local", linuxOnly: true},
 }
 
 func TestDatagramPacketConnServer(t *testing.T) {
@@ -315,7 +315,7 @@ func TestDatagramPacketConnServer(t *testing.T) {
        }
 
        for _, tt := range datagramPacketConnServerTests {
-               if skipServerTest(tt.snet, "unixgram", tt.saddr, tt.ipv6, tt.ipv4map, tt.linux) {
+               if skipServerTest(tt.snet, "unixgram", tt.saddr, tt.ipv6, tt.ipv4map, tt.linuxOnly) {
                        continue
                }