1 // 2 // ZoneIdentityPermissionTest.cs - NUnit Test Cases for ZoneIdentityPermission 3 // 4 // Author: 5 // Sebastien Pouliot <sebastien@ximian.com> 6 // 7 // Copyright (C) 2004 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.Security; 32 using System.Security.Permissions; 33 34 namespace MonoTests.System.Security.Permissions { 35 36 [TestFixture] 37 public class ZoneIdentityPermissionTest { 38 39 [Test] PermissionStateNone()40 public void PermissionStateNone () 41 { 42 ZoneIdentityPermission zip = new ZoneIdentityPermission (PermissionState.None); 43 Assert.AreEqual (SecurityZone.NoZone, zip.SecurityZone); 44 } 45 [Test] 46 [Category ("NotWorking")] PermissionStateUnrestricted()47 public void PermissionStateUnrestricted () 48 { 49 // In 2.0 Unrestricted are permitted for identity permissions 50 ZoneIdentityPermission zip = new ZoneIdentityPermission (PermissionState.Unrestricted); 51 Assert.AreEqual (SecurityZone.NoZone, zip.SecurityZone); 52 SecurityElement se = zip.ToXml (); 53 Assert.AreEqual (5, se.Children.Count, "Count"); 54 // and they aren't equals to None 55 Assert.IsFalse (zip.Equals (new ZoneIdentityPermission (PermissionState.None))); 56 } 57 [Test] 58 [ExpectedException (typeof (ArgumentException))] PermissionStateInvalid()59 public void PermissionStateInvalid () 60 { 61 ZoneIdentityPermission zip = new ZoneIdentityPermission ((PermissionState)2); 62 } 63 Same(ZoneIdentityPermission zip1, ZoneIdentityPermission zip2)64 private bool Same (ZoneIdentityPermission zip1, ZoneIdentityPermission zip2) 65 { 66 return zip1.Equals (zip2); 67 } 68 BasicTestZone(SecurityZone zone, bool special)69 private ZoneIdentityPermission BasicTestZone (SecurityZone zone, bool special) 70 { 71 ZoneIdentityPermission zip = new ZoneIdentityPermission (zone); 72 Assert.AreEqual (zone, zip.SecurityZone, "SecurityZone"); 73 74 ZoneIdentityPermission copy = (ZoneIdentityPermission) zip.Copy (); 75 Assert.IsTrue (Same (zip, copy), "Equals-Copy"); 76 Assert.IsTrue (zip.IsSubsetOf (copy), "IsSubset-1"); 77 Assert.IsTrue (copy.IsSubsetOf (zip), "IsSubset-2"); 78 if (special) { 79 Assert.IsFalse (zip.IsSubsetOf (null), "IsSubset-Null"); 80 } 81 82 IPermission intersect = zip.Intersect (copy); 83 if (special) { 84 Assert.IsTrue (intersect.IsSubsetOf (zip), "IsSubset-3"); 85 Assert.IsFalse (Object.ReferenceEquals (zip, intersect), "!ReferenceEquals1"); 86 Assert.IsTrue (intersect.IsSubsetOf (copy), "IsSubset-4"); 87 Assert.IsFalse (Object.ReferenceEquals (copy, intersect), "!ReferenceEquals2"); 88 } 89 90 Assert.IsNull (zip.Intersect (null), "Intersect with null"); 91 92 intersect = zip.Intersect (new ZoneIdentityPermission (PermissionState.None)); 93 Assert.IsNull (intersect, "Intersect with PS.None"); 94 95 // note: can't be tested with PermissionState.Unrestricted 96 97 // XML roundtrip 98 SecurityElement se = zip.ToXml (); 99 copy.FromXml (se); 100 Assert.IsTrue (Same (zip, copy), "Equals-Xml"); 101 102 return zip; 103 } 104 105 [Test] SecurityZone_Internet()106 public void SecurityZone_Internet () 107 { 108 BasicTestZone (SecurityZone.Internet, true); 109 } 110 111 [Test] SecurityZone_Intranet()112 public void SecurityZone_Intranet () 113 { 114 BasicTestZone (SecurityZone.Intranet, true); 115 } 116 117 [Test] SecurityZone_MyComputer()118 public void SecurityZone_MyComputer () 119 { 120 BasicTestZone (SecurityZone.MyComputer, true); 121 } 122 123 [Test] SecurityZone_NoZone()124 public void SecurityZone_NoZone () 125 { 126 ZoneIdentityPermission zip = BasicTestZone (SecurityZone.NoZone, false); 127 Assert.IsNull (zip.ToXml ().Attribute ("Zone"), "Zone Attribute"); 128 Assert.IsTrue (zip.IsSubsetOf (null), "IsSubset-Null"); 129 IPermission intersect = zip.Intersect (zip); 130 Assert.IsNull (intersect, "Intersect with No Zone"); 131 // NoZone is special as it is a subset of all zones 132 ZoneIdentityPermission ss = new ZoneIdentityPermission (SecurityZone.Internet); 133 Assert.IsTrue (zip.IsSubsetOf (ss), "IsSubset-Internet"); 134 ss.SecurityZone = SecurityZone.Intranet; 135 Assert.IsTrue (zip.IsSubsetOf (ss), "IsSubset-Intranet"); 136 ss.SecurityZone = SecurityZone.MyComputer; 137 Assert.IsTrue (zip.IsSubsetOf (ss), "IsSubset-MyComputer"); 138 ss.SecurityZone = SecurityZone.NoZone; 139 Assert.IsTrue (zip.IsSubsetOf (ss), "IsSubset-NoZone"); 140 ss.SecurityZone = SecurityZone.Trusted; 141 Assert.IsTrue (zip.IsSubsetOf (ss), "IsSubset-Trusted"); 142 ss.SecurityZone = SecurityZone.Untrusted; 143 Assert.IsTrue (zip.IsSubsetOf (ss), "IsSubset-Untrusted"); 144 } 145 146 [Test] SecurityZone_Trusted()147 public void SecurityZone_Trusted () 148 { 149 BasicTestZone (SecurityZone.Trusted, true); 150 } 151 152 [Test] SecurityZone_Untrusted()153 public void SecurityZone_Untrusted () 154 { 155 BasicTestZone (SecurityZone.Untrusted, true); 156 } 157 158 [Test] 159 [ExpectedException (typeof (ArgumentException))] SecurityZone_Invalid()160 public void SecurityZone_Invalid () 161 { 162 ZoneIdentityPermission zip = new ZoneIdentityPermission ((SecurityZone)128); 163 } 164 165 [Test] 166 [ExpectedException (typeof (ArgumentException))] Intersect_DifferentPermissions()167 public void Intersect_DifferentPermissions () 168 { 169 ZoneIdentityPermission a = new ZoneIdentityPermission (SecurityZone.Trusted); 170 SecurityPermission b = new SecurityPermission (PermissionState.None); 171 a.Intersect (b); 172 } 173 174 [Test] 175 [ExpectedException (typeof (ArgumentException))] IsSubsetOf_DifferentPermissions()176 public void IsSubsetOf_DifferentPermissions () 177 { 178 ZoneIdentityPermission a = new ZoneIdentityPermission (SecurityZone.Trusted); 179 SecurityPermission b = new SecurityPermission (PermissionState.None); 180 a.IsSubsetOf (b); 181 } 182 183 [Test] Union()184 public void Union () 185 { 186 ZoneIdentityPermission a = new ZoneIdentityPermission (SecurityZone.Trusted); 187 188 ZoneIdentityPermission z = (ZoneIdentityPermission) a.Union (null); 189 Assert.IsTrue (Same (a, z), "Trusted+null"); 190 Assert.IsFalse (Object.ReferenceEquals (a, z), "!ReferenceEquals1"); 191 192 z = (ZoneIdentityPermission) a.Union (new ZoneIdentityPermission (PermissionState.None)); 193 Assert.IsTrue (Same (a, z), "Trusted+PS.None"); 194 Assert.IsFalse (Object.ReferenceEquals (a, z), "!ReferenceEquals2"); 195 196 // note: can't be tested with PermissionState.Unrestricted 197 198 ZoneIdentityPermission n = new ZoneIdentityPermission (SecurityZone.NoZone); 199 z = (ZoneIdentityPermission) a.Union (n); 200 Assert.IsTrue (Same (a, z), "Trusted+NoZone"); 201 Assert.IsFalse (Object.ReferenceEquals (a, z), "!ReferenceEquals3"); 202 203 z = (ZoneIdentityPermission) n.Union (a); 204 Assert.IsTrue (Same (a, z), "NoZone+Trusted"); 205 Assert.IsFalse (Object.ReferenceEquals (a, z), "!ReferenceEquals4"); 206 } 207 [Category ("NotWorking")] 208 [Test] Union_DifferentIdentities()209 public void Union_DifferentIdentities () 210 { 211 ZoneIdentityPermission a = new ZoneIdentityPermission (SecurityZone.Trusted); 212 ZoneIdentityPermission b = new ZoneIdentityPermission (SecurityZone.Untrusted); 213 IPermission result = a.Union (b); 214 Assert.IsNotNull (result, "Union"); 215 // new XML format is used to contain more than one site 216 SecurityElement se = result.ToXml (); 217 Assert.AreEqual (2, se.Children.Count, "Childs"); 218 Assert.AreEqual (a.SecurityZone.ToString (), (se.Children [0] as SecurityElement).Attribute ("Zone"), "Zone#1"); 219 Assert.AreEqual (b.SecurityZone.ToString (), (se.Children [1] as SecurityElement).Attribute ("Zone"), "Zone#2"); 220 // strangely it is still versioned as 'version="1"'. 221 Assert.AreEqual ("1", se.Attribute ("version"), "Version"); 222 } 223 224 [Test] 225 [ExpectedException (typeof (ArgumentException))] Union_DifferentPermissions()226 public void Union_DifferentPermissions () 227 { 228 ZoneIdentityPermission a = new ZoneIdentityPermission (SecurityZone.Trusted); 229 SecurityPermission b = new SecurityPermission (PermissionState.None); 230 a.Union (b); 231 } 232 233 [Test] 234 [ExpectedException (typeof (ArgumentNullException))] FromXml_Null()235 public void FromXml_Null () 236 { 237 ZoneIdentityPermission zip = new ZoneIdentityPermission (PermissionState.None); 238 zip.FromXml (null); 239 } 240 241 [Test] 242 [ExpectedException (typeof (ArgumentException))] FromXml_WrongTag()243 public void FromXml_WrongTag () 244 { 245 ZoneIdentityPermission zip = new ZoneIdentityPermission (PermissionState.None); 246 SecurityElement se = zip.ToXml (); 247 se.Tag = "IMono"; // instead of IPermission 248 zip.FromXml (se); 249 } 250 251 [Test] 252 [ExpectedException (typeof (ArgumentException))] FromXml_WrongTagCase()253 public void FromXml_WrongTagCase () 254 { 255 ZoneIdentityPermission zip = new ZoneIdentityPermission (PermissionState.None); 256 SecurityElement se = zip.ToXml (); 257 se.Tag = "IPERMISSION"; // instead of IPermission 258 zip.FromXml (se); 259 } 260 261 [Test] FromXml_WrongClass()262 public void FromXml_WrongClass () 263 { 264 ZoneIdentityPermission zip = new ZoneIdentityPermission (PermissionState.None); 265 SecurityElement se = zip.ToXml (); 266 267 SecurityElement w = new SecurityElement (se.Tag); 268 w.AddAttribute ("class", "Wrong" + se.Attribute ("class")); 269 w.AddAttribute ("version", se.Attribute ("version")); 270 zip.FromXml (w); 271 // doesn't care of the class name at that stage 272 // anyway the class has already be created so... 273 } 274 275 [Test] FromXml_NoClass()276 public void FromXml_NoClass () 277 { 278 ZoneIdentityPermission zip = new ZoneIdentityPermission (PermissionState.None); 279 SecurityElement se = zip.ToXml (); 280 281 SecurityElement w = new SecurityElement (se.Tag); 282 w.AddAttribute ("version", se.Attribute ("version")); 283 zip.FromXml (w); 284 // doesn't even care of the class attribute presence 285 } 286 287 [Test] 288 [ExpectedException (typeof (ArgumentException))] FromXml_WrongVersion()289 public void FromXml_WrongVersion () 290 { 291 ZoneIdentityPermission zip = new ZoneIdentityPermission (PermissionState.None); 292 SecurityElement se = zip.ToXml (); 293 294 SecurityElement w = new SecurityElement (se.Tag); 295 w.AddAttribute ("class", se.Attribute ("class")); 296 w.AddAttribute ("version", "2"); 297 zip.FromXml (w); 298 } 299 300 [Test] FromXml_NoVersion()301 public void FromXml_NoVersion () 302 { 303 ZoneIdentityPermission zip = new ZoneIdentityPermission (PermissionState.None); 304 SecurityElement se = zip.ToXml (); 305 306 SecurityElement w = new SecurityElement (se.Tag); 307 w.AddAttribute ("class", se.Attribute ("class")); 308 zip.FromXml (w); 309 } 310 } 311 } 312