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
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 func TestTCPListenerSpecificMethods(t
*testing
.T
) {
26 t
.Skipf("not supported on %s", runtime
.GOOS
)
29 la
, err
:= ResolveTCPAddr("tcp4", "127.0.0.1:0")
33 ln
, err
:= ListenTCP("tcp4", la
)
39 ln
.SetDeadline(time
.Now().Add(30 * time
.Nanosecond
))
41 if c
, err
:= ln
.Accept(); err
!= nil {
42 if !err
.(Error
).Timeout() {
48 if c
, err
:= ln
.AcceptTCP(); err
!= nil {
49 if !err
.(Error
).Timeout() {
56 if f
, err
:= ln
.File(); err
!= nil {
57 condFatalf(t
, "%v", err
)
63 func TestTCPConnSpecificMethods(t
*testing
.T
) {
64 la
, err
:= ResolveTCPAddr("tcp4", "127.0.0.1:0")
68 ln
, err
:= ListenTCP("tcp4", la
)
72 ch
:= make(chan error
, 1)
73 handler
:= func(ls
*localServer
, ln Listener
) { transponder(ls
.Listener
, ch
) }
74 ls
, err
:= (&streamListener
{Listener
: ln
}).newLocalServer()
79 if err
:= ls
.buildup(handler
); err
!= nil {
83 ra
, err
:= ResolveTCPAddr("tcp4", ls
.Listener
.Addr().String())
87 c
, err
:= DialTCP("tcp4", nil, ra
)
93 c
.SetKeepAlivePeriod(3 * time
.Second
)
98 c
.SetDeadline(time
.Now().Add(someTimeout
))
99 c
.SetReadDeadline(time
.Now().Add(someTimeout
))
100 c
.SetWriteDeadline(time
.Now().Add(someTimeout
))
102 if _
, err
:= c
.Write([]byte("TCPCONN TEST")); err
!= nil {
105 rb
:= make([]byte, 128)
106 if _
, err
:= c
.Read(rb
); err
!= nil {
110 for err
:= range ch
{
115 func TestUDPConnSpecificMethods(t
*testing
.T
) {
116 la
, err
:= ResolveUDPAddr("udp4", "127.0.0.1:0")
120 c
, err
:= ListenUDP("udp4", la
)
127 c
.SetDeadline(time
.Now().Add(someTimeout
))
128 c
.SetReadDeadline(time
.Now().Add(someTimeout
))
129 c
.SetWriteDeadline(time
.Now().Add(someTimeout
))
130 c
.SetReadBuffer(2048)
131 c
.SetWriteBuffer(2048)
133 wb
:= []byte("UDPCONN TEST")
134 rb
:= make([]byte, 128)
135 if _
, err
:= c
.WriteToUDP(wb
, c
.LocalAddr().(*UDPAddr
)); err
!= nil {
138 if _
, _
, err
:= c
.ReadFromUDP(rb
); err
!= nil {
141 if _
, _
, err
:= c
.WriteMsgUDP(wb
, nil, c
.LocalAddr().(*UDPAddr
)); err
!= nil {
142 condFatalf(t
, "%v", err
)
144 if _
, _
, _
, _
, err
:= c
.ReadMsgUDP(rb
, nil); err
!= nil {
145 condFatalf(t
, "%v", err
)
148 if f
, err
:= c
.File(); err
!= nil {
149 condFatalf(t
, "%v", err
)
155 if p
:= recover(); p
!= nil {
156 t
.Fatalf("panicked: %v", p
)
160 c
.WriteToUDP(wb
, nil)
161 c
.WriteMsgUDP(wb
, nil, nil)
164 func TestIPConnSpecificMethods(t
*testing
.T
) {
165 if os
.Getuid() != 0 {
166 t
.Skip("must be root")
169 la
, err
:= ResolveIPAddr("ip4", "127.0.0.1")
173 c
, err
:= ListenIP("ip4:icmp", la
)
180 c
.SetDeadline(time
.Now().Add(someTimeout
))
181 c
.SetReadDeadline(time
.Now().Add(someTimeout
))
182 c
.SetWriteDeadline(time
.Now().Add(someTimeout
))
183 c
.SetReadBuffer(2048)
184 c
.SetWriteBuffer(2048)
186 if f
, err
:= c
.File(); err
!= nil {
187 condFatalf(t
, "%v", err
)
193 if p
:= recover(); p
!= nil {
194 t
.Fatalf("panicked: %v", p
)
198 wb
:= []byte("IPCONN TEST")
200 c
.WriteMsgIP(wb
, nil, nil)
203 func TestUnixListenerSpecificMethods(t
*testing
.T
) {
204 if !testableNetwork("unix") {
208 addr
:= testUnixAddr()
209 la
, err
:= ResolveUnixAddr("unix", addr
)
213 ln
, err
:= ListenUnix("unix", la
)
218 defer os
.Remove(addr
)
220 ln
.SetDeadline(time
.Now().Add(30 * time
.Nanosecond
))
222 if c
, err
:= ln
.Accept(); err
!= nil {
223 if !err
.(Error
).Timeout() {
229 if c
, err
:= ln
.AcceptUnix(); err
!= nil {
230 if !err
.(Error
).Timeout() {
237 if f
, err
:= ln
.File(); err
!= nil {
244 func TestUnixConnSpecificMethods(t
*testing
.T
) {
245 if !testableNetwork("unixgram") {
246 t
.Skip("unixgram test")
249 addr1
, addr2
, addr3
:= testUnixAddr(), testUnixAddr(), testUnixAddr()
251 a1
, err
:= ResolveUnixAddr("unixgram", addr1
)
255 c1
, err
:= DialUnix("unixgram", a1
, nil)
260 defer os
.Remove(addr1
)
263 c1
.SetDeadline(time
.Now().Add(someTimeout
))
264 c1
.SetReadDeadline(time
.Now().Add(someTimeout
))
265 c1
.SetWriteDeadline(time
.Now().Add(someTimeout
))
266 c1
.SetReadBuffer(2048)
267 c1
.SetWriteBuffer(2048)
269 a2
, err
:= ResolveUnixAddr("unixgram", addr2
)
273 c2
, err
:= DialUnix("unixgram", a2
, nil)
278 defer os
.Remove(addr2
)
281 c2
.SetDeadline(time
.Now().Add(someTimeout
))
282 c2
.SetReadDeadline(time
.Now().Add(someTimeout
))
283 c2
.SetWriteDeadline(time
.Now().Add(someTimeout
))
284 c2
.SetReadBuffer(2048)
285 c2
.SetWriteBuffer(2048)
287 a3
, err
:= ResolveUnixAddr("unixgram", addr3
)
291 c3
, err
:= ListenUnixgram("unixgram", a3
)
296 defer os
.Remove(addr3
)
299 c3
.SetDeadline(time
.Now().Add(someTimeout
))
300 c3
.SetReadDeadline(time
.Now().Add(someTimeout
))
301 c3
.SetWriteDeadline(time
.Now().Add(someTimeout
))
302 c3
.SetReadBuffer(2048)
303 c3
.SetWriteBuffer(2048)
305 wb
:= []byte("UNIXCONN TEST")
306 rb1
:= make([]byte, 128)
307 rb2
:= make([]byte, 128)
308 rb3
:= make([]byte, 128)
309 if _
, _
, err
:= c1
.WriteMsgUnix(wb
, nil, a2
); err
!= nil {
312 if _
, _
, _
, _
, err
:= c2
.ReadMsgUnix(rb2
, nil); err
!= nil {
315 if _
, err
:= c2
.WriteToUnix(wb
, a1
); err
!= nil {
318 if _
, _
, err
:= c1
.ReadFromUnix(rb1
); err
!= nil {
321 if _
, err
:= c3
.WriteToUnix(wb
, a1
); err
!= nil {
324 if _
, _
, err
:= c1
.ReadFromUnix(rb1
); err
!= nil {
327 if _
, err
:= c2
.WriteToUnix(wb
, a3
); err
!= nil {
330 if _
, _
, err
:= c3
.ReadFromUnix(rb3
); err
!= nil {
334 if f
, err
:= c1
.File(); err
!= nil {
341 if p
:= recover(); p
!= nil {
342 t
.Fatalf("panicked: %v", p
)
346 c1
.WriteToUnix(wb
, nil)
347 c1
.WriteMsgUnix(wb
, nil, nil)
348 c3
.WriteToUnix(wb
, nil)
349 c3
.WriteMsgUnix(wb
, nil, nil)