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
) { transponder(ls
.Listener
, ch
) }
76 ls
, err
:= (&streamListener
{Listener
: ln
}).newLocalServer()
81 if err
:= ls
.buildup(handler
); err
!= nil {
85 ra
, err
:= ResolveTCPAddr("tcp4", ls
.Listener
.Addr().String())
89 c
, err
:= DialTCP("tcp4", nil, ra
)
95 c
.SetKeepAlivePeriod(3 * time
.Second
)
100 c
.SetDeadline(time
.Now().Add(someTimeout
))
101 c
.SetReadDeadline(time
.Now().Add(someTimeout
))
102 c
.SetWriteDeadline(time
.Now().Add(someTimeout
))
104 if _
, err
:= c
.Write([]byte("TCPCONN TEST")); err
!= nil {
107 rb
:= make([]byte, 128)
108 if _
, err
:= c
.Read(rb
); err
!= nil {
112 for err
:= range ch
{
117 func TestUDPConnSpecificMethods(t
*testing
.T
) {
118 la
, err
:= ResolveUDPAddr("udp4", "127.0.0.1:0")
122 c
, err
:= ListenUDP("udp4", la
)
129 c
.SetDeadline(time
.Now().Add(someTimeout
))
130 c
.SetReadDeadline(time
.Now().Add(someTimeout
))
131 c
.SetWriteDeadline(time
.Now().Add(someTimeout
))
132 c
.SetReadBuffer(2048)
133 c
.SetWriteBuffer(2048)
135 wb
:= []byte("UDPCONN TEST")
136 rb
:= make([]byte, 128)
137 if _
, err
:= c
.WriteToUDP(wb
, c
.LocalAddr().(*UDPAddr
)); err
!= nil {
140 if _
, _
, err
:= c
.ReadFromUDP(rb
); err
!= nil {
143 if _
, _
, err
:= c
.WriteMsgUDP(wb
, nil, c
.LocalAddr().(*UDPAddr
)); err
!= nil {
144 condFatalf(t
, c
.LocalAddr().Network(), "%v", err
)
146 if _
, _
, _
, _
, err
:= c
.ReadMsgUDP(rb
, nil); err
!= nil {
147 condFatalf(t
, c
.LocalAddr().Network(), "%v", err
)
150 if f
, err
:= c
.File(); err
!= nil {
151 condFatalf(t
, "file+net", "%v", err
)
157 if p
:= recover(); p
!= nil {
158 t
.Fatalf("panicked: %v", p
)
162 c
.WriteToUDP(wb
, nil)
163 c
.WriteMsgUDP(wb
, nil, nil)
166 func TestIPConnSpecificMethods(t
*testing
.T
) {
167 if os
.Getuid() != 0 {
168 t
.Skip("must be root")
171 la
, err
:= ResolveIPAddr("ip4", "127.0.0.1")
175 c
, err
:= ListenIP("ip4:icmp", la
)
182 c
.SetDeadline(time
.Now().Add(someTimeout
))
183 c
.SetReadDeadline(time
.Now().Add(someTimeout
))
184 c
.SetWriteDeadline(time
.Now().Add(someTimeout
))
185 c
.SetReadBuffer(2048)
186 c
.SetWriteBuffer(2048)
188 if f
, err
:= c
.File(); err
!= nil {
189 condFatalf(t
, "file+net", "%v", err
)
195 if p
:= recover(); p
!= nil {
196 t
.Fatalf("panicked: %v", p
)
200 wb
:= []byte("IPCONN TEST")
202 c
.WriteMsgIP(wb
, nil, nil)
205 func TestUnixListenerSpecificMethods(t
*testing
.T
) {
206 if !testableNetwork("unix") {
210 addr
:= testUnixAddr()
211 la
, err
:= ResolveUnixAddr("unix", addr
)
215 ln
, err
:= ListenUnix("unix", la
)
220 defer os
.Remove(addr
)
222 ln
.SetDeadline(time
.Now().Add(30 * time
.Nanosecond
))
224 if c
, err
:= ln
.Accept(); err
!= nil {
225 if !err
.(Error
).Timeout() {
231 if c
, err
:= ln
.AcceptUnix(); err
!= nil {
232 if !err
.(Error
).Timeout() {
239 if f
, err
:= ln
.File(); err
!= nil {
246 func TestUnixConnSpecificMethods(t
*testing
.T
) {
247 if !testableNetwork("unixgram") {
248 t
.Skip("unixgram test")
251 addr1
, addr2
, addr3
:= testUnixAddr(), testUnixAddr(), testUnixAddr()
253 a1
, err
:= ResolveUnixAddr("unixgram", addr1
)
257 c1
, err
:= DialUnix("unixgram", a1
, nil)
262 defer os
.Remove(addr1
)
265 c1
.SetDeadline(time
.Now().Add(someTimeout
))
266 c1
.SetReadDeadline(time
.Now().Add(someTimeout
))
267 c1
.SetWriteDeadline(time
.Now().Add(someTimeout
))
268 c1
.SetReadBuffer(2048)
269 c1
.SetWriteBuffer(2048)
271 a2
, err
:= ResolveUnixAddr("unixgram", addr2
)
275 c2
, err
:= DialUnix("unixgram", a2
, nil)
280 defer os
.Remove(addr2
)
283 c2
.SetDeadline(time
.Now().Add(someTimeout
))
284 c2
.SetReadDeadline(time
.Now().Add(someTimeout
))
285 c2
.SetWriteDeadline(time
.Now().Add(someTimeout
))
286 c2
.SetReadBuffer(2048)
287 c2
.SetWriteBuffer(2048)
289 a3
, err
:= ResolveUnixAddr("unixgram", addr3
)
293 c3
, err
:= ListenUnixgram("unixgram", a3
)
298 defer os
.Remove(addr3
)
301 c3
.SetDeadline(time
.Now().Add(someTimeout
))
302 c3
.SetReadDeadline(time
.Now().Add(someTimeout
))
303 c3
.SetWriteDeadline(time
.Now().Add(someTimeout
))
304 c3
.SetReadBuffer(2048)
305 c3
.SetWriteBuffer(2048)
307 wb
:= []byte("UNIXCONN TEST")
308 rb1
:= make([]byte, 128)
309 rb2
:= make([]byte, 128)
310 rb3
:= make([]byte, 128)
311 if _
, _
, err
:= c1
.WriteMsgUnix(wb
, nil, a2
); err
!= nil {
314 if _
, _
, _
, _
, err
:= c2
.ReadMsgUnix(rb2
, nil); err
!= nil {
317 if _
, err
:= c2
.WriteToUnix(wb
, a1
); err
!= nil {
320 if _
, _
, err
:= c1
.ReadFromUnix(rb1
); err
!= nil {
323 if _
, err
:= c3
.WriteToUnix(wb
, a1
); err
!= nil {
326 if _
, _
, err
:= c1
.ReadFromUnix(rb1
); err
!= nil {
329 if _
, err
:= c2
.WriteToUnix(wb
, a3
); err
!= nil {
332 if _
, _
, err
:= c3
.ReadFromUnix(rb3
); err
!= nil {
336 if f
, err
:= c1
.File(); err
!= nil {
343 if p
:= recover(); p
!= nil {
344 t
.Fatalf("panicked: %v", p
)
348 c1
.WriteToUnix(wb
, nil)
349 c1
.WriteMsgUnix(wb
, nil, nil)
350 c3
.WriteToUnix(wb
, nil)
351 c3
.WriteMsgUnix(wb
, nil, nil)