Merge branch 'master' of github.com:tgiphil/mono
[mono.git] / mcs / class / System / Test / System.Web / AspNetHostingPermissionTest.cs
1 //\r
2 // AspNetHostingPermissionTest.cs - \r
3 //      NUnit Test Cases for AspNetHostingPermission\r
4 //\r
5 // Author:\r
6 //      Sebastien Pouliot  <sebastien@ximian.com>\r
7 //\r
8 // Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com)\r
9 //\r
10 // Permission is hereby granted, free of charge, to any person obtaining\r
11 // a copy of this software and associated documentation files (the\r
12 // "Software"), to deal in the Software without restriction, including\r
13 // without limitation the rights to use, copy, modify, merge, publish,\r
14 // distribute, sublicense, and/or sell copies of the Software, and to\r
15 // permit persons to whom the Software is furnished to do so, subject to\r
16 // the following conditions:\r
17 // \r
18 // The above copyright notice and this permission notice shall be\r
19 // included in all copies or substantial portions of the Software.\r
20 // \r
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
28 //\r
29 \r
30 using NUnit.Framework;\r
31 using System;\r
32 using System.Security;\r
33 using System.Security.Permissions;\r
34 using System.Web;\r
35 \r
36 namespace MonoTests.System.Web {\r
37 \r
38         [TestFixture]\r
39         public class AspNetHostingPermissionTest {\r
40 \r
41                 static AspNetHostingPermissionLevel[] AllLevel = {\r
42                         AspNetHostingPermissionLevel.None,\r
43                         AspNetHostingPermissionLevel.Minimal,\r
44                         AspNetHostingPermissionLevel.Low,\r
45                         AspNetHostingPermissionLevel.Medium,\r
46                         AspNetHostingPermissionLevel.High,\r
47                         AspNetHostingPermissionLevel.Unrestricted,\r
48                 };\r
49 \r
50                 static AspNetHostingPermissionLevel[] AllLevelExceptNone = {\r
51                         AspNetHostingPermissionLevel.Minimal,\r
52                         AspNetHostingPermissionLevel.Low,\r
53                         AspNetHostingPermissionLevel.Medium,\r
54                         AspNetHostingPermissionLevel.High,\r
55                         AspNetHostingPermissionLevel.Unrestricted,\r
56                 };\r
57 \r
58                 static AspNetHostingPermissionLevel[] AllLevelExceptUnrestricted = {\r
59                         AspNetHostingPermissionLevel.None,\r
60                         AspNetHostingPermissionLevel.Minimal,\r
61                         AspNetHostingPermissionLevel.Low,\r
62                         AspNetHostingPermissionLevel.Medium,\r
63                         AspNetHostingPermissionLevel.High,\r
64                 };\r
65 \r
66                 [Test]\r
67                 public void PermissionState_None ()\r
68                 {\r
69                         PermissionState ps = PermissionState.None;\r
70                         AspNetHostingPermission anhp = new AspNetHostingPermission (ps);\r
71                         Assert.AreEqual (AspNetHostingPermissionLevel.None, anhp.Level, "Level");\r
72                         Assert.IsFalse (anhp.IsUnrestricted (), "IsUnrestricted");\r
73 \r
74                         SecurityElement se = anhp.ToXml ();\r
75                         // only class and version are present\r
76                         Assert.AreEqual ("None", se.Attribute ("Level"), "Xml-Level");\r
77                         Assert.IsNull (se.Children, "Xml-Children");\r
78 \r
79                         AspNetHostingPermission copy = (AspNetHostingPermission)anhp.Copy ();\r
80                         Assert.IsFalse (Object.ReferenceEquals (anhp, copy), "ReferenceEquals");\r
81                         Assert.AreEqual (anhp.Level, copy.Level, "Level");\r
82                         Assert.AreEqual (anhp.IsUnrestricted (), copy.IsUnrestricted (), "IsUnrestricted ()");\r
83                 }\r
84 \r
85                 [Test]\r
86                 public void PermissionState_Unrestricted ()\r
87                 {\r
88                         PermissionState ps = PermissionState.Unrestricted;\r
89                         AspNetHostingPermission anhp = new AspNetHostingPermission (ps);\r
90                         Assert.AreEqual (AspNetHostingPermissionLevel.Unrestricted, anhp.Level, "Level");\r
91                         Assert.IsTrue (anhp.IsUnrestricted (), "IsUnrestricted");\r
92 \r
93                         SecurityElement se = anhp.ToXml ();
94 #if NET_2_0
95                         // fixed in 2.0 RC\r
96                         Assert.IsNotNull (se.Attribute ("Unrestricted"), "Xml-Unrestricted");
97 #else\r
98                         Assert.IsNull (se.Attribute ("Unrestricted"), "Xml-Unrestricted");
99 #endif\r
100                         Assert.AreEqual ("Unrestricted", se.Attribute ("Level"), "Xml-Level");\r
101                         Assert.IsNull (se.Children, "Xml-Children");\r
102 \r
103                         AspNetHostingPermission copy = (AspNetHostingPermission)anhp.Copy ();\r
104                         Assert.IsFalse (Object.ReferenceEquals (anhp, copy), "ReferenceEquals");\r
105                         Assert.AreEqual (anhp.Level, copy.Level, "Level");\r
106                         Assert.AreEqual (anhp.IsUnrestricted (), copy.IsUnrestricted (), "IsUnrestricted ()");\r
107                 }\r
108 \r
109                 [Test]\r
110                 [ExpectedException (typeof (ArgumentException))]\r
111                 public void PermissionState_Bad ()\r
112                 {\r
113                         PermissionState ps = (PermissionState) Int32.MinValue;\r
114                         AspNetHostingPermission anhp = new AspNetHostingPermission (ps);\r
115                 }\r
116 \r
117                 [Test]\r
118                 [ExpectedException (typeof (ArgumentException))]\r
119                 public void AspNetHostingPermissionLevels_Bad ()\r
120                 {\r
121                         AspNetHostingPermissionLevel ppl = (AspNetHostingPermissionLevel) Int32.MinValue;\r
122                         AspNetHostingPermission anhp = new AspNetHostingPermission (ppl);\r
123                 }\r
124 \r
125                 [Test]\r
126                 [ExpectedException (typeof (ArgumentException))]\r
127                 public void Level_AspNetHostingPermissionLevels_Bad ()\r
128                 {\r
129                         AspNetHostingPermission anhp = new AspNetHostingPermission (PermissionState.None);\r
130                         anhp.Level = (AspNetHostingPermissionLevel) Int32.MinValue;\r
131                 }\r
132 \r
133                 [Test]\r
134                 public void Copy ()\r
135                 {\r
136                         AspNetHostingPermission anhp = new AspNetHostingPermission (PermissionState.None);\r
137                         foreach (AspNetHostingPermissionLevel ppl in AllLevel) {\r
138                                 anhp.Level = ppl;\r
139                                 AspNetHostingPermission copy = (AspNetHostingPermission)anhp.Copy ();\r
140                                 Assert.AreEqual (ppl, copy.Level, ppl.ToString ());\r
141                         }\r
142                 }\r
143 \r
144                 [Test]\r
145                 public void Intersect_Null ()\r
146                 {\r
147                         AspNetHostingPermission anhp = new AspNetHostingPermission (PermissionState.None);\r
148                         // No intersection with null\r
149                         foreach (AspNetHostingPermissionLevel ppl in AllLevel) {\r
150                                 anhp.Level = ppl;
151                                 IPermission p = anhp.Intersect (null);
152 #if ! NET_2_0
153                                 if (p != null)
154                                         Assert.Ignore ("Behaviour changed in FX 1.1 SP1");\r
155 #endif\r
156                                 Assert.IsNull (p, ppl.ToString ());\r
157                         }\r
158                 }\r
159 \r
160                 [Test]\r
161                 public void Intersect_None ()\r
162                 {\r
163                         AspNetHostingPermission sp1 = new AspNetHostingPermission (PermissionState.None);\r
164                         AspNetHostingPermission sp2 = new AspNetHostingPermission (PermissionState.None);\r
165                         foreach (AspNetHostingPermissionLevel ppl in AllLevel) {\r
166                                 sp2.Level = ppl;\r
167                                 // 1. Intersect None with ppl\r
168                                 AspNetHostingPermission result = (AspNetHostingPermission)sp1.Intersect (sp2);\r
169                                 Assert.AreEqual (AspNetHostingPermissionLevel.None, result.Level, "None N " + ppl.ToString ());\r
170                                 // 2. Intersect ppl with None\r
171                                 result = (AspNetHostingPermission)sp2.Intersect (sp1);\r
172                                 Assert.AreEqual (AspNetHostingPermissionLevel.None, result.Level, ppl.ToString () + "N None");\r
173                         }\r
174                 }\r
175 \r
176                 [Test]\r
177                 public void Intersect_Self ()\r
178                 {\r
179                         AspNetHostingPermission anhp = new AspNetHostingPermission (PermissionState.None);\r
180                         foreach (AspNetHostingPermissionLevel ppl in AllLevel) {\r
181                                 anhp.Level = ppl;\r
182                                 AspNetHostingPermission result = (AspNetHostingPermission)anhp.Intersect (anhp);\r
183                                 Assert.AreEqual (ppl, result.Level, ppl.ToString ());\r
184                         }\r
185                 }\r
186 \r
187                 [Test]\r
188                 public void Intersect_Unrestricted ()\r
189                 {\r
190                         // Intersection with unrestricted == Copy\r
191                         // a. source (this) is unrestricted\r
192                         AspNetHostingPermission sp1 = new AspNetHostingPermission (PermissionState.Unrestricted);\r
193                         AspNetHostingPermission sp2 = new AspNetHostingPermission (PermissionState.None);\r
194                         foreach (AspNetHostingPermissionLevel ppl in AllLevel) {\r
195                                 sp2.Level = ppl;\r
196                                 AspNetHostingPermission result = (AspNetHostingPermission)sp1.Intersect (sp2);\r
197                                 Assert.AreEqual (sp2.Level, result.Level, "target " + ppl.ToString ());\r
198                         }\r
199                         // b. destination (target) is unrestricted\r
200                         foreach (AspNetHostingPermissionLevel ppl in AllLevel) {\r
201                                 sp2.Level = ppl;\r
202                                 AspNetHostingPermission result = (AspNetHostingPermission)sp2.Intersect (sp1);\r
203                                 Assert.AreEqual (sp2.Level, result.Level, "source " + ppl.ToString ());\r
204                         }\r
205                 }\r
206 \r
207                 [Test]\r
208                 public void IsSubset_Null ()\r
209                 {\r
210                         AspNetHostingPermission anhp = new AspNetHostingPermission (PermissionState.None);\r
211                         Assert.IsTrue (anhp.IsSubsetOf (null), "NoLevel");\r
212                         foreach (AspNetHostingPermissionLevel ppl in AllLevelExceptNone) {\r
213                                 anhp.Level = ppl;\r
214                                 Assert.IsFalse (anhp.IsSubsetOf (null), ppl.ToString ());\r
215                         }\r
216                 }\r
217 \r
218                 [Test]\r
219                 public void IsSubset_None ()\r
220                 {\r
221                         // IsSubset with none\r
222                         // a. source (this) is none -> target is never a subset\r
223                         AspNetHostingPermission sp1 = new AspNetHostingPermission (PermissionState.None);\r
224                         AspNetHostingPermission sp2 = new AspNetHostingPermission (PermissionState.None);\r
225                         foreach (AspNetHostingPermissionLevel ppl in AllLevel) {\r
226                                 sp2.Level = ppl;\r
227                                 Assert.IsTrue (sp1.IsSubsetOf (sp2), "target " + ppl.ToString ());\r
228                         }\r
229                         // b. destination (target) is none -> target is always a subset\r
230                         foreach (AspNetHostingPermissionLevel ppl in AllLevelExceptNone) {\r
231                                 sp2.Level = ppl;\r
232                                 Assert.IsFalse (sp2.IsSubsetOf (sp1), "source " + ppl.ToString ());\r
233                         }\r
234                         // exception of NoLevel\r
235                         sp2.Level = AspNetHostingPermissionLevel.None;\r
236                         Assert.IsTrue (sp2.IsSubsetOf (sp1), "source NoLevel");\r
237                 }\r
238 \r
239                 [Test]\r
240                 public void IsSubset_Self ()\r
241                 {\r
242                         AspNetHostingPermission anhp = new AspNetHostingPermission (PermissionState.None);\r
243                         foreach (AspNetHostingPermissionLevel ppl in AllLevel) {\r
244                                 anhp.Level = ppl;\r
245                                 AspNetHostingPermission result = (AspNetHostingPermission)anhp.Intersect (anhp);\r
246                                 Assert.IsTrue (anhp.IsSubsetOf (anhp), ppl.ToString ());\r
247                         }\r
248                 }\r
249 \r
250                 [Test]\r
251                 public void IsSubset_Unrestricted ()\r
252                 {\r
253                         // IsSubset with unrestricted\r
254                         // a. source (this) is unrestricted -> target is never a subset\r
255                         AspNetHostingPermission sp1 = new AspNetHostingPermission (PermissionState.Unrestricted);\r
256                         AspNetHostingPermission sp2 = new AspNetHostingPermission (PermissionState.None);\r
257                         foreach (AspNetHostingPermissionLevel ppl in AllLevelExceptUnrestricted) {\r
258                                 sp2.Level = ppl;\r
259                                 Assert.IsFalse (sp1.IsSubsetOf (sp2), "target " + ppl.ToString ());\r
260                         }\r
261                         // exception of AllLevel\r
262                         sp2.Level = AspNetHostingPermissionLevel.Unrestricted;\r
263                         Assert.IsTrue (sp1.IsSubsetOf (sp2), "target AllLevel");\r
264                         // b. destination (target) is unrestricted -> target is always a subset\r
265                         foreach (AspNetHostingPermissionLevel ppl in AllLevel) {\r
266                                 sp2.Level = ppl;\r
267                                 Assert.IsTrue (sp2.IsSubsetOf (sp1), "source " + ppl.ToString ());\r
268                         }\r
269                 }\r
270 \r
271                 [Test]\r
272                 public void Union_Null ()\r
273                 {\r
274                         AspNetHostingPermission anhp = new AspNetHostingPermission (PermissionState.None);\r
275                         // Union with null is a simple copy\r
276                         foreach (AspNetHostingPermissionLevel ppl in AllLevel) {\r
277                                 anhp.Level = ppl;\r
278                                 AspNetHostingPermission union = (AspNetHostingPermission)anhp.Union (null);\r
279                                 Assert.AreEqual (ppl, union.Level, ppl.ToString ());\r
280                         }\r
281                 }\r
282 \r
283                 [Test]\r
284                 public void Union_None ()\r
285                 {\r
286                         // Union with none is same\r
287                         AspNetHostingPermission pp1 = new AspNetHostingPermission (PermissionState.None);\r
288                         AspNetHostingPermission pp2 = new AspNetHostingPermission (PermissionState.None);\r
289                         AspNetHostingPermission union = null;\r
290 \r
291                         foreach (AspNetHostingPermissionLevel ppl in AllLevelExceptUnrestricted) {\r
292                                 pp2.Level = ppl;\r
293                                 \r
294                                 union = (AspNetHostingPermission)pp1.Union (pp2);\r
295                                 Assert.IsFalse (union.IsUnrestricted (), "target.Unrestricted " + ppl.ToString ());\r
296                                 Assert.AreEqual (ppl, union.Level, "target.Level " + ppl.ToString ());\r
297 \r
298                                 union = (AspNetHostingPermission)pp2.Union (pp1);\r
299                                 Assert.IsFalse (union.IsUnrestricted (), "source.Unrestricted " + ppl.ToString ());\r
300                                 Assert.AreEqual (ppl, union.Level, "source.Level " + ppl.ToString ());\r
301                         }\r
302 \r
303                         pp2.Level = AspNetHostingPermissionLevel.Unrestricted;\r
304                         union = (AspNetHostingPermission)pp1.Union (pp2);\r
305                         Assert.IsTrue (union.IsUnrestricted (), "target.Unrestricted Unrestricted");\r
306                         Assert.AreEqual (AspNetHostingPermissionLevel.Unrestricted, union.Level, "target.Level Unrestricted");\r
307 \r
308                         union = (AspNetHostingPermission)pp2.Union (pp1);\r
309                         Assert.IsTrue (union.IsUnrestricted (), "source.Unrestricted Unrestricted");\r
310                         Assert.AreEqual (AspNetHostingPermissionLevel.Unrestricted, union.Level, "source.Level Unrestricted");\r
311                 }\r
312 \r
313                 [Test]\r
314                 public void Union_Self ()\r
315                 {\r
316                         AspNetHostingPermission anhp = new AspNetHostingPermission (PermissionState.None);\r
317                         foreach (AspNetHostingPermissionLevel ppl in AllLevel) {\r
318                                 anhp.Level = ppl;\r
319                                 AspNetHostingPermission result = (AspNetHostingPermission)anhp.Union (anhp);\r
320                                 Assert.AreEqual (ppl, result.Level, ppl.ToString ());\r
321                         }\r
322                 }\r
323 \r
324                 [Test]\r
325                 public void Union_Unrestricted ()\r
326                 {\r
327                         // Union with unrestricted is unrestricted\r
328                         AspNetHostingPermission sp1 = new AspNetHostingPermission (PermissionState.Unrestricted);\r
329                         AspNetHostingPermission sp2 = new AspNetHostingPermission (PermissionState.None);\r
330                         // a. source (this) is unrestricted\r
331                         foreach (AspNetHostingPermissionLevel ppl in AllLevel) {\r
332                                 sp2.Level = ppl;\r
333                                 AspNetHostingPermission union = (AspNetHostingPermission)sp1.Union (sp2);\r
334                                 Assert.IsTrue (union.IsUnrestricted (), "target " + ppl.ToString ());\r
335                         }\r
336                         // b. destination (target) is unrestricted\r
337                         foreach (AspNetHostingPermissionLevel ppl in AllLevel) {\r
338                                 sp2.Level = ppl;\r
339                                 AspNetHostingPermission union = (AspNetHostingPermission)sp2.Union (sp1);\r
340                                 Assert.IsTrue (union.IsUnrestricted (), "source " + ppl.ToString ());\r
341                         }\r
342                 }\r
343 \r
344                 [Test]\r
345                 [ExpectedException (typeof (ArgumentNullException))]\r
346                 public void FromXml_Null ()\r
347                 {\r
348                         AspNetHostingPermission anhp = new AspNetHostingPermission (PermissionState.None);\r
349                         anhp.FromXml (null);\r
350                 }\r
351 \r
352                 [Test]\r
353                 [ExpectedException (typeof (ArgumentException))]\r
354                 public void FromXml_WrongTag ()\r
355                 {\r
356                         AspNetHostingPermission anhp = new AspNetHostingPermission (PermissionState.None);\r
357                         SecurityElement se = anhp.ToXml ();\r
358                         se.Tag = "IMono";\r
359                         anhp.FromXml (se);\r
360                         // note: normally IPermission classes (in corlib) DO care about the\r
361                         // IPermission tag\r
362                 }\r
363 \r
364                 [Test]\r
365                 [ExpectedException (typeof (ArgumentException))]\r
366                 public void FromXml_WrongTagCase ()\r
367                 {\r
368                         AspNetHostingPermission anhp = new AspNetHostingPermission (PermissionState.None);\r
369                         SecurityElement se = anhp.ToXml ();\r
370                         se.Tag = "IPERMISSION"; // instead of IPermission\r
371                         anhp.FromXml (se);\r
372                         // note: normally IPermission classes (in corlib) DO care about the\r
373                         // IPermission tag\r
374                 }\r
375 \r
376                 [Test]\r
377                 public void FromXml_WrongClass ()\r
378                 {\r
379                         AspNetHostingPermission anhp = new AspNetHostingPermission (PermissionState.None);\r
380                         SecurityElement se = anhp.ToXml ();\r
381 \r
382                         SecurityElement w = new SecurityElement (se.Tag);\r
383                         w.AddAttribute ("class", "Wrong" + se.Attribute ("class"));\r
384                         w.AddAttribute ("version", se.Attribute ("version"));\r
385                         anhp.FromXml (w);\r
386                         // doesn't care of the class name at that stage\r
387                         // anyway the class has already be created so...\r
388                 }\r
389 \r
390                 [Test]\r
391                 [ExpectedException (typeof (ArgumentException))]\r
392                 public void FromXml_NoClass ()\r
393                 {\r
394                         AspNetHostingPermission anhp = new AspNetHostingPermission (PermissionState.None);\r
395                         SecurityElement se = anhp.ToXml ();\r
396 \r
397                         SecurityElement w = new SecurityElement (se.Tag);\r
398                         w.AddAttribute ("version", se.Attribute ("version"));\r
399                         anhp.FromXml (w);\r
400                         // note: normally IPermission classes (in corlib) DO NOT care about\r
401                         // attribute "class" name presence in the XML\r
402                 }\r
403 \r
404                 [Test]\r
405                 [ExpectedException (typeof (ArgumentException))]\r
406                 public void FromXml_WrongVersion ()\r
407                 {\r
408                         AspNetHostingPermission anhp = new AspNetHostingPermission (PermissionState.None);\r
409                         SecurityElement se = anhp.ToXml ();\r
410                         se.Attributes.Remove ("version");\r
411                         se.Attributes.Add ("version", "2");\r
412                         anhp.FromXml (se);\r
413                 }\r
414 \r
415                 [Test]\r
416                 [ExpectedException (typeof (ArgumentException))]\r
417                 public void FromXml_NoVersion ()\r
418                 {\r
419                         AspNetHostingPermission anhp = new AspNetHostingPermission (PermissionState.None);\r
420                         SecurityElement se = anhp.ToXml ();\r
421 \r
422                         SecurityElement w = new SecurityElement (se.Tag);\r
423                         w.AddAttribute ("class", se.Attribute ("class"));\r
424                         anhp.FromXml (w);\r
425                 }\r
426         }\r
427 }\r