1 // System.Net.Sockets.MulticastOptionTest.cs
4 // Gert Driesen (drieseng@users.sourceforge.net)
6 // Copyright (c) 2009 Gert Driesen
11 using System.Net.Sockets;
13 using NUnit.Framework;
15 namespace MonoTests.System.Net.Sockets
18 public class MulticastOptionTest
20 [Test] // .ctor (IPAddress)
21 public void Constructor1 ()
23 MulticastOption option;
26 group = IPAddress.Parse ("239.255.255.250");
27 option = new MulticastOption (group);
28 Assert.AreSame (group, option.Group, "#A:Group");
29 Assert.AreEqual (0, option.InterfaceIndex, "#A:InterfaceIndex");
30 Assert.AreEqual (IPAddress.Any, option.LocalAddress, "#A:LocalAddress");
32 group = IPAddress.Parse ("ff02::1");
33 option = new MulticastOption (group);
34 Assert.AreSame (group, option.Group, "#B:Group");
35 Assert.AreEqual (0, option.InterfaceIndex, "#B:InterfaceIndex");
36 Assert.AreEqual (IPAddress.Any, option.LocalAddress, "#B:LocalAddress");
39 [Test] // .ctor (IPAddress)
40 public void Constructor1_Group_Null ()
43 new MulticastOption ((IPAddress) null);
45 } catch (ArgumentNullException ex) {
46 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
47 Assert.IsNull (ex.InnerException, "#3");
48 Assert.IsNotNull (ex.Message, "#4");
49 Assert.AreEqual ("group", ex.ParamName, "#5");
53 [Test] // .ctor (IPAddress, IPAddress)
54 public void Constructor2 ()
56 MulticastOption option;
60 group = IPAddress.Parse ("239.255.255.250");
61 mcint = IPAddress.Any;
62 option = new MulticastOption (group, mcint);
63 Assert.AreSame (group, option.Group, "#A:Group");
64 Assert.AreEqual (0, option.InterfaceIndex, "#A:InterfaceIndex");
65 Assert.AreEqual (mcint, option.LocalAddress, "#A:LocalAddress");
67 group = IPAddress.Parse ("ff02::1");
68 mcint = IPAddress.IPv6Any;
69 option = new MulticastOption (group, mcint);
70 Assert.AreSame (group, option.Group, "#B:Group");
71 Assert.AreEqual (0, option.InterfaceIndex, "#B:InterfaceIndex");
72 Assert.AreEqual (mcint, option.LocalAddress, "#B:LocalAddress");
75 [Test] // .ctor (IPAddress, IPAddress)
76 public void Constructor2_Group_Null ()
78 IPAddress group = null;
79 IPAddress mcint = IPAddress.Any;
82 new MulticastOption (group, mcint);
84 } catch (ArgumentNullException ex) {
85 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
86 Assert.IsNull (ex.InnerException, "#3");
87 Assert.IsNotNull (ex.Message, "#4");
88 Assert.AreEqual ("group", ex.ParamName, "#5");
92 [Test] // .ctor (IPAddress, IPAddress)
93 public void Constructor2_Mcint_Null ()
95 IPAddress group = IPAddress.Parse ("239.255.255.250");
96 IPAddress mcint = null;
99 new MulticastOption (group, mcint);
101 } catch (ArgumentNullException ex) {
102 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
103 Assert.IsNull (ex.InnerException, "#3");
104 Assert.IsNotNull (ex.Message, "#4");
105 Assert.AreEqual ("mcint", ex.ParamName, "#5");
109 [Test] // .ctor (IPAddress, Int32)
110 public void Constructor3 ()
112 MulticastOption option;
116 group = IPAddress.Parse ("239.255.255.250");
118 option = new MulticastOption (group, interfaceIndex);
119 Assert.AreSame (group, option.Group, "#A:Group");
120 Assert.AreEqual (interfaceIndex, option.InterfaceIndex, "#A:InterfaceIndex");
121 Assert.AreEqual (null, option.LocalAddress, "#A:LocalAddress");
123 group = IPAddress.Parse ("ff02::1");
125 option = new MulticastOption (group, interfaceIndex);
126 Assert.AreSame (group, option.Group, "#B:Group");
127 Assert.AreEqual (interfaceIndex, option.InterfaceIndex, "#B:InterfaceIndex");
128 Assert.AreEqual (null, option.LocalAddress, "#B:LocalAddress");
130 group = IPAddress.Parse ("239.255.255.250");
131 interfaceIndex = 124;
132 option = new MulticastOption (group, interfaceIndex);
133 Assert.AreSame (group, option.Group, "#C:Group");
134 Assert.AreEqual (interfaceIndex, option.InterfaceIndex, "#C:InterfaceIndex");
135 Assert.AreEqual (null, option.LocalAddress, "#C:LocalAddress");
137 group = IPAddress.Parse ("ff02::1");
138 interfaceIndex = 124;
139 option = new MulticastOption (group, interfaceIndex);
140 Assert.AreSame (group, option.Group, "#D:Group");
141 Assert.AreEqual (interfaceIndex, option.InterfaceIndex, "#D:InterfaceIndex");
142 Assert.AreEqual (null, option.LocalAddress, "#D:LocalAddress");
144 group = IPAddress.Parse ("239.255.255.250");
145 interfaceIndex = 0xFFFFFF;
146 option = new MulticastOption (group, interfaceIndex);
147 Assert.AreSame (group, option.Group, "#E:Group");
148 Assert.AreEqual (interfaceIndex, option.InterfaceIndex, "#E:InterfaceIndex");
149 Assert.AreEqual (null, option.LocalAddress, "#E:LocalAddress");
151 group = IPAddress.Parse ("ff02::1");
152 interfaceIndex = 0xFFFFFF;
153 option = new MulticastOption (group, interfaceIndex);
154 Assert.AreSame (group, option.Group, "#F:Group");
155 Assert.AreEqual (interfaceIndex, option.InterfaceIndex, "#F:InterfaceIndex");
156 Assert.AreEqual (null, option.LocalAddress, "#F:LocalAddress");
159 [Test] // .ctor (IPAddress, Int32)
160 public void Constructor3_Group_Null ()
162 IPAddress group = null;
165 new MulticastOption (group, int.MaxValue);
167 } catch (ArgumentNullException ex) {
168 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
169 Assert.IsNull (ex.InnerException, "#3");
170 Assert.IsNotNull (ex.Message, "#4");
171 Assert.AreEqual ("group", ex.ParamName, "#5");
175 [Test] // .ctor (IPAddress, Int32)
176 public void Constructor3_InterfaceIndex_OutOfRange ()
178 IPAddress group = IPAddress.Parse ("239.255.255.250");
181 new MulticastOption (group, -1);
183 } catch (ArgumentOutOfRangeException ex) {
184 // Specified argument was out of the range of valid values
185 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
186 Assert.IsNull (ex.InnerException, "#A3");
187 Assert.IsNotNull (ex.Message, "#A4");
188 Assert.AreEqual ("interfaceIndex", ex.ParamName, "#A5");
192 new MulticastOption (group, 0x1000000);
194 } catch (ArgumentOutOfRangeException ex) {
195 // Specified argument was out of the range of valid values
196 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
197 Assert.IsNull (ex.InnerException, "#B3");
198 Assert.IsNotNull (ex.Message, "#B4");
199 Assert.AreEqual ("interfaceIndex", ex.ParamName, "#B5");
208 MulticastOption option;
210 local = Dns.GetHostEntry (string.Empty).AddressList [0];
211 group = IPAddress.Parse ("239.255.255.250");
212 option = new MulticastOption (group, local);
213 group = IPAddress.Parse ("224.0.0.23");
214 option.Group = group;
215 Assert.AreSame (group, option.Group, "#A1");
216 Assert.AreSame (local, option.LocalAddress, "#A2");
217 group = IPAddress.Parse ("239.255.255.250");
218 option.Group = group;
219 Assert.AreSame (group, option.Group, "#B1");
220 Assert.AreSame (local, option.LocalAddress, "#B2");
221 group = IPAddress.Parse ("ff02::1");
222 option.Group = group;
223 Assert.AreSame (group, option.Group, "#C1");
224 Assert.AreSame (local, option.LocalAddress, "#C2");
226 Assert.IsNull (option.Group, "#D1");
227 Assert.AreSame (local, option.LocalAddress, "#D2");
228 option = new MulticastOption (group, 5);
229 group = IPAddress.Parse ("224.0.0.23");
230 option.Group = group;
231 Assert.AreSame (group, option.Group, "#E1");
232 Assert.AreEqual (5, option.InterfaceIndex, "#E2");
233 Assert.IsNull (option.LocalAddress, "#E3");
237 public void InterfaceIndex ()
241 MulticastOption option;
243 group = IPAddress.Parse ("239.255.255.250");
244 option = new MulticastOption (group, 10);
245 option.InterfaceIndex = 0;
246 Assert.AreSame (group, option.Group, "#A1");
247 Assert.AreEqual (0, option.InterfaceIndex, "#A2");
248 Assert.IsNull (option.LocalAddress, "#A3");
249 option.InterfaceIndex = 124;
250 Assert.AreSame (group, option.Group, "#B1");
251 Assert.AreEqual (124, option.InterfaceIndex, "#B2");
252 Assert.IsNull (option.LocalAddress, "#B3");
253 option.InterfaceIndex = 0xFFFFFF;
254 Assert.AreSame (group, option.Group, "#C1");
255 Assert.AreEqual (0xFFFFFF, option.InterfaceIndex, "#C2");
256 Assert.IsNull (option.LocalAddress, "#C3");
258 local = Dns.GetHostEntry (string.Empty).AddressList [0];
259 option = new MulticastOption (group, local);
260 option.InterfaceIndex = 10;
261 Assert.AreSame (group, option.Group, "#D1");
262 Assert.AreEqual (10, option.InterfaceIndex, "#D2");
263 Assert.IsNull (option.LocalAddress, "#D3");
267 public void InterfaceIndex_Value_OutOfRange ()
269 IPAddress group = IPAddress.Parse ("239.255.255.250");
270 MulticastOption option = new MulticastOption (group, 10);
273 option.InterfaceIndex = -1;
275 } catch (ArgumentOutOfRangeException ex) {
276 // Specified argument was out of the range of valid values
277 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
278 Assert.IsNull (ex.InnerException, "#A3");
279 Assert.IsNotNull (ex.Message, "#A4");
280 Assert.AreEqual ("value", ex.ParamName, "#A5");
284 option.InterfaceIndex = 0x1000000;
286 } catch (ArgumentOutOfRangeException ex) {
287 // Specified argument was out of the range of valid values
288 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
289 Assert.IsNull (ex.InnerException, "#B3");
290 Assert.IsNotNull (ex.Message, "#B4");
291 Assert.AreEqual ("value", ex.ParamName, "#B5");
294 // ensure original value was retained
295 Assert.AreEqual (10, option.InterfaceIndex, "#C");
299 public void LocalAddress ()
303 MulticastOption option;
305 local = Dns.GetHostEntry (string.Empty).AddressList [0];
306 group = IPAddress.Parse ("239.255.255.250");
307 option = new MulticastOption (group, local);
308 local = IPAddress.Loopback;
309 option.LocalAddress = local;
310 Assert.AreSame (group, option.Group, "#A1");
311 Assert.AreEqual (0, option.InterfaceIndex, "#A2");
312 Assert.AreSame (local, option.LocalAddress, "#A3");
313 local = Dns.GetHostEntry (string.Empty).AddressList [0];
314 option.LocalAddress = local;
315 Assert.AreSame (group, option.Group, "#B1");
316 Assert.AreEqual (0, option.InterfaceIndex, "#B2");
317 Assert.AreSame (local, option.LocalAddress, "#B3");
318 option.LocalAddress = null;
319 Assert.AreSame (group, option.Group, "#C1");
320 Assert.AreEqual (0, option.InterfaceIndex, "#C2");
321 Assert.IsNull (option.LocalAddress, "#C3");
322 option = new MulticastOption (group, 5);
323 local = IPAddress.Loopback;
324 option.LocalAddress = local;
325 Assert.AreSame (group, option.Group, "#D1");
326 Assert.AreEqual (0, option.InterfaceIndex, "#D2");
327 Assert.AreSame (local, option.LocalAddress, "#D3");