[LoongArch64] Part-5:add loongarch support in some files for LoongArch64. (#21769)
[mono-project.git] / mcs / class / corlib / Test / System.Security.Permissions / SecurityPermissionTest.cs
blob7a4e5644f99874abaef389fff261362ebaeecf6d
1 //
2 // SecurityPermissionTest.cs - NUnit Test Cases for SecurityPermission
3 //
4 // Author:
5 // Sebastien Pouliot <sebastien@ximian.com>
6 //
7 // Copyright (C) 2004 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.
29 using NUnit.Framework;
30 using System;
31 using System.Security;
32 using System.Security.Permissions;
34 using System.Diagnostics;
36 namespace MonoTests.System.Security.Permissions {
38 [TestFixture]
39 [Category("NotDotNet")]
40 public class SecurityPermissionTest {
42 static SecurityPermissionFlag [] AllFlags = {
43 SecurityPermissionFlag.AllFlags,
44 SecurityPermissionFlag.Assertion,
45 SecurityPermissionFlag.BindingRedirects,
46 SecurityPermissionFlag.ControlAppDomain,
47 SecurityPermissionFlag.ControlDomainPolicy,
48 SecurityPermissionFlag.ControlEvidence,
49 SecurityPermissionFlag.ControlPolicy,
50 SecurityPermissionFlag.ControlPrincipal,
51 SecurityPermissionFlag.ControlThread,
52 SecurityPermissionFlag.Execution,
53 SecurityPermissionFlag.Infrastructure,
54 SecurityPermissionFlag.NoFlags,
55 SecurityPermissionFlag.RemotingConfiguration,
56 SecurityPermissionFlag.SerializationFormatter,
57 SecurityPermissionFlag.SkipVerification,
58 SecurityPermissionFlag.UnmanagedCode };
60 static SecurityPermissionFlag [] AllFlagsExceptNoFlags = {
61 SecurityPermissionFlag.AllFlags,
62 SecurityPermissionFlag.Assertion,
63 SecurityPermissionFlag.BindingRedirects,
64 SecurityPermissionFlag.ControlAppDomain,
65 SecurityPermissionFlag.ControlDomainPolicy,
66 SecurityPermissionFlag.ControlEvidence,
67 SecurityPermissionFlag.ControlPolicy,
68 SecurityPermissionFlag.ControlPrincipal,
69 SecurityPermissionFlag.ControlThread,
70 SecurityPermissionFlag.Execution,
71 SecurityPermissionFlag.Infrastructure,
72 SecurityPermissionFlag.RemotingConfiguration,
73 SecurityPermissionFlag.SerializationFormatter,
74 SecurityPermissionFlag.SkipVerification,
75 SecurityPermissionFlag.UnmanagedCode };
77 static SecurityPermissionFlag [] AllFlagsExceptAllFlags = {
78 SecurityPermissionFlag.Assertion,
79 SecurityPermissionFlag.BindingRedirects,
80 SecurityPermissionFlag.ControlAppDomain,
81 SecurityPermissionFlag.ControlDomainPolicy,
82 SecurityPermissionFlag.ControlEvidence,
83 SecurityPermissionFlag.ControlPolicy,
84 SecurityPermissionFlag.ControlPrincipal,
85 SecurityPermissionFlag.ControlThread,
86 SecurityPermissionFlag.Execution,
87 SecurityPermissionFlag.Infrastructure,
88 SecurityPermissionFlag.NoFlags,
89 SecurityPermissionFlag.RemotingConfiguration,
90 SecurityPermissionFlag.SerializationFormatter,
91 SecurityPermissionFlag.SkipVerification,
92 SecurityPermissionFlag.UnmanagedCode };
94 [Test]
95 public void PermissionState_None ()
97 PermissionState ps = PermissionState.None;
98 SecurityPermission sp = new SecurityPermission (ps);
99 Assert.AreEqual (SecurityPermissionFlag.NoFlags, sp.Flags, "Flags");
100 Assert.IsFalse (sp.IsUnrestricted (), "IsUnrestricted");
102 SecurityElement se = sp.ToXml ();
103 // only class and version are present
104 Assert.AreEqual ("NoFlags", se.Attribute ("Flags"), "Xml-Flags");
105 Assert.IsNull (se.Children, "Xml-Children");
107 SecurityPermission copy = (SecurityPermission)sp.Copy ();
108 Assert.IsFalse (Object.ReferenceEquals (sp, copy), "ReferenceEquals");
109 Assert.AreEqual (sp.Flags, copy.Flags, "Flags");
110 Assert.AreEqual (sp.IsUnrestricted (), copy.IsUnrestricted (), "IsUnrestricted ()");
113 [Test]
114 public void PermissionState_Unrestricted ()
116 PermissionState ps = PermissionState.Unrestricted;
117 SecurityPermission sp = new SecurityPermission (ps);
118 Assert.AreEqual (SecurityPermissionFlag.AllFlags, sp.Flags, "Flags");
119 Assert.IsTrue (sp.IsUnrestricted (), "IsUnrestricted");
121 SecurityElement se = sp.ToXml ();
122 // only class and version are present
123 Assert.AreEqual ("true", se.Attribute ("Unrestricted"), "Xml-Unrestricted");
124 Assert.IsNull (se.Children, "Xml-Children");
126 SecurityPermission copy = (SecurityPermission)sp.Copy ();
127 Assert.IsFalse (Object.ReferenceEquals (sp, copy), "ReferenceEquals");
128 Assert.AreEqual (sp.Flags, copy.Flags, "Flags");
129 Assert.AreEqual (sp.IsUnrestricted (), copy.IsUnrestricted (), "IsUnrestricted ()");
132 [Test]
133 [ExpectedException (typeof (ArgumentException))]
134 public void PermissionState_Bad ()
136 PermissionState ps = (PermissionState)77;
137 SecurityPermission sp = new SecurityPermission (ps);
140 [Test]
141 [ExpectedException (typeof (ArgumentException))]
142 public void SecurityPermissionFlags_Bad ()
144 SecurityPermissionFlag spf = (SecurityPermissionFlag)(SecurityPermissionFlag.AllFlags + 1);
145 SecurityPermission sp = new SecurityPermission (spf);
148 [Test]
149 [ExpectedException (typeof (ArgumentException))]
150 public void Flags_SecurityPermissionFlags_Bad ()
152 SecurityPermissionFlag spf = (SecurityPermissionFlag)(SecurityPermissionFlag.AllFlags + 1);
153 SecurityPermission sp = new SecurityPermission (PermissionState.None);
154 sp.Flags = spf;
157 [Test]
158 public void Copy ()
160 SecurityPermission sp = new SecurityPermission (PermissionState.None);
161 foreach (SecurityPermissionFlag spf in AllFlags) {
162 sp.Flags = spf;
163 SecurityPermission copy = (SecurityPermission) sp.Copy ();
164 Assert.AreEqual (spf, copy.Flags, spf.ToString ());
168 [Test]
169 public void Intersect_Null ()
171 SecurityPermission sp = new SecurityPermission (PermissionState.None);
172 // No intersection with null
173 foreach (SecurityPermissionFlag spf in AllFlags) {
174 sp.Flags = spf;
175 Assert.IsNull (sp.Intersect (null), spf.ToString ());
179 [Test]
180 public void Intersect_None ()
182 SecurityPermission sp1 = new SecurityPermission (PermissionState.None);
183 SecurityPermission sp2 = new SecurityPermission (PermissionState.None);
184 foreach (SecurityPermissionFlag spf in AllFlagsExceptNoFlags) {
185 sp2.Flags = spf;
186 // 1. Intersect None with spf
187 SecurityPermission result = (SecurityPermission)sp1.Intersect (sp2);
188 Assert.IsNull (result, "None N " + spf.ToString ());
189 // 2. Intersect spf with None
190 result = (SecurityPermission)sp2.Intersect (sp1);
191 Assert.IsNull (result, "None N " + spf.ToString ());
195 [Test]
196 public void Intersect_Self ()
198 SecurityPermission sp = new SecurityPermission (PermissionState.None);
199 foreach (SecurityPermissionFlag spf in AllFlagsExceptNoFlags) {
200 sp.Flags = spf;
201 SecurityPermission result = (SecurityPermission)sp.Intersect (sp);
202 Assert.AreEqual (spf, result.Flags, spf.ToString ());
206 [Test]
207 public void Intersect_Unrestricted ()
209 // Intersection with unrestricted == Copy
210 // a. source (this) is unrestricted
211 SecurityPermission sp1 = new SecurityPermission (PermissionState.Unrestricted);
212 SecurityPermission sp2 = new SecurityPermission (PermissionState.None);
213 foreach (SecurityPermissionFlag spf in AllFlagsExceptNoFlags) {
214 sp2.Flags = spf;
215 SecurityPermission result = (SecurityPermission) sp1.Intersect (sp2);
216 Assert.AreEqual (sp2.Flags, result.Flags, "target " + spf.ToString ());
218 // b. destination (target) is unrestricted
219 foreach (SecurityPermissionFlag spf in AllFlagsExceptNoFlags) {
220 sp2.Flags = spf;
221 SecurityPermission result = (SecurityPermission)sp2.Intersect (sp1);
222 Assert.AreEqual (sp2.Flags, result.Flags, "source " + spf.ToString ());
224 // exceptions for NoFlags
225 sp2.Flags = SecurityPermissionFlag.NoFlags;
226 Assert.IsNull (sp1.Intersect (sp2), "target NoFlags");
227 Assert.IsNull (sp2.Intersect (sp1), "source NoFlags");
230 [Test]
231 public void IsSubset_Null ()
233 SecurityPermission sp = new SecurityPermission (PermissionState.None);
234 Assert.IsTrue (sp.IsSubsetOf (null), "NoFlags");
235 foreach (SecurityPermissionFlag spf in AllFlagsExceptNoFlags) {
236 sp.Flags = spf;
237 Assert.IsFalse (sp.IsSubsetOf (null), spf.ToString ());
241 [Test]
242 public void IsSubset_None ()
244 // IsSubset with none
245 // a. source (this) is none -> target is never a subset
246 SecurityPermission sp1 = new SecurityPermission (PermissionState.None);
247 SecurityPermission sp2 = new SecurityPermission (PermissionState.None);
248 foreach (SecurityPermissionFlag spf in AllFlags) {
249 sp2.Flags = spf;
250 Assert.IsTrue (sp1.IsSubsetOf (sp2), "target " + spf.ToString ());
252 // b. destination (target) is none -> target is always a subset
253 foreach (SecurityPermissionFlag spf in AllFlagsExceptNoFlags) {
254 sp2.Flags = spf;
255 Assert.IsFalse (sp2.IsSubsetOf (sp1), "source " + spf.ToString ());
257 // exception of NoFlags
258 sp2.Flags = SecurityPermissionFlag.NoFlags;
259 Assert.IsTrue (sp2.IsSubsetOf (sp1), "source NoFlags");
262 [Test]
263 public void IsSubset_Self ()
265 SecurityPermission sp = new SecurityPermission (PermissionState.None);
266 foreach (SecurityPermissionFlag spf in AllFlags) {
267 sp.Flags = spf;
268 SecurityPermission result = (SecurityPermission)sp.Intersect (sp);
269 Assert.IsTrue (sp.IsSubsetOf (sp), spf.ToString ());
273 [Test]
274 public void IsSubset_Unrestricted ()
276 // IsSubset with unrestricted
277 // a. source (this) is unrestricted -> target is never a subset
278 SecurityPermission sp1 = new SecurityPermission (PermissionState.Unrestricted);
279 SecurityPermission sp2 = new SecurityPermission (PermissionState.None);
280 foreach (SecurityPermissionFlag spf in AllFlagsExceptAllFlags) {
281 sp2.Flags = spf;
282 Assert.IsFalse (sp1.IsSubsetOf (sp2), "target " + spf.ToString ());
284 // exception of AllFlags
285 sp2.Flags = SecurityPermissionFlag.AllFlags;
286 Assert.IsTrue (sp1.IsSubsetOf (sp2), "target AllFlags");
287 // b. destination (target) is unrestricted -> target is always a subset
288 foreach (SecurityPermissionFlag spf in AllFlags) {
289 sp2.Flags = spf;
290 Assert.IsTrue (sp2.IsSubsetOf (sp1), "source " + spf.ToString ());
294 [Test]
295 public void Union_Null ()
297 SecurityPermission sp = new SecurityPermission (PermissionState.None);
298 // Union with null is a simple copy
299 foreach (SecurityPermissionFlag spf in AllFlags) {
300 sp.Flags = spf;
301 SecurityPermission union = (SecurityPermission) sp.Union (null);
302 Assert.AreEqual (spf, union.Flags, spf.ToString ());
306 [Test]
307 public void Union_None ()
309 // Union with none is same
310 SecurityPermission sp1 = new SecurityPermission (PermissionState.None);
311 SecurityPermission sp2 = new SecurityPermission (PermissionState.None);
312 // a. source (this) is none
313 foreach (SecurityPermissionFlag spf in AllFlagsExceptAllFlags) {
314 sp2.Flags = spf;
315 SecurityPermission union = (SecurityPermission)sp1.Union (sp2);
316 Assert.IsFalse (union.IsUnrestricted (), "target " + spf.ToString ());
318 // b. destination (target) is none
319 foreach (SecurityPermissionFlag spf in AllFlagsExceptAllFlags) {
320 sp2.Flags = spf;
321 SecurityPermission union = (SecurityPermission)sp2.Union (sp1);
322 Assert.IsFalse (union.IsUnrestricted (), "source " + spf.ToString ());
326 [Test]
327 public void Union_Self ()
329 SecurityPermission sp = new SecurityPermission (PermissionState.None);
330 foreach (SecurityPermissionFlag spf in AllFlags) {
331 sp.Flags = spf;
332 SecurityPermission result = (SecurityPermission)sp.Union (sp);
333 Assert.AreEqual (spf, result.Flags, spf.ToString ());
337 [Test]
338 public void Union_Unrestricted ()
340 // Union with unrestricted is unrestricted
341 SecurityPermission sp1 = new SecurityPermission (PermissionState.Unrestricted);
342 SecurityPermission sp2 = new SecurityPermission (PermissionState.None);
343 // a. source (this) is unrestricted
344 foreach (SecurityPermissionFlag spf in AllFlags) {
345 sp2.Flags = spf;
346 SecurityPermission union = (SecurityPermission)sp1.Union (sp2);
347 Assert.IsTrue (union.IsUnrestricted (), "target " + spf.ToString ());
349 // b. destination (target) is unrestricted
350 foreach (SecurityPermissionFlag spf in AllFlags) {
351 sp2.Flags = spf;
352 SecurityPermission union = (SecurityPermission)sp2.Union (sp1);
353 Assert.IsTrue (union.IsUnrestricted (), "source " + spf.ToString ());
357 [Test]
358 [ExpectedException (typeof (ArgumentNullException))]
359 public void FromXml_Null ()
361 SecurityPermission sp = new SecurityPermission (PermissionState.None);
362 sp.FromXml (null);
365 [Test]
366 [ExpectedException (typeof (ArgumentException))]
367 public void FromXml_WrongTag ()
369 SecurityPermission sp = new SecurityPermission (PermissionState.None);
370 SecurityElement se = sp.ToXml ();
371 se.Tag = "IMono";
372 sp.FromXml (se);
375 [Test]
376 [ExpectedException (typeof (ArgumentException))]
377 public void FromXml_WrongTagCase ()
379 SecurityPermission sp = new SecurityPermission (PermissionState.None);
380 SecurityElement se = sp.ToXml ();
381 se.Tag = "IPERMISSION"; // instead of IPermission
382 sp.FromXml (se);
385 [Test]
386 public void FromXml_WrongClass ()
388 SecurityPermission sp = new SecurityPermission (PermissionState.None);
389 SecurityElement se = sp.ToXml ();
391 SecurityElement w = new SecurityElement (se.Tag);
392 w.AddAttribute ("class", "Wrong" + se.Attribute ("class"));
393 w.AddAttribute ("version", se.Attribute ("version"));
394 sp.FromXml (w);
395 // doesn't care of the class name at that stage
396 // anyway the class has already be created so...
399 [Test]
400 public void FromXml_NoClass ()
402 SecurityPermission sp = new SecurityPermission (PermissionState.None);
403 SecurityElement se = sp.ToXml ();
405 SecurityElement w = new SecurityElement (se.Tag);
406 w.AddAttribute ("version", se.Attribute ("version"));
407 sp.FromXml (w);
408 // doesn't even care of the class attribute presence
411 [Test]
412 [ExpectedException (typeof (ArgumentException))]
413 public void FromXml_WrongVersion ()
415 SecurityPermission sp = new SecurityPermission (PermissionState.None);
416 SecurityElement se = sp.ToXml ();
417 se.Attributes.Remove ("version");
418 se.Attributes.Add ("version", "2");
419 sp.FromXml (se);
422 [Test]
423 public void FromXml_NoVersion ()
425 SecurityPermission sp = new SecurityPermission (PermissionState.None);
426 SecurityElement se = sp.ToXml ();
428 SecurityElement w = new SecurityElement (se.Tag);
429 w.AddAttribute ("class", se.Attribute ("class"));
430 sp.FromXml (w);