2005-03-31 Sebastien Pouliot <sebastien@ximian.com>
[mono.git] / mcs / class / corlib / Test / System.Security.Permissions / SecurityPermissionAttributeTest.cs
1 //
2 // SecurityPermissionAttributeTest.cs -
3 //      NUnit Test Cases for SecurityPermissionAttribute
4 //
5 // Author:
6 //      Sebastien Pouliot  <sebastien@ximian.com>
7 //
8 // (C) 2003 Motus Technologies Inc. (http://www.motus.com)
9 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
10 //
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:
18 // 
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
21 // 
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.
29 //
30
31 using NUnit.Framework;
32 using System;
33 using System.Security;
34 using System.Security.Permissions;
35
36 namespace MonoTests.System.Security.Permissions {
37
38         [TestFixture]
39         public class SecurityPermissionAttributeTest {
40
41                 [Test]
42                 public void Default () 
43                 {
44                         SecurityPermissionAttribute a = new SecurityPermissionAttribute (SecurityAction.Assert);
45                         Assert.IsFalse (a.Assertion, "Assertion");
46 #if NET_2_0
47                         Assert.IsFalse (a.BindingRedirects, "BindingRedirects");
48 #endif
49                         Assert.IsFalse (a.ControlAppDomain, "ControlAppDomain");
50                         Assert.IsFalse (a.ControlDomainPolicy, "ControlDomainPolicy");
51                         Assert.IsFalse (a.ControlEvidence, "ControlEvidence");
52                         Assert.IsFalse (a.ControlPolicy, "ControlPolicy");
53                         Assert.IsFalse (a.ControlPrincipal, "ControlPrincipal");
54                         Assert.IsFalse (a.ControlThread, "ControlThread");
55                         Assert.IsFalse (a.Execution, "Execution");
56                         Assert.IsFalse (a.Infrastructure, "Infrastructure");
57                         Assert.IsFalse (a.RemotingConfiguration, "RemotingConfiguration");
58                         Assert.IsFalse (a.SerializationFormatter, "SerializationFormatter");
59                         Assert.IsFalse (a.SkipVerification, "SkipVerification");
60                         Assert.IsFalse (a.UnmanagedCode, "UnmanagedCode");
61
62                         Assert.AreEqual (SecurityPermissionFlag.NoFlags, a.Flags, "Flags");
63                         Assert.AreEqual (a.ToString (), a.TypeId.ToString (), "TypeId");
64                         Assert.IsFalse (a.Unrestricted, "Unrestricted");
65
66                         SecurityPermission perm = (SecurityPermission) a.CreatePermission ();
67                         Assert.AreEqual (SecurityPermissionFlag.NoFlags, perm.Flags, "CreatePermission.Flags");
68                 }
69
70                 [Test]
71                 public void Action () 
72                 {
73                         SecurityPermissionAttribute a = new SecurityPermissionAttribute (SecurityAction.Assert);
74                         Assert.AreEqual (SecurityAction.Assert, a.Action, "Action=Assert");
75                         a.Action = SecurityAction.Demand;
76                         Assert.AreEqual (SecurityAction.Demand, a.Action, "Action=Demand");
77                         a.Action = SecurityAction.Deny;
78                         Assert.AreEqual (SecurityAction.Deny, a.Action, "Action=Deny");
79                         a.Action = SecurityAction.InheritanceDemand;
80                         Assert.AreEqual (SecurityAction.InheritanceDemand, a.Action, "Action=InheritanceDemand");
81                         a.Action = SecurityAction.LinkDemand;
82                         Assert.AreEqual (SecurityAction.LinkDemand, a.Action, "Action=LinkDemand");
83                         a.Action = SecurityAction.PermitOnly;
84                         Assert.AreEqual (SecurityAction.PermitOnly, a.Action, "Action=PermitOnly");
85                         a.Action = SecurityAction.RequestMinimum;
86                         Assert.AreEqual (SecurityAction.RequestMinimum, a.Action, "Action=RequestMinimum");
87                         a.Action = SecurityAction.RequestOptional;
88                         Assert.AreEqual (SecurityAction.RequestOptional, a.Action, "Action=RequestOptional");
89                         a.Action = SecurityAction.RequestRefuse;
90                         Assert.AreEqual (SecurityAction.RequestRefuse, a.Action, "Action=RequestRefuse");
91 #if NET_2_0
92                         a.Action = SecurityAction.DemandChoice;
93                         Assert.AreEqual (SecurityAction.DemandChoice, a.Action, "Action=DemandChoice");
94                         a.Action = SecurityAction.InheritanceDemandChoice;
95                         Assert.AreEqual (SecurityAction.InheritanceDemandChoice, a.Action, "Action=InheritanceDemandChoice");
96                         a.Action = SecurityAction.LinkDemandChoice;
97                         Assert.AreEqual (SecurityAction.LinkDemandChoice, a.Action, "Action=LinkDemandChoice");
98 #endif
99                 }
100
101                 [Test]
102                 public void Action_Invalid ()
103                 {
104                         SecurityPermissionAttribute a = new SecurityPermissionAttribute ((SecurityAction)Int32.MinValue);
105                         // no validation in attribute
106                 }
107
108                 private SecurityPermissionAttribute Empty () 
109                 {
110                         SecurityPermissionAttribute a = new SecurityPermissionAttribute (SecurityAction.Assert);
111                         a.Assertion = false;
112 #if NET_2_0
113                         a.BindingRedirects = false;
114 #endif
115                         a.ControlAppDomain = false;
116                         a.ControlDomainPolicy = false;
117                         a.ControlEvidence = false;
118                         a.ControlPolicy = false;
119                         a.ControlPrincipal = false;
120                         a.ControlThread = false;
121                         a.Execution = false;
122                         a.Infrastructure = false;
123                         a.RemotingConfiguration = false;
124                         a.SerializationFormatter = false;
125                         a.SkipVerification = false;
126                         a.UnmanagedCode = false;
127                         Assert.AreEqual (SecurityPermissionFlag.NoFlags, a.Flags, "Flags");
128                         return a;
129                 }
130
131                 [Test]
132                 public void Assertion () 
133                 {
134                         SecurityPermissionAttribute a = Empty ();
135                         a.Assertion = true;
136                         Assert.AreEqual (SecurityPermissionFlag.Assertion, a.Flags, "Flags=Assertion");
137                 }
138 #if NET_2_0
139                 [Test]
140                 public void BindingRedirects ()
141                 {
142                         SecurityPermissionAttribute a = Empty ();
143                         a.BindingRedirects = true;
144                         Assert.AreEqual (SecurityPermissionFlag.BindingRedirects, a.Flags, "Flags=BindingRedirects");
145                 }
146 #endif
147                 [Test]
148                 public void ControlAppDomain () 
149                 {
150                         SecurityPermissionAttribute a = Empty ();
151                         a.ControlAppDomain = true;
152                         Assert.AreEqual (SecurityPermissionFlag.ControlAppDomain, a.Flags, "Flags=ControlAppDomain");
153                 }
154
155                 [Test]
156                 public void ControlDomainPolicy () 
157                 {
158                         SecurityPermissionAttribute a = Empty ();
159                         a.ControlDomainPolicy = true;
160                         Assert.AreEqual (SecurityPermissionFlag.ControlDomainPolicy, a.Flags, "Flags=ControlDomainPolicy");
161                 }
162
163                 [Test]
164                 public void ControlEvidence () 
165                 {
166                         SecurityPermissionAttribute a = Empty ();
167                         a.ControlEvidence = true;
168                         Assert.AreEqual (SecurityPermissionFlag.ControlEvidence, a.Flags, "Flags=ControlEvidence");
169                 }
170
171                 [Test]
172                 public void ControlPolicy () 
173                 {
174                         SecurityPermissionAttribute a = Empty ();
175                         a.ControlPolicy = true;
176                         Assert.AreEqual (SecurityPermissionFlag.ControlPolicy, a.Flags, "Flags=ControlPolicy");
177                 }
178
179                 [Test]
180                 public void ControlPrincipal () 
181                 {
182                         SecurityPermissionAttribute a = Empty ();
183                         a.ControlPrincipal = true;
184                         Assert.AreEqual (SecurityPermissionFlag.ControlPrincipal, a.Flags, "Flags=ControlPrincipal");
185                 }
186
187                 [Test]
188                 public void ControlThread ()
189                 {
190                         SecurityPermissionAttribute a = Empty ();
191                         a.ControlThread = true;
192                         Assert.AreEqual (SecurityPermissionFlag.ControlThread, a.Flags, "Flags=ControlThread");
193                 }
194
195                 [Test]
196                 public void Execution () 
197                 {
198                         SecurityPermissionAttribute a = Empty ();
199                         a.Execution = true;
200                         Assert.AreEqual (SecurityPermissionFlag.Execution, a.Flags, "Flags=Execution");
201                 }
202
203                 [Test]
204                 public void Infrastructure () 
205                 {
206                         SecurityPermissionAttribute a = Empty ();
207                         a.Infrastructure = true;
208                         Assert.AreEqual (SecurityPermissionFlag.Infrastructure, a.Flags, "Flags=Infrastructure");
209                 }
210
211                 [Test]
212                 public void RemotingConfiguration () 
213                 {
214                         SecurityPermissionAttribute a = Empty ();
215                         a.RemotingConfiguration = true;
216                         Assert.AreEqual (SecurityPermissionFlag.RemotingConfiguration, a.Flags, "Flags=RemotingConfiguration");
217                 }
218
219                 [Test]
220                 public void SerializationFormatter () 
221                 {
222                         SecurityPermissionAttribute a = Empty ();
223                         a.SerializationFormatter = true;
224                         Assert.AreEqual (SecurityPermissionFlag.SerializationFormatter, a.Flags, "Flags=SerializationFormatter");
225                 }
226
227                 [Test]
228                 public void SkipVerification () 
229                 {
230                         SecurityPermissionAttribute a = Empty ();
231                         a.SkipVerification = true;
232                         Assert.AreEqual (SecurityPermissionFlag.SkipVerification, a.Flags, "Flags=SkipVerification");
233                 }
234
235                 [Test]
236                 public void UnmanagedCode () 
237                 {
238                         SecurityPermissionAttribute a = Empty ();
239                         a.UnmanagedCode = true;
240                         Assert.AreEqual (SecurityPermissionFlag.UnmanagedCode, a.Flags, "Flags=UnmanagedCode");
241                 }
242
243                 [Test]
244                 public void Unrestricted () 
245                 {
246                         SecurityPermissionAttribute a = new SecurityPermissionAttribute (SecurityAction.Assert);
247                         a.Unrestricted = true;
248                         Assert.AreEqual (SecurityPermissionFlag.NoFlags, a.Flags, "Unrestricted");
249
250                         SecurityPermission perm = (SecurityPermission) a.CreatePermission ();
251                         Assert.AreEqual (SecurityPermissionFlag.AllFlags, perm.Flags, "CreatePermission.Flags");
252                 }
253
254                 [Test]
255                 public void Flags ()
256                 {
257                         SecurityPermissionAttribute a = new SecurityPermissionAttribute (SecurityAction.Assert);
258                         a.Flags = SecurityPermissionFlag.Assertion;
259                         Assert.IsTrue (a.Assertion, "Assertion");
260 #if NET_2_0
261                         a.Flags |= SecurityPermissionFlag.BindingRedirects;
262                         Assert.IsTrue (a.BindingRedirects, "BindingRedirects");
263 #endif
264                         a.Flags |= SecurityPermissionFlag.ControlAppDomain;
265                         Assert.IsTrue (a.ControlAppDomain, "ControlAppDomain");
266                         a.Flags |= SecurityPermissionFlag.ControlDomainPolicy;
267                         Assert.IsTrue (a.ControlDomainPolicy, "ControlDomainPolicy");
268                         a.Flags |= SecurityPermissionFlag.ControlEvidence;
269                         Assert.IsTrue (a.ControlEvidence, "ControlEvidence");
270                         a.Flags |= SecurityPermissionFlag.ControlPolicy;
271                         Assert.IsTrue (a.ControlPolicy, "ControlPolicy");
272                         a.Flags |= SecurityPermissionFlag.ControlPrincipal;
273                         Assert.IsTrue (a.ControlPrincipal, "ControlPrincipal");
274                         a.Flags |= SecurityPermissionFlag.ControlThread;
275                         Assert.IsTrue (a.ControlThread, "ControlThread");
276                         a.Flags |= SecurityPermissionFlag.Execution;
277                         Assert.IsTrue (a.Execution, "Execution");
278                         a.Flags |= SecurityPermissionFlag.Infrastructure;
279                         Assert.IsTrue (a.Infrastructure, "Infrastructure");
280                         a.Flags |= SecurityPermissionFlag.RemotingConfiguration;
281                         Assert.IsTrue (a.RemotingConfiguration, "RemotingConfiguration");
282                         a.Flags |= SecurityPermissionFlag.SerializationFormatter;
283                         Assert.IsTrue (a.SerializationFormatter, "SerializationFormatter");
284                         a.Flags |= SecurityPermissionFlag.SkipVerification;
285                         Assert.IsTrue (a.SkipVerification, "SkipVerification");
286                         a.Flags |= SecurityPermissionFlag.UnmanagedCode;
287                         Assert.IsTrue (a.UnmanagedCode, "UnmanagedCode");
288                         Assert.IsFalse (a.Unrestricted, "Unrestricted");
289                 }
290
291                 [Test]
292                 public void Attributes ()
293                 {
294                         Type t = typeof (SecurityPermissionAttribute);
295                         Assert.IsTrue (t.IsSerializable, "IsSerializable");
296
297                         object[] attrs = t.GetCustomAttributes (typeof (AttributeUsageAttribute), false);
298                         Assert.AreEqual (1, attrs.Length, "AttributeUsage");
299                         AttributeUsageAttribute aua = (AttributeUsageAttribute)attrs [0];
300                         Assert.IsTrue (aua.AllowMultiple, "AllowMultiple");
301                         Assert.IsFalse (aua.Inherited, "Inherited");
302                         AttributeTargets at = (AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Constructor | AttributeTargets.Method);
303                         Assert.AreEqual (at, aua.ValidOn, "ValidOn");
304                 }
305         }
306 }