[System] Fix most warnings on the System test suite
[mono.git] / mcs / class / System / Test / System.Net / DnsCas.cs
1 //
2 // DnsCas.cs - CAS unit tests for System.Net.Dns class
3 //
4 // Author:
5 //      Sebastien Pouliot  <sebastien@ximian.com>
6 //
7 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
8 //
9
10 #if !MOBILE
11
12 using NUnit.Framework;
13
14 using System;
15 using System.Net;
16 using System.Security;
17 using System.Security.Permissions;
18 using System.Threading;
19
20 namespace MonoCasTests.System.Net {
21
22         [TestFixture]
23         [Category ("CAS")]
24         [Category ("NotWorking")] // compiler (CSC) issue (on Windows)
25         public class DnsCas {
26
27                 private const string site = "www.go-mono.com";
28                 private const int timeout = 30000;
29
30                 static ManualResetEvent reset;
31                 private string message;
32                 private string hostname;
33
34                 [TestFixtureSetUp]
35                 public void FixtureSetUp ()
36                 {
37                         reset = new ManualResetEvent (false);
38                         hostname = Dns.GetHostName ();
39                         var ip = Dns.Resolve (site).AddressList[0];
40                 }
41
42                 [TestFixtureTearDown]
43                 public void FixtureTearDown ()
44                 {
45                         reset.Close ();
46                 }
47
48                 [SetUp]
49                 public void SetUp ()
50                 {
51                         if (!SecurityManager.SecurityEnabled)
52                                 Assert.Ignore ("SecurityManager.SecurityEnabled is OFF");
53                 }
54
55                 // test Demand by denying it's caller from the required permission
56
57                 [Test]
58                 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
59                 [ExpectedException (typeof (SecurityException))]
60                 public void Deny_BeginGetHostName ()
61                 {
62                         Dns.BeginGetHostByName (null, null, null);
63                 }
64
65                 [Test]
66                 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
67                 [ExpectedException (typeof (ArgumentNullException))]
68                 public void Deny_EndGetHostByName ()
69                 {
70                         Dns.EndGetHostByName (null);
71                 }
72
73                 [Test]
74                 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
75                 [ExpectedException (typeof (SecurityException))]
76                 public void Deny_BeginResolve ()
77                 {
78                         Dns.BeginResolve (null, null, null);
79                 }
80
81                 [Test]
82                 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
83                 [ExpectedException (typeof (ArgumentNullException))]
84                 public void Deny_EndResolve ()
85                 {
86                         Dns.EndResolve (null);
87                 }
88
89                 [Test]
90                 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
91                 [ExpectedException (typeof (SecurityException))]
92                 public void Deny_GetHostByAddress_IPAddress ()
93                 {
94                         Dns.GetHostByAddress ((IPAddress)null);
95                 }
96
97                 [Test]
98                 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
99                 [ExpectedException (typeof (SecurityException))]
100                 public void Deny_GetHostByAddress_String ()
101                 {
102                         Dns.GetHostByAddress ((string)null);
103                 }
104
105                 [Test]
106                 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
107                 [ExpectedException (typeof (SecurityException))]
108                 public void Deny_GetHostByName ()
109                 {
110                         Dns.GetHostByName (site);
111                 }
112
113                 [Test]
114                 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
115 #if NET_2_0
116                 [ExpectedException (typeof (ArgumentNullException))]
117                 // so it's not a declarative attribute on the method as the
118                 // null check is done before throwing the SecurityException
119 #else
120                 [ExpectedException (typeof (SecurityException))]
121 #endif
122                 public void Deny_GetHostByName_Null ()
123                 {
124                         Dns.GetHostByName (null);
125                 }
126
127                 [Test]
128                 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
129                 [ExpectedException (typeof (SecurityException))]
130                 public void Deny_GetHostByName_HostName ()
131                 {
132                         // ... so my first guess is that you can only query 
133                         // yourself without having unrestricted DnsPermission
134                         Assert.IsNotNull (Dns.GetHostByName (hostname));
135                         // but that's wrong :-(
136                 }
137
138                 [Test]
139                 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
140                 [ExpectedException (typeof (SecurityException))]
141                 public void Deny_GetHostName ()
142                 {
143                         Dns.GetHostName ();
144                 }
145
146                 [Test]
147                 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
148                 [ExpectedException (typeof (SecurityException))]
149                 public void Deny_Resolve ()
150                 {
151                         Dns.Resolve (null);
152                 }
153
154 #if NET_2_0
155                 // TODO: New 2.0 methods aren't yet implemented in Mono
156 /*
157                 [Test]
158                 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
159                 [ExpectedException (typeof (SecurityException))]
160                 public void Deny_BeginGetHostAddresses ()
161                 {
162                         Dns.BeginGetHostAddresses (null, null, null);
163                 }
164
165                 [Test]
166                 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
167                 [ExpectedException (typeof (ArgumentNullException))]
168                 public void Deny_EndGetHostAddresses ()
169                 {
170                         Dns.EndGetHostAddresses (null);
171                 }
172
173                 [Test]
174                 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
175                 [ExpectedException (typeof (SecurityException))]
176                 public void Deny_BeginGetHostEntry_IPAddress ()
177                 {
178                         Dns.BeginGetHostEntry ((IPAddress)null, null, null);
179                 }
180
181                 [Test]
182                 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
183                 [ExpectedException (typeof (SecurityException))]
184                 public void Deny_BeginGetHostEntry_String ()
185                 {
186                         Dns.BeginGetHostEntry ((string)null, null, null);
187                 }
188
189                 [Test]
190                 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
191                 [ExpectedException (typeof (ArgumentNullException))]
192                 public void Deny_EndGetHostEntry ()
193                 {
194                         Dns.EndGetHostEntry (null);
195                 }
196
197                 [Test]
198                 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
199                 [ExpectedException (typeof (SecurityException))]
200                 public void Deny_GetHostEntry_IPAddress ()
201                 {
202                         Dns.GetHostEntry ((IPAddress)null);
203                 }
204
205                 [Test]
206                 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
207                 [ExpectedException (typeof (SecurityException))]
208                 public void Deny_GetHostEntry_String ()
209                 {
210                         Dns.GetHostEntry ((string)null);
211                 }
212
213                 [Test]
214                 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
215                 [ExpectedException (typeof (SecurityException))]
216                 public void Deny_GetHostAddresses ()
217                 {
218                         Dns.GetHostAddresses (null);
219                 }
220 */
221 #endif
222
223                 // ensure that only DnsPermission is required to call the methods
224
225                 [Test]
226                 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
227                 [ExpectedException (typeof (ArgumentNullException))]
228                 public void PermitOnly_BeginGetHostName ()
229                 {
230                         Dns.BeginGetHostByName (null, null, null);
231                 }
232
233                 [Test]
234                 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
235                 [ExpectedException (typeof (ArgumentNullException))]
236                 public void PermitOnly_BeginResolve ()
237                 {
238                         Dns.BeginResolve (null, null, null);
239                 }
240
241                 [Test]
242                 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
243                 [ExpectedException (typeof (ArgumentNullException))]
244                 public void PermitOnly_GetHostByAddress_IPAddress ()
245                 {
246                         Dns.GetHostByAddress ((IPAddress)null);
247                 }
248
249                 [Test]
250                 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
251                 [ExpectedException (typeof (ArgumentNullException))]
252                 public void PermitOnly_GetHostByAddress_String ()
253                 {
254                         Dns.GetHostByAddress ((string)null);
255                 }
256
257                 [Test]
258                 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
259                 [ExpectedException (typeof (ArgumentNullException))]
260                 public void PermitOnly_GetHostByName ()
261                 {
262                         Dns.GetHostByName (null);
263                 }
264
265                 [Test]
266                 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
267                 public void PermitOnly_GetHostName ()
268                 {
269                         Assert.IsNotNull (Dns.GetHostName ());
270                 }
271
272                 [Test]
273                 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
274                 [ExpectedException (typeof (ArgumentNullException))]
275                 public void PermitOnly_Resolve ()
276                 {
277                         Dns.Resolve (null);
278                 }
279
280 #if NET_2_0
281                 // TODO: New 2.0 methods aren't yet implemented in Mono
282 /*
283                 [Test]
284                 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
285                 [ExpectedException (typeof (ArgumentNullException))]
286                 public void PermitOnly_BeginGetHostAddresses ()
287                 {
288                         Dns.BeginGetHostAddresses (null, null, null);
289                 }
290
291                 [Test]
292                 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
293                 [ExpectedException (typeof (ArgumentNullException))]
294                 public void PermitOnly_EndGetHostAddresses ()
295                 {
296                         Dns.EndGetHostAddresses (null);
297                 }
298
299                 [Test]
300                 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
301                 [ExpectedException (typeof (ArgumentNullException))]
302                 public void PermitOnly_BeginGetHostEntry_IPAddress ()
303                 {
304                         Dns.BeginGetHostEntry ((IPAddress)null, null, null);
305                 }
306
307                 [Test]
308                 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
309                 [ExpectedException (typeof (ArgumentNullException))]
310                 public void PermitOnly_BeginGetHostEntry_String ()
311                 {
312                         Dns.BeginGetHostEntry ((string)null, null, null);
313                 }
314
315                 [Test]
316                 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
317                 [ExpectedException (typeof (ArgumentNullException))]
318                 public void PermitOnly_EndGetHostEntry ()
319                 {
320                         Dns.EndGetHostEntry (null);
321                 }
322
323                 [Test]
324                 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
325                 [ExpectedException (typeof (ArgumentNullException))]
326                 public void PermitOnly_GetHostEntry_IPAddress ()
327                 {
328                         Dns.GetHostEntry ((IPAddress)null);
329                 }
330
331                 [Test]
332                 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
333                 [ExpectedException (typeof (ArgumentNullException))]
334                 public void PermitOnly_GetHostEntry_String ()
335                 {
336                         Dns.GetHostEntry ((string)null);
337                 }
338
339                 [Test]
340                 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
341                 [ExpectedException (typeof (ArgumentNullException))]
342                 public void PermitOnly_GetHostAddresses ()
343                 {
344                         Dns.GetHostAddresses (null);
345                 }
346 */
347 #endif
348
349                 // async tests (for stack propagation)
350
351                 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
352                 private void GetHostByNameCallback (IAsyncResult ar)
353                 {
354                         Dns.EndGetHostByName (ar);
355                         try {
356                                 // can we do something bad here ?
357                                 Assert.IsNotNull (Environment.GetEnvironmentVariable ("USERNAME"));
358                                 message = "Expected a SecurityException";
359                         }
360                         catch (SecurityException) {
361                                 message = null;
362                                 reset.Set ();
363                         }
364                         catch (Exception e)
365                         {
366                                 message = e.ToString ();
367                         }
368                 }
369
370                 [Test]
371                 [EnvironmentPermission (SecurityAction.Deny, Read = "USERNAME")]
372                 public void AsyncGetHostByName ()
373                 {
374                         message = "AsyncGetHostByName";
375                         reset.Reset ();
376                         IAsyncResult r = Dns.BeginGetHostByName (site, new AsyncCallback (GetHostByNameCallback), null);
377                         Assert.IsNotNull (r, "IAsyncResult");
378                         // note for some reason r.AsyncWaitHandle.Wait won't work as expected
379                         // if (!r.AsyncWaitHandle.WaitOne (timeout, true))
380                         if (!reset.WaitOne (timeout, true))
381                                 Assert.Ignore ("Timeout");
382                         Assert.IsNull (message, message);
383                 }
384
385                 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
386                 private void ResolveCallback (IAsyncResult ar)
387                 {
388                         Dns.EndResolve (ar);
389                         try {
390                                 // can we do something bad here ?
391                                 Assert.IsNotNull (Environment.GetEnvironmentVariable ("USERNAME"));
392                                 message = "Expected a SecurityException";
393                         }
394                         catch (SecurityException) {
395                                 message = null;
396                                 reset.Set ();
397                         }
398                         catch (Exception e) {
399                                 message = e.ToString ();
400                         }
401                 }
402
403                 [Test]
404                 [EnvironmentPermission (SecurityAction.Deny, Read = "USERNAME")]
405                 public void AsyncResolve ()
406                 {
407                         message = "AsyncResolve";
408                         reset.Reset ();
409                         IAsyncResult r = Dns.BeginResolve (site, new AsyncCallback (ResolveCallback), null);
410                         Assert.IsNotNull (r, "IAsyncResult");
411                         // note for some reason r.AsyncWaitHandle.Wait won't work as expected
412                         // if (!r.AsyncWaitHandle.WaitOne (timeout, true))
413                         if (!reset.WaitOne (timeout, true))
414                                 Assert.Ignore ("Timeout");
415                         Assert.IsNull (message, message);
416                 }
417
418 #if NET_2_0
419                 // TODO: New 2.0 methods aren't yet implemented in Mono
420 /*
421                 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
422                 private void GetHostEntryCallback (IAsyncResult ar)
423                 {
424                         Dns.EndGetHostEntry (ar);
425                         try {
426                                 // can we do something bad here ?
427                                 Assert.IsNotNull (Environment.GetEnvironmentVariable ("USERNAME"));
428                                 message = "Expected a SecurityException";
429                         }
430                         catch (SecurityException) {
431                                 message = null;
432                                 reset.Set ();
433                         }
434                         catch (Exception e) {
435                                 message = e.ToString ();
436                         }
437                 }
438
439                 [Test]
440                 [EnvironmentPermission (SecurityAction.Deny, Read = "USERNAME")]
441                 [Ignore ("fails when EndGetHostEntry is called")]
442                 public void AsyncGetHostEntry_IPAddress ()
443                 {
444                         message = "AsyncGetHostEntry_IPAddress";
445                         reset.Reset ();
446                         IAsyncResult r = Dns.BeginGetHostEntry (ip, new AsyncCallback (GetHostEntryCallback), null);
447                         Assert.IsNotNull (r, "IAsyncResult");
448                         // note for some reason r.AsyncWaitHandle.Wait won't work as expected
449                         // if (!r.AsyncWaitHandle.WaitOne (timeout, true))
450                         if (!reset.WaitOne (timeout, true))
451                                 Assert.Ignore ("Timeout");
452                         Assert.IsNull (message, message);
453                 }
454
455                 [Test]
456                 [EnvironmentPermission (SecurityAction.Deny, Read = "USERNAME")]
457                 public void AsyncGetHostEntry_String ()
458                 {
459                         message = "AsyncGetHostEntry_String";
460                         reset.Reset ();
461                         IAsyncResult r = Dns.BeginGetHostEntry (site, new AsyncCallback (GetHostEntryCallback), null);
462                         Assert.IsNotNull (r, "IAsyncResult");
463                         // note for some reason r.AsyncWaitHandle.Wait won't work as expected
464                         // if (!r.AsyncWaitHandle.WaitOne (timeout, true))
465                         if (!reset.WaitOne (timeout, true))
466                                 Assert.Ignore ("Timeout");
467                         Assert.IsNull (message, message);
468                 }
469
470                 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
471                 private void GetHostAddressesCallback (IAsyncResult ar)
472                 {
473                         Dns.EndGetHostEntry (ar);
474                         try {
475                                 // can we do something bad here ?
476                                 Assert.IsNotNull (Environment.GetEnvironmentVariable ("USERNAME"));
477                                 message = "Expected a SecurityException";
478                         }
479                         catch (SecurityException) {
480                                 message = null;
481                                 reset.Set ();
482                         }
483                         catch (Exception e) {
484                                 message = e.ToString ();
485                         }
486                 }
487
488                 [Test]
489                 [EnvironmentPermission (SecurityAction.Deny, Read = "USERNAME")]
490                 public void AsyncGetHostAddresses ()
491                 {
492                         message = "AsyncGetHostAddresses";
493                         reset.Reset ();
494                         IAsyncResult r = Dns.BeginGetHostAddresses (site, new AsyncCallback (GetHostAddressesCallback), null);
495                         Assert.IsNotNull (r, "IAsyncResult");
496                         // note for some reason r.AsyncWaitHandle.Wait won't work as expected
497                         // if (!r.AsyncWaitHandle.WaitOne (timeout, true))
498                         if (!reset.WaitOne (timeout, true))
499                                 Assert.Ignore ("Timeout");
500                         Assert.IsNull (message, message);
501                 }
502 */
503 #endif
504         }
505 }
506
507 #endif