LEFT | RIGHT |
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 // +build darwin freebsd linux openbsd | 5 // +build darwin freebsd linux netbsd openbsd windows |
6 | 6 |
7 package ipv4_test | 7 package ipv4_test |
8 | 8 |
9 import ( | 9 import ( |
10 "code.google.com/p/go.net/ipv4" | 10 "code.google.com/p/go.net/ipv4" |
11 "net" | 11 "net" |
12 "os" | 12 "os" |
| 13 "runtime" |
13 "testing" | 14 "testing" |
14 ) | 15 ) |
15 | 16 |
16 type testMulticastConn interface { | 17 type testMulticastConn interface { |
17 testUnicastConn | 18 testUnicastConn |
18 MulticastTTL() (int, error) | 19 MulticastTTL() (int, error) |
19 SetMulticastTTL(ttl int) error | 20 SetMulticastTTL(ttl int) error |
20 MulticastLoopback() (bool, error) | 21 MulticastLoopback() (bool, error) |
21 SetMulticastLoopback(bool) error | 22 SetMulticastLoopback(bool) error |
22 JoinGroup(*net.Interface, net.Addr) error | 23 JoinGroup(*net.Interface, net.Addr) error |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
70 t.Fatalf("net.ListenPacket failed: %v", err) | 71 t.Fatalf("net.ListenPacket failed: %v", err) |
71 } | 72 } |
72 defer c.Close() | 73 defer c.Close() |
73 | 74 |
74 r, _ := ipv4.NewRawConn(c) | 75 r, _ := ipv4.NewRawConn(c) |
75 testMulticastSockopt(t, tt, r, &net.IPAddr{IP: tt.gaddr}) | 76 testMulticastSockopt(t, tt, r, &net.IPAddr{IP: tt.gaddr}) |
76 } | 77 } |
77 } | 78 } |
78 | 79 |
79 func testMulticastSockopt(t *testing.T, tt multicastSockoptTest, c testMulticast
Conn, gaddr net.Addr) { | 80 func testMulticastSockopt(t *testing.T, tt multicastSockoptTest, c testMulticast
Conn, gaddr net.Addr) { |
80 » if err := c.SetTOS(tt.tos); err != nil { | 81 » switch runtime.GOOS { |
81 » » t.Fatalf("ipv4.PacketConn.SetTOS failed: %v", err) | 82 » case "windows": |
| 83 » » // IP_TOS option is supported on Windows 8 and beyond. |
| 84 » » t.Logf("skipping IP_TOS test on %q", runtime.GOOS) |
| 85 » default: |
| 86 » » if err := c.SetTOS(tt.tos); err != nil { |
| 87 » » » t.Fatalf("ipv4.PacketConn.SetTOS failed: %v", err) |
| 88 » » } |
| 89 » » if v, err := c.TOS(); err != nil { |
| 90 » » » t.Fatalf("ipv4.PacketConn.TOS failed: %v", err) |
| 91 » » } else if v != tt.tos { |
| 92 » » » t.Fatalf("Got unexpected TOS value %v; expected %v", v,
tt.tos) |
| 93 » » } |
82 } | 94 } |
| 95 |
83 if err := c.SetTTL(tt.ttl); err != nil { | 96 if err := c.SetTTL(tt.ttl); err != nil { |
84 t.Fatalf("ipv4.PacketConn.SetTTL failed: %v", err) | 97 t.Fatalf("ipv4.PacketConn.SetTTL failed: %v", err) |
85 } | |
86 if err := c.SetMulticastTTL(tt.mcttl); err != nil { | |
87 t.Fatalf("ipv4.PacketConn.SetMulticastTTL failed: %v", err) | |
88 } | |
89 if err := c.SetMulticastLoopback(tt.mcloop); err != nil { | |
90 t.Fatalf("ipv4.PacketConn.SetMulticastLoopback failed: %v", err) | |
91 } | |
92 if v, err := c.TOS(); err != nil { | |
93 t.Fatalf("ipv4.PacketConn.TOS failed: %v", err) | |
94 } else if v != tt.tos { | |
95 t.Fatalf("Got unexpected TOS value %v; expected %v", v, tt.tos) | |
96 } | 98 } |
97 if v, err := c.TTL(); err != nil { | 99 if v, err := c.TTL(); err != nil { |
98 t.Fatalf("ipv4.PacketConn.TTL failed: %v", err) | 100 t.Fatalf("ipv4.PacketConn.TTL failed: %v", err) |
99 } else if v != tt.ttl { | 101 } else if v != tt.ttl { |
100 t.Fatalf("Got unexpected TTL value %v; expected %v", v, tt.ttl) | 102 t.Fatalf("Got unexpected TTL value %v; expected %v", v, tt.ttl) |
101 } | 103 } |
| 104 |
| 105 if err := c.SetMulticastTTL(tt.mcttl); err != nil { |
| 106 t.Fatalf("ipv4.PacketConn.SetMulticastTTL failed: %v", err) |
| 107 } |
102 if v, err := c.MulticastTTL(); err != nil { | 108 if v, err := c.MulticastTTL(); err != nil { |
103 t.Fatalf("ipv4.PacketConn.MulticastTTL failed: %v", err) | 109 t.Fatalf("ipv4.PacketConn.MulticastTTL failed: %v", err) |
104 } else if v != tt.mcttl { | 110 } else if v != tt.mcttl { |
105 t.Fatalf("Got unexpected MulticastTTL value %v; expected %v", v,
tt.mcttl) | 111 t.Fatalf("Got unexpected MulticastTTL value %v; expected %v", v,
tt.mcttl) |
| 112 } |
| 113 |
| 114 if err := c.SetMulticastLoopback(tt.mcloop); err != nil { |
| 115 t.Fatalf("ipv4.PacketConn.SetMulticastLoopback failed: %v", err) |
106 } | 116 } |
107 if v, err := c.MulticastLoopback(); err != nil { | 117 if v, err := c.MulticastLoopback(); err != nil { |
108 t.Fatalf("ipv4.PacketConn.MulticastLoopback failed: %v", err) | 118 t.Fatalf("ipv4.PacketConn.MulticastLoopback failed: %v", err) |
109 } else if v != tt.mcloop { | 119 } else if v != tt.mcloop { |
110 t.Fatalf("Got unexpected MulticastLoopback value %v; expected %v
", v, tt.mcloop) | 120 t.Fatalf("Got unexpected MulticastLoopback value %v; expected %v
", v, tt.mcloop) |
111 } | 121 } |
| 122 |
112 if err := c.JoinGroup(nil, gaddr); err != nil { | 123 if err := c.JoinGroup(nil, gaddr); err != nil { |
113 t.Fatalf("ipv4.PacketConn.JoinGroup(%v) failed: %v", gaddr, err) | 124 t.Fatalf("ipv4.PacketConn.JoinGroup(%v) failed: %v", gaddr, err) |
114 } | 125 } |
115 if err := c.LeaveGroup(nil, gaddr); err != nil { | 126 if err := c.LeaveGroup(nil, gaddr); err != nil { |
116 t.Fatalf("ipv4.PacketConn.LeaveGroup(%v) failed: %v", gaddr, err
) | 127 t.Fatalf("ipv4.PacketConn.LeaveGroup(%v) failed: %v", gaddr, err
) |
117 } | 128 } |
118 } | 129 } |
LEFT | RIGHT |