1 // 2 // ZoneMembershipConditionTest.cs - 3 // NUnit Test Cases for ZoneMembershipCondition 4 // 5 // Author: 6 // Sebastien Pouliot <sebastien@ximian.com> 7 // 8 // Copyright (C) 2004 Novell, Inc (http://www.novell.com) 9 // 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: 17 // 18 // The above copyright notice and this permission notice shall be 19 // included in all copies or substantial portions of the Software. 20 // 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. 28 // 29 30 using NUnit.Framework; 31 using System; 32 using System.Collections; 33 using System.Security; 34 using System.Security.Policy; 35 36 namespace MonoTests.System.Security.Policy { 37 38 [TestFixture] 39 public class ZoneMembershipConditionTest { 40 41 static Evidence allEmpty; 42 static Evidence hostInternet; 43 static Evidence hostIntranet; 44 static Evidence hostMyComputer; 45 static Evidence hostNoZone; 46 static Evidence hostTrusted; 47 static Evidence hostUntrusted; 48 static Evidence hostOther; 49 static Evidence assemblyInternet; 50 static Evidence assemblyIntranet; 51 static Evidence assemblyMyComputer; 52 static Evidence assemblyNoZone; 53 static Evidence assemblyTrusted; 54 static Evidence assemblyUntrusted; 55 static Evidence assemblyOther; 56 static object wrongEvidence; 57 CreateHostEvidence(object o)58 private Evidence CreateHostEvidence (object o) 59 { 60 Evidence e = new Evidence (); 61 e.AddHost (o); 62 return e; 63 } 64 CreateAssemblyEvidence(object o)65 private Evidence CreateAssemblyEvidence (object o) 66 { 67 Evidence e = new Evidence (); 68 e.AddAssembly (o); 69 return e; 70 } 71 72 [TestFixtureSetUp] FixtureSetUp()73 public void FixtureSetUp () 74 { 75 wrongEvidence = new Site ("test"); 76 allEmpty = new Evidence (); 77 hostInternet = CreateHostEvidence (new Zone (SecurityZone.Internet)); 78 hostIntranet = CreateHostEvidence (new Zone (SecurityZone.Intranet)); 79 hostMyComputer = CreateHostEvidence (new Zone (SecurityZone.MyComputer)); 80 hostNoZone = CreateHostEvidence (new Zone (SecurityZone.NoZone)); 81 hostTrusted = CreateHostEvidence (new Zone (SecurityZone.Trusted)); 82 hostUntrusted = CreateHostEvidence (new Zone (SecurityZone.Untrusted)); 83 hostOther = CreateHostEvidence (wrongEvidence); 84 assemblyInternet = CreateAssemblyEvidence (new Zone (SecurityZone.Internet)); 85 assemblyIntranet = CreateAssemblyEvidence (new Zone (SecurityZone.Intranet)); 86 assemblyMyComputer = CreateAssemblyEvidence (new Zone (SecurityZone.MyComputer)); 87 assemblyNoZone = CreateAssemblyEvidence (new Zone (SecurityZone.NoZone)); 88 assemblyTrusted = CreateAssemblyEvidence (new Zone (SecurityZone.Trusted)); 89 assemblyUntrusted = CreateAssemblyEvidence (new Zone (SecurityZone.Untrusted)); 90 assemblyOther = CreateAssemblyEvidence (wrongEvidence); 91 } 92 BasicTest(SecurityZone zone)93 private ZoneMembershipCondition BasicTest (SecurityZone zone) 94 { 95 ZoneMembershipCondition zmc = new ZoneMembershipCondition (zone); 96 Assert.AreEqual (zone, zmc.SecurityZone, "SecurityZone"); 97 Assert.IsFalse (zmc.Check (null), "Check(null)"); 98 Assert.IsFalse (zmc.Check (allEmpty), "Check(empty)"); 99 Assert.IsFalse (zmc.Check (hostOther), "Check(hostOther)"); 100 Assert.IsFalse (zmc.Check (assemblyOther), "Check(assemblyOther)"); 101 102 ZoneMembershipCondition copy = (ZoneMembershipCondition) zmc.Copy (); 103 Assert.IsTrue (zmc.Equals (copy), "Equals-1"); 104 Assert.IsTrue (copy.Equals (zmc), "Equals-2"); 105 Assert.IsFalse (Object.ReferenceEquals (zmc, copy), "!ReferenceEquals"); 106 Assert.IsFalse (zmc.Equals (null), "Equals-3"); 107 Assert.IsFalse (zmc.Equals (wrongEvidence), "Equals-4"); 108 109 SecurityElement se = zmc.ToXml (); 110 copy.FromXml (se); 111 Assert.IsTrue (zmc.Equals (copy), "Equals-5"); 112 Assert.AreEqual (se.ToString (), zmc.ToXml (null).ToString (), "Equals-6"); 113 114 Assert.IsTrue (zmc.ToString ().StartsWith ("Zone - "), "ToString-1"); 115 Assert.IsTrue (zmc.ToString ().EndsWith (zmc.SecurityZone.ToString ()), "ToString-2"); 116 117 Assert.AreEqual (zmc.SecurityZone.GetHashCode (), zmc.GetHashCode (), "GetHashCode"); 118 119 return zmc; // for further tests 120 } 121 122 [Test] 123 [ExpectedException (typeof (ArgumentException))] ZoneMembershipCondition_Invalid()124 public void ZoneMembershipCondition_Invalid () 125 { 126 ZoneMembershipCondition zmc = new ZoneMembershipCondition ((SecurityZone)128); 127 } 128 129 [Test] ZoneMembershipCondition_Internet()130 public void ZoneMembershipCondition_Internet () 131 { 132 ZoneMembershipCondition zmc = BasicTest (SecurityZone.Internet); 133 Assert.IsTrue (zmc.Check (hostInternet), "Check(hostInternet)"); 134 Assert.IsFalse (zmc.Check (hostIntranet), "Check(hostIntranet)"); 135 Assert.IsFalse (zmc.Check (hostMyComputer), "Check(hostMyComputer)"); 136 Assert.IsFalse (zmc.Check (hostNoZone), "Check(hostNoZone)"); 137 Assert.IsFalse (zmc.Check (hostTrusted), "Check(hostTrusted)"); 138 Assert.IsFalse (zmc.Check (hostUntrusted), "Check(hostUntrusted)"); 139 Assert.IsFalse (zmc.Check (assemblyInternet), "Check(assemblyInternet)"); 140 Assert.IsFalse (zmc.Check (assemblyIntranet), "Check(assemblyIntranet)"); 141 Assert.IsFalse (zmc.Check (assemblyMyComputer), "Check(assemblyMyComputer)"); 142 Assert.IsFalse (zmc.Check (assemblyNoZone), "Check(assemblyNoZone)"); 143 Assert.IsFalse (zmc.Check (assemblyTrusted), "Check(assemblyTrusted)"); 144 Assert.IsFalse (zmc.Check (assemblyUntrusted), "Check(assemblyUntrusted)"); 145 } 146 147 [Test] ZoneMembershipCondition_Intranet()148 public void ZoneMembershipCondition_Intranet () 149 { 150 ZoneMembershipCondition zmc = BasicTest (SecurityZone.Intranet); 151 Assert.IsFalse (zmc.Check (hostInternet), "Check(hostInternet)"); 152 Assert.IsTrue (zmc.Check (hostIntranet), "Check(hostIntranet)"); 153 Assert.IsFalse (zmc.Check (hostMyComputer), "Check(hostMyComputer)"); 154 Assert.IsFalse (zmc.Check (hostNoZone), "Check(hostNoZone)"); 155 Assert.IsFalse (zmc.Check (hostTrusted), "Check(hostTrusted)"); 156 Assert.IsFalse (zmc.Check (hostUntrusted), "Check(hostUntrusted)"); 157 Assert.IsFalse (zmc.Check (assemblyInternet), "Check(assemblyInternet)"); 158 Assert.IsFalse (zmc.Check (assemblyIntranet), "Check(assemblyIntranet)"); 159 Assert.IsFalse (zmc.Check (assemblyMyComputer), "Check(assemblyMyComputer)"); 160 Assert.IsFalse (zmc.Check (assemblyNoZone), "Check(assemblyNoZone)"); 161 Assert.IsFalse (zmc.Check (assemblyTrusted), "Check(assemblyTrusted)"); 162 Assert.IsFalse (zmc.Check (assemblyUntrusted), "Check(assemblyUntrusted)"); 163 } 164 165 [Test] ZoneMembershipCondition_MyComputer()166 public void ZoneMembershipCondition_MyComputer () 167 { 168 ZoneMembershipCondition zmc = BasicTest (SecurityZone.MyComputer); 169 Assert.IsFalse (zmc.Check (hostInternet), "Check(hostInternet)"); 170 Assert.IsFalse (zmc.Check (hostIntranet), "Check(hostIntranet)"); 171 Assert.IsTrue (zmc.Check (hostMyComputer), "Check(hostMyComputer)"); 172 Assert.IsFalse (zmc.Check (hostNoZone), "Check(hostNoZone)"); 173 Assert.IsFalse (zmc.Check (hostTrusted), "Check(hostTrusted)"); 174 Assert.IsFalse (zmc.Check (hostUntrusted), "Check(hostUntrusted)"); 175 Assert.IsFalse (zmc.Check (assemblyInternet), "Check(assemblyInternet)"); 176 Assert.IsFalse (zmc.Check (assemblyIntranet), "Check(assemblyIntranet)"); 177 Assert.IsFalse (zmc.Check (assemblyMyComputer), "Check(assemblyMyComputer)"); 178 Assert.IsFalse (zmc.Check (assemblyNoZone), "Check(assemblyNoZone)"); 179 Assert.IsFalse (zmc.Check (assemblyTrusted), "Check(assemblyTrusted)"); 180 Assert.IsFalse (zmc.Check (assemblyUntrusted), "Check(assemblyUntrusted)"); 181 } 182 183 [Test] 184 [ExpectedException (typeof (ArgumentException))] ZoneMembershipCondition_NoZone()185 public void ZoneMembershipCondition_NoZone () 186 { 187 ZoneMembershipCondition zmc = new ZoneMembershipCondition (SecurityZone.NoZone); 188 } 189 190 [Test] ZoneMembershipCondition_Trusted()191 public void ZoneMembershipCondition_Trusted () 192 { 193 ZoneMembershipCondition zmc = BasicTest (SecurityZone.Trusted); 194 Assert.IsFalse (zmc.Check (hostInternet), "Check(hostInternet)"); 195 Assert.IsFalse (zmc.Check (hostIntranet), "Check(hostIntranet)"); 196 Assert.IsFalse (zmc.Check (hostMyComputer), "Check(hostMyComputer)"); 197 Assert.IsFalse (zmc.Check (hostNoZone), "Check(hostNoZone)"); 198 Assert.IsTrue (zmc.Check (hostTrusted), "Check(hostTrusted)"); 199 Assert.IsFalse (zmc.Check (hostUntrusted), "Check(hostUntrusted)"); 200 Assert.IsFalse (zmc.Check (assemblyInternet), "Check(assemblyInternet)"); 201 Assert.IsFalse (zmc.Check (assemblyIntranet), "Check(assemblyIntranet)"); 202 Assert.IsFalse (zmc.Check (assemblyMyComputer), "Check(assemblyMyComputer)"); 203 Assert.IsFalse (zmc.Check (assemblyNoZone), "Check(assemblyNoZone)"); 204 Assert.IsFalse (zmc.Check (assemblyTrusted), "Check(assemblyTrusted)"); 205 Assert.IsFalse (zmc.Check (assemblyUntrusted), "Check(assemblyUntrusted)"); 206 } 207 208 [Test] ZoneMembershipCondition_Untrusted()209 public void ZoneMembershipCondition_Untrusted () 210 { 211 ZoneMembershipCondition zmc = BasicTest (SecurityZone.Untrusted); 212 Assert.IsFalse (zmc.Check (hostInternet), "Check(hostInternet)"); 213 Assert.IsFalse (zmc.Check (hostIntranet), "Check(hostIntranet)"); 214 Assert.IsFalse (zmc.Check (hostMyComputer), "Check(hostMyComputer)"); 215 Assert.IsFalse (zmc.Check (hostNoZone), "Check(hostNoZone)"); 216 Assert.IsFalse (zmc.Check (hostTrusted), "Check(hostTrusted)"); 217 Assert.IsTrue (zmc.Check (hostUntrusted), "Check(hostUntrusted)"); 218 Assert.IsFalse (zmc.Check (assemblyInternet), "Check(assemblyInternet)"); 219 Assert.IsFalse (zmc.Check (assemblyIntranet), "Check(assemblyIntranet)"); 220 Assert.IsFalse (zmc.Check (assemblyMyComputer), "Check(assemblyMyComputer)"); 221 Assert.IsFalse (zmc.Check (assemblyNoZone), "Check(assemblyNoZone)"); 222 Assert.IsFalse (zmc.Check (assemblyTrusted), "Check(assemblyTrusted)"); 223 Assert.IsFalse (zmc.Check (assemblyUntrusted), "Check(assemblyUntrusted)"); 224 } 225 226 [Test] 227 [ExpectedException (typeof (ArgumentException))] SecurityZone_NoZone()228 public void SecurityZone_NoZone () 229 { 230 ZoneMembershipCondition zmc = new ZoneMembershipCondition (SecurityZone.MyComputer); 231 zmc.SecurityZone = SecurityZone.NoZone; 232 } 233 234 [Test] 235 [ExpectedException (typeof (ArgumentException))] SecurityZone_Invalid()236 public void SecurityZone_Invalid () 237 { 238 ZoneMembershipCondition zmc = new ZoneMembershipCondition (SecurityZone.MyComputer); 239 zmc.SecurityZone = (SecurityZone)128; 240 } 241 242 [Test] 243 [ExpectedException (typeof (ArgumentNullException))] FromXml_Null()244 public void FromXml_Null () 245 { 246 ZoneMembershipCondition zmc = new ZoneMembershipCondition (SecurityZone.MyComputer); 247 zmc.FromXml (null); 248 } 249 250 [Test] 251 [ExpectedException (typeof (ArgumentException))] FromXml_InvalidTag()252 public void FromXml_InvalidTag () 253 { 254 ZoneMembershipCondition zmc = new ZoneMembershipCondition (SecurityZone.MyComputer); 255 SecurityElement se = zmc.ToXml (); 256 se.Tag = "IMonoship"; 257 zmc.FromXml (se); 258 } 259 260 [Test] FromXml_InvalidClass()261 public void FromXml_InvalidClass () 262 { 263 ZoneMembershipCondition zmc = new ZoneMembershipCondition (SecurityZone.MyComputer); 264 SecurityElement se = zmc.ToXml (); 265 se.Attributes ["class"] = "Hello world"; 266 zmc.FromXml (se); 267 } 268 269 [Test] FromXml_NoClass()270 public void FromXml_NoClass () 271 { 272 ZoneMembershipCondition zmc = new ZoneMembershipCondition (SecurityZone.MyComputer); 273 SecurityElement se = zmc.ToXml (); 274 275 SecurityElement w = new SecurityElement (se.Tag); 276 w.AddAttribute ("version", se.Attribute ("version")); 277 zmc.FromXml (w); 278 // doesn't even care of the class attribute presence 279 } 280 281 [Test] FromXml_InvalidVersion()282 public void FromXml_InvalidVersion () 283 { 284 ZoneMembershipCondition zmc = new ZoneMembershipCondition (SecurityZone.MyComputer); 285 SecurityElement se = zmc.ToXml (); 286 287 SecurityElement w = new SecurityElement (se.Tag); 288 w.AddAttribute ("class", se.Attribute ("class")); 289 w.AddAttribute ("version", "2"); 290 w.AddAttribute ("Zone", se.Attribute ("Zone")); 291 zmc.FromXml (w); 292 } 293 294 [Test] FromXml_NoVersion()295 public void FromXml_NoVersion () 296 { 297 ZoneMembershipCondition zmc = new ZoneMembershipCondition (SecurityZone.MyComputer); 298 SecurityElement se = zmc.ToXml (); 299 300 SecurityElement w = new SecurityElement (se.Tag); 301 w.AddAttribute ("class", se.Attribute ("class")); 302 zmc.FromXml (w); 303 } 304 305 [Test] 306 #if MOBILE 307 [ExpectedException (typeof (NotSupportedException))] 308 #endif FromXml_PolicyLevel()309 public void FromXml_PolicyLevel () 310 { 311 ZoneMembershipCondition zmc = new ZoneMembershipCondition (SecurityZone.MyComputer); 312 SecurityElement se = zmc.ToXml (); 313 // is it accepted for all policy levels ? 314 IEnumerator e = SecurityManager.PolicyHierarchy (); 315 while (e.MoveNext ()) { 316 PolicyLevel pl = e.Current as PolicyLevel; 317 ZoneMembershipCondition spl = new ZoneMembershipCondition (SecurityZone.Internet); 318 spl.FromXml (se, pl); 319 Assert.IsTrue (spl.Equals (zmc), "FromXml(PolicyLevel='" + pl.Label + "')"); 320 } 321 // yes! 322 } 323 324 [Test] ToXml_Null()325 public void ToXml_Null () 326 { 327 ZoneMembershipCondition zmc = new ZoneMembershipCondition (SecurityZone.MyComputer); 328 // no ArgumentNullException here 329 SecurityElement se = zmc.ToXml (null); 330 Assert.IsNotNull (se, "ToXml(null)"); 331 } 332 333 [Test] 334 #if MOBILE 335 [ExpectedException (typeof (NotSupportedException))] 336 #endif ToXml_PolicyLevel()337 public void ToXml_PolicyLevel () 338 { 339 ZoneMembershipCondition zmc = new ZoneMembershipCondition (SecurityZone.MyComputer); 340 SecurityElement se = zmc.ToXml (); 341 string s = zmc.ToXml ().ToString (); 342 // is it accepted for all policy levels ? 343 IEnumerator e = SecurityManager.PolicyHierarchy (); 344 while (e.MoveNext ()) { 345 PolicyLevel pl = e.Current as PolicyLevel; 346 ZoneMembershipCondition spl = new ZoneMembershipCondition (SecurityZone.Internet); 347 spl.FromXml (se, pl); 348 Assert.AreEqual (s, spl.ToXml (pl).ToString (), "ToXml(PolicyLevel='" + pl.Label + "')"); 349 } 350 // yes! 351 } 352 } 353 } 354