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

Delta Between Two Patch Sets: ipv4/unicastsockopt_test.go

Issue 6482044: code review 6482044: go.net/ipv4: new package (Closed)
Left Patch Set: diff -r 147c4a6dca9b https://code.google.com/p/go.net Created 11 years, 7 months ago
Right Patch Set: diff -r 2513e9008213 https://code.google.com/p/go.net Created 11 years, 6 months 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:
Right: Side by side diff | Download
« no previous file with change/comment | « ipv4/unicast_test.go ('k') | no next file » | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
(no file at all)
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.
4
5 // +build darwin freebsd linux netbsd openbsd windows
6
7 package ipv4_test
8
9 import (
10 "code.google.com/p/go.net/ipv4"
11 "errors"
12 "net"
13 "os"
14 "runtime"
15 "testing"
16 )
17
18 type testUnicastConn interface {
19 TOS() (int, error)
20 SetTOS(int) error
21 TTL() (int, error)
22 SetTTL(int) error
23 }
24
25 type unicastSockoptTest struct {
26 tos int
27 ttl int
28 }
29
30 var unicastSockoptTests = []unicastSockoptTest{
31 {ipv4.DSCP_CS0 | ipv4.ECN_NOTECT, 127},
32 {ipv4.DSCP_AF11 | ipv4.ECN_NOTECT, 255},
33 }
34
35 func TestTCPUnicastSockopt(t *testing.T) {
36 for _, tt := range unicastSockoptTests {
37 listener := make(chan net.Listener)
38 go tcpListener(t, "127.0.0.1:0", listener)
39 ln := <-listener
40 if ln == nil {
41 return
42 }
43 defer ln.Close()
44 c, err := net.Dial("tcp4", ln.Addr().String())
45 if err != nil {
46 t.Errorf("net.Dial failed: %v", err)
47 return
48 }
49 defer c.Close()
50
51 cc := ipv4.NewConn(c)
52 if err := testUnicastSockopt(t, tt, cc); err != nil {
53 break
54 }
55 }
56 }
57
58 func tcpListener(t *testing.T, addr string, listener chan<- net.Listener) {
59 ln, err := net.Listen("tcp4", addr)
60 if err != nil {
61 t.Errorf("net.Listen failed: %v", err)
62 listener <- nil
63 return
64 }
65 listener <- ln
66 c, err := ln.Accept()
67 if err != nil {
68 return
69 }
70 c.Close()
71 }
72
73 func TestUDPUnicastSockopt(t *testing.T) {
74 for _, tt := range unicastSockoptTests {
75 c, err := net.ListenPacket("udp4", "127.0.0.1:0")
76 if err != nil {
77 t.Errorf("net.ListenPacket failed: %v", err)
78 return
79 }
80 defer c.Close()
81
82 p := ipv4.NewPacketConn(c)
83 if err := testUnicastSockopt(t, tt, p); err != nil {
84 break
85 }
86 }
87 }
88
89 func TestIPUnicastSockopt(t *testing.T) {
90 if os.Getuid() != 0 {
91 t.Logf("skipping test; must be root")
92 return
93 }
94
95 for _, tt := range unicastSockoptTests {
96 c, err := net.ListenPacket("ip4:icmp", "127.0.0.1")
97 if err != nil {
98 t.Errorf("net.ListenPacket failed: %v", err)
99 return
100 }
101 defer c.Close()
102
103 r, err := ipv4.NewRawConn(c)
104 if err != nil {
105 t.Errorf("ipv4.NewRawConn failed: %v", err)
106 return
107 }
108 if err := testUnicastSockopt(t, tt, r); err != nil {
109 break
110 }
111 }
112 }
113
114 func testUnicastSockopt(t *testing.T, tt unicastSockoptTest, c testUnicastConn) error {
115 switch runtime.GOOS {
116 case "windows":
117 // IP_TOS option is supported on Windows 8 and beyond.
118 t.Logf("skipping IP_TOS test on %q", runtime.GOOS)
119 default:
120 if err := c.SetTOS(tt.tos); err != nil {
121 t.Errorf("ipv4.Conn.SetTOS failed: %v", err)
122 return err
123 }
124 if v, err := c.TOS(); err != nil {
125 t.Errorf("ipv4.Conn.TOS failed: %v", err)
126 return err
127 } else if v != tt.tos {
128 t.Errorf("Got unexpected TOS value %v; expected %v", v, tt.tos)
129 return errors.New("Got unexpected TOS value")
130 }
131 }
132
133 if err := c.SetTTL(tt.ttl); err != nil {
134 t.Errorf("ipv4.Conn.SetTTL failed: %v", err)
135 return err
136 }
137 if v, err := c.TTL(); err != nil {
138 t.Errorf("ipv4.Conn.TTL failed: %v", err)
139 return err
140 } else if v != tt.ttl {
141 t.Errorf("Got unexpected TTL value %v; expected %v", v, tt.ttl)
142 return errors.New("Got unexpected TTL value")
143 }
144
145 return nil
146 }
LEFTRIGHT

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