2 // EnvironmentPermissionTest.cs - NUnit Test Cases for EnvironmentPermission
5 // Sebastien Pouliot <sebastien@ximian.com>
7 // (C) 2003 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.Security;
33 using System.Security.Permissions;
35 namespace MonoTests.System.Security.Permissions {
38 public class EnvironmentPermissionTest : Assertion {
40 private static string className = "System.Security.Permissions.EnvironmentPermission, ";
41 private static string envVariables = "TMP;TEMP";
44 public void PermissionStateNone ()
46 EnvironmentPermission ep = new EnvironmentPermission (PermissionState.None);
47 AssertNotNull ("EnvironmentPermission(PermissionState.None)", ep);
48 Assert ("IsUnrestricted", !ep.IsUnrestricted ());
49 EnvironmentPermission copy = (EnvironmentPermission) ep.Copy ();
50 AssertEquals ("Copy.IsUnrestricted", ep.IsUnrestricted (), copy.IsUnrestricted ());
51 SecurityElement se = ep.ToXml ();
52 Assert ("ToXml-class", (se.Attributes ["class"] as string).StartsWith (className));
53 AssertEquals ("ToXml-version", "1", (se.Attributes ["version"] as string));
57 public void PermissionStateUnrestricted ()
59 EnvironmentPermission ep = new EnvironmentPermission (PermissionState.Unrestricted);
60 AssertNotNull ("EnvironmentPermission(PermissionState.Unrestricted)", ep);
61 Assert ("IsUnrestricted", ep.IsUnrestricted ());
62 EnvironmentPermission copy = (EnvironmentPermission) ep.Copy ();
63 AssertEquals ("Copy.IsUnrestricted", ep.IsUnrestricted (), copy.IsUnrestricted ());
64 SecurityElement se = ep.ToXml ();
65 AssertEquals ("ToXml-Unrestricted", "true", (se.Attributes ["Unrestricted"] as string));
69 [ExpectedException (typeof (ArgumentNullException))]
70 public void NullPathList ()
72 EnvironmentPermission ep = new EnvironmentPermission (EnvironmentPermissionAccess.AllAccess, null);
76 public void AllAccess ()
78 EnvironmentPermission ep = new EnvironmentPermission (EnvironmentPermissionAccess.AllAccess, envVariables);
79 Assert ("IsUnrestricted", !ep.IsUnrestricted ());
83 public void NoAccess ()
85 EnvironmentPermission ep = new EnvironmentPermission (EnvironmentPermissionAccess.NoAccess, envVariables);
86 Assert ("IsUnrestricted", !ep.IsUnrestricted ());
90 public void ReadAccess ()
92 EnvironmentPermission ep = new EnvironmentPermission (EnvironmentPermissionAccess.Read, envVariables);
93 Assert ("IsUnrestricted", !ep.IsUnrestricted ());
97 public void WriteAccess ()
99 EnvironmentPermission ep = new EnvironmentPermission (EnvironmentPermissionAccess.Write, envVariables);
100 Assert ("IsUnrestricted", !ep.IsUnrestricted ());
104 public void AddPathList ()
106 EnvironmentPermission ep = new EnvironmentPermission (PermissionState.None);
107 ep.AddPathList (EnvironmentPermissionAccess.AllAccess, envVariables);
108 // LAMESPEC NoAccess do not remove the TMP from AllAccess
109 ep.AddPathList (EnvironmentPermissionAccess.NoAccess, "TMP");
110 ep.AddPathList (EnvironmentPermissionAccess.Read, "UID");
111 ep.AddPathList (EnvironmentPermissionAccess.Write, "PROMPT");
112 SecurityElement se = ep.ToXml ();
113 // Note: Debugger can mess results (try to run without stepping)
114 AssertEquals ("AddPathList-ToXml-Read", "TMP;TEMP;UID", (se.Attributes ["Read"] as string));
115 AssertEquals ("AddPathList-ToXml-Write", "TMP;TEMP;PROMPT", (se.Attributes ["Write"] as string));
119 [ExpectedException (typeof (ArgumentException))]
120 public void GetPathListAllAccess ()
122 EnvironmentPermission ep = new EnvironmentPermission (PermissionState.None);
123 ep.AddPathList (EnvironmentPermissionAccess.Read, "UID");
124 ep.AddPathList (EnvironmentPermissionAccess.Write, "PROMPT");
125 AssertEquals ("GetPathList-AllAccess", "", ep.GetPathList (EnvironmentPermissionAccess.AllAccess));
129 [ExpectedException (typeof (ArgumentException))]
130 public void GetPathListNoAccess ()
132 EnvironmentPermission ep = new EnvironmentPermission (PermissionState.None);
133 ep.AddPathList (EnvironmentPermissionAccess.Read, "UID");
134 ep.AddPathList (EnvironmentPermissionAccess.Write, "PROMPT");
135 AssertEquals ("GetPathList-NoAccess", "", ep.GetPathList (EnvironmentPermissionAccess.NoAccess));
139 public void GetPathList ()
141 EnvironmentPermission ep = new EnvironmentPermission (PermissionState.None);
143 AssertEquals ("GetPathList-Read-Empty", String.Empty, ep.GetPathList (EnvironmentPermissionAccess.Read));
144 AssertEquals ("GetPathList-Write-Empty", String.Empty, ep.GetPathList (EnvironmentPermissionAccess.Write));
146 AssertNull ("GetPathList-Read-Empty", ep.GetPathList (EnvironmentPermissionAccess.Read));
147 AssertNull ("GetPathList-Write-Empty", ep.GetPathList (EnvironmentPermissionAccess.Write));
149 ep.AddPathList (EnvironmentPermissionAccess.Read, "UID");
150 ep.AddPathList (EnvironmentPermissionAccess.Write, "PROMPT");
151 AssertEquals ("GetPathList-Read", "UID", ep.GetPathList (EnvironmentPermissionAccess.Read));
152 AssertEquals ("GetPathList-Write", "PROMPT", ep.GetPathList (EnvironmentPermissionAccess.Write));
156 public void SetPathList ()
158 EnvironmentPermission ep = new EnvironmentPermission (PermissionState.None);
159 ep.SetPathList (EnvironmentPermissionAccess.AllAccess, envVariables);
160 // LAMESPEC NoAccess do not remove the TMP from AllAccess
161 ep.SetPathList (EnvironmentPermissionAccess.NoAccess, "SYSTEMROOT");
162 ep.SetPathList (EnvironmentPermissionAccess.Read, "UID");
163 ep.SetPathList (EnvironmentPermissionAccess.Write, "PROMPT");
164 SecurityElement se = ep.ToXml ();
165 AssertEquals ("SetPathList-ToXml-Read", "UID", (se.Attributes ["Read"] as string));
166 AssertEquals ("SetPathList-ToXml-Write", "PROMPT", (se.Attributes ["Write"] as string));
170 [ExpectedException (typeof (ArgumentNullException))]
171 public void FromXmlNull ()
173 EnvironmentPermission ep = new EnvironmentPermission (PermissionState.None);
178 [ExpectedException (typeof (ArgumentException))]
179 public void FromXmlInvalidPermission ()
181 EnvironmentPermission ep = new EnvironmentPermission (PermissionState.None);
182 SecurityElement se = ep.ToXml ();
183 // can't modify - so we create our own
184 SecurityElement se2 = new SecurityElement ("IInvalidPermission", se.Text);
185 se2.AddAttribute ("class", se.Attribute ("class"));
186 se2.AddAttribute ("version", se.Attribute ("version"));
191 [ExpectedException (typeof (ArgumentException))]
192 public void FromXmlWrongVersion ()
194 EnvironmentPermission ep = new EnvironmentPermission (PermissionState.None);
195 SecurityElement se = ep.ToXml ();
196 // can't modify - so we create our own
197 SecurityElement se2 = new SecurityElement (se.Tag, se.Text);
198 se2.AddAttribute ("class", se.Attribute ("class"));
199 se2.AddAttribute ("version", "2");
204 public void FromXml ()
206 EnvironmentPermission ep = new EnvironmentPermission (PermissionState.None);
207 SecurityElement se = ep.ToXml ();
208 AssertNotNull ("ToXml()", se);
210 se.AddAttribute ("Read", envVariables);
212 AssertEquals ("FromXml-Read", envVariables, ep.GetPathList (EnvironmentPermissionAccess.Read));
213 se.AddAttribute ("Write", envVariables);
215 AssertEquals ("FromXml-Read", envVariables, ep.GetPathList (EnvironmentPermissionAccess.Read));
216 AssertEquals ("FromXml-Write", envVariables, ep.GetPathList (EnvironmentPermissionAccess.Write));
220 public void UnionWithNull ()
222 EnvironmentPermission ep1 = new EnvironmentPermission (EnvironmentPermissionAccess.Read, envVariables);
223 EnvironmentPermission ep2 = null;
224 EnvironmentPermission ep3 = (EnvironmentPermission) ep1.Union (ep2);
225 AssertEquals ("EP1 U null == EP1", ep1.ToXml ().ToString (), ep3.ToXml ().ToString ());
229 public void UnionWithUnrestricted ()
231 EnvironmentPermission ep1 = new EnvironmentPermission (PermissionState.Unrestricted);
232 EnvironmentPermission ep2 = new EnvironmentPermission (EnvironmentPermissionAccess.Read, envVariables);
233 EnvironmentPermission ep3 = (EnvironmentPermission) ep1.Union (ep2);
234 Assert ("Unrestricted U EP2 == Unrestricted", ep3.IsUnrestricted ());
235 ep3 = (EnvironmentPermission) ep2.Union (ep1);
236 Assert ("EP2 U Unrestricted == Unrestricted", ep3.IsUnrestricted ());
242 EnvironmentPermission ep1 = new EnvironmentPermission (EnvironmentPermissionAccess.Read, envVariables);
243 EnvironmentPermission ep2 = new EnvironmentPermission (EnvironmentPermissionAccess.Write, envVariables);
244 EnvironmentPermission ep3 = (EnvironmentPermission) ep1.Union (ep2);
245 EnvironmentPermission ep4 = new EnvironmentPermission (EnvironmentPermissionAccess.AllAccess, envVariables);
246 AssertEquals ("EP1 U EP2 == EP1+2", ep3.ToXml ().ToString (), ep4.ToXml ().ToString ());
250 [ExpectedException (typeof (ArgumentException))]
251 public void UnionWithBadPermission ()
253 EnvironmentPermission ep1 = new EnvironmentPermission (EnvironmentPermissionAccess.Read, envVariables);
254 FileDialogPermission fdp2 = new FileDialogPermission (PermissionState.Unrestricted);
255 EnvironmentPermission ep3 = (EnvironmentPermission) ep1.Union (fdp2);
259 public void IntersectWithNull ()
261 EnvironmentPermission ep1 = new EnvironmentPermission (EnvironmentPermissionAccess.Read, envVariables);
262 EnvironmentPermission ep2 = null;
263 EnvironmentPermission ep3 = (EnvironmentPermission) ep1.Intersect (ep2);
264 AssertNull ("EP1 N null == null", ep3);
268 public void IntersectWithUnrestricted ()
270 EnvironmentPermission ep1 = new EnvironmentPermission (PermissionState.Unrestricted);
271 EnvironmentPermission ep2 = new EnvironmentPermission (EnvironmentPermissionAccess.Read, envVariables);
272 EnvironmentPermission ep3 = (EnvironmentPermission) ep1.Intersect (ep2);
273 Assert ("Unrestricted N EP2 == EP2", !ep3.IsUnrestricted ());
274 AssertEquals ("Unrestricted N EP2 == EP2", ep2.ToXml ().ToString (), ep3.ToXml ().ToString ());
275 ep3 = (EnvironmentPermission) ep2.Intersect (ep1);
276 Assert ("EP2 N Unrestricted == EP2", !ep3.IsUnrestricted ());
277 AssertEquals ("EP2 N Unrestricted == EP2", ep2.ToXml ().ToString (), ep3.ToXml ().ToString ());
281 public void Intersect ()
284 EnvironmentPermission ep1 = new EnvironmentPermission (EnvironmentPermissionAccess.Write, envVariables);
285 EnvironmentPermission ep2 = new EnvironmentPermission (EnvironmentPermissionAccess.Read, envVariables);
286 EnvironmentPermission ep3 = (EnvironmentPermission) ep1.Intersect (ep2);
287 AssertNull ("EP1 N EP2 == null", ep3);
288 // intersection in read
289 EnvironmentPermission ep4 = new EnvironmentPermission (EnvironmentPermissionAccess.Read, "TMP");
290 ep3 = (EnvironmentPermission) ep4.Intersect (ep2);
291 AssertEquals ("Intersect-Read", "TMP", ep3.GetPathList (EnvironmentPermissionAccess.Read));
292 // intersection in write
293 EnvironmentPermission ep5 = new EnvironmentPermission (EnvironmentPermissionAccess.Write, "TEMP");
294 ep3 = (EnvironmentPermission) ep5.Intersect (ep1);
295 AssertEquals ("Intersect-Read", "TEMP", ep3.GetPathList (EnvironmentPermissionAccess.Write));
296 // intersection in read and write
297 EnvironmentPermission ep6 = new EnvironmentPermission (EnvironmentPermissionAccess.AllAccess, "TEMP");
298 EnvironmentPermission ep7 = new EnvironmentPermission (EnvironmentPermissionAccess.AllAccess, envVariables);
299 ep3 = (EnvironmentPermission) ep6.Intersect (ep7);
300 AssertEquals ("Intersect-AllAccess-Read", "TEMP", ep3.GetPathList (EnvironmentPermissionAccess.Read));
301 AssertEquals ("Intersect-AllAccess-Write", "TEMP", ep3.GetPathList (EnvironmentPermissionAccess.Write));
305 [ExpectedException (typeof (ArgumentException))]
306 public void IntersectWithBadPermission ()
308 EnvironmentPermission ep1 = new EnvironmentPermission (EnvironmentPermissionAccess.Read, envVariables);
309 FileDialogPermission fdp2 = new FileDialogPermission (PermissionState.Unrestricted);
310 EnvironmentPermission ep3 = (EnvironmentPermission) ep1.Intersect (fdp2);
314 public void IsSubsetOfNull ()
316 EnvironmentPermission ep1 = new EnvironmentPermission (EnvironmentPermissionAccess.Read, envVariables);
317 Assert ("IsSubsetOf(null)", !ep1.IsSubsetOf (null));
321 public void IsSubsetOfUnrestricted ()
323 EnvironmentPermission ep1 = new EnvironmentPermission (PermissionState.Unrestricted);
324 EnvironmentPermission ep2 = new EnvironmentPermission (EnvironmentPermissionAccess.Read, envVariables);
325 EnvironmentPermission ep3 = new EnvironmentPermission (PermissionState.Unrestricted);
326 Assert ("Unrestricted.IsSubsetOf()", !ep1.IsSubsetOf (ep2));
327 Assert ("IsSubsetOf(Unrestricted)", ep2.IsSubsetOf (ep1));
328 Assert ("Unrestricted.IsSubsetOf(Unrestricted)", ep1.IsSubsetOf (ep3));
332 public void IsSubsetOf ()
334 EnvironmentPermission ep1 = new EnvironmentPermission (EnvironmentPermissionAccess.Write, envVariables);
335 EnvironmentPermission ep2 = new EnvironmentPermission (EnvironmentPermissionAccess.Read, envVariables);
336 Assert ("IsSubsetOf(nosubset1)", !ep1.IsSubsetOf (ep2));
337 Assert ("IsSubsetOf(nosubset2)", !ep2.IsSubsetOf (ep1));
338 EnvironmentPermission ep3 = new EnvironmentPermission (EnvironmentPermissionAccess.Write, "TMP");
339 Assert ("IsSubsetOf(TMP)", !ep1.IsSubsetOf (ep3));
340 Assert ("TMP.IsSubsetOf()", ep3.IsSubsetOf (ep1));
344 [ExpectedException (typeof (ArgumentException))]
345 public void IsSubsetOfBadPermission ()
347 EnvironmentPermission ep1 = new EnvironmentPermission (EnvironmentPermissionAccess.Read, envVariables);
348 FileDialogPermission fdp2 = new FileDialogPermission (PermissionState.Unrestricted);
349 Assert ("IsSubsetOf(FileDialogPermission)", ep1.IsSubsetOf (fdp2));