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
: Assertion
{
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 keyCurrentUserSubset
= @"HKEY_CURRENT_USER\Software\Novell iFolder\";
42 private static string keyLocalMachine
= @"HKEY_LOCAL_MACHINE\SOFTWARE\Novell\Novell iFolder\1.00.000";
43 private static string keyLocalMachineSubset
= @"HKEY_LOCAL_MACHINE\SOFTWARE\Novell\";
46 public void PermissionStateNone ()
48 RegistryPermission ep
= new RegistryPermission (PermissionState
.None
);
49 AssertNotNull ("RegistryPermission(PermissionState.None)", ep
);
50 Assert ("IsUnrestricted", !ep
.IsUnrestricted ());
51 RegistryPermission copy
= (RegistryPermission
)ep
.Copy ();
52 AssertEquals ("Copy.IsUnrestricted", ep
.IsUnrestricted (), copy
.IsUnrestricted ());
53 SecurityElement se
= ep
.ToXml ();
54 Assert ("ToXml-class", se
.Attribute ("class").StartsWith (className
));
55 AssertEquals ("ToXml-version", "1", se
.Attribute ("version"));
59 public void PermissionStateUnrestricted ()
61 RegistryPermission ep
= new RegistryPermission (PermissionState
.Unrestricted
);
62 AssertNotNull ("RegistryPermission(PermissionState.Unrestricted)", ep
);
63 Assert ("IsUnrestricted", ep
.IsUnrestricted ());
64 RegistryPermission copy
= (RegistryPermission
)ep
.Copy ();
65 AssertEquals ("Copy.IsUnrestricted", ep
.IsUnrestricted (), copy
.IsUnrestricted ());
66 SecurityElement se
= ep
.ToXml ();
67 AssertEquals ("ToXml-Unrestricted", "true", se
.Attribute ("Unrestricted"));
71 [ExpectedException (typeof (ArgumentNullException
))]
72 public void NullPathList ()
74 RegistryPermission ep
= new RegistryPermission (RegistryPermissionAccess
.AllAccess
, null);
78 public void AllAccess ()
80 RegistryPermission ep
= new RegistryPermission (RegistryPermissionAccess
.AllAccess
, keyLocalMachine
);
81 Assert ("IsUnrestricted", !ep
.IsUnrestricted ());
85 public void NoAccess ()
87 RegistryPermission ep
= new RegistryPermission (RegistryPermissionAccess
.NoAccess
, keyLocalMachine
);
88 Assert ("IsUnrestricted", !ep
.IsUnrestricted ());
92 public void CreateAccess ()
94 RegistryPermission ep
= new RegistryPermission (RegistryPermissionAccess
.Create
, keyLocalMachine
);
95 Assert ("IsUnrestricted", !ep
.IsUnrestricted ());
99 public void ReadAccess ()
101 RegistryPermission ep
= new RegistryPermission (RegistryPermissionAccess
.Read
, keyLocalMachine
);
102 Assert ("IsUnrestricted", !ep
.IsUnrestricted ());
106 public void WriteAccess ()
108 RegistryPermission ep
= new RegistryPermission (RegistryPermissionAccess
.Write
, keyLocalMachine
);
109 Assert ("IsUnrestricted", !ep
.IsUnrestricted ());
113 public void AddPathList ()
115 RegistryPermission ep
= new RegistryPermission (PermissionState
.None
);
116 ep
.AddPathList (RegistryPermissionAccess
.AllAccess
, keyLocalMachine
);
117 // LAMESPEC NoAccess do not remove the keyLocalMachine from AllAccess
118 ep
.AddPathList (RegistryPermissionAccess
.NoAccess
, keyLocalMachine
);
119 ep
.AddPathList (RegistryPermissionAccess
.Read
, keyCurrentUser
);
120 ep
.AddPathList (RegistryPermissionAccess
.Write
, keyCurrentUser
);
121 SecurityElement se
= ep
.ToXml ();
122 // Note: Debugger can mess results (try to run without stepping)
123 AssertEquals ("AddPathList-ToXml-Create", @"HKEY_LOCAL_MACHINE\SOFTWARE\Novell\Novell iFolder\1.00.000", se
.Attribute ("Create"));
124 AssertEquals ("AddPathList-ToXml-Read", @"HKEY_LOCAL_MACHINE\SOFTWARE\Novell\Novell iFolder\1.00.000;HKEY_CURRENT_USER\Software\Novell iFolder\spouliot\Home", se
.Attribute ("Read"));
125 AssertEquals ("AddPathList-ToXml-Write", @"HKEY_LOCAL_MACHINE\SOFTWARE\Novell\Novell iFolder\1.00.000;HKEY_CURRENT_USER\Software\Novell iFolder\spouliot\Home", se
.Attribute ("Write"));
129 public void AddPathList_Subset ()
131 RegistryPermission ep
= new RegistryPermission (PermissionState
.None
);
132 ep
.AddPathList (RegistryPermissionAccess
.AllAccess
, keyLocalMachine
);
133 ep
.AddPathList (RegistryPermissionAccess
.AllAccess
, keyLocalMachineSubset
);
134 SecurityElement se
= ep
.ToXml ();
135 AssertEquals ("AddPathList-ToXml-Create", keyLocalMachineSubset
, se
.Attribute ("Create"));
136 AssertEquals ("AddPathList-ToXml-Read", keyLocalMachineSubset
, se
.Attribute ("Read"));
137 AssertEquals ("AddPathList-ToXml-Write", keyLocalMachineSubset
, se
.Attribute ("Write"));
139 ep
= new RegistryPermission (PermissionState
.None
);
140 ep
.AddPathList (RegistryPermissionAccess
.AllAccess
, keyLocalMachine
);
141 ep
.AddPathList (RegistryPermissionAccess
.Create
, keyLocalMachineSubset
);
142 ep
.AddPathList (RegistryPermissionAccess
.Read
, keyCurrentUser
);
144 AssertEquals ("AddPathList-ToXml-Create", keyLocalMachineSubset
, se
.Attribute ("Create"));
145 AssertEquals ("AddPathList-ToXml-Read", keyLocalMachine
+ ";" + keyCurrentUser
, se
.Attribute ("Read"));
146 AssertEquals ("AddPathList-ToXml-Write", keyLocalMachine
, se
.Attribute ("Write"));
150 [ExpectedException (typeof (ArgumentException
))]
151 public void GetPathListAllAccess ()
153 RegistryPermission ep
= new RegistryPermission (PermissionState
.None
);
154 ep
.GetPathList (RegistryPermissionAccess
.AllAccess
);
158 [ExpectedException (typeof (ArgumentException
))]
159 public void GetPathListNoAccess ()
161 RegistryPermission ep
= new RegistryPermission (PermissionState
.None
);
162 ep
.AddPathList (RegistryPermissionAccess
.Read
, keyCurrentUser
);
163 ep
.AddPathList (RegistryPermissionAccess
.Write
, keyLocalMachine
);
164 AssertEquals ("GetPathList-NoAccess", String
.Empty
, ep
.GetPathList (RegistryPermissionAccess
.NoAccess
));
168 public void GetPathList ()
170 RegistryPermission ep
= new RegistryPermission (PermissionState
.None
);
172 AssertEquals ("GetPathList-Create-Empty", String
.Empty
, ep
.GetPathList (RegistryPermissionAccess
.Create
));
173 AssertEquals ("GetPathList-Read-Empty", String
.Empty
, ep
.GetPathList (RegistryPermissionAccess
.Read
));
174 AssertEquals ("GetPathList-Write-Empty", String
.Empty
, ep
.GetPathList (RegistryPermissionAccess
.Write
));
176 AssertNull ("GetPathList-Create-Empty", ep
.GetPathList (RegistryPermissionAccess
.Create
));
177 AssertNull ("GetPathList-Read-Empty", ep
.GetPathList (RegistryPermissionAccess
.Read
));
178 AssertNull ("GetPathList-Write-Empty", ep
.GetPathList (RegistryPermissionAccess
.Write
));
180 ep
.AddPathList (RegistryPermissionAccess
.Create
, keyLocalMachine
);
181 ep
.AddPathList (RegistryPermissionAccess
.Create
, keyCurrentUser
);
182 AssertEquals ("GetPathList-Read", keyLocalMachine
+ ";" + keyCurrentUser
, ep
.GetPathList (RegistryPermissionAccess
.Create
));
184 ep
.AddPathList (RegistryPermissionAccess
.Read
, keyLocalMachine
);
185 AssertEquals ("GetPathList-Read", keyLocalMachine
, ep
.GetPathList (RegistryPermissionAccess
.Read
));
187 ep
.AddPathList (RegistryPermissionAccess
.Write
, keyCurrentUser
);
188 AssertEquals ("GetPathList-Write", keyCurrentUser
, ep
.GetPathList (RegistryPermissionAccess
.Write
));
192 public void SetPathList ()
194 RegistryPermission ep
= new RegistryPermission (PermissionState
.None
);
195 ep
.SetPathList (RegistryPermissionAccess
.AllAccess
, keyLocalMachine
);
196 // LAMESPEC NoAccess do not remove the TMP from AllAccess
197 ep
.SetPathList (RegistryPermissionAccess
.NoAccess
, keyLocalMachine
);
198 ep
.SetPathList (RegistryPermissionAccess
.Read
, keyCurrentUser
);
199 ep
.SetPathList (RegistryPermissionAccess
.Write
, keyCurrentUser
);
200 SecurityElement se
= ep
.ToXml ();
201 AssertEquals ("SetPathList-ToXml-Read", keyCurrentUser
, se
.Attribute ("Read"));
202 AssertEquals ("SetPathList-ToXml-Write", keyCurrentUser
, se
.Attribute ("Write"));
206 [ExpectedException (typeof (ArgumentNullException
))]
207 public void FromXmlNull ()
209 RegistryPermission ep
= new RegistryPermission (PermissionState
.None
);
214 [ExpectedException (typeof (ArgumentException
))]
215 public void FromXmlInvalidPermission ()
217 RegistryPermission ep
= new RegistryPermission (PermissionState
.None
);
218 SecurityElement se
= ep
.ToXml ();
219 // can't modify - so we create our own
220 SecurityElement se2
= new SecurityElement ("IInvalidPermission", se
.Text
);
221 se2
.AddAttribute ("class", se
.Attribute ("class"));
222 se2
.AddAttribute ("version", se
.Attribute ("version"));
227 [ExpectedException (typeof (ArgumentException
))]
228 public void FromXmlWrongVersion ()
230 RegistryPermission ep
= new RegistryPermission (PermissionState
.None
);
231 SecurityElement se
= ep
.ToXml ();
232 // can't modify - so we create our own
233 SecurityElement se2
= new SecurityElement (se
.Tag
, se
.Text
);
234 se2
.AddAttribute ("class", se
.Attribute ("class"));
235 se2
.AddAttribute ("version", "2");
240 public void FromXml ()
242 RegistryPermission ep
= new RegistryPermission (PermissionState
.None
);
243 SecurityElement se
= ep
.ToXml ();
244 AssertNotNull ("ToXml()", se
);
246 se
.AddAttribute ("Read", keyLocalMachine
);
248 AssertEquals ("FromXml-Read", keyLocalMachine
, ep
.GetPathList (RegistryPermissionAccess
.Read
));
249 se
.AddAttribute ("Write", keyLocalMachine
);
251 AssertEquals ("FromXml-Read", keyLocalMachine
, ep
.GetPathList (RegistryPermissionAccess
.Read
));
252 AssertEquals ("FromXml-Write", keyLocalMachine
, ep
.GetPathList (RegistryPermissionAccess
.Write
));
253 se
.AddAttribute ("Create", keyCurrentUser
);
255 AssertEquals ("FromXml-Read", keyLocalMachine
, ep
.GetPathList (RegistryPermissionAccess
.Read
));
256 AssertEquals ("FromXml-Write", keyLocalMachine
, ep
.GetPathList (RegistryPermissionAccess
.Write
));
257 AssertEquals ("FromXml-Create", keyCurrentUser
, ep
.GetPathList (RegistryPermissionAccess
.Create
));
261 public void UnionWithNull ()
263 RegistryPermission ep1
= new RegistryPermission (RegistryPermissionAccess
.Read
, keyLocalMachine
);
264 RegistryPermission ep2
= null;
265 RegistryPermission ep3
= (RegistryPermission
)ep1
.Union (ep2
);
266 AssertEquals ("EP1 U null == EP1", ep1
.ToXml ().ToString (), ep3
.ToXml ().ToString ());
270 public void UnionWithUnrestricted ()
272 RegistryPermission ep1
= new RegistryPermission (PermissionState
.Unrestricted
);
273 RegistryPermission ep2
= new RegistryPermission (RegistryPermissionAccess
.Read
, keyLocalMachine
);
274 RegistryPermission ep3
= (RegistryPermission
)ep1
.Union (ep2
);
275 Assert ("Unrestricted U EP2 == Unrestricted", ep3
.IsUnrestricted ());
276 ep3
= (RegistryPermission
)ep2
.Union (ep1
);
277 Assert ("EP2 U Unrestricted == Unrestricted", ep3
.IsUnrestricted ());
283 RegistryPermission ep1
= new RegistryPermission (RegistryPermissionAccess
.Read
, keyLocalMachine
);
284 RegistryPermission ep2
= new RegistryPermission (RegistryPermissionAccess
.Write
, keyLocalMachine
);
285 RegistryPermission ep3
= new RegistryPermission (RegistryPermissionAccess
.Create
, keyLocalMachine
);
286 RegistryPermission ep4
= (RegistryPermission
)ep1
.Union (ep2
);
287 ep4
= (RegistryPermission
)ep4
.Union (ep3
);
288 RegistryPermission ep5
= new RegistryPermission (RegistryPermissionAccess
.AllAccess
, keyLocalMachine
);
289 AssertEquals ("EP1 U EP2 U EP3 == EP1+2+3", ep4
.ToXml ().ToString (), ep5
.ToXml ().ToString ());
293 public void Union_Subset ()
295 RegistryPermission ep1
= new RegistryPermission (RegistryPermissionAccess
.AllAccess
, keyLocalMachine
);
296 RegistryPermission ep2
= new RegistryPermission (RegistryPermissionAccess
.Create
, keyLocalMachineSubset
);
297 RegistryPermission ep3
= (RegistryPermission
)ep1
.Union (ep2
);
298 AssertEquals ("Create", keyLocalMachineSubset
, ep3
.GetPathList (RegistryPermissionAccess
.Create
));
299 AssertEquals ("Read", keyLocalMachine
, ep3
.GetPathList (RegistryPermissionAccess
.Read
));
300 AssertEquals ("Write", keyLocalMachine
, ep3
.GetPathList (RegistryPermissionAccess
.Write
));
304 [ExpectedException (typeof (ArgumentException
))]
305 public void UnionWithBadPermission ()
307 RegistryPermission ep1
= new RegistryPermission (RegistryPermissionAccess
.Read
, keyLocalMachine
);
308 FileDialogPermission fdp2
= new FileDialogPermission (PermissionState
.Unrestricted
);
309 RegistryPermission ep3
= (RegistryPermission
)ep1
.Union (fdp2
);
313 public void IntersectWithNull ()
315 RegistryPermission ep1
= new RegistryPermission (RegistryPermissionAccess
.Read
, keyLocalMachine
);
316 RegistryPermission ep2
= null;
317 RegistryPermission ep3
= (RegistryPermission
)ep1
.Intersect (ep2
);
318 AssertNull ("EP1 N null == null", ep3
);
322 public void IntersectWithUnrestricted ()
324 RegistryPermission ep1
= new RegistryPermission (PermissionState
.Unrestricted
);
325 RegistryPermission ep2
= new RegistryPermission (RegistryPermissionAccess
.Read
, keyLocalMachine
);
326 RegistryPermission ep3
= (RegistryPermission
)ep1
.Intersect (ep2
);
327 Assert ("Unrestricted N EP2 == EP2", !ep3
.IsUnrestricted ());
328 AssertEquals ("Unrestricted N EP2 == EP2", ep2
.ToXml ().ToString (), ep3
.ToXml ().ToString ());
329 ep3
= (RegistryPermission
)ep2
.Intersect (ep1
);
330 Assert ("EP2 N Unrestricted == EP2", !ep3
.IsUnrestricted ());
331 AssertEquals ("EP2 N Unrestricted == EP2", ep2
.ToXml ().ToString (), ep3
.ToXml ().ToString ());
335 public void Intersect ()
338 RegistryPermission ep1
= new RegistryPermission (RegistryPermissionAccess
.Write
, keyCurrentUser
);
339 RegistryPermission ep2
= new RegistryPermission (RegistryPermissionAccess
.Read
, keyLocalMachine
);
340 RegistryPermission ep3
= (RegistryPermission
)ep1
.Intersect (ep2
);
341 AssertNull ("EP1 N EP2 == null", ep3
);
342 // intersection in read
343 RegistryPermission ep4
= new RegistryPermission (RegistryPermissionAccess
.Read
, keyLocalMachine
);
344 ep3
= (RegistryPermission
)ep4
.Intersect (ep2
);
345 AssertEquals ("Intersect-Read", keyLocalMachine
, ep3
.GetPathList (RegistryPermissionAccess
.Read
));
346 // intersection in write
347 RegistryPermission ep5
= new RegistryPermission (RegistryPermissionAccess
.Write
, keyCurrentUser
);
348 ep3
= (RegistryPermission
)ep5
.Intersect (ep1
);
349 AssertEquals ("Intersect-Write", keyCurrentUser
, ep3
.GetPathList (RegistryPermissionAccess
.Write
));
350 // intersection in read and write
351 RegistryPermission ep6
= new RegistryPermission (RegistryPermissionAccess
.AllAccess
, keyLocalMachine
);
352 RegistryPermission ep7
= new RegistryPermission (RegistryPermissionAccess
.AllAccess
, keyLocalMachine
);
353 ep3
= (RegistryPermission
)ep6
.Intersect (ep7
);
354 AssertEquals ("Intersect-AllAccess-Create", keyLocalMachine
, ep3
.GetPathList (RegistryPermissionAccess
.Create
));
355 AssertEquals ("Intersect-AllAccess-Read", keyLocalMachine
, ep3
.GetPathList (RegistryPermissionAccess
.Read
));
356 AssertEquals ("Intersect-AllAccess-Write", keyLocalMachine
, ep3
.GetPathList (RegistryPermissionAccess
.Write
));
360 public void Intersect_Subset ()
362 RegistryPermission ep1
= new RegistryPermission (RegistryPermissionAccess
.AllAccess
, keyLocalMachine
);
363 RegistryPermission ep2
= new RegistryPermission (RegistryPermissionAccess
.Create
, keyLocalMachineSubset
);
364 RegistryPermission ep3
= (RegistryPermission
)ep1
.Intersect (ep2
);
365 AssertEquals ("Create", keyLocalMachine
, ep3
.GetPathList (RegistryPermissionAccess
.Create
));
366 AssertNull ("Read", ep3
.GetPathList (RegistryPermissionAccess
.Read
));
367 AssertNull ("Write", ep3
.GetPathList (RegistryPermissionAccess
.Write
));
371 [ExpectedException (typeof (ArgumentException
))]
372 public void IntersectWithBadPermission ()
374 RegistryPermission ep1
= new RegistryPermission (RegistryPermissionAccess
.Read
, keyLocalMachine
);
375 FileDialogPermission fdp2
= new FileDialogPermission (PermissionState
.Unrestricted
);
376 RegistryPermission ep3
= (RegistryPermission
)ep1
.Intersect (fdp2
);
380 public void IsSubsetOfNull ()
382 RegistryPermission ep1
= new RegistryPermission (RegistryPermissionAccess
.Read
, keyLocalMachine
);
383 Assert ("IsSubsetOf(null)", !ep1
.IsSubsetOf (null));
387 public void IsSubsetOfUnrestricted ()
389 RegistryPermission ep1
= new RegistryPermission (PermissionState
.Unrestricted
);
390 RegistryPermission ep2
= new RegistryPermission (RegistryPermissionAccess
.Read
, keyLocalMachine
);
391 RegistryPermission ep3
= new RegistryPermission (PermissionState
.Unrestricted
);
392 Assert ("Unrestricted.IsSubsetOf()", !ep1
.IsSubsetOf (ep2
));
393 Assert ("IsSubsetOf(Unrestricted)", ep2
.IsSubsetOf (ep1
));
394 Assert ("Unrestricted.IsSubsetOf(Unrestricted)", ep1
.IsSubsetOf (ep3
));
398 public void IsSubsetOf ()
400 RegistryPermission ep1
= new RegistryPermission (RegistryPermissionAccess
.Write
, keyLocalMachine
);
401 RegistryPermission ep2
= new RegistryPermission (RegistryPermissionAccess
.Read
, keyLocalMachine
);
402 Assert ("IsSubsetOf(nosubset1)", !ep1
.IsSubsetOf (ep2
));
403 Assert ("IsSubsetOf(nosubset2)", !ep2
.IsSubsetOf (ep1
));
404 RegistryPermission ep3
= new RegistryPermission (RegistryPermissionAccess
.AllAccess
, keyLocalMachine
);
405 Assert ("Write.IsSubsetOf(All)", ep1
.IsSubsetOf (ep3
));
406 Assert ("All.IsSubsetOf(Write)", !ep3
.IsSubsetOf (ep1
));
410 [ExpectedException (typeof (ArgumentException
))]
411 public void IsSubsetOfBadPermission ()
413 RegistryPermission ep1
= new RegistryPermission (RegistryPermissionAccess
.Read
, keyLocalMachine
);
414 FileDialogPermission fdp2
= new FileDialogPermission (PermissionState
.Unrestricted
);
415 Assert ("IsSubsetOf(FileDialogPermission)", ep1
.IsSubsetOf (fdp2
));