2 // PermissionSetTest.cs - NUnit Test Cases for PermissionSet
5 // Sebastien Pouliot <sebastien@ximian.com>
7 // (C) 2003 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.Runtime.Serialization;
34 using System.Security;
35 using System.Security.Permissions;
38 namespace MonoTests.System.Security {
41 public class PermissionSetTest : Assertion {
44 public void PermissionStateNone ()
46 PermissionSet ps = new PermissionSet (PermissionState.None);
47 Assert ("PermissionStateNone.IsUnrestricted", !ps.IsUnrestricted ());
48 Assert ("PermissionStateNone.IsEmpty", ps.IsEmpty ());
49 Assert ("PermissionStateNone.IsReadOnly", !ps.IsReadOnly);
50 AssertEquals ("PermissionStateNone.ToXml().ToString()==ToString()", ps.ToXml ().ToString (), ps.ToString ());
54 public void PermissionStateUnrestricted ()
56 PermissionSet ps = new PermissionSet (PermissionState.Unrestricted);
57 Assert ("PermissionStateUnrestricted.IsUnrestricted", ps.IsUnrestricted ());
58 Assert ("PermissionStateUnrestricted.IsEmpty", !ps.IsEmpty ());
59 Assert ("PermissionStateUnrestricted.IsReadOnly", !ps.IsReadOnly);
60 AssertEquals ("PermissionStateUnrestricted.ToXml().ToString()==ToString()", ps.ToXml ().ToString (), ps.ToString ());
64 public void PermissionSetNull ()
66 // no exception is thrown
67 PermissionSet ps = new PermissionSet (null);
69 Assert ("PermissionStateNull.IsUnrestricted", !ps.IsUnrestricted ());
70 Assert ("PermissionStateNull.IsEmpty", ps.IsEmpty ());
72 Assert ("PermissionStateNull.IsUnrestricted", ps.IsUnrestricted ());
73 Assert ("PermissionStateNull.IsEmpty", !ps.IsEmpty ());
75 Assert ("PermissionStateNull.IsReadOnly", !ps.IsReadOnly);
76 AssertEquals ("PermissionStateNull.ToXml().ToString()==ToString()", ps.ToXml ().ToString (), ps.ToString ());
80 public void PermissionSetPermissionSet ()
82 FileDialogPermission fdp = new FileDialogPermission (FileDialogPermissionAccess.Open);
83 PermissionSet ps1 = new PermissionSet (PermissionState.None);
84 ps1.AddPermission (fdp);
85 Assert ("ps1.IsEmpty", !ps1.IsEmpty ());
87 PermissionSet ps = new PermissionSet (ps1);
88 Assert ("PermissionSetPermissionSet.IsUnrestricted", !ps.IsUnrestricted ());
89 Assert ("PermissionSetPermissionSet.IsEmpty", !ps.IsEmpty ());
90 Assert ("PermissionSetPermissionSet.IsReadOnly", !ps.IsReadOnly);
91 AssertEquals ("PermissionSetPermissionSet.ToXml().ToString()==ToString()", ps.ToXml ().ToString (), ps.ToString ());
95 public void PermissionSetNamedPermissionSet ()
97 NamedPermissionSet nps = new NamedPermissionSet ("Test", PermissionState.Unrestricted);
98 PermissionSet ps = new PermissionSet (nps);
99 Assert ("IsUnrestricted", ps.IsUnrestricted ());
103 public void AddPermission ()
105 SecurityPermission sp1 = new SecurityPermission (SecurityPermissionFlag.ControlEvidence);
106 SecurityPermission sp2 = new SecurityPermission (SecurityPermissionFlag.ControlPolicy);
107 PermissionSet ps = new PermissionSet (PermissionState.None);
108 SecurityPermission result = (SecurityPermission)ps.AddPermission (sp1);
109 AssertEquals ("1-ControlEvidence", 1, ps.Count);
110 AssertEquals ("Flags-1", SecurityPermissionFlag.ControlEvidence, result.Flags);
112 result = (SecurityPermission)ps.AddPermission (sp2);
113 AssertEquals ("1-ControlEvidence+ControlPolicy", 1, ps.Count);
114 AssertEquals ("Flags-2", SecurityPermissionFlag.ControlPolicy | SecurityPermissionFlag.ControlEvidence, result.Flags);
116 result = (SecurityPermission)ps.AddPermission (sp2);
117 AssertEquals ("no change-1", 1, ps.Count);
118 AssertEquals ("Flags-3", SecurityPermissionFlag.ControlPolicy | SecurityPermissionFlag.ControlEvidence, result.Flags);
120 result = (SecurityPermission)ps.AddPermission (sp1);
121 AssertEquals ("no change-2", 1, ps.Count);
122 AssertEquals ("Flags-4", SecurityPermissionFlag.ControlPolicy | SecurityPermissionFlag.ControlEvidence, result.Flags);
126 public void AddPermission_Null ()
128 PermissionSet ps = new PermissionSet (PermissionState.None);
129 IPermission result = ps.AddPermission (null);
130 AssertNull ("Add(null)", result);
131 AssertEquals ("0", 0, ps.Count);
135 public void AddPermission_SetUnrestricted ()
137 PermissionSet ps = new PermissionSet (PermissionState.Unrestricted);
138 SecurityPermission sp = new SecurityPermission (SecurityPermissionFlag.ControlEvidence);
139 IPermission result = ps.AddPermission (sp);
140 AssertNotNull ("Add(SecurityPermission)", result);
141 AssertEquals ("SecurityPermission", SecurityPermissionFlag.AllFlags, (result as SecurityPermission).Flags);
142 AssertEquals ("0", 0, ps.Count);
143 ZoneIdentityPermission zip = new ZoneIdentityPermission (SecurityZone.MyComputer);
144 result = ps.AddPermission (zip);
145 AssertNotNull ("Add(ZoneIdentityPermission)", result);
147 // Identity permissions aren't added to unrestricted permission sets in 2.0
148 AssertEquals ("ZoneIdentityPermission", SecurityZone.NoZone, (result as ZoneIdentityPermission).SecurityZone);
149 AssertEquals ("1", 0, ps.Count);
151 AssertEquals ("ZoneIdentityPermission", zip.SecurityZone, (result as ZoneIdentityPermission).SecurityZone);
152 AssertEquals ("1", 1, ps.Count);
157 public void AddPermission_PermissionUnrestricted ()
159 PermissionSet ps = new PermissionSet (PermissionState.None);
160 SecurityPermission sp = new SecurityPermission (PermissionState.Unrestricted);
161 IPermission result = ps.AddPermission (sp);
162 AssertNotNull ("Add(SecurityPermission)", result);
163 AssertEquals ("SecurityPermission", SecurityPermissionFlag.AllFlags, (result as SecurityPermission).Flags);
164 AssertEquals ("1", 1, ps.Count);
165 Assert ("State", !ps.IsUnrestricted ());
169 public void AddPermission_NoCopy ()
171 PermissionSet ps = new PermissionSet (PermissionState.None);
172 SecurityPermission sp1 = new SecurityPermission (SecurityPermissionFlag.ControlEvidence);
173 SecurityPermission result = (SecurityPermission)ps.AddPermission (sp1);
174 SecurityPermission entry = (SecurityPermission)ps.GetPermission (typeof (SecurityPermission));
176 // are they the same (reference) or different ?
177 sp1.Flags = SecurityPermissionFlag.AllFlags;
179 result.Flags = SecurityPermissionFlag.Assertion;
183 public void ContainsNonCodeAccessPermissions ()
185 PermissionSet ps = new PermissionSet (PermissionState.None);
186 Assert ("Empty", !ps.ContainsNonCodeAccessPermissions ());
188 SecurityPermission sp = new SecurityPermission (PermissionState.Unrestricted);
189 ps.AddPermission (sp);
190 Assert ("SecurityPermission", !ps.ContainsNonCodeAccessPermissions ());
192 PrincipalPermission pp = new PrincipalPermission ("mono", "hacker");
193 ps.AddPermission (pp);
194 Assert ("PrincipalPermission", ps.ContainsNonCodeAccessPermissions ());
198 [ExpectedException (typeof (ArgumentNullException))]
199 public void ConvertPermissionSet_NullIn ()
201 PermissionSet.ConvertPermissionSet (null, new byte [0], "XML");
205 public void ConvertPermissionSet_UnknownIn ()
207 byte[] result = PermissionSet.ConvertPermissionSet (String.Empty, new byte [0], "XML");
212 public void ConvertPermissionSet_NullData ()
214 byte[] result = PermissionSet.ConvertPermissionSet ("BINARY", null, "XML");
219 [ExpectedException (typeof (ArgumentNullException))]
220 public void ConvertPermissionSet_NullOut ()
222 PermissionSet.ConvertPermissionSet ("BINARY", new byte [0], null);
226 [ExpectedException (typeof (SerializationException))]
227 public void ConvertPermissionSet_UnknownOut ()
229 PermissionSet.ConvertPermissionSet ("BINARY", new byte [0], String.Empty);
234 [Ignore ("Don't know why it doesn't work under Fx 1.1")]
236 public void ConvertPermissionSet_BinaryToBinary ()
238 PermissionSet ps = new PermissionSet (PermissionState.None);
239 byte[] data = Encoding.ASCII.GetBytes (ps.ToString ());
240 byte[] result = PermissionSet.ConvertPermissionSet ("XML", data, "BINARY");
242 byte[] result2 = PermissionSet.ConvertPermissionSet ("BINARY", result, "BINARY");
243 // there's only a little difference - but it doesn't throw an exception
244 //Assert ("BINARY!=BINARY", BitConverter.ToString (result) != BitConverter.ToString (result2));
249 [Ignore ("Don't know why it doesn't work under Fx 1.1")]
251 public void ConvertPermissionSet_XmlToBinary ()
253 PermissionSet ps = new PermissionSet (PermissionState.None);
254 byte[] data = Encoding.ASCII.GetBytes (ps.ToString ());
255 byte[] result = PermissionSet.ConvertPermissionSet ("XML", data, "BINARY");
256 byte[] result2 = PermissionSet.ConvertPermissionSet ("XMLASCII", data, "BINARY");
257 AssertEquals ("XML==XMLASCII", BitConverter.ToString (result), BitConverter.ToString (result2));
258 byte[] back = PermissionSet.ConvertPermissionSet ("BINARY", result, "XML");
259 AssertEquals ("PS-XML", Encoding.ASCII.GetString (back), ps.ToString ());
260 back = PermissionSet.ConvertPermissionSet ("BINARY", result2, "XMLASCII");
261 AssertEquals ("PS-XMLASCII", Encoding.ASCII.GetString (back), ps.ToString ());
265 public void ConvertPermissionSet_XmlToXml ()
267 PermissionSet ps = new PermissionSet (PermissionState.None);
268 byte[] data = Encoding.ASCII.GetBytes (ps.ToString ());
269 byte[] result = PermissionSet.ConvertPermissionSet ("XML", data, "XML");
270 AssertEquals ("PS-XML", Encoding.ASCII.GetString (result), ps.ToString ());
272 result = PermissionSet.ConvertPermissionSet ("XMLASCII", data, "XMLASCII");
273 AssertEquals ("PS-XMLASCII", Encoding.ASCII.GetString (result), ps.ToString ());
278 [ExpectedException (typeof (XmlSyntaxException))]
280 [ExpectedException (typeof (ArgumentException))]
282 public void ConvertPermissionSet_XmlAsciiToXmlUnicode ()
284 PermissionSet ps = new PermissionSet (PermissionState.Unrestricted);
285 byte[] data = Encoding.Unicode.GetBytes (ps.ToString ());
286 byte[] result = PermissionSet.ConvertPermissionSet ("XMLASCII", data, "XMLUNICODE");
287 // the method isn't intended to convert between ASCII and Unicode
291 public void Copy_None ()
293 PermissionSet ps = new PermissionSet (PermissionState.None);
294 PermissionSet copy = ps.Copy ();
295 Assert ("1.State", !copy.IsUnrestricted ());
296 AssertEquals ("1.Count", 0, copy.Count);
298 SecurityPermission sp = new SecurityPermission (SecurityPermissionFlag.ControlEvidence);
299 IPermission result = ps.AddPermission (sp);
300 AssertNotNull ("1.Add", result);
302 Assert ("2.State", !copy.IsUnrestricted ());
303 AssertEquals ("2.Count", 1, copy.Count);
305 ZoneIdentityPermission zip = new ZoneIdentityPermission (SecurityZone.MyComputer);
306 result = ps.AddPermission (zip);
307 AssertNotNull ("2.Add", result);
309 Assert ("3.State", !copy.IsUnrestricted ());
310 AssertEquals ("3.Count", 2, copy.Count);
314 public void Copy_Unrestricted ()
316 PermissionSet ps = new PermissionSet (PermissionState.Unrestricted);
317 PermissionSet copy = ps.Copy ();
318 Assert ("1.State", copy.IsUnrestricted ());
319 AssertEquals ("1.Count", 0, copy.Count);
321 SecurityPermission sp = new SecurityPermission (SecurityPermissionFlag.ControlEvidence);
322 IPermission result = ps.AddPermission (sp);
323 AssertNotNull ("1.Add", result);
325 Assert ("2.State", copy.IsUnrestricted ());
326 AssertEquals ("2.Count", 0, copy.Count);
328 ZoneIdentityPermission zip = new ZoneIdentityPermission (SecurityZone.MyComputer);
329 result = ps.AddPermission (zip);
330 AssertNotNull ("2.Add", result);
332 Assert ("3.State", copy.IsUnrestricted ());
334 // Identity permissions aren't added to unrestricted permission sets in 2.0
335 AssertEquals ("3.Count", 0, copy.Count);
337 AssertEquals ("3.Count", 1, copy.Count);
342 [ExpectedException (typeof (ArgumentNullException))]
343 public void CopyTo_Null ()
345 PermissionSet ps = new PermissionSet (PermissionState.None);
350 public void CopyTo_Rank_Empty ()
352 IPermission[,] pa = new IPermission [1,1];
353 PermissionSet ps = new PermissionSet (PermissionState.None);
358 [ExpectedException (typeof (ArgumentException))]
359 public void CopyTo_Rank ()
361 IPermission [,] pa = new IPermission [1, 1];
362 PermissionSet ps = new PermissionSet (PermissionState.None);
363 ps.AddPermission (new SecurityPermission (SecurityPermissionFlag.Assertion));
368 public void CopyTo_NegativeIndex_Empty ()
370 IPermission[] pa = new IPermission [1];
371 PermissionSet ps = new PermissionSet (PermissionState.None);
372 ps.CopyTo (pa, Int32.MinValue);
376 [ExpectedException (typeof (IndexOutOfRangeException))]
377 public void CopyTo_NegativeIndex ()
379 IPermission [] pa = new IPermission [1];
380 PermissionSet ps = new PermissionSet (PermissionState.None);
381 ps.AddPermission (new SecurityPermission (SecurityPermissionFlag.Assertion));
382 ps.CopyTo (pa, Int32.MinValue);
386 public void CopyTo_IndexOverLength_Empty ()
388 IPermission [] pa = new IPermission [1];
389 PermissionSet ps = new PermissionSet (PermissionState.None);
390 ps.CopyTo (pa, pa.Length);
394 [ExpectedException (typeof (IndexOutOfRangeException))]
395 public void CopyTo_IndexOverLength ()
397 IPermission [] pa = new IPermission [1];
398 PermissionSet ps = new PermissionSet (PermissionState.None);
399 ps.AddPermission (new SecurityPermission (SecurityPermissionFlag.Assertion));
400 ps.CopyTo (pa, pa.Length);
404 public void CopyTo ()
406 IPermission [] pa = new IPermission [1];
407 SecurityPermission sp = new SecurityPermission (SecurityPermissionFlag.Assertion);
408 PermissionSet ps = new PermissionSet (PermissionState.None);
409 ps.AddPermission (sp);
411 AssertEquals ("CopyTo", pa [0].ToString (), sp.ToString ());
412 Assert ("Reference", Object.ReferenceEquals (pa [0], sp));
416 [ExpectedException (typeof (ArgumentNullException))]
417 public void FromXmlNull ()
419 PermissionSet ps = new PermissionSet (PermissionState.None);
424 [ExpectedException (typeof (ArgumentException))]
425 public void FromXmlInvalidPermission ()
427 PermissionSet ps = new PermissionSet (PermissionState.None);
428 SecurityElement se = ps.ToXml ();
429 // can't modify - so we create our own
430 SecurityElement se2 = new SecurityElement ("InvalidPermissionSet", se.Text);
431 se2.AddAttribute ("class", se.Attribute ("class"));
432 se2.AddAttribute ("version", se.Attribute ("version"));
437 // [ExpectedException (typeof (ArgumentException))]
438 public void FromXmlWrongVersion ()
440 PermissionSet ps = new PermissionSet (PermissionState.None);
441 SecurityElement se = ps.ToXml ();
442 // can't modify - so we create our own
443 SecurityElement se2 = new SecurityElement (se.Tag, se.Text);
444 se2.AddAttribute ("class", se.Attribute ("class"));
445 se2.AddAttribute ("version", "2");
447 // wow - here we accept a version 2 !!!
451 public void FromXmlEmpty ()
453 PermissionSet ps = new PermissionSet (PermissionState.None);
454 SecurityElement se = ps.ToXml ();
455 AssertNotNull ("Empty.ToXml()", se);
456 AssertEquals ("Empty.Count", 0, ps.Count);
458 PermissionSet ps2 = (PermissionSet) ps.Copy ();
460 Assert ("FromXml-Copy.IsUnrestricted", !ps2.IsUnrestricted ());
462 se.AddAttribute ("Unrestricted", "true");
464 Assert ("FromXml-Unrestricted.IsUnrestricted", ps2.IsUnrestricted ());
468 public void FromXmlOne ()
470 FileDialogPermission fdp = new FileDialogPermission (FileDialogPermissionAccess.Open);
471 PermissionSet ps1 = new PermissionSet (PermissionState.None);
472 ps1.AddPermission (fdp);
473 Assert ("ps1.IsEmpty", !ps1.IsEmpty ());
475 PermissionSet ps = new PermissionSet (ps1);
476 SecurityElement se = ps.ToXml ();
477 AssertNotNull ("One.ToXml()", se);
478 AssertEquals ("One.Count", 1, ps.Count);
480 PermissionSet ps2 = (PermissionSet) ps.Copy ();
482 Assert ("FromXml-Copy.IsUnrestricted", !ps2.IsUnrestricted ());
483 AssertEquals ("Copy.Count", 1, ps2.Count);
485 se.AddAttribute ("Unrestricted", "true");
487 Assert ("FromXml-Unrestricted.IsUnrestricted", ps2.IsUnrestricted ());
489 AssertEquals ("Unrestricted.Count", 0, ps2.Count);
491 // IPermission not shown in XML but still present in Count
492 AssertEquals ("Unrestricted.Count", 1, ps2.Count);
498 [ExpectedException (typeof (ArgumentException))]
500 public void FromXml_PermissionWithoutNamespace ()
502 SecurityElement child = new SecurityElement ("IPermission");
503 child.AddAttribute ("class", "EnvironmentPermission");
504 child.AddAttribute ("version", "1");
505 child.AddAttribute ("Read", "USERNAME");
507 SecurityElement se = new SecurityElement ("PermissionSet");
508 se.AddAttribute ("class", "PermissionSet");
509 se.AddAttribute ("version", "1");
512 PermissionSet ps = new PermissionSet (PermissionState.None);
515 // not enough information but:
516 // a. it doesn't fail
517 // b. it does work for policies
518 AssertEquals ("Count", 0, ps.Count);
524 [ExpectedException (typeof (ArgumentException))]
526 public void FromXml_PermissionOutsideCorlib ()
528 SecurityElement child = new SecurityElement ("IPermission");
529 child.AddAttribute ("class", "PrintingPermission"); // System.Drawing
530 child.AddAttribute ("version", "1");
531 child.AddAttribute ("Level", "DefaultPrinting");
533 SecurityElement se = new SecurityElement ("PermissionSet");
534 se.AddAttribute ("class", "PermissionSet");
535 se.AddAttribute ("version", "1");
538 PermissionSet ps = new PermissionSet (PermissionState.None);
541 // not enough information but:
542 // a. it doesn't fail
543 // b. it does work for policies
544 AssertEquals ("Count", 0, ps.Count);
549 [ExpectedException (typeof (ArgumentException))]
550 public void FromXml_WithPermissionWithoutClass ()
552 SecurityElement child = new SecurityElement ("IPermission");
553 child.AddAttribute ("version", "1");
555 SecurityElement se = new SecurityElement ("PermissionSet");
556 se.AddAttribute ("class", "PermissionSet");
557 se.AddAttribute ("version", "1");
560 PermissionSet ps = new PermissionSet (PermissionState.None);
565 public void GetEnumerator ()
567 PermissionSet ps = new PermissionSet (PermissionState.None);
568 SecurityPermission sp = new SecurityPermission (SecurityPermissionFlag.Assertion);
569 ps.AddPermission (sp);
570 IEnumerator e = ps.GetEnumerator ();
571 AssertNotNull ("GetEnumerator", e);
573 while (e.MoveNext ()) {
574 Assert ("SecurityPermission", e.Current is SecurityPermission);
577 AssertEquals ("Count", 1, i);
581 public void GetHashCode_ ()
583 PermissionSet ps = new PermissionSet (PermissionState.None);
584 AssertEquals ("Empty", 0, ps.GetHashCode ());
585 SecurityPermission sp = new SecurityPermission (SecurityPermissionFlag.Assertion);
586 ps.AddPermission (sp);
587 Assert ("SecurityPermission", ps.GetHashCode () != 0);
588 PermissionSet copy = ps.Copy ();
589 Assert ("Copy", ps.GetHashCode () != copy.GetHashCode ());
593 public void GetPermission_None ()
595 PermissionSet ps = new PermissionSet (PermissionState.None);
596 AssertNull ("Empty", ps.GetPermission (typeof (SecurityPermission)));
600 public void GetPermission_Unrestricted ()
602 PermissionSet ps = new PermissionSet (PermissionState.Unrestricted);
603 AssertNull ("Empty", ps.GetPermission (typeof (SecurityPermission)));
606 private void Compare (string msg, PermissionSet ps, bool unrestricted, int count)
608 AssertNotNull (msg + "-NullCheck", ps);
609 Assert (msg + "-State", (ps.IsUnrestricted () == unrestricted));
610 AssertEquals (msg + "-Count", count, ps.Count);
614 public void Intersect_Empty ()
616 PermissionSet ps1 = new PermissionSet (PermissionState.None);
617 PermissionSet ps2 = new PermissionSet (PermissionState.None);
618 AssertNull ("None N null", ps1.Intersect (null));
619 AssertNull ("None1 N None2", ps1.Intersect (ps2));
620 AssertNull ("None2 N None1", ps2.Intersect (ps1));
622 PermissionSet ups1 = new PermissionSet (PermissionState.Unrestricted);
623 AssertNull ("None1 N Unrestricted", ps1.Intersect (ups1));
624 AssertNull ("Unrestricted N None1", ups1.Intersect (ps1));
625 AssertNull ("Unrestricted N Null", ups1.Intersect (null));
627 PermissionSet ups2 = new PermissionSet (PermissionState.Unrestricted);
628 Compare ("ups1 N ups2", ups1.Intersect (ups2), true, 0);
629 Compare ("ups2 N ups1", ups2.Intersect (ups1), true, 0);
633 public void Intersect_OnePermission ()
635 SecurityPermission sp = new SecurityPermission (SecurityPermissionFlag.Assertion);
636 PermissionSet ps1 = new PermissionSet (PermissionState.None);
637 ps1.AddPermission (sp);
638 PermissionSet ps2 = new PermissionSet (PermissionState.None);
639 AssertNull ("PS1 N null", ps1.Intersect (null));
640 AssertNull ("PS1 N None", ps1.Intersect (ps2));
641 AssertNull ("None N PS1", ps2.Intersect (ps1));
643 PermissionSet ps3 = ps1.Copy ();
644 Compare ("PS1 N PS3", ps1.Intersect (ps3), false, 1);
645 Compare ("PS3 N PS1", ps3.Intersect (ps1), false, 1);
647 PermissionSet ups1 = new PermissionSet (PermissionState.Unrestricted);
648 Compare ("PS1 N Unrestricted", ps1.Intersect (ups1), false, 1);
649 Compare ("Unrestricted N PS1", ups1.Intersect (ps1), false, 1);
653 public void Intersect_OneNonIUnrestrictedPermission ()
655 ZoneIdentityPermission zip = new ZoneIdentityPermission (SecurityZone.MyComputer);
656 PermissionSet ps1 = new PermissionSet (PermissionState.None);
657 ps1.AddPermission (zip);
658 PermissionSet ps2 = new PermissionSet (PermissionState.None);
659 AssertNull ("PS1 N null", ps1.Intersect (null));
660 AssertNull ("PS1 N None", ps1.Intersect (ps2));
661 AssertNull ("None N PS1", ps2.Intersect (ps1));
663 PermissionSet ps3 = ps1.Copy ();
664 Compare ("PS1 N PS3", ps1.Intersect (ps3), false, 1);
665 Compare ("PS3 N PS1", ps3.Intersect (ps1), false, 1);
667 PermissionSet ups1 = new PermissionSet (PermissionState.Unrestricted);
668 ups1.AddPermission (zip);
669 Compare ("PS1 N Unrestricted", ps1.Intersect (ups1), false, 1);
670 Compare ("Unrestricted N PS1", ups1.Intersect (ps1), false, 1);
672 PermissionSet ups2 = new PermissionSet (PermissionState.Unrestricted);
673 Compare ("UPS1 N UPS2", ups1.Intersect (ups2), true, 0);
674 Compare ("UPS2 N UPS1", ups2.Intersect (ups1), true, 0);
675 ups2.AddPermission (zip);
677 // Identity permissions aren't added to unrestricted permission sets in 2.0
678 Compare ("UPS1 N UPS2+ZIP", ups1.Intersect (ups2), true, 0);
679 Compare ("UPS2+ZIP N UPS1", ups2.Intersect (ups1), true, 0);
681 Compare ("UPS1 N UPS2+ZIP", ups1.Intersect (ups2), true, 1);
682 Compare ("UPS2+ZIP N UPS1", ups2.Intersect (ups1), true, 1);
687 public void IsEmpty_None ()
689 PermissionSet ps = new PermissionSet (PermissionState.None);
690 Assert ("Empty.IsEmpty", ps.IsEmpty ());
691 ps.AddPermission (new ZoneIdentityPermission (SecurityZone.NoZone));
692 AssertEquals ("Count==1", 1, ps.Count);
693 Assert ("Zip.IsEmpty", ps.IsEmpty ()); // yes empty!
697 public void IsEmpty_Unrestricted ()
699 PermissionSet ps = new PermissionSet (PermissionState.Unrestricted);
700 Assert ("Unrestricted.IsEmpty", !ps.IsEmpty ());
701 ps.AddPermission (new ZoneIdentityPermission (SecurityZone.NoZone));
703 // Identity permissions aren't added to unrestricted permission sets in 2.0
704 AssertEquals ("Count==0", 0, ps.Count);
706 AssertEquals ("Count==1", 1, ps.Count);
708 Assert ("Zip.IsEmpty", !ps.IsEmpty ()); // yes empty!
712 public void IsSubset_Empty ()
714 PermissionSet ps1 = new PermissionSet (PermissionState.None);
715 PermissionSet ps2 = new PermissionSet (PermissionState.None);
716 Assert ("None.IsSubsetOf(null)", ps1.IsSubsetOf (null));
717 Assert ("None1.IsSubsetOf(None2)", ps1.IsSubsetOf (ps2));
718 Assert ("None2.IsSubsetOf(None1)", ps2.IsSubsetOf (ps1));
720 PermissionSet ups1 = new PermissionSet (PermissionState.Unrestricted);
721 Assert ("None1.IsSubsetOf(Unrestricted)", ps1.IsSubsetOf (ups1));
722 Assert ("Unrestricted.IsSubsetOf(None1)", !ups1.IsSubsetOf (ps1));
723 Assert ("Unrestricted.IsSubsetOf(Null)", !ups1.IsSubsetOf (null));
725 PermissionSet ups2 = new PermissionSet (PermissionState.Unrestricted);
726 Assert ("ups1IsSubsetOf(ups2)", ups1.IsSubsetOf (ups2));
727 Assert ("ups2.IsSubsetOf(ups1)", ups2.IsSubsetOf (ups1));
731 public void IsSubset_OnePermission ()
733 SecurityPermission sp = new SecurityPermission (SecurityPermissionFlag.Assertion);
734 PermissionSet ps1 = new PermissionSet (PermissionState.None);
735 ps1.AddPermission (sp);
736 PermissionSet ps2 = new PermissionSet (PermissionState.None);
737 Assert ("PS1.IsSubset(null)", !ps1.IsSubsetOf (null));
738 Assert ("PS1.IsSubset(None)", !ps1.IsSubsetOf (ps2));
739 Assert ("None.IsSubset(PS1)", ps2.IsSubsetOf (ps1));
741 PermissionSet ps3 = ps1.Copy ();
742 Assert ("PS1.IsSubset(PS3)", ps1.IsSubsetOf (ps3));
743 Assert ("PS3.IsSubset(PS1)", ps3.IsSubsetOf (ps1));
745 PermissionSet ups1 = new PermissionSet (PermissionState.Unrestricted);
746 Assert ("PS1.IsSubset(Unrestricted)", ps1.IsSubsetOf (ups1));
747 Assert ("Unrestricted.IsSubset(PS1)", !ups1.IsSubsetOf (ps1));
751 public void IsSubset_OneNonIUnrestrictedPermission ()
753 ZoneIdentityPermission zip = new ZoneIdentityPermission (SecurityZone.MyComputer);
754 PermissionSet ps1 = new PermissionSet (PermissionState.None);
755 ps1.AddPermission (zip);
756 PermissionSet ps2 = new PermissionSet (PermissionState.None);
757 Assert ("PS1.IsSubset(null)", !ps1.IsSubsetOf (null));
758 Assert ("PS1.IsSubset(None)", !ps1.IsSubsetOf (ps2));
759 Assert ("None.IsSubset(PS1)", ps2.IsSubsetOf (ps1));
761 PermissionSet ps3 = ps1.Copy ();
762 Assert ("PS1.IsSubset(PS3)", ps1.IsSubsetOf (ps3));
763 Assert ("PS3.IsSubset(PS1)", ps3.IsSubsetOf (ps1));
765 PermissionSet ups1 = new PermissionSet (PermissionState.Unrestricted);
766 ups1.AddPermission (zip);
767 Assert ("PS1.IsSubset(Unrestricted)", ps1.IsSubsetOf (ups1));
768 Assert ("Unrestricted.IsSubset(PS1)", !ups1.IsSubsetOf (ps1));
770 PermissionSet ups2 = new PermissionSet (PermissionState.Unrestricted);
772 // as ZoneIdentityPermission isn't added UPS1Z == UPS2
773 Assert ("UPS1Z.IsSubset(UPS2)", ups1.IsSubsetOf (ups2));
775 Assert ("UPS1Z.IsSubset(UPS2)", !ups1.IsSubsetOf (ups2));
777 Assert ("UPS2.IsSubset(UPS1Z)", ups2.IsSubsetOf (ups1));
778 ups2.AddPermission (zip);
779 Assert ("UPS1Z.IsSubset(UPS2Z)", ups1.IsSubsetOf (ups2));
780 Assert ("UPS2Z.IsSubset(UPS1Z)", ups2.IsSubsetOf (ups1));
784 public void RemovePermission_Null ()
786 PermissionSet ps = new PermissionSet (PermissionState.None);
787 AssertNull (ps.RemovePermission (null));
791 public void RemovePermission_None ()
793 PermissionSet ps = new PermissionSet (PermissionState.None);
794 AssertNull ("Empty", ps.RemovePermission (typeof (SecurityPermission)));
795 SecurityPermission sp = new SecurityPermission (SecurityPermissionFlag.Assertion);
796 ps.AddPermission (sp);
797 SecurityPermission removed = (SecurityPermission) ps.RemovePermission (typeof (SecurityPermission));
798 AssertNotNull ("SecurityPermission", removed);
799 AssertEquals ("Flags", sp.Flags, removed.Flags);
800 AssertNull ("Empty-Again", ps.RemovePermission (typeof (SecurityPermission)));
804 public void RemovePermission_Unrestricted ()
806 PermissionSet ps = new PermissionSet (PermissionState.Unrestricted);
807 AssertNull ("Empty", ps.RemovePermission (typeof (SecurityPermission)));
808 SecurityPermission sp = new SecurityPermission (SecurityPermissionFlag.Assertion);
809 ps.AddPermission (sp);
810 AssertNull ("SecurityPermissionn", ps.RemovePermission (typeof (SecurityPermission)));
811 ZoneIdentityPermission zip = new ZoneIdentityPermission (SecurityZone.MyComputer);
812 ps.AddPermission (zip);
813 ZoneIdentityPermission removed = (ZoneIdentityPermission)ps.RemovePermission (typeof (ZoneIdentityPermission));
815 // identity permissions aren't added to unrestricted permission sets
816 // so they cannot be removed later (hence the null)
817 AssertNull ("ZoneIdentityPermission", removed);
819 AssertNotNull ("ZoneIdentityPermission", removed);
824 public void SetPermission_Null ()
826 PermissionSet ps = new PermissionSet (PermissionState.None);
827 AssertNull (ps.SetPermission (null));
831 public void SetPermission_None ()
833 PermissionSet ps = new PermissionSet (PermissionState.None);
834 AssertEquals ("Empty", 0, ps.Count);
835 Assert ("State-None", !ps.IsUnrestricted ());
837 SecurityPermission sp = new SecurityPermission (PermissionState.Unrestricted);
838 SecurityPermission result = (SecurityPermission)ps.SetPermission (sp);
839 AssertEquals ("SecurityPermission", 1, ps.Count);
840 AssertEquals ("Flags", SecurityPermissionFlag.AllFlags, result.Flags);
841 Assert ("State-None-2", !ps.IsUnrestricted ());
843 sp = new SecurityPermission (SecurityPermissionFlag.ControlAppDomain);
844 result = (SecurityPermission)ps.SetPermission (sp);
845 AssertEquals ("SecurityPermission-2", 1, ps.Count);
846 AssertEquals ("Flags", SecurityPermissionFlag.ControlAppDomain, result.Flags);
848 ZoneIdentityPermission zip = new ZoneIdentityPermission (SecurityZone.MyComputer);
849 ZoneIdentityPermission zipr = (ZoneIdentityPermission) ps.SetPermission (zip);
850 AssertEquals ("ZoneIdentityPermission", 2, ps.Count);
851 AssertEquals ("SecurityZone", SecurityZone.MyComputer, zipr.SecurityZone);
853 zip = new ZoneIdentityPermission (SecurityZone.Intranet);
854 zipr = (ZoneIdentityPermission)ps.SetPermission (zip);
855 AssertEquals ("ZoneIdentityPermission", 2, ps.Count);
856 AssertEquals ("SecurityZone", SecurityZone.Intranet, zipr.SecurityZone);
860 public void SetPermission_Unrestricted ()
862 SecurityPermission sp = new SecurityPermission (PermissionState.Unrestricted);
863 PermissionSet ps = new PermissionSet (PermissionState.Unrestricted);
864 AssertEquals ("Empty", 0, ps.Count);
865 Assert ("State-Unrestricted", ps.IsUnrestricted ());
867 ZoneIdentityPermission zip = new ZoneIdentityPermission (SecurityZone.MyComputer);
868 ZoneIdentityPermission zipr = (ZoneIdentityPermission)ps.SetPermission (zip);
869 AssertEquals ("ZoneIdentityPermission", 1, ps.Count);
870 AssertEquals ("SecurityZone", SecurityZone.MyComputer, zipr.SecurityZone);
872 // Adding a non unrestricted identity permission now results in
873 // a permission set loosing it's unrestricted status
874 Assert ("State-Unrestricted-2", !ps.IsUnrestricted ());
876 Assert ("State-Unrestricted-2", ps.IsUnrestricted ());
878 zip = new ZoneIdentityPermission (SecurityZone.Intranet);
879 zipr = (ZoneIdentityPermission)ps.SetPermission (zip);
880 AssertEquals ("ZoneIdentityPermission-2", 1, ps.Count);
881 AssertEquals ("SecurityZone-2", SecurityZone.Intranet, zipr.SecurityZone);
883 SecurityPermission result = (SecurityPermission)ps.SetPermission (sp);
884 AssertEquals ("SecurityPermission", 2, ps.Count);
885 AssertEquals ("Flags", SecurityPermissionFlag.AllFlags, result.Flags);
886 Assert ("State-None", !ps.IsUnrestricted ());
888 sp = new SecurityPermission (SecurityPermissionFlag.ControlAppDomain);
889 result = (SecurityPermission)ps.SetPermission (sp);
890 AssertEquals ("SecurityPermission-2", 2, ps.Count);
891 AssertEquals ("Flags-2", SecurityPermissionFlag.ControlAppDomain, result.Flags);
895 public void ToXmlNone ()
897 PermissionSet ps = new PermissionSet (PermissionState.None);
898 SecurityElement se = ps.ToXml ();
899 Assert ("None.ToString().StartsWith", ps.ToString().StartsWith ("<PermissionSet"));
900 AssertEquals ("None.class", "System.Security.PermissionSet", (se.Attributes ["class"] as string));
901 AssertEquals ("None.version", "1", (se.Attributes ["version"] as string));
902 AssertNull ("None.Unrestricted", (se.Attributes ["Unrestricted"] as string));
906 public void ToXmlUnrestricted ()
908 PermissionSet ps = new PermissionSet (PermissionState.Unrestricted);
909 SecurityElement se = ps.ToXml ();
910 Assert ("Unrestricted.ToString().StartsWith", ps.ToString().StartsWith ("<PermissionSet"));
911 AssertEquals ("Unrestricted.class", "System.Security.PermissionSet", (se.Attributes ["class"] as string));
912 AssertEquals ("Unrestricted.version", "1", (se.Attributes ["version"] as string));
913 AssertEquals ("Unrestricted.Unrestricted", "true", (se.Attributes ["Unrestricted"] as string));
917 public void Union_Empty ()
919 PermissionSet ps1 = new PermissionSet (PermissionState.None);
920 PermissionSet ps2 = new PermissionSet (PermissionState.None);
921 Compare ("None U null", ps1.Union (null), false, 0);
922 Compare ("None1 U None2", ps1.Union (ps2), false, 0);
923 Compare ("None2 U None1", ps2.Union (ps1), false, 0);
925 PermissionSet ups1 = new PermissionSet (PermissionState.Unrestricted);
926 Compare ("None1 U Unrestricted", ps1.Union (ups1), true, 0);
927 Compare ("Unrestricted U None1", ups1.Union (ps1), true, 0);
928 Compare ("Unrestricted U Null", ups1.Union (null), true, 0);
930 PermissionSet ups2 = new PermissionSet (PermissionState.Unrestricted);
931 Compare ("ups1 U ups2", ups1.Union (ups2), true, 0);
932 Compare ("ups2 U ups1", ups2.Union (ups1), true, 0);
936 public void Union_OnePermission ()
938 SecurityPermission sp = new SecurityPermission (SecurityPermissionFlag.Assertion);
939 PermissionSet ps1 = new PermissionSet (PermissionState.None);
940 ps1.AddPermission (sp);
941 PermissionSet ps2 = new PermissionSet (PermissionState.None);
942 Compare ("PS1 U null", ps1.Union (null), false, 1);
943 Compare ("PS1 U None", ps1.Union (ps2), false, 1);
944 Compare ("None U PS1", ps2.Union (ps1), false, 1);
946 PermissionSet ps3 = ps1.Copy ();
947 Compare ("PS1 U PS3", ps1.Union (ps3), false, 1);
948 Compare ("PS3 U PS1", ps3.Union (ps1), false, 1);
950 PermissionSet ups1 = new PermissionSet (PermissionState.Unrestricted);
951 Compare ("PS1 U Unrestricted", ps1.Union (ups1), true, 0);
952 Compare ("Unrestricted U PS1", ups1.Union (ps1), true, 0);
956 public void Union_OneNonIUnrestrictedPermission ()
958 ZoneIdentityPermission zip = new ZoneIdentityPermission (SecurityZone.MyComputer);
959 PermissionSet ps1 = new PermissionSet (PermissionState.None);
960 ps1.AddPermission (zip);
961 PermissionSet ps2 = new PermissionSet (PermissionState.None);
962 Compare ("PS1 U null", ps1.Union (null), false, 1);
963 Compare ("PS1 U None", ps1.Union (ps2), false, 1);
964 Compare ("None U PS1", ps2.Union (ps1), false, 1);
966 PermissionSet ps3 = ps1.Copy ();
967 Compare ("PS1 U PS3", ps1.Union (ps3), false, 1);
968 Compare ("PS3 U PS1", ps3.Union (ps1), false, 1);
970 PermissionSet ups1 = new PermissionSet (PermissionState.Unrestricted);
971 ups1.AddPermission (zip);
973 // Identity permissions aren't added to unrestricted permission sets in 2.0
974 Compare ("PS1 U Unrestricted", ps1.Union (ups1), true, 0);
975 Compare ("Unrestricted U PS1", ups1.Union (ps1), true, 0);
976 PermissionSet ups2 = new PermissionSet (PermissionState.Unrestricted);
977 Compare ("UPS1 U UPS2", ups1.Union (ups1), true, 0);
978 Compare ("UPS2 U UPS1", ups2.Union (ups1), true, 0);
979 ups2.AddPermission (zip);
980 Compare ("UPS1 U UPS2+ZIP", ups1.Union (ups2), true, 0);
981 Compare ("UPS2+ZIP U UPS1", ups2.Union (ups1), true, 0);
983 Compare ("PS1 U Unrestricted", ps1.Union (ups1), true, 1);
984 Compare ("Unrestricted U PS1", ups1.Union (ps1), true, 1);
985 PermissionSet ups2 = new PermissionSet (PermissionState.Unrestricted);
986 Compare ("UPS1 U UPS2", ups1.Union (ups1), true, 1);
987 Compare ("UPS2 U UPS1", ups2.Union (ups1), true, 1);
988 ups2.AddPermission (zip);
989 Compare ("UPS1 U UPS2+ZIP", ups1.Union (ups2), true, 1);
990 Compare ("UPS2+ZIP U UPS1", ups2.Union (ups1), true, 1);
995 [ExpectedException (typeof (ExecutionEngineException))]
996 public void RevertAssert_WithoutAssertion ()
998 PermissionSet.RevertAssert ();
1002 public void RevertAssert_WithAssertion ()
1004 PermissionSet ups = new PermissionSet (PermissionState.Unrestricted);
1006 PermissionSet.RevertAssert ();
1010 public void Assert_NonCasPermission ()
1012 PermissionSet ps = new PermissionSet (PermissionState.None);
1013 ps.AddPermission (new PrincipalPermission (PermissionState.None));
1014 Assert ("ContainsNonCodeAccessPermissions", ps.ContainsNonCodeAccessPermissions ());
1015 AssertEquals ("Count", 1, ps.Count);
1017 // it's simply ignored
1021 public void Deny_NonCasPermission ()
1023 PermissionSet ps = new PermissionSet (PermissionState.None);
1024 ps.AddPermission (new PrincipalPermission (PermissionState.None));
1025 Assert ("ContainsNonCodeAccessPermissions", ps.ContainsNonCodeAccessPermissions ());
1026 AssertEquals ("Count", 1, ps.Count);
1028 // it's simply ignored
1032 public void PermitOnly_NonCasPermission ()
1034 PermissionSet ps = new PermissionSet (PermissionState.None);
1035 ps.AddPermission (new PrincipalPermission (PermissionState.None));
1036 Assert ("ContainsNonCodeAccessPermissions", ps.ContainsNonCodeAccessPermissions ());
1037 AssertEquals ("Count", 1, ps.Count);
1039 // it's simply ignored