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.
16 var packetConnTests = []struct {
21 {"udp", "127.0.0.1:0", "127.0.0.1:0"},
22 {"ip:icmp", "127.0.0.1", "127.0.0.1"},
23 {"unixgram", "/tmp/gotest.net1", "/tmp/gotest.net2"},
26 func TestPacketConn(t *testing.T) {
27 closer := func(c net.PacketConn, net, addr1, addr2 string) {
36 for _, tt := range packetConnTests {
38 netstr := strings.Split(tt.net, ":")
41 wb = []byte("UDP PACKETCONN TEST")
50 id := os.Getpid() & 0xffff
51 wb = newICMPEchoRequest(id, 1, 128, []byte("IP PACKETCONN TEST"))
54 case "plan9", "windows":
59 wb = []byte("UNIXGRAM PACKETCONN TEST")
64 c1, err := net.ListenPacket(tt.net, tt.addr1)
66 t.Fatalf("net.ListenPacket failed: %v", err)
69 c1.SetDeadline(time.Now().Add(100 * time.Millisecond))
70 c1.SetReadDeadline(time.Now().Add(100 * time.Millisecond))
71 c1.SetWriteDeadline(time.Now().Add(100 * time.Millisecond))
72 defer closer(c1, netstr[0], tt.addr1, tt.addr2)
74 c2, err := net.ListenPacket(tt.net, tt.addr2)
76 t.Fatalf("net.ListenPacket failed: %v", err)
79 c2.SetDeadline(time.Now().Add(100 * time.Millisecond))
80 c2.SetReadDeadline(time.Now().Add(100 * time.Millisecond))
81 c2.SetWriteDeadline(time.Now().Add(100 * time.Millisecond))
82 defer closer(c2, netstr[0], tt.addr1, tt.addr2)
84 if _, err := c1.WriteTo(wb, c2.LocalAddr()); err != nil {
85 t.Fatalf("net.PacketConn.WriteTo failed: %v", err)
87 rb2 := make([]byte, 128)
88 if _, _, err := c2.ReadFrom(rb2); err != nil {
89 t.Fatalf("net.PacketConn.ReadFrom failed: %v", err)
91 if _, err := c2.WriteTo(wb, c1.LocalAddr()); err != nil {
92 t.Fatalf("net.PacketConn.WriteTo failed: %v", err)
94 rb1 := make([]byte, 128)
95 if _, _, err := c1.ReadFrom(rb1); err != nil {
96 t.Fatalf("net.PacketConn.ReadFrom failed: %v", err)
101 func TestConnAndPacketConn(t *testing.T) {
102 for _, tt := range packetConnTests {
104 netstr := strings.Split(tt.net, ":")
107 wb = []byte("UDP PACKETCONN TEST")
109 switch runtime.GOOS {
113 if os.Getuid() != 0 {
116 id := os.Getpid() & 0xffff
117 wb = newICMPEchoRequest(id, 1, 128, []byte("IP PACKETCONN TEST"))
122 c1, err := net.ListenPacket(tt.net, tt.addr1)
124 t.Fatalf("net.ListenPacket failed: %v", err)
127 c1.SetDeadline(time.Now().Add(100 * time.Millisecond))
128 c1.SetReadDeadline(time.Now().Add(100 * time.Millisecond))
129 c1.SetWriteDeadline(time.Now().Add(100 * time.Millisecond))
132 c2, err := net.Dial(tt.net, c1.LocalAddr().String())
134 t.Fatalf("net.Dial failed: %v", err)
138 c2.SetDeadline(time.Now().Add(100 * time.Millisecond))
139 c2.SetReadDeadline(time.Now().Add(100 * time.Millisecond))
140 c2.SetWriteDeadline(time.Now().Add(100 * time.Millisecond))
143 if _, err := c2.Write(wb); err != nil {
144 t.Fatalf("net.Conn.Write failed: %v", err)
146 rb1 := make([]byte, 128)
147 if _, _, err := c1.ReadFrom(rb1); err != nil {
148 t.Fatalf("net.PacetConn.ReadFrom failed: %v", err)
151 if netstr[0] == "ip" {
152 dst = &net.IPAddr{IP: net.IPv4(127, 0, 0, 1)}
156 if _, err := c1.WriteTo(wb, dst); err != nil {
157 t.Fatalf("net.PacketConn.WriteTo failed: %v", err)
159 rb2 := make([]byte, 128)
160 if _, err := c2.Read(rb2); err != nil {
161 t.Fatalf("net.Conn.Read failed: %v", err)