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 #if MONO_FEATURE_MULTIPLE_APPDOMAINS
31 using NUnit.Framework;
35 using System.Reflection;
36 using System.Runtime.Serialization;
37 using System.Security;
38 using System.Security.Permissions;
39 using System.Security.Principal;
41 namespace MonoCasTests.System {
45 public class AppDomainCas {
50 public void FixtureSetUp ()
52 // it's safe to create the AppDomain here
53 string temp = Path.GetTempPath ();
54 AppDomainSetup setup = new AppDomainSetup ();
55 setup.ApplicationName = "CAS";
56 setup.PrivateBinPath = temp;
57 setup.DynamicBase = temp;
58 ad = AppDomain.CreateDomain ("CAS", null, setup);
64 if (!SecurityManager.SecurityEnabled)
65 Assert.Ignore ("SecurityManager.SecurityEnabled is OFF");
68 // Partial Trust Tests
71 [PermissionSet (SecurityAction.Deny, Unrestricted = true)]
72 public void PartialTrust_Deny_Unrestricted ()
75 Assert.IsNotNull (AppDomain.CurrentDomain, "CurrentDomain");
77 Assert.IsNotNull (ad.FriendlyName, "FriendlyName");
78 Assert.IsNotNull (ad.SetupInformation, "SetupInformation");
79 Assert.IsFalse (ad.ShadowCopyFiles, "ShadowCopyFiles");
82 // see http://bugzilla.ximian.com/show_bug.cgi?id=74411
83 [Category ("NotWorking")]
85 [FileIOPermission (SecurityAction.Deny, Unrestricted = true)]
86 [ExpectedException (typeof (SecurityException))]
87 public void BaseDirectory_Deny_FileIOPermission ()
89 Assert.IsNotNull (ad.BaseDirectory, "BaseDirectory");
93 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
94 [ExpectedException (typeof (SecurityException))]
95 public void CreateDomain1_Deny_ControlAppDomain ()
97 AppDomain.CreateDomain (null);
101 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
102 [ExpectedException (typeof (SecurityException))]
103 public void CreateDomain2_Deny_ControlAppDomain ()
105 AppDomain.CreateDomain (null, null);
109 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
110 [ExpectedException (typeof (SecurityException))]
111 public void CreateDomain3_Deny_ControlAppDomain ()
113 AppDomain.CreateDomain (null, null, null);
117 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
118 [ExpectedException (typeof (SecurityException))]
119 public void CreateDomain5_Deny_ControlAppDomain ()
121 AppDomain.CreateDomain (null, null, null, null, false);
124 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
125 [ExpectedException (typeof (SecurityException))]
126 public void CreateDomain7_Deny_ControlAppDomain ()
128 AppDomain.CreateDomain (null, null, null, null, false, null, null);
130 // see http://bugzilla.ximian.com/show_bug.cgi?id=74411
131 [Category ("NotWorking")]
133 [FileIOPermission (SecurityAction.Deny, Unrestricted = true)]
134 [ExpectedException (typeof (SecurityException))]
135 public void DynamicDirectory_Deny_FileIOPermission ()
137 Assert.IsNotNull (ad.DynamicDirectory, "DynamicDirectory");
140 [Category ("NotWorking")] // check not yet implemented
142 [SecurityPermission (SecurityAction.Deny, ControlEvidence = true)]
143 [ExpectedException (typeof (SecurityException))]
144 public void Evidence_Deny_ControlEvidence ()
146 Assert.IsNotNull (ad.Evidence, "Evidence");
149 // see http://bugzilla.ximian.com/show_bug.cgi?id=74411
150 [Category ("NotWorking")]
152 [FileIOPermission (SecurityAction.Deny, Unrestricted = true)]
153 [ExpectedException (typeof (SecurityException))]
154 public void RelativeSearchPath_Deny_FileIOPermission ()
156 Assert.IsNotNull (ad.RelativeSearchPath, "RelativeSearchPath");
159 // see http://bugzilla.ximian.com/show_bug.cgi?id=74411
160 [Category ("NotWorking")]
162 [SecurityPermission (SecurityAction.Deny, ControlPrincipal = true)]
163 [ExpectedException (typeof (SecurityException))]
164 public void SetPrincipalPolicy_Deny_ControlPrincipal ()
166 ad.SetPrincipalPolicy (PrincipalPolicy.NoPrincipal);
169 // see http://bugzilla.ximian.com/show_bug.cgi?id=74411
170 [Category ("NotWorking")]
172 [SecurityPermission (SecurityAction.Deny, ControlPrincipal = true)]
173 [ExpectedException (typeof (SecurityException))]
174 public void SetThreadPrincipal_Deny_ControlPrincipal ()
176 ad.SetThreadPrincipal (new GenericPrincipal (new GenericIdentity ("me"), null));
180 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
181 [ExpectedException (typeof (SecurityException))]
182 public void Unload_Deny_ControlAppDomain ()
184 AppDomain.Unload (null);
189 [FileIOPermission (SecurityAction.PermitOnly, Unrestricted = true)]
190 public void PermitOnly_FileIOPermission ()
192 Assert.IsNotNull (ad.BaseDirectory, "BaseDirectory");
193 Assert.IsNotNull (ad.DynamicDirectory, "DynamicDirectory");
194 Assert.IsNotNull (ad.RelativeSearchPath, "RelativeSearchPath");
198 [SecurityPermission (SecurityAction.PermitOnly, ControlEvidence = true)]
199 public void PermitOnly_ControlEvidence ()
201 // other permissions required to get evidence from another domain
202 Assert.IsNotNull (AppDomain.CurrentDomain.Evidence, "Evidence");
206 [SecurityPermission (SecurityAction.PermitOnly, ControlPrincipal = true)]
207 public void PermitOnly_ControlPrincipal ()
209 ad.SetPrincipalPolicy (PrincipalPolicy.NoPrincipal);
210 ad.SetThreadPrincipal (new GenericPrincipal (new GenericIdentity ("me"), null));
213 // we use reflection to call AppDomain as some methods and events are protected
214 // by LinkDemand (which will be converted into full demand, i.e. a stack walk)
215 // when reflection is used (i.e. it gets testable).
218 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
219 [ExpectedException (typeof (SecurityException))]
220 public void AppendPrivatePath ()
222 MethodInfo mi = typeof (AppDomain).GetMethod ("AppendPrivatePath");
223 mi.Invoke (AppDomain.CurrentDomain, new object [1] { String.Empty });
227 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
228 [ExpectedException (typeof (SecurityException))]
229 public void ClearPrivatePath ()
231 MethodInfo mi = typeof (AppDomain).GetMethod ("ClearPrivatePath");
232 mi.Invoke (AppDomain.CurrentDomain, null);
236 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
237 [ExpectedException (typeof (SecurityException))]
238 public void ClearShadowCopyPath ()
240 MethodInfo mi = typeof (AppDomain).GetMethod ("ClearShadowCopyPath");
241 mi.Invoke (AppDomain.CurrentDomain, null);
245 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
246 [ExpectedException (typeof (SecurityException))]
247 public void SetCachePath ()
249 MethodInfo mi = typeof (AppDomain).GetMethod ("SetCachePath");
250 mi.Invoke (AppDomain.CurrentDomain, new object [1] { String.Empty });
254 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
255 [ExpectedException (typeof (SecurityException))]
256 public void SetData ()
258 MethodInfo mi = typeof (AppDomain).GetMethod ("SetData");
259 mi.Invoke (AppDomain.CurrentDomain, new object [2] { String.Empty, null });
263 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
264 [ExpectedException (typeof (SecurityException))]
265 public void SetShadowCopyFiles ()
267 MethodInfo mi = typeof (AppDomain).GetMethod ("SetShadowCopyFiles");
268 mi.Invoke (AppDomain.CurrentDomain, null);
272 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
273 [ExpectedException (typeof (SecurityException))]
274 public void SetDynamicBase ()
276 MethodInfo mi = typeof (AppDomain).GetMethod ("SetDynamicBase");
277 mi.Invoke (AppDomain.CurrentDomain, new object [1] { String.Empty });
283 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
284 [ExpectedException (typeof (SecurityException))]
285 public void AddDomainUnload ()
287 MethodInfo mi = typeof (AppDomain).GetMethod ("add_DomainUnload");
288 mi.Invoke (AppDomain.CurrentDomain, new object [1] { null });
292 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
293 [ExpectedException (typeof (SecurityException))]
294 public void RemoveDomainUnload ()
296 MethodInfo mi = typeof (AppDomain).GetMethod ("remove_DomainUnload");
297 mi.Invoke (AppDomain.CurrentDomain, new object [1] { null });
301 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
302 [ExpectedException (typeof (SecurityException))]
303 public void AddAssemblyLoad ()
305 MethodInfo mi = typeof (AppDomain).GetMethod ("add_AssemblyLoad");
306 mi.Invoke (AppDomain.CurrentDomain, new object [1] { null });
310 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
311 [ExpectedException (typeof (SecurityException))]
312 public void RemoveAssemblyLoad ()
314 MethodInfo mi = typeof (AppDomain).GetMethod ("remove_AssemblyLoad");
315 mi.Invoke (AppDomain.CurrentDomain, new object [1] { null });
319 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
320 [ExpectedException (typeof (SecurityException))]
321 public void AddProcessExit ()
323 MethodInfo mi = typeof (AppDomain).GetMethod ("add_ProcessExit");
324 mi.Invoke (AppDomain.CurrentDomain, new object [1] { null });
328 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
329 [ExpectedException (typeof (SecurityException))]
330 public void RemoveProcessExit ()
332 MethodInfo mi = typeof (AppDomain).GetMethod ("remove_ProcessExit");
333 mi.Invoke (AppDomain.CurrentDomain, new object [1] { null });
337 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
338 [ExpectedException (typeof (SecurityException))]
339 public void AddTypeResolve ()
341 MethodInfo mi = typeof (AppDomain).GetMethod ("add_TypeResolve");
342 mi.Invoke (AppDomain.CurrentDomain, new object [1] { null });
346 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
347 [ExpectedException (typeof (SecurityException))]
348 public void RemoveTypeResolve ()
350 MethodInfo mi = typeof (AppDomain).GetMethod ("remove_TypeResolve");
351 mi.Invoke (AppDomain.CurrentDomain, new object [1] { null });
355 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
356 [ExpectedException (typeof (SecurityException))]
357 public void AddResourceResolve ()
359 MethodInfo mi = typeof (AppDomain).GetMethod ("add_ResourceResolve");
360 mi.Invoke (AppDomain.CurrentDomain, new object [1] { null });
364 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
365 [ExpectedException (typeof (SecurityException))]
366 public void RemoveResourceResolve ()
368 MethodInfo mi = typeof (AppDomain).GetMethod ("remove_ResourceResolve");
369 mi.Invoke (AppDomain.CurrentDomain, new object [1] { null });
373 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
374 [ExpectedException (typeof (SecurityException))]
375 public void AddAssemblyResolve ()
377 MethodInfo mi = typeof (AppDomain).GetMethod ("add_AssemblyResolve");
378 mi.Invoke (AppDomain.CurrentDomain, new object [1] { null });
382 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
383 [ExpectedException (typeof (SecurityException))]
384 public void RemoveAssemblyResolve ()
386 MethodInfo mi = typeof (AppDomain).GetMethod ("remove_AssemblyResolve");
387 mi.Invoke (AppDomain.CurrentDomain, new object [1] { null });
391 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
392 [ExpectedException (typeof (SecurityException))]
393 public void AddUnhandledException ()
395 MethodInfo mi = typeof (AppDomain).GetMethod ("add_UnhandledException");
396 mi.Invoke (AppDomain.CurrentDomain, new object [1] { null });
400 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
401 [ExpectedException (typeof (SecurityException))]
402 public void RemoveUnhandledException ()
404 MethodInfo mi = typeof (AppDomain).GetMethod ("remove_UnhandledException");
405 mi.Invoke (AppDomain.CurrentDomain, new object [1] { null });
410 #endif // MONO_FEATURE_MULTIPLE_APPDOMAINS