update readme (#21797)
[mono-project.git] / mcs / class / System / Test / System.Net / DnsCas.cs
blob2a0598e8028b59eac106d4df254a35ac60a9a510
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 //
10 #if !MOBILE
12 using NUnit.Framework;
14 using System;
15 using System.Net;
16 using System.Security;
17 using System.Security.Permissions;
18 using System.Threading;
20 namespace MonoCasTests.System.Net {
22 [TestFixture]
23 [Category ("CAS")]
24 [Category ("NotWorking")] // compiler (CSC) issue (on Windows)
25 public class DnsCas {
27 private const string site = "www.example.com";
28 private const int timeout = 30000;
30 static ManualResetEvent reset;
31 private string message;
32 private string hostname;
34 [TestFixtureSetUp]
35 public void FixtureSetUp ()
37 reset = new ManualResetEvent (false);
38 hostname = Dns.GetHostName ();
39 var ip = Dns.Resolve (site).AddressList[0];
42 [TestFixtureTearDown]
43 public void FixtureTearDown ()
45 reset.Close ();
48 [SetUp]
49 public void SetUp ()
51 if (!SecurityManager.SecurityEnabled)
52 Assert.Ignore ("SecurityManager.SecurityEnabled is OFF");
55 // test Demand by denying it's caller from the required permission
57 [Test]
58 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
59 [ExpectedException (typeof (SecurityException))]
60 public void Deny_BeginGetHostName ()
62 Dns.BeginGetHostByName (null, null, null);
65 [Test]
66 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
67 [ExpectedException (typeof (ArgumentNullException))]
68 public void Deny_EndGetHostByName ()
70 Dns.EndGetHostByName (null);
73 [Test]
74 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
75 [ExpectedException (typeof (SecurityException))]
76 public void Deny_BeginResolve ()
78 Dns.BeginResolve (null, null, null);
81 [Test]
82 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
83 [ExpectedException (typeof (ArgumentNullException))]
84 public void Deny_EndResolve ()
86 Dns.EndResolve (null);
89 [Test]
90 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
91 [ExpectedException (typeof (SecurityException))]
92 public void Deny_GetHostByAddress_IPAddress ()
94 Dns.GetHostByAddress ((IPAddress)null);
97 [Test]
98 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
99 [ExpectedException (typeof (SecurityException))]
100 public void Deny_GetHostByAddress_String ()
102 Dns.GetHostByAddress ((string)null);
105 [Test]
106 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
107 [ExpectedException (typeof (SecurityException))]
108 public void Deny_GetHostByName ()
110 Dns.GetHostByName (site);
113 [Test]
114 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
115 [ExpectedException (typeof (ArgumentNullException))]
116 // so it's not a declarative attribute on the method as the
117 // null check is done before throwing the SecurityException
118 public void Deny_GetHostByName_Null ()
120 Dns.GetHostByName (null);
123 [Test]
124 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
125 [ExpectedException (typeof (SecurityException))]
126 public void Deny_GetHostByName_HostName ()
128 // ... so my first guess is that you can only query
129 // yourself without having unrestricted DnsPermission
130 Assert.IsNotNull (Dns.GetHostByName (hostname));
131 // but that's wrong :-(
134 [Test]
135 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
136 [ExpectedException (typeof (SecurityException))]
137 public void Deny_GetHostName ()
139 Dns.GetHostName ();
142 [Test]
143 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
144 [ExpectedException (typeof (SecurityException))]
145 public void Deny_Resolve ()
147 Dns.Resolve (null);
150 // TODO: New 2.0 methods aren't yet implemented in Mono
152 [Test]
153 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
154 [ExpectedException (typeof (SecurityException))]
155 public void Deny_BeginGetHostAddresses ()
157 Dns.BeginGetHostAddresses (null, null, null);
160 [Test]
161 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
162 [ExpectedException (typeof (ArgumentNullException))]
163 public void Deny_EndGetHostAddresses ()
165 Dns.EndGetHostAddresses (null);
168 [Test]
169 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
170 [ExpectedException (typeof (SecurityException))]
171 public void Deny_BeginGetHostEntry_IPAddress ()
173 Dns.BeginGetHostEntry ((IPAddress)null, null, null);
176 [Test]
177 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
178 [ExpectedException (typeof (SecurityException))]
179 public void Deny_BeginGetHostEntry_String ()
181 Dns.BeginGetHostEntry ((string)null, null, null);
184 [Test]
185 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
186 [ExpectedException (typeof (ArgumentNullException))]
187 public void Deny_EndGetHostEntry ()
189 Dns.EndGetHostEntry (null);
192 [Test]
193 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
194 [ExpectedException (typeof (SecurityException))]
195 public void Deny_GetHostEntry_IPAddress ()
197 Dns.GetHostEntry ((IPAddress)null);
200 [Test]
201 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
202 [ExpectedException (typeof (SecurityException))]
203 public void Deny_GetHostEntry_String ()
205 Dns.GetHostEntry ((string)null);
208 [Test]
209 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
210 [ExpectedException (typeof (SecurityException))]
211 public void Deny_GetHostAddresses ()
213 Dns.GetHostAddresses (null);
217 // ensure that only DnsPermission is required to call the methods
219 [Test]
220 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
221 [ExpectedException (typeof (ArgumentNullException))]
222 public void PermitOnly_BeginGetHostName ()
224 Dns.BeginGetHostByName (null, null, null);
227 [Test]
228 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
229 [ExpectedException (typeof (ArgumentNullException))]
230 public void PermitOnly_BeginResolve ()
232 Dns.BeginResolve (null, null, null);
235 [Test]
236 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
237 [ExpectedException (typeof (ArgumentNullException))]
238 public void PermitOnly_GetHostByAddress_IPAddress ()
240 Dns.GetHostByAddress ((IPAddress)null);
243 [Test]
244 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
245 [ExpectedException (typeof (ArgumentNullException))]
246 public void PermitOnly_GetHostByAddress_String ()
248 Dns.GetHostByAddress ((string)null);
251 [Test]
252 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
253 [ExpectedException (typeof (ArgumentNullException))]
254 public void PermitOnly_GetHostByName ()
256 Dns.GetHostByName (null);
259 [Test]
260 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
261 public void PermitOnly_GetHostName ()
263 Assert.IsNotNull (Dns.GetHostName ());
266 [Test]
267 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
268 [ExpectedException (typeof (ArgumentNullException))]
269 public void PermitOnly_Resolve ()
271 Dns.Resolve (null);
274 // TODO: New 2.0 methods aren't yet implemented in Mono
276 [Test]
277 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
278 [ExpectedException (typeof (ArgumentNullException))]
279 public void PermitOnly_BeginGetHostAddresses ()
281 Dns.BeginGetHostAddresses (null, null, null);
284 [Test]
285 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
286 [ExpectedException (typeof (ArgumentNullException))]
287 public void PermitOnly_EndGetHostAddresses ()
289 Dns.EndGetHostAddresses (null);
292 [Test]
293 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
294 [ExpectedException (typeof (ArgumentNullException))]
295 public void PermitOnly_BeginGetHostEntry_IPAddress ()
297 Dns.BeginGetHostEntry ((IPAddress)null, null, null);
300 [Test]
301 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
302 [ExpectedException (typeof (ArgumentNullException))]
303 public void PermitOnly_BeginGetHostEntry_String ()
305 Dns.BeginGetHostEntry ((string)null, null, null);
308 [Test]
309 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
310 [ExpectedException (typeof (ArgumentNullException))]
311 public void PermitOnly_EndGetHostEntry ()
313 Dns.EndGetHostEntry (null);
316 [Test]
317 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
318 [ExpectedException (typeof (ArgumentNullException))]
319 public void PermitOnly_GetHostEntry_IPAddress ()
321 Dns.GetHostEntry ((IPAddress)null);
324 [Test]
325 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
326 [ExpectedException (typeof (ArgumentNullException))]
327 public void PermitOnly_GetHostEntry_String ()
329 Dns.GetHostEntry ((string)null);
332 [Test]
333 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
334 [ExpectedException (typeof (ArgumentNullException))]
335 public void PermitOnly_GetHostAddresses ()
337 Dns.GetHostAddresses (null);
341 // async tests (for stack propagation)
343 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
344 private void GetHostByNameCallback (IAsyncResult ar)
346 Dns.EndGetHostByName (ar);
347 try {
348 // can we do something bad here ?
349 Assert.IsNotNull (Environment.GetEnvironmentVariable ("USERNAME"));
350 message = "Expected a SecurityException";
352 catch (SecurityException) {
353 message = null;
354 reset.Set ();
356 catch (Exception e)
358 message = e.ToString ();
362 [Test]
363 [EnvironmentPermission (SecurityAction.Deny, Read = "USERNAME")]
364 public void AsyncGetHostByName ()
366 message = "AsyncGetHostByName";
367 reset.Reset ();
368 IAsyncResult r = Dns.BeginGetHostByName (site, new AsyncCallback (GetHostByNameCallback), null);
369 Assert.IsNotNull (r, "IAsyncResult");
370 // note for some reason r.AsyncWaitHandle.Wait won't work as expected
371 // if (!r.AsyncWaitHandle.WaitOne (timeout, true))
372 if (!reset.WaitOne (timeout, true))
373 Assert.Ignore ("Timeout");
374 Assert.IsNull (message, message);
377 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
378 private void ResolveCallback (IAsyncResult ar)
380 Dns.EndResolve (ar);
381 try {
382 // can we do something bad here ?
383 Assert.IsNotNull (Environment.GetEnvironmentVariable ("USERNAME"));
384 message = "Expected a SecurityException";
386 catch (SecurityException) {
387 message = null;
388 reset.Set ();
390 catch (Exception e) {
391 message = e.ToString ();
395 [Test]
396 [EnvironmentPermission (SecurityAction.Deny, Read = "USERNAME")]
397 public void AsyncResolve ()
399 message = "AsyncResolve";
400 reset.Reset ();
401 IAsyncResult r = Dns.BeginResolve (site, new AsyncCallback (ResolveCallback), null);
402 Assert.IsNotNull (r, "IAsyncResult");
403 // note for some reason r.AsyncWaitHandle.Wait won't work as expected
404 // if (!r.AsyncWaitHandle.WaitOne (timeout, true))
405 if (!reset.WaitOne (timeout, true))
406 Assert.Ignore ("Timeout");
407 Assert.IsNull (message, message);
410 // TODO: New 2.0 methods aren't yet implemented in Mono
412 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
413 private void GetHostEntryCallback (IAsyncResult ar)
415 Dns.EndGetHostEntry (ar);
416 try {
417 // can we do something bad here ?
418 Assert.IsNotNull (Environment.GetEnvironmentVariable ("USERNAME"));
419 message = "Expected a SecurityException";
421 catch (SecurityException) {
422 message = null;
423 reset.Set ();
425 catch (Exception e) {
426 message = e.ToString ();
430 [Test]
431 [EnvironmentPermission (SecurityAction.Deny, Read = "USERNAME")]
432 [Ignore ("fails when EndGetHostEntry is called")]
433 public void AsyncGetHostEntry_IPAddress ()
435 message = "AsyncGetHostEntry_IPAddress";
436 reset.Reset ();
437 IAsyncResult r = Dns.BeginGetHostEntry (ip, new AsyncCallback (GetHostEntryCallback), null);
438 Assert.IsNotNull (r, "IAsyncResult");
439 // note for some reason r.AsyncWaitHandle.Wait won't work as expected
440 // if (!r.AsyncWaitHandle.WaitOne (timeout, true))
441 if (!reset.WaitOne (timeout, true))
442 Assert.Ignore ("Timeout");
443 Assert.IsNull (message, message);
446 [Test]
447 [EnvironmentPermission (SecurityAction.Deny, Read = "USERNAME")]
448 public void AsyncGetHostEntry_String ()
450 message = "AsyncGetHostEntry_String";
451 reset.Reset ();
452 IAsyncResult r = Dns.BeginGetHostEntry (site, new AsyncCallback (GetHostEntryCallback), null);
453 Assert.IsNotNull (r, "IAsyncResult");
454 // note for some reason r.AsyncWaitHandle.Wait won't work as expected
455 // if (!r.AsyncWaitHandle.WaitOne (timeout, true))
456 if (!reset.WaitOne (timeout, true))
457 Assert.Ignore ("Timeout");
458 Assert.IsNull (message, message);
461 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
462 private void GetHostAddressesCallback (IAsyncResult ar)
464 Dns.EndGetHostEntry (ar);
465 try {
466 // can we do something bad here ?
467 Assert.IsNotNull (Environment.GetEnvironmentVariable ("USERNAME"));
468 message = "Expected a SecurityException";
470 catch (SecurityException) {
471 message = null;
472 reset.Set ();
474 catch (Exception e) {
475 message = e.ToString ();
479 [Test]
480 [EnvironmentPermission (SecurityAction.Deny, Read = "USERNAME")]
481 public void AsyncGetHostAddresses ()
483 message = "AsyncGetHostAddresses";
484 reset.Reset ();
485 IAsyncResult r = Dns.BeginGetHostAddresses (site, new AsyncCallback (GetHostAddressesCallback), null);
486 Assert.IsNotNull (r, "IAsyncResult");
487 // note for some reason r.AsyncWaitHandle.Wait won't work as expected
488 // if (!r.AsyncWaitHandle.WaitOne (timeout, true))
489 if (!reset.WaitOne (timeout, true))
490 Assert.Ignore ("Timeout");
491 Assert.IsNull (message, message);
497 #endif