2009-07-11 Michael Barker <mike@middlesoft.co.uk>
[mono.git] / mcs / class / System / Test / System.Net.Sockets / IPv6MulticastOptionTest.cs
1 // System.Net.Sockets.IPv6MulticastOptionTest.cs
2 //
3 // Authors:
4 //      Gert Driesen (drieseng@users.sourceforge.net)
5 //
6 // Copyright (c) 2009 Gert Driesen
7 //
8
9 using System;
10 using System.Net;
11 using System.Net.Sockets;
12
13 using NUnit.Framework;
14
15 namespace MonoTests.System.Net.Sockets
16 {
17         [TestFixture]
18         public class IPv6MulticastOptionTest
19         {
20                 [Test] // .ctor (IPAddress)
21                 public void Constructor1 ()
22                 {
23                         IPv6MulticastOption option;
24                         IPAddress group;
25
26                         group = IPAddress.Parse ("ff02::1");
27                         option = new IPv6MulticastOption (group);
28                         Assert.AreSame (group, option.Group, "#A:Group");
29                         Assert.AreEqual (0, option.InterfaceIndex, "#A:InterfaceIndex");
30
31                         group = IPAddress.Parse ("224.0.0.23");
32                         option = new IPv6MulticastOption (group);
33                         Assert.AreSame (group, option.Group, "#B:Group");
34                         Assert.AreEqual (0, option.InterfaceIndex, "#B:InterfaceIndex");
35                 }
36
37                 [Test] // .ctor (IPAddress)
38                 public void Constructor1_Group_Null ()
39                 {
40                         try {
41                                 new IPv6MulticastOption ((IPAddress) null);
42                                 Assert.Fail ("#1");
43                         } catch (ArgumentNullException ex) {
44                                 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
45                                 Assert.IsNull (ex.InnerException, "#3");
46                                 Assert.IsNotNull (ex.Message, "#4");
47                                 Assert.AreEqual ("group", ex.ParamName, "#5");
48                         }
49                 }
50
51                 [Test] // .ctor (IPAddress, Int64)
52                 public void Constructor2 ()
53                 {
54                         IPv6MulticastOption option;
55                         IPAddress group;
56                         long interfaceIndex;
57
58                         group = IPAddress.Parse ("239.255.255.250");
59                         interfaceIndex = 0;
60                         option = new IPv6MulticastOption (group, interfaceIndex);
61                         Assert.AreSame (group, option.Group, "#A:Group");
62                         Assert.AreEqual (interfaceIndex, option.InterfaceIndex, "#A:InterfaceIndex");
63
64                         group = IPAddress.Parse ("ff02::1");
65                         interfaceIndex = 0;
66                         option = new IPv6MulticastOption (group, interfaceIndex);
67                         Assert.AreSame (group, option.Group, "#B:Group");
68                         Assert.AreEqual (interfaceIndex, option.InterfaceIndex, "#B:InterfaceIndex");
69
70                         group = IPAddress.Parse ("239.255.255.250");
71                         interfaceIndex = 124;
72                         option = new IPv6MulticastOption (group, interfaceIndex);
73                         Assert.AreSame (group, option.Group, "#C:Group");
74                         Assert.AreEqual (interfaceIndex, option.InterfaceIndex, "#C:InterfaceIndex");
75
76                         group = IPAddress.Parse ("ff02::1");
77                         interfaceIndex = 124;
78                         option = new IPv6MulticastOption (group, interfaceIndex);
79                         Assert.AreSame (group, option.Group, "#D:Group");
80                         Assert.AreEqual (interfaceIndex, option.InterfaceIndex, "#D:InterfaceIndex");
81
82                         group = IPAddress.Parse ("239.255.255.250");
83                         interfaceIndex = 0xFFFFFFFF;
84                         option = new IPv6MulticastOption (group, interfaceIndex);
85                         Assert.AreSame (group, option.Group, "#E:Group");
86                         Assert.AreEqual (interfaceIndex, option.InterfaceIndex, "#E:InterfaceIndex");
87
88                         group = IPAddress.Parse ("ff02::1");
89                         interfaceIndex = 0xFFFFFFFF;
90                         option = new IPv6MulticastOption (group, interfaceIndex);
91                         Assert.AreSame (group, option.Group, "#F:Group");
92                         Assert.AreEqual (interfaceIndex, option.InterfaceIndex, "#F:InterfaceIndex");
93                 }
94
95                 [Test] // .ctor (IPAddress, Int64)
96                 public void Constructor2_Group_Null ()
97                 {
98                         IPAddress group = null;
99
100                         try {
101                                 new IPv6MulticastOption (group, 0);
102                                 Assert.Fail ("#1");
103                         } catch (ArgumentNullException ex) {
104                                 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
105                                 Assert.IsNull (ex.InnerException, "#3");
106                                 Assert.IsNotNull (ex.Message, "#4");
107                                 Assert.AreEqual ("group", ex.ParamName, "#5");
108                         }
109                 }
110
111                 [Test] // .ctor (IPAddress, Int64)
112                 public void Constructor2_Ifindex_OutOfRange ()
113                 {
114                         IPAddress group = IPAddress.Parse ("ff02::1");
115
116                         try {
117                                 new IPv6MulticastOption (group, -1);
118                                 Assert.Fail ("#A1");
119                         } catch (ArgumentOutOfRangeException ex) {
120                                 // Specified argument was out of the range of valid values
121                                 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
122                                 Assert.IsNull (ex.InnerException, "#A3");
123                                 Assert.IsNotNull (ex.Message, "#A4");
124                                 Assert.AreEqual ("ifindex", ex.ParamName, "#A5");
125                         }
126
127                         try {
128                                 new IPv6MulticastOption (group, 0x100000000);
129                                 Assert.Fail ("#B1");
130                         } catch (ArgumentOutOfRangeException ex) {
131                                 // Specified argument was out of the range of valid values
132                                 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
133                                 Assert.IsNull (ex.InnerException, "#B3");
134                                 Assert.IsNotNull (ex.Message, "#B4");
135                                 Assert.AreEqual ("ifindex", ex.ParamName, "#B5");
136                         }
137                 }
138
139                 [Test]
140                 public void Group ()
141                 {
142                         IPAddress group;
143                         IPv6MulticastOption option;
144
145                         group = IPAddress.Parse ("239.255.255.250");
146                         option = new IPv6MulticastOption (group, 5L);
147                         group = IPAddress.Parse ("224.0.0.23");
148                         option.Group = group;
149                         Assert.AreSame (group, option.Group, "#A1");
150                         Assert.AreEqual (5L, option.InterfaceIndex, "#A2");
151                         group = IPAddress.Parse ("239.255.255.250");
152                         option.Group = group;
153                         Assert.AreSame (group, option.Group, "#B1");
154                         Assert.AreEqual (5L, option.InterfaceIndex, "#B2");
155                         group = IPAddress.Parse ("ff02::1");
156                         option.Group = group;
157                         Assert.AreSame (group, option.Group, "#C1");
158                         Assert.AreEqual (5L, option.InterfaceIndex, "#C2");
159                 }
160
161                 [Test]
162                 public void Group_Value_Null ()
163                 {
164                         IPAddress group = IPAddress.Parse ("239.255.255.250");
165                         IPv6MulticastOption option = new IPv6MulticastOption (group, 10);
166
167                         try {
168                                 option.Group = null;
169                                 Assert.Fail ("#1");
170                         } catch (ArgumentNullException ex) {
171                                 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
172                                 Assert.IsNull (ex.InnerException, "#3");
173                                 Assert.IsNotNull (ex.Message, "#4");
174                                 Assert.AreEqual ("value", ex.ParamName, "#5");
175                         }
176                 }
177
178                 [Test]
179                 public void InterfaceIndex ()
180                 {
181                         IPAddress group;
182                         IPv6MulticastOption option;
183
184                         group = IPAddress.Parse ("239.255.255.250");
185                         option = new IPv6MulticastOption (group, 10);
186                         option.InterfaceIndex = 0;
187                         Assert.AreSame (group, option.Group, "#A1");
188                         Assert.AreEqual (0, option.InterfaceIndex, "#A2");
189                         option.InterfaceIndex = 124;
190                         Assert.AreSame (group, option.Group, "#B1");
191                         Assert.AreEqual (124, option.InterfaceIndex, "#B2");
192                         option.InterfaceIndex = 0xFFFFFFFF;
193                         Assert.AreSame (group, option.Group, "#C1");
194                         Assert.AreEqual (0xFFFFFFFF, option.InterfaceIndex, "#C3");
195                 }
196
197                 [Test]
198                 public void InterfaceIndex_Value_OutOfRange ()
199                 {
200                         IPAddress group = IPAddress.Parse ("239.255.255.250");
201                         IPv6MulticastOption option = new IPv6MulticastOption (group, 10);
202
203                         try {
204                                 option.InterfaceIndex = -1;
205                                 Assert.Fail ("#A1");
206                         } catch (ArgumentOutOfRangeException ex) {
207                                 // Specified argument was out of the range of valid values
208                                 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
209                                 Assert.IsNull (ex.InnerException, "#A3");
210                                 Assert.IsNotNull (ex.Message, "#A4");
211                                 Assert.AreEqual ("value", ex.ParamName, "#A5");
212                         }
213
214                         try {
215                                 option.InterfaceIndex = 0x100000000;
216                                 Assert.Fail ("#B1");
217                         } catch (ArgumentOutOfRangeException ex) {
218                                 // Specified argument was out of the range of valid values
219                                 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
220                                 Assert.IsNull (ex.InnerException, "#B3");
221                                 Assert.IsNotNull (ex.Message, "#B4");
222                                 Assert.AreEqual ("value", ex.ParamName, "#B5");
223                         }
224
225                         // ensure original value was retained
226                         Assert.AreEqual (10, option.InterfaceIndex, "#C");
227                 }
228         }
229 }