1 //
2 // PermissionSetAttributeTest.cs - NUnit Test Cases for PermissionSetAttribute
3 //
4 // Author:
5 //	Sebastien Pouliot  <sebastien@ximian.com>
6 //
7 // (C) 2003 Motus Technologies Inc. (http://www.motus.com)
8 // Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com)
9 //
10 // Permission is hereby granted, free of charge, to any person obtaining
11 // a copy of this software and associated documentation files (the
12 // "Software"), to deal in the Software without restriction, including
13 // without limitation the rights to use, copy, modify, merge, publish,
14 // distribute, sublicense, and/or sell copies of the Software, and to
15 // permit persons to whom the Software is furnished to do so, subject to
16 // the following conditions:
17 //
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
20 //
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28 //
29 
30 using NUnit.Framework;
31 using System;
32 using System.Security;
33 using System.Security.Permissions;
34 
35 namespace MonoTests.System.Security.Permissions {
36 
37 	[TestFixture]
38 #if MOBILE
39 	[Ignore]
40 #endif
41 	public class PermissionSetAttributeTest {
42 
43 		[Test]
Default()44 		public void Default ()
45 		{
46 			PermissionSetAttribute a = new PermissionSetAttribute (SecurityAction.Assert);
47 			Assert.IsNull (a.File, "File");
48 			Assert.IsNull (a.Hex, "Hex");
49 			Assert.IsNull (a.Name, "Name");
50 			Assert.IsNull (a.XML, "XML");
51 			Assert.IsFalse (a.UnicodeEncoded, "UnicodeEncoded");
52 			Assert.AreEqual (a.ToString (), a.TypeId.ToString (), "TypeId");
53 			Assert.IsFalse (a.Unrestricted, "Unrestricted");
54 
55 			IPermission perm = a.CreatePermission ();
56 			Assert.IsNull (perm, "CreatePermission");
57 
58 			PermissionSet ps = a.CreatePermissionSet ();
59 			Assert.AreEqual (0, ps.Count, "CreatePermissionSet");
60 		}
61 
62 		[Test]
Action()63 		public void Action ()
64 		{
65 			PermissionSetAttribute a = new PermissionSetAttribute (SecurityAction.Assert);
66 			Assert.AreEqual (SecurityAction.Assert, a.Action, "Action=Assert");
67 			a.Action = SecurityAction.Demand;
68 			Assert.AreEqual (SecurityAction.Demand, a.Action, "Action=Demand");
69 			a.Action = SecurityAction.Deny;
70 			Assert.AreEqual (SecurityAction.Deny, a.Action, "Action=Deny");
71 			a.Action = SecurityAction.InheritanceDemand;
72 			Assert.AreEqual (SecurityAction.InheritanceDemand, a.Action, "Action=InheritanceDemand");
73 			a.Action = SecurityAction.LinkDemand;
74 			Assert.AreEqual (SecurityAction.LinkDemand, a.Action, "Action=LinkDemand");
75 			a.Action = SecurityAction.PermitOnly;
76 			Assert.AreEqual (SecurityAction.PermitOnly, a.Action, "Action=PermitOnly");
77 			a.Action = SecurityAction.RequestMinimum;
78 			Assert.AreEqual (SecurityAction.RequestMinimum, a.Action, "Action=RequestMinimum");
79 			a.Action = SecurityAction.RequestOptional;
80 			Assert.AreEqual (SecurityAction.RequestOptional, a.Action, "Action=RequestOptional");
81 			a.Action = SecurityAction.RequestRefuse;
82 			Assert.AreEqual (SecurityAction.RequestRefuse, a.Action, "Action=RequestRefuse");
83 		}
84 
85 		[Test]
Action_Invalid()86 		public void Action_Invalid ()
87 		{
88 			PermissionSetAttribute a = new PermissionSetAttribute ((SecurityAction)Int32.MinValue);
89 			// no validation in attribute
90 		}
91 
92 		[Test]
File()93 		public void File ()
94 		{
95 			PermissionSetAttribute a = new PermissionSetAttribute (SecurityAction.Assert);
96 			a.File = "mono";
97 			Assert.AreEqual ("mono", a.File, "File");
98 			Assert.IsNull (a.Hex, "Hex");
99 			Assert.IsNull (a.Name, "Name");
100 			Assert.IsNull (a.XML, "XML");
101 			a.File = null;
102 			Assert.IsNull (a.File, "File");
103 			Assert.IsNull (a.Hex, "Hex");
104 			Assert.IsNull (a.Name, "Name");
105 			Assert.IsNull (a.XML, "XML");
106 		}
107 
108 		[Test]
Hex()109 		public void Hex ()
110 		{
111 			PermissionSetAttribute a = new PermissionSetAttribute (SecurityAction.Assert);
112 			Assert.IsNull (a.Hex, "Hex-1");
113 			a.Hex = String.Empty;
114 			Assert.AreEqual (String.Empty, a.Hex, "Hex-2");
115 			a.Hex = null;
116 			Assert.IsNull (a.Hex, "Hex-3");
117 		}
118 
119 		[Test]
120 		[ExpectedException (typeof (ArgumentException))]
Hex_Bad()121 		public void Hex_Bad ()
122 		{
123 			PermissionSetAttribute a = new PermissionSetAttribute (SecurityAction.Assert);
124 			a.Hex = "g";
125 			Assert.AreEqual ("g", a.Hex, "Bad Hex");
126 			a.CreatePermissionSet ();
127 		}
128 
129 		[Test]
Hex_ASCII_Permission()130 		public void Hex_ASCII_Permission ()
131 		{
132 			SecurityPermission sp = new SecurityPermission (SecurityPermissionFlag.Assertion);
133 			PermissionSet ps = new PermissionSet (PermissionState.None);
134 			ps.AddPermission (sp);
135 
136 			PermissionSetAttribute a = new PermissionSetAttribute (SecurityAction.Assert);
137 			a.Hex = "3C5065726D697373696F6E53657420636C6173733D2253797374656D2E53656375726974792E5065726D697373696F6E536574220D0A76657273696F6E3D2231223E0D0A3C495065726D697373696F6E20636C6173733D2253797374656D2E53656375726974792E5065726D697373696F6E732E53656375726974795065726D697373696F6E2C206D73636F726C69622C2056657273696F6E3D322E302E333630302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D62373761356335363139333465303839220D0A76657273696F6E3D2231220D0A466C6167733D22417373657274696F6E222F3E0D0A3C2F5065726D697373696F6E5365743E0D0A";
138 			PermissionSet psa = a.CreatePermissionSet ();
139 			Assert.IsTrue (ps.Equals (psa), "HEX-ASCII");
140 		}
141 
142 		[Test]
143 		[ExpectedException (typeof (XmlSyntaxException))]
Hex_Unicode_Permission()144 		public void Hex_Unicode_Permission ()
145 		{
146 			SecurityPermission sp = new SecurityPermission (SecurityPermissionFlag.Assertion);
147 			PermissionSet ps = new PermissionSet (PermissionState.None);
148 			ps.AddPermission (sp);
149 
150 			PermissionSetAttribute a = new PermissionSetAttribute (SecurityAction.Assert);
151 			a.UnicodeEncoded = true;
152 
153 			a.Hex = "3C005000650072006D0069007300730069006F006E00530065007400200063006C006100730073003D002200530079007300740065006D002E00530065006300750072006900740079002E005000650072006D0069007300730069006F006E0053006500740022000D000A00760065007200730069006F006E003D002200310022003E000D000A003C0049005000650072006D0069007300730069006F006E00200063006C006100730073003D002200530079007300740065006D002E00530065006300750072006900740079002E005000650072006D0069007300730069006F006E0073002E00530065006300750072006900740079005000650072006D0069007300730069006F006E002C0020006D00730063006F0072006C00690062002C002000560065007200730069006F006E003D0032002E0030002E0033003600300030002E0030002C002000430075006C0074007500720065003D006E00650075007400720061006C002C0020005000750062006C00690063004B006500790054006F006B0065006E003D00620037003700610035006300350036003100390033003400650030003800390022000D000A00760065007200730069006F006E003D002200310022000D000A0046006C006100670073003D00220041007300730065007200740069006F006E0022002F003E000D000A003C002F005000650072006D0069007300730069006F006E005300650074003E000D000A00";
154 			PermissionSet psu = a.CreatePermissionSet();
155 			Assert.IsTrue(ps.Equals(psu), "HEX-UNICODE");
156 		}
157 
158 		[Test]
159 		[ExpectedException (typeof (ArgumentException))]
Hex_BigEndianUnicode_Permission()160 		public void Hex_BigEndianUnicode_Permission ()
161 		{
162 			SecurityPermission sp = new SecurityPermission (SecurityPermissionFlag.Assertion);
163 			PermissionSet ps = new PermissionSet (PermissionState.None);
164 			ps.AddPermission (sp);
165 
166 			PermissionSetAttribute a = new PermissionSetAttribute (SecurityAction.Assert);
167 			a.UnicodeEncoded = true;
168 			a.Hex = "003C005000650072006D0069007300730069006F006E00530065007400200063006C006100730073003D002200530079007300740065006D002E00530065006300750072006900740079002E005000650072006D0069007300730069006F006E0053006500740022000D000A00760065007200730069006F006E003D002200310022003E000D000A003C0049005000650072006D0069007300730069006F006E00200063006C006100730073003D002200530079007300740065006D002E00530065006300750072006900740079002E005000650072006D0069007300730069006F006E0073002E00530065006300750072006900740079005000650072006D0069007300730069006F006E002C0020006D00730063006F0072006C00690062002C002000560065007200730069006F006E003D0032002E0030002E0033003600300030002E0030002C002000430075006C0074007500720065003D006E00650075007400720061006C002C0020005000750062006C00690063004B006500790054006F006B0065006E003D00620037003700610035006300350036003100390033003400650030003800390022000D000A00760065007200730069006F006E003D002200310022000D000A0046006C006100670073003D00220041007300730065007200740069006F006E0022002F003E000D000A003C002F005000650072006D0069007300730069006F006E005300650074003E000D000";
169 			PermissionSet psbeu = a.CreatePermissionSet ();
170 			Assert.IsTrue (ps.Equals (psbeu), "HEX-BIGENDIAN-UNICODE");
171 		}
172 
173 		[Test]
Name()174 		public void Name ()
175 		{
176 			PermissionSetAttribute a = new PermissionSetAttribute (SecurityAction.Assert);
177 			a.Name = "mono";
178 			Assert.IsNull (a.File, "File");
179 			Assert.IsNull (a.Hex, "Hex");
180 			Assert.AreEqual ("mono", a.Name, "Name");
181 			Assert.IsNull (a.XML, "XML");
182 			a.Name = null;
183 			Assert.IsNull (a.File, "File");
184 			Assert.IsNull (a.Hex, "Hex");
185 			Assert.IsNull (a.Name, "Name");
186 			Assert.IsNull (a.XML, "XML");
187 		}
188 
189 		[Test]
XML()190 		public void XML ()
191 		{
192 			PermissionSetAttribute a = new PermissionSetAttribute (SecurityAction.Assert);
193 			a.XML = "mono";
194 			Assert.IsNull (a.File, "File");
195 			Assert.IsNull (a.Hex, "Hex");
196 			Assert.IsNull (a.Name, "Name");
197 			Assert.AreEqual ("mono", a.XML, "XML");
198 			a.XML = null;
199 			Assert.IsNull (a.File, "File");
200 			Assert.IsNull (a.Hex, "Hex");
201 			Assert.IsNull (a.Name, "Name");
202 			Assert.IsNull (a.XML, "XML");
203 		}
204 
205 		[Test]
UnicodeEncoded()206 		public void UnicodeEncoded ()
207 		{
208 			PermissionSetAttribute a = new PermissionSetAttribute (SecurityAction.Assert);
209 			a.UnicodeEncoded = true;
210 			Assert.IsTrue (a.UnicodeEncoded, "UnicodeEncoded-true");
211 			a.UnicodeEncoded = false;
212 			Assert.IsFalse (a.UnicodeEncoded, "UnicodeEncoded-false");
213 		}
214 
215 		[Test]
Unrestricted()216 		public void Unrestricted ()
217 		{
218 			PermissionSetAttribute a = new PermissionSetAttribute (SecurityAction.Assert);
219 			a.Unrestricted = true;
220 			Assert.IsNull (a.File, "File");
221 			Assert.IsNull (a.Hex, "Hex");
222 			Assert.IsNull (a.Name, "Name");
223 			Assert.IsNull (a.XML, "XML");
224 
225 			PermissionSet ps = a.CreatePermissionSet ();
226 			Assert.IsTrue (ps.IsUnrestricted (), "CreatePermissionSet.IsUnrestricted");
227 		}
228 
229 		[Test]
Attributes()230 		public void Attributes ()
231 		{
232 			Type t = typeof (PermissionSetAttribute);
233 			Assert.IsTrue (t.IsSerializable, "IsSerializable");
234 
235 			object [] attrs = t.GetCustomAttributes (typeof (AttributeUsageAttribute), false);
236 			Assert.AreEqual (1, attrs.Length, "AttributeUsage");
237 			AttributeUsageAttribute aua = (AttributeUsageAttribute)attrs [0];
238 			Assert.IsTrue (aua.AllowMultiple, "AllowMultiple");
239 			Assert.IsFalse (aua.Inherited, "Inherited");
240 			AttributeTargets at = (AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Constructor | AttributeTargets.Method);
241 			Assert.AreEqual (at, aua.ValidOn, "ValidOn");
242 		}
243 	}
244 }
245