2 // DnsCas.cs - CAS unit tests for System.Net.Dns class
5 // Sebastien Pouliot <sebastien@ximian.com>
7 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
12 using NUnit
.Framework
;
16 using System
.Security
;
17 using System
.Security
.Permissions
;
18 using System
.Threading
;
20 namespace MonoCasTests
.System
.Net
{
24 [Category ("NotWorking")] // compiler (CSC) issue (on Windows)
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
;
35 public void FixtureSetUp ()
37 reset
= new ManualResetEvent (false);
38 hostname
= Dns
.GetHostName ();
39 var ip
= Dns
.Resolve (site
).AddressList
[0];
43 public void FixtureTearDown ()
51 if (!SecurityManager
.SecurityEnabled
)
52 Assert
.Ignore ("SecurityManager.SecurityEnabled is OFF");
55 // test Demand by denying it's caller from the required permission
58 [DnsPermission (SecurityAction
.Deny
, Unrestricted
= true)]
59 [ExpectedException (typeof (SecurityException
))]
60 public void Deny_BeginGetHostName ()
62 Dns
.BeginGetHostByName (null, null, null);
66 [DnsPermission (SecurityAction
.Deny
, Unrestricted
= true)]
67 [ExpectedException (typeof (ArgumentNullException
))]
68 public void Deny_EndGetHostByName ()
70 Dns
.EndGetHostByName (null);
74 [DnsPermission (SecurityAction
.Deny
, Unrestricted
= true)]
75 [ExpectedException (typeof (SecurityException
))]
76 public void Deny_BeginResolve ()
78 Dns
.BeginResolve (null, null, null);
82 [DnsPermission (SecurityAction
.Deny
, Unrestricted
= true)]
83 [ExpectedException (typeof (ArgumentNullException
))]
84 public void Deny_EndResolve ()
86 Dns
.EndResolve (null);
90 [DnsPermission (SecurityAction
.Deny
, Unrestricted
= true)]
91 [ExpectedException (typeof (SecurityException
))]
92 public void Deny_GetHostByAddress_IPAddress ()
94 Dns
.GetHostByAddress ((IPAddress
)null);
98 [DnsPermission (SecurityAction
.Deny
, Unrestricted
= true)]
99 [ExpectedException (typeof (SecurityException
))]
100 public void Deny_GetHostByAddress_String ()
102 Dns
.GetHostByAddress ((string)null);
106 [DnsPermission (SecurityAction
.Deny
, Unrestricted
= true)]
107 [ExpectedException (typeof (SecurityException
))]
108 public void Deny_GetHostByName ()
110 Dns
.GetHostByName (site
);
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);
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 :-(
135 [DnsPermission (SecurityAction
.Deny
, Unrestricted
= true)]
136 [ExpectedException (typeof (SecurityException
))]
137 public void Deny_GetHostName ()
143 [DnsPermission (SecurityAction
.Deny
, Unrestricted
= true)]
144 [ExpectedException (typeof (SecurityException
))]
145 public void Deny_Resolve ()
150 // TODO: New 2.0 methods aren't yet implemented in Mono
153 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
154 [ExpectedException (typeof (SecurityException))]
155 public void Deny_BeginGetHostAddresses ()
157 Dns.BeginGetHostAddresses (null, null, null);
161 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
162 [ExpectedException (typeof (ArgumentNullException))]
163 public void Deny_EndGetHostAddresses ()
165 Dns.EndGetHostAddresses (null);
169 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
170 [ExpectedException (typeof (SecurityException))]
171 public void Deny_BeginGetHostEntry_IPAddress ()
173 Dns.BeginGetHostEntry ((IPAddress)null, null, null);
177 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
178 [ExpectedException (typeof (SecurityException))]
179 public void Deny_BeginGetHostEntry_String ()
181 Dns.BeginGetHostEntry ((string)null, null, null);
185 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
186 [ExpectedException (typeof (ArgumentNullException))]
187 public void Deny_EndGetHostEntry ()
189 Dns.EndGetHostEntry (null);
193 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
194 [ExpectedException (typeof (SecurityException))]
195 public void Deny_GetHostEntry_IPAddress ()
197 Dns.GetHostEntry ((IPAddress)null);
201 [DnsPermission (SecurityAction.Deny, Unrestricted = true)]
202 [ExpectedException (typeof (SecurityException))]
203 public void Deny_GetHostEntry_String ()
205 Dns.GetHostEntry ((string)null);
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
220 [DnsPermission (SecurityAction
.PermitOnly
, Unrestricted
= true)]
221 [ExpectedException (typeof (ArgumentNullException
))]
222 public void PermitOnly_BeginGetHostName ()
224 Dns
.BeginGetHostByName (null, null, null);
228 [DnsPermission (SecurityAction
.PermitOnly
, Unrestricted
= true)]
229 [ExpectedException (typeof (ArgumentNullException
))]
230 public void PermitOnly_BeginResolve ()
232 Dns
.BeginResolve (null, null, null);
236 [DnsPermission (SecurityAction
.PermitOnly
, Unrestricted
= true)]
237 [ExpectedException (typeof (ArgumentNullException
))]
238 public void PermitOnly_GetHostByAddress_IPAddress ()
240 Dns
.GetHostByAddress ((IPAddress
)null);
244 [DnsPermission (SecurityAction
.PermitOnly
, Unrestricted
= true)]
245 [ExpectedException (typeof (ArgumentNullException
))]
246 public void PermitOnly_GetHostByAddress_String ()
248 Dns
.GetHostByAddress ((string)null);
252 [DnsPermission (SecurityAction
.PermitOnly
, Unrestricted
= true)]
253 [ExpectedException (typeof (ArgumentNullException
))]
254 public void PermitOnly_GetHostByName ()
256 Dns
.GetHostByName (null);
260 [DnsPermission (SecurityAction
.PermitOnly
, Unrestricted
= true)]
261 public void PermitOnly_GetHostName ()
263 Assert
.IsNotNull (Dns
.GetHostName ());
267 [DnsPermission (SecurityAction
.PermitOnly
, Unrestricted
= true)]
268 [ExpectedException (typeof (ArgumentNullException
))]
269 public void PermitOnly_Resolve ()
274 // TODO: New 2.0 methods aren't yet implemented in Mono
277 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
278 [ExpectedException (typeof (ArgumentNullException))]
279 public void PermitOnly_BeginGetHostAddresses ()
281 Dns.BeginGetHostAddresses (null, null, null);
285 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
286 [ExpectedException (typeof (ArgumentNullException))]
287 public void PermitOnly_EndGetHostAddresses ()
289 Dns.EndGetHostAddresses (null);
293 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
294 [ExpectedException (typeof (ArgumentNullException))]
295 public void PermitOnly_BeginGetHostEntry_IPAddress ()
297 Dns.BeginGetHostEntry ((IPAddress)null, null, null);
301 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
302 [ExpectedException (typeof (ArgumentNullException))]
303 public void PermitOnly_BeginGetHostEntry_String ()
305 Dns.BeginGetHostEntry ((string)null, null, null);
309 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
310 [ExpectedException (typeof (ArgumentNullException))]
311 public void PermitOnly_EndGetHostEntry ()
313 Dns.EndGetHostEntry (null);
317 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
318 [ExpectedException (typeof (ArgumentNullException))]
319 public void PermitOnly_GetHostEntry_IPAddress ()
321 Dns.GetHostEntry ((IPAddress)null);
325 [DnsPermission (SecurityAction.PermitOnly, Unrestricted = true)]
326 [ExpectedException (typeof (ArgumentNullException))]
327 public void PermitOnly_GetHostEntry_String ()
329 Dns.GetHostEntry ((string)null);
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
);
348 // can we do something bad here ?
349 Assert
.IsNotNull (Environment
.GetEnvironmentVariable ("USERNAME"));
350 message
= "Expected a SecurityException";
352 catch (SecurityException
) {
358 message
= e
.ToString ();
363 [EnvironmentPermission (SecurityAction
.Deny
, Read
= "USERNAME")]
364 public void AsyncGetHostByName ()
366 message
= "AsyncGetHostByName";
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
)
382 // can we do something bad here ?
383 Assert
.IsNotNull (Environment
.GetEnvironmentVariable ("USERNAME"));
384 message
= "Expected a SecurityException";
386 catch (SecurityException
) {
390 catch (Exception e
) {
391 message
= e
.ToString ();
396 [EnvironmentPermission (SecurityAction
.Deny
, Read
= "USERNAME")]
397 public void AsyncResolve ()
399 message
= "AsyncResolve";
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);
417 // can we do something bad here ?
418 Assert.IsNotNull (Environment.GetEnvironmentVariable ("USERNAME"));
419 message = "Expected a SecurityException";
421 catch (SecurityException) {
425 catch (Exception e) {
426 message = e.ToString ();
431 [EnvironmentPermission (SecurityAction.Deny, Read = "USERNAME")]
432 [Ignore ("fails when EndGetHostEntry is called")]
433 public void AsyncGetHostEntry_IPAddress ()
435 message = "AsyncGetHostEntry_IPAddress";
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);
447 [EnvironmentPermission (SecurityAction.Deny, Read = "USERNAME")]
448 public void AsyncGetHostEntry_String ()
450 message = "AsyncGetHostEntry_String";
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);
466 // can we do something bad here ?
467 Assert.IsNotNull (Environment.GetEnvironmentVariable ("USERNAME"));
468 message = "Expected a SecurityException";
470 catch (SecurityException) {
474 catch (Exception e) {
475 message = e.ToString ();
480 [EnvironmentPermission (SecurityAction.Deny, Read = "USERNAME")]
481 public void AsyncGetHostAddresses ()
483 message = "AsyncGetHostAddresses";
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);