Source file
src/net/unixsock_windows_test.go
Documentation: net
1
2
3
4
5
6
7
8 package net
9
10 import (
11 "internal/syscall/windows/registry"
12 "os"
13 "reflect"
14 "runtime"
15 "strconv"
16 "testing"
17 )
18
19 func isBuild17063() bool {
20 k, err := registry.OpenKey(registry.LOCAL_MACHINE, `SOFTWARE\Microsoft\Windows NT\CurrentVersion`, registry.READ)
21 if err != nil {
22 return false
23 }
24 defer k.Close()
25
26 s, _, err := k.GetStringValue("CurrentBuild")
27 if err != nil {
28 return false
29 }
30 ver, err := strconv.Atoi(s)
31 if err != nil {
32 return false
33 }
34 return ver >= 17063
35 }
36
37 func TestUnixConnLocalWindows(t *testing.T) {
38 switch runtime.GOARCH {
39 case "386":
40 t.Skip("not supported on windows/386, see golang.org/issue/27943")
41 case "arm":
42 t.Skip("not supported on windows/arm, see golang.org/issue/28061")
43 }
44 if !isBuild17063() {
45 t.Skip("unix test")
46 }
47
48 handler := func(ls *localServer, ln Listener) {}
49 for _, laddr := range []string{"", testUnixAddr()} {
50 laddr := laddr
51 taddr := testUnixAddr()
52 ta, err := ResolveUnixAddr("unix", taddr)
53 if err != nil {
54 t.Fatal(err)
55 }
56 ln, err := ListenUnix("unix", ta)
57 if err != nil {
58 t.Fatal(err)
59 }
60 ls, err := (&streamListener{Listener: ln}).newLocalServer()
61 if err != nil {
62 t.Fatal(err)
63 }
64 defer ls.teardown()
65 if err := ls.buildup(handler); err != nil {
66 t.Fatal(err)
67 }
68
69 la, err := ResolveUnixAddr("unix", laddr)
70 if err != nil {
71 t.Fatal(err)
72 }
73 c, err := DialUnix("unix", la, ta)
74 if err != nil {
75 t.Fatal(err)
76 }
77 defer func() {
78 c.Close()
79 if la != nil {
80 defer os.Remove(laddr)
81 }
82 }()
83 if _, err := c.Write([]byte("UNIXCONN LOCAL AND REMOTE NAME TEST")); err != nil {
84 t.Fatal(err)
85 }
86
87 if laddr == "" {
88 laddr = "@"
89 }
90 var connAddrs = [3]struct{ got, want Addr }{
91 {ln.Addr(), ta},
92 {c.LocalAddr(), &UnixAddr{Name: laddr, Net: "unix"}},
93 {c.RemoteAddr(), ta},
94 }
95 for _, ca := range connAddrs {
96 if !reflect.DeepEqual(ca.got, ca.want) {
97 t.Fatalf("got %#v, expected %#v", ca.got, ca.want)
98 }
99 }
100 }
101 }
102
View as plain text