2 // SecurityPermissionAttributeTest.cs -
3 // NUnit Test Cases for SecurityPermissionAttribute
6 // Sebastien Pouliot <sebastien@ximian.com>
8 // (C) 2003 Motus Technologies Inc. (http://www.motus.com)
9 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 using NUnit.Framework;
33 using System.Security;
34 using System.Security.Permissions;
36 namespace MonoTests.System.Security.Permissions {
42 public class SecurityPermissionAttributeTest {
45 public void Default ()
47 SecurityPermissionAttribute a = new SecurityPermissionAttribute (SecurityAction.Assert);
48 Assert.IsFalse (a.Assertion, "Assertion");
49 Assert.IsFalse (a.BindingRedirects, "BindingRedirects");
50 Assert.IsFalse (a.ControlAppDomain, "ControlAppDomain");
51 Assert.IsFalse (a.ControlDomainPolicy, "ControlDomainPolicy");
52 Assert.IsFalse (a.ControlEvidence, "ControlEvidence");
53 Assert.IsFalse (a.ControlPolicy, "ControlPolicy");
54 Assert.IsFalse (a.ControlPrincipal, "ControlPrincipal");
55 Assert.IsFalse (a.ControlThread, "ControlThread");
56 Assert.IsFalse (a.Execution, "Execution");
57 Assert.IsFalse (a.Infrastructure, "Infrastructure");
58 Assert.IsFalse (a.RemotingConfiguration, "RemotingConfiguration");
59 Assert.IsFalse (a.SerializationFormatter, "SerializationFormatter");
60 Assert.IsFalse (a.SkipVerification, "SkipVerification");
61 Assert.IsFalse (a.UnmanagedCode, "UnmanagedCode");
63 Assert.AreEqual (SecurityPermissionFlag.NoFlags, a.Flags, "Flags");
64 Assert.AreEqual (a.ToString (), a.TypeId.ToString (), "TypeId");
65 Assert.IsFalse (a.Unrestricted, "Unrestricted");
67 SecurityPermission perm = (SecurityPermission) a.CreatePermission ();
68 Assert.AreEqual (SecurityPermissionFlag.NoFlags, perm.Flags, "CreatePermission.Flags");
74 SecurityPermissionAttribute a = new SecurityPermissionAttribute (SecurityAction.Assert);
75 Assert.AreEqual (SecurityAction.Assert, a.Action, "Action=Assert");
76 a.Action = SecurityAction.Demand;
77 Assert.AreEqual (SecurityAction.Demand, a.Action, "Action=Demand");
78 a.Action = SecurityAction.Deny;
79 Assert.AreEqual (SecurityAction.Deny, a.Action, "Action=Deny");
80 a.Action = SecurityAction.InheritanceDemand;
81 Assert.AreEqual (SecurityAction.InheritanceDemand, a.Action, "Action=InheritanceDemand");
82 a.Action = SecurityAction.LinkDemand;
83 Assert.AreEqual (SecurityAction.LinkDemand, a.Action, "Action=LinkDemand");
84 a.Action = SecurityAction.PermitOnly;
85 Assert.AreEqual (SecurityAction.PermitOnly, a.Action, "Action=PermitOnly");
86 a.Action = SecurityAction.RequestMinimum;
87 Assert.AreEqual (SecurityAction.RequestMinimum, a.Action, "Action=RequestMinimum");
88 a.Action = SecurityAction.RequestOptional;
89 Assert.AreEqual (SecurityAction.RequestOptional, a.Action, "Action=RequestOptional");
90 a.Action = SecurityAction.RequestRefuse;
91 Assert.AreEqual (SecurityAction.RequestRefuse, a.Action, "Action=RequestRefuse");
95 public void Action_Invalid ()
97 SecurityPermissionAttribute a = new SecurityPermissionAttribute ((SecurityAction)Int32.MinValue);
98 // no validation in attribute
101 private SecurityPermissionAttribute Empty ()
103 SecurityPermissionAttribute a = new SecurityPermissionAttribute (SecurityAction.Assert);
105 a.BindingRedirects = false;
106 a.ControlAppDomain = false;
107 a.ControlDomainPolicy = false;
108 a.ControlEvidence = false;
109 a.ControlPolicy = false;
110 a.ControlPrincipal = false;
111 a.ControlThread = false;
113 a.Infrastructure = false;
114 a.RemotingConfiguration = false;
115 a.SerializationFormatter = false;
116 a.SkipVerification = false;
117 a.UnmanagedCode = false;
118 Assert.AreEqual (SecurityPermissionFlag.NoFlags, a.Flags, "Flags");
123 public void Assertion ()
125 SecurityPermissionAttribute a = Empty ();
127 Assert.AreEqual (SecurityPermissionFlag.Assertion, a.Flags, "Flags=Assertion");
129 Assert.AreEqual (SecurityPermissionFlag.NoFlags, a.Flags, "Flags=NoFlags");
132 public void BindingRedirects ()
134 SecurityPermissionAttribute a = Empty ();
135 a.BindingRedirects = true;
136 Assert.AreEqual (SecurityPermissionFlag.BindingRedirects, a.Flags, "Flags=BindingRedirects");
137 a.BindingRedirects = false;
138 Assert.AreEqual (SecurityPermissionFlag.NoFlags, a.Flags, "Flags=NoFlags");
141 public void ControlAppDomain ()
143 SecurityPermissionAttribute a = Empty ();
144 a.ControlAppDomain = true;
145 Assert.AreEqual (SecurityPermissionFlag.ControlAppDomain, a.Flags, "Flags=ControlAppDomain");
146 a.ControlAppDomain = false;
147 Assert.AreEqual (SecurityPermissionFlag.NoFlags, a.Flags, "Flags=NoFlags");
151 public void ControlDomainPolicy ()
153 SecurityPermissionAttribute a = Empty ();
154 a.ControlDomainPolicy = true;
155 Assert.AreEqual (SecurityPermissionFlag.ControlDomainPolicy, a.Flags, "Flags=ControlDomainPolicy");
156 a.ControlDomainPolicy = false;
157 Assert.AreEqual (SecurityPermissionFlag.NoFlags, a.Flags, "Flags=NoFlags");
161 public void ControlEvidence ()
163 SecurityPermissionAttribute a = Empty ();
164 a.ControlEvidence = true;
165 Assert.AreEqual (SecurityPermissionFlag.ControlEvidence, a.Flags, "Flags=ControlEvidence");
166 a.ControlEvidence = false;
167 Assert.AreEqual (SecurityPermissionFlag.NoFlags, a.Flags, "Flags=NoFlags");
171 public void ControlPolicy ()
173 SecurityPermissionAttribute a = Empty ();
174 a.ControlPolicy = true;
175 Assert.AreEqual (SecurityPermissionFlag.ControlPolicy, a.Flags, "Flags=ControlPolicy");
176 a.ControlPolicy = false;
177 Assert.AreEqual (SecurityPermissionFlag.NoFlags, a.Flags, "Flags=NoFlags");
181 public void ControlPrincipal ()
183 SecurityPermissionAttribute a = Empty ();
184 a.ControlPrincipal = true;
185 Assert.AreEqual (SecurityPermissionFlag.ControlPrincipal, a.Flags, "Flags=ControlPrincipal");
186 a.ControlPrincipal = false;
187 Assert.AreEqual (SecurityPermissionFlag.NoFlags, a.Flags, "Flags=NoFlags");
191 public void ControlThread ()
193 SecurityPermissionAttribute a = Empty ();
194 a.ControlThread = true;
195 Assert.AreEqual (SecurityPermissionFlag.ControlThread, a.Flags, "Flags=ControlThread");
196 a.ControlThread = false;
197 Assert.AreEqual (SecurityPermissionFlag.NoFlags, a.Flags, "Flags=NoFlags");
201 public void Execution ()
203 SecurityPermissionAttribute a = Empty ();
205 Assert.AreEqual (SecurityPermissionFlag.Execution, a.Flags, "Flags=Execution");
207 Assert.AreEqual (SecurityPermissionFlag.NoFlags, a.Flags, "Flags=NoFlags");
211 public void Infrastructure ()
213 SecurityPermissionAttribute a = Empty ();
214 a.Infrastructure = true;
215 Assert.AreEqual (SecurityPermissionFlag.Infrastructure, a.Flags, "Flags=Infrastructure");
216 a.Infrastructure = false;
217 Assert.AreEqual (SecurityPermissionFlag.NoFlags, a.Flags, "Flags=NoFlags");
221 public void RemotingConfiguration ()
223 SecurityPermissionAttribute a = Empty ();
224 a.RemotingConfiguration = true;
225 Assert.AreEqual (SecurityPermissionFlag.RemotingConfiguration, a.Flags, "Flags=RemotingConfiguration");
226 a.RemotingConfiguration = false;
227 Assert.AreEqual (SecurityPermissionFlag.NoFlags, a.Flags, "Flags=NoFlags");
231 public void SerializationFormatter ()
233 SecurityPermissionAttribute a = Empty ();
234 a.SerializationFormatter = true;
235 Assert.AreEqual (SecurityPermissionFlag.SerializationFormatter, a.Flags, "Flags=SerializationFormatter");
236 a.SerializationFormatter = false;
237 Assert.AreEqual (SecurityPermissionFlag.NoFlags, a.Flags, "Flags=NoFlags");
241 public void SkipVerification ()
243 SecurityPermissionAttribute a = Empty ();
244 a.SkipVerification = true;
245 Assert.AreEqual (SecurityPermissionFlag.SkipVerification, a.Flags, "Flags=SkipVerification");
246 a.SkipVerification = false;
247 Assert.AreEqual (SecurityPermissionFlag.NoFlags, a.Flags, "Flags=NoFlags");
251 public void UnmanagedCode ()
253 SecurityPermissionAttribute a = Empty ();
254 a.UnmanagedCode = true;
255 Assert.AreEqual (SecurityPermissionFlag.UnmanagedCode, a.Flags, "Flags=UnmanagedCode");
256 a.UnmanagedCode = false;
257 Assert.AreEqual (SecurityPermissionFlag.NoFlags, a.Flags, "Flags=NoFlags");
261 public void Unrestricted ()
263 SecurityPermissionAttribute a = new SecurityPermissionAttribute (SecurityAction.Assert);
264 a.Unrestricted = true;
265 Assert.AreEqual (SecurityPermissionFlag.NoFlags, a.Flags, "Unrestricted");
267 SecurityPermission perm = (SecurityPermission) a.CreatePermission ();
268 Assert.AreEqual (SecurityPermissionFlag.AllFlags, perm.Flags, "CreatePermission.Flags");
274 SecurityPermissionAttribute a = new SecurityPermissionAttribute (SecurityAction.Assert);
275 a.Flags = SecurityPermissionFlag.Assertion;
276 Assert.IsTrue (a.Assertion, "Assertion");
277 a.Flags |= SecurityPermissionFlag.BindingRedirects;
278 Assert.IsTrue (a.BindingRedirects, "BindingRedirects");
279 a.Flags |= SecurityPermissionFlag.ControlAppDomain;
280 Assert.IsTrue (a.ControlAppDomain, "ControlAppDomain");
281 a.Flags |= SecurityPermissionFlag.ControlDomainPolicy;
282 Assert.IsTrue (a.ControlDomainPolicy, "ControlDomainPolicy");
283 a.Flags |= SecurityPermissionFlag.ControlEvidence;
284 Assert.IsTrue (a.ControlEvidence, "ControlEvidence");
285 a.Flags |= SecurityPermissionFlag.ControlPolicy;
286 Assert.IsTrue (a.ControlPolicy, "ControlPolicy");
287 a.Flags |= SecurityPermissionFlag.ControlPrincipal;
288 Assert.IsTrue (a.ControlPrincipal, "ControlPrincipal");
289 a.Flags |= SecurityPermissionFlag.ControlThread;
290 Assert.IsTrue (a.ControlThread, "ControlThread");
291 a.Flags |= SecurityPermissionFlag.Execution;
292 Assert.IsTrue (a.Execution, "Execution");
293 a.Flags |= SecurityPermissionFlag.Infrastructure;
294 Assert.IsTrue (a.Infrastructure, "Infrastructure");
295 a.Flags |= SecurityPermissionFlag.RemotingConfiguration;
296 Assert.IsTrue (a.RemotingConfiguration, "RemotingConfiguration");
297 a.Flags |= SecurityPermissionFlag.SerializationFormatter;
298 Assert.IsTrue (a.SerializationFormatter, "SerializationFormatter");
299 a.Flags |= SecurityPermissionFlag.SkipVerification;
300 Assert.IsTrue (a.SkipVerification, "SkipVerification");
301 a.Flags |= SecurityPermissionFlag.UnmanagedCode;
303 Assert.IsTrue (a.UnmanagedCode, "UnmanagedCode");
304 Assert.IsFalse (a.Unrestricted, "Unrestricted");
306 a.Flags &= ~SecurityPermissionFlag.Assertion;
307 Assert.IsFalse (a.Assertion, "Assertion-False");
308 a.Flags &= ~SecurityPermissionFlag.BindingRedirects;
309 Assert.IsFalse (a.BindingRedirects, "BindingRedirects-False");
310 a.Flags &= ~SecurityPermissionFlag.ControlAppDomain;
311 Assert.IsFalse (a.ControlAppDomain, "ControlAppDomain-False");
312 a.Flags &= ~SecurityPermissionFlag.ControlDomainPolicy;
313 Assert.IsFalse (a.ControlDomainPolicy, "ControlDomainPolicy-False");
314 a.Flags &= ~SecurityPermissionFlag.ControlEvidence;
315 Assert.IsFalse (a.ControlEvidence, "ControlEvidence-False");
316 a.Flags &= ~SecurityPermissionFlag.ControlPolicy;
317 Assert.IsFalse (a.ControlPolicy, "ControlPolicy-False");
318 a.Flags &= ~SecurityPermissionFlag.ControlPrincipal;
319 Assert.IsFalse (a.ControlPrincipal, "ControlPrincipal-False");
320 a.Flags &= ~SecurityPermissionFlag.ControlThread;
321 Assert.IsFalse (a.ControlThread, "ControlThread-False");
322 a.Flags &= ~SecurityPermissionFlag.Execution;
323 Assert.IsFalse (a.Execution, "Execution-False");
324 a.Flags &= ~SecurityPermissionFlag.Infrastructure;
325 Assert.IsFalse (a.Infrastructure, "Infrastructure-False");
326 a.Flags &= ~SecurityPermissionFlag.RemotingConfiguration;
327 Assert.IsFalse (a.RemotingConfiguration, "RemotingConfiguration-False");
328 a.Flags &= ~SecurityPermissionFlag.SerializationFormatter;
329 Assert.IsFalse (a.SerializationFormatter, "SerializationFormatter-False");
330 a.Flags &= ~SecurityPermissionFlag.SkipVerification;
331 Assert.IsFalse (a.SkipVerification, "SkipVerification-False");
332 a.Flags &= ~SecurityPermissionFlag.UnmanagedCode;
336 public void Attributes ()
338 Type t = typeof (SecurityPermissionAttribute);
339 Assert.IsTrue (t.IsSerializable, "IsSerializable");
341 object[] attrs = t.GetCustomAttributes (typeof (AttributeUsageAttribute), false);
342 Assert.AreEqual (1, attrs.Length, "AttributeUsage");
343 AttributeUsageAttribute aua = (AttributeUsageAttribute)attrs [0];
344 Assert.IsTrue (aua.AllowMultiple, "AllowMultiple");
345 Assert.IsFalse (aua.Inherited, "Inherited");
346 AttributeTargets at = (AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Constructor | AttributeTargets.Method);
347 Assert.AreEqual (at, aua.ValidOn, "ValidOn");