2 // ZoneIdentityPermissionTest.cs - NUnit Test Cases for ZoneIdentityPermission
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 namespace MonoTests.System.Security.Permissions {
37 public class ZoneIdentityPermissionTest {
40 public void PermissionStateNone ()
42 ZoneIdentityPermission zip = new ZoneIdentityPermission (PermissionState.None);
43 Assert.AreEqual (SecurityZone.NoZone, zip.SecurityZone);
47 [Category ("NotWorking")]
48 public void PermissionStateUnrestricted ()
50 // In 2.0 Unrestricted are permitted for identity permissions
51 ZoneIdentityPermission zip = new ZoneIdentityPermission (PermissionState.Unrestricted);
52 Assert.AreEqual (SecurityZone.NoZone, zip.SecurityZone);
53 SecurityElement se = zip.ToXml ();
54 Assert.AreEqual (5, se.Children.Count, "Count");
55 // and they aren't equals to None
56 Assert.IsFalse (zip.Equals (new ZoneIdentityPermission (PermissionState.None)));
60 [ExpectedException (typeof (ArgumentException))]
61 public void PermissionStateUnrestricted ()
63 ZoneIdentityPermission zip = new ZoneIdentityPermission (PermissionState.Unrestricted);
67 [ExpectedException (typeof (ArgumentException))]
68 public void PermissionStateInvalid ()
70 ZoneIdentityPermission zip = new ZoneIdentityPermission ((PermissionState)2);
73 private bool Same (ZoneIdentityPermission zip1, ZoneIdentityPermission zip2)
76 return zip1.Equals (zip2);
78 return (zip1.SecurityZone == zip2.SecurityZone);
82 private ZoneIdentityPermission BasicTestZone (SecurityZone zone, bool special)
84 ZoneIdentityPermission zip = new ZoneIdentityPermission (zone);
85 Assert.AreEqual (zone, zip.SecurityZone, "SecurityZone");
87 ZoneIdentityPermission copy = (ZoneIdentityPermission) zip.Copy ();
88 Assert.IsTrue (Same (zip, copy), "Equals-Copy");
89 Assert.IsTrue (zip.IsSubsetOf (copy), "IsSubset-1");
90 Assert.IsTrue (copy.IsSubsetOf (zip), "IsSubset-2");
92 Assert.IsFalse (zip.IsSubsetOf (null), "IsSubset-Null");
95 IPermission intersect = zip.Intersect (copy);
97 Assert.IsTrue (intersect.IsSubsetOf (zip), "IsSubset-3");
98 Assert.IsFalse (Object.ReferenceEquals (zip, intersect), "!ReferenceEquals1");
99 Assert.IsTrue (intersect.IsSubsetOf (copy), "IsSubset-4");
100 Assert.IsFalse (Object.ReferenceEquals (copy, intersect), "!ReferenceEquals2");
103 Assert.IsNull (zip.Intersect (null), "Intersect with null");
105 intersect = zip.Intersect (new ZoneIdentityPermission (PermissionState.None));
106 Assert.IsNull (intersect, "Intersect with PS.None");
108 // note: can't be tested with PermissionState.Unrestricted
111 SecurityElement se = zip.ToXml ();
113 Assert.IsTrue (Same (zip, copy), "Equals-Xml");
119 public void SecurityZone_Internet ()
121 BasicTestZone (SecurityZone.Internet, true);
125 public void SecurityZone_Intranet ()
127 BasicTestZone (SecurityZone.Intranet, true);
131 public void SecurityZone_MyComputer ()
133 BasicTestZone (SecurityZone.MyComputer, true);
137 public void SecurityZone_NoZone ()
139 ZoneIdentityPermission zip = BasicTestZone (SecurityZone.NoZone, false);
140 Assert.IsNull (zip.ToXml ().Attribute ("Zone"), "Zone Attribute");
141 Assert.IsTrue (zip.IsSubsetOf (null), "IsSubset-Null");
142 IPermission intersect = zip.Intersect (zip);
143 Assert.IsNull (intersect, "Intersect with No Zone");
144 // NoZone is special as it is a subset of all zones
145 ZoneIdentityPermission ss = new ZoneIdentityPermission (SecurityZone.Internet);
146 Assert.IsTrue (zip.IsSubsetOf (ss), "IsSubset-Internet");
147 ss.SecurityZone = SecurityZone.Intranet;
148 Assert.IsTrue (zip.IsSubsetOf (ss), "IsSubset-Intranet");
149 ss.SecurityZone = SecurityZone.MyComputer;
150 Assert.IsTrue (zip.IsSubsetOf (ss), "IsSubset-MyComputer");
151 ss.SecurityZone = SecurityZone.NoZone;
152 Assert.IsTrue (zip.IsSubsetOf (ss), "IsSubset-NoZone");
153 ss.SecurityZone = SecurityZone.Trusted;
154 Assert.IsTrue (zip.IsSubsetOf (ss), "IsSubset-Trusted");
155 ss.SecurityZone = SecurityZone.Untrusted;
156 Assert.IsTrue (zip.IsSubsetOf (ss), "IsSubset-Untrusted");
160 public void SecurityZone_Trusted ()
162 BasicTestZone (SecurityZone.Trusted, true);
166 public void SecurityZone_Untrusted ()
168 BasicTestZone (SecurityZone.Untrusted, true);
172 [ExpectedException (typeof (ArgumentException))]
173 public void SecurityZone_Invalid ()
175 ZoneIdentityPermission zip = new ZoneIdentityPermission ((SecurityZone)128);
179 [ExpectedException (typeof (ArgumentException))]
180 public void Intersect_DifferentPermissions ()
182 ZoneIdentityPermission a = new ZoneIdentityPermission (SecurityZone.Trusted);
183 SecurityPermission b = new SecurityPermission (PermissionState.None);
188 [ExpectedException (typeof (ArgumentException))]
189 public void IsSubsetOf_DifferentPermissions ()
191 ZoneIdentityPermission a = new ZoneIdentityPermission (SecurityZone.Trusted);
192 SecurityPermission b = new SecurityPermission (PermissionState.None);
199 ZoneIdentityPermission a = new ZoneIdentityPermission (SecurityZone.Trusted);
201 ZoneIdentityPermission z = (ZoneIdentityPermission) a.Union (null);
202 Assert.IsTrue (Same (a, z), "Trusted+null");
203 Assert.IsFalse (Object.ReferenceEquals (a, z), "!ReferenceEquals1");
205 z = (ZoneIdentityPermission) a.Union (new ZoneIdentityPermission (PermissionState.None));
206 Assert.IsTrue (Same (a, z), "Trusted+PS.None");
207 Assert.IsFalse (Object.ReferenceEquals (a, z), "!ReferenceEquals2");
209 // note: can't be tested with PermissionState.Unrestricted
211 ZoneIdentityPermission n = new ZoneIdentityPermission (SecurityZone.NoZone);
212 z = (ZoneIdentityPermission) a.Union (n);
213 Assert.IsTrue (Same (a, z), "Trusted+NoZone");
214 Assert.IsFalse (Object.ReferenceEquals (a, z), "!ReferenceEquals3");
216 z = (ZoneIdentityPermission) n.Union (a);
217 Assert.IsTrue (Same (a, z), "NoZone+Trusted");
218 Assert.IsFalse (Object.ReferenceEquals (a, z), "!ReferenceEquals4");
221 [Category ("NotWorking")]
224 public void Union_DifferentIdentities ()
226 ZoneIdentityPermission a = new ZoneIdentityPermission (SecurityZone.Trusted);
227 ZoneIdentityPermission b = new ZoneIdentityPermission (SecurityZone.Untrusted);
228 IPermission result = a.Union (b);
230 Assert.IsNotNull (result, "Union");
231 // new XML format is used to contain more than one site
232 SecurityElement se = result.ToXml ();
233 Assert.AreEqual (2, se.Children.Count, "Childs");
234 Assert.AreEqual (a.SecurityZone.ToString (), (se.Children [0] as SecurityElement).Attribute ("Zone"), "Zone#1");
235 Assert.AreEqual (b.SecurityZone.ToString (), (se.Children [1] as SecurityElement).Attribute ("Zone"), "Zone#2");
236 // strangely it is still versioned as 'version="1"'.
237 Assert.AreEqual ("1", se.Attribute ("version"), "Version");
239 Assert.IsNull (result);
244 [ExpectedException (typeof (ArgumentException))]
245 public void Union_DifferentPermissions ()
247 ZoneIdentityPermission a = new ZoneIdentityPermission (SecurityZone.Trusted);
248 SecurityPermission b = new SecurityPermission (PermissionState.None);
253 [ExpectedException (typeof (ArgumentNullException))]
254 public void FromXml_Null ()
256 ZoneIdentityPermission zip = new ZoneIdentityPermission (PermissionState.None);
261 [ExpectedException (typeof (ArgumentException))]
262 public void FromXml_WrongTag ()
264 ZoneIdentityPermission zip = new ZoneIdentityPermission (PermissionState.None);
265 SecurityElement se = zip.ToXml ();
266 se.Tag = "IMono"; // instead of IPermission
271 [ExpectedException (typeof (ArgumentException))]
272 public void FromXml_WrongTagCase ()
274 ZoneIdentityPermission zip = new ZoneIdentityPermission (PermissionState.None);
275 SecurityElement se = zip.ToXml ();
276 se.Tag = "IPERMISSION"; // instead of IPermission
281 public void FromXml_WrongClass ()
283 ZoneIdentityPermission zip = new ZoneIdentityPermission (PermissionState.None);
284 SecurityElement se = zip.ToXml ();
286 SecurityElement w = new SecurityElement (se.Tag);
287 w.AddAttribute ("class", "Wrong" + se.Attribute ("class"));
288 w.AddAttribute ("version", se.Attribute ("version"));
290 // doesn't care of the class name at that stage
291 // anyway the class has already be created so...
295 public void FromXml_NoClass ()
297 ZoneIdentityPermission zip = new ZoneIdentityPermission (PermissionState.None);
298 SecurityElement se = zip.ToXml ();
300 SecurityElement w = new SecurityElement (se.Tag);
301 w.AddAttribute ("version", se.Attribute ("version"));
303 // doesn't even care of the class attribute presence
307 [ExpectedException (typeof (ArgumentException))]
308 public void FromXml_WrongVersion ()
310 ZoneIdentityPermission zip = new ZoneIdentityPermission (PermissionState.None);
311 SecurityElement se = zip.ToXml ();
313 SecurityElement w = new SecurityElement (se.Tag);
314 w.AddAttribute ("class", se.Attribute ("class"));
315 w.AddAttribute ("version", "2");
320 public void FromXml_NoVersion ()
322 ZoneIdentityPermission zip = new ZoneIdentityPermission (PermissionState.None);
323 SecurityElement se = zip.ToXml ();
325 SecurityElement w = new SecurityElement (se.Tag);
326 w.AddAttribute ("class", se.Attribute ("class"));