2004-09-03 Sebastien Pouliot <sebastien@ximian.com>
authorSebastien Pouliot <sebastien@ximian.com>
Fri, 3 Sep 2004 18:30:47 +0000 (18:30 -0000)
committerSebastien Pouliot <sebastien@ximian.com>
Fri, 3 Sep 2004 18:30:47 +0000 (18:30 -0000)
* RegistryPermissionTest.cs: New. Unit tests for RegistryPermission.

svn path=/trunk/mcs/; revision=33306

mcs/class/corlib/Test/System.Security.Permissions/ChangeLog
mcs/class/corlib/Test/System.Security.Permissions/RegistryPermissionTest.cs [new file with mode: 0644]

index b2ecc5a593ae76e5321be28df2bfc1064bb0da36..2a32d5da1e963a2e362f6662f96104e95adc43fe 100644 (file)
@@ -1,5 +1,6 @@
 2004-09-03  Sebastien Pouliot  <sebastien@ximian.com>
 
+       * RegistryPermissionTest.cs: New. Unit tests for RegistryPermission.
        * UrlIdentityPermissionTest.cs: Added a test for Copy an empty object
        which results in a different behaviour in Fx 1.1 and 2.0.
 
diff --git a/mcs/class/corlib/Test/System.Security.Permissions/RegistryPermissionTest.cs b/mcs/class/corlib/Test/System.Security.Permissions/RegistryPermissionTest.cs
new file mode 100644 (file)
index 0000000..c9f687c
--- /dev/null
@@ -0,0 +1,373 @@
+//
+// RegistryPermissionTest.cs - NUnit Test Cases for RegistryPermission
+//
+// Author:
+//     Sebastien Pouliot  <sebastien@ximian.com>
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using NUnit.Framework;
+using System;
+using System.Security;
+using System.Security.Permissions;
+
+namespace MonoTests.System.Security.Permissions {
+
+       [TestFixture]
+       public class RegistryPermissionTest : Assertion {
+
+               private static string className = "System.Security.Permissions.RegistryPermission, ";
+               private static string keyCurrentUser = @"HKEY_CURRENT_USER\Software\Novell iFolder\spouliot\Home";
+               private static string keyLocalMachine = @"HKEY_LOCAL_MACHINE\SOFTWARE\Novell\Novell iFolder\1.00.000";
+
+               [Test]
+               public void PermissionStateNone ()
+               {
+                       RegistryPermission ep = new RegistryPermission (PermissionState.None);
+                       AssertNotNull ("RegistryPermission(PermissionState.None)", ep);
+                       Assert ("IsUnrestricted", !ep.IsUnrestricted ());
+                       RegistryPermission copy = (RegistryPermission)ep.Copy ();
+                       AssertEquals ("Copy.IsUnrestricted", ep.IsUnrestricted (), copy.IsUnrestricted ());
+                       SecurityElement se = ep.ToXml ();
+                       Assert ("ToXml-class", se.Attribute ("class").StartsWith (className));
+                       AssertEquals ("ToXml-version", "1", se.Attribute ("version"));
+               }
+
+               [Test]
+               public void PermissionStateUnrestricted ()
+               {
+                       RegistryPermission ep = new RegistryPermission (PermissionState.Unrestricted);
+                       AssertNotNull ("RegistryPermission(PermissionState.Unrestricted)", ep);
+                       Assert ("IsUnrestricted", ep.IsUnrestricted ());
+                       RegistryPermission copy = (RegistryPermission)ep.Copy ();
+                       AssertEquals ("Copy.IsUnrestricted", ep.IsUnrestricted (), copy.IsUnrestricted ());
+                       SecurityElement se = ep.ToXml ();
+                       AssertEquals ("ToXml-Unrestricted", "true", se.Attribute ("Unrestricted"));
+               }
+
+               [Test]
+               [ExpectedException (typeof (ArgumentNullException))]
+               public void NullPathList ()
+               {
+                       RegistryPermission ep = new RegistryPermission (RegistryPermissionAccess.AllAccess, null);
+               }
+
+               [Test]
+               public void AllAccess ()
+               {
+                       RegistryPermission ep = new RegistryPermission (RegistryPermissionAccess.AllAccess, keyLocalMachine);
+                       Assert ("IsUnrestricted", !ep.IsUnrestricted ());
+               }
+
+               [Test]
+               public void NoAccess ()
+               {
+                       RegistryPermission ep = new RegistryPermission (RegistryPermissionAccess.NoAccess, keyLocalMachine);
+                       Assert ("IsUnrestricted", !ep.IsUnrestricted ());
+               }
+
+               [Test]
+               public void CreateAccess ()
+               {
+                       RegistryPermission ep = new RegistryPermission (RegistryPermissionAccess.Create, keyLocalMachine);
+                       Assert ("IsUnrestricted", !ep.IsUnrestricted ());
+               }
+
+               [Test]
+               public void ReadAccess ()
+               {
+                       RegistryPermission ep = new RegistryPermission (RegistryPermissionAccess.Read, keyLocalMachine);
+                       Assert ("IsUnrestricted", !ep.IsUnrestricted ());
+               }
+
+               [Test]
+               public void WriteAccess ()
+               {
+                       RegistryPermission ep = new RegistryPermission (RegistryPermissionAccess.Write, keyLocalMachine);
+                       Assert ("IsUnrestricted", !ep.IsUnrestricted ());
+               }
+
+               [Test]
+               public void AddPathList ()
+               {
+                       RegistryPermission ep = new RegistryPermission (PermissionState.None);
+                       ep.AddPathList (RegistryPermissionAccess.AllAccess, keyLocalMachine);
+                       // LAMESPEC NoAccess do not remove the keyLocalMachine from AllAccess
+                       ep.AddPathList (RegistryPermissionAccess.NoAccess, keyLocalMachine);
+                       ep.AddPathList (RegistryPermissionAccess.Read, keyCurrentUser);
+                       ep.AddPathList (RegistryPermissionAccess.Write, keyCurrentUser);
+                       SecurityElement se = ep.ToXml ();
+                       // Note: Debugger can mess results (try to run without stepping)
+                       AssertEquals ("AddPathList-ToXml-Create", @"HKEY_LOCAL_MACHINE\SOFTWARE\Novell\Novell iFolder\1.00.000", se.Attribute ("Create"));
+                       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"));
+                       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"));
+               }
+
+               [Test]
+               [ExpectedException (typeof (ArgumentException))]
+               public void GetPathListAllAccess ()
+               {
+                       RegistryPermission ep = new RegistryPermission (PermissionState.None);
+                       ep.GetPathList (RegistryPermissionAccess.AllAccess);
+               }
+
+               [Test]
+               [ExpectedException (typeof (ArgumentException))]
+               public void GetPathListNoAccess ()
+               {
+                       RegistryPermission ep = new RegistryPermission (PermissionState.None);
+                       ep.AddPathList (RegistryPermissionAccess.Read, keyCurrentUser);
+                       ep.AddPathList (RegistryPermissionAccess.Write, keyLocalMachine);
+                       AssertEquals ("GetPathList-NoAccess", String.Empty, ep.GetPathList (RegistryPermissionAccess.NoAccess));
+               }
+
+               [Test]
+               public void GetPathList ()
+               {
+                       RegistryPermission ep = new RegistryPermission (PermissionState.None);
+#if NET_2_0
+                       AssertEquals ("GetPathList-Create-Empty", String.Empty, ep.GetPathList (RegistryPermissionAccess.Create));
+                       AssertEquals ("GetPathList-Read-Empty", String.Empty, ep.GetPathList (RegistryPermissionAccess.Read));
+                       AssertEquals ("GetPathList-Write-Empty", String.Empty, ep.GetPathList (RegistryPermissionAccess.Write));
+#else
+                       AssertNull ("GetPathList-Create-Empty", ep.GetPathList (RegistryPermissionAccess.Create));
+                       AssertNull ("GetPathList-Read-Empty", ep.GetPathList (RegistryPermissionAccess.Read));
+                       AssertNull ("GetPathList-Write-Empty", ep.GetPathList (RegistryPermissionAccess.Write));
+#endif
+                       ep.AddPathList (RegistryPermissionAccess.Create, keyLocalMachine);
+                       ep.AddPathList (RegistryPermissionAccess.Create, keyCurrentUser);
+                       AssertEquals ("GetPathList-Read", keyLocalMachine + ";" + keyCurrentUser, ep.GetPathList (RegistryPermissionAccess.Create));
+
+                       ep.AddPathList (RegistryPermissionAccess.Read, keyLocalMachine);
+                       AssertEquals ("GetPathList-Read", keyLocalMachine, ep.GetPathList (RegistryPermissionAccess.Read));
+
+                       ep.AddPathList (RegistryPermissionAccess.Write, keyCurrentUser);
+                       AssertEquals ("GetPathList-Write", keyCurrentUser, ep.GetPathList (RegistryPermissionAccess.Write));
+               }
+
+               [Test]
+               public void SetPathList ()
+               {
+                       RegistryPermission ep = new RegistryPermission (PermissionState.None);
+                       ep.SetPathList (RegistryPermissionAccess.AllAccess, keyLocalMachine);
+                       // LAMESPEC NoAccess do not remove the TMP from AllAccess
+                       ep.SetPathList (RegistryPermissionAccess.NoAccess, keyLocalMachine);
+                       ep.SetPathList (RegistryPermissionAccess.Read, keyCurrentUser);
+                       ep.SetPathList (RegistryPermissionAccess.Write, keyCurrentUser);
+                       SecurityElement se = ep.ToXml ();
+                       AssertEquals ("SetPathList-ToXml-Read", keyCurrentUser, se.Attribute ("Read"));
+                       AssertEquals ("SetPathList-ToXml-Write", keyCurrentUser, se.Attribute ("Write"));
+               }
+
+               [Test]
+               [ExpectedException (typeof (ArgumentNullException))]
+               public void FromXmlNull ()
+               {
+                       RegistryPermission ep = new RegistryPermission (PermissionState.None);
+                       ep.FromXml (null);
+               }
+
+               [Test]
+               [ExpectedException (typeof (ArgumentException))]
+               public void FromXmlInvalidPermission ()
+               {
+                       RegistryPermission ep = new RegistryPermission (PermissionState.None);
+                       SecurityElement se = ep.ToXml ();
+                       // can't modify - so we create our own
+                       SecurityElement se2 = new SecurityElement ("IInvalidPermission", se.Text);
+                       se2.AddAttribute ("class", se.Attribute ("class"));
+                       se2.AddAttribute ("version", se.Attribute ("version"));
+                       ep.FromXml (se2);
+               }
+
+               [Test]
+               [ExpectedException (typeof (ArgumentException))]
+               public void FromXmlWrongVersion ()
+               {
+                       RegistryPermission ep = new RegistryPermission (PermissionState.None);
+                       SecurityElement se = ep.ToXml ();
+                       // can't modify - so we create our own
+                       SecurityElement se2 = new SecurityElement (se.Tag, se.Text);
+                       se2.AddAttribute ("class", se.Attribute ("class"));
+                       se2.AddAttribute ("version", "2");
+                       ep.FromXml (se2);
+               }
+
+               [Test]
+               public void FromXml ()
+               {
+                       RegistryPermission ep = new RegistryPermission (PermissionState.None);
+                       SecurityElement se = ep.ToXml ();
+                       AssertNotNull ("ToXml()", se);
+                       ep.FromXml (se);
+                       se.AddAttribute ("Read", keyLocalMachine);
+                       ep.FromXml (se);
+                       AssertEquals ("FromXml-Read", keyLocalMachine, ep.GetPathList (RegistryPermissionAccess.Read));
+                       se.AddAttribute ("Write", keyLocalMachine);
+                       ep.FromXml (se);
+                       AssertEquals ("FromXml-Read", keyLocalMachine, ep.GetPathList (RegistryPermissionAccess.Read));
+                       AssertEquals ("FromXml-Write", keyLocalMachine, ep.GetPathList (RegistryPermissionAccess.Write));
+                       se.AddAttribute ("Create", keyCurrentUser);
+                       ep.FromXml (se);
+                       AssertEquals ("FromXml-Read", keyLocalMachine, ep.GetPathList (RegistryPermissionAccess.Read));
+                       AssertEquals ("FromXml-Write", keyLocalMachine, ep.GetPathList (RegistryPermissionAccess.Write));
+                       AssertEquals ("FromXml-Create", keyCurrentUser, ep.GetPathList (RegistryPermissionAccess.Create));
+               }
+
+               [Test]
+               public void UnionWithNull ()
+               {
+                       RegistryPermission ep1 = new RegistryPermission (RegistryPermissionAccess.Read, keyLocalMachine);
+                       RegistryPermission ep2 = null;
+                       RegistryPermission ep3 = (RegistryPermission)ep1.Union (ep2);
+                       AssertEquals ("EP1 U null == EP1", ep1.ToXml ().ToString (), ep3.ToXml ().ToString ());
+               }
+
+               [Test]
+               public void UnionWithUnrestricted ()
+               {
+                       RegistryPermission ep1 = new RegistryPermission (PermissionState.Unrestricted);
+                       RegistryPermission ep2 = new RegistryPermission (RegistryPermissionAccess.Read, keyLocalMachine);
+                       RegistryPermission ep3 = (RegistryPermission)ep1.Union (ep2);
+                       Assert ("Unrestricted U EP2 == Unrestricted", ep3.IsUnrestricted ());
+                       ep3 = (RegistryPermission)ep2.Union (ep1);
+                       Assert ("EP2 U Unrestricted == Unrestricted", ep3.IsUnrestricted ());
+               }
+
+               [Test]
+               public void Union ()
+               {
+                       RegistryPermission ep1 = new RegistryPermission (RegistryPermissionAccess.Read, keyLocalMachine);
+                       RegistryPermission ep2 = new RegistryPermission (RegistryPermissionAccess.Write, keyLocalMachine);
+                       RegistryPermission ep3 = new RegistryPermission (RegistryPermissionAccess.Create, keyLocalMachine);
+                       RegistryPermission ep4 = (RegistryPermission)ep1.Union (ep2);
+                       ep4 = (RegistryPermission)ep4.Union (ep3);
+                       RegistryPermission ep5 = new RegistryPermission (RegistryPermissionAccess.AllAccess, keyLocalMachine);
+                       AssertEquals ("EP1 U EP2 U EP3 == EP1+2+3", ep4.ToXml ().ToString (), ep5.ToXml ().ToString ());
+               }
+
+               [Test]
+               [ExpectedException (typeof (ArgumentException))]
+               public void UnionWithBadPermission ()
+               {
+                       RegistryPermission ep1 = new RegistryPermission (RegistryPermissionAccess.Read, keyLocalMachine);
+                       FileDialogPermission fdp2 = new FileDialogPermission (PermissionState.Unrestricted);
+                       RegistryPermission ep3 = (RegistryPermission)ep1.Union (fdp2);
+               }
+
+               [Test]
+               public void IntersectWithNull ()
+               {
+                       RegistryPermission ep1 = new RegistryPermission (RegistryPermissionAccess.Read, keyLocalMachine);
+                       RegistryPermission ep2 = null;
+                       RegistryPermission ep3 = (RegistryPermission)ep1.Intersect (ep2);
+                       AssertNull ("EP1 N null == null", ep3);
+               }
+
+               [Test]
+               public void IntersectWithUnrestricted ()
+               {
+                       RegistryPermission ep1 = new RegistryPermission (PermissionState.Unrestricted);
+                       RegistryPermission ep2 = new RegistryPermission (RegistryPermissionAccess.Read, keyLocalMachine);
+                       RegistryPermission ep3 = (RegistryPermission)ep1.Intersect (ep2);
+                       Assert ("Unrestricted N EP2 == EP2", !ep3.IsUnrestricted ());
+                       AssertEquals ("Unrestricted N EP2 == EP2", ep2.ToXml ().ToString (), ep3.ToXml ().ToString ());
+                       ep3 = (RegistryPermission)ep2.Intersect (ep1);
+                       Assert ("EP2 N Unrestricted == EP2", !ep3.IsUnrestricted ());
+                       AssertEquals ("EP2 N Unrestricted == EP2", ep2.ToXml ().ToString (), ep3.ToXml ().ToString ());
+               }
+
+               [Test]
+               public void Intersect ()
+               {
+                       // no intersection
+                       RegistryPermission ep1 = new RegistryPermission (RegistryPermissionAccess.Write, keyCurrentUser);
+                       RegistryPermission ep2 = new RegistryPermission (RegistryPermissionAccess.Read, keyLocalMachine);
+                       RegistryPermission ep3 = (RegistryPermission)ep1.Intersect (ep2);
+                       AssertNull ("EP1 N EP2 == null", ep3);
+                       // intersection in read
+                       RegistryPermission ep4 = new RegistryPermission (RegistryPermissionAccess.Read, keyLocalMachine);
+                       ep3 = (RegistryPermission)ep4.Intersect (ep2);
+                       AssertEquals ("Intersect-Read", keyLocalMachine, ep3.GetPathList (RegistryPermissionAccess.Read));
+                       // intersection in write
+                       RegistryPermission ep5 = new RegistryPermission (RegistryPermissionAccess.Write, keyCurrentUser);
+                       ep3 = (RegistryPermission)ep5.Intersect (ep1);
+                       AssertEquals ("Intersect-Write", keyCurrentUser, ep3.GetPathList (RegistryPermissionAccess.Write));
+                       // intersection in read and write
+                       RegistryPermission ep6 = new RegistryPermission (RegistryPermissionAccess.AllAccess, keyLocalMachine);
+                       RegistryPermission ep7 = new RegistryPermission (RegistryPermissionAccess.AllAccess, keyLocalMachine);
+                       ep3 = (RegistryPermission)ep6.Intersect (ep7);
+                       AssertEquals ("Intersect-AllAccess-Create", keyLocalMachine, ep3.GetPathList (RegistryPermissionAccess.Create));
+                       AssertEquals ("Intersect-AllAccess-Read", keyLocalMachine, ep3.GetPathList (RegistryPermissionAccess.Read));
+                       AssertEquals ("Intersect-AllAccess-Write", keyLocalMachine, ep3.GetPathList (RegistryPermissionAccess.Write));
+               }
+
+               [Test]
+               [ExpectedException (typeof (ArgumentException))]
+               public void IntersectWithBadPermission ()
+               {
+                       RegistryPermission ep1 = new RegistryPermission (RegistryPermissionAccess.Read, keyLocalMachine);
+                       FileDialogPermission fdp2 = new FileDialogPermission (PermissionState.Unrestricted);
+                       RegistryPermission ep3 = (RegistryPermission)ep1.Intersect (fdp2);
+               }
+
+               [Test]
+               public void IsSubsetOfNull ()
+               {
+                       RegistryPermission ep1 = new RegistryPermission (RegistryPermissionAccess.Read, keyLocalMachine);
+                       Assert ("IsSubsetOf(null)", !ep1.IsSubsetOf (null));
+               }
+
+               [Test]
+               public void IsSubsetOfUnrestricted ()
+               {
+                       RegistryPermission ep1 = new RegistryPermission (PermissionState.Unrestricted);
+                       RegistryPermission ep2 = new RegistryPermission (RegistryPermissionAccess.Read, keyLocalMachine);
+                       RegistryPermission ep3 = new RegistryPermission (PermissionState.Unrestricted);
+                       Assert ("Unrestricted.IsSubsetOf()", !ep1.IsSubsetOf (ep2));
+                       Assert ("IsSubsetOf(Unrestricted)", ep2.IsSubsetOf (ep1));
+                       Assert ("Unrestricted.IsSubsetOf(Unrestricted)", ep1.IsSubsetOf (ep3));
+               }
+
+               [Test]
+               public void IsSubsetOf ()
+               {
+                       RegistryPermission ep1 = new RegistryPermission (RegistryPermissionAccess.Write, keyLocalMachine);
+                       RegistryPermission ep2 = new RegistryPermission (RegistryPermissionAccess.Read, keyLocalMachine);
+                       Assert ("IsSubsetOf(nosubset1)", !ep1.IsSubsetOf (ep2));
+                       Assert ("IsSubsetOf(nosubset2)", !ep2.IsSubsetOf (ep1));
+                       RegistryPermission ep3 = new RegistryPermission (RegistryPermissionAccess.AllAccess, keyLocalMachine);
+                       Assert ("Write.IsSubsetOf(All)", ep1.IsSubsetOf (ep3));
+                       Assert ("All.IsSubsetOf(Write)", !ep3.IsSubsetOf (ep1));
+               }
+
+               [Test]
+               [ExpectedException (typeof (ArgumentException))]
+               public void IsSubsetOfBadPermission ()
+               {
+                       RegistryPermission ep1 = new RegistryPermission (RegistryPermissionAccess.Read, keyLocalMachine);
+                       FileDialogPermission fdp2 = new FileDialogPermission (PermissionState.Unrestricted);
+                       Assert ("IsSubsetOf(FileDialogPermission)", ep1.IsSubsetOf (fdp2));
+               }
+       }
+}