New test.
[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 // 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
16 //\r
17 \r
18 using NUnit.Framework;\r
19 using System;\r
20 using System.Net;\r
21 using System.Net.Sockets;\r
22 using System.Threading;\r
23 using System.Collections;\r
24 \r
25 namespace MonoTests.System.Net {\r
26 \r
27 [TestFixture]\r
28 public class DnsTest : Assertion {\r
29         \r
30         private String site1Name = "www.go-mono.com",\r
31                 site1Dot = "64.14.94.188",\r
32                 site2Name = "info.diku.dk",\r
33                 site2Dot = "130.225.96.4",\r
34                 noneExistingSite = "www.unlikely.novell.com";\r
35         private uint site1IP = 2180692201, site2IP = 2195808260; // Big-Endian\r
36         \r
37         private void GetHostByNameCallback (IAsyncResult ar)\r
38         {\r
39                 IPHostEntry h;\r
40                 h = Dns.EndGetHostByName(ar);\r
41                 SubTestValidIPHostEntry(h);\r
42         }\r
43 \r
44         [Test]\r
45         public void AsyncGetHostByName(){\r
46                 IAsyncResult r;\r
47                 r = Dns.BeginGetHostByName (site1Name, new AsyncCallback (GetHostByNameCallback), null);\r
48                 \r
49                 IAsyncResult async = Dns.BeginGetHostByName (site1Name, null, null);\r
50                 IPHostEntry entry = Dns.EndGetHostByName (async);                \r
51                 SubTestValidIPHostEntry(entry);\r
52                 AssertEquals ("#1", "www.go-mono.com", entry.HostName);\r
53         }\r
54 \r
55         private void ResolveCallback (IAsyncResult ar)\r
56         {\r
57                 IPHostEntry h = Dns.EndResolve (ar);\r
58                 SubTestValidIPHostEntry (h);\r
59         }\r
60         \r
61         [Test]\r
62         public void AsyncResolve() {\r
63                 IAsyncResult r;\r
64                 r = Dns.BeginResolve (site1Name, new AsyncCallback (ResolveCallback), null);\r
65 \r
66                 IAsyncResult async = Dns.BeginResolve (site1Dot, null, null);\r
67                 IPHostEntry entry = Dns.EndResolve (async);                \r
68                 SubTestValidIPHostEntry(entry);\r
69                 AssertEquals ("#1", site1Dot, entry.HostName);\r
70         }\r
71         \r
72         [Test]\r
73         public void GetHostName() {\r
74                 string hostName = Dns.GetHostName();\r
75                 AssertNotNull (hostName);\r
76         }\r
77         \r
78         private void SubTestGetHostByName(string siteName, string siteDot) {\r
79                 IPHostEntry h = Dns.GetHostByName(siteName);\r
80                 SubTestValidIPHostEntry(h);\r
81                 AssertEquals ("siteName", siteName, h.HostName);\r
82                 AssertEquals ("siteDot", siteDot, h.AddressList[0].ToString());\r
83         }\r
84         \r
85         [Test]\r
86         public void GetHostByName() {\r
87                 SubTestGetHostByName(site1Name, site1Dot);\r
88                 SubTestGetHostByName(site2Name, site2Dot);\r
89                 try {\r
90                         Dns.GetHostByName(noneExistingSite);\r
91                         Fail("Should raise a SocketException (assuming that '" + noneExistingSite + "' does not exist)");\r
92                 } catch (SocketException) {\r
93                 } \r
94                 try {\r
95                         Dns.GetHostByName(null);\r
96                         Fail("Should raise an ArgumentNullException");\r
97                 } catch (ArgumentNullException) {\r
98                 } \r
99         }\r
100         \r
101         private void SubTestGetHostByAddressString(string addr) {\r
102                 IPHostEntry h = Dns.GetHostByAddress(addr);\r
103                 SubTestValidIPHostEntry(h);\r
104         }\r
105         \r
106         [Test, ExpectedException (typeof (ArgumentNullException))]\r
107         public void GetHostByAddressString1() {\r
108                 String addr = null;\r
109                 Dns.GetHostByAddress(addr);\r
110         }\r
111 \r
112         [Test, ExpectedException (typeof (SocketException))]\r
113         public void GetHostByAddressString2() {\r
114                 Dns.GetHostByAddress ("123.255.23");\r
115         }\r
116 \r
117         [Test, ExpectedException (typeof (FormatException))]\r
118         public void GetHostByAddressString3() {\r
119                 Dns.GetHostByAddress ("123.256.34.10");\r
120         }\r
121 \r
122         [Test, ExpectedException (typeof (FormatException))]\r
123         public void GetHostByAddressString4() {\r
124                 Dns.GetHostByAddress ("not an IP address");\r
125         }\r
126 \r
127         [Test]\r
128 #if ONLY_1_1\r
129         [ExpectedException (typeof (SocketException))]\r
130 #endif\r
131         public void GetHostByAddressString5() {\r
132                 Dns.GetHostByAddress (site1Dot);\r
133         }\r
134 \r
135         [Test, ExpectedException (typeof (ArgumentNullException))]\r
136         public void GetHostByAddressIPAddress1() {\r
137                 IPAddress addr = null;\r
138                 Dns.GetHostByAddress(addr);\r
139         }\r
140 \r
141         public void GetHostByAddressIPAddress2() {\r
142                 IPAddress addr = new IPAddress(IPAddress.NetworkToHostOrder((int)site1IP));\r
143                 IPHostEntry h = Dns.GetHostByAddress(addr);\r
144                 SubTestValidIPHostEntry(h);\r
145                 AssertEquals (addr.ToString(), h.AddressList[0].ToString());\r
146         }\r
147         \r
148         public void GetHostByAddressIPAddress3() {\r
149                 IPAddress addr = new IPAddress(IPAddress.NetworkToHostOrder((int)site2IP));\r
150                 IPHostEntry h = Dns.GetHostByAddress(addr);\r
151                 SubTestValidIPHostEntry(h);\r
152                 AssertEquals (addr.ToString(), h.AddressList[0].ToString());\r
153         }\r
154 \r
155         private void SubTestResolve(string addr) {\r
156                 IPHostEntry h = Dns.Resolve(addr);\r
157                 SubTestValidIPHostEntry(h);\r
158         }\r
159         \r
160         [Test]\r
161         public void Resolve() {\r
162                 SubTestResolve(site1Name);\r
163                 SubTestResolve(site2Name);\r
164                 SubTestResolve(site1Dot);\r
165                 SubTestResolve(site2Dot);\r
166         }\r
167 \r
168 #if NET_2_0\r
169         [Test]\r
170         public void GetHostEntry ()\r
171         {\r
172                 Dns.GetHostEntry (site1Name); // hostname\r
173                 Dns.GetHostEntry (site1Dot); // IP address\r
174         }\r
175 #endif\r
176 \r
177         private void SubTestValidIPHostEntry(IPHostEntry h) {\r
178                 AssertNotNull ("HostName not null", h.HostName);\r
179                 AssertNotNull ("AddressList not null", h.AddressList);\r
180                 Assert ("AddressList.Length", h.AddressList.Length > 0);\r
181         }\r
182 /* This isn't used anymore, but could be useful for debugging         \r
183         private static void printIPHostEntry(IPHostEntry h)\r
184         {\r
185                 Console.WriteLine("----------------------------------------------------");\r
186                 Console.WriteLine("Host name:");\r
187                 Console.WriteLine(h.HostName);\r
188                 Console.WriteLine("IP addresses:");\r
189                 IPAddress[] list = h.AddressList;\r
190                 for(int i = 0; i < list.Length; ++i)\r
191                         Console.WriteLine(list[i]);\r
192                 Console.WriteLine("Aliases:");\r
193                 string[] aliases = h.Aliases;\r
194                 for(int i = 0; i < aliases.Length; ++i)\r
195                         Console.WriteLine(aliases[i]);\r
196                 Console.WriteLine("----------------------------------------------------");\r
197         }\r
198 */\r
199 }\r
200 \r
201 }\r