1 // Copyright 2011 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 type listenerFile interface {
17 File() (f *os.File, err os.Error)
20 type packetConnFile interface {
22 File() (f *os.File, err os.Error)
25 type connFile interface {
27 File() (f *os.File, err os.Error)
30 func testFileListener(t *testing.T, net, laddr string) {
32 laddr += ":0" // any available port
34 l, err := Listen(net, laddr)
36 t.Fatalf("Listen failed: %v", err)
39 lf := l.(listenerFile)
42 t.Fatalf("File failed: %v", err)
44 c, err := FileListener(f)
46 t.Fatalf("FileListener failed: %v", err)
48 if !reflect.DeepEqual(l.Addr(), c.Addr()) {
49 t.Fatalf("Addrs not equal: %#v != %#v", l.Addr(), c.Addr())
51 if err := c.Close(); err != nil {
52 t.Fatalf("Close failed: %v", err)
54 if err := f.Close(); err != nil {
55 t.Fatalf("Close failed: %v", err)
59 func TestFileListener(t *testing.T) {
60 if runtime.GOOS == "windows" || runtime.GOOS == "plan9" {
63 testFileListener(t, "tcp", "127.0.0.1")
64 testFileListener(t, "tcp", "127.0.0.1")
65 if supportsIPv6 && supportsIPv4map {
66 testFileListener(t, "tcp", "[::ffff:127.0.0.1]")
67 testFileListener(t, "tcp", "127.0.0.1")
68 testFileListener(t, "tcp", "[::ffff:127.0.0.1]")
70 if syscall.OS == "linux" {
71 testFileListener(t, "unix", "@gotest/net")
72 testFileListener(t, "unixpacket", "@gotest/net")
76 func testFilePacketConn(t *testing.T, pcf packetConnFile) {
79 t.Fatalf("File failed: %v", err)
81 c, err := FilePacketConn(f)
83 t.Fatalf("FilePacketConn failed: %v", err)
85 if !reflect.DeepEqual(pcf.LocalAddr(), c.LocalAddr()) {
86 t.Fatalf("LocalAddrs not equal: %#v != %#v", pcf.LocalAddr(), c.LocalAddr())
88 if err := c.Close(); err != nil {
89 t.Fatalf("Close failed: %v", err)
91 if err := f.Close(); err != nil {
92 t.Fatalf("Close failed: %v", err)
96 func testFilePacketConnListen(t *testing.T, net, laddr string) {
97 l, err := ListenPacket(net, laddr)
99 t.Fatalf("Listen failed: %v", err)
101 testFilePacketConn(t, l.(packetConnFile))
102 if err := l.Close(); err != nil {
103 t.Fatalf("Close failed: %v", err)
107 func testFilePacketConnDial(t *testing.T, net, raddr string) {
108 c, err := Dial(net, raddr)
110 t.Fatalf("Dial failed: %v", err)
112 testFilePacketConn(t, c.(packetConnFile))
113 if err := c.Close(); err != nil {
114 t.Fatalf("Close failed: %v", err)
118 func TestFilePacketConn(t *testing.T) {
119 if runtime.GOOS == "windows" || runtime.GOOS == "plan9" {
122 testFilePacketConnListen(t, "udp", "127.0.0.1:0")
123 testFilePacketConnDial(t, "udp", "127.0.0.1:12345")
125 testFilePacketConnListen(t, "udp", "[::1]:0")
127 if supportsIPv6 && supportsIPv4map {
128 testFilePacketConnDial(t, "udp", "[::ffff:127.0.0.1]:12345")
130 if syscall.OS == "linux" {
131 testFilePacketConnListen(t, "unixgram", "@gotest1/net")