2 // SecurityManagerTest.cs - NUnit Test Cases for SecurityManager
5 // Sebastien Pouliot <sebastien@ximian.com>
7 // (C) 2004 Motus Technologies Inc. (http://www.motus.com)
8 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
10 // Permission is hereby granted, free of charge, to any person obtaining
11 // a copy of this software and associated documentation files (the
12 // "Software"), to deal in the Software without restriction, including
13 // without limitation the rights to use, copy, modify, merge, publish,
14 // distribute, sublicense, and/or sell copies of the Software, and to
15 // permit persons to whom the Software is furnished to do so, subject to
16 // the following conditions:
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30 using NUnit.Framework;
32 using System.Collections;
33 using System.Reflection;
34 using System.Security;
35 using System.Security.Permissions;
36 using System.Security.Policy;
38 namespace MonoTests.System.Security {
41 public class SecurityManagerTest {
43 static Evidence CurrentEvidence;
46 public void FixtureSetUp ()
48 CurrentEvidence = Assembly.GetExecutingAssembly ().Evidence;
52 public void TearDown ()
54 SecurityManager.CheckExecutionRights = true;
58 public void IsGranted_Null ()
60 // null is always granted
61 Assert.IsTrue (SecurityManager.IsGranted (null));
65 [ExpectedException (typeof (ArgumentNullException))]
66 public void LoadPolicyLevelFromFile_Null ()
68 SecurityManager.LoadPolicyLevelFromFile (null, PolicyLevelType.AppDomain);
72 [ExpectedException (typeof (ArgumentNullException))]
73 public void LoadPolicyLevelFromString_Null ()
75 SecurityManager.LoadPolicyLevelFromString (null, PolicyLevelType.AppDomain);
79 public void PolicyHierarchy ()
81 IEnumerator e = SecurityManager.PolicyHierarchy ();
82 Assert.IsNotNull (e, "PolicyHierarchy");
85 private void ResolveEvidenceHost (SecurityZone zone, bool unrestricted, bool empty)
87 string prefix = zone.ToString () + "-";
88 Evidence e = new Evidence ();
89 e.AddHost (new Zone (zone));
90 PermissionSet ps = SecurityManager.ResolvePolicy (e);
91 // as 2.0 use Unrestricted for Identity permissions they have no need to be
92 // kept in resolved permission set
94 Assert.IsTrue ((unrestricted || (ps.Count > 0)), prefix + "Count");
96 Assert.IsTrue ((ps.Count > 0), prefix + "Count");
98 Assert.AreEqual (empty, ps.IsEmpty (), prefix + "IsEmpty");
99 Assert.AreEqual (unrestricted, ps.IsUnrestricted (), prefix + "IsUnrestricted");
102 Assert.IsNull (ps.GetPermission (typeof (ZoneIdentityPermission)), prefix + "GetPermission(ZoneIdentityPermission)");
104 Assert.IsNotNull (ps.GetPermission (typeof (ZoneIdentityPermission)), prefix + "GetPermission(ZoneIdentityPermission)");
106 Assert.IsNotNull (ps.GetPermission (typeof (ZoneIdentityPermission)), prefix + "GetPermission(ZoneIdentityPermission)");
111 [Category ("NotWorking")]
114 public void ResolvePolicy_Evidence_Host_Zone ()
116 ResolveEvidenceHost (SecurityZone.Internet, false, false);
117 ResolveEvidenceHost (SecurityZone.Intranet, false, false);
118 ResolveEvidenceHost (SecurityZone.MyComputer, true, false);
119 ResolveEvidenceHost (SecurityZone.Trusted, false, false);
120 ResolveEvidenceHost (SecurityZone.Untrusted, false, false);
121 ResolveEvidenceHost (SecurityZone.NoZone, false, true);
124 private void ResolveEvidenceAssembly (SecurityZone zone)
126 string prefix = zone.ToString () + "-";
127 Evidence e = new Evidence ();
128 e.AddAssembly (new Zone (zone));
129 PermissionSet ps = SecurityManager.ResolvePolicy (e);
130 Assert.AreEqual (0, ps.Count, prefix + "Count");
131 Assert.IsTrue (ps.IsEmpty (), prefix + "IsEmpty");
132 Assert.IsFalse (ps.IsUnrestricted (), prefix + "IsUnrestricted");
136 public void ResolvePolicy_Evidence_Assembly_Zone ()
138 ResolveEvidenceAssembly (SecurityZone.Internet);
139 ResolveEvidenceAssembly (SecurityZone.Intranet);
140 ResolveEvidenceAssembly (SecurityZone.MyComputer);
141 ResolveEvidenceAssembly (SecurityZone.Trusted);
142 ResolveEvidenceAssembly (SecurityZone.Untrusted);
143 ResolveEvidenceAssembly (SecurityZone.NoZone);
147 public void ResolvePolicy_Evidence_Null ()
150 PermissionSet ps = SecurityManager.ResolvePolicy (e);
151 // no exception thrown
152 Assert.IsNotNull (ps);
153 Assert.IsFalse (ps.IsUnrestricted (), "IsUnrestricted");
157 public void ResolvePolicy_Evidence_CurrentAssembly ()
159 PermissionSet granted = SecurityManager.ResolvePolicy (CurrentEvidence);
160 Assert.IsNotNull (granted);
161 Assert.IsTrue (granted.IsUnrestricted (), "IsUnrestricted");
166 public void ResolvePolicy_Evidences_Null ()
169 PermissionSet ps = SecurityManager.ResolvePolicy (e);
170 // no exception thrown
171 Assert.IsNotNull (ps);
172 Assert.IsFalse (ps.IsUnrestricted (), "IsUnrestricted");
177 public void ResolvePolicy_Evidence_AllNull_NoExecution ()
179 PermissionSet denied = null;
180 SecurityManager.CheckExecutionRights = false;
181 PermissionSet granted = SecurityManager.ResolvePolicy (null, null, null, null, out denied);
182 Assert.IsNull (denied, "Denied");
183 Assert.AreEqual (0, granted.Count, "Granted.Count");
184 Assert.IsFalse (granted.IsUnrestricted (), "!Granted.IsUnrestricted");
188 public void ResolvePolicy_Evidence_NullRequests_CurrentAssembly ()
190 PermissionSet denied = null;
191 PermissionSet granted = SecurityManager.ResolvePolicy (CurrentEvidence, null, null, null, out denied);
192 Assert.IsNull (denied, "Denied");
193 Assert.IsTrue (granted.IsUnrestricted (), "Granted.IsUnrestricted");
198 [ExpectedException (typeof (PolicyException))]
199 [Category ("NotWorking")]
201 public void ResolvePolicy_Evidence_DenyUnrestricted_CurrentAssembly ()
203 PermissionSet deny = new PermissionSet (PermissionState.Unrestricted);
204 PermissionSet denied = null;
205 PermissionSet granted = SecurityManager.ResolvePolicy (CurrentEvidence, null, null, deny, out denied);
206 // doing this we denied the Execution right
208 Assert.AreEqual (0, denied.Count, "Denied");
209 Assert.IsTrue (granted.IsUnrestricted (), "Granted.IsUnrestricted");
214 [Category ("NotDotNet")] // MS bug - throws a NullReferenceException
215 public void ResolvePolicy_Evidence_DenyUnrestricted_NoExecution ()
217 PermissionSet deny = new PermissionSet (PermissionState.Unrestricted);
218 PermissionSet denied = null;
219 SecurityManager.CheckExecutionRights = false;
220 PermissionSet granted = SecurityManager.ResolvePolicy (CurrentEvidence, null, null, deny, out denied);
224 [ExpectedException (typeof (ArgumentNullException))]
225 public void ResolvePolicyGroups_Null ()
227 IEnumerator e = SecurityManager.ResolvePolicyGroups (null);
231 [ExpectedException (typeof (NullReferenceException))]
232 public void SavePolicyLevel_Null ()
234 SecurityManager.SavePolicyLevel (null);
238 [ExpectedException (typeof (PolicyException))]
239 public void SavePolicyLevel_AppDomain ()
241 PolicyLevel adl = PolicyLevel.CreateAppDomainLevel ();
242 SecurityManager.SavePolicyLevel (adl);
246 public void GetZoneAndOrigin ()
248 ArrayList zone = null;
249 ArrayList origin = null;
250 SecurityManager.GetZoneAndOrigin (out zone, out origin);
251 Assert.IsNotNull (zone, "Zone");
252 Assert.AreEqual (0, zone.Count, "Zone.Count");
253 Assert.IsNotNull (origin, "Origin");
254 Assert.AreEqual (0, origin.Count, "Origin.Count");
258 public void ResolvePolicy_Evidence_ArrayNull ()
261 PermissionSet ps = SecurityManager.ResolvePolicy (e);
262 Assert.IsNotNull (ps, "PermissionSet");
263 Assert.IsFalse (ps.IsUnrestricted (), "IsUnrestricted");
264 Assert.AreEqual (0, ps.Count, "Count");
268 public void ResolvePolicy_Evidence_ArrayEmpty ()
270 Evidence[] e = new Evidence [0];
271 PermissionSet ps = SecurityManager.ResolvePolicy (e);
272 Assert.IsNotNull (ps, "PermissionSet");
273 Assert.IsFalse (ps.IsUnrestricted (), "IsUnrestricted");
274 Assert.AreEqual (0, ps.Count, "Count");
278 public void ResolvePolicy_Evidence_Array ()
280 Evidence[] e = new Evidence[] { new Evidence () };
281 PermissionSet ps = SecurityManager.ResolvePolicy (e);
282 Assert.IsNotNull (ps, "PermissionSet");
283 Assert.IsFalse (ps.IsUnrestricted (), "IsUnrestricted");
284 Assert.AreEqual (0, ps.Count, "Count");
288 [ExpectedException (typeof (NullReferenceException))]
289 [Category ("NotWorking")]
290 public void ResolveSystemPolicy_Null ()
292 SecurityManager.ResolveSystemPolicy (null);