2 // MonoTests.System.Security.Policy.CodeGroupTest
5 // Nick Drochak (ndrochak@gol.com)
6 // Sebastien Pouliot (spouliot@motus.com)
8 // (C) 2001 Nick Drochak, All rights reserved.
9 // Portions (C) 2004 Motus Technologies Inc. (http://www.motus.com)
12 using NUnit.Framework;
14 using System.Collections;
15 using System.Security;
16 using System.Security.Policy;
17 using System.Security.Permissions;
19 namespace MonoTests.System.Security.Policy {
21 public class MyCodeGroup : CodeGroup {
23 public MyCodeGroup (IMembershipCondition membershipCondition, PolicyStatement policy)
24 : base (membershipCondition, policy) {}
26 public override CodeGroup Copy ()
31 public override string MergeLogic {
35 public override PolicyStatement Resolve (Evidence evidence)
40 public override CodeGroup ResolveMatchingCodeGroups (Evidence evidence)
46 // this version has a constructor with no parameters
47 public class MySecondCodeGroup : CodeGroup {
49 // must be public (else the ToFromXmlRoundtrip_WithChildren_Second will fail)
50 public MySecondCodeGroup () : base (new AllMembershipCondition (), null) {}
52 public MySecondCodeGroup (IMembershipCondition membershipCondition, PolicyStatement policy)
53 : base (membershipCondition, policy) {}
55 public override CodeGroup Copy () {
59 public override string MergeLogic {
63 public override PolicyStatement Resolve (Evidence evidence) {
67 public override CodeGroup ResolveMatchingCodeGroups (Evidence evidence) {
73 public class CodeGroupTest : Assertion {
75 private const string ps_Name = "TestName";
78 [ExpectedException (typeof (ArgumentNullException))]
79 public void Constructor_MembershipConditionNullPolicyStatement ()
81 MyCodeGroup cg = new MyCodeGroup (null, new PolicyStatement(new PermissionSet(PermissionState.None)));
85 public void Constructor_MembershipConditionPolicyStatementNull ()
88 MyCodeGroup cg = new MyCodeGroup (new AllMembershipCondition(), null);
89 AssertNull ("PolicyStatement", cg.PolicyStatement);
93 public void Constructor ()
95 MyCodeGroup cg = new MyCodeGroup (new AllMembershipCondition(), new PolicyStatement(new PermissionSet(PermissionState.None)));
96 AssertNotNull ("PolicyStatement property not set correctly by constructor.", cg.PolicyStatement);
97 AssertNotNull ("MembershipCondition property not set correctly by constructor.", cg.MembershipCondition);
101 public void Description ()
103 const string description = "Test Description";
104 MyCodeGroup cg = new MyCodeGroup (new AllMembershipCondition(), new PolicyStatement(new PermissionSet(PermissionState.None)));
105 cg.Description = description;
106 AssertEquals ("Description not the expected value", description, cg.Description);
112 const string name = "Test Name";
113 MyCodeGroup cg = new MyCodeGroup (new AllMembershipCondition(), new PolicyStatement(new PermissionSet(PermissionState.None)));
115 AssertEquals ("Description not the expected value", name, cg.Name);
119 public void AddChild ()
121 MyCodeGroup cg = new MyCodeGroup(new AllMembershipCondition (), new PolicyStatement(new PermissionSet (PermissionState.None)));
122 AssertEquals ("Unexpected number of children (before add)", 0, cg.Children.Count);
123 cg.AddChild (new MyCodeGroup (new AllMembershipCondition (), new PolicyStatement(new PermissionSet (PermissionState.Unrestricted))));
124 AssertEquals ("Unexpected number of children (after add)", 1, cg.Children.Count);
128 [ExpectedException (typeof (ArgumentNullException))]
129 public void AddChild_Null ()
131 MyCodeGroup cg = new MyCodeGroup (new AllMembershipCondition (), new PolicyStatement(new PermissionSet (PermissionState.None)));
136 public void AttributeString ()
138 PolicyStatementAttribute psa = PolicyStatementAttribute.LevelFinal;
139 PolicyStatement ps = new PolicyStatement (new PermissionSet (PermissionState.None));
141 MyCodeGroup cg = new MyCodeGroup(new AllMembershipCondition (), ps);
142 AssertEquals ("AttributeString", psa.ToString(), cg.AttributeString);
146 [ExpectedException (typeof (ArgumentNullException))]
147 public void Children_Null ()
149 MyCodeGroup cg = new MyCodeGroup (new AllMembershipCondition (), new PolicyStatement(new PermissionSet (PermissionState.None)));
154 public void PermissionSetName ()
156 PolicyStatement ps = new PolicyStatement(new NamedPermissionSet (ps_Name));
157 MyCodeGroup cg = new MyCodeGroup (new AllMembershipCondition (), ps);
158 AssertEquals ("PermissionSetName", ps_Name, cg.PermissionSetName);
162 public void Equals ()
164 PolicyStatement ps = new PolicyStatement (new NamedPermissionSet (ps_Name));
165 MyCodeGroup cg = new MyCodeGroup (new AllMembershipCondition (), ps);
166 cg.Name = "SomeName";
167 cg.Description = "Some Description";
168 Assert ("Equals (itself)", cg.Equals (cg));
169 Assert ("Equals (string)", !cg.Equals ("Not Equal to this"));
171 MyCodeGroup cg2 = new MyCodeGroup(new AllMembershipCondition(), ps);
172 cg2.Name = "SomeOtherName";
173 cg2.Description = "Some Other Description";
174 Assert ("Equals (another)", !cg.Equals (cg2));
176 cg2 = new MyCodeGroup (new ApplicationDirectoryMembershipCondition(), ps);
178 cg2.Description = cg.Description;
179 Assert ("Equals (different Membership Condition)", !cg.Equals (cg2));
183 public void EqualsWithChildren ()
185 PolicyStatement ps = new PolicyStatement (new NamedPermissionSet (ps_Name));
187 MyCodeGroup cgChild = new MyCodeGroup(new ApplicationDirectoryMembershipCondition(), ps);
188 cgChild.Name = "ChildName";
189 cgChild.Description = "Child Descripiton";
191 MyCodeGroup cg = new MyCodeGroup (new AllMembershipCondition (), ps);
192 cg.Name = "SomeName";
193 cg.Description = "Some Description";
194 cg.AddChild (cgChild);
196 MyCodeGroup cg2 = new MyCodeGroup (cg.MembershipCondition, cg.PolicyStatement);
198 cg2.Description = cg.Description;
200 Assert ("Should be equal when Children are ignored", cg.Equals (cg2));
201 Assert ("Should not be equal when Child count is different", !cg.Equals(cg2, true));
203 cg2.AddChild(cgChild);
204 Assert ("Should be equal when children are equal", cg2.Equals(cg, true));
208 public void RemoveChild ()
210 PolicyStatement ps = new PolicyStatement (new NamedPermissionSet (ps_Name));
211 MyCodeGroup cg = new MyCodeGroup (new AllMembershipCondition (), ps);
212 cg.Name = "SomeName";
213 cg.Description = "Some Description";
215 MyCodeGroup cgChild = new MyCodeGroup (new ApplicationDirectoryMembershipCondition (), ps);
216 cgChild.Name = "ChildName";
217 cgChild.Description = "Child Descripiton";
218 cg.AddChild (cgChild);
220 MyCodeGroup cgChild2 = new MyCodeGroup (new ApplicationDirectoryMembershipCondition (), ps);
221 cgChild2.Name = "ChildName2";
222 cgChild2.Description = "Child Descripiton 2";
223 cg.AddChild (cgChild2);
225 AssertEquals ("Should be two children before the call to Remove()", 2, cg.Children.Count);
226 cg.RemoveChild(cgChild);
227 AssertEquals ("Should be one children after the call to Remove()", 1, cg.Children.Count);
228 AssertEquals("Remaining child does not have correct name", "ChildName2", ((CodeGroup)cg.Children[0]).Name);
232 public void RemoveChild_NonExistant ()
234 PolicyStatement ps = new PolicyStatement (new NamedPermissionSet (ps_Name));
236 MyCodeGroup cgChild = new MyCodeGroup (new ApplicationDirectoryMembershipCondition (), ps);
237 cgChild.Name = "ChildName";
238 cgChild.Description = "Child Descripiton";
240 MyCodeGroup cg = new MyCodeGroup (new AllMembershipCondition (), ps);
241 cg.AddChild (cgChild);
242 cg.RemoveChild (cgChild);
243 cg.RemoveChild (cgChild);
248 public void RemoveChild_Null ()
250 MyCodeGroup cg = new MyCodeGroup (new AllMembershipCondition (), new PolicyStatement(new PermissionSet (PermissionState.None)));
251 cg.RemoveChild (null);
258 MyCodeGroup cg = new MyCodeGroup (new AllMembershipCondition (), new PolicyStatement(new PermissionSet (PermissionState.None)));
259 SecurityElement se = cg.ToXml ();
260 string s = se.ToString ();
261 Assert ("ToXml-Starts", s.StartsWith ("<CodeGroup class=\"MonoTests.System.Security.Policy.MyCodeGroup,"));
262 Assert ("ToXml-Ends", s.EndsWith ("version=\"1\"/>" + Environment.NewLine + "</CodeGroup>" + Environment.NewLine));
264 cg.AddChild (new MyCodeGroup (new AllMembershipCondition (), new PolicyStatement(new PermissionSet (PermissionState.Unrestricted))));
267 Assert ("ToXml-Child", s.IndexOf ("<CodeGroup class=\"MonoTests.System.Security.Policy.MyCodeGroup,", 1) > 0);
271 public void ToFromXmlRoundtrip ()
273 PolicyStatement ps = new PolicyStatement (new NamedPermissionSet (ps_Name));
274 MyCodeGroup cg = new MyCodeGroup (new AllMembershipCondition (), ps);
275 cg.Name = "SomeName";
276 cg.Description = "Some Description";
277 Assert ("Equals (itself)", cg.Equals (cg));
278 SecurityElement se = cg.ToXml ();
280 MyCodeGroup cg2 = new MyCodeGroup (new AllMembershipCondition(), ps);
281 cg2.Name = "SomeOtherName";
282 cg2.Description = "Some Other Description";
283 Assert ("Equals (another)", !cg.Equals (cg2));
286 Assert ("Equals (FromXml)", cg.Equals (cg2));
290 [ExpectedException (typeof (MissingMethodException))]
291 public void ToFromXmlRoundtrip_WithChildren ()
293 PolicyStatement ps = new PolicyStatement (new NamedPermissionSet (ps_Name));
295 MyCodeGroup cgChild = new MyCodeGroup (new ApplicationDirectoryMembershipCondition (), ps);
296 cgChild.Name = "ChildName";
297 cgChild.Description = "Child Descripiton";
299 MyCodeGroup cg = new MyCodeGroup (new AllMembershipCondition (), ps);
300 cg.Name = "SomeName";
301 cg.Description = "Some Description";
302 cg.AddChild (cgChild);
303 cg.AddChild (cgChild);
304 Assert ("Equals (itself)", cg.Equals (cg));
305 SecurityElement se = cg.ToXml ();
307 MyCodeGroup cg2 = (MyCodeGroup) cg.Copy ();
309 // MissingMethodException down here (stangely not up here ?!? delayed ?)
310 Assert ("Equals (FromXml)", cg.Equals (cg2, true));
314 public void ToFromXmlRoundtrip_WithChildren_Second ()
316 PolicyStatement ps = new PolicyStatement (new NamedPermissionSet (ps_Name));
318 // only the child is MySecondCodeGroup
319 MySecondCodeGroup cgChild = new MySecondCodeGroup (new ApplicationDirectoryMembershipCondition (), ps);
320 cgChild.Name = "ChildName";
321 cgChild.Description = "Child Descripiton";
323 MyCodeGroup cg = new MyCodeGroup (new AllMembershipCondition (), ps);
324 cg.Name = "SomeName";
325 cg.Description = "Some Description";
326 cg.AddChild (cgChild);
327 Assert ("Equals (itself)", cg.Equals (cg));
328 SecurityElement se = cg.ToXml ();
330 MyCodeGroup cg2 = (MyCodeGroup) cg.Copy ();
332 Assert ("Equals (FromXml)", cg.Equals (cg2, true));
336 public void FromXml_Bad ()
338 MyCodeGroup cg = new MyCodeGroup (new AllMembershipCondition (), new PolicyStatement(new PermissionSet (PermissionState.None)));
339 SecurityElement se = cg.ToXml ();
341 // strangely this works :(
343 // let's get weirder :)
344 foreach (SecurityElement child in se.Children) {
348 // it's not enough :(( - very relax parsing
349 se.Attributes = new Hashtable ();
351 // arghh - I will prevail!
352 foreach (SecurityElement child in se.Children) {
353 child.Attributes = new Hashtable ();
356 // huh ? well maybe not (but this is both cruel and injust)
358 } // public class CodeGroupTest
359 } // namespace MonoTests.System.Security.Policy