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",
59 public void PermissionState_None ()
61 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
62 // Assert.IsNull (sip.Site, "Site");
64 SecurityElement se = sip.ToXml ();
65 // only class and version are present
66 Assert.AreEqual (2, se.Attributes.Count, "Xml-Attributes");
67 Assert.IsNull (se.Children, "Xml-Children");
69 SiteIdentityPermission copy = (SiteIdentityPermission)sip.Copy ();
70 Assert.IsFalse (Object.ReferenceEquals (sip, copy), "ReferenceEquals");
75 [ExpectedException (typeof (NullReferenceException))]
76 public void PermissionState_None_Site ()
78 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
79 Assert.IsNull (sip.Site, "Site");
83 [ExpectedException (typeof (ArgumentException))]
84 public void PermissionState_Unrestricted ()
86 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.Unrestricted);
90 [ExpectedException (typeof (ArgumentException))]
91 public void PermissionState_Bad ()
93 SiteIdentityPermission sip = new SiteIdentityPermission ((PermissionState)Int32.MinValue);
97 [ExpectedException (typeof (ArgumentException))]
98 public void SiteIdentityPermission_NullSite ()
100 SiteIdentityPermission sip = new SiteIdentityPermission (null);
106 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
107 foreach (string s in GoodSites) {
109 Assert.AreEqual (s, sip.Site, s);
114 public void Site_Bad ()
116 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
117 foreach (string s in BadSites) {
120 Assert.Fail (s + " isn't a bad site!");
122 catch (ArgumentException) {
123 // expected, continue looping
129 public void Site_InvalidChars ()
131 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
132 for (int i=0; i < 256; i++) {
134 sip.Site = String.Empty + (char) i;
136 catch (ArgumentException) {
137 Console.WriteLine ("{0} is bad", i);
143 [ExpectedException (typeof (ArgumentException))]
144 public void Site_Null ()
146 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
153 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
154 foreach (string s in GoodSites) {
156 SiteIdentityPermission copy = (SiteIdentityPermission)sip.Copy ();
157 Assert.AreEqual (s, copy.Site, s);
162 public void Intersect_Null ()
164 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
165 // No intersection with null
166 foreach (string s in GoodSites) {
168 Assert.IsNull (sip.Intersect (null), s);
173 public void Intersect_None ()
175 SiteIdentityPermission sip1 = new SiteIdentityPermission (PermissionState.None);
176 SiteIdentityPermission sip2 = new SiteIdentityPermission (PermissionState.None);
177 SiteIdentityPermission result = (SiteIdentityPermission)sip1.Intersect (sip2);
178 Assert.IsNull (result, "None N None");
179 foreach (string s in GoodSites) {
181 // 1. Intersect None with site
182 result = (SiteIdentityPermission)sip1.Intersect (sip2);
183 Assert.IsNull (result, "None N " + s);
184 // 2. Intersect site with None
185 result = (SiteIdentityPermission)sip2.Intersect (sip1);
186 Assert.IsNull (result, s + "N None");
191 public void Intersect_Self ()
193 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
194 foreach (string s in GoodSites) {
196 SiteIdentityPermission result = (SiteIdentityPermission)sip.Intersect (sip);
197 Assert.AreEqual (s, result.Site, s);
202 public void Intersect_Different ()
204 SiteIdentityPermission sip1 = new SiteIdentityPermission (GoodSites [0]);
205 SiteIdentityPermission sip2 = new SiteIdentityPermission (GoodSites [1]);
206 SiteIdentityPermission result = (SiteIdentityPermission)sip1.Intersect (sip2);
207 Assert.IsNull (result, "Mono N Novell");
211 public void IsSubset_Null ()
213 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
214 Assert.IsTrue (sip.IsSubsetOf (null), "Empty");
215 foreach (string s in GoodSites) {
217 Assert.IsFalse (sip.IsSubsetOf (null), s);
222 public void IsSubset_None ()
224 // IsSubset with none
225 // a. source (this) is none -> target is never a subset
226 SiteIdentityPermission sip1 = new SiteIdentityPermission (PermissionState.None);
227 SiteIdentityPermission sip2 = new SiteIdentityPermission (PermissionState.None);
228 foreach (string s in GoodSites) {
230 Assert.IsFalse (sip1.IsSubsetOf (sip2), "target " + s);
232 sip1 = new SiteIdentityPermission (PermissionState.None);
233 // b. destination (target) is none -> target is always a subset
234 foreach (string s in GoodSites) {
236 Assert.IsFalse (sip2.IsSubsetOf (sip1), "source " + s);
241 public void IsSubset_Self ()
243 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
244 Assert.IsTrue (sip.IsSubsetOf (sip), "None");
245 foreach (string s in GoodSites) {
247 Assert.IsTrue (sip.IsSubsetOf (sip), s);
252 public void IsSubset_Different ()
254 SiteIdentityPermission sip1 = new SiteIdentityPermission (GoodSites [0]);
255 SiteIdentityPermission sip2 = new SiteIdentityPermission (GoodSites [1]);
256 Assert.IsFalse (sip1.IsSubsetOf (sip2), "Mono subset Novell");
257 Assert.IsFalse (sip2.IsSubsetOf (sip1), "Novell subset Mono");
261 public void Union_Null ()
263 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
264 // Union with null is a simple copy
265 foreach (string s in GoodSites) {
267 SiteIdentityPermission union = (SiteIdentityPermission)sip.Union (null);
268 Assert.AreEqual (s, union.Site, s);
273 public void Union_None ()
275 // Union with none is same
276 SiteIdentityPermission sip1 = new SiteIdentityPermission (PermissionState.None);
277 SiteIdentityPermission sip2 = new SiteIdentityPermission (PermissionState.None);
278 // a. source (this) is none
279 foreach (string s in GoodSites) {
281 SiteIdentityPermission union = (SiteIdentityPermission)sip1.Union (sip2);
282 Assert.AreEqual (s, union.Site, s);
284 sip1 = new SiteIdentityPermission (PermissionState.None);
285 // b. destination (target) is none
286 foreach (string s in GoodSites) {
288 SiteIdentityPermission union = (SiteIdentityPermission)sip2.Union (sip1);
289 Assert.AreEqual (s, union.Site, s);
294 public void Union_Self ()
296 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
297 SiteIdentityPermission union = (SiteIdentityPermission)sip.Union (sip);
298 Assert.IsNotNull (union, "None U None"); // can't get null Site property
299 foreach (string s in GoodSites) {
301 union = (SiteIdentityPermission)sip.Union (sip);
302 Assert.AreEqual (s, union.Site, s);
308 [ExpectedException (typeof (ArgumentException))]
310 public void Union_Different ()
312 SiteIdentityPermission sip1 = new SiteIdentityPermission (GoodSites [0]);
313 SiteIdentityPermission sip2 = new SiteIdentityPermission (GoodSites [1]);
314 SiteIdentityPermission result = (SiteIdentityPermission)sip1.Union (sip2);
315 Assert.IsNull (result, "Mono U Novell");
319 [ExpectedException (typeof (ArgumentNullException))]
320 public void FromXml_Null ()
322 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
327 [ExpectedException (typeof (ArgumentException))]
328 public void FromXml_WrongTag ()
330 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
331 SecurityElement se = sip.ToXml ();
337 [ExpectedException (typeof (ArgumentException))]
338 public void FromXml_WrongTagCase ()
340 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
341 SecurityElement se = sip.ToXml ();
342 se.Tag = "IPERMISSION"; // instead of IPermission
347 public void FromXml_WrongClass ()
349 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
350 SecurityElement se = sip.ToXml ();
352 SecurityElement w = new SecurityElement (se.Tag);
353 w.AddAttribute ("class", "Wrong" + se.Attribute ("class"));
354 w.AddAttribute ("version", se.Attribute ("version"));
356 // doesn't care of the class name at that stage
357 // anyway the class has already be created so...
361 public void FromXml_NoClass ()
363 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
364 SecurityElement se = sip.ToXml ();
366 SecurityElement w = new SecurityElement (se.Tag);
367 w.AddAttribute ("version", se.Attribute ("version"));
369 // doesn't even care of the class attribute presence
373 [ExpectedException (typeof (ArgumentException))]
374 public void FromXml_WrongVersion ()
376 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
377 SecurityElement se = sip.ToXml ();
378 se.Attributes.Remove ("version");
379 se.Attributes.Add ("version", "2");
384 public void FromXml_NoVersion ()
386 SiteIdentityPermission sip = new SiteIdentityPermission (PermissionState.None);
387 SecurityElement se = sip.ToXml ();
389 SecurityElement w = new SecurityElement (se.Tag);
390 w.AddAttribute ("class", se.Attribute ("class"));