2 // AppDomainCas.cs - CAS unit tests for System.AppDomain
5 // Sebastien Pouliot <sebastien@ximian.com>
7 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 using NUnit.Framework;
33 using System.Reflection;
34 using System.Runtime.Serialization;
35 using System.Security;
36 using System.Security.Permissions;
37 using System.Security.Principal;
39 namespace MonoCasTests.System {
43 public class AppDomainCas {
48 public void FixtureSetUp ()
50 // it's safe to create the AppDomain here
51 string temp = Path.GetTempPath ();
52 AppDomainSetup setup = new AppDomainSetup ();
53 setup.ApplicationName = "CAS";
54 setup.PrivateBinPath = temp;
55 setup.DynamicBase = temp;
56 ad = AppDomain.CreateDomain ("CAS", null, setup);
62 if (!SecurityManager.SecurityEnabled)
63 Assert.Ignore ("SecurityManager.SecurityEnabled is OFF");
66 // Partial Trust Tests
69 [PermissionSet (SecurityAction.Deny, Unrestricted = true)]
70 public void PartialTrust_Deny_Unrestricted ()
73 Assert.IsNotNull (AppDomain.CurrentDomain, "CurrentDomain");
75 Assert.IsNotNull (ad.FriendlyName, "FriendlyName");
76 Assert.IsNotNull (ad.SetupInformation, "SetupInformation");
77 Assert.IsFalse (ad.ShadowCopyFiles, "ShadowCopyFiles");
80 // see http://bugzilla.ximian.com/show_bug.cgi?id=74411
81 [Category ("NotWorking")]
83 [FileIOPermission (SecurityAction.Deny, Unrestricted = true)]
84 [ExpectedException (typeof (SecurityException))]
85 public void BaseDirectory_Deny_FileIOPermission ()
87 Assert.IsNotNull (ad.BaseDirectory, "BaseDirectory");
91 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
92 [ExpectedException (typeof (SecurityException))]
93 public void CreateDomain1_Deny_ControlAppDomain ()
95 AppDomain.CreateDomain (null);
99 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
100 [ExpectedException (typeof (SecurityException))]
101 public void CreateDomain2_Deny_ControlAppDomain ()
103 AppDomain.CreateDomain (null, null);
107 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
108 [ExpectedException (typeof (SecurityException))]
109 public void CreateDomain3_Deny_ControlAppDomain ()
111 AppDomain.CreateDomain (null, null, null);
115 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
116 [ExpectedException (typeof (SecurityException))]
117 public void CreateDomain5_Deny_ControlAppDomain ()
119 AppDomain.CreateDomain (null, null, null, null, false);
122 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
123 [ExpectedException (typeof (SecurityException))]
124 public void CreateDomain7_Deny_ControlAppDomain ()
126 AppDomain.CreateDomain (null, null, null, null, false, null, null);
128 // see http://bugzilla.ximian.com/show_bug.cgi?id=74411
129 [Category ("NotWorking")]
131 [FileIOPermission (SecurityAction.Deny, Unrestricted = true)]
132 [ExpectedException (typeof (SecurityException))]
133 public void DynamicDirectory_Deny_FileIOPermission ()
135 Assert.IsNotNull (ad.DynamicDirectory, "DynamicDirectory");
138 [Category ("NotWorking")] // check not yet implemented
140 [SecurityPermission (SecurityAction.Deny, ControlEvidence = true)]
141 [ExpectedException (typeof (SecurityException))]
142 public void Evidence_Deny_ControlEvidence ()
144 Assert.IsNotNull (ad.Evidence, "Evidence");
147 // see http://bugzilla.ximian.com/show_bug.cgi?id=74411
148 [Category ("NotWorking")]
150 [FileIOPermission (SecurityAction.Deny, Unrestricted = true)]
151 [ExpectedException (typeof (SecurityException))]
152 public void RelativeSearchPath_Deny_FileIOPermission ()
154 Assert.IsNotNull (ad.RelativeSearchPath, "RelativeSearchPath");
157 // see http://bugzilla.ximian.com/show_bug.cgi?id=74411
158 [Category ("NotWorking")]
160 [SecurityPermission (SecurityAction.Deny, ControlPrincipal = true)]
161 [ExpectedException (typeof (SecurityException))]
162 public void SetPrincipalPolicy_Deny_ControlPrincipal ()
164 ad.SetPrincipalPolicy (PrincipalPolicy.NoPrincipal);
167 // see http://bugzilla.ximian.com/show_bug.cgi?id=74411
168 [Category ("NotWorking")]
170 [SecurityPermission (SecurityAction.Deny, ControlPrincipal = true)]
171 [ExpectedException (typeof (SecurityException))]
172 public void SetThreadPrincipal_Deny_ControlPrincipal ()
174 ad.SetThreadPrincipal (new GenericPrincipal (new GenericIdentity ("me"), null));
178 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
179 [ExpectedException (typeof (SecurityException))]
180 public void Unload_Deny_ControlAppDomain ()
182 AppDomain.Unload (null);
187 [FileIOPermission (SecurityAction.PermitOnly, Unrestricted = true)]
188 public void PermitOnly_FileIOPermission ()
190 Assert.IsNotNull (ad.BaseDirectory, "BaseDirectory");
191 Assert.IsNotNull (ad.DynamicDirectory, "DynamicDirectory");
192 Assert.IsNotNull (ad.RelativeSearchPath, "RelativeSearchPath");
196 [SecurityPermission (SecurityAction.PermitOnly, ControlEvidence = true)]
197 public void PermitOnly_ControlEvidence ()
199 // other permissions required to get evidence from another domain
200 Assert.IsNotNull (AppDomain.CurrentDomain.Evidence, "Evidence");
204 [SecurityPermission (SecurityAction.PermitOnly, ControlPrincipal = true)]
205 public void PermitOnly_ControlPrincipal ()
207 ad.SetPrincipalPolicy (PrincipalPolicy.NoPrincipal);
208 ad.SetThreadPrincipal (new GenericPrincipal (new GenericIdentity ("me"), null));
211 // we use reflection to call AppDomain as some methods and events are protected
212 // by LinkDemand (which will be converted into full demand, i.e. a stack walk)
213 // when reflection is used (i.e. it gets testable).
216 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
217 [ExpectedException (typeof (SecurityException))]
218 public void AppendPrivatePath ()
220 MethodInfo mi = typeof (AppDomain).GetMethod ("AppendPrivatePath");
221 mi.Invoke (AppDomain.CurrentDomain, new object [1] { String.Empty });
225 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
226 [ExpectedException (typeof (SecurityException))]
227 public void ClearPrivatePath ()
229 MethodInfo mi = typeof (AppDomain).GetMethod ("ClearPrivatePath");
230 mi.Invoke (AppDomain.CurrentDomain, null);
234 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
235 [ExpectedException (typeof (SecurityException))]
236 public void ClearShadowCopyPath ()
238 MethodInfo mi = typeof (AppDomain).GetMethod ("ClearShadowCopyPath");
239 mi.Invoke (AppDomain.CurrentDomain, null);
243 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
244 [ExpectedException (typeof (SecurityException))]
245 public void SetCachePath ()
247 MethodInfo mi = typeof (AppDomain).GetMethod ("SetCachePath");
248 mi.Invoke (AppDomain.CurrentDomain, new object [1] { String.Empty });
252 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
253 [ExpectedException (typeof (SecurityException))]
254 public void SetData ()
256 MethodInfo mi = typeof (AppDomain).GetMethod ("SetData");
257 mi.Invoke (AppDomain.CurrentDomain, new object [2] { String.Empty, null });
261 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
262 [ExpectedException (typeof (SecurityException))]
263 public void SetShadowCopyFiles ()
265 MethodInfo mi = typeof (AppDomain).GetMethod ("SetShadowCopyFiles");
266 mi.Invoke (AppDomain.CurrentDomain, null);
270 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
271 [ExpectedException (typeof (SecurityException))]
272 public void SetDynamicBase ()
274 MethodInfo mi = typeof (AppDomain).GetMethod ("SetDynamicBase");
275 mi.Invoke (AppDomain.CurrentDomain, new object [1] { String.Empty });
281 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
282 [ExpectedException (typeof (SecurityException))]
283 public void AddDomainUnload ()
285 MethodInfo mi = typeof (AppDomain).GetMethod ("add_DomainUnload");
286 mi.Invoke (AppDomain.CurrentDomain, new object [1] { null });
290 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
291 [ExpectedException (typeof (SecurityException))]
292 public void RemoveDomainUnload ()
294 MethodInfo mi = typeof (AppDomain).GetMethod ("remove_DomainUnload");
295 mi.Invoke (AppDomain.CurrentDomain, new object [1] { null });
299 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
300 [ExpectedException (typeof (SecurityException))]
301 public void AddAssemblyLoad ()
303 MethodInfo mi = typeof (AppDomain).GetMethod ("add_AssemblyLoad");
304 mi.Invoke (AppDomain.CurrentDomain, new object [1] { null });
308 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
309 [ExpectedException (typeof (SecurityException))]
310 public void RemoveAssemblyLoad ()
312 MethodInfo mi = typeof (AppDomain).GetMethod ("remove_AssemblyLoad");
313 mi.Invoke (AppDomain.CurrentDomain, new object [1] { null });
317 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
318 [ExpectedException (typeof (SecurityException))]
319 public void AddProcessExit ()
321 MethodInfo mi = typeof (AppDomain).GetMethod ("add_ProcessExit");
322 mi.Invoke (AppDomain.CurrentDomain, new object [1] { null });
326 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
327 [ExpectedException (typeof (SecurityException))]
328 public void RemoveProcessExit ()
330 MethodInfo mi = typeof (AppDomain).GetMethod ("remove_ProcessExit");
331 mi.Invoke (AppDomain.CurrentDomain, new object [1] { null });
335 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
336 [ExpectedException (typeof (SecurityException))]
337 public void AddTypeResolve ()
339 MethodInfo mi = typeof (AppDomain).GetMethod ("add_TypeResolve");
340 mi.Invoke (AppDomain.CurrentDomain, new object [1] { null });
344 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
345 [ExpectedException (typeof (SecurityException))]
346 public void RemoveTypeResolve ()
348 MethodInfo mi = typeof (AppDomain).GetMethod ("remove_TypeResolve");
349 mi.Invoke (AppDomain.CurrentDomain, new object [1] { null });
353 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
354 [ExpectedException (typeof (SecurityException))]
355 public void AddResourceResolve ()
357 MethodInfo mi = typeof (AppDomain).GetMethod ("add_ResourceResolve");
358 mi.Invoke (AppDomain.CurrentDomain, new object [1] { null });
362 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
363 [ExpectedException (typeof (SecurityException))]
364 public void RemoveResourceResolve ()
366 MethodInfo mi = typeof (AppDomain).GetMethod ("remove_ResourceResolve");
367 mi.Invoke (AppDomain.CurrentDomain, new object [1] { null });
371 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
372 [ExpectedException (typeof (SecurityException))]
373 public void AddAssemblyResolve ()
375 MethodInfo mi = typeof (AppDomain).GetMethod ("add_AssemblyResolve");
376 mi.Invoke (AppDomain.CurrentDomain, new object [1] { null });
380 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
381 [ExpectedException (typeof (SecurityException))]
382 public void RemoveAssemblyResolve ()
384 MethodInfo mi = typeof (AppDomain).GetMethod ("remove_AssemblyResolve");
385 mi.Invoke (AppDomain.CurrentDomain, new object [1] { null });
389 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
390 [ExpectedException (typeof (SecurityException))]
391 public void AddUnhandledException ()
393 MethodInfo mi = typeof (AppDomain).GetMethod ("add_UnhandledException");
394 mi.Invoke (AppDomain.CurrentDomain, new object [1] { null });
398 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
399 [ExpectedException (typeof (SecurityException))]
400 public void RemoveUnhandledException ()
402 MethodInfo mi = typeof (AppDomain).GetMethod ("remove_UnhandledException");
403 mi.Invoke (AppDomain.CurrentDomain, new object [1] { null });