1 // Copyright 2017 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
15 func TestUnixgramAutobind(t
*testing
.T
) {
16 laddr
:= &UnixAddr
{Name
: "", Net
: "unixgram"}
17 c1
, err
:= ListenUnixgram("unixgram", laddr
)
23 // retrieve the autobind address
24 autoAddr
:= c1
.LocalAddr().(*UnixAddr
)
25 if len(autoAddr
.Name
) <= 1 {
26 t
.Fatalf("invalid autobind address: %v", autoAddr
)
28 if autoAddr
.Name
[0] != '@' {
29 t
.Fatalf("invalid autobind address: %v", autoAddr
)
32 c2
, err
:= DialUnix("unixgram", nil, autoAddr
)
38 if !reflect
.DeepEqual(c1
.LocalAddr(), c2
.RemoteAddr()) {
39 t
.Fatalf("expected autobind address %v, got %v", c1
.LocalAddr(), c2
.RemoteAddr())
43 func TestUnixAutobindClose(t
*testing
.T
) {
44 laddr
:= &UnixAddr
{Name
: "", Net
: "unix"}
45 ln
, err
:= ListenUnix("unix", laddr
)
52 func TestUnixgramLinuxAbstractLongName(t
*testing
.T
) {
53 if !testableNetwork("unixgram") {
54 t
.Skip("abstract unix socket long name test")
57 // Create an abstract socket name whose length is exactly
58 // the maximum RawSockkaddrUnix Path len
59 rsu
:= syscall
.RawSockaddrUnix
{}
60 addrBytes
:= make([]byte, len(rsu
.Path
))
61 copy(addrBytes
, "@abstract_test")
62 addr
:= string(addrBytes
)
64 la
, err
:= ResolveUnixAddr("unixgram", addr
)
68 c
, err
:= ListenUnixgram("unixgram", la
)
74 off
:= make(chan bool)
75 data
:= [5]byte{1, 2, 3, 4, 5}
77 defer func() { off
<- true }()
78 s
, err
:= syscall
.Socket(syscall
.AF_UNIX
, syscall
.SOCK_DGRAM
, 0)
83 defer syscall
.Close(s
)
84 rsa
:= &syscall
.SockaddrUnix
{Name
: addr
}
85 if err
:= syscall
.Sendto(s
, data
[:], 0, rsa
); err
!= nil {
93 c
.SetReadDeadline(time
.Now().Add(100 * time
.Millisecond
))
94 n
, from
, err
:= c
.ReadFrom(b
)
99 t
.Fatalf("unexpected peer address: %v", from
)
101 if !bytes
.Equal(b
[:n
], data
[:]) {
102 t
.Fatalf("got %v; want %v", b
[:n
], data
[:])