[System*] Throw a PlatformNotSupported exception when using the networking stack...
[mono.git] / mcs / class / System / Test / System.Net / DnsTest.cs
1 // DnsTest.cs - NUnit Test Cases for the System.Net.Dns class\r
2 //\r
3 // Authors: \r
4 //   Mads Pultz (mpultz@diku.dk)\r
5 //   Martin Willemoes Hansen (mwh@sysrq.dk)\r
6 //\r
7 // (C) 2001 Mads Pultz\r
8 // (C) 2003 Martin Willemoes Hansen\r
9 // \r
10 \r
11 using System;\r
12 using System.Linq;\r
13 using System.Net;\r
14 using System.Net.Sockets;\r
15 using System.Threading;\r
16 \r
17 using NUnit.Framework;\r
18 \r
19 namespace MonoTests.System.Net\r
20 {\r
21         [TestFixture]\r
22         public class DnsTest\r
23         {\r
24                 private String site1Name = "google-public-dns-a.google.com",\r
25                         site1Dot = "8.8.8.8",\r
26                         site2Name = "google-public-dns-b.google.com",\r
27                         site2Dot = "8.8.4.4",\r
28                         noneExistingSite = "unlikely.xamarin.com";\r
29                 private uint site1IP = 134744072, site2IP = 134743044; // Big-Endian\r
30 \r
31                 [Test]\r
32 #if FEATURE_NO_BSD_SOCKETS\r
33                 [ExpectedException (typeof (PlatformNotSupportedException))]\r
34 #endif\r
35                 public void AsyncGetHostByName ()\r
36                 {\r
37                         IAsyncResult async = Dns.BeginGetHostByName (site1Name, null, null);\r
38                         IPHostEntry entry = Dns.EndGetHostByName (async);\r
39                         SubTestValidIPHostEntry (entry);\r
40                         Assert.IsTrue (entry.HostName == "google-public-dns-a.google.com");\r
41                 }\r
42 \r
43                 [Test]\r
44 #if FEATURE_NO_BSD_SOCKETS\r
45                 [ExpectedException (typeof (PlatformNotSupportedException))]\r
46 #endif\r
47                 public void AsyncGetHostByNameCallback ()\r
48                 {\r
49                         var evt = new ManualResetEvent (false);\r
50                         Exception ex = null;\r
51                         Dns.BeginGetHostByName (site1Name, new AsyncCallback ((IAsyncResult ar) =>\r
52                         {\r
53                                 try {\r
54                                         IPHostEntry h;\r
55                                         h = Dns.EndGetHostByName (ar);\r
56                                         SubTestValidIPHostEntry (h);\r
57                                 } catch (Exception e) {\r
58                                         ex = e;\r
59                                 } finally {\r
60                                         evt.Set ();\r
61                                 }\r
62                         }), null);\r
63 \r
64                         Assert.IsTrue (evt.WaitOne (TimeSpan.FromSeconds (60)), "Wait");\r
65                         Assert.IsNull (ex, "Exception");\r
66                 }\r
67 \r
68                 [Test]\r
69 #if FEATURE_NO_BSD_SOCKETS\r
70                 [ExpectedException (typeof (PlatformNotSupportedException))]\r
71 #endif\r
72                 public void AsyncResolve ()\r
73                 {\r
74                         IAsyncResult async = Dns.BeginResolve (site1Dot, null, null);\r
75                         IPHostEntry entry = Dns.EndResolve (async);\r
76                         SubTestValidIPHostEntry (entry);\r
77                         var ip = GetIPv4Address (entry);\r
78                         Assert.AreEqual (site1Dot, ip.ToString ());\r
79                 }\r
80 \r
81                 [Test]\r
82 #if FEATURE_NO_BSD_SOCKETS\r
83                 [ExpectedException (typeof (PlatformNotSupportedException))]\r
84 #endif\r
85                 public void AsyncResolveCallback ()\r
86                 {\r
87                         var evt = new ManualResetEvent (false);\r
88                         Exception ex = null;\r
89                         Dns.BeginResolve (site1Name, new AsyncCallback ((IAsyncResult ar) =>\r
90                         {\r
91                                 try {\r
92                                         IPHostEntry h = Dns.EndResolve (ar);\r
93                                         SubTestValidIPHostEntry (h);\r
94                                 } catch (Exception e) {\r
95                                         ex = e;\r
96                                 } finally {\r
97                                         evt.Set ();\r
98                                 }\r
99                         }), null);\r
100 \r
101                         Assert.IsTrue (evt.WaitOne (TimeSpan.FromSeconds (60)), "Wait");\r
102                         Assert.IsNull (ex, "Exception");\r
103                 }\r
104 \r
105                 [Test]\r
106                 public void BeginGetHostAddresses_HostNameOrAddress_Null ()\r
107                 {\r
108                         try {\r
109                                 Dns.BeginGetHostAddresses (\r
110                                         (string) null,\r
111                                         new AsyncCallback (ShouldntBeCalled),\r
112                                         null);\r
113                                 Assert.Fail ("#1");\r
114                         } catch (ArgumentNullException ex) {\r
115                                 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
116                                 Assert.IsNull (ex.InnerException, "#3");\r
117                                 Assert.IsNotNull (ex.Message, "#4");\r
118                                 Assert.AreEqual ("hostName", ex.ParamName, "#5");\r
119                         }\r
120                 }\r
121 \r
122                 [Test]\r
123                 public void BeginGetHostAddresses_HostNameOrAddress_UnspecifiedAddress ()\r
124                 {\r
125                         // IPv4\r
126                         try {\r
127                                 Dns.BeginGetHostAddresses (\r
128                                         "0.0.0.0",\r
129                                         new AsyncCallback (ShouldntBeCalled),\r
130                                         null);\r
131                                 Assert.Fail ("#A1");\r
132                         } catch (ArgumentException ex) {\r
133                                 // IPv4 address 0.0.0.0 and IPv6 address ::0 are\r
134                                 // unspecified addresses that cannot be used as\r
135                                 // a target address\r
136                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");\r
137                                 Assert.IsNull (ex.InnerException, "#A3");\r
138                                 Assert.IsNotNull (ex.Message, "#A4");\r
139                                 Assert.AreEqual ("hostNameOrAddress", ex.ParamName, "#A5");\r
140                         }\r
141 \r
142                         // IPv6\r
143                         try {\r
144                                 Dns.BeginGetHostAddresses (\r
145                                         "::0",\r
146                                         new AsyncCallback (ShouldntBeCalled),\r
147                                         null);\r
148                                 Assert.Fail ("#B1");\r
149                         } catch (ArgumentException ex) {\r
150                                 // IPv4 address 0.0.0.0 and IPv6 address ::0 are\r
151                                 // unspecified addresses that cannot be used as\r
152                                 // a target address\r
153                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");\r
154                                 Assert.IsNull (ex.InnerException, "#B3");\r
155                                 Assert.IsNotNull (ex.Message, "#B4");\r
156                                 Assert.AreEqual ("hostNameOrAddress", ex.ParamName, "#B5");\r
157                         }\r
158                 }\r
159 \r
160                 void ShouldntBeCalled (IAsyncResult ar)\r
161                 {\r
162                         Assert.Fail ("Should not be called");\r
163                 }\r
164 \r
165                 [Test]\r
166                 public void GetHostAddresses_HostNameOrAddress_Null ()\r
167                 {\r
168                         try {\r
169                                 Dns.GetHostAddresses ((string) null);\r
170                                 Assert.Fail ("#1");\r
171                         } catch (ArgumentNullException ex) {\r
172                                 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
173                                 Assert.IsNull (ex.InnerException, "#3");\r
174                                 Assert.IsNotNull (ex.Message, "#4");\r
175                                 Assert.AreEqual ("hostNameOrAddress", ex.ParamName, "#5");\r
176                         }\r
177                 }\r
178 \r
179                 [Test]\r
180                 public void GetHostAddresses_HostNameOrAddress_UnspecifiedAddress ()\r
181                 {\r
182                         // IPv4\r
183                         try {\r
184                                 Dns.GetHostAddresses ("0.0.0.0");\r
185                                 Assert.Fail ("#A1");\r
186                         } catch (ArgumentException ex) {\r
187                                 // IPv4 address 0.0.0.0 and IPv6 address ::0 are\r
188                                 // unspecified addresses that cannot be used as\r
189                                 // a target address\r
190                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");\r
191                                 Assert.IsNull (ex.InnerException, "#A3");\r
192                                 Assert.IsNotNull (ex.Message, "#A4");\r
193                                 Assert.AreEqual ("hostNameOrAddress", ex.ParamName, "#A5");\r
194                         }\r
195 \r
196                         // IPv6\r
197                         try {\r
198                                 Dns.GetHostAddresses ("::0");\r
199                                 Assert.Fail ("#B1");\r
200                         } catch (ArgumentException ex) {\r
201                                 // IPv4 address 0.0.0.0 and IPv6 address ::0 are\r
202                                 // unspecified addresses that cannot be used as\r
203                                 // a target address\r
204                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");\r
205                                 Assert.IsNull (ex.InnerException, "#B3");\r
206                                 Assert.IsNotNull (ex.Message, "#B4");\r
207                                 Assert.AreEqual ("hostNameOrAddress", ex.ParamName, "#B5");\r
208                         }\r
209                 }\r
210 \r
211                 [Test]\r
212                 public void GetHostName ()\r
213                 {\r
214                         string hostName = Dns.GetHostName ();\r
215                         Assert.IsNotNull (hostName);\r
216                 }\r
217 \r
218                 [Test]\r
219 #if FEATURE_NO_BSD_SOCKETS\r
220                 [ExpectedException (typeof (PlatformNotSupportedException))]\r
221 #endif\r
222                 public void GetHostByName ()\r
223                 {\r
224                         SubTestGetHostByName (site1Name, site1Dot);\r
225                         SubTestGetHostByName (site2Name, site2Dot);\r
226                         try {\r
227                                 var entry = Dns.GetHostByName (noneExistingSite);\r
228                                 /*\r
229                                  * Work around broken t-online.de DNS Server.\r
230                                  * \r
231                                  * T-Online's DNS Server for DSL Customers resolves\r
232                                  * non-exisitng domain names to\r
233                                  * http://navigationshilfe1.t-online.de/dnserror?url=....\r
234                                  * instead of reporting an error.\r
235                                  */\r
236                                 var navigationshilfe1 = IPAddress.Parse ("80.156.86.78");\r
237                                 var navigationshilfe2 = IPAddress.Parse ("62.157.140.133");\r
238                                 foreach (var addr in entry.AddressList) {\r
239                                         if (addr.Equals (navigationshilfe1) || addr.Equals (navigationshilfe2))\r
240                                                 return;\r
241                                 }\r
242                                 Assert.Fail ("Should raise a SocketException (assuming that '" + noneExistingSite + "' does not exist)");\r
243                         } catch (SocketException) {\r
244                         }\r
245                 }\r
246 \r
247                 static IPAddress GetIPv4Address (IPHostEntry h)\r
248                 {\r
249                         var al = h.AddressList.FirstOrDefault (x => x.AddressFamily == AddressFamily.InterNetwork);\r
250                         if (al == null)\r
251                                 Assert.Ignore ("Could not resolve an IPv4 address as required by this test case, e.g. running on an IPv6 only network");\r
252                         return al;\r
253                 }\r
254 \r
255                 void SubTestGetHostByName (string siteName, string siteDot)\r
256                 {\r
257                         IPHostEntry h = Dns.GetHostByName (siteName);\r
258                         SubTestValidIPHostEntry (h);\r
259                         Assert.AreEqual (siteName, h.HostName, "siteName");\r
260                         var ip = GetIPv4Address (h);\r
261                         Assert.AreEqual (siteDot, ip.ToString (), "siteDot");\r
262                 }\r
263 \r
264                 [Test]\r
265                 public void GetHostByName_HostName_Null ()\r
266                 {\r
267                         try {\r
268                                 Dns.GetHostByName ((string) null);\r
269                                 Assert.Fail ("#1");\r
270                         } catch (ArgumentNullException ex) {\r
271                                 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
272                                 Assert.IsNull (ex.InnerException, "#3");\r
273                                 Assert.IsNotNull (ex.Message, "#4");\r
274                                 Assert.AreEqual ("hostName", ex.ParamName, "#5");\r
275                         }\r
276                 }\r
277 \r
278                 [Test]\r
279                 public void GetHostByAddressString_Address_Null ()\r
280                 {\r
281                         try {\r
282                                 Dns.GetHostByAddress ((string) null);\r
283                                 Assert.Fail ("#1");\r
284                         } catch (ArgumentNullException ex) {\r
285                                 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
286                                 Assert.IsNull (ex.InnerException, "#3");\r
287                                 Assert.IsNotNull (ex.Message, "#4");\r
288                                 Assert.AreEqual ("address", ex.ParamName, "#5");\r
289                         }\r
290                 }\r
291 \r
292                 [Test]\r
293                 [ExpectedException (typeof (SocketException))]\r
294                 public void GetHostByAddressString2 ()\r
295                 {\r
296                         Dns.GetHostByAddress ("123.255.23");\r
297                 }\r
298 \r
299                 [Test]\r
300                 [ExpectedException (typeof (FormatException))]\r
301                 public void GetHostByAddressString3 ()\r
302                 {\r
303                         Dns.GetHostByAddress ("123.256.34.10");\r
304                 }\r
305 \r
306                 [Test, ExpectedException (typeof (FormatException))]\r
307                 public void GetHostByAddressString4 ()\r
308                 {\r
309                         Dns.GetHostByAddress ("not an IP address");\r
310                 }\r
311 \r
312                 [Test]\r
313                 public void GetHostByAddressString5 ()\r
314                 {\r
315                         Dns.GetHostByAddress (site1Dot);\r
316                 }\r
317 \r
318                 [Test]\r
319                 public void GetHostByAddressIPAddress_Address_Null ()\r
320                 {\r
321                         try {\r
322                                 Dns.GetHostByAddress ((IPAddress) null);\r
323                                 Assert.Fail ("#1");\r
324                         } catch (ArgumentNullException ex) {\r
325                                 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
326                                 Assert.IsNull (ex.InnerException, "#3");\r
327                                 Assert.IsNotNull (ex.Message, "#4");\r
328                                 Assert.AreEqual ("address", ex.ParamName, "#5");\r
329                         }\r
330                 }\r
331 \r
332                 [Test]\r
333                 public void GetHostByAddressIPAddress2 ()\r
334                 {\r
335                         IPAddress addr = new IPAddress (IPAddress.NetworkToHostOrder ((int) site1IP));\r
336                         IPHostEntry h = Dns.GetHostByAddress (addr);\r
337                         SubTestValidIPHostEntry (h);\r
338                         var ip = GetIPv4Address (h);\r
339                         Assert.AreEqual (addr.ToString (), ip.ToString ());\r
340                 }\r
341 \r
342                 [Test]\r
343                 public void GetHostByAddressIPAddress3 ()\r
344                 {\r
345                         IPAddress addr = new IPAddress (IPAddress.NetworkToHostOrder ((int) site2IP));\r
346                         IPHostEntry h = Dns.GetHostByAddress (addr);\r
347                         SubTestValidIPHostEntry (h);\r
348                         var ip = GetIPv4Address (h);\r
349                         Assert.AreEqual (addr.ToString (), ip.ToString ());\r
350                 }\r
351 \r
352                 [Test]\r
353 #if FEATURE_NO_BSD_SOCKETS\r
354                 [ExpectedException (typeof (PlatformNotSupportedException))]\r
355 #endif\r
356                 public void BeginResolve_HostName_Null ()\r
357                 {\r
358                         try {\r
359                                 Dns.BeginResolve ((string) null,\r
360                                         new AsyncCallback (ShouldntBeCalled),\r
361                                         null);\r
362                                 Assert.Fail ("#1");\r
363                         } catch (ArgumentNullException ex) {\r
364                                 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
365                                 Assert.IsNull (ex.InnerException, "#3");\r
366                                 Assert.IsNotNull (ex.Message, "#4");\r
367                                 Assert.AreEqual ("hostName", ex.ParamName, "#5");\r
368                         }\r
369                 }\r
370 \r
371                 [Test]\r
372 #if FEATURE_NO_BSD_SOCKETS\r
373                 [ExpectedException (typeof (PlatformNotSupportedException))]\r
374 #endif\r
375                 public void Resolve ()\r
376                 {\r
377                         SubTestResolve (site1Name);\r
378                         SubTestResolve (site2Name);\r
379                         SubTestResolve (site1Dot);\r
380                         SubTestResolve (site2Dot);\r
381                 }\r
382 \r
383                 void SubTestResolve (string addr)\r
384                 {\r
385                         IPHostEntry h = Dns.Resolve (addr);\r
386                         SubTestValidIPHostEntry (h);\r
387                 }\r
388 \r
389                 [Test]\r
390 #if FEATURE_NO_BSD_SOCKETS\r
391                 [ExpectedException (typeof (PlatformNotSupportedException))]\r
392 #endif\r
393                 public void Resolve_HostName_Null ()\r
394                 {\r
395                         try {\r
396                                 Dns.Resolve ((string) null);\r
397                                 Assert.Fail ("#1");\r
398                         } catch (ArgumentNullException ex) {\r
399                                 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
400                                 Assert.IsNull (ex.InnerException, "#3");\r
401                                 Assert.IsNotNull (ex.Message, "#4");\r
402                                 Assert.AreEqual ("hostName", ex.ParamName, "#5");\r
403                         }\r
404                 }\r
405 \r
406                 [Test] // BeginGetHostEntry (IPAddress, AsyncCallback, Object)\r
407 #if FEATURE_NO_BSD_SOCKETS\r
408                 [ExpectedException (typeof (PlatformNotSupportedException))]\r
409 #endif\r
410                 public void BeginGetHostEntry1_Address_Null ()\r
411                 {\r
412                         try {\r
413                                 Dns.BeginGetHostEntry (\r
414                                         (IPAddress) null,\r
415                                         new AsyncCallback (ShouldntBeCalled),\r
416                                         null);\r
417                                 Assert.Fail ("#1");\r
418                         } catch (ArgumentNullException ex) {\r
419                                 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
420                                 Assert.IsNull (ex.InnerException, "#3");\r
421                                 Assert.IsNotNull (ex.Message, "#4");\r
422                                 Assert.AreEqual ("address", ex.ParamName, "#5");\r
423                         }\r
424                 }\r
425 \r
426                 [Test] // BeginGetHostEntry (String, AsyncCallback, Object)\r
427 #if FEATURE_NO_BSD_SOCKETS\r
428                 [ExpectedException (typeof (PlatformNotSupportedException))]\r
429 #endif\r
430                 public void BeginGetHostEntry2_HostNameOrAddress_Null ()\r
431                 {\r
432                         try {\r
433                                 Dns.BeginGetHostEntry (\r
434                                         (string) null,\r
435                                         new AsyncCallback (ShouldntBeCalled),\r
436                                         null);\r
437                                 Assert.Fail ("#1");\r
438                         } catch (ArgumentNullException ex) {\r
439                                 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
440                                 Assert.IsNull (ex.InnerException, "#3");\r
441                                 Assert.IsNotNull (ex.Message, "#4");\r
442                                 Assert.AreEqual ("hostName", ex.ParamName, "#5");\r
443                         }\r
444                 }\r
445 \r
446                 [Test] // BeginGetHostEntry (String, AsyncCallback, Object)\r
447 #if FEATURE_NO_BSD_SOCKETS\r
448                 [ExpectedException (typeof (PlatformNotSupportedException))]\r
449 #endif\r
450                 public void BeginGetHostEntry2_HostNameOrAddress_UnspecifiedAddress ()\r
451                 {\r
452                         // IPv4\r
453                         try {\r
454                                 Dns.BeginGetHostEntry (\r
455                                         "0.0.0.0",\r
456                                         new AsyncCallback (GetHostEntryCallback),\r
457                                         null);\r
458                                 Assert.Fail ("#1");\r
459                         } catch (ArgumentException ex) {\r
460                                 // IPv4 address 0.0.0.0 and IPv6 address ::0 are\r
461                                 // unspecified addresses that cannot be used as\r
462                                 // a target address\r
463                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");\r
464                                 Assert.IsNull (ex.InnerException, "#3");\r
465                                 Assert.IsNotNull (ex.Message, "#4");\r
466                                 Assert.AreEqual ("hostNameOrAddress", ex.ParamName, "#5");\r
467                         }\r
468 \r
469                         // IPv6\r
470                         try {\r
471                                 Dns.BeginGetHostEntry (\r
472                                         "::0",\r
473                                         new AsyncCallback (GetHostEntryCallback),\r
474                                         null);\r
475                                 Assert.Fail ("#1");\r
476                         } catch (ArgumentException ex) {\r
477                                 // IPv4 address 0.0.0.0 and IPv6 address ::0 are\r
478                                 // unspecified addresses that cannot be used as\r
479                                 // a target address\r
480                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");\r
481                                 Assert.IsNull (ex.InnerException, "#3");\r
482                                 Assert.IsNotNull (ex.Message, "#4");\r
483                                 Assert.AreEqual ("hostNameOrAddress", ex.ParamName, "#5");\r
484                         }\r
485                 }\r
486 \r
487                 void GetHostEntryCallback (IAsyncResult ar)\r
488                 {\r
489                         IPHostEntry hostEntry = Dns.EndGetHostEntry (ar);\r
490                         Assert.IsNotNull (hostEntry);\r
491                 }\r
492 \r
493                 [Test] // GetHostEntry (IPAddress)\r
494                 public void GetHostEntry1_Address_Null ()\r
495                 {\r
496                         try {\r
497                                 Dns.GetHostEntry ((IPAddress) null);\r
498                                 Assert.Fail ("#1");\r
499                         } catch (ArgumentNullException ex) {\r
500                                 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
501                                 Assert.IsNull (ex.InnerException, "#3");\r
502                                 Assert.IsNotNull (ex.Message, "#4");\r
503                                 Assert.AreEqual ("address", ex.ParamName, "#5");\r
504                         }\r
505                 }\r
506 \r
507                 [Test] // GetHostEntry (String)\r
508 #if FEATURE_NO_BSD_SOCKETS\r
509                 [ExpectedException (typeof (PlatformNotSupportedException))]\r
510 #endif\r
511                 public void GetHostEntry2 ()\r
512                 {\r
513                         Dns.GetHostEntry (site1Name); // hostname\r
514                         Dns.GetHostEntry (site1Dot); // IP address\r
515                 }\r
516 \r
517                 [Test] // GetHostEntry (String)\r
518                 public void GetHostEntry2_HostNameOrAddress_Null ()\r
519                 {\r
520                         try {\r
521                                 Dns.GetHostEntry ((string) null);\r
522                                 Assert.Fail ("#1");\r
523                         } catch (ArgumentNullException ex) {\r
524                                 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");\r
525                                 Assert.IsNull (ex.InnerException, "#3");\r
526                                 Assert.IsNotNull (ex.Message, "#4");\r
527                                 Assert.AreEqual ("hostNameOrAddress", ex.ParamName, "#5");\r
528                         }\r
529                 }\r
530 \r
531                 [Test] // GetHostEntry (String)\r
532                 public void GetHostEntry2_HostNameOrAddress_UnspecifiedAddress ()\r
533                 {\r
534                         // IPv4\r
535                         try {\r
536                                 Dns.GetHostEntry ("0.0.0.0");\r
537                                 Assert.Fail ("#A1");\r
538                         } catch (ArgumentException ex) {\r
539                                 // IPv4 address 0.0.0.0 and IPv6 address ::0 are\r
540                                 // unspecified addresses that cannot be used as\r
541                                 // a target address\r
542                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");\r
543                                 Assert.IsNull (ex.InnerException, "#A3");\r
544                                 Assert.IsNotNull (ex.Message, "#A4");\r
545                                 Assert.AreEqual ("hostNameOrAddress", ex.ParamName, "#A5");\r
546                         }\r
547 \r
548                         // IPv6\r
549                         try {\r
550                                 Dns.GetHostEntry ("::0");\r
551                                 Assert.Fail ("#B1");\r
552                         } catch (ArgumentException ex) {\r
553                                 // IPv4 address 0.0.0.0 and IPv6 address ::0 are\r
554                                 // unspecified addresses that cannot be used as\r
555                                 // a target address\r
556                                 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");\r
557                                 Assert.IsNull (ex.InnerException, "#B3");\r
558                                 Assert.IsNotNull (ex.Message, "#B4");\r
559                                 Assert.AreEqual ("hostNameOrAddress", ex.ParamName, "#B5");\r
560                         }\r
561                 }\r
562 \r
563                 void SubTestValidIPHostEntry (IPHostEntry h)\r
564                 {\r
565                         Assert.IsNotNull (h.HostName, "HostName not null");\r
566                         Assert.IsNotNull (h.AddressList, "AddressList not null");\r
567                         Assert.IsTrue (h.AddressList.Length > 0, "AddressList.Length");\r
568                 }\r
569 \r
570                 [Test]\r
571                 public void GetHostEntry_StringEmpty ()\r
572                 {\r
573                         Dns.GetHostEntry (string.Empty);\r
574                 }\r
575 \r
576                 /* This isn't used anymore, but could be useful for debugging\r
577                 static void printIPHostEntry(IPHostEntry h)\r
578                 {\r
579                         Console.WriteLine("----------------------------------------------------");\r
580                         Console.WriteLine("Host name:");\r
581                         Console.WriteLine(h.HostName);\r
582                         Console.WriteLine("IP addresses:");\r
583                         IPAddress[] list = h.AddressList;\r
584                         for(int i = 0; i < list.Length; ++i)\r
585                                 Console.WriteLine(list[i]);\r
586                         Console.WriteLine("Aliases:");\r
587                         string[] aliases = h.Aliases;\r
588                         for(int i = 0; i < aliases.Length; ++i)\r
589                                 Console.WriteLine(aliases[i]);\r
590                         Console.WriteLine("----------------------------------------------------");\r
591                 }\r
592                 */\r
593         }\r
594 }\r