1 // DnsTest.cs - NUnit Test Cases for the System.Net.Dns class
\r
4 // Mads Pultz (mpultz@diku.dk)
\r
5 // Martin Willemoes Hansen (mwh@sysrq.dk)
\r
7 // (C) 2001 Mads Pultz
\r
8 // (C) 2003 Martin Willemoes Hansen
\r
10 // This test assumes the following:
\r
11 // 1) The following Internet sites exist:
\r
12 // www.go-mono.com with IP address 64.14.94.188
\r
13 // info.diku.dk with IP address 130.225.96.4
\r
14 // 2) The following DNS name does not exist:
\r
15 // www.hopefullydoesnotexist.dk
\r
19 using System.Collections;
\r
21 using System.Net.Sockets;
\r
22 using System.Threading;
\r
24 using NUnit.Framework;
\r
26 namespace MonoTests.System.Net
\r
29 public class DnsTest
\r
31 private String site1Name = "jenkins.mono-project.com",
\r
32 site1Dot = "162.253.133.196",
\r
33 site2Name = "info.diku.dk",
\r
34 site2Dot = "130.225.96.4",
\r
35 noneExistingSite = "unlikely.xamarin.com";
\r
36 private uint site1IP = 1852407392, site2IP = 2195808260; // Big-Endian
\r
39 public void AsyncGetHostByName ()
\r
42 r = Dns.BeginGetHostByName (site1Name, new AsyncCallback (GetHostByNameCallback), null);
\r
44 IAsyncResult async = Dns.BeginGetHostByName (site1Name, null, null);
\r
45 IPHostEntry entry = Dns.EndGetHostByName (async);
\r
46 SubTestValidIPHostEntry (entry);
\r
47 Assert.IsTrue (entry.HostName == "jenkins.mono-project.com");
\r
50 void GetHostByNameCallback (IAsyncResult ar)
\r
53 h = Dns.EndGetHostByName (ar);
\r
54 SubTestValidIPHostEntry (h);
\r
58 public void AsyncResolve ()
\r
61 r = Dns.BeginResolve (site1Name, new AsyncCallback (ResolveCallback), null);
\r
63 IAsyncResult async = Dns.BeginResolve (site1Dot, null, null);
\r
64 IPHostEntry entry = Dns.EndResolve (async);
\r
65 SubTestValidIPHostEntry (entry);
\r
66 Assert.AreEqual (site1Dot, entry.AddressList [0].ToString ());
\r
69 void ResolveCallback (IAsyncResult ar)
\r
71 IPHostEntry h = Dns.EndResolve (ar);
\r
72 SubTestValidIPHostEntry (h);
\r
77 public void BeginGetHostAddresses_HostNameOrAddress_Null ()
\r
80 Dns.BeginGetHostAddresses (
\r
82 new AsyncCallback (GetHostAddressesCallback),
\r
85 } catch (ArgumentNullException ex) {
\r
86 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
\r
87 Assert.IsNull (ex.InnerException, "#3");
\r
88 Assert.IsNotNull (ex.Message, "#4");
\r
89 Assert.AreEqual ("hostName", ex.ParamName, "#5");
\r
94 public void BeginGetHostAddresses_HostNameOrAddress_UnspecifiedAddress ()
\r
98 Dns.BeginGetHostAddresses (
\r
100 new AsyncCallback (GetHostAddressesCallback),
\r
102 Assert.Fail ("#A1");
\r
103 } catch (ArgumentException ex) {
\r
104 // IPv4 address 0.0.0.0 and IPv6 address ::0 are
\r
105 // unspecified addresses that cannot be used as
\r
106 // a target address
\r
107 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
\r
108 Assert.IsNull (ex.InnerException, "#A3");
\r
109 Assert.IsNotNull (ex.Message, "#A4");
\r
110 Assert.AreEqual ("hostNameOrAddress", ex.ParamName, "#A5");
\r
115 Dns.BeginGetHostAddresses (
\r
117 new AsyncCallback (GetHostAddressesCallback),
\r
119 Assert.Fail ("#B1");
\r
120 } catch (ArgumentException ex) {
\r
121 // IPv4 address 0.0.0.0 and IPv6 address ::0 are
\r
122 // unspecified addresses that cannot be used as
\r
123 // a target address
\r
124 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
\r
125 Assert.IsNull (ex.InnerException, "#B3");
\r
126 Assert.IsNotNull (ex.Message, "#B4");
\r
127 Assert.AreEqual ("hostNameOrAddress", ex.ParamName, "#B5");
\r
131 void GetHostAddressesCallback (IAsyncResult ar)
\r
133 IPAddress [] addresses = Dns.EndGetHostAddresses (ar);
\r
134 Assert.IsNotNull (addresses);
\r
138 public void GetHostAddresses_HostNameOrAddress_Null ()
\r
141 Dns.GetHostAddresses ((string) null);
\r
142 Assert.Fail ("#1");
\r
143 } catch (ArgumentNullException ex) {
\r
144 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
\r
145 Assert.IsNull (ex.InnerException, "#3");
\r
146 Assert.IsNotNull (ex.Message, "#4");
\r
147 Assert.AreEqual ("hostNameOrAddress", ex.ParamName, "#5");
\r
152 public void GetHostAddresses_HostNameOrAddress_UnspecifiedAddress ()
\r
156 Dns.GetHostAddresses ("0.0.0.0");
\r
157 Assert.Fail ("#A1");
\r
158 } catch (ArgumentException ex) {
\r
159 // IPv4 address 0.0.0.0 and IPv6 address ::0 are
\r
160 // unspecified addresses that cannot be used as
\r
161 // a target address
\r
162 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
\r
163 Assert.IsNull (ex.InnerException, "#A3");
\r
164 Assert.IsNotNull (ex.Message, "#A4");
\r
165 Assert.AreEqual ("hostNameOrAddress", ex.ParamName, "#A5");
\r
170 Dns.GetHostAddresses ("::0");
\r
171 Assert.Fail ("#B1");
\r
172 } catch (ArgumentException ex) {
\r
173 // IPv4 address 0.0.0.0 and IPv6 address ::0 are
\r
174 // unspecified addresses that cannot be used as
\r
175 // a target address
\r
176 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
\r
177 Assert.IsNull (ex.InnerException, "#B3");
\r
178 Assert.IsNotNull (ex.Message, "#B4");
\r
179 Assert.AreEqual ("hostNameOrAddress", ex.ParamName, "#B5");
\r
185 public void GetHostName ()
\r
187 string hostName = Dns.GetHostName ();
\r
188 Assert.IsNotNull (hostName);
\r
192 public void GetHostByName ()
\r
194 SubTestGetHostByName ("jenkins.mono-project.com", site1Dot);
\r
195 SubTestGetHostByName (site2Name, site2Dot);
\r
197 var entry = Dns.GetHostByName (noneExistingSite);
\r
199 * Work around broken t-online.de DNS Server.
\r
201 * T-Online's DNS Server for DSL Customers resolves
\r
202 * non-exisitng domain names to
\r
203 * http://navigationshilfe1.t-online.de/dnserror?url=....
\r
204 * instead of reporting an error.
\r
206 var navigationshilfe1 = IPAddress.Parse ("80.156.86.78");
\r
207 var navigationshilfe2 = IPAddress.Parse ("62.157.140.133");
\r
208 foreach (var addr in entry.AddressList) {
\r
209 if (addr.Equals (navigationshilfe1) || addr.Equals (navigationshilfe2))
\r
212 Assert.Fail ("Should raise a SocketException (assuming that '" + noneExistingSite + "' does not exist)");
\r
213 } catch (SocketException) {
\r
217 void SubTestGetHostByName (string siteName, string siteDot)
\r
219 IPHostEntry h = Dns.GetHostByName (siteName);
\r
220 SubTestValidIPHostEntry (h);
\r
221 Assert.AreEqual (siteName, h.HostName, "siteName");
\r
222 Assert.AreEqual (siteDot, h.AddressList [0].ToString (), "siteDot");
\r
226 public void GetHostByName_HostName_Null ()
\r
229 Dns.GetHostByName ((string) null);
\r
230 Assert.Fail ("#1");
\r
231 } catch (ArgumentNullException ex) {
\r
232 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
\r
233 Assert.IsNull (ex.InnerException, "#3");
\r
234 Assert.IsNotNull (ex.Message, "#4");
\r
235 Assert.AreEqual ("hostName", ex.ParamName, "#5");
\r
240 public void GetHostByAddressString_Address_Null ()
\r
243 Dns.GetHostByAddress ((string) null);
\r
244 Assert.Fail ("#1");
\r
245 } catch (ArgumentNullException ex) {
\r
246 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
\r
247 Assert.IsNull (ex.InnerException, "#3");
\r
248 Assert.IsNotNull (ex.Message, "#4");
\r
249 Assert.AreEqual ("address", ex.ParamName, "#5");
\r
254 [ExpectedException (typeof (SocketException))]
\r
255 public void GetHostByAddressString2 ()
\r
257 Dns.GetHostByAddress ("123.255.23");
\r
261 [ExpectedException (typeof (FormatException))]
\r
262 public void GetHostByAddressString3 ()
\r
264 Dns.GetHostByAddress ("123.256.34.10");
\r
267 [Test, ExpectedException (typeof (FormatException))]
\r
268 public void GetHostByAddressString4 ()
\r
270 Dns.GetHostByAddress ("not an IP address");
\r
274 public void GetHostByAddressString5 ()
\r
276 Dns.GetHostByAddress (site1Dot);
\r
280 public void GetHostByAddressIPAddress_Address_Null ()
\r
283 Dns.GetHostByAddress ((IPAddress) null);
\r
284 Assert.Fail ("#1");
\r
285 } catch (ArgumentNullException ex) {
\r
286 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
\r
287 Assert.IsNull (ex.InnerException, "#3");
\r
288 Assert.IsNotNull (ex.Message, "#4");
\r
289 Assert.AreEqual ("address", ex.ParamName, "#5");
\r
294 public void GetHostByAddressIPAddress2 ()
\r
296 IPAddress addr = new IPAddress (IPAddress.NetworkToHostOrder ((int) site1IP));
\r
297 IPHostEntry h = Dns.GetHostByAddress (addr);
\r
298 SubTestValidIPHostEntry (h);
\r
299 Assert.AreEqual (addr.ToString (), h.AddressList [0].ToString ());
\r
303 public void GetHostByAddressIPAddress3 ()
\r
305 IPAddress addr = new IPAddress (IPAddress.NetworkToHostOrder ((int) site2IP));
\r
306 IPHostEntry h = Dns.GetHostByAddress (addr);
\r
307 SubTestValidIPHostEntry (h);
\r
308 Assert.AreEqual (addr.ToString (), h.AddressList [0].ToString ());
\r
312 public void BeginResolve_HostName_Null ()
\r
315 Dns.BeginResolve ((string) null,
\r
316 new AsyncCallback (ResolveCallback),
\r
318 Assert.Fail ("#1");
\r
319 } catch (ArgumentNullException ex) {
\r
320 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
\r
321 Assert.IsNull (ex.InnerException, "#3");
\r
322 Assert.IsNotNull (ex.Message, "#4");
\r
323 Assert.AreEqual ("hostName", ex.ParamName, "#5");
\r
328 public void Resolve ()
\r
330 SubTestResolve (site1Name);
\r
331 SubTestResolve (site2Name);
\r
332 SubTestResolve (site1Dot);
\r
333 SubTestResolve (site2Dot);
\r
336 void SubTestResolve (string addr)
\r
338 IPHostEntry h = Dns.Resolve (addr);
\r
339 SubTestValidIPHostEntry (h);
\r
343 public void Resolve_HostName_Null ()
\r
346 Dns.Resolve ((string) null);
\r
347 Assert.Fail ("#1");
\r
348 } catch (ArgumentNullException ex) {
\r
349 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
\r
350 Assert.IsNull (ex.InnerException, "#3");
\r
351 Assert.IsNotNull (ex.Message, "#4");
\r
352 Assert.AreEqual ("hostName", ex.ParamName, "#5");
\r
356 [Test] // BeginGetHostEntry (IPAddress, AsyncCallback, Object)
\r
357 public void BeginGetHostEntry1_Address_Null ()
\r
360 Dns.BeginGetHostEntry (
\r
362 new AsyncCallback (GetHostAddressesCallback),
\r
364 Assert.Fail ("#1");
\r
365 } catch (ArgumentNullException ex) {
\r
366 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
\r
367 Assert.IsNull (ex.InnerException, "#3");
\r
368 Assert.IsNotNull (ex.Message, "#4");
\r
369 Assert.AreEqual ("address", ex.ParamName, "#5");
\r
373 [Test] // BeginGetHostEntry (String, AsyncCallback, Object)
\r
374 public void BeginGetHostEntry2_HostNameOrAddress_Null ()
\r
377 Dns.BeginGetHostEntry (
\r
379 new AsyncCallback (GetHostAddressesCallback),
\r
381 Assert.Fail ("#1");
\r
382 } catch (ArgumentNullException ex) {
\r
383 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
\r
384 Assert.IsNull (ex.InnerException, "#3");
\r
385 Assert.IsNotNull (ex.Message, "#4");
\r
386 Assert.AreEqual ("hostName", ex.ParamName, "#5");
\r
390 [Test] // BeginGetHostEntry (String, AsyncCallback, Object)
\r
391 public void BeginGetHostEntry2_HostNameOrAddress_UnspecifiedAddress ()
\r
395 Dns.BeginGetHostEntry (
\r
397 new AsyncCallback (GetHostEntryCallback),
\r
399 Assert.Fail ("#1");
\r
400 } catch (ArgumentException ex) {
\r
401 // IPv4 address 0.0.0.0 and IPv6 address ::0 are
\r
402 // unspecified addresses that cannot be used as
\r
403 // a target address
\r
404 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
\r
405 Assert.IsNull (ex.InnerException, "#3");
\r
406 Assert.IsNotNull (ex.Message, "#4");
\r
407 Assert.AreEqual ("hostNameOrAddress", ex.ParamName, "#5");
\r
412 Dns.BeginGetHostEntry (
\r
414 new AsyncCallback (GetHostEntryCallback),
\r
416 Assert.Fail ("#1");
\r
417 } catch (ArgumentException ex) {
\r
418 // IPv4 address 0.0.0.0 and IPv6 address ::0 are
\r
419 // unspecified addresses that cannot be used as
\r
420 // a target address
\r
421 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
\r
422 Assert.IsNull (ex.InnerException, "#3");
\r
423 Assert.IsNotNull (ex.Message, "#4");
\r
424 Assert.AreEqual ("hostNameOrAddress", ex.ParamName, "#5");
\r
428 void GetHostEntryCallback (IAsyncResult ar)
\r
430 IPHostEntry hostEntry = Dns.EndGetHostEntry (ar);
\r
431 Assert.IsNotNull (hostEntry);
\r
434 [Test] // GetHostEntry (IPAddress)
\r
435 public void GetHostEntry1_Address_Null ()
\r
438 Dns.GetHostEntry ((IPAddress) null);
\r
439 Assert.Fail ("#1");
\r
440 } catch (ArgumentNullException ex) {
\r
441 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
\r
442 Assert.IsNull (ex.InnerException, "#3");
\r
443 Assert.IsNotNull (ex.Message, "#4");
\r
444 Assert.AreEqual ("address", ex.ParamName, "#5");
\r
448 [Test] // GetHostEntry (String)
\r
449 public void GetHostEntry2 ()
\r
451 Dns.GetHostEntry (site1Name); // hostname
\r
452 Dns.GetHostEntry (site1Dot); // IP address
\r
455 [Test] // GetHostEntry (String)
\r
456 public void GetHostEntry2_HostNameOrAddress_Null ()
\r
459 Dns.GetHostEntry ((string) null);
\r
460 Assert.Fail ("#1");
\r
461 } catch (ArgumentNullException ex) {
\r
462 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
\r
463 Assert.IsNull (ex.InnerException, "#3");
\r
464 Assert.IsNotNull (ex.Message, "#4");
\r
465 Assert.AreEqual ("hostNameOrAddress", ex.ParamName, "#5");
\r
469 [Test] // GetHostEntry (String)
\r
470 public void GetHostEntry2_HostNameOrAddress_UnspecifiedAddress ()
\r
474 Dns.GetHostEntry ("0.0.0.0");
\r
475 Assert.Fail ("#A1");
\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 (), "#A2");
\r
481 Assert.IsNull (ex.InnerException, "#A3");
\r
482 Assert.IsNotNull (ex.Message, "#A4");
\r
483 Assert.AreEqual ("hostNameOrAddress", ex.ParamName, "#A5");
\r
488 Dns.GetHostEntry ("::0");
\r
489 Assert.Fail ("#B1");
\r
490 } catch (ArgumentException ex) {
\r
491 // IPv4 address 0.0.0.0 and IPv6 address ::0 are
\r
492 // unspecified addresses that cannot be used as
\r
493 // a target address
\r
494 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
\r
495 Assert.IsNull (ex.InnerException, "#B3");
\r
496 Assert.IsNotNull (ex.Message, "#B4");
\r
497 Assert.AreEqual ("hostNameOrAddress", ex.ParamName, "#B5");
\r
501 void SubTestValidIPHostEntry (IPHostEntry h)
\r
503 Assert.IsNotNull (h.HostName, "HostName not null");
\r
504 Assert.IsNotNull (h.AddressList, "AddressList not null");
\r
505 Assert.IsTrue (h.AddressList.Length > 0, "AddressList.Length");
\r
509 public void GetHostEntry_StringEmpty ()
\r
511 Dns.GetHostEntry (string.Empty);
\r
514 /* This isn't used anymore, but could be useful for debugging
\r
515 static void printIPHostEntry(IPHostEntry h)
\r
517 Console.WriteLine("----------------------------------------------------");
\r
518 Console.WriteLine("Host name:");
\r
519 Console.WriteLine(h.HostName);
\r
520 Console.WriteLine("IP addresses:");
\r
521 IPAddress[] list = h.AddressList;
\r
522 for(int i = 0; i < list.Length; ++i)
\r
523 Console.WriteLine(list[i]);
\r
524 Console.WriteLine("Aliases:");
\r
525 string[] aliases = h.Aliases;
\r
526 for(int i = 0; i < aliases.Length; ++i)
\r
527 Console.WriteLine(aliases[i]);
\r
528 Console.WriteLine("----------------------------------------------------");
\r