1 // Copyright 2012 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 var connTests
= []struct {
19 {"tcp", "127.0.0.1:0"},
20 {"unix", "/tmp/gotest.net1"},
21 {"unixpacket", "/tmp/gotest.net2"},
24 func TestConnAndListener(t
*testing
.T
) {
25 for _
, tt
:= range connTests
{
27 case "unix", "unixpacket":
29 case "plan9", "windows":
32 if tt
.net
== "unixpacket" && runtime
.GOOS
!= "linux" {
38 ln
, err
:= net
.Listen(tt
.net
, tt
.addr
)
40 t
.Errorf("net.Listen failed: %v", err
)
44 defer func(ln net
.Listener
, net
, addr
string) {
47 case "unix", "unixpacket":
50 }(ln
, tt
.net
, tt
.addr
)
52 done
:= make(chan int)
53 go transponder(t
, ln
, done
)
55 c
, err
:= net
.Dial(tt
.net
, ln
.Addr().String())
57 t
.Errorf("net.Dial failed: %v", err
)
62 c
.SetDeadline(time
.Now().Add(100 * time
.Millisecond
))
63 c
.SetReadDeadline(time
.Now().Add(100 * time
.Millisecond
))
64 c
.SetWriteDeadline(time
.Now().Add(100 * time
.Millisecond
))
67 if _
, err
:= c
.Write([]byte("CONN TEST")); err
!= nil {
68 t
.Errorf("net.Conn.Write failed: %v", err
)
71 rb
:= make([]byte, 128)
72 if _
, err
:= c
.Read(rb
); err
!= nil {
73 t
.Errorf("net.Conn.Read failed: %v", err
)
80 func transponder(t
*testing
.T
, ln net
.Listener
, done
chan<- int) {
81 defer func() { done
<- 1 }()
85 t
.Errorf("net.Listener.Accept failed: %v", err
)
90 c
.SetDeadline(time
.Now().Add(100 * time
.Millisecond
))
91 c
.SetReadDeadline(time
.Now().Add(100 * time
.Millisecond
))
92 c
.SetWriteDeadline(time
.Now().Add(100 * time
.Millisecond
))
95 b
:= make([]byte, 128)
98 t
.Errorf("net.Conn.Read failed: %v", err
)
101 if _
, err
:= c
.Write(b
[:n
]); err
!= nil {
102 t
.Errorf("net.Conn.Write failed: %v", err
)