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
16 // The full stack test cases for IPConn have been moved to the
18 // golang.org/x/net/ipv4
19 // golang.org/x/net/ipv6
20 // golang.org/x/net/icmp
22 func packetConnTestData(t
*testing
.T
, network
string) ([]byte, func()) {
23 if !testableNetwork(network
) {
24 return nil, func() { t
.Logf("skipping %s test", network
) }
26 return []byte("PACKETCONN TEST"), nil
29 var packetConnTests
= []struct {
34 {"udp", "127.0.0.1:0", "127.0.0.1:0"},
35 {"unixgram", testUnixAddr(), testUnixAddr()},
38 func TestPacketConn(t
*testing
.T
) {
39 closer
:= func(c PacketConn
, net
, addr1
, addr2
string) {
48 for _
, tt
:= range packetConnTests
{
49 wb
, skipOrFatalFn
:= packetConnTestData(t
, tt
.net
)
50 if skipOrFatalFn
!= nil {
55 c1
, err
:= ListenPacket(tt
.net
, tt
.addr1
)
59 defer closer(c1
, tt
.net
, tt
.addr1
, tt
.addr2
)
61 c1
.SetDeadline(time
.Now().Add(500 * time
.Millisecond
))
62 c1
.SetReadDeadline(time
.Now().Add(500 * time
.Millisecond
))
63 c1
.SetWriteDeadline(time
.Now().Add(500 * time
.Millisecond
))
65 c2
, err
:= ListenPacket(tt
.net
, tt
.addr2
)
69 defer closer(c2
, tt
.net
, tt
.addr1
, tt
.addr2
)
71 c2
.SetDeadline(time
.Now().Add(500 * time
.Millisecond
))
72 c2
.SetReadDeadline(time
.Now().Add(500 * time
.Millisecond
))
73 c2
.SetWriteDeadline(time
.Now().Add(500 * time
.Millisecond
))
74 rb2
:= make([]byte, 128)
76 if _
, err
:= c1
.WriteTo(wb
, c2
.LocalAddr()); err
!= nil {
79 if _
, _
, err
:= c2
.ReadFrom(rb2
); err
!= nil {
82 if _
, err
:= c2
.WriteTo(wb
, c1
.LocalAddr()); err
!= nil {
85 rb1
:= make([]byte, 128)
86 if _
, _
, err
:= c1
.ReadFrom(rb1
); err
!= nil {
92 func TestConnAndPacketConn(t
*testing
.T
) {
93 closer
:= func(c PacketConn
, net
, addr1
, addr2
string) {
102 for _
, tt
:= range packetConnTests
{
104 wb
, skipOrFatalFn
:= packetConnTestData(t
, tt
.net
)
105 if skipOrFatalFn
!= nil {
110 c1
, err
:= ListenPacket(tt
.net
, tt
.addr1
)
114 defer closer(c1
, tt
.net
, tt
.addr1
, tt
.addr2
)
116 c1
.SetDeadline(time
.Now().Add(500 * time
.Millisecond
))
117 c1
.SetReadDeadline(time
.Now().Add(500 * time
.Millisecond
))
118 c1
.SetWriteDeadline(time
.Now().Add(500 * time
.Millisecond
))
120 c2
, err
:= Dial(tt
.net
, c1
.LocalAddr().String())
127 c2
.SetDeadline(time
.Now().Add(500 * time
.Millisecond
))
128 c2
.SetReadDeadline(time
.Now().Add(500 * time
.Millisecond
))
129 c2
.SetWriteDeadline(time
.Now().Add(500 * time
.Millisecond
))
131 if _
, err
:= c2
.Write(wb
); err
!= nil {
134 rb1
:= make([]byte, 128)
135 if _
, _
, err
:= c1
.ReadFrom(rb1
); err
!= nil {
145 if _
, err
:= c1
.WriteTo(wb
, dst
); err
!= nil {
148 rb2
:= make([]byte, 128)
149 if _
, err
:= c2
.Read(rb2
); err
!= nil {