summaryrefslogtreecommitdiffstats
path: root/src/net/unixsock_windows_test.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/net/unixsock_windows_test.go100
1 files changed, 100 insertions, 0 deletions
diff --git a/src/net/unixsock_windows_test.go b/src/net/unixsock_windows_test.go
new file mode 100644
index 0000000..5dccc14
--- /dev/null
+++ b/src/net/unixsock_windows_test.go
@@ -0,0 +1,100 @@
+// Copyright 2018 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 windows
+
+package net
+
+import (
+ "internal/syscall/windows/registry"
+ "os"
+ "reflect"
+ "runtime"
+ "strconv"
+ "testing"
+)
+
+func isBuild17063() bool {
+ k, err := registry.OpenKey(registry.LOCAL_MACHINE, `SOFTWARE\Microsoft\Windows NT\CurrentVersion`, registry.READ)
+ if err != nil {
+ return false
+ }
+ defer k.Close()
+
+ s, _, err := k.GetStringValue("CurrentBuild")
+ if err != nil {
+ return false
+ }
+ ver, err := strconv.Atoi(s)
+ if err != nil {
+ return false
+ }
+ return ver >= 17063
+}
+
+func TestUnixConnLocalWindows(t *testing.T) {
+ switch runtime.GOARCH {
+ case "386":
+ t.Skip("not supported on windows/386, see golang.org/issue/27943")
+ case "arm":
+ t.Skip("not supported on windows/arm, see golang.org/issue/28061")
+ }
+ if !isBuild17063() {
+ t.Skip("unix test")
+ }
+
+ handler := func(ls *localServer, ln Listener) {}
+ for _, laddr := range []string{"", testUnixAddr()} {
+ laddr := laddr
+ taddr := testUnixAddr()
+ ta, err := ResolveUnixAddr("unix", taddr)
+ if err != nil {
+ t.Fatal(err)
+ }
+ ln, err := ListenUnix("unix", ta)
+ if err != nil {
+ t.Fatal(err)
+ }
+ ls, err := (&streamListener{Listener: ln}).newLocalServer()
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer ls.teardown()
+ if err := ls.buildup(handler); err != nil {
+ t.Fatal(err)
+ }
+
+ la, err := ResolveUnixAddr("unix", laddr)
+ if err != nil {
+ t.Fatal(err)
+ }
+ c, err := DialUnix("unix", la, ta)
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer func() {
+ c.Close()
+ if la != nil {
+ defer os.Remove(laddr)
+ }
+ }()
+ if _, err := c.Write([]byte("UNIXCONN LOCAL AND REMOTE NAME TEST")); err != nil {
+ t.Fatal(err)
+ }
+
+ if laddr == "" {
+ laddr = "@"
+ }
+ var connAddrs = [3]struct{ got, want Addr }{
+ {ln.Addr(), ta},
+ {c.LocalAddr(), &UnixAddr{Name: laddr, Net: "unix"}},
+ {c.RemoteAddr(), ta},
+ }
+ for _, ca := range connAddrs {
+ if !reflect.DeepEqual(ca.got, ca.want) {
+ t.Fatalf("got %#v, expected %#v", ca.got, ca.want)
+ }
+ }
+ }
+}