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.
5 // This file implements API tests across platforms and will never have a build
19 // The full stack test cases for IPConn have been moved to the
21 // golang.org/x/net/ipv4
22 // golang.org/x/net/ipv6
23 // golang.org/x/net/icmp
25 func TestTCPListenerSpecificMethods(t
*testing
.T
) {
28 t
.Skipf("not supported on %s", runtime
.GOOS
)
31 la
, err
:= ResolveTCPAddr("tcp4", "127.0.0.1:0")
35 ln
, err
:= ListenTCP("tcp4", la
)
41 ln
.SetDeadline(time
.Now().Add(30 * time
.Nanosecond
))
43 if c
, err
:= ln
.Accept(); err
!= nil {
44 if !err
.(Error
).Timeout() {
50 if c
, err
:= ln
.AcceptTCP(); err
!= nil {
51 if !err
.(Error
).Timeout() {
58 if f
, err
:= ln
.File(); err
!= nil {
59 condFatalf(t
, "file+net", "%v", err
)
65 func TestTCPConnSpecificMethods(t
*testing
.T
) {
66 la
, err
:= ResolveTCPAddr("tcp4", "127.0.0.1:0")
70 ln
, err
:= ListenTCP("tcp4", la
)
74 ch
:= make(chan error
, 1)
75 handler
:= func(ls
*localServer
, ln Listener
) { ls
.transponder(ls
.Listener
, ch
) }
76 ls
:= (&streamListener
{Listener
: ln
}).newLocalServer()
78 if err
:= ls
.buildup(handler
); err
!= nil {
82 ra
, err
:= ResolveTCPAddr("tcp4", ls
.Listener
.Addr().String())
86 c
, err
:= DialTCP("tcp4", nil, ra
)
92 c
.SetKeepAlivePeriod(3 * time
.Second
)
97 c
.SetDeadline(time
.Now().Add(someTimeout
))
98 c
.SetReadDeadline(time
.Now().Add(someTimeout
))
99 c
.SetWriteDeadline(time
.Now().Add(someTimeout
))
101 if _
, err
:= c
.Write([]byte("TCPCONN TEST")); err
!= nil {
104 rb
:= make([]byte, 128)
105 if _
, err
:= c
.Read(rb
); err
!= nil {
109 for err
:= range ch
{
114 func TestUDPConnSpecificMethods(t
*testing
.T
) {
115 la
, err
:= ResolveUDPAddr("udp4", "127.0.0.1:0")
119 c
, err
:= ListenUDP("udp4", la
)
126 c
.SetDeadline(time
.Now().Add(someTimeout
))
127 c
.SetReadDeadline(time
.Now().Add(someTimeout
))
128 c
.SetWriteDeadline(time
.Now().Add(someTimeout
))
129 c
.SetReadBuffer(2048)
130 c
.SetWriteBuffer(2048)
132 wb
:= []byte("UDPCONN TEST")
133 rb
:= make([]byte, 128)
134 if _
, err
:= c
.WriteToUDP(wb
, c
.LocalAddr().(*UDPAddr
)); err
!= nil {
137 if _
, _
, err
:= c
.ReadFromUDP(rb
); err
!= nil {
140 if _
, _
, err
:= c
.WriteMsgUDP(wb
, nil, c
.LocalAddr().(*UDPAddr
)); err
!= nil {
141 condFatalf(t
, c
.LocalAddr().Network(), "%v", err
)
143 if _
, _
, _
, _
, err
:= c
.ReadMsgUDP(rb
, nil); err
!= nil {
144 condFatalf(t
, c
.LocalAddr().Network(), "%v", err
)
147 if f
, err
:= c
.File(); err
!= nil {
148 condFatalf(t
, "file+net", "%v", err
)
154 if p
:= recover(); p
!= nil {
155 t
.Fatalf("panicked: %v", p
)
159 c
.WriteToUDP(wb
, nil)
160 c
.WriteMsgUDP(wb
, nil, nil)
163 func TestIPConnSpecificMethods(t
*testing
.T
) {
164 if os
.Getuid() != 0 {
165 t
.Skip("must be root")
168 la
, err
:= ResolveIPAddr("ip4", "127.0.0.1")
172 c
, err
:= ListenIP("ip4:icmp", la
)
179 c
.SetDeadline(time
.Now().Add(someTimeout
))
180 c
.SetReadDeadline(time
.Now().Add(someTimeout
))
181 c
.SetWriteDeadline(time
.Now().Add(someTimeout
))
182 c
.SetReadBuffer(2048)
183 c
.SetWriteBuffer(2048)
185 if f
, err
:= c
.File(); err
!= nil {
186 condFatalf(t
, "file+net", "%v", err
)
192 if p
:= recover(); p
!= nil {
193 t
.Fatalf("panicked: %v", p
)
197 wb
:= []byte("IPCONN TEST")
199 c
.WriteMsgIP(wb
, nil, nil)
202 func TestUnixListenerSpecificMethods(t
*testing
.T
) {
203 if !testableNetwork("unix") {
207 addr
:= testUnixAddr(t
)
208 la
, err
:= ResolveUnixAddr("unix", addr
)
212 ln
, err
:= ListenUnix("unix", la
)
217 defer os
.Remove(addr
)
219 ln
.SetDeadline(time
.Now().Add(30 * time
.Nanosecond
))
221 if c
, err
:= ln
.Accept(); err
!= nil {
222 if !err
.(Error
).Timeout() {
228 if c
, err
:= ln
.AcceptUnix(); err
!= nil {
229 if !err
.(Error
).Timeout() {
236 if f
, err
:= ln
.File(); err
!= nil {
243 func TestUnixConnSpecificMethods(t
*testing
.T
) {
244 if !testableNetwork("unixgram") {
245 t
.Skip("unixgram test")
248 addr1
, addr2
, addr3
:= testUnixAddr(t
), testUnixAddr(t
), testUnixAddr(t
)
250 a1
, err
:= ResolveUnixAddr("unixgram", addr1
)
254 c1
, err
:= DialUnix("unixgram", a1
, nil)
259 defer os
.Remove(addr1
)
262 c1
.SetDeadline(time
.Now().Add(someTimeout
))
263 c1
.SetReadDeadline(time
.Now().Add(someTimeout
))
264 c1
.SetWriteDeadline(time
.Now().Add(someTimeout
))
265 c1
.SetReadBuffer(2048)
266 c1
.SetWriteBuffer(2048)
268 a2
, err
:= ResolveUnixAddr("unixgram", addr2
)
272 c2
, err
:= DialUnix("unixgram", a2
, nil)
277 defer os
.Remove(addr2
)
280 c2
.SetDeadline(time
.Now().Add(someTimeout
))
281 c2
.SetReadDeadline(time
.Now().Add(someTimeout
))
282 c2
.SetWriteDeadline(time
.Now().Add(someTimeout
))
283 c2
.SetReadBuffer(2048)
284 c2
.SetWriteBuffer(2048)
286 a3
, err
:= ResolveUnixAddr("unixgram", addr3
)
290 c3
, err
:= ListenUnixgram("unixgram", a3
)
295 defer os
.Remove(addr3
)
298 c3
.SetDeadline(time
.Now().Add(someTimeout
))
299 c3
.SetReadDeadline(time
.Now().Add(someTimeout
))
300 c3
.SetWriteDeadline(time
.Now().Add(someTimeout
))
301 c3
.SetReadBuffer(2048)
302 c3
.SetWriteBuffer(2048)
304 wb
:= []byte("UNIXCONN TEST")
305 rb1
:= make([]byte, 128)
306 rb2
:= make([]byte, 128)
307 rb3
:= make([]byte, 128)
308 if _
, _
, err
:= c1
.WriteMsgUnix(wb
, nil, a2
); err
!= nil {
311 if _
, _
, _
, _
, err
:= c2
.ReadMsgUnix(rb2
, nil); err
!= nil {
314 if _
, err
:= c2
.WriteToUnix(wb
, a1
); err
!= nil {
317 if _
, _
, err
:= c1
.ReadFromUnix(rb1
); err
!= nil {
320 if _
, err
:= c3
.WriteToUnix(wb
, a1
); err
!= nil {
323 if _
, _
, err
:= c1
.ReadFromUnix(rb1
); err
!= nil {
326 if _
, err
:= c2
.WriteToUnix(wb
, a3
); err
!= nil {
329 if _
, _
, err
:= c3
.ReadFromUnix(rb3
); err
!= nil {
333 if f
, err
:= c1
.File(); err
!= nil {
340 if p
:= recover(); p
!= nil {
341 t
.Fatalf("panicked: %v", p
)
345 c1
.WriteToUnix(wb
, nil)
346 c1
.WriteMsgUnix(wb
, nil, nil)
347 c3
.WriteToUnix(wb
, nil)
348 c3
.WriteMsgUnix(wb
, nil, nil)