MSTEST PrincipalPermission

.net, c#, mstest, security, unit-testing

Solution

How about creating a `GenericIdentity` and attaching that to the `Thread.CurrentPrincipal` in your test like so:

[TestMethod]
public void TestMethod1() 
{ 
    var identity = new GenericIdentity("tester");
    var roles = new[] { @"BUILTIN\Users" };
    var principal = new GenericPrincipal(identity, roles);
    Thread.CurrentPrincipal = principal;

    var c = new MyClass();
}

For a fail test, you could:

[TestMethod]
[ExpectedException(typeof(SecurityException))] // Or whatever it's called in MsTest
public void TestMethod1() 
{ 
    var identity = new GenericIdentity("tester");
    var roles = new[] { @"BUILTIN\NotUsers" };
    var principal = new GenericPrincipal(identity, roles);
    Thread.CurrentPrincipal = principal;

    var c = new MyClass();
}

Problem

How do you unit test code decorated with the PrincipalPermission attribute? For example, this works: ``` class Program { static void Main(string[] args) { AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); var c = new MyClass(); } } [PrincipalPermission(SecurityAction.Demand, Role = @"BUILTIN\Users")] class MyClass { public MyClass() { Console.WriteLine("This works."); } } ``` This throws a SecurityException: ``` [TestClass] public class UnitTest1 { [TestInitialize] public void TestInitialize() { AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); } [TestMethod] public void TestMethod1() { var c = new MyClass(); } } ``` Any ideas?

Original source