"errors"
"fmt"
"os"
+ "path/filepath"
"sync"
"testing"
"time"
)
-// testUnixAddr uses os.CreateTemp to get a name that is unique.
-func testUnixAddr() string {
- f, err := os.CreateTemp("", "go-nettest")
+// testUnixAddr uses os.MkdirTemp to get a name that is unique.
+func testUnixAddr(t testing.TB) string {
+ // Pass an empty pattern to get a directory name that is as short as possible.
+ // If we end up with a name longer than the sun_path field in the sockaddr_un
+ // struct, we won't be able to make the syscall to open the socket.
+ d, err := os.MkdirTemp("", "")
if err != nil {
- panic(err)
+ t.Fatal(err)
}
- addr := f.Name()
- f.Close()
- os.Remove(addr)
- return addr
+ t.Cleanup(func() {
+ if err := os.RemoveAll(d); err != nil {
+ t.Error(err)
+ }
+ })
+ return filepath.Join(d, "sock")
}
func newLocalListener(t testing.TB, network string) Listener {
return listen("tcp6", "[::1]:0")
}
case "unix", "unixpacket":
- return listen(network, testUnixAddr())
+ return listen(network, testUnixAddr(t))
}
t.Helper()
return listenPacket("udp6", "[::1]:0")
}
case "unixgram":
- return listenPacket(network, testUnixAddr())
+ return listenPacket(network, testUnixAddr(t))
}
t.Helper()
return []byte("PACKETCONN TEST"), nil
}
-var packetConnTests = []struct {
- net string
- addr1 string
- addr2 string
-}{
- {"udp", "127.0.0.1:0", "127.0.0.1:0"},
- {"unixgram", testUnixAddr(), testUnixAddr()},
-}
-
func TestPacketConn(t *testing.T) {
+ var packetConnTests = []struct {
+ net string
+ addr1 string
+ addr2 string
+ }{
+ {"udp", "127.0.0.1:0", "127.0.0.1:0"},
+ {"unixgram", testUnixAddr(t), testUnixAddr(t)},
+ }
+
closer := func(c PacketConn, net, addr1, addr2 string) {
c.Close()
switch net {
}
func TestConnAndPacketConn(t *testing.T) {
+ var packetConnTests = []struct {
+ net string
+ addr1 string
+ addr2 string
+ }{
+ {"udp", "127.0.0.1:0", "127.0.0.1:0"},
+ {"unixgram", testUnixAddr(t), testUnixAddr(t)},
+ }
+
closer := func(c PacketConn, net, addr1, addr2 string) {
c.Close()
switch net {
t.Skip("unix test")
}
- addr := testUnixAddr()
+ addr := testUnixAddr(t)
la, err := ResolveUnixAddr("unix", addr)
if err != nil {
t.Fatal(err)
t.Skip("unixgram test")
}
- addr1, addr2, addr3 := testUnixAddr(), testUnixAddr(), testUnixAddr()
+ addr1, addr2, addr3 := testUnixAddr(t), testUnixAddr(t), testUnixAddr(t)
a1, err := ResolveUnixAddr("unixgram", addr1)
if err != nil {
}
}
-var unixAndUnixpacketServerTests = []struct {
- network, address string
-}{
- {"unix", testUnixAddr()},
- {"unix", "@nettest/go/unix"},
-
- {"unixpacket", testUnixAddr()},
- {"unixpacket", "@nettest/go/unixpacket"},
-}
-
// TestUnixAndUnixpacketServer tests concurrent accept-read-write
// servers
func TestUnixAndUnixpacketServer(t *testing.T) {
+ var unixAndUnixpacketServerTests = []struct {
+ network, address string
+ }{
+ {"unix", testUnixAddr(t)},
+ {"unix", "@nettest/go/unix"},
+
+ {"unixpacket", testUnixAddr(t)},
+ {"unixpacket", "@nettest/go/unixpacket"},
+ }
+
const N = 3
for i, tt := range unixAndUnixpacketServerTests {
}
}
-var unixgramServerTests = []struct {
- saddr string // server endpoint
- caddr string // client endpoint
- dial bool // test with Dial
-}{
- {saddr: testUnixAddr(), caddr: testUnixAddr()},
- {saddr: testUnixAddr(), caddr: testUnixAddr(), dial: true},
-
- {saddr: "@nettest/go/unixgram/server", caddr: "@nettest/go/unixgram/client"},
-}
-
func TestUnixgramServer(t *testing.T) {
+ var unixgramServerTests = []struct {
+ saddr string // server endpoint
+ caddr string // client endpoint
+ dial bool // test with Dial
+ }{
+ {saddr: testUnixAddr(t), caddr: testUnixAddr(t)},
+ {saddr: testUnixAddr(t), caddr: testUnixAddr(t), dial: true},
+
+ {saddr: "@nettest/go/unixgram/server", caddr: "@nettest/go/unixgram/client"},
+ }
+
for i, tt := range unixgramServerTests {
if !testableListenArgs("unixgram", tt.saddr, "") {
t.Logf("skipping %s test", "unixgram "+tt.saddr+"<-"+tt.caddr)
}
func testSpliceNoUnixgram(t *testing.T) {
- addr, err := ResolveUnixAddr("unixgram", testUnixAddr())
+ addr, err := ResolveUnixAddr("unixgram", testUnixAddr(t))
if err != nil {
t.Fatal(err)
}
testenv.SkipFlaky(t, 15157)
}
- addr := testUnixAddr()
+ addr := testUnixAddr(t)
la, err := ResolveUnixAddr("unixgram", addr)
if err != nil {
t.Fatal(err)
t.Skip("unixgram test")
}
- addr := testUnixAddr()
+ addr := testUnixAddr(t)
laddr, err := ResolveUnixAddr("unixgram", addr)
if err != nil {
t.Fatal(err)
}
func testUnixgramWritePacketConn(t *testing.T, raddr *UnixAddr) {
- addr := testUnixAddr()
+ addr := testUnixAddr(t)
c, err := ListenPacket("unixgram", addr)
if err != nil {
t.Fatal(err)
}
handler := func(ls *localServer, ln Listener) {}
- for _, laddr := range []string{"", testUnixAddr()} {
+ for _, laddr := range []string{"", testUnixAddr(t)} {
laddr := laddr
- taddr := testUnixAddr()
+ taddr := testUnixAddr(t)
ta, err := ResolveUnixAddr("unix", taddr)
if err != nil {
t.Fatal(err)
t.Skip("unixgram test")
}
- for _, laddr := range []string{"", testUnixAddr()} {
+ for _, laddr := range []string{"", testUnixAddr(t)} {
laddr := laddr
- taddr := testUnixAddr()
+ taddr := testUnixAddr(t)
ta, err := ResolveUnixAddr("unixgram", taddr)
if err != nil {
t.Fatal(err)
if !testableNetwork("unix") {
t.Skip("unix test")
}
- name := testUnixAddr()
+ name := testUnixAddr(t)
listen := func(t *testing.T) *UnixListener {
l, err := Listen("unix", name)
}
handler := func(ls *localServer, ln Listener) {}
- for _, laddr := range []string{"", testUnixAddr()} {
+ for _, laddr := range []string{"", testUnixAddr(t)} {
laddr := laddr
- taddr := testUnixAddr()
+ taddr := testUnixAddr(t)
ta, err := ResolveUnixAddr("unix", taddr)
if err != nil {
t.Fatal(err)