2 // RegistryPermissionTest.cs - NUnit Test Cases for RegistryPermission
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 RegistryPermissionTest {
39 private static string className = "System.Security.Permissions.RegistryPermission, ";
40 private static string keyCurrentUser = @"HKEY_CURRENT_USER\Software\Novell iFolder\spouliot\Home";
41 private static string keyLocalMachine = @"HKEY_LOCAL_MACHINE\SOFTWARE\Novell\Novell iFolder\1.00.000";
42 private static string keyLocalMachineSubset = @"HKEY_LOCAL_MACHINE\SOFTWARE\Novell\";
45 public void PermissionStateNone ()
47 RegistryPermission ep = new RegistryPermission (PermissionState.None);
48 Assert.IsNotNull (ep, "RegistryPermission(PermissionState.None)");
49 Assert.IsTrue (!ep.IsUnrestricted (), "IsUnrestricted");
50 RegistryPermission copy = (RegistryPermission)ep.Copy ();
51 Assert.AreEqual (ep.IsUnrestricted (), copy.IsUnrestricted (), "Copy.IsUnrestricted");
52 SecurityElement se = ep.ToXml ();
53 Assert.IsTrue (se.Attribute ("class").StartsWith (className), "ToXml-class");
54 Assert.AreEqual ("1", se.Attribute ("version"), "ToXml-version");
58 public void PermissionStateUnrestricted ()
60 RegistryPermission ep = new RegistryPermission (PermissionState.Unrestricted);
61 Assert.IsNotNull (ep, "RegistryPermission(PermissionState.Unrestricted)");
62 Assert.IsTrue (ep.IsUnrestricted (), "IsUnrestricted");
63 RegistryPermission copy = (RegistryPermission)ep.Copy ();
64 Assert.AreEqual (ep.IsUnrestricted (), copy.IsUnrestricted (), "Copy.IsUnrestricted");
65 SecurityElement se = ep.ToXml ();
66 Assert.AreEqual ("true", se.Attribute ("Unrestricted"), "ToXml-Unrestricted");
70 [ExpectedException (typeof (ArgumentNullException))]
71 public void NullPathList ()
73 RegistryPermission ep = new RegistryPermission (RegistryPermissionAccess.AllAccess, null);
77 public void AllAccess ()
79 RegistryPermission ep = new RegistryPermission (RegistryPermissionAccess.AllAccess, keyLocalMachine);
80 Assert.IsTrue (!ep.IsUnrestricted (), "IsUnrestricted");
84 public void NoAccess ()
86 RegistryPermission ep = new RegistryPermission (RegistryPermissionAccess.NoAccess, keyLocalMachine);
87 Assert.IsTrue (!ep.IsUnrestricted (), "IsUnrestricted");
91 public void CreateAccess ()
93 RegistryPermission ep = new RegistryPermission (RegistryPermissionAccess.Create, keyLocalMachine);
94 Assert.IsTrue (!ep.IsUnrestricted (), "IsUnrestricted");
98 public void ReadAccess ()
100 RegistryPermission ep = new RegistryPermission (RegistryPermissionAccess.Read, keyLocalMachine);
101 Assert.IsTrue (!ep.IsUnrestricted (), "IsUnrestricted");
105 public void WriteAccess ()
107 RegistryPermission ep = new RegistryPermission (RegistryPermissionAccess.Write, keyLocalMachine);
108 Assert.IsTrue (!ep.IsUnrestricted (), "IsUnrestricted");
112 public void AddPathList ()
114 RegistryPermission ep = new RegistryPermission (PermissionState.None);
115 ep.AddPathList (RegistryPermissionAccess.AllAccess, keyLocalMachine);
116 // LAMESPEC NoAccess do not remove the keyLocalMachine from AllAccess
117 ep.AddPathList (RegistryPermissionAccess.NoAccess, keyLocalMachine);
118 ep.AddPathList (RegistryPermissionAccess.Read, keyCurrentUser);
119 ep.AddPathList (RegistryPermissionAccess.Write, keyCurrentUser);
120 SecurityElement se = ep.ToXml ();
121 // Note: Debugger can mess results (try to run without stepping)
122 Assert.AreEqual (@"HKEY_LOCAL_MACHINE\SOFTWARE\Novell\Novell iFolder\1.00.000", se.Attribute ("Create"), "AddPathList-ToXml-Create");
123 Assert.AreEqual (@"HKEY_LOCAL_MACHINE\SOFTWARE\Novell\Novell iFolder\1.00.000;HKEY_CURRENT_USER\Software\Novell iFolder\spouliot\Home", se.Attribute ("Read"), "AddPathList-ToXml-Read");
124 Assert.AreEqual (@"HKEY_LOCAL_MACHINE\SOFTWARE\Novell\Novell iFolder\1.00.000;HKEY_CURRENT_USER\Software\Novell iFolder\spouliot\Home", se.Attribute ("Write"), "AddPathList-ToXml-Write");
128 public void AddPathList_Subset ()
130 RegistryPermission ep = new RegistryPermission (PermissionState.None);
131 ep.AddPathList (RegistryPermissionAccess.AllAccess, keyLocalMachine);
132 ep.AddPathList (RegistryPermissionAccess.AllAccess, keyLocalMachineSubset);
133 SecurityElement se = ep.ToXml ();
134 Assert.AreEqual (keyLocalMachineSubset, se.Attribute ("Create"), "AddPathList-ToXml-Create");
135 Assert.AreEqual (keyLocalMachineSubset, se.Attribute ("Read"), "AddPathList-ToXml-Read");
136 Assert.AreEqual (keyLocalMachineSubset, se.Attribute ("Write"), "AddPathList-ToXml-Write");
138 ep = new RegistryPermission (PermissionState.None);
139 ep.AddPathList (RegistryPermissionAccess.AllAccess, keyLocalMachine);
140 ep.AddPathList (RegistryPermissionAccess.Create, keyLocalMachineSubset);
141 ep.AddPathList (RegistryPermissionAccess.Read, keyCurrentUser);
143 Assert.AreEqual (keyLocalMachineSubset, se.Attribute ("Create"), "AddPathList-ToXml-Create");
144 Assert.AreEqual (keyLocalMachine + ";" + keyCurrentUser, se.Attribute ("Read"), "AddPathList-ToXml-Read");
145 Assert.AreEqual (keyLocalMachine, se.Attribute ("Write"), "AddPathList-ToXml-Write");
149 [ExpectedException (typeof (ArgumentException))]
150 public void GetPathListAllAccess ()
152 RegistryPermission ep = new RegistryPermission (PermissionState.None);
153 ep.GetPathList (RegistryPermissionAccess.AllAccess);
157 [ExpectedException (typeof (ArgumentException))]
158 public void GetPathListNoAccess ()
160 RegistryPermission ep = new RegistryPermission (PermissionState.None);
161 ep.AddPathList (RegistryPermissionAccess.Read, keyCurrentUser);
162 ep.AddPathList (RegistryPermissionAccess.Write, keyLocalMachine);
163 Assert.AreEqual (String.Empty, ep.GetPathList (RegistryPermissionAccess.NoAccess), "GetPathList-NoAccess");
167 public void GetPathList ()
169 RegistryPermission ep = new RegistryPermission (PermissionState.None);
170 Assert.AreEqual (String.Empty, ep.GetPathList (RegistryPermissionAccess.Create), "GetPathList-Create-Empty");
171 Assert.AreEqual (String.Empty, ep.GetPathList (RegistryPermissionAccess.Read), "GetPathList-Read-Empty");
172 Assert.AreEqual (String.Empty, ep.GetPathList (RegistryPermissionAccess.Write), "GetPathList-Write-Empty");
174 ep.AddPathList (RegistryPermissionAccess.Create, keyLocalMachine);
175 ep.AddPathList (RegistryPermissionAccess.Create, keyCurrentUser);
176 Assert.AreEqual (keyLocalMachine + ";" + keyCurrentUser, ep.GetPathList (RegistryPermissionAccess.Create), "GetPathList-Read");
178 ep.AddPathList (RegistryPermissionAccess.Read, keyLocalMachine);
179 Assert.AreEqual (keyLocalMachine, ep.GetPathList (RegistryPermissionAccess.Read), "GetPathList-Read");
181 ep.AddPathList (RegistryPermissionAccess.Write, keyCurrentUser);
182 Assert.AreEqual (keyCurrentUser, ep.GetPathList (RegistryPermissionAccess.Write), "GetPathList-Write");
186 public void SetPathList ()
188 RegistryPermission ep = new RegistryPermission (PermissionState.None);
189 ep.SetPathList (RegistryPermissionAccess.AllAccess, keyLocalMachine);
190 // LAMESPEC NoAccess do not remove the TMP from AllAccess
191 ep.SetPathList (RegistryPermissionAccess.NoAccess, keyLocalMachine);
192 ep.SetPathList (RegistryPermissionAccess.Read, keyCurrentUser);
193 ep.SetPathList (RegistryPermissionAccess.Write, keyCurrentUser);
194 SecurityElement se = ep.ToXml ();
195 Assert.AreEqual (keyCurrentUser, se.Attribute ("Read"), "SetPathList-ToXml-Read");
196 Assert.AreEqual (keyCurrentUser, se.Attribute ("Write"), "SetPathList-ToXml-Write");
200 [ExpectedException (typeof (ArgumentNullException))]
201 public void FromXmlNull ()
203 RegistryPermission ep = new RegistryPermission (PermissionState.None);
208 [ExpectedException (typeof (ArgumentException))]
209 public void FromXmlInvalidPermission ()
211 RegistryPermission ep = new RegistryPermission (PermissionState.None);
212 SecurityElement se = ep.ToXml ();
213 // can't modify - so we create our own
214 SecurityElement se2 = new SecurityElement ("IInvalidPermission", se.Text);
215 se2.AddAttribute ("class", se.Attribute ("class"));
216 se2.AddAttribute ("version", se.Attribute ("version"));
221 [ExpectedException (typeof (ArgumentException))]
222 public void FromXmlWrongVersion ()
224 RegistryPermission ep = new RegistryPermission (PermissionState.None);
225 SecurityElement se = ep.ToXml ();
226 // can't modify - so we create our own
227 SecurityElement se2 = new SecurityElement (se.Tag, se.Text);
228 se2.AddAttribute ("class", se.Attribute ("class"));
229 se2.AddAttribute ("version", "2");
233 [Category ("NotWorking")]
235 public void FromXml ()
237 RegistryPermission ep = new RegistryPermission (PermissionState.None);
238 SecurityElement se = ep.ToXml ();
239 Assert.IsNotNull (se, "ToXml()");
241 se.AddAttribute ("Read", keyLocalMachine);
243 Assert.AreEqual (keyLocalMachine, ep.GetPathList (RegistryPermissionAccess.Read), "FromXml-Read");
244 se.AddAttribute ("Write", keyLocalMachine);
246 Assert.AreEqual (keyLocalMachine, ep.GetPathList (RegistryPermissionAccess.Read), "FromXml-Read");
247 Assert.AreEqual (keyLocalMachine, ep.GetPathList (RegistryPermissionAccess.Write), "FromXml-Write");
248 se.AddAttribute ("Create", keyCurrentUser);
250 Assert.AreEqual (keyLocalMachine, ep.GetPathList (RegistryPermissionAccess.Read), "FromXml-Read");
251 Assert.AreEqual (keyLocalMachine, ep.GetPathList (RegistryPermissionAccess.Write), "FromXml-Write");
252 Assert.AreEqual (keyCurrentUser, ep.GetPathList (RegistryPermissionAccess.Create), "FromXml-Create");
256 public void UnionWithNull ()
258 RegistryPermission ep1 = new RegistryPermission (RegistryPermissionAccess.Read, keyLocalMachine);
259 RegistryPermission ep2 = null;
260 RegistryPermission ep3 = (RegistryPermission)ep1.Union (ep2);
261 Assert.AreEqual (ep1.ToXml ().ToString (), ep3.ToXml ().ToString (), "EP1 U null == EP1");
265 public void UnionWithUnrestricted ()
267 RegistryPermission ep1 = new RegistryPermission (PermissionState.Unrestricted);
268 RegistryPermission ep2 = new RegistryPermission (RegistryPermissionAccess.Read, keyLocalMachine);
269 RegistryPermission ep3 = (RegistryPermission)ep1.Union (ep2);
270 Assert.IsTrue (ep3.IsUnrestricted (), "Unrestricted U EP2 == Unrestricted");
271 ep3 = (RegistryPermission)ep2.Union (ep1);
272 Assert.IsTrue (ep3.IsUnrestricted (), "EP2 U Unrestricted == Unrestricted");
275 [Category ("NotWorking")]
279 RegistryPermission ep1 = new RegistryPermission (RegistryPermissionAccess.Read, keyLocalMachine);
280 RegistryPermission ep2 = new RegistryPermission (RegistryPermissionAccess.Write, keyLocalMachine);
281 RegistryPermission ep3 = new RegistryPermission (RegistryPermissionAccess.Create, keyLocalMachine);
282 RegistryPermission ep4 = (RegistryPermission)ep1.Union (ep2);
283 ep4 = (RegistryPermission)ep4.Union (ep3);
284 RegistryPermission ep5 = new RegistryPermission (RegistryPermissionAccess.AllAccess, keyLocalMachine);
285 Assert.AreEqual (ep4.ToXml ().ToString (), ep5.ToXml ().ToString (), "EP1 U EP2 U EP3 == EP1+2+3");
288 [Category ("NotWorking")]
290 public void Union_Subset ()
292 RegistryPermission ep1 = new RegistryPermission (RegistryPermissionAccess.AllAccess, keyLocalMachine);
293 RegistryPermission ep2 = new RegistryPermission (RegistryPermissionAccess.Create, keyLocalMachineSubset);
294 RegistryPermission ep3 = (RegistryPermission)ep1.Union (ep2);
295 Assert.AreEqual (keyLocalMachineSubset, ep3.GetPathList (RegistryPermissionAccess.Create), "Create");
296 Assert.AreEqual (keyLocalMachine, ep3.GetPathList (RegistryPermissionAccess.Read), "Read");
297 Assert.AreEqual (keyLocalMachine, ep3.GetPathList (RegistryPermissionAccess.Write), "Write");
301 [ExpectedException (typeof (ArgumentException))]
302 public void UnionWithBadPermission ()
304 RegistryPermission ep1 = new RegistryPermission (RegistryPermissionAccess.Read, keyLocalMachine);
305 FileDialogPermission fdp2 = new FileDialogPermission (PermissionState.Unrestricted);
306 RegistryPermission ep3 = (RegistryPermission)ep1.Union (fdp2);
310 public void IntersectWithNull ()
312 RegistryPermission ep1 = new RegistryPermission (RegistryPermissionAccess.Read, keyLocalMachine);
313 RegistryPermission ep2 = null;
314 RegistryPermission ep3 = (RegistryPermission)ep1.Intersect (ep2);
315 Assert.IsNull (ep3, "EP1 N null == null");
319 public void IntersectWithUnrestricted ()
321 RegistryPermission ep1 = new RegistryPermission (PermissionState.Unrestricted);
322 RegistryPermission ep2 = new RegistryPermission (RegistryPermissionAccess.Read, keyLocalMachine);
323 RegistryPermission ep3 = (RegistryPermission)ep1.Intersect (ep2);
324 Assert.IsTrue (!ep3.IsUnrestricted (), "Unrestricted N EP2 == EP2");
325 Assert.AreEqual (ep2.ToXml ().ToString (), ep3.ToXml ().ToString (), "Unrestricted N EP2 == EP2");
326 ep3 = (RegistryPermission)ep2.Intersect (ep1);
327 Assert.IsTrue (!ep3.IsUnrestricted (), "EP2 N Unrestricted == EP2");
328 Assert.AreEqual (ep2.ToXml ().ToString (), ep3.ToXml ().ToString (), "EP2 N Unrestricted == EP2");
332 public void Intersect ()
335 RegistryPermission ep1 = new RegistryPermission (RegistryPermissionAccess.Write, keyCurrentUser);
336 RegistryPermission ep2 = new RegistryPermission (RegistryPermissionAccess.Read, keyLocalMachine);
337 RegistryPermission ep3 = (RegistryPermission)ep1.Intersect (ep2);
338 Assert.IsNull (ep3, "EP1 N EP2 == null");
339 // intersection in read
340 RegistryPermission ep4 = new RegistryPermission (RegistryPermissionAccess.Read, keyLocalMachine);
341 ep3 = (RegistryPermission)ep4.Intersect (ep2);
342 Assert.AreEqual (keyLocalMachine, ep3.GetPathList (RegistryPermissionAccess.Read), "Intersect-Read");
343 // intersection in write
344 RegistryPermission ep5 = new RegistryPermission (RegistryPermissionAccess.Write, keyCurrentUser);
345 ep3 = (RegistryPermission)ep5.Intersect (ep1);
346 Assert.AreEqual (keyCurrentUser, ep3.GetPathList (RegistryPermissionAccess.Write), "Intersect-Write");
347 // intersection in read and write
348 RegistryPermission ep6 = new RegistryPermission (RegistryPermissionAccess.AllAccess, keyLocalMachine);
349 RegistryPermission ep7 = new RegistryPermission (RegistryPermissionAccess.AllAccess, keyLocalMachine);
350 ep3 = (RegistryPermission)ep6.Intersect (ep7);
351 Assert.AreEqual (keyLocalMachine, ep3.GetPathList (RegistryPermissionAccess.Create), "Intersect-AllAccess-Create");
352 Assert.AreEqual (keyLocalMachine, ep3.GetPathList (RegistryPermissionAccess.Read), "Intersect-AllAccess-Read");
353 Assert.AreEqual (keyLocalMachine, ep3.GetPathList (RegistryPermissionAccess.Write), "Intersect-AllAccess-Write");
356 [Category ("NotWorking")]
358 public void Intersect_Subset ()
360 RegistryPermission ep1 = new RegistryPermission (RegistryPermissionAccess.AllAccess, keyLocalMachine);
361 RegistryPermission ep2 = new RegistryPermission (RegistryPermissionAccess.Create, keyLocalMachineSubset);
362 RegistryPermission ep3 = (RegistryPermission)ep1.Intersect (ep2);
363 Assert.AreEqual (keyLocalMachine, ep3.GetPathList (RegistryPermissionAccess.Create), "Create");
364 Assert.IsNull (ep3.GetPathList (RegistryPermissionAccess.Read), "Read");
365 Assert.IsNull (ep3.GetPathList (RegistryPermissionAccess.Write), "Write");
369 [ExpectedException (typeof (ArgumentException))]
370 public void IntersectWithBadPermission ()
372 RegistryPermission ep1 = new RegistryPermission (RegistryPermissionAccess.Read, keyLocalMachine);
373 FileDialogPermission fdp2 = new FileDialogPermission (PermissionState.Unrestricted);
374 RegistryPermission ep3 = (RegistryPermission)ep1.Intersect (fdp2);
378 public void IsSubsetOfNull ()
380 RegistryPermission ep1 = new RegistryPermission (RegistryPermissionAccess.Read, keyLocalMachine);
381 Assert.IsTrue (!ep1.IsSubsetOf (null), "IsSubsetOf(null)");
385 public void IsSubsetOfUnrestricted ()
387 RegistryPermission ep1 = new RegistryPermission (PermissionState.Unrestricted);
388 RegistryPermission ep2 = new RegistryPermission (RegistryPermissionAccess.Read, keyLocalMachine);
389 RegistryPermission ep3 = new RegistryPermission (PermissionState.Unrestricted);
390 Assert.IsTrue (!ep1.IsSubsetOf (ep2), "Unrestricted.IsSubsetOf()");
391 Assert.IsTrue (ep2.IsSubsetOf (ep1), "IsSubsetOf(Unrestricted)");
392 Assert.IsTrue (ep1.IsSubsetOf (ep3), "Unrestricted.IsSubsetOf(Unrestricted)");
396 public void IsSubsetOf ()
398 RegistryPermission ep1 = new RegistryPermission (RegistryPermissionAccess.Write, keyLocalMachine);
399 RegistryPermission ep2 = new RegistryPermission (RegistryPermissionAccess.Read, keyLocalMachine);
400 Assert.IsTrue (!ep1.IsSubsetOf (ep2), "IsSubsetOf(nosubset1)");
401 Assert.IsTrue (!ep2.IsSubsetOf (ep1), "IsSubsetOf(nosubset2)");
402 RegistryPermission ep3 = new RegistryPermission (RegistryPermissionAccess.AllAccess, keyLocalMachine);
403 Assert.IsTrue (ep1.IsSubsetOf (ep3), "Write.IsSubsetOf(All)");
404 Assert.IsTrue (!ep3.IsSubsetOf (ep1), "All.IsSubsetOf(Write)");
408 [ExpectedException (typeof (ArgumentException))]
409 public void IsSubsetOfBadPermission ()
411 RegistryPermission ep1 = new RegistryPermission (RegistryPermissionAccess.Read, keyLocalMachine);
412 FileDialogPermission fdp2 = new FileDialogPermission (PermissionState.Unrestricted);
413 Assert.IsTrue (ep1.IsSubsetOf (fdp2), "IsSubsetOf(FileDialogPermission)");