2 // UrlMembershipConditionTest.cs - NUnit Test Cases for UrlMembershipCondition
5 // Sebastien Pouliot <sebastien@ximian.com>
7 // (C) 2004 Motus Technologies Inc. (http://www.motus.com)
8 // Copyright (C) 2004 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.Security;
34 using System.Security.Policy;
36 namespace MonoTests.System.Security.Policy {
39 public class UrlMembershipConditionTest {
42 [ExpectedException (typeof (ArgumentNullException))]
43 public void UrlMembershipCondition_Null ()
45 UrlMembershipCondition umc = new UrlMembershipCondition (null);
49 [ExpectedException (typeof (FormatException))]
50 public void UrlMembershipCondition_Empty ()
52 UrlMembershipCondition umc = new UrlMembershipCondition (String.Empty);
56 public void UrlMembershipCondition_FileUrl ()
58 UrlMembershipCondition umc = new UrlMembershipCondition ("file://mono/index.html");
62 public void UrlMembershipCondition_FullUrlWithPort ()
64 UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com:8080/index.html");
68 public void UrlMembershipCondition_GoMonoWebUrl ()
70 UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com/");
71 Assert.AreEqual ("http://www.go-mono.com/", umc.Url, "Url");
72 Assert.AreEqual ("Url - http://www.go-mono.com/", umc.ToString (), "ToString");
74 UrlMembershipCondition umc2 = (UrlMembershipCondition) umc.Copy ();
75 Assert.AreEqual (umc.Url, umc2.Url, "Copy.Url");
76 Assert.AreEqual (umc.GetHashCode (), umc2.GetHashCode (), "Copy.GetHashCode");
78 SecurityElement se = umc2.ToXml ();
79 UrlMembershipCondition umc3 = new UrlMembershipCondition ("*");
81 Assert.AreEqual (umc.Url, umc3.Url, "ToXml/FromXml");
83 Assert.IsTrue (umc.Equals (umc2), "Equals");
84 UrlMembershipCondition umc4 = new UrlMembershipCondition ("http://www.go-mono.com");
85 // note that a last slash is added to Url - so it's equal
86 Assert.IsTrue (umc.Equals (umc4), "Equals-AutoAddedLastSlash");
90 public void Url_AllGoMonoUrl ()
92 UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com/*");
93 Assert.AreEqual ("http://www.go-mono.com/*", umc.Url, "Url");
94 Assert.AreEqual ("Url - http://www.go-mono.com/*", umc.ToString (), "ToString");
96 UrlMembershipCondition umc2 = (UrlMembershipCondition) umc.Copy ();
97 Assert.AreEqual (umc.Url, umc2.Url, "Copy.Url");
98 Assert.AreEqual (umc.GetHashCode (), umc2.GetHashCode (), "Copy.GetHashCode");
100 SecurityElement se = umc2.ToXml ();
101 UrlMembershipCondition umc3 = new UrlMembershipCondition ("*");
103 Assert.AreEqual (umc.Url, umc3.Url, "ToXml/FromXml");
105 Assert.IsTrue (umc.Equals (umc2), "Equals");
106 UrlMembershipCondition umc4 = new UrlMembershipCondition ("http://www.go-mono.com/");
107 Assert.IsTrue (umc.Equals (umc4), "Equals-*");
112 [ExpectedException (typeof (ArgumentException))]
114 [Category ("NotWorking")]
116 public void Url_InvalidSite ()
118 UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.*");
120 Assert.AreEqual ("http://www.go-mono.*", umc.Url, "Url");
121 Assert.AreEqual ("Url - http://www.go-mono.*", umc.ToString (), "ToString");
126 [Category ("NotWorking")]
129 public void Url_NoProtocol ()
131 UrlMembershipCondition umc = new UrlMembershipCondition ("www.go-mono.com");
133 Assert.AreEqual ("www.go-mono.com", umc.Url, "Url");
134 Assert.AreEqual ("Url - www.go-mono.com", umc.ToString (), "ToString");
136 // note: no last slash here
137 Assert.AreEqual ("file://WWW.GO-MONO.COM", umc.Url, "Url");
138 Assert.AreEqual ("Url - file://WWW.GO-MONO.COM", umc.ToString (), "ToString");
142 [Category ("NotWorking")]
145 public void Url_WellKnownProtocol ()
147 UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com");
149 Assert.AreEqual ("http://www.go-mono.com", umc.Url, "http-Url");
150 Assert.AreEqual ("Url - http://www.go-mono.com", umc.ToString (), "http-ToString");
152 Assert.AreEqual ("http://www.go-mono.com/", umc.Url, "http-Url");
153 Assert.AreEqual ("Url - http://www.go-mono.com/", umc.ToString (), "http-ToString");
155 umc = new UrlMembershipCondition ("https://www.go-mono.com");
157 Assert.AreEqual ("https://www.go-mono.com", umc.Url, "https-Url");
158 Assert.AreEqual ("Url - https://www.go-mono.com", umc.ToString (), "https-ToString");
160 Assert.AreEqual ("https://www.go-mono.com/", umc.Url, "https-Url");
161 Assert.AreEqual ("Url - https://www.go-mono.com/", umc.ToString (), "https-ToString");
164 umc = new UrlMembershipCondition ("ftp://www.go-mono.com");
166 Assert.AreEqual ("ftp://www.go-mono.com", umc.Url, "ftp-Url");
167 Assert.AreEqual ("Url - ftp://www.go-mono.com", umc.ToString (), "ftp-ToString");
169 Assert.AreEqual ("ftp://www.go-mono.com/", umc.Url, "ftp-Url");
170 Assert.AreEqual ("Url - ftp://www.go-mono.com/", umc.ToString (), "ftp-ToString");
173 umc = new UrlMembershipCondition ("file://www.go-mono.com");
175 Assert.AreEqual ("file://www.go-mono.com", umc.Url, "file-Url");
176 Assert.AreEqual ("Url - file://www.go-mono.com", umc.ToString (), "file-ToString");
178 Assert.AreEqual ("file://WWW.GO-MONO.COM", umc.Url, "file-Url");
179 Assert.AreEqual ("Url - file://WWW.GO-MONO.COM", umc.ToString (), "file-ToString");
183 [Category ("NotWorking")]
186 public void Url_UnknownProtocol ()
188 UrlMembershipCondition umc = new UrlMembershipCondition ("mono://www.go-mono.com");
190 Assert.AreEqual ("mono://www.go-mono.com", umc.Url, "Url");
191 Assert.AreEqual ("Url - mono://www.go-mono.com", umc.ToString (), "ToString");
193 Assert.AreEqual ("mono://www.go-mono.com/", umc.Url, "Url");
194 Assert.AreEqual ("Url - mono://www.go-mono.com/", umc.ToString (), "ToString");
199 public void Url_RelativePath ()
201 UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com/path/../newpath/index.html");
202 Assert.AreEqual ("http://www.go-mono.com/path/../newpath/index.html", umc.Url, "Url");
203 Assert.AreEqual ("Url - http://www.go-mono.com/path/../newpath/index.html", umc.ToString (), "ToString");
207 [ExpectedException (typeof (ArgumentNullException))]
208 public void Url_Null ()
210 UrlMembershipCondition umc = new UrlMembershipCondition ("ftp://www.go-mono.com");
215 [ExpectedException (typeof (FormatException))]
216 public void Url_Empty ()
218 UrlMembershipCondition umc = new UrlMembershipCondition ("ftp://www.go-mono.com");
219 umc.Url = String.Empty;
225 UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com");
228 Assert.IsFalse (umc.Check (e), "Check(null)");
231 Assert.IsFalse (umc.Check (e), "Check(empty)");
233 e.AddHost (new Zone (SecurityZone.MyComputer));
234 Assert.IsFalse (umc.Check (e), "Check(zone)");
236 Url u = new Url ("http://www.go-mono.com");
238 Assert.IsFalse (umc.Check (e), "Check(url-assembly)");
240 Assert.IsTrue (umc.Check (e), "Check(url-host)");
244 public void CheckPositive_Partial ()
246 UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com/*");
247 Evidence e = new Evidence ();
248 e.AddHost (new Url ("http://www.go-mono.com/index.html"));
249 Assert.IsTrue (umc.Check (e), "Check(+-)");
253 public void CheckNegative ()
255 UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com");
256 Evidence e = new Evidence ();
257 e.AddHost (new Url ("http://www.go-mono.org"));
258 Assert.IsFalse (umc.Check (e), "Check(-)");
262 public void CheckMultipleEvidences ()
264 UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com");
265 Evidence e = new Evidence ();
266 e.AddHost (new Url ("http://www.go-mono.org")); // the bad
267 e.AddHost (new Url ("http://www.go-mono.com")); // the good
268 e.AddHost (new Zone (SecurityZone.MyComputer)); // and the ugly (couldn't resist ;)
269 Assert.IsTrue (umc.Check (e), "Check(n)");
270 // check all Url evidence (i.e. do not stop at the first Url evidence)
274 public void EqualsCaseSensitive_Http ()
276 UrlMembershipCondition umc1 = new UrlMembershipCondition ("http://www.go-mono.com");
277 UrlMembershipCondition umc2 = new UrlMembershipCondition ("http://www.Go-Mono.com");
278 Assert.IsTrue (umc1.Equals (umc2), "CaseSensitive");
282 public void EqualsCaseSensitive_File ()
284 UrlMembershipCondition umc1 = new UrlMembershipCondition ("file://MONO");
285 UrlMembershipCondition umc2 = new UrlMembershipCondition ("file://mono");
286 Assert.IsTrue (umc1.Equals (umc2), "CaseSensitive");
290 public void EqualsNull ()
292 UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com");
293 Assert.IsFalse (umc.Equals (null), "EqualsNull");
297 [ExpectedException (typeof (ArgumentNullException))]
298 public void FromXml_Null ()
300 UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com");
305 [ExpectedException (typeof (ArgumentException))]
306 public void FromXml_InvalidTag ()
308 UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com");
309 SecurityElement se = umc.ToXml ();
310 se.Tag = "IMonoship";
315 public void FromXml_InvalidClass ()
317 UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com");
318 SecurityElement se = umc.ToXml ();
319 se.Attributes ["class"] = "Hello world";
324 public void FromXml_NoClass ()
326 UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com");
327 SecurityElement se = umc.ToXml ();
329 SecurityElement w = new SecurityElement (se.Tag);
330 w.AddAttribute ("version", se.Attribute ("version"));
332 // doesn't even care of the class attribute presence
336 public void FromXml_InvalidVersion ()
338 UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com");
339 SecurityElement se = umc.ToXml ();
341 SecurityElement w = new SecurityElement (se.Tag);
342 w.AddAttribute ("class", se.Attribute ("class"));
343 w.AddAttribute ("version", "2");
344 w.AddAttribute ("Url", se.Attribute ("Url"));
349 public void FromXml_NoVersion ()
351 UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com");
352 SecurityElement se = umc.ToXml ();
354 SecurityElement w = new SecurityElement (se.Tag);
355 w.AddAttribute ("class", se.Attribute ("class"));
360 public void FromXml_PolicyLevel ()
362 UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com");
363 SecurityElement se = umc.ToXml ();
364 // is it accepted for all policy levels ?
365 IEnumerator e = SecurityManager.PolicyHierarchy ();
366 while (e.MoveNext ()) {
367 PolicyLevel pl = e.Current as PolicyLevel;
368 UrlMembershipCondition spl = new UrlMembershipCondition ("*");
369 spl.FromXml (se, pl);
370 Assert.IsTrue (spl.Equals (umc), "FromXml(PolicyLevel='" + pl.Label + "')");
376 public void ToXml_Null ()
378 UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com");
379 // no ArgumentNullException here
380 SecurityElement se = umc.ToXml (null);
381 Assert.IsNotNull (se, "ToXml(null)");
385 public void ToXml_PolicyLevel ()
387 UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com");
388 SecurityElement se = umc.ToXml ();
389 string s = umc.ToXml ().ToString ();
390 // is it accepted for all policy levels ?
391 IEnumerator e = SecurityManager.PolicyHierarchy ();
392 while (e.MoveNext ()) {
393 PolicyLevel pl = e.Current as PolicyLevel;
394 UrlMembershipCondition spl = new UrlMembershipCondition ("*");
395 spl.FromXml (se, pl);
396 Assert.AreEqual (s, spl.ToXml (pl).ToString (), "ToXml(PolicyLevel='" + pl.Label + "')");
402 public void ToFromXmlRoundTrip ()
404 UrlMembershipCondition umc1 = new UrlMembershipCondition ("http://www.go-mono.com");
405 SecurityElement se = umc1.ToXml ();
407 UrlMembershipCondition umc2 = new UrlMembershipCondition ("*");
410 Assert.AreEqual (umc1.GetHashCode (), umc2.GetHashCode (), "ToFromXmlRoundTrip");