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-2005 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 ());
\r
51 Assert ("ContainsNonCodeAccessPermissions", !ps.ContainsNonCodeAccessPermissions ());
55 public void PermissionStateUnrestricted ()
57 PermissionSet ps = new PermissionSet (PermissionState.Unrestricted);
58 Assert ("PermissionStateUnrestricted.IsUnrestricted", ps.IsUnrestricted ());
59 Assert ("PermissionStateUnrestricted.IsEmpty", !ps.IsEmpty ());
60 Assert ("PermissionStateUnrestricted.IsReadOnly", !ps.IsReadOnly);
61 AssertEquals ("PermissionStateUnrestricted.ToXml().ToString()==ToString()", ps.ToXml ().ToString (), ps.ToString ());
\r
62 Assert ("ContainsNonCodeAccessPermissions", !ps.ContainsNonCodeAccessPermissions ());
\r
66 public void PermissionSetNull ()
68 // no exception is thrown
69 PermissionSet ps = new PermissionSet (null);
71 Assert ("PermissionStateNull.IsUnrestricted", !ps.IsUnrestricted ());
72 Assert ("PermissionStateNull.IsEmpty", ps.IsEmpty ());
74 Assert ("PermissionStateNull.IsUnrestricted", ps.IsUnrestricted ());
75 Assert ("PermissionStateNull.IsEmpty", !ps.IsEmpty ());
77 Assert ("PermissionStateNull.IsReadOnly", !ps.IsReadOnly);
78 AssertEquals ("PermissionStateNull.ToXml().ToString()==ToString()", ps.ToXml ().ToString (), ps.ToString ());
\r
79 Assert ("ContainsNonCodeAccessPermissions", !ps.ContainsNonCodeAccessPermissions ());
\r
83 public void PermissionSetPermissionSet ()
85 FileDialogPermission fdp = new FileDialogPermission (FileDialogPermissionAccess.Open);
86 PermissionSet ps1 = new PermissionSet (PermissionState.None);
87 ps1.AddPermission (fdp);
88 Assert ("ps1.IsEmpty", !ps1.IsEmpty ());
90 PermissionSet ps = new PermissionSet (ps1);
91 Assert ("PermissionSetPermissionSet.IsUnrestricted", !ps.IsUnrestricted ());
92 Assert ("PermissionSetPermissionSet.IsEmpty", !ps.IsEmpty ());
93 Assert ("PermissionSetPermissionSet.IsReadOnly", !ps.IsReadOnly);
94 AssertEquals ("PermissionSetPermissionSet.ToXml().ToString()==ToString()", ps.ToXml ().ToString (), ps.ToString ());
\r
95 Assert ("ContainsNonCodeAccessPermissions", !ps.ContainsNonCodeAccessPermissions ());
\r
99 public void PermissionSetNamedPermissionSet ()
101 NamedPermissionSet nps = new NamedPermissionSet ("Test", PermissionState.Unrestricted);
102 PermissionSet ps = new PermissionSet (nps);
103 Assert ("IsUnrestricted", ps.IsUnrestricted ());
\r
104 Assert ("ContainsNonCodeAccessPermissions", !ps.ContainsNonCodeAccessPermissions ());
\r
108 public void AddPermission ()
110 SecurityPermission sp1 = new SecurityPermission (SecurityPermissionFlag.ControlEvidence);
111 SecurityPermission sp2 = new SecurityPermission (SecurityPermissionFlag.ControlPolicy);
112 PermissionSet ps = new PermissionSet (PermissionState.None);
113 SecurityPermission result = (SecurityPermission)ps.AddPermission (sp1);
114 AssertEquals ("1-ControlEvidence", 1, ps.Count);
115 AssertEquals ("Flags-1", SecurityPermissionFlag.ControlEvidence, result.Flags);
117 result = (SecurityPermission)ps.AddPermission (sp2);
118 AssertEquals ("1-ControlEvidence+ControlPolicy", 1, ps.Count);
119 AssertEquals ("Flags-2", SecurityPermissionFlag.ControlPolicy | SecurityPermissionFlag.ControlEvidence, result.Flags);
121 result = (SecurityPermission)ps.AddPermission (sp2);
122 AssertEquals ("no change-1", 1, ps.Count);
123 AssertEquals ("Flags-3", SecurityPermissionFlag.ControlPolicy | SecurityPermissionFlag.ControlEvidence, result.Flags);
125 result = (SecurityPermission)ps.AddPermission (sp1);
126 AssertEquals ("no change-2", 1, ps.Count);
127 AssertEquals ("Flags-4", SecurityPermissionFlag.ControlPolicy | SecurityPermissionFlag.ControlEvidence, result.Flags);
131 public void AddPermission_Null ()
133 PermissionSet ps = new PermissionSet (PermissionState.None);
134 IPermission result = ps.AddPermission (null);
135 AssertNull ("Add(null)", result);
136 AssertEquals ("0", 0, ps.Count);
140 public void AddPermission_SetUnrestricted ()
142 PermissionSet ps = new PermissionSet (PermissionState.Unrestricted);
143 SecurityPermission sp = new SecurityPermission (SecurityPermissionFlag.ControlEvidence);
144 IPermission result = ps.AddPermission (sp);
145 AssertNotNull ("Add(SecurityPermission)", result);
146 AssertEquals ("SecurityPermission", SecurityPermissionFlag.AllFlags, (result as SecurityPermission).Flags);
147 AssertEquals ("0", 0, ps.Count);
148 ZoneIdentityPermission zip = new ZoneIdentityPermission (SecurityZone.MyComputer);
149 result = ps.AddPermission (zip);
150 AssertNotNull ("Add(ZoneIdentityPermission)", result);
152 // Identity permissions aren't added to unrestricted permission sets in 2.0
153 AssertEquals ("ZoneIdentityPermission", SecurityZone.NoZone, (result as ZoneIdentityPermission).SecurityZone);
154 AssertEquals ("1", 0, ps.Count);
156 AssertEquals ("ZoneIdentityPermission", zip.SecurityZone, (result as ZoneIdentityPermission).SecurityZone);
157 AssertEquals ("1", 1, ps.Count);
162 public void AddPermission_PermissionUnrestricted ()
164 PermissionSet ps = new PermissionSet (PermissionState.None);
165 SecurityPermission sp = new SecurityPermission (PermissionState.Unrestricted);
166 IPermission result = ps.AddPermission (sp);
167 AssertNotNull ("Add(SecurityPermission)", result);
168 AssertEquals ("SecurityPermission", SecurityPermissionFlag.AllFlags, (result as SecurityPermission).Flags);
169 AssertEquals ("1", 1, ps.Count);
170 Assert ("State", !ps.IsUnrestricted ());
174 public void AddPermission_NonCasPermission ()
\r
176 PermissionSet ps = new PermissionSet (PermissionState.None);
\r
177 ps.AddPermission (new PrincipalPermission ("name", "role"));
\r
178 AssertEquals ("Count", 1, ps.Count);
\r
179 Assert ("IsEmpty", !ps.IsEmpty ());
\r
183 public void AddPermission_NonCasPermissionNone ()
\r
185 PermissionSet ps = new PermissionSet (PermissionState.None);
\r
186 ps.AddPermission (new PrincipalPermission (PermissionState.None));
\r
187 AssertEquals ("Count", 1, ps.Count);
\r
188 Assert ("IsEmpty", ps.IsEmpty ());
\r
192 public void AddPermission_NonCasPermissionUnrestricted ()
\r
194 PermissionSet ps = new PermissionSet (PermissionState.None);
\r
195 ps.AddPermission (new PrincipalPermission (PermissionState.Unrestricted));
\r
196 AssertEquals ("Count", 1, ps.Count);
\r
197 Assert ("IsEmpty", !ps.IsEmpty ());
\r
201 public void AddPermission_NonCasPermission_Unrestricted ()
\r
203 PermissionSet ps = new PermissionSet (PermissionState.Unrestricted);
\r
204 ps.AddPermission (new PrincipalPermission ("name", "role"));
\r
205 AssertEquals ("Count", 0, ps.Count);
\r
206 Assert ("ContainsNonCodeAccessPermissions", !ps.ContainsNonCodeAccessPermissions ());
\r
210 public void AddPermission_NonCasPermissionNone_Unrestricted ()
\r
212 PermissionSet ps = new PermissionSet (PermissionState.Unrestricted);
\r
213 ps.AddPermission (new PrincipalPermission (PermissionState.None));
\r
214 AssertEquals ("Count", 0, ps.Count);
\r
215 Assert ("ContainsNonCodeAccessPermissions", !ps.ContainsNonCodeAccessPermissions ());
\r
219 public void AddPermission_NonCasPermissionUnrestricted_Unrestricted ()
\r
221 PermissionSet ps = new PermissionSet (PermissionState.Unrestricted);
\r
222 ps.AddPermission (new PrincipalPermission (PermissionState.Unrestricted));
\r
223 AssertEquals ("Count", 0, ps.Count);
\r
224 Assert ("ContainsNonCodeAccessPermissions", !ps.ContainsNonCodeAccessPermissions ());
\r
228 public void AddPermission_NoCopy ()
230 PermissionSet ps = new PermissionSet (PermissionState.None);
231 SecurityPermission sp1 = new SecurityPermission (SecurityPermissionFlag.ControlEvidence);
232 SecurityPermission result = (SecurityPermission)ps.AddPermission (sp1);
233 SecurityPermission entry = (SecurityPermission)ps.GetPermission (typeof (SecurityPermission));
235 // are they the same (reference) or different ?
236 sp1.Flags = SecurityPermissionFlag.AllFlags;
238 result.Flags = SecurityPermissionFlag.Assertion;
242 public void ContainsNonCodeAccessPermissions ()
244 PermissionSet ps = new PermissionSet (PermissionState.None);
245 Assert ("Empty", !ps.ContainsNonCodeAccessPermissions ());
247 SecurityPermission sp = new SecurityPermission (PermissionState.Unrestricted);
248 ps.AddPermission (sp);
249 Assert ("SecurityPermission", !ps.ContainsNonCodeAccessPermissions ());
251 PrincipalPermission pp = new PrincipalPermission ("mono", "hacker");
252 ps.AddPermission (pp);
253 Assert ("PrincipalPermission", ps.ContainsNonCodeAccessPermissions ());
257 [ExpectedException (typeof (ArgumentNullException))]
258 public void ConvertPermissionSet_NullIn ()
260 PermissionSet.ConvertPermissionSet (null, new byte [0], "XML");
264 public void ConvertPermissionSet_UnknownIn ()
266 byte[] result = PermissionSet.ConvertPermissionSet (String.Empty, new byte [0], "XML");
271 public void ConvertPermissionSet_NullData ()
273 byte[] result = PermissionSet.ConvertPermissionSet ("BINARY", null, "XML");
278 [ExpectedException (typeof (ArgumentNullException))]
279 public void ConvertPermissionSet_NullOut ()
281 PermissionSet.ConvertPermissionSet ("BINARY", new byte [0], null);
285 [ExpectedException (typeof (SerializationException))]
286 public void ConvertPermissionSet_UnknownOut ()
288 PermissionSet.ConvertPermissionSet ("BINARY", new byte [0], String.Empty);
293 [Ignore ("Don't know why it doesn't work under Fx 1.1")]
295 public void ConvertPermissionSet_BinaryToBinary ()
297 PermissionSet ps = new PermissionSet (PermissionState.None);
298 byte[] data = Encoding.ASCII.GetBytes (ps.ToString ());
299 byte[] result = PermissionSet.ConvertPermissionSet ("XML", data, "BINARY");
301 byte[] result2 = PermissionSet.ConvertPermissionSet ("BINARY", result, "BINARY");
302 // there's only a little difference - but it doesn't throw an exception
303 //Assert ("BINARY!=BINARY", BitConverter.ToString (result) != BitConverter.ToString (result2));
308 [Ignore ("Don't know why it doesn't work under Fx 1.1")]
310 public void ConvertPermissionSet_XmlToBinary ()
312 PermissionSet ps = new PermissionSet (PermissionState.None);
313 byte[] data = Encoding.ASCII.GetBytes (ps.ToString ());
314 byte[] result = PermissionSet.ConvertPermissionSet ("XML", data, "BINARY");
315 byte[] result2 = PermissionSet.ConvertPermissionSet ("XMLASCII", data, "BINARY");
316 AssertEquals ("XML==XMLASCII", BitConverter.ToString (result), BitConverter.ToString (result2));
317 byte[] back = PermissionSet.ConvertPermissionSet ("BINARY", result, "XML");
318 AssertEquals ("PS-XML", Encoding.ASCII.GetString (back), ps.ToString ());
319 back = PermissionSet.ConvertPermissionSet ("BINARY", result2, "XMLASCII");
320 AssertEquals ("PS-XMLASCII", Encoding.ASCII.GetString (back), ps.ToString ());
324 public void ConvertPermissionSet_XmlToXml ()
326 PermissionSet ps = new PermissionSet (PermissionState.None);
327 byte[] data = Encoding.ASCII.GetBytes (ps.ToString ());
328 byte[] result = PermissionSet.ConvertPermissionSet ("XML", data, "XML");
329 AssertEquals ("PS-XML", Encoding.ASCII.GetString (result), ps.ToString ());
331 result = PermissionSet.ConvertPermissionSet ("XMLASCII", data, "XMLASCII");
332 AssertEquals ("PS-XMLASCII", Encoding.ASCII.GetString (result), ps.ToString ());
337 [ExpectedException (typeof (XmlSyntaxException))]
339 [ExpectedException (typeof (ArgumentException))]
341 public void ConvertPermissionSet_XmlAsciiToXmlUnicode ()
343 PermissionSet ps = new PermissionSet (PermissionState.Unrestricted);
344 byte[] data = Encoding.Unicode.GetBytes (ps.ToString ());
345 byte[] result = PermissionSet.ConvertPermissionSet ("XMLASCII", data, "XMLUNICODE");
346 // the method isn't intended to convert between ASCII and Unicode
350 public void Copy_None ()
352 PermissionSet ps = new PermissionSet (PermissionState.None);
353 PermissionSet copy = ps.Copy ();
354 Assert ("1.State", !copy.IsUnrestricted ());
355 AssertEquals ("1.Count", 0, copy.Count);
357 SecurityPermission sp = new SecurityPermission (SecurityPermissionFlag.ControlEvidence);
358 IPermission result = ps.AddPermission (sp);
359 AssertNotNull ("1.Add", result);
361 Assert ("2.State", !copy.IsUnrestricted ());
362 AssertEquals ("2.Count", 1, copy.Count);
364 ZoneIdentityPermission zip = new ZoneIdentityPermission (SecurityZone.MyComputer);
365 result = ps.AddPermission (zip);
366 AssertNotNull ("2.Add", result);
368 Assert ("3.State", !copy.IsUnrestricted ());
369 AssertEquals ("3.Count", 2, copy.Count);
373 public void Copy_Unrestricted ()
375 PermissionSet ps = new PermissionSet (PermissionState.Unrestricted);
376 PermissionSet copy = ps.Copy ();
377 Assert ("1.State", copy.IsUnrestricted ());
378 AssertEquals ("1.Count", 0, copy.Count);
380 SecurityPermission sp = new SecurityPermission (SecurityPermissionFlag.ControlEvidence);
381 IPermission result = ps.AddPermission (sp);
382 AssertNotNull ("1.Add", result);
384 Assert ("2.State", copy.IsUnrestricted ());
385 AssertEquals ("2.Count", 0, copy.Count);
387 ZoneIdentityPermission zip = new ZoneIdentityPermission (SecurityZone.MyComputer);
388 result = ps.AddPermission (zip);
389 AssertNotNull ("2.Add", result);
391 Assert ("3.State", copy.IsUnrestricted ());
393 // Identity permissions aren't added to unrestricted permission sets in 2.0
394 AssertEquals ("3.Count", 0, copy.Count);
396 AssertEquals ("3.Count", 1, copy.Count);
401 [ExpectedException (typeof (ArgumentNullException))]
402 public void CopyTo_Null ()
404 PermissionSet ps = new PermissionSet (PermissionState.None);
409 public void CopyTo_Rank_Empty ()
411 IPermission[,] pa = new IPermission [1,1];
412 PermissionSet ps = new PermissionSet (PermissionState.None);
417 [ExpectedException (typeof (ArgumentException))]
418 public void CopyTo_Rank ()
420 IPermission [,] pa = new IPermission [1, 1];
421 PermissionSet ps = new PermissionSet (PermissionState.None);
422 ps.AddPermission (new SecurityPermission (SecurityPermissionFlag.Assertion));
427 public void CopyTo_NegativeIndex_Empty ()
429 IPermission[] pa = new IPermission [1];
430 PermissionSet ps = new PermissionSet (PermissionState.None);
431 ps.CopyTo (pa, Int32.MinValue);
435 [ExpectedException (typeof (IndexOutOfRangeException))]
436 public void CopyTo_NegativeIndex ()
438 IPermission [] pa = new IPermission [1];
439 PermissionSet ps = new PermissionSet (PermissionState.None);
440 ps.AddPermission (new SecurityPermission (SecurityPermissionFlag.Assertion));
441 ps.CopyTo (pa, Int32.MinValue);
445 public void CopyTo_IndexOverLength_Empty ()
447 IPermission [] pa = new IPermission [1];
448 PermissionSet ps = new PermissionSet (PermissionState.None);
449 ps.CopyTo (pa, pa.Length);
453 [ExpectedException (typeof (IndexOutOfRangeException))]
454 public void CopyTo_IndexOverLength ()
456 IPermission [] pa = new IPermission [1];
457 PermissionSet ps = new PermissionSet (PermissionState.None);
458 ps.AddPermission (new SecurityPermission (SecurityPermissionFlag.Assertion));
459 ps.CopyTo (pa, pa.Length);
463 public void CopyTo ()
465 IPermission [] pa = new IPermission [1];
466 SecurityPermission sp = new SecurityPermission (SecurityPermissionFlag.Assertion);
467 PermissionSet ps = new PermissionSet (PermissionState.None);
468 ps.AddPermission (sp);
470 AssertEquals ("CopyTo", pa [0].ToString (), sp.ToString ());
471 Assert ("Reference", Object.ReferenceEquals (pa [0], sp));
475 [ExpectedException (typeof (ArgumentNullException))]
476 public void FromXmlNull ()
478 PermissionSet ps = new PermissionSet (PermissionState.None);
483 [ExpectedException (typeof (ArgumentException))]
484 public void FromXmlInvalidPermission ()
486 PermissionSet ps = new PermissionSet (PermissionState.None);
487 SecurityElement se = ps.ToXml ();
488 // can't modify - so we create our own
489 SecurityElement se2 = new SecurityElement ("InvalidPermissionSet", se.Text);
490 se2.AddAttribute ("class", se.Attribute ("class"));
491 se2.AddAttribute ("version", se.Attribute ("version"));
496 // [ExpectedException (typeof (ArgumentException))]
497 public void FromXmlWrongVersion ()
499 PermissionSet ps = new PermissionSet (PermissionState.None);
500 SecurityElement se = ps.ToXml ();
501 // can't modify - so we create our own
502 SecurityElement se2 = new SecurityElement (se.Tag, se.Text);
503 se2.AddAttribute ("class", se.Attribute ("class"));
504 se2.AddAttribute ("version", "2");
506 // wow - here we accept a version 2 !!!
510 public void FromXmlEmpty ()
512 PermissionSet ps = new PermissionSet (PermissionState.None);
513 SecurityElement se = ps.ToXml ();
514 AssertNotNull ("Empty.ToXml()", se);
515 AssertEquals ("Empty.Count", 0, ps.Count);
517 PermissionSet ps2 = (PermissionSet) ps.Copy ();
519 Assert ("FromXml-Copy.IsUnrestricted", !ps2.IsUnrestricted ());
521 se.AddAttribute ("Unrestricted", "true");
523 Assert ("FromXml-Unrestricted.IsUnrestricted", ps2.IsUnrestricted ());
527 public void FromXmlOne ()
529 FileDialogPermission fdp = new FileDialogPermission (FileDialogPermissionAccess.Open);
530 PermissionSet ps1 = new PermissionSet (PermissionState.None);
531 ps1.AddPermission (fdp);
532 Assert ("ps1.IsEmpty", !ps1.IsEmpty ());
534 PermissionSet ps = new PermissionSet (ps1);
535 SecurityElement se = ps.ToXml ();
536 AssertNotNull ("One.ToXml()", se);
537 AssertEquals ("One.Count", 1, ps.Count);
539 PermissionSet ps2 = (PermissionSet) ps.Copy ();
541 Assert ("FromXml-Copy.IsUnrestricted", !ps2.IsUnrestricted ());
542 AssertEquals ("Copy.Count", 1, ps2.Count);
544 se.AddAttribute ("Unrestricted", "true");
546 Assert ("FromXml-Unrestricted.IsUnrestricted", ps2.IsUnrestricted ());
548 AssertEquals ("Unrestricted.Count", 0, ps2.Count);
550 // IPermission not shown in XML but still present in Count
551 AssertEquals ("Unrestricted.Count", 1, ps2.Count);
557 [ExpectedException (typeof (TypeLoadException))]
559 [ExpectedException (typeof (ArgumentException))]
561 public void FromXml_PermissionWithoutNamespace ()
563 SecurityElement child = new SecurityElement ("IPermission");
564 child.AddAttribute ("class", "EnvironmentPermission");
565 child.AddAttribute ("version", "1");
566 child.AddAttribute ("Read", "USERNAME");
568 SecurityElement se = new SecurityElement ("PermissionSet");
569 se.AddAttribute ("class", "PermissionSet");
570 se.AddAttribute ("version", "1");
573 PermissionSet ps = new PermissionSet (PermissionState.None);
579 [ExpectedException (typeof (TypeLoadException))]
581 [ExpectedException (typeof (ArgumentException))]
583 public void FromXml_PermissionOutsideCorlib ()
585 SecurityElement child = new SecurityElement ("IPermission");
586 child.AddAttribute ("class", "PrintingPermission"); // System.Drawing
587 child.AddAttribute ("version", "1");
588 child.AddAttribute ("Level", "DefaultPrinting");
590 SecurityElement se = new SecurityElement ("PermissionSet");
591 se.AddAttribute ("class", "PermissionSet");
592 se.AddAttribute ("version", "1");
595 PermissionSet ps = new PermissionSet (PermissionState.None);
600 [ExpectedException (typeof (ArgumentException))]
601 public void FromXml_WithPermissionWithoutClass ()
603 SecurityElement child = new SecurityElement ("IPermission");
604 child.AddAttribute ("version", "1");
606 SecurityElement se = new SecurityElement ("PermissionSet");
607 se.AddAttribute ("class", "PermissionSet");
608 se.AddAttribute ("version", "1");
611 PermissionSet ps = new PermissionSet (PermissionState.None);
616 public void GetEnumerator ()
618 PermissionSet ps = new PermissionSet (PermissionState.None);
619 SecurityPermission sp = new SecurityPermission (SecurityPermissionFlag.Assertion);
620 ps.AddPermission (sp);
621 IEnumerator e = ps.GetEnumerator ();
622 AssertNotNull ("GetEnumerator", e);
624 while (e.MoveNext ()) {
625 Assert ("SecurityPermission", e.Current is SecurityPermission);
628 AssertEquals ("Count", 1, i);
632 public void GetHashCode_ ()
634 PermissionSet ps = new PermissionSet (PermissionState.None);
635 AssertEquals ("Empty", 0, ps.GetHashCode ());
636 SecurityPermission sp = new SecurityPermission (SecurityPermissionFlag.Assertion);
637 ps.AddPermission (sp);
638 Assert ("SecurityPermission", ps.GetHashCode () != 0);
639 PermissionSet copy = ps.Copy ();
640 Assert ("Copy", ps.GetHashCode () != copy.GetHashCode ());
644 public void GetPermission_Null ()
646 PermissionSet ps = new PermissionSet (PermissionState.None);
647 AssertNull ("Empty", ps.GetPermission (null));
651 public void GetPermission_None ()
653 PermissionSet ps = new PermissionSet (PermissionState.None);
654 AssertNull ("Empty", ps.GetPermission (typeof (SecurityPermission)));
658 public void GetPermission_Unrestricted ()
660 PermissionSet ps = new PermissionSet (PermissionState.Unrestricted);
661 AssertNull ("Empty", ps.GetPermission (typeof (SecurityPermission)));
665 public void GetPermission_Subclass ()
667 IsolatedStorageFilePermission isfp = new IsolatedStorageFilePermission (PermissionState.Unrestricted);
668 PermissionSet ps = new PermissionSet (PermissionState.None);
669 ps.AddPermission (isfp);
670 AssertNull ("Subclass", ps.GetPermission (typeof (IsolatedStoragePermission)));
673 private void Compare (string msg, PermissionSet ps, bool unrestricted, int count)
675 AssertNotNull (msg + "-NullCheck", ps);
676 Assert (msg + "-State", (ps.IsUnrestricted () == unrestricted));
677 AssertEquals (msg + "-Count", count, ps.Count);
681 public void Intersect_Empty ()
683 PermissionSet ps1 = new PermissionSet (PermissionState.None);
684 PermissionSet ps2 = new PermissionSet (PermissionState.None);
685 AssertNull ("None N null", ps1.Intersect (null));
686 AssertNull ("None1 N None2", ps1.Intersect (ps2));
687 AssertNull ("None2 N None1", ps2.Intersect (ps1));
689 PermissionSet ups1 = new PermissionSet (PermissionState.Unrestricted);
690 AssertNull ("None1 N Unrestricted", ps1.Intersect (ups1));
691 AssertNull ("Unrestricted N None1", ups1.Intersect (ps1));
692 AssertNull ("Unrestricted N Null", ups1.Intersect (null));
694 PermissionSet ups2 = new PermissionSet (PermissionState.Unrestricted);
695 Compare ("ups1 N ups2", ups1.Intersect (ups2), true, 0);
696 Compare ("ups2 N ups1", ups2.Intersect (ups1), true, 0);
700 public void Intersect_OnePermission ()
702 SecurityPermission sp = new SecurityPermission (SecurityPermissionFlag.Assertion);
703 PermissionSet ps1 = new PermissionSet (PermissionState.None);
704 ps1.AddPermission (sp);
705 PermissionSet ps2 = new PermissionSet (PermissionState.None);
706 AssertNull ("PS1 N null", ps1.Intersect (null));
707 AssertNull ("PS1 N None", ps1.Intersect (ps2));
708 AssertNull ("None N PS1", ps2.Intersect (ps1));
710 PermissionSet ps3 = ps1.Copy ();
711 Compare ("PS1 N PS3", ps1.Intersect (ps3), false, 1);
712 Compare ("PS3 N PS1", ps3.Intersect (ps1), false, 1);
714 PermissionSet ups1 = new PermissionSet (PermissionState.Unrestricted);
715 Compare ("PS1 N Unrestricted", ps1.Intersect (ups1), false, 1);
716 Compare ("Unrestricted N PS1", ups1.Intersect (ps1), false, 1);
720 public void Intersect_OneNonIUnrestrictedPermission ()
722 ZoneIdentityPermission zip = new ZoneIdentityPermission (SecurityZone.MyComputer);
723 PermissionSet ps1 = new PermissionSet (PermissionState.None);
724 ps1.AddPermission (zip);
725 PermissionSet ps2 = new PermissionSet (PermissionState.None);
726 AssertNull ("PS1 N null", ps1.Intersect (null));
727 AssertNull ("PS1 N None", ps1.Intersect (ps2));
728 AssertNull ("None N PS1", ps2.Intersect (ps1));
730 PermissionSet ps3 = ps1.Copy ();
731 Compare ("PS1 N PS3", ps1.Intersect (ps3), false, 1);
732 Compare ("PS3 N PS1", ps3.Intersect (ps1), false, 1);
734 PermissionSet ups1 = new PermissionSet (PermissionState.Unrestricted);
735 ups1.AddPermission (zip);
736 Compare ("PS1 N Unrestricted", ps1.Intersect (ups1), false, 1);
737 Compare ("Unrestricted N PS1", ups1.Intersect (ps1), false, 1);
739 PermissionSet ups2 = new PermissionSet (PermissionState.Unrestricted);
740 Compare ("UPS1 N UPS2", ups1.Intersect (ups2), true, 0);
741 Compare ("UPS2 N UPS1", ups2.Intersect (ups1), true, 0);
742 ups2.AddPermission (zip);
744 // Identity permissions aren't added to unrestricted permission sets in 2.0
745 Compare ("UPS1 N UPS2+ZIP", ups1.Intersect (ups2), true, 0);
746 Compare ("UPS2+ZIP N UPS1", ups2.Intersect (ups1), true, 0);
748 Compare ("UPS1 N UPS2+ZIP", ups1.Intersect (ups2), true, 1);
749 Compare ("UPS2+ZIP N UPS1", ups2.Intersect (ups1), true, 1);
754 public void IsEmpty_None ()
756 PermissionSet ps = new PermissionSet (PermissionState.None);
757 Assert ("Empty.IsEmpty", ps.IsEmpty ());
758 ps.AddPermission (new ZoneIdentityPermission (SecurityZone.NoZone));
759 AssertEquals ("Count==1", 1, ps.Count);
760 Assert ("Zip.IsEmpty", ps.IsEmpty ()); // yes empty!
764 public void IsEmpty_Unrestricted ()
766 PermissionSet ps = new PermissionSet (PermissionState.Unrestricted);
767 Assert ("Unrestricted.IsEmpty", !ps.IsEmpty ());
768 ps.AddPermission (new ZoneIdentityPermission (SecurityZone.NoZone));
770 // Identity permissions aren't added to unrestricted permission sets in 2.0
771 AssertEquals ("Count==0", 0, ps.Count);
773 AssertEquals ("Count==1", 1, ps.Count);
775 Assert ("Zip.IsEmpty", !ps.IsEmpty ()); // yes empty!
779 public void IsSubset_Empty ()
781 PermissionSet ps1 = new PermissionSet (PermissionState.None);
782 PermissionSet ps2 = new PermissionSet (PermissionState.None);
783 Assert ("None.IsSubsetOf(null)", ps1.IsSubsetOf (null));
784 Assert ("None1.IsSubsetOf(None2)", ps1.IsSubsetOf (ps2));
785 Assert ("None2.IsSubsetOf(None1)", ps2.IsSubsetOf (ps1));
787 PermissionSet ups1 = new PermissionSet (PermissionState.Unrestricted);
788 Assert ("None1.IsSubsetOf(Unrestricted)", ps1.IsSubsetOf (ups1));
789 Assert ("Unrestricted.IsSubsetOf(None1)", !ups1.IsSubsetOf (ps1));
790 Assert ("Unrestricted.IsSubsetOf(Null)", !ups1.IsSubsetOf (null));
792 PermissionSet ups2 = new PermissionSet (PermissionState.Unrestricted);
793 Assert ("ups1IsSubsetOf(ups2)", ups1.IsSubsetOf (ups2));
794 Assert ("ups2.IsSubsetOf(ups1)", ups2.IsSubsetOf (ups1));
798 public void IsSubset_OnePermission ()
800 SecurityPermission sp = new SecurityPermission (SecurityPermissionFlag.Assertion);
801 PermissionSet ps1 = new PermissionSet (PermissionState.None);
802 ps1.AddPermission (sp);
803 PermissionSet ps2 = new PermissionSet (PermissionState.None);
804 Assert ("PS1.IsSubset(null)", !ps1.IsSubsetOf (null));
805 Assert ("PS1.IsSubset(None)", !ps1.IsSubsetOf (ps2));
806 Assert ("None.IsSubset(PS1)", ps2.IsSubsetOf (ps1));
808 PermissionSet ps3 = ps1.Copy ();
809 Assert ("PS1.IsSubset(PS3)", ps1.IsSubsetOf (ps3));
810 Assert ("PS3.IsSubset(PS1)", ps3.IsSubsetOf (ps1));
812 PermissionSet ups1 = new PermissionSet (PermissionState.Unrestricted);
813 Assert ("PS1.IsSubset(Unrestricted)", ps1.IsSubsetOf (ups1));
814 Assert ("Unrestricted.IsSubset(PS1)", !ups1.IsSubsetOf (ps1));
818 public void IsSubset_OneNonIUnrestrictedPermission ()
820 ZoneIdentityPermission zip = new ZoneIdentityPermission (SecurityZone.MyComputer);
821 PermissionSet ps1 = new PermissionSet (PermissionState.None);
822 ps1.AddPermission (zip);
823 PermissionSet ps2 = new PermissionSet (PermissionState.None);
824 Assert ("PS1.IsSubset(null)", !ps1.IsSubsetOf (null));
825 Assert ("PS1.IsSubset(None)", !ps1.IsSubsetOf (ps2));
826 Assert ("None.IsSubset(PS1)", ps2.IsSubsetOf (ps1));
828 PermissionSet ps3 = ps1.Copy ();
829 Assert ("PS1.IsSubset(PS3)", ps1.IsSubsetOf (ps3));
830 Assert ("PS3.IsSubset(PS1)", ps3.IsSubsetOf (ps1));
832 PermissionSet ups1 = new PermissionSet (PermissionState.Unrestricted);
833 ups1.AddPermission (zip);
834 Assert ("PS1.IsSubset(Unrestricted)", ps1.IsSubsetOf (ups1));
835 Assert ("Unrestricted.IsSubset(PS1)", !ups1.IsSubsetOf (ps1));
837 PermissionSet ups2 = new PermissionSet (PermissionState.Unrestricted);
839 // as ZoneIdentityPermission isn't added UPS1Z == UPS2
840 Assert ("UPS1Z.IsSubset(UPS2)", ups1.IsSubsetOf (ups2));
842 Assert ("UPS1Z.IsSubset(UPS2)", !ups1.IsSubsetOf (ups2));
844 Assert ("UPS2.IsSubset(UPS1Z)", ups2.IsSubsetOf (ups1));
845 ups2.AddPermission (zip);
846 Assert ("UPS1Z.IsSubset(UPS2Z)", ups1.IsSubsetOf (ups2));
847 Assert ("UPS2Z.IsSubset(UPS1Z)", ups2.IsSubsetOf (ups1));
851 public void IsSubset_NonCasPermission ()
\r
853 PermissionSet ps1 = new PermissionSet (PermissionState.None);
\r
854 ps1.AddPermission (new PrincipalPermission ("name", "role"));
\r
855 PermissionSet ps2 = new PermissionSet (PermissionState.None);
\r
856 Assert ("PS1.IsSubset(null)", !ps1.IsSubsetOf (null));
\r
857 Assert ("PS1.IsSubset(None)", !ps1.IsSubsetOf (ps2));
\r
858 Assert ("None.IsSubset(PS1)", ps2.IsSubsetOf (ps1));
\r
860 PermissionSet ps3 = ps1.Copy ();
\r
861 Assert ("PS1.IsSubset(PS3)", ps1.IsSubsetOf (ps3));
\r
862 Assert ("PS3.IsSubset(PS1)", ps3.IsSubsetOf (ps1));
\r
864 PermissionSet ups1 = new PermissionSet (PermissionState.Unrestricted);
\r
866 Assert ("PS1.IsSubset(Unrestricted)", ps1.IsSubsetOf (ups1));
\r
868 Assert ("PS1.IsSubset(Unrestricted)", !ps1.IsSubsetOf (ups1));
\r
870 Assert ("Unrestricted.IsSubset(PS1)", !ups1.IsSubsetOf (ps1));
\r
874 public void IsSubset_NonCasPermission_None ()
\r
876 PermissionSet ps1 = new PermissionSet (PermissionState.None);
\r
877 ps1.AddPermission (new PrincipalPermission (PermissionState.None));
\r
878 PermissionSet ps2 = new PermissionSet (PermissionState.None);
\r
879 Assert ("PS1.IsSubset(null)", ps1.IsSubsetOf (null));
\r
880 Assert ("PS1.IsSubset(None)", ps1.IsSubsetOf (ps2));
\r
881 Assert ("None.IsSubset(PS1)", ps2.IsSubsetOf (ps1));
\r
883 PermissionSet ps3 = ps1.Copy ();
\r
884 Assert ("PS1.IsSubset(PS3)", ps1.IsSubsetOf (ps3));
\r
885 Assert ("PS3.IsSubset(PS1)", ps3.IsSubsetOf (ps1));
\r
887 PermissionSet ups1 = new PermissionSet (PermissionState.Unrestricted);
\r
888 Assert ("PS1.IsSubset(Unrestricted)", ps1.IsSubsetOf (ups1));
\r
889 Assert ("Unrestricted.IsSubset(PS1)", !ups1.IsSubsetOf (ps1));
\r
893 public void IsSubset_NonCasPermission_Unrestricted ()
\r
895 PermissionSet ps1 = new PermissionSet (PermissionState.None);
\r
896 ps1.AddPermission (new PrincipalPermission (PermissionState.Unrestricted));
\r
897 PermissionSet ps2 = new PermissionSet (PermissionState.None);
\r
898 Assert ("PS1.IsSubset(null)", !ps1.IsSubsetOf (null));
\r
899 Assert ("PS1.IsSubset(None)", !ps1.IsSubsetOf (ps2));
\r
900 Assert ("None.IsSubset(PS1)", ps2.IsSubsetOf (ps1));
\r
902 PermissionSet ps3 = ps1.Copy ();
\r
903 Assert ("PS1.IsSubset(PS3)", ps1.IsSubsetOf (ps3));
\r
904 Assert ("PS3.IsSubset(PS1)", ps3.IsSubsetOf (ps1));
\r
906 PermissionSet ups1 = new PermissionSet (PermissionState.Unrestricted);
\r
908 Assert ("PS1.IsSubset(Unrestricted)", ps1.IsSubsetOf (ups1));
\r
910 Assert ("PS1.IsSubset(Unrestricted)", !ps1.IsSubsetOf (ups1));
\r
912 Assert ("Unrestricted.IsSubset(PS1)", !ups1.IsSubsetOf (ps1));
\r
916 public void RemovePermission_Null ()
918 PermissionSet ps = new PermissionSet (PermissionState.None);
919 AssertNull (ps.RemovePermission (null));
923 public void RemovePermission_None ()
925 PermissionSet ps = new PermissionSet (PermissionState.None);
926 AssertNull ("Empty", ps.RemovePermission (typeof (SecurityPermission)));
927 SecurityPermission sp = new SecurityPermission (SecurityPermissionFlag.Assertion);
928 ps.AddPermission (sp);
929 SecurityPermission removed = (SecurityPermission) ps.RemovePermission (typeof (SecurityPermission));
930 AssertNotNull ("SecurityPermission", removed);
931 AssertEquals ("Flags", sp.Flags, removed.Flags);
932 AssertNull ("Empty-Again", ps.RemovePermission (typeof (SecurityPermission)));
936 public void RemovePermission_Unrestricted ()
938 PermissionSet ps = new PermissionSet (PermissionState.Unrestricted);
939 AssertNull ("Empty", ps.RemovePermission (typeof (SecurityPermission)));
940 SecurityPermission sp = new SecurityPermission (SecurityPermissionFlag.Assertion);
941 ps.AddPermission (sp);
942 AssertNull ("SecurityPermissionn", ps.RemovePermission (typeof (SecurityPermission)));
943 ZoneIdentityPermission zip = new ZoneIdentityPermission (SecurityZone.MyComputer);
944 ps.AddPermission (zip);
945 ZoneIdentityPermission removed = (ZoneIdentityPermission)ps.RemovePermission (typeof (ZoneIdentityPermission));
947 // identity permissions aren't added to unrestricted permission sets
948 // so they cannot be removed later (hence the null)
949 AssertNull ("ZoneIdentityPermission", removed);
951 AssertNotNull ("ZoneIdentityPermission", removed);
956 public void SetPermission_Null ()
958 PermissionSet ps = new PermissionSet (PermissionState.None);
959 AssertNull (ps.SetPermission (null));
963 public void SetPermission_None ()
965 PermissionSet ps = new PermissionSet (PermissionState.None);
966 AssertEquals ("Empty", 0, ps.Count);
967 Assert ("State-None", !ps.IsUnrestricted ());
969 SecurityPermission sp = new SecurityPermission (PermissionState.Unrestricted);
970 SecurityPermission result = (SecurityPermission)ps.SetPermission (sp);
971 AssertEquals ("SecurityPermission", 1, ps.Count);
972 AssertEquals ("Flags", SecurityPermissionFlag.AllFlags, result.Flags);
973 Assert ("State-None-2", !ps.IsUnrestricted ());
975 sp = new SecurityPermission (SecurityPermissionFlag.ControlAppDomain);
976 result = (SecurityPermission)ps.SetPermission (sp);
977 AssertEquals ("SecurityPermission-2", 1, ps.Count);
978 AssertEquals ("Flags", SecurityPermissionFlag.ControlAppDomain, result.Flags);
980 ZoneIdentityPermission zip = new ZoneIdentityPermission (SecurityZone.MyComputer);
981 ZoneIdentityPermission zipr = (ZoneIdentityPermission) ps.SetPermission (zip);
982 AssertEquals ("ZoneIdentityPermission", 2, ps.Count);
983 AssertEquals ("SecurityZone", SecurityZone.MyComputer, zipr.SecurityZone);
985 zip = new ZoneIdentityPermission (SecurityZone.Intranet);
986 zipr = (ZoneIdentityPermission)ps.SetPermission (zip);
987 AssertEquals ("ZoneIdentityPermission", 2, ps.Count);
988 AssertEquals ("SecurityZone", SecurityZone.Intranet, zipr.SecurityZone);
992 public void SetPermission_Unrestricted ()
994 SecurityPermission sp = new SecurityPermission (PermissionState.Unrestricted);
995 PermissionSet ps = new PermissionSet (PermissionState.Unrestricted);
996 AssertEquals ("Empty", 0, ps.Count);
997 Assert ("State-Unrestricted", ps.IsUnrestricted ());
999 ZoneIdentityPermission zip = new ZoneIdentityPermission (SecurityZone.MyComputer);
1000 ZoneIdentityPermission zipr = (ZoneIdentityPermission)ps.SetPermission (zip);
1001 AssertEquals ("ZoneIdentityPermission", 1, ps.Count);
1002 AssertEquals ("SecurityZone", SecurityZone.MyComputer, zipr.SecurityZone);
1004 // Adding a non unrestricted identity permission now results in
1005 // a permission set loosing it's unrestricted status
1006 Assert ("State-Unrestricted-2", !ps.IsUnrestricted ());
1008 Assert ("State-Unrestricted-2", ps.IsUnrestricted ());
1010 zip = new ZoneIdentityPermission (SecurityZone.Intranet);
1011 zipr = (ZoneIdentityPermission)ps.SetPermission (zip);
1012 AssertEquals ("ZoneIdentityPermission-2", 1, ps.Count);
1013 AssertEquals ("SecurityZone-2", SecurityZone.Intranet, zipr.SecurityZone);
1015 SecurityPermission result = (SecurityPermission)ps.SetPermission (sp);
1016 AssertEquals ("SecurityPermission", 2, ps.Count);
1017 AssertEquals ("Flags", SecurityPermissionFlag.AllFlags, result.Flags);
1018 Assert ("State-None", !ps.IsUnrestricted ());
1020 sp = new SecurityPermission (SecurityPermissionFlag.ControlAppDomain);
1021 result = (SecurityPermission)ps.SetPermission (sp);
1022 AssertEquals ("SecurityPermission-2", 2, ps.Count);
1023 AssertEquals ("Flags-2", SecurityPermissionFlag.ControlAppDomain, result.Flags);
1027 public void ToXmlNone ()
1029 PermissionSet ps = new PermissionSet (PermissionState.None);
1030 SecurityElement se = ps.ToXml ();
1031 Assert ("None.ToString().StartsWith", ps.ToString().StartsWith ("<PermissionSet"));
1032 AssertEquals ("None.class", "System.Security.PermissionSet", (se.Attributes ["class"] as string));
1033 AssertEquals ("None.version", "1", (se.Attributes ["version"] as string));
1034 AssertNull ("None.Unrestricted", (se.Attributes ["Unrestricted"] as string));
1038 public void ToXmlUnrestricted ()
1040 PermissionSet ps = new PermissionSet (PermissionState.Unrestricted);
1041 SecurityElement se = ps.ToXml ();
1042 Assert ("Unrestricted.ToString().StartsWith", ps.ToString().StartsWith ("<PermissionSet"));
1043 AssertEquals ("Unrestricted.class", "System.Security.PermissionSet", (se.Attributes ["class"] as string));
1044 AssertEquals ("Unrestricted.version", "1", (se.Attributes ["version"] as string));
1045 AssertEquals ("Unrestricted.Unrestricted", "true", (se.Attributes ["Unrestricted"] as string));
1049 public void Union_Empty ()
1051 PermissionSet ps1 = new PermissionSet (PermissionState.None);
1052 PermissionSet ps2 = new PermissionSet (PermissionState.None);
1053 Compare ("None U null", ps1.Union (null), false, 0);
1054 Compare ("None1 U None2", ps1.Union (ps2), false, 0);
1055 Compare ("None2 U None1", ps2.Union (ps1), false, 0);
1057 PermissionSet ups1 = new PermissionSet (PermissionState.Unrestricted);
1058 Compare ("None1 U Unrestricted", ps1.Union (ups1), true, 0);
1059 Compare ("Unrestricted U None1", ups1.Union (ps1), true, 0);
1060 Compare ("Unrestricted U Null", ups1.Union (null), true, 0);
1062 PermissionSet ups2 = new PermissionSet (PermissionState.Unrestricted);
1063 Compare ("ups1 U ups2", ups1.Union (ups2), true, 0);
1064 Compare ("ups2 U ups1", ups2.Union (ups1), true, 0);
1068 public void Union_OnePermission ()
1070 SecurityPermission sp = new SecurityPermission (SecurityPermissionFlag.Assertion);
1071 PermissionSet ps1 = new PermissionSet (PermissionState.None);
1072 ps1.AddPermission (sp);
1073 PermissionSet ps2 = new PermissionSet (PermissionState.None);
1074 Compare ("PS1 U null", ps1.Union (null), false, 1);
1075 Compare ("PS1 U None", ps1.Union (ps2), false, 1);
1076 Compare ("None U PS1", ps2.Union (ps1), false, 1);
1078 PermissionSet ps3 = ps1.Copy ();
1079 Compare ("PS1 U PS3", ps1.Union (ps3), false, 1);
1080 Compare ("PS3 U PS1", ps3.Union (ps1), false, 1);
1082 PermissionSet ups1 = new PermissionSet (PermissionState.Unrestricted);
1083 Compare ("PS1 U Unrestricted", ps1.Union (ups1), true, 0);
1084 Compare ("Unrestricted U PS1", ups1.Union (ps1), true, 0);
1088 public void Union_OneNonIUnrestrictedPermission ()
1090 ZoneIdentityPermission zip = new ZoneIdentityPermission (SecurityZone.MyComputer);
1091 PermissionSet ps1 = new PermissionSet (PermissionState.None);
1092 ps1.AddPermission (zip);
1093 PermissionSet ps2 = new PermissionSet (PermissionState.None);
1094 Compare ("PS1 U null", ps1.Union (null), false, 1);
1095 Compare ("PS1 U None", ps1.Union (ps2), false, 1);
1096 Compare ("None U PS1", ps2.Union (ps1), false, 1);
1098 PermissionSet ps3 = ps1.Copy ();
1099 Compare ("PS1 U PS3", ps1.Union (ps3), false, 1);
1100 Compare ("PS3 U PS1", ps3.Union (ps1), false, 1);
1102 PermissionSet ups1 = new PermissionSet (PermissionState.Unrestricted);
1103 ups1.AddPermission (zip);
1105 // Identity permissions aren't added to unrestricted permission sets in 2.0
1106 Compare ("PS1 U Unrestricted", ps1.Union (ups1), true, 0);
1107 Compare ("Unrestricted U PS1", ups1.Union (ps1), true, 0);
1108 PermissionSet ups2 = new PermissionSet (PermissionState.Unrestricted);
1109 Compare ("UPS1 U UPS2", ups1.Union (ups1), true, 0);
1110 Compare ("UPS2 U UPS1", ups2.Union (ups1), true, 0);
1111 ups2.AddPermission (zip);
1112 Compare ("UPS1 U UPS2+ZIP", ups1.Union (ups2), true, 0);
1113 Compare ("UPS2+ZIP U UPS1", ups2.Union (ups1), true, 0);
1115 Compare ("PS1 U Unrestricted", ps1.Union (ups1), true, 1);
1116 Compare ("Unrestricted U PS1", ups1.Union (ps1), true, 1);
1117 PermissionSet ups2 = new PermissionSet (PermissionState.Unrestricted);
1118 Compare ("UPS1 U UPS2", ups1.Union (ups1), true, 1);
1119 Compare ("UPS2 U UPS1", ups2.Union (ups1), true, 1);
1120 ups2.AddPermission (zip);
1121 Compare ("UPS1 U UPS2+ZIP", ups1.Union (ups2), true, 1);
1122 Compare ("UPS2+ZIP U UPS1", ups2.Union (ups1), true, 1);
1127 [Category ("NotWorking")] // requires imperative stack modifiers
1128 [ExpectedException (typeof (ExecutionEngineException))]
1129 public void RevertAssert_WithoutAssertion ()
1131 PermissionSet.RevertAssert ();
1135 [Category ("NotWorking")] // requires imperative stack modifiers
1136 public void RevertAssert_WithAssertion ()
1138 PermissionSet ups = new PermissionSet (PermissionState.Unrestricted);
1140 PermissionSet.RevertAssert ();
1144 public void Assert_NonCasPermission ()
1146 PermissionSet ps = new PermissionSet (PermissionState.None);
1147 ps.AddPermission (new PrincipalPermission (PermissionState.None));
1148 Assert ("ContainsNonCodeAccessPermissions", ps.ContainsNonCodeAccessPermissions ());
1149 AssertEquals ("Count", 1, ps.Count);
1151 // it's simply ignored
1155 public void Deny_NonCasPermission ()
1157 PermissionSet ps = new PermissionSet (PermissionState.None);
1158 ps.AddPermission (new PrincipalPermission (PermissionState.None));
1159 Assert ("ContainsNonCodeAccessPermissions", ps.ContainsNonCodeAccessPermissions ());
1160 AssertEquals ("Count", 1, ps.Count);
1162 // it's simply ignored
1166 public void PermitOnly_NonCasPermission ()
1168 PermissionSet ps = new PermissionSet (PermissionState.None);
1169 ps.AddPermission (new PrincipalPermission (PermissionState.None));
1170 Assert ("ContainsNonCodeAccessPermissions", ps.ContainsNonCodeAccessPermissions ());
1171 AssertEquals ("Count", 1, ps.Count);
1173 // it's simply ignored
1176 // note: this only ensure that the ECMA key support unification (more test required, outside corlib, for other keys, like MS final).
1177 private const string PermissionPattern = "<PermissionSet class=\"System.Security.PermissionSet\" version=\"1\"><IPermission class=\"System.Security.Permissions.FileDialogPermission, mscorlib, Version={0}, Culture=neutral, PublicKeyToken=b77a5c561934e089\" version=\"1\" Access=\"Open\"/></PermissionSet>";
1178 private const string fx10version = "1.0.3300.0";
1179 private const string fx11version = "1.0.5000.0";
1180 private const string fx20version = "2.0.0.0";
1182 private void Unification (string xml)
1184 PermissionSetAttribute psa = new PermissionSetAttribute (SecurityAction.Assert);
1186 string pset = psa.CreatePermissionSet ().ToString ();
1187 string currentVersion = typeof (string).Assembly.GetName ().Version.ToString ();
1188 Assert (currentVersion, pset.IndexOf (currentVersion) > 0);
1192 public void Unification_FromFx10 ()
1194 Unification (String.Format (PermissionPattern, fx10version));
1198 public void Unification_FromFx11 ()
1200 Unification (String.Format (PermissionPattern, fx11version));
1204 public void Unification_FromFx20 ()
1206 Unification (String.Format (PermissionPattern, fx20version));
1210 public void Unification_FromFx99 ()
1212 Unification (String.Format (PermissionPattern, "9.99.999.9999"));