1 //
2 // PolicyStatementTest.cs - NUnit Test Cases for PolicyStatement
3 //
4 // Author:
5 //	Sebastien Pouliot  <sebastien@ximian.com>
6 //
7 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
8 //
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:
16 //
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 //
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.
27 //
28 
29 using NUnit.Framework;
30 using System;
31 using System.IO;
32 using System.Security;
33 using System.Security.Permissions;
34 using System.Security.Policy;
35 
36 namespace MonoTests.System.Security.Policy {
37 
38 	[TestFixture]
39 	public class PolicyStatementTest {
40 
41 		static PermissionSet Empty = new PermissionSet (PermissionState.None);
42 		static PermissionSet Unrestricted = new PermissionSet (PermissionState.Unrestricted);
43 
44 		[Test]
Constructor_PermissionSet_Null()45 		public void Constructor_PermissionSet_Null ()
46 		{
47 			PolicyStatement ps = new PolicyStatement (null);
48 			Assert.AreEqual (PolicyStatementAttribute.Nothing, ps.Attributes, "Attributes");
49 			Assert.AreEqual (String.Empty, ps.AttributeString, "AttributeString");
50 			Assert.AreEqual (Empty.ToString (), ps.PermissionSet.ToString (), "PermissionSet");
51 			Assert.AreEqual (ps.ToXml ().ToString (), ps.Copy ().ToXml ().ToString (), "Copy");
52 		}
53 
54 		[Test]
Constructor_PermissionSet_None()55 		public void Constructor_PermissionSet_None ()
56 		{
57 			PermissionSet pset = new PermissionSet (PermissionState.None);
58 			PolicyStatement ps = new PolicyStatement (pset);
59 			Assert.AreEqual (PolicyStatementAttribute.Nothing, ps.Attributes, "Attributes");
60 			Assert.AreEqual (String.Empty, ps.AttributeString, "AttributeString");
61 			Assert.AreEqual (Empty.ToString (), ps.PermissionSet.ToString (), "PermissionSet");
62 			Assert.AreEqual (ps.ToXml ().ToString (), ps.Copy ().ToXml ().ToString (), "Copy");
63 		}
64 
65 		[Test]
Constructor_PermissionSet_Unrestricted()66 		public void Constructor_PermissionSet_Unrestricted ()
67 		{
68 			PermissionSet pset = new PermissionSet (PermissionState.Unrestricted);
69 			PolicyStatement ps = new PolicyStatement (pset);
70 			Assert.AreEqual (PolicyStatementAttribute.Nothing, ps.Attributes, "Attributes");
71 			Assert.AreEqual (String.Empty, ps.AttributeString, "AttributeString");
72 			Assert.AreEqual (Unrestricted.ToString (), ps.PermissionSet.ToString (), "PermissionSet");
73 			Assert.AreEqual (ps.ToXml ().ToString (), ps.Copy ().ToXml ().ToString (), "Copy");
74 		}
75 
76 		[Test]
Constructor_PermissionSetPolicyStatementAttribute_Null()77 		public void Constructor_PermissionSetPolicyStatementAttribute_Null ()
78 		{
79 			PolicyStatement ps = new PolicyStatement (null, PolicyStatementAttribute.All);
80 			Assert.AreEqual (PolicyStatementAttribute.All, ps.Attributes, "Attributes");
81 			Assert.AreEqual ("Exclusive LevelFinal", ps.AttributeString, "AttributeString");
82 			Assert.AreEqual (Empty.ToString (), ps.PermissionSet.ToString (), "PermissionSet");
83 			Assert.AreEqual (ps.ToXml ().ToString (), ps.Copy ().ToXml ().ToString (), "Copy");
84 		}
85 
86 		[Test]
Constructor_Copy()87 		public void Constructor_Copy ()
88 		{
89 			PermissionSet original = new PermissionSet (PermissionState.None);
90 			PolicyStatement ps = new PolicyStatement (original, PolicyStatementAttribute.All);
91 			Assert.AreEqual (Empty.ToString (), ps.PermissionSet.ToString (), "PermissionSet");
92 			Assert.AreEqual (ps.ToXml ().ToString (), ps.Copy ().ToXml ().ToString (), "Copy");
93 
94 			original.AddPermission (new SecurityPermission (SecurityPermissionFlag.AllFlags));
95 			Assert.AreEqual (Empty.ToString (), ps.PermissionSet.ToString (), "PermissionSet");
96 			Assert.AreEqual (ps.ToXml ().ToString (), ps.Copy ().ToXml ().ToString (), "Copy");
97 		}
98 
99 		[Test]
100 		[ExpectedException (typeof (ArgumentException))]
Attribute_Invalid()101 		public void Attribute_Invalid ()
102 		{
103 			PolicyStatement ps = new PolicyStatement (null);
104 			ps.Attributes = (PolicyStatementAttribute)Int32.MinValue;
105 		}
106 
107 		[Test]
AttributeString()108 		public void AttributeString ()
109 		{
110 			PolicyStatement ps = new PolicyStatement (null);
111 			Assert.AreEqual (String.Empty, ps.AttributeString, "Nothing");
112 			ps.Attributes = PolicyStatementAttribute.LevelFinal;
113 			Assert.AreEqual ("LevelFinal", ps.AttributeString, "LevelFinal");
114 			ps.Attributes = PolicyStatementAttribute.Exclusive;
115 			Assert.AreEqual ("Exclusive", ps.AttributeString, "Exclusive");
116 			ps.Attributes = PolicyStatementAttribute.All;
117 			Assert.AreEqual ("Exclusive LevelFinal", ps.AttributeString, "All");
118 		}
119 
120 		[Test]
AddToPermissionSet()121 		public void AddToPermissionSet ()
122 		{
123 			PolicyStatement ps = new PolicyStatement (null);
124 			Assert.AreEqual (Empty.ToString (), ps.PermissionSet.ToString (), "Empty");
125 
126 			SecurityPermission sp = new SecurityPermission (SecurityPermissionFlag.Execution);
127 			IPermission p = ps.PermissionSet.AddPermission (sp);
128 			Assert.AreEqual (sp.ToXml ().ToString (), p.ToXml ().ToString (), "AddPermission");
129 
130 			// but nothing was added
131 			Assert.AreEqual (Empty.ToString (), ps.PermissionSet.ToString (), "Still Empty");
132 			// and (strangely) it's not considered a read-only permission set
133 			// as this property is always false for PermissionSet
134 			Assert.IsFalse (ps.PermissionSet.IsReadOnly, "IsReadOnly");
135 		}
136 
137 		[Test]
SetPermissionSet()138 		public void SetPermissionSet ()
139 		{
140 			PolicyStatement ps = new PolicyStatement (null);
141 			Assert.AreEqual (Empty.ToString (), ps.PermissionSet.ToString (), "Empty");
142 			ps.PermissionSet = new PermissionSet (PermissionState.Unrestricted);
143 			Assert.AreEqual (Unrestricted.ToString (), ps.PermissionSet.ToString (), "Unrestricted");
144 		}
145 
146 		[Test]
147 		[ExpectedException (typeof (ArgumentNullException))]
FromXml_Null()148 		public void FromXml_Null ()
149 		{
150 			PolicyStatement ps = new PolicyStatement (null);
151 			ps.FromXml (null);
152 		}
153 
154 		[Test]
155 #if MOBILE
156 		[Ignore]
157 #endif
158 		[ExpectedException (typeof (ArgumentNullException))]
FromXml_SecurityElementNull()159 		public void FromXml_SecurityElementNull ()
160 		{
161 			PolicyStatement ps = new PolicyStatement (null);
162 			ps.FromXml (null, PolicyLevel.CreateAppDomainLevel ());
163 		}
164 
165 		[Test]
166 		[ExpectedException (typeof (ArgumentException))]
FromXml_BadSecurityElement()167 		public void FromXml_BadSecurityElement ()
168 		{
169 			PolicyStatement ps = new PolicyStatement (null);
170 			ps.FromXml (new SecurityElement ("Bad"));
171 		}
172 
173 		[Test]
ToFromXml_PolicyLevelNull()174 		public void ToFromXml_PolicyLevelNull ()
175 		{
176 			PolicyStatement ps = new PolicyStatement (null);
177 			SecurityElement se = ps.ToXml (null);
178 			ps.FromXml (se, null);
179 		}
180 
181 		[Test]
ToFromXml_RoundTrip()182 		public void ToFromXml_RoundTrip ()
183 		{
184 			PolicyStatement ps1 = new PolicyStatement (Unrestricted, PolicyStatementAttribute.All);
185 			SecurityElement se = ps1.ToXml ();
186 
187 			PolicyStatement ps2 = new PolicyStatement (null);
188 			ps2.FromXml (se, null);
189 
190 			Assert.AreEqual (ps1.ToXml ().ToString (), ps2.ToXml ().ToString (), "Xml");
191 		}
192 		[Test]
193 		[Category ("NotWorking")]
Equals()194 		public void Equals ()
195 		{
196 			PolicyStatement empty1 = new PolicyStatement (null);
197 			PolicyStatement empty2 = new PolicyStatement (null);
198 			Assert.IsTrue (empty1.Equals (empty2), "empty1.Equals (empty2)");
199 			Assert.IsTrue (empty2.Equals (empty1), "empty2.Equals (empty1)");
200 			Assert.IsFalse (Object.ReferenceEquals (empty1, empty2), "!ReferenceEquals");
201 
202 			PolicyStatement unr1 = new PolicyStatement (Unrestricted, PolicyStatementAttribute.All);
203 			Assert.IsFalse (unr1.Equals (empty1), "unr1.Equals (empty1)");
204 			Assert.IsFalse (empty1.Equals (unr1), "empty1.Equals (unr1)");
205 
206 			PolicyStatement unr2 = new PolicyStatement (Unrestricted, PolicyStatementAttribute.Exclusive);
207 			Assert.IsFalse (unr1.Equals (unr2), "unr1.Equals (unr2)");
208 			Assert.IsFalse (unr2.Equals (unr1), "unr2.Equals (unr1)");
209 
210 			PolicyStatement unr3 = unr2.Copy ();
211 			Assert.IsTrue (unr3.Equals (unr2), "unr3.Equals (unr2)");
212 			Assert.IsTrue (unr2.Equals (unr3), "unr2.Equals (unr3)");
213 		}
214 	}
215 }
216