1 // 2 // PolicyStatementTest.cs - NUnit Test Cases for PolicyStatement 3 // 4 // Author: 5 // Sebastien Pouliot <sebastien@ximian.com> 6 // 7 // Copyright (C) 2005 Novell, Inc (http://www.novell.com) 8 // 9 // Permission is hereby granted, free of charge, to any person obtaining 10 // a copy of this software and associated documentation files (the 11 // "Software"), to deal in the Software without restriction, including 12 // without limitation the rights to use, copy, modify, merge, publish, 13 // distribute, sublicense, and/or sell copies of the Software, and to 14 // permit persons to whom the Software is furnished to do so, subject to 15 // the following conditions: 16 // 17 // The above copyright notice and this permission notice shall be 18 // included in all copies or substantial portions of the Software. 19 // 20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 27 // 28 29 using NUnit.Framework; 30 using System; 31 using System.IO; 32 using System.Security; 33 using System.Security.Permissions; 34 using System.Security.Policy; 35 36 namespace MonoTests.System.Security.Policy { 37 38 [TestFixture] 39 public class PolicyStatementTest { 40 41 static PermissionSet Empty = new PermissionSet (PermissionState.None); 42 static PermissionSet Unrestricted = new PermissionSet (PermissionState.Unrestricted); 43 44 [Test] Constructor_PermissionSet_Null()45 public void Constructor_PermissionSet_Null () 46 { 47 PolicyStatement ps = new PolicyStatement (null); 48 Assert.AreEqual (PolicyStatementAttribute.Nothing, ps.Attributes, "Attributes"); 49 Assert.AreEqual (String.Empty, ps.AttributeString, "AttributeString"); 50 Assert.AreEqual (Empty.ToString (), ps.PermissionSet.ToString (), "PermissionSet"); 51 Assert.AreEqual (ps.ToXml ().ToString (), ps.Copy ().ToXml ().ToString (), "Copy"); 52 } 53 54 [Test] Constructor_PermissionSet_None()55 public void Constructor_PermissionSet_None () 56 { 57 PermissionSet pset = new PermissionSet (PermissionState.None); 58 PolicyStatement ps = new PolicyStatement (pset); 59 Assert.AreEqual (PolicyStatementAttribute.Nothing, ps.Attributes, "Attributes"); 60 Assert.AreEqual (String.Empty, ps.AttributeString, "AttributeString"); 61 Assert.AreEqual (Empty.ToString (), ps.PermissionSet.ToString (), "PermissionSet"); 62 Assert.AreEqual (ps.ToXml ().ToString (), ps.Copy ().ToXml ().ToString (), "Copy"); 63 } 64 65 [Test] Constructor_PermissionSet_Unrestricted()66 public void Constructor_PermissionSet_Unrestricted () 67 { 68 PermissionSet pset = new PermissionSet (PermissionState.Unrestricted); 69 PolicyStatement ps = new PolicyStatement (pset); 70 Assert.AreEqual (PolicyStatementAttribute.Nothing, ps.Attributes, "Attributes"); 71 Assert.AreEqual (String.Empty, ps.AttributeString, "AttributeString"); 72 Assert.AreEqual (Unrestricted.ToString (), ps.PermissionSet.ToString (), "PermissionSet"); 73 Assert.AreEqual (ps.ToXml ().ToString (), ps.Copy ().ToXml ().ToString (), "Copy"); 74 } 75 76 [Test] Constructor_PermissionSetPolicyStatementAttribute_Null()77 public void Constructor_PermissionSetPolicyStatementAttribute_Null () 78 { 79 PolicyStatement ps = new PolicyStatement (null, PolicyStatementAttribute.All); 80 Assert.AreEqual (PolicyStatementAttribute.All, ps.Attributes, "Attributes"); 81 Assert.AreEqual ("Exclusive LevelFinal", ps.AttributeString, "AttributeString"); 82 Assert.AreEqual (Empty.ToString (), ps.PermissionSet.ToString (), "PermissionSet"); 83 Assert.AreEqual (ps.ToXml ().ToString (), ps.Copy ().ToXml ().ToString (), "Copy"); 84 } 85 86 [Test] Constructor_Copy()87 public void Constructor_Copy () 88 { 89 PermissionSet original = new PermissionSet (PermissionState.None); 90 PolicyStatement ps = new PolicyStatement (original, PolicyStatementAttribute.All); 91 Assert.AreEqual (Empty.ToString (), ps.PermissionSet.ToString (), "PermissionSet"); 92 Assert.AreEqual (ps.ToXml ().ToString (), ps.Copy ().ToXml ().ToString (), "Copy"); 93 94 original.AddPermission (new SecurityPermission (SecurityPermissionFlag.AllFlags)); 95 Assert.AreEqual (Empty.ToString (), ps.PermissionSet.ToString (), "PermissionSet"); 96 Assert.AreEqual (ps.ToXml ().ToString (), ps.Copy ().ToXml ().ToString (), "Copy"); 97 } 98 99 [Test] 100 [ExpectedException (typeof (ArgumentException))] Attribute_Invalid()101 public void Attribute_Invalid () 102 { 103 PolicyStatement ps = new PolicyStatement (null); 104 ps.Attributes = (PolicyStatementAttribute)Int32.MinValue; 105 } 106 107 [Test] AttributeString()108 public void AttributeString () 109 { 110 PolicyStatement ps = new PolicyStatement (null); 111 Assert.AreEqual (String.Empty, ps.AttributeString, "Nothing"); 112 ps.Attributes = PolicyStatementAttribute.LevelFinal; 113 Assert.AreEqual ("LevelFinal", ps.AttributeString, "LevelFinal"); 114 ps.Attributes = PolicyStatementAttribute.Exclusive; 115 Assert.AreEqual ("Exclusive", ps.AttributeString, "Exclusive"); 116 ps.Attributes = PolicyStatementAttribute.All; 117 Assert.AreEqual ("Exclusive LevelFinal", ps.AttributeString, "All"); 118 } 119 120 [Test] AddToPermissionSet()121 public void AddToPermissionSet () 122 { 123 PolicyStatement ps = new PolicyStatement (null); 124 Assert.AreEqual (Empty.ToString (), ps.PermissionSet.ToString (), "Empty"); 125 126 SecurityPermission sp = new SecurityPermission (SecurityPermissionFlag.Execution); 127 IPermission p = ps.PermissionSet.AddPermission (sp); 128 Assert.AreEqual (sp.ToXml ().ToString (), p.ToXml ().ToString (), "AddPermission"); 129 130 // but nothing was added 131 Assert.AreEqual (Empty.ToString (), ps.PermissionSet.ToString (), "Still Empty"); 132 // and (strangely) it's not considered a read-only permission set 133 // as this property is always false for PermissionSet 134 Assert.IsFalse (ps.PermissionSet.IsReadOnly, "IsReadOnly"); 135 } 136 137 [Test] SetPermissionSet()138 public void SetPermissionSet () 139 { 140 PolicyStatement ps = new PolicyStatement (null); 141 Assert.AreEqual (Empty.ToString (), ps.PermissionSet.ToString (), "Empty"); 142 ps.PermissionSet = new PermissionSet (PermissionState.Unrestricted); 143 Assert.AreEqual (Unrestricted.ToString (), ps.PermissionSet.ToString (), "Unrestricted"); 144 } 145 146 [Test] 147 [ExpectedException (typeof (ArgumentNullException))] FromXml_Null()148 public void FromXml_Null () 149 { 150 PolicyStatement ps = new PolicyStatement (null); 151 ps.FromXml (null); 152 } 153 154 [Test] 155 #if MOBILE 156 [Ignore] 157 #endif 158 [ExpectedException (typeof (ArgumentNullException))] FromXml_SecurityElementNull()159 public void FromXml_SecurityElementNull () 160 { 161 PolicyStatement ps = new PolicyStatement (null); 162 ps.FromXml (null, PolicyLevel.CreateAppDomainLevel ()); 163 } 164 165 [Test] 166 [ExpectedException (typeof (ArgumentException))] FromXml_BadSecurityElement()167 public void FromXml_BadSecurityElement () 168 { 169 PolicyStatement ps = new PolicyStatement (null); 170 ps.FromXml (new SecurityElement ("Bad")); 171 } 172 173 [Test] ToFromXml_PolicyLevelNull()174 public void ToFromXml_PolicyLevelNull () 175 { 176 PolicyStatement ps = new PolicyStatement (null); 177 SecurityElement se = ps.ToXml (null); 178 ps.FromXml (se, null); 179 } 180 181 [Test] ToFromXml_RoundTrip()182 public void ToFromXml_RoundTrip () 183 { 184 PolicyStatement ps1 = new PolicyStatement (Unrestricted, PolicyStatementAttribute.All); 185 SecurityElement se = ps1.ToXml (); 186 187 PolicyStatement ps2 = new PolicyStatement (null); 188 ps2.FromXml (se, null); 189 190 Assert.AreEqual (ps1.ToXml ().ToString (), ps2.ToXml ().ToString (), "Xml"); 191 } 192 [Test] 193 [Category ("NotWorking")] Equals()194 public void Equals () 195 { 196 PolicyStatement empty1 = new PolicyStatement (null); 197 PolicyStatement empty2 = new PolicyStatement (null); 198 Assert.IsTrue (empty1.Equals (empty2), "empty1.Equals (empty2)"); 199 Assert.IsTrue (empty2.Equals (empty1), "empty2.Equals (empty1)"); 200 Assert.IsFalse (Object.ReferenceEquals (empty1, empty2), "!ReferenceEquals"); 201 202 PolicyStatement unr1 = new PolicyStatement (Unrestricted, PolicyStatementAttribute.All); 203 Assert.IsFalse (unr1.Equals (empty1), "unr1.Equals (empty1)"); 204 Assert.IsFalse (empty1.Equals (unr1), "empty1.Equals (unr1)"); 205 206 PolicyStatement unr2 = new PolicyStatement (Unrestricted, PolicyStatementAttribute.Exclusive); 207 Assert.IsFalse (unr1.Equals (unr2), "unr1.Equals (unr2)"); 208 Assert.IsFalse (unr2.Equals (unr1), "unr2.Equals (unr1)"); 209 210 PolicyStatement unr3 = unr2.Copy (); 211 Assert.IsTrue (unr3.Equals (unr2), "unr3.Equals (unr2)"); 212 Assert.IsTrue (unr2.Equals (unr3), "unr2.Equals (unr3)"); 213 } 214 } 215 } 216