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