Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(2)

Delta Between Two Patch Sets: src/pkg/net/packetconn_test.go

Issue 7308058: code review 7308058: net: add unixgram dial test (Closed)
Left Patch Set: diff -r 052cab218361 https://code.google.com/p/go Created 12 years, 1 month ago
Right Patch Set: diff -r bcf28085191a https://code.google.com/p/go Created 12 years ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
« no previous file with change/comment | « src/pkg/net/conn_test.go ('k') | src/pkg/net/protoconn_test.go » ('j') | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
1 // Copyright 2012 The Go Authors. All rights reserved. 1 // Copyright 2012 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style 2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file. 3 // license that can be found in the LICENSE file.
4 4
5 package net_test 5 // This file implements API tests across platforms and will never have a build
6 // tag.
7
8 package net
6 9
7 import ( 10 import (
8 "net"
9 "os" 11 "os"
10 "runtime" 12 "runtime"
11 "strings" 13 "strings"
12 "testing" 14 "testing"
13 "time" 15 "time"
14 ) 16 )
15 17
16 var packetConnTests = []struct { 18 var packetConnTests = []struct {
17 net string 19 net string
18 addr1 string 20 addr1 string
19 addr2 string 21 addr2 string
20 }{ 22 }{
21 {"udp", "127.0.0.1:0", "127.0.0.1:0"}, 23 {"udp", "127.0.0.1:0", "127.0.0.1:0"},
22 {"ip:icmp", "127.0.0.1", "127.0.0.1"}, 24 {"ip:icmp", "127.0.0.1", "127.0.0.1"},
23 {"unixgram", testUnixAddr(), testUnixAddr()}, 25 {"unixgram", testUnixAddr(), testUnixAddr()},
24 } 26 }
25 27
26 func TestPacketConn(t *testing.T) { 28 func TestPacketConn(t *testing.T) {
27 » closer := func(c net.PacketConn, net, addr1, addr2 string) { 29 » closer := func(c PacketConn, net, addr1, addr2 string) {
28 c.Close() 30 c.Close()
29 switch net { 31 switch net {
30 case "unixgram": 32 case "unixgram":
31 os.Remove(addr1) 33 os.Remove(addr1)
32 os.Remove(addr2) 34 os.Remove(addr2)
33 } 35 }
34 } 36 }
35 37
36 » for _, tt := range packetConnTests { 38 » for i, tt := range packetConnTests {
37 var wb []byte 39 var wb []byte
38 netstr := strings.Split(tt.net, ":") 40 netstr := strings.Split(tt.net, ":")
39 switch netstr[0] { 41 switch netstr[0] {
40 case "udp": 42 case "udp":
41 wb = []byte("UDP PACKETCONN TEST") 43 wb = []byte("UDP PACKETCONN TEST")
42 case "ip": 44 case "ip":
43 switch runtime.GOOS { 45 switch runtime.GOOS {
44 case "plan9": 46 case "plan9":
45 continue 47 continue
46 } 48 }
47 if os.Getuid() != 0 { 49 if os.Getuid() != 0 {
48 continue 50 continue
49 } 51 }
50 » » » id := os.Getpid() & 0xffff 52 » » » var err error
51 » » » wb = newICMPEchoRequest(id, 1, 128, []byte("IP PACKETCON N TEST")) 53 » » » wb, err = (&icmpMessage{
54 » » » » Type: icmpv4EchoRequest, Code: 0,
55 » » » » Body: &icmpEcho{
56 » » » » » ID: os.Getpid() & 0xffff, Seq: i + 1,
57 » » » » » Data: []byte("IP PACKETCONN TEST"),
58 » » » » },
59 » » » }).Marshal()
60 » » » if err != nil {
61 » » » » t.Fatalf("icmpMessage.Marshal failed: %v", err)
62 » » » }
52 case "unixgram": 63 case "unixgram":
53 switch runtime.GOOS { 64 switch runtime.GOOS {
54 case "plan9", "windows": 65 case "plan9", "windows":
55 continue 66 continue
56 } 67 }
57 wb = []byte("UNIXGRAM PACKETCONN TEST") 68 wb = []byte("UNIXGRAM PACKETCONN TEST")
58 default: 69 default:
59 continue 70 continue
60 } 71 }
61 72
62 » » c1, err := net.ListenPacket(tt.net, tt.addr1) 73 » » c1, err := ListenPacket(tt.net, tt.addr1)
63 if err != nil { 74 if err != nil {
64 » » » t.Fatalf("net.ListenPacket failed: %v", err) 75 » » » t.Fatalf("ListenPacket failed: %v", err)
65 } 76 }
77 defer closer(c1, netstr[0], tt.addr1, tt.addr2)
66 c1.LocalAddr() 78 c1.LocalAddr()
67 c1.SetDeadline(time.Now().Add(100 * time.Millisecond)) 79 c1.SetDeadline(time.Now().Add(100 * time.Millisecond))
68 c1.SetReadDeadline(time.Now().Add(100 * time.Millisecond)) 80 c1.SetReadDeadline(time.Now().Add(100 * time.Millisecond))
69 c1.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)) 81 c1.SetWriteDeadline(time.Now().Add(100 * time.Millisecond))
70 defer closer(c1, netstr[0], tt.addr1, tt.addr2)
71 82
72 » » c2, err := net.ListenPacket(tt.net, tt.addr2) 83 » » c2, err := ListenPacket(tt.net, tt.addr2)
73 if err != nil { 84 if err != nil {
74 » » » t.Fatalf("net.ListenPacket failed: %v", err) 85 » » » t.Fatalf("ListenPacket failed: %v", err)
75 } 86 }
87 defer closer(c2, netstr[0], tt.addr1, tt.addr2)
76 c2.LocalAddr() 88 c2.LocalAddr()
77 c2.SetDeadline(time.Now().Add(100 * time.Millisecond)) 89 c2.SetDeadline(time.Now().Add(100 * time.Millisecond))
78 c2.SetReadDeadline(time.Now().Add(100 * time.Millisecond)) 90 c2.SetReadDeadline(time.Now().Add(100 * time.Millisecond))
79 c2.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)) 91 c2.SetWriteDeadline(time.Now().Add(100 * time.Millisecond))
80 defer closer(c2, netstr[0], tt.addr1, tt.addr2)
81 92
82 if _, err := c1.WriteTo(wb, c2.LocalAddr()); err != nil { 93 if _, err := c1.WriteTo(wb, c2.LocalAddr()); err != nil {
83 » » » t.Fatalf("net.PacketConn.WriteTo failed: %v", err) 94 » » » t.Fatalf("PacketConn.WriteTo failed: %v", err)
84 } 95 }
85 rb2 := make([]byte, 128) 96 rb2 := make([]byte, 128)
86 if _, _, err := c2.ReadFrom(rb2); err != nil { 97 if _, _, err := c2.ReadFrom(rb2); err != nil {
87 » » » t.Fatalf("net.PacketConn.ReadFrom failed: %v", err) 98 » » » t.Fatalf("PacketConn.ReadFrom failed: %v", err)
88 } 99 }
89 if _, err := c2.WriteTo(wb, c1.LocalAddr()); err != nil { 100 if _, err := c2.WriteTo(wb, c1.LocalAddr()); err != nil {
90 » » » t.Fatalf("net.PacketConn.WriteTo failed: %v", err) 101 » » » t.Fatalf("PacketConn.WriteTo failed: %v", err)
91 } 102 }
92 rb1 := make([]byte, 128) 103 rb1 := make([]byte, 128)
93 if _, _, err := c1.ReadFrom(rb1); err != nil { 104 if _, _, err := c1.ReadFrom(rb1); err != nil {
94 » » » t.Fatalf("net.PacketConn.ReadFrom failed: %v", err) 105 » » » t.Fatalf("PacketConn.ReadFrom failed: %v", err)
95 } 106 }
96 } 107 }
97 } 108 }
98 109
99 func TestConnAndPacketConn(t *testing.T) { 110 func TestConnAndPacketConn(t *testing.T) {
100 » closer := func(c net.PacketConn, net, addr1, addr2 string) { 111 » closer := func(c PacketConn, net, addr1, addr2 string) {
101 c.Close() 112 c.Close()
102 switch net { 113 switch net {
103 case "unixgram": 114 case "unixgram":
104 os.Remove(addr1) 115 os.Remove(addr1)
105 os.Remove(addr2) 116 os.Remove(addr2)
106 } 117 }
107 } 118 }
108 119
109 » for _, tt := range packetConnTests { 120 » for i, tt := range packetConnTests {
110 var wb []byte 121 var wb []byte
111 netstr := strings.Split(tt.net, ":") 122 netstr := strings.Split(tt.net, ":")
112 switch netstr[0] { 123 switch netstr[0] {
113 case "udp": 124 case "udp":
114 wb = []byte("UDP PACKETCONN TEST") 125 wb = []byte("UDP PACKETCONN TEST")
115 case "ip": 126 case "ip":
116 switch runtime.GOOS { 127 switch runtime.GOOS {
117 case "plan9": 128 case "plan9":
118 continue 129 continue
119 } 130 }
120 if os.Getuid() != 0 { 131 if os.Getuid() != 0 {
121 continue 132 continue
122 } 133 }
123 » » » id := os.Getpid() & 0xffff 134 » » » var err error
124 » » » wb = newICMPEchoRequest(id, 1, 128, []byte("IP PACKETCON N TEST")) 135 » » » wb, err = (&icmpMessage{
136 » » » » Type: icmpv4EchoRequest, Code: 0,
137 » » » » Body: &icmpEcho{
138 » » » » » ID: os.Getpid() & 0xffff, Seq: i + 1,
139 » » » » » Data: []byte("IP PACKETCONN TEST"),
140 » » » » },
141 » » » }).Marshal()
142 » » » if err != nil {
143 » » » » t.Fatalf("icmpMessage.Marshal failed: %v", err)
144 » » » }
125 case "unixgram": 145 case "unixgram":
126 wb = []byte("UNIXGRAM PACKETCONN TEST") 146 wb = []byte("UNIXGRAM PACKETCONN TEST")
127 default: 147 default:
128 continue 148 continue
129 } 149 }
130 150
131 » » c1, err := net.ListenPacket(tt.net, tt.addr1) 151 » » c1, err := ListenPacket(tt.net, tt.addr1)
132 if err != nil { 152 if err != nil {
133 » » » t.Fatalf("net.ListenPacket failed: %v", err) 153 » » » t.Fatalf("ListenPacket failed: %v", err)
134 } 154 }
155 defer closer(c1, netstr[0], tt.addr1, tt.addr2)
135 c1.LocalAddr() 156 c1.LocalAddr()
136 c1.SetDeadline(time.Now().Add(100 * time.Millisecond)) 157 c1.SetDeadline(time.Now().Add(100 * time.Millisecond))
137 c1.SetReadDeadline(time.Now().Add(100 * time.Millisecond)) 158 c1.SetReadDeadline(time.Now().Add(100 * time.Millisecond))
138 c1.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)) 159 c1.SetWriteDeadline(time.Now().Add(100 * time.Millisecond))
139 defer closer(c1, netstr[0], tt.addr1, tt.addr2)
140 160
141 » » c2, err := net.Dial(tt.net, c1.LocalAddr().String()) 161 » » c2, err := Dial(tt.net, c1.LocalAddr().String())
142 if err != nil { 162 if err != nil {
143 » » » t.Fatalf("net.Dial failed: %v", err) 163 » » » t.Fatalf("Dial failed: %v", err)
144 } 164 }
165 defer c2.Close()
145 c2.LocalAddr() 166 c2.LocalAddr()
146 c2.RemoteAddr() 167 c2.RemoteAddr()
147 c2.SetDeadline(time.Now().Add(100 * time.Millisecond)) 168 c2.SetDeadline(time.Now().Add(100 * time.Millisecond))
148 c2.SetReadDeadline(time.Now().Add(100 * time.Millisecond)) 169 c2.SetReadDeadline(time.Now().Add(100 * time.Millisecond))
149 c2.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)) 170 c2.SetWriteDeadline(time.Now().Add(100 * time.Millisecond))
150 defer c2.Close()
151 171
152 if _, err := c2.Write(wb); err != nil { 172 if _, err := c2.Write(wb); err != nil {
153 » » » t.Fatalf("net.Conn.Write failed: %v", err) 173 » » » t.Fatalf("Conn.Write failed: %v", err)
154 } 174 }
155 rb1 := make([]byte, 128) 175 rb1 := make([]byte, 128)
156 if _, _, err := c1.ReadFrom(rb1); err != nil { 176 if _, _, err := c1.ReadFrom(rb1); err != nil {
157 » » » t.Fatalf("net.PacetConn.ReadFrom failed: %v", err) 177 » » » t.Fatalf("PacetConn.ReadFrom failed: %v", err)
158 } 178 }
159 » » var dst net.Addr 179 » » var dst Addr
160 switch netstr[0] { 180 switch netstr[0] {
161 case "ip": 181 case "ip":
162 » » » dst = &net.IPAddr{IP: net.IPv4(127, 0, 0, 1)} 182 » » » dst = &IPAddr{IP: IPv4(127, 0, 0, 1)}
163 case "unixgram": 183 case "unixgram":
164 continue 184 continue
165 default: 185 default:
166 dst = c2.LocalAddr() 186 dst = c2.LocalAddr()
167 } 187 }
168 if _, err := c1.WriteTo(wb, dst); err != nil { 188 if _, err := c1.WriteTo(wb, dst); err != nil {
169 » » » t.Fatalf("net.PacketConn.WriteTo failed: %v", err) 189 » » » t.Fatalf("PacketConn.WriteTo failed: %v", err)
170 } 190 }
171 rb2 := make([]byte, 128) 191 rb2 := make([]byte, 128)
172 if _, err := c2.Read(rb2); err != nil { 192 if _, err := c2.Read(rb2); err != nil {
173 » » » t.Fatalf("net.Conn.Read failed: %v", err) 193 » » » t.Fatalf("Conn.Read failed: %v", err)
174 } 194 }
175 } 195 }
176 } 196 }
LEFTRIGHT

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b