1 // ObjectSecurity_TTest.cs - NUnit Test Cases for ObjectSecurity<T>
2 //
3 // Authors:
4 //	James Bellinger (jfb@zer7.com)
5 
6 
7 using System;
8 using System.Security.AccessControl;
9 using System.Security.Principal;
10 using NUnit.Framework;
11 
12 namespace MonoTests.System.Security.AccessControl
13 {
14 	[TestFixture]
15 	public class ObjectSecurity_TTest
16 	{
17 		enum WillWorkRights
18 		{
19 			Value = 1
20 		}
21 
22 		class WillWorkSecurity : ObjectSecurity<WillWorkRights>
23 		{
WillWorkSecurity()24 			public WillWorkSecurity ()
25 				: base (false, ResourceType.Unknown)
26 			{
27 
28 			}
29 		}
30 
31 		struct WillFailRights
32 		{
33 
34 		}
35 
36 		class WillFailSecurity : ObjectSecurity<WillFailRights>
37 		{
WillFailSecurity()38 			public WillFailSecurity ()
39 				: base (false, ResourceType.Unknown)
40 			{
41 
42 			}
43 		}
44 
45 		[Test]
TypesAreCorrect()46 		public void TypesAreCorrect ()
47 		{
48 			WillWorkSecurity security = new WillWorkSecurity ();
49 			Assert.AreEqual (security.AccessRightType, typeof (WillWorkRights));
50 			Assert.AreEqual (security.AccessRuleType, typeof (AccessRule<WillWorkRights>));
51 			Assert.AreEqual (security.AuditRuleType, typeof (AuditRule<WillWorkRights>));
52 		}
53 
54 		[Test]
WillWorkOKUsingAccessFactory()55 		public void WillWorkOKUsingAccessFactory ()
56 		{
57 			WillWorkSecurity security = new WillWorkSecurity ();
58 			SecurityIdentifier id = new SecurityIdentifier (WellKnownSidType.WorldSid, null);
59 			AccessRule<WillWorkRights> rule = (AccessRule<WillWorkRights>)
60 				security.AccessRuleFactory (id, 1, false,
61 					InheritanceFlags.None, PropagationFlags.None,
62 					AccessControlType.Allow);
63 			Assert.AreEqual (rule.AccessControlType, AccessControlType.Allow);
64 			Assert.AreEqual (rule.IdentityReference, id);
65 			Assert.AreEqual (rule.InheritanceFlags, InheritanceFlags.None);
66 			Assert.AreEqual (rule.PropagationFlags, PropagationFlags.None);
67 			Assert.AreEqual (rule.Rights, WillWorkRights.Value);
68 		}
69 
70 		[Test]
WillWorkOKUsingConstructor()71 		public void WillWorkOKUsingConstructor()
72 		{
73 			SecurityIdentifier id = new SecurityIdentifier (WellKnownSidType.WorldSid, null);
74 			AccessRule<WillWorkRights> rule = new AccessRule<WillWorkRights> (id, WillWorkRights.Value,
75 											  AccessControlType.Allow);
76 			Assert.AreEqual (rule.AccessControlType, AccessControlType.Allow);
77 			Assert.AreEqual (rule.IdentityReference, id);
78 			Assert.AreEqual (rule.Rights, WillWorkRights.Value);
79 		}
80 
81 		[Test, ExpectedException (typeof (InvalidCastException))]
WillFailFailsUsingFactoryOnGetter()82 		public void WillFailFailsUsingFactoryOnGetter()
83 		{
84 			WillFailSecurity security = new WillFailSecurity ();
85 			SecurityIdentifier id = new SecurityIdentifier (WellKnownSidType.WorldSid, null);
86 			AccessRule<WillFailRights> rule = (AccessRule<WillFailRights>)
87 				security.AccessRuleFactory (id, 1, false,
88 					InheritanceFlags.None, PropagationFlags.None,
89 					AccessControlType.Allow);
90 			WillFailRights rights = rule.Rights;
91 		}
92 
93 		[Test, ExpectedException (typeof (InvalidCastException))]
WillFailFailsUsingConstructor()94 		public void WillFailFailsUsingConstructor()
95 		{
96 			SecurityIdentifier id = new SecurityIdentifier (WellKnownSidType.WorldSid, null);
97 			AccessRule<WillFailRights> rule = new AccessRule<WillFailRights> (id, new WillFailRights(),
98 											  AccessControlType.Allow);
99 		}
100 	}
101 }
102 
103 
104