Source file
src/net/unixsock_windows_test.go
1
2
3
4
5
6
7 package net
8
9 import (
10 "internal/syscall/windows"
11 "os"
12 "reflect"
13 "syscall"
14 "testing"
15 )
16
17 func TestUnixConnLocalWindows(t *testing.T) {
18 if !windows.SupportUnixSocket() {
19 t.Skip("unix test")
20 }
21 handler := func(ls *localServer, ln Listener) {}
22 for _, laddr := range []string{"", testUnixAddr(t)} {
23 taddr := testUnixAddr(t)
24 ta, err := ResolveUnixAddr("unix", taddr)
25 if err != nil {
26 t.Fatal(err)
27 }
28 ln, err := ListenUnix("unix", ta)
29 if err != nil {
30 t.Fatal(err)
31 }
32 ls := (&streamListener{Listener: ln}).newLocalServer()
33 defer ls.teardown()
34 if err := ls.buildup(handler); err != nil {
35 t.Fatal(err)
36 }
37
38 la, err := ResolveUnixAddr("unix", laddr)
39 if err != nil {
40 t.Fatal(err)
41 }
42 c, err := DialUnix("unix", la, ta)
43 if err != nil {
44 t.Fatal(err)
45 }
46 defer func() {
47 c.Close()
48 if la != nil {
49 defer os.Remove(laddr)
50 }
51 }()
52 if _, err := c.Write([]byte("UNIXCONN LOCAL AND REMOTE NAME TEST")); err != nil {
53 t.Fatal(err)
54 }
55
56 if laddr == "" {
57 laddr = "@"
58 }
59 var connAddrs = [3]struct{ got, want Addr }{
60 {ln.Addr(), ta},
61 {c.LocalAddr(), &UnixAddr{Name: laddr, Net: "unix"}},
62 {c.RemoteAddr(), ta},
63 }
64 for _, ca := range connAddrs {
65 if !reflect.DeepEqual(ca.got, ca.want) {
66 t.Fatalf("got %#v, expected %#v", ca.got, ca.want)
67 }
68 }
69 }
70 }
71
72 func TestUnixAbstractLongNameNulStart(t *testing.T) {
73 if !windows.SupportUnixSocket() {
74 t.Skip("unix test")
75 }
76
77
78
79 paddedAddr := make([]byte, len(syscall.RawSockaddrUnix{}.Path))
80 copy(paddedAddr, "\x00abstract_test")
81
82 la, err := ResolveUnixAddr("unix", string(paddedAddr))
83 if err != nil {
84 t.Fatal(err)
85 }
86 c, err := ListenUnix("unix", la)
87 if err != nil {
88 t.Fatal(err)
89 }
90 c.Close()
91 }
92
93 func TestModeSocket(t *testing.T) {
94 if !windows.SupportUnixSocket() {
95 t.Skip("unix test")
96 }
97
98 addr := testUnixAddr(t)
99
100 l, err := Listen("unix", addr)
101 if err != nil {
102 t.Fatal(err)
103 }
104 defer l.Close()
105
106 stat, err := os.Stat(addr)
107 if err != nil {
108 t.Fatal(err)
109 }
110
111 mode := stat.Mode()
112 if mode&os.ModeSocket == 0 {
113 t.Fatalf("%v should have ModeSocket", mode)
114 }
115 }
116
View as plain text