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);
123 [SecurityPermission (SecurityAction.Deny, ControlAppDomain = true)]
124 [ExpectedException (typeof (SecurityException))]
125 public void CreateDomain7_Deny_ControlAppDomain ()
127 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 });