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");
30 Assert.AreEqual (0, option.InterfaceIndex, "#A:InterfaceIndex");
32 Assert.AreEqual (IPAddress.Any, option.LocalAddress, "#A:LocalAddress");
34 group = IPAddress.Parse ("ff02::1");
35 option = new MulticastOption (group);
36 Assert.AreSame (group, option.Group, "#B:Group");
38 Assert.AreEqual (0, option.InterfaceIndex, "#B:InterfaceIndex");
40 Assert.AreEqual (IPAddress.Any, option.LocalAddress, "#B:LocalAddress");
43 [Test] // .ctor (IPAddress)
44 public void Constructor1_Group_Null ()
47 new MulticastOption ((IPAddress) null);
49 } catch (ArgumentNullException ex) {
50 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
51 Assert.IsNull (ex.InnerException, "#3");
52 Assert.IsNotNull (ex.Message, "#4");
53 Assert.AreEqual ("group", ex.ParamName, "#5");
57 [Test] // .ctor (IPAddress, IPAddress)
58 public void Constructor2 ()
60 MulticastOption option;
64 group = IPAddress.Parse ("239.255.255.250");
65 mcint = IPAddress.Any;
66 option = new MulticastOption (group, mcint);
67 Assert.AreSame (group, option.Group, "#A:Group");
69 Assert.AreEqual (0, option.InterfaceIndex, "#A:InterfaceIndex");
71 Assert.AreEqual (mcint, option.LocalAddress, "#A:LocalAddress");
73 group = IPAddress.Parse ("ff02::1");
74 mcint = IPAddress.IPv6Any;
75 option = new MulticastOption (group, mcint);
76 Assert.AreSame (group, option.Group, "#B:Group");
78 Assert.AreEqual (0, option.InterfaceIndex, "#B:InterfaceIndex");
80 Assert.AreEqual (mcint, option.LocalAddress, "#B:LocalAddress");
83 [Test] // .ctor (IPAddress, IPAddress)
84 public void Constructor2_Group_Null ()
86 IPAddress group = null;
87 IPAddress mcint = IPAddress.Any;
90 new MulticastOption (group, mcint);
92 } catch (ArgumentNullException ex) {
93 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
94 Assert.IsNull (ex.InnerException, "#3");
95 Assert.IsNotNull (ex.Message, "#4");
96 Assert.AreEqual ("group", ex.ParamName, "#5");
100 [Test] // .ctor (IPAddress, IPAddress)
101 public void Constructor2_Mcint_Null ()
103 IPAddress group = IPAddress.Parse ("239.255.255.250");
104 IPAddress mcint = null;
107 new MulticastOption (group, mcint);
109 } catch (ArgumentNullException ex) {
110 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
111 Assert.IsNull (ex.InnerException, "#3");
112 Assert.IsNotNull (ex.Message, "#4");
113 Assert.AreEqual ("mcint", ex.ParamName, "#5");
118 [Test] // .ctor (IPAddress, Int32)
119 public void Constructor3 ()
121 MulticastOption option;
125 group = IPAddress.Parse ("239.255.255.250");
127 option = new MulticastOption (group, interfaceIndex);
128 Assert.AreSame (group, option.Group, "#A:Group");
129 Assert.AreEqual (interfaceIndex, option.InterfaceIndex, "#A:InterfaceIndex");
130 Assert.AreEqual (null, option.LocalAddress, "#A:LocalAddress");
132 group = IPAddress.Parse ("ff02::1");
134 option = new MulticastOption (group, interfaceIndex);
135 Assert.AreSame (group, option.Group, "#B:Group");
136 Assert.AreEqual (interfaceIndex, option.InterfaceIndex, "#B:InterfaceIndex");
137 Assert.AreEqual (null, option.LocalAddress, "#B:LocalAddress");
139 group = IPAddress.Parse ("239.255.255.250");
140 interfaceIndex = 124;
141 option = new MulticastOption (group, interfaceIndex);
142 Assert.AreSame (group, option.Group, "#C:Group");
143 Assert.AreEqual (interfaceIndex, option.InterfaceIndex, "#C:InterfaceIndex");
144 Assert.AreEqual (null, option.LocalAddress, "#C:LocalAddress");
146 group = IPAddress.Parse ("ff02::1");
147 interfaceIndex = 124;
148 option = new MulticastOption (group, interfaceIndex);
149 Assert.AreSame (group, option.Group, "#D:Group");
150 Assert.AreEqual (interfaceIndex, option.InterfaceIndex, "#D:InterfaceIndex");
151 Assert.AreEqual (null, option.LocalAddress, "#D:LocalAddress");
153 group = IPAddress.Parse ("239.255.255.250");
154 interfaceIndex = 0xFFFFFF;
155 option = new MulticastOption (group, interfaceIndex);
156 Assert.AreSame (group, option.Group, "#E:Group");
157 Assert.AreEqual (interfaceIndex, option.InterfaceIndex, "#E:InterfaceIndex");
158 Assert.AreEqual (null, option.LocalAddress, "#E:LocalAddress");
160 group = IPAddress.Parse ("ff02::1");
161 interfaceIndex = 0xFFFFFF;
162 option = new MulticastOption (group, interfaceIndex);
163 Assert.AreSame (group, option.Group, "#F:Group");
164 Assert.AreEqual (interfaceIndex, option.InterfaceIndex, "#F:InterfaceIndex");
165 Assert.AreEqual (null, option.LocalAddress, "#F:LocalAddress");
168 [Test] // .ctor (IPAddress, Int32)
169 public void Constructor3_Group_Null ()
171 IPAddress group = null;
174 new MulticastOption (group, int.MaxValue);
176 } catch (ArgumentNullException ex) {
177 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
178 Assert.IsNull (ex.InnerException, "#3");
179 Assert.IsNotNull (ex.Message, "#4");
180 Assert.AreEqual ("group", ex.ParamName, "#5");
184 [Test] // .ctor (IPAddress, Int32)
185 public void Constructor3_InterfaceIndex_OutOfRange ()
187 IPAddress group = IPAddress.Parse ("239.255.255.250");
190 new MulticastOption (group, -1);
192 } catch (ArgumentOutOfRangeException ex) {
193 // Specified argument was out of the range of valid values
194 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
195 Assert.IsNull (ex.InnerException, "#A3");
196 Assert.IsNotNull (ex.Message, "#A4");
197 Assert.AreEqual ("interfaceIndex", ex.ParamName, "#A5");
201 new MulticastOption (group, 0x1000000);
203 } catch (ArgumentOutOfRangeException ex) {
204 // Specified argument was out of the range of valid values
205 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
206 Assert.IsNull (ex.InnerException, "#B3");
207 Assert.IsNotNull (ex.Message, "#B4");
208 Assert.AreEqual ("interfaceIndex", ex.ParamName, "#B5");
218 MulticastOption option;
221 local = Dns.GetHostEntry (string.Empty).AddressList [0];
223 local = IPAddress.Loopback;
225 group = IPAddress.Parse ("239.255.255.250");
226 option = new MulticastOption (group, local);
227 group = IPAddress.Parse ("224.0.0.23");
228 option.Group = group;
229 Assert.AreSame (group, option.Group, "#A1");
230 Assert.AreSame (local, option.LocalAddress, "#A2");
231 group = IPAddress.Parse ("239.255.255.250");
232 option.Group = group;
233 Assert.AreSame (group, option.Group, "#B1");
234 Assert.AreSame (local, option.LocalAddress, "#B2");
235 group = IPAddress.Parse ("ff02::1");
236 option.Group = group;
237 Assert.AreSame (group, option.Group, "#C1");
238 Assert.AreSame (local, option.LocalAddress, "#C2");
240 Assert.IsNull (option.Group, "#D1");
241 Assert.AreSame (local, option.LocalAddress, "#D2");
243 option = new MulticastOption (group, 5);
244 group = IPAddress.Parse ("224.0.0.23");
245 option.Group = group;
246 Assert.AreSame (group, option.Group, "#E1");
247 Assert.AreEqual (5, option.InterfaceIndex, "#E2");
248 Assert.IsNull (option.LocalAddress, "#E3");
254 public void InterfaceIndex ()
258 MulticastOption option;
260 group = IPAddress.Parse ("239.255.255.250");
261 option = new MulticastOption (group, 10);
262 option.InterfaceIndex = 0;
263 Assert.AreSame (group, option.Group, "#A1");
264 Assert.AreEqual (0, option.InterfaceIndex, "#A2");
265 Assert.IsNull (option.LocalAddress, "#A3");
266 option.InterfaceIndex = 124;
267 Assert.AreSame (group, option.Group, "#B1");
268 Assert.AreEqual (124, option.InterfaceIndex, "#B2");
269 Assert.IsNull (option.LocalAddress, "#B3");
270 option.InterfaceIndex = 0xFFFFFF;
271 Assert.AreSame (group, option.Group, "#C1");
272 Assert.AreEqual (0xFFFFFF, option.InterfaceIndex, "#C2");
273 Assert.IsNull (option.LocalAddress, "#C3");
275 local = Dns.GetHostEntry (string.Empty).AddressList [0];
276 option = new MulticastOption (group, local);
277 option.InterfaceIndex = 10;
278 Assert.AreSame (group, option.Group, "#D1");
279 Assert.AreEqual (10, option.InterfaceIndex, "#D2");
280 Assert.IsNull (option.LocalAddress, "#D3");
284 public void InterfaceIndex_Value_OutOfRange ()
286 IPAddress group = IPAddress.Parse ("239.255.255.250");
287 MulticastOption option = new MulticastOption (group, 10);
290 option.InterfaceIndex = -1;
292 } catch (ArgumentOutOfRangeException ex) {
293 // Specified argument was out of the range of valid values
294 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
295 Assert.IsNull (ex.InnerException, "#A3");
296 Assert.IsNotNull (ex.Message, "#A4");
297 Assert.AreEqual ("value", ex.ParamName, "#A5");
301 option.InterfaceIndex = 0x1000000;
303 } catch (ArgumentOutOfRangeException ex) {
304 // Specified argument was out of the range of valid values
305 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
306 Assert.IsNull (ex.InnerException, "#B3");
307 Assert.IsNotNull (ex.Message, "#B4");
308 Assert.AreEqual ("value", ex.ParamName, "#B5");
311 // ensure original value was retained
312 Assert.AreEqual (10, option.InterfaceIndex, "#C");
317 public void LocalAddress ()
321 MulticastOption option;
324 local = Dns.GetHostEntry (string.Empty).AddressList [0];
326 local = IPAddress.Loopback;
328 group = IPAddress.Parse ("239.255.255.250");
329 option = new MulticastOption (group, local);
330 local = IPAddress.Loopback;
331 option.LocalAddress = local;
332 Assert.AreSame (group, option.Group, "#A1");
334 Assert.AreEqual (0, option.InterfaceIndex, "#A2");
336 Assert.AreSame (local, option.LocalAddress, "#A3");
338 local = Dns.GetHostEntry (string.Empty).AddressList [0];
340 local = IPAddress.Loopback;
342 option.LocalAddress = local;
343 Assert.AreSame (group, option.Group, "#B1");
345 Assert.AreEqual (0, option.InterfaceIndex, "#B2");
347 Assert.AreSame (local, option.LocalAddress, "#B3");
348 option.LocalAddress = null;
349 Assert.AreSame (group, option.Group, "#C1");
351 Assert.AreEqual (0, option.InterfaceIndex, "#C2");
353 Assert.IsNull (option.LocalAddress, "#C3");
355 option = new MulticastOption (group, 5);
356 local = IPAddress.Loopback;
357 option.LocalAddress = local;
358 Assert.AreSame (group, option.Group, "#D1");
359 Assert.AreEqual (0, option.InterfaceIndex, "#D2");
360 Assert.AreSame (local, option.LocalAddress, "#D3");