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.
17 // The full stack test cases for IPConn have been moved to the
19 // golang.org/x/net/ipv4
20 // golang.org/x/net/ipv6
21 // golang.org/x/net/icmp
23 var fileConnTests
= []struct {
32 func TestFileConn(t
*testing
.T
) {
34 case "nacl", "plan9", "windows":
35 t
.Skipf("not supported on %s", runtime
.GOOS
)
38 for _
, tt
:= range fileConnTests
{
39 if !testableNetwork(tt
.network
) {
40 t
.Logf("skipping %s test", tt
.network
)
44 var network
, address
string
47 c
, err
:= newLocalPacketListener(tt
.network
)
52 network
= c
.LocalAddr().Network()
53 address
= c
.LocalAddr().String()
55 handler
:= func(ls
*localServer
, ln Listener
) {
64 ls
, err
:= newLocalServer(tt
.network
)
69 if err
:= ls
.buildup(handler
); err
!= nil {
72 network
= ls
.Listener
.Addr().Network()
73 address
= ls
.Listener
.Addr().String()
76 c1
, err
:= Dial(network
, address
)
78 if perr
:= parseDialError(err
); perr
!= nil {
83 addr
:= c1
.LocalAddr()
86 switch c1
:= c1
.(type) {
94 if err
:= c1
.Close(); err
!= nil {
95 if perr
:= parseCloseError(err
, false); perr
!= nil {
101 if perr
:= parseCommonError(err
); perr
!= nil {
107 c2
, err
:= FileConn(f
)
108 if err
:= f
.Close(); err
!= nil {
112 if perr
:= parseCommonError(err
); perr
!= nil {
119 if _
, err
:= c2
.Write([]byte("FILECONN TEST")); err
!= nil {
120 if perr
:= parseWriteError(err
); perr
!= nil {
125 if !reflect
.DeepEqual(c2
.LocalAddr(), addr
) {
126 t
.Fatalf("got %#v; want %#v", c2
.LocalAddr(), addr
)
131 var fileListenerTests
= []struct {
139 func TestFileListener(t
*testing
.T
) {
140 switch runtime
.GOOS
{
141 case "nacl", "plan9", "windows":
142 t
.Skipf("not supported on %s", runtime
.GOOS
)
145 for _
, tt
:= range fileListenerTests
{
146 if !testableNetwork(tt
.network
) {
147 t
.Logf("skipping %s test", tt
.network
)
151 ln1
, err
:= newLocalListener(tt
.network
)
156 case "unix", "unixpacket":
157 defer os
.Remove(ln1
.Addr().String())
162 switch ln1
:= ln1
.(type) {
169 case "unix", "unixpacket":
170 defer ln1
.Close() // UnixListener.Close calls syscall.Unlink internally
172 if err
:= ln1
.Close(); err
!= nil {
177 if perr
:= parseCommonError(err
); perr
!= nil {
183 ln2
, err
:= FileListener(f
)
184 if err
:= f
.Close(); err
!= nil {
188 if perr
:= parseCommonError(err
); perr
!= nil {
195 var wg sync
.WaitGroup
199 c
, err
:= Dial(ln2
.Addr().Network(), ln2
.Addr().String())
201 if perr
:= parseDialError(err
); perr
!= nil {
209 c
, err
:= ln2
.Accept()
211 if perr
:= parseAcceptError(err
); perr
!= nil {
218 if !reflect
.DeepEqual(ln2
.Addr(), addr
) {
219 t
.Fatalf("got %#v; want %#v", ln2
.Addr(), addr
)
224 var filePacketConnTests
= []struct {
231 func TestFilePacketConn(t
*testing
.T
) {
232 switch runtime
.GOOS
{
233 case "nacl", "plan9", "windows":
234 t
.Skipf("not supported on %s", runtime
.GOOS
)
237 for _
, tt
:= range filePacketConnTests
{
238 if !testableNetwork(tt
.network
) {
239 t
.Logf("skipping %s test", tt
.network
)
243 c1
, err
:= newLocalPacketListener(tt
.network
)
249 defer os
.Remove(c1
.LocalAddr().String())
251 addr
:= c1
.LocalAddr()
254 switch c1
:= c1
.(type) {
260 if err
:= c1
.Close(); err
!= nil {
261 if perr
:= parseCloseError(err
, false); perr
!= nil {
267 if perr
:= parseCommonError(err
); perr
!= nil {
273 c2
, err
:= FilePacketConn(f
)
274 if err
:= f
.Close(); err
!= nil {
278 if perr
:= parseCommonError(err
); perr
!= nil {
285 if _
, err
:= c2
.WriteTo([]byte("FILEPACKETCONN TEST"), addr
); err
!= nil {
286 if perr
:= parseWriteError(err
); perr
!= nil {
291 if !reflect
.DeepEqual(c2
.LocalAddr(), addr
) {
292 t
.Fatalf("got %#v; want %#v", c2
.LocalAddr(), addr
)
298 func TestFileCloseRace(t
*testing
.T
) {
299 switch runtime
.GOOS
{
300 case "nacl", "plan9", "windows":
301 t
.Skipf("not supported on %s", runtime
.GOOS
)
303 if !testableNetwork("tcp") {
304 t
.Skip("tcp not supported")
307 handler
:= func(ls
*localServer
, ln Listener
) {
308 c
, err
:= ln
.Accept()
317 ls
, err
:= newLocalServer("tcp")
322 if err
:= ls
.buildup(handler
); err
!= nil {
327 for i
:= 0; i
< tries
; i
++ {
328 c1
, err
:= Dial(ls
.Listener
.Addr().Network(), ls
.Listener
.Addr().String())
334 var wg sync
.WaitGroup