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, listen bool) {
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())
89 if _, err := c.WriteTo([]byte{}, c.LocalAddr()); err != nil {
90 t.Fatalf("WriteTo failed: %v", err)
93 if err := c.Close(); err != nil {
94 t.Fatalf("Close failed: %v", err)
96 if err := f.Close(); err != nil {
97 t.Fatalf("Close failed: %v", err)
101 func testFilePacketConnListen(t *testing.T, net, laddr string) {
102 l, err := ListenPacket(net, laddr)
104 t.Fatalf("Listen failed: %v", err)
106 testFilePacketConn(t, l.(packetConnFile), true)
107 if err := l.Close(); err != nil {
108 t.Fatalf("Close failed: %v", err)
112 func testFilePacketConnDial(t *testing.T, net, raddr string) {
113 c, err := Dial(net, raddr)
115 t.Fatalf("Dial failed: %v", err)
117 testFilePacketConn(t, c.(packetConnFile), false)
118 if err := c.Close(); err != nil {
119 t.Fatalf("Close failed: %v", err)
123 func TestFilePacketConn(t *testing.T) {
124 if runtime.GOOS == "windows" || runtime.GOOS == "plan9" {
127 testFilePacketConnListen(t, "udp", "127.0.0.1:0")
128 testFilePacketConnDial(t, "udp", "127.0.0.1:12345")
130 testFilePacketConnListen(t, "udp", "[::1]:0")
132 if supportsIPv6 && supportsIPv4map {
133 testFilePacketConnDial(t, "udp", "[::ffff:127.0.0.1]:12345")
135 if syscall.OS == "linux" {
136 testFilePacketConnListen(t, "unixgram", "@gotest1/net")