2 // SiteIdentityPermissionTest.cs - NUnit Test Cases for SiteIdentityPermission
5 // Sebastien Pouliot <sebastien@ximian.com>
7 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
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:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
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.
29 using NUnit.Framework;
31 using System.Security;
32 using System.Security.Permissions;
34 using System.Diagnostics;
36 namespace MonoTests.System.Security.Permissions {
39 public class SiteIdentityPermissionTest {
41 static string[] GoodSites = {
42 "www.mono-project.com",
49 static string[] BadSites = {
50 "http://www.mono-project.com:80/",
51 "http://www.mono-project.com/",
52 "http://www.mono-project.com",
53 "www.mono-project.com:80",
54 "*www.mono-project.com",
60 [Category ("NotWorking")]
63 public void PermissionState_None ()
65 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
67 Assert.AreEqual (String.Empty, sip.Site, "Site");
69 SecurityElement se = sip.ToXml ();
70 // only class and version are present
71 Assert.AreEqual (2, se.Attributes.Count, "Xml-Attributes");
72 Assert.IsNull (se.Children, "Xml-Children");
73 SiteIdentityPermission copy = (SiteIdentityPermission)sip.Copy ();
74 Assert.IsFalse (Object.ReferenceEquals (sip, copy), "ReferenceEquals");
78 [Category ("NotWorking")]
80 public void PermissionStateUnrestricted ()
82 // In 2.0 Unrestricted are permitted for identity permissions
83 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.Unrestricted);
84 Assert.AreEqual (String.Empty, sip.Site, "Site");
85 SecurityElement se = sip.ToXml ();
86 Assert.AreEqual (3, se.Attributes.Count, "Xml-Attributes");
87 Assert.IsNull (se.Children, "Xml-Children");
88 SiteIdentityPermission copy = (SiteIdentityPermission)sip.Copy ();
89 Assert.IsFalse (Object.ReferenceEquals (sip, copy), "ReferenceEquals");
90 // and they aren't equals to None
91 Assert.IsFalse (sip.Equals (new SiteIdentityPermission (PermissionState.None)));
95 [ExpectedException (typeof (ArgumentException))]
96 public void PermissionState_Unrestricted ()
98 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.Unrestricted);
102 [ExpectedException (typeof (ArgumentException))]
103 public void PermissionState_Bad ()
105 SiteIdentityPermission sip = new SiteIdentityPermission ((PermissionState)Int32.MinValue);
109 [ExpectedException (typeof (ArgumentException))]
110 public void SiteIdentityPermission_NullSite ()
112 SiteIdentityPermission sip = new SiteIdentityPermission (null);
116 [ExpectedException (typeof (ArgumentException))]
117 public void SiteIdentityPermission_EmptySite ()
119 SiteIdentityPermission sip = new SiteIdentityPermission (String.Empty);
125 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
126 foreach (string s in GoodSites) {
128 Assert.AreEqual (s, sip.Site, s);
133 public void Site_Bad ()
135 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
136 foreach (string s in BadSites) {
139 Assert.Fail (s + " isn't a bad site!");
141 catch (ArgumentException) {
142 // expected, continue looping
148 public void Site_InvalidChars ()
150 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
151 for (int i=0; i < 256; i++) {
153 sip.Site = String.Empty + (char) i;
155 catch (ArgumentException) {
156 Console.WriteLine ("{0} is bad", i);
162 [ExpectedException (typeof (ArgumentException))]
163 public void Site_Null ()
165 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
172 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
173 foreach (string s in GoodSites) {
175 SiteIdentityPermission copy = (SiteIdentityPermission)sip.Copy ();
176 Assert.AreEqual (s, copy.Site, s);
181 public void Intersect_Null ()
183 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
184 // No intersection with null
185 foreach (string s in GoodSites) {
187 Assert.IsNull (sip.Intersect (null), s);
192 public void Intersect_None ()
194 SiteIdentityPermission sip1 = new SiteIdentityPermission (PermissionState.None);
195 SiteIdentityPermission sip2 = new SiteIdentityPermission (PermissionState.None);
196 SiteIdentityPermission result = (SiteIdentityPermission)sip1.Intersect (sip2);
197 Assert.IsNull (result, "None N None");
198 foreach (string s in GoodSites) {
200 // 1. Intersect None with site
201 result = (SiteIdentityPermission)sip1.Intersect (sip2);
202 Assert.IsNull (result, "None N " + s);
203 // 2. Intersect site with None
204 result = (SiteIdentityPermission)sip2.Intersect (sip1);
205 Assert.IsNull (result, s + "N None");
210 public void Intersect_Self ()
212 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
213 foreach (string s in GoodSites) {
215 SiteIdentityPermission result = (SiteIdentityPermission)sip.Intersect (sip);
216 Assert.AreEqual (s, result.Site, s);
221 public void Intersect_Different ()
223 SiteIdentityPermission sip1 = new SiteIdentityPermission (GoodSites [0]);
224 SiteIdentityPermission sip2 = new SiteIdentityPermission (GoodSites [1]);
225 SiteIdentityPermission result = (SiteIdentityPermission)sip1.Intersect (sip2);
226 Assert.IsNull (result, "Mono N Novell");
230 public void IsSubset_Null ()
232 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
233 Assert.IsTrue (sip.IsSubsetOf (null), "Empty");
234 foreach (string s in GoodSites) {
236 Assert.IsFalse (sip.IsSubsetOf (null), s);
241 public void IsSubset_None ()
243 // IsSubset with none
244 // a. source (this) is none -> target is never a subset
245 SiteIdentityPermission sip1 = new SiteIdentityPermission (PermissionState.None);
246 SiteIdentityPermission sip2 = new SiteIdentityPermission (PermissionState.None);
247 foreach (string s in GoodSites) {
249 Assert.IsFalse (sip1.IsSubsetOf (sip2), "target " + s);
251 sip1 = new SiteIdentityPermission (PermissionState.None);
252 // b. destination (target) is none -> target is always a subset
253 foreach (string s in GoodSites) {
255 Assert.IsFalse (sip2.IsSubsetOf (sip1), "source " + s);
260 public void IsSubset_Self ()
262 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
263 Assert.IsTrue (sip.IsSubsetOf (sip), "None");
264 foreach (string s in GoodSites) {
266 Assert.IsTrue (sip.IsSubsetOf (sip), s);
271 public void IsSubset_Different ()
273 SiteIdentityPermission sip1 = new SiteIdentityPermission (GoodSites [0]);
274 SiteIdentityPermission sip2 = new SiteIdentityPermission (GoodSites [1]);
275 Assert.IsFalse (sip1.IsSubsetOf (sip2), "Mono subset Novell");
276 Assert.IsFalse (sip2.IsSubsetOf (sip1), "Novell subset Mono");
280 public void IsSubset_Wildcard ()
282 SiteIdentityPermission sip1 = new SiteIdentityPermission (GoodSites [0]);
283 SiteIdentityPermission sip2 = new SiteIdentityPermission ("*.mono-project.com");
284 Assert.IsTrue (sip1.IsSubsetOf (sip2), "www.mono-project.com subset *.mono-project.com");
285 Assert.IsFalse (sip2.IsSubsetOf (sip1), "*.mono-project.com subset www.mono-project.com");
289 public void Union_Null ()
291 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
292 // Union with null is a simple copy
293 foreach (string s in GoodSites) {
295 SiteIdentityPermission union = (SiteIdentityPermission)sip.Union (null);
296 Assert.AreEqual (s, union.Site, s);
301 public void Union_None ()
303 // Union with none is same
304 SiteIdentityPermission sip1 = new SiteIdentityPermission (PermissionState.None);
305 SiteIdentityPermission sip2 = new SiteIdentityPermission (PermissionState.None);
306 // a. source (this) is none
307 foreach (string s in GoodSites) {
309 SiteIdentityPermission union = (SiteIdentityPermission)sip1.Union (sip2);
310 Assert.AreEqual (s, union.Site, s);
312 sip1 = new SiteIdentityPermission (PermissionState.None);
313 // b. destination (target) is none
314 foreach (string s in GoodSites) {
316 SiteIdentityPermission union = (SiteIdentityPermission)sip2.Union (sip1);
317 Assert.AreEqual (s, union.Site, s);
321 [Category ("NotWorking")]
324 public void Union_Self ()
326 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
327 SiteIdentityPermission union = (SiteIdentityPermission)sip.Union (sip);
329 Assert.IsNull (union, "None U None");
331 Assert.IsNotNull (union, "None U None"); // can't get null Site property
332 foreach (string s in GoodSites) {
334 union = (SiteIdentityPermission)sip.Union (sip);
335 Assert.AreEqual (s, union.Site, s);
340 [Category ("NotWorking")]
343 public void Union_Different ()
345 SiteIdentityPermission sip1 = new SiteIdentityPermission (GoodSites [0]);
346 SiteIdentityPermission sip2 = new SiteIdentityPermission (GoodSites [1]);
347 SiteIdentityPermission result = (SiteIdentityPermission)sip1.Union (sip2);
349 Assert.IsNotNull (result, "Mono U Novell");
350 // new XML format is used to contain more than one site
351 SecurityElement se = result.ToXml ();
352 Assert.AreEqual (2, se.Children.Count, "Childs");
353 Assert.AreEqual ((se.Children [0] as SecurityElement).Attribute ("Site"), sip1.Site, "Site#1");
354 Assert.AreEqual ((se.Children [1] as SecurityElement).Attribute ("Site"), sip2.Site, "Site#2");
355 // strangely it is still versioned as 'version="1"'.
356 Assert.AreEqual ("1", se.Attribute ("version"), "Version");
358 // It's null for FX 1.0 and 1.1
359 Assert.IsNull (result, "Mono U Novell");
364 [Category ("NotWorking")]
365 [ExpectedException (typeof (NotSupportedException))]
366 public void Union_Different_Site ()
368 SiteIdentityPermission sip1 = new SiteIdentityPermission (GoodSites [0]);
369 SiteIdentityPermission sip2 = new SiteIdentityPermission (GoodSites [1]);
370 SiteIdentityPermission result = (SiteIdentityPermission)sip1.Union (sip2);
371 // it's not possible to return many sites using the Site property so it throws
372 Assert.IsNull (result.Site);
376 [ExpectedException (typeof (ArgumentNullException))]
377 public void FromXml_Null ()
379 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
384 [ExpectedException (typeof (ArgumentException))]
385 public void FromXml_WrongTag ()
387 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
388 SecurityElement se = sip.ToXml ();
394 [ExpectedException (typeof (ArgumentException))]
395 public void FromXml_WrongTagCase ()
397 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
398 SecurityElement se = sip.ToXml ();
399 se.Tag = "IPERMISSION"; // instead of IPermission
404 public void FromXml_WrongClass ()
406 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
407 SecurityElement se = sip.ToXml ();
409 SecurityElement w = new SecurityElement (se.Tag);
410 w.AddAttribute ("class", "Wrong" + se.Attribute ("class"));
411 w.AddAttribute ("version", se.Attribute ("version"));
413 // doesn't care of the class name at that stage
414 // anyway the class has already be created so...
418 public void FromXml_NoClass ()
420 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
421 SecurityElement se = sip.ToXml ();
423 SecurityElement w = new SecurityElement (se.Tag);
424 w.AddAttribute ("version", se.Attribute ("version"));
426 // doesn't even care of the class attribute presence
430 [ExpectedException (typeof (ArgumentException))]
431 public void FromXml_WrongVersion ()
433 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
434 SecurityElement se = sip.ToXml ();
435 se.Attributes.Remove ("version");
436 se.Attributes.Add ("version", "2");
441 public void FromXml_NoVersion ()
443 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
444 SecurityElement se = sip.ToXml ();
446 SecurityElement w = new SecurityElement (se.Tag);
447 w.AddAttribute ("class", se.Attribute ("class"));