From 25a55bf367104f0c06bd38122df53acbf9f21643 Mon Sep 17 00:00:00 2001 From: Sebastien Pouliot Date: Wed, 14 Apr 2004 12:47:09 +0000 Subject: [PATCH] 2004-04-14 Sebastien Pouliot * WindowsIdentityTest.cs: Added reflection and serialization tests. svn path=/trunk/mcs/; revision=25467 --- .../Test/System.Security.Principal/ChangeLog | 4 ++ .../WindowsIdentityTest.cs | 45 +++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/mcs/class/corlib/Test/System.Security.Principal/ChangeLog b/mcs/class/corlib/Test/System.Security.Principal/ChangeLog index 6879b53483d..737ebf3baca 100644 --- a/mcs/class/corlib/Test/System.Security.Principal/ChangeLog +++ b/mcs/class/corlib/Test/System.Security.Principal/ChangeLog @@ -1,3 +1,7 @@ +2004-04-14 Sebastien Pouliot + + * WindowsIdentityTest.cs: Added reflection and serialization tests. + 2004-04-13 Sebastien Pouliot * WindowsIdentityTest.cs: Adjusted unit tests to run on both Windows diff --git a/mcs/class/corlib/Test/System.Security.Principal/WindowsIdentityTest.cs b/mcs/class/corlib/Test/System.Security.Principal/WindowsIdentityTest.cs index c436a611d73..3aef9fe639f 100755 --- a/mcs/class/corlib/Test/System.Security.Principal/WindowsIdentityTest.cs +++ b/mcs/class/corlib/Test/System.Security.Principal/WindowsIdentityTest.cs @@ -10,7 +10,10 @@ using NUnit.Framework; using System; +using System.IO; +using System.Reflection; using System.Runtime.Serialization; +using System.Runtime.Serialization.Formatters.Binary; using System.Security.Principal; namespace MonoTests.System.Security.Principal { @@ -175,5 +178,47 @@ namespace MonoTests.System.Security.Principal { AssertNotNull ("ISerializable", s); #endif } + + // This is clearly a hack - but I've seen it too many times so I think we + // better support it too :( + // http://dotnetjunkies.com/WebLog/chris.taylor/archive/2004/02/25/7945.aspx + public string[] GetWindowsIdentityRoles (WindowsIdentity identity) + { + object result = typeof(WindowsIdentity).InvokeMember ("_GetRoles", + BindingFlags.Static | BindingFlags.InvokeMethod | BindingFlags.NonPublic, + null, identity, new object[] {identity.Token}, null); + return (string[]) result; + } + + [Test] + public void GetRolesViaReflection () + { + WindowsIdentity wi = WindowsIdentity.GetCurrent (); + WindowsPrincipal wp = new WindowsPrincipal (wi); + string[] roles = GetWindowsIdentityRoles (wi); + foreach (string role in roles) { + // somehow I got a null in there ? + if (role != null) + Assert (role, wp.IsInRole (role)); + } + } + + [Test] + public void SerializeRoundTrip () + { + WindowsIdentity wi = WindowsIdentity.GetCurrent (); + MemoryStream ms = new MemoryStream (); + IFormatter formatter = new BinaryFormatter (); + formatter.Serialize (ms, wi); + ms.Position = 0; + WindowsIdentity back = (WindowsIdentity) formatter.Deserialize (ms); + AssertEquals ("AuthenticationType", wi.AuthenticationType, back.AuthenticationType); + AssertEquals ("IsAnonymous", wi.IsAnonymous, back.IsAnonymous); + AssertEquals ("IsAuthenticated", wi.IsAuthenticated, back.IsAuthenticated); + AssertEquals ("IsGuest", wi.IsGuest, back.IsGuest); + AssertEquals ("IsSystem", wi.IsSystem, back.IsSystem); + AssertEquals ("Name", wi.Name, back.Name); + // note: token may be different (no compare) + } } } -- 2.25.1