OSDN Git Service

Update Go library to r60.
[pf3gnuchains/gcc-fork.git] / libgo / go / net / file_test.go
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.
4
5 package net
6
7 import (
8         "os"
9         "reflect"
10         "runtime"
11         "syscall"
12         "testing"
13 )
14
15 type listenerFile interface {
16         Listener
17         File() (f *os.File, err os.Error)
18 }
19
20 type packetConnFile interface {
21         PacketConn
22         File() (f *os.File, err os.Error)
23 }
24
25 type connFile interface {
26         Conn
27         File() (f *os.File, err os.Error)
28 }
29
30 func testFileListener(t *testing.T, net, laddr string) {
31         if net == "tcp" {
32                 laddr += ":0" // any available port
33         }
34         l, err := Listen(net, laddr)
35         if err != nil {
36                 t.Fatalf("Listen failed: %v", err)
37         }
38         defer l.Close()
39         lf := l.(listenerFile)
40         f, err := lf.File()
41         if err != nil {
42                 t.Fatalf("File failed: %v", err)
43         }
44         c, err := FileListener(f)
45         if err != nil {
46                 t.Fatalf("FileListener failed: %v", err)
47         }
48         if !reflect.DeepEqual(l.Addr(), c.Addr()) {
49                 t.Fatalf("Addrs not equal: %#v != %#v", l.Addr(), c.Addr())
50         }
51         if err := c.Close(); err != nil {
52                 t.Fatalf("Close failed: %v", err)
53         }
54         if err := f.Close(); err != nil {
55                 t.Fatalf("Close failed: %v", err)
56         }
57 }
58
59 func TestFileListener(t *testing.T) {
60         if runtime.GOOS == "windows" || runtime.GOOS == "plan9" {
61                 return
62         }
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]")
69         }
70         if syscall.OS == "linux" {
71                 testFileListener(t, "unix", "@gotest/net")
72                 testFileListener(t, "unixpacket", "@gotest/net")
73         }
74 }
75
76 func testFilePacketConn(t *testing.T, pcf packetConnFile) {
77         f, err := pcf.File()
78         if err != nil {
79                 t.Fatalf("File failed: %v", err)
80         }
81         c, err := FilePacketConn(f)
82         if err != nil {
83                 t.Fatalf("FilePacketConn failed: %v", err)
84         }
85         if !reflect.DeepEqual(pcf.LocalAddr(), c.LocalAddr()) {
86                 t.Fatalf("LocalAddrs not equal: %#v != %#v", pcf.LocalAddr(), c.LocalAddr())
87         }
88         if err := c.Close(); err != nil {
89                 t.Fatalf("Close failed: %v", err)
90         }
91         if err := f.Close(); err != nil {
92                 t.Fatalf("Close failed: %v", err)
93         }
94 }
95
96 func testFilePacketConnListen(t *testing.T, net, laddr string) {
97         l, err := ListenPacket(net, laddr)
98         if err != nil {
99                 t.Fatalf("Listen failed: %v", err)
100         }
101         testFilePacketConn(t, l.(packetConnFile))
102         if err := l.Close(); err != nil {
103                 t.Fatalf("Close failed: %v", err)
104         }
105 }
106
107 func testFilePacketConnDial(t *testing.T, net, raddr string) {
108         c, err := Dial(net, raddr)
109         if err != nil {
110                 t.Fatalf("Dial failed: %v", err)
111         }
112         testFilePacketConn(t, c.(packetConnFile))
113         if err := c.Close(); err != nil {
114                 t.Fatalf("Close failed: %v", err)
115         }
116 }
117
118 func TestFilePacketConn(t *testing.T) {
119         if runtime.GOOS == "windows" || runtime.GOOS == "plan9" {
120                 return
121         }
122         testFilePacketConnListen(t, "udp", "127.0.0.1:0")
123         testFilePacketConnDial(t, "udp", "127.0.0.1:12345")
124         if supportsIPv6 {
125                 testFilePacketConnListen(t, "udp", "[::1]:0")
126         }
127         if supportsIPv6 && supportsIPv4map {
128                 testFilePacketConnDial(t, "udp", "[::ffff:127.0.0.1]:12345")
129         }
130         if syscall.OS == "linux" {
131                 testFilePacketConnListen(t, "unixgram", "@gotest1/net")
132         }
133 }