2005-01-19 Sebastien Pouliot <sebastien@ximian.com>
[mono.git] / mcs / class / System / Test / System.Net / WebPermissionAttributeTest.cs
1 //
2 // WebPermissionAttributeTest.cs - NUnit Test Cases for WebPermissionAttribute
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.
27 //
28
29 using NUnit.Framework;
30 using System;
31 using System.Net;
32 using System.Security;
33 using System.Security.Permissions;
34 using System.Text.RegularExpressions;
35
36 namespace MonoTests.System.Net {
37
38         [TestFixture]
39         public class WebPermissionAttributeTest {
40
41                 [Test]
42                 public void Default ()
43                 {
44                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
45                         Assert.AreEqual (a.ToString (), a.TypeId.ToString (), "TypeId");
46                         Assert.IsFalse (a.Unrestricted, "Unrestricted");
47
48                         WebPermission wp = (WebPermission)a.CreatePermission ();
49                         Assert.IsFalse (wp.IsUnrestricted (), "IsUnrestricted");
50                 }
51
52                 [Test]
53                 public void Action ()
54                 {
55                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
56                         Assert.AreEqual (SecurityAction.Assert, a.Action, "Action=Assert");
57                         a.Action = SecurityAction.Demand;
58                         Assert.AreEqual (SecurityAction.Demand, a.Action, "Action=Demand");
59                         a.Action = SecurityAction.Deny;
60                         Assert.AreEqual (SecurityAction.Deny, a.Action, "Action=Deny");
61                         a.Action = SecurityAction.InheritanceDemand;
62                         Assert.AreEqual (SecurityAction.InheritanceDemand, a.Action, "Action=InheritanceDemand");
63                         a.Action = SecurityAction.LinkDemand;
64                         Assert.AreEqual (SecurityAction.LinkDemand, a.Action, "Action=LinkDemand");
65                         a.Action = SecurityAction.PermitOnly;
66                         Assert.AreEqual (SecurityAction.PermitOnly, a.Action, "Action=PermitOnly");
67                         a.Action = SecurityAction.RequestMinimum;
68                         Assert.AreEqual (SecurityAction.RequestMinimum, a.Action, "Action=RequestMinimum");
69                         a.Action = SecurityAction.RequestOptional;
70                         Assert.AreEqual (SecurityAction.RequestOptional, a.Action, "Action=RequestOptional");
71                         a.Action = SecurityAction.RequestRefuse;
72                         Assert.AreEqual (SecurityAction.RequestRefuse, a.Action, "Action=RequestRefuse");
73 #if NET_2_0
74                         a.Action = SecurityAction.DemandChoice;
75                         Assert.AreEqual (SecurityAction.DemandChoice, a.Action, "Action=DemandChoice");
76                         a.Action = SecurityAction.InheritanceDemandChoice;
77                         Assert.AreEqual (SecurityAction.InheritanceDemandChoice, a.Action, "Action=InheritanceDemandChoice");
78                         a.Action = SecurityAction.LinkDemandChoice;
79                         Assert.AreEqual (SecurityAction.LinkDemandChoice, a.Action, "Action=LinkDemandChoice");
80 #endif
81                 }
82
83                 [Test]
84                 public void Action_Invalid ()
85                 {
86                         WebPermissionAttribute a = new WebPermissionAttribute ((SecurityAction)Int32.MinValue);
87                         // no validation in attribute
88                 }
89
90                 [Test]
91                 public void Unrestricted ()
92                 {
93                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
94                         a.Unrestricted = true;
95                         WebPermission wp = (WebPermission)a.CreatePermission ();
96                         Assert.IsTrue (wp.IsUnrestricted (), "IsUnrestricted");
97
98                         a.Unrestricted = false;
99                         wp = (WebPermission)a.CreatePermission ();
100                         Assert.IsFalse (wp.IsUnrestricted (), "!IsUnrestricted");
101                 }
102
103 #if NET_2_0
104                 [Test]
105                 public void Accept_Null ()
106                 {
107                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
108                         a.Accept = null; // legal
109                         Assert.IsNull (a.Accept, "Accept");
110                         Assert.IsNull (a.Connect, "Connect");
111                 }
112 #else
113
114                 [Test]
115                 // Strangely, although you can set Accept to value of null, you cannot
116                 // then examine the value without throwing a NullRef
117                 [ExpectedException (typeof (NullReferenceException))]
118                 public void Accept_Null ()
119                 {
120                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
121                         a.Accept = null; // legal
122                         Assert.IsNull (a.Connect, "Connect");
123                 }
124
125                 [Test]
126                 // Strangely, although you can set Accept to value of null, you cannot
127                 // then examine the value without throwing a NullRef
128                 [ExpectedException (typeof (NullReferenceException))]
129                 public void Accept_Null2 ()
130                 {
131                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
132                         a.Accept = null; // legal
133                         Assert.IsNull (a.Accept, "Accept");
134                 }
135
136 #endif
137
138                 [Test]
139                 [ExpectedException (typeof (ArgumentException))]
140                 public void Accept_Dual ()
141                 {
142                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
143                         a.Accept = "/";
144                         a.Accept = "\\";
145                 }
146
147                 [Test]
148                 [ExpectedException (typeof (ArgumentException))]
149                 public void Accept_Dual_Null ()
150                 {
151                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
152                         a.Accept = "/";
153                         a.Accept = null;
154                 }
155
156                 [Test]
157                 public void Accept ()
158                 {
159                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
160                         a.Accept = "/";
161                 }
162
163                 [Test]
164                 [ExpectedException (typeof (ArgumentNullException))]
165                 public void AcceptPattern_Null ()
166                 {
167                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
168                         a.AcceptPattern = null; 
169                 }
170
171                 [Test]
172                 [ExpectedException (typeof (ArgumentException))]
173                 public void AcceptPattern_Dual ()
174                 {
175                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
176                         a.AcceptPattern = "/";
177                         a.AcceptPattern = "\\";
178                 }
179
180 #if NET_2_0
181                 [Test]
182                 public void AcceptPattern ()
183                 {
184                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
185                         a.AcceptPattern = "\b(?"; // invalid regex expression
186                         Assert.AreEqual ("\b(?", a.AcceptPattern, "AcceptPattern");
187                         Assert.IsNull (a.ConnectPattern, "ConnectPattern");
188                 }
189 #endif
190
191                 [Test]
192                 [ExpectedException (typeof (ArgumentException))]
193                 public void Accept_AcceptPattern ()
194                 {
195                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
196                         a.Accept = "/";
197                         a.AcceptPattern = "\\";
198                 }
199
200                 [Test]
201                 [ExpectedException (typeof (ArgumentException))]
202                 public void AcceptPattern_Accept ()
203                 {
204                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
205                         a.AcceptPattern = "/";
206                         a.Accept = "\\";
207                 }
208
209 #if NET_2_0
210                 [Test]
211                 public void Connect_Null ()
212                 {
213                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
214                         a.Connect = null; // legal
215                         Assert.IsNull (a.Accept, "Accept");
216                         Assert.IsNull (a.Connect, "Connect");
217                 }
218 #else
219                 [Test]
220                 [ExpectedException (typeof (NullReferenceException))]
221                 public void Connect_Null ()
222                 {
223                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
224                         a.Connect = null; // legal
225                         Assert.IsNull (a.Accept, "Accept");
226                 }
227
228                 [Test]
229                 [ExpectedException (typeof (NullReferenceException))]
230                 public void Connect_Null2 ()
231                 {
232                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
233                         a.Connect = null; // legal
234                         Assert.IsNull (a.Connect, "Connect");
235                 }
236 #endif
237
238                 [Test]
239                 [ExpectedException (typeof (ArgumentException))]
240                 public void Connect_Dual ()
241                 {
242                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
243                         a.Connect = "/";
244                         a.Connect = "\\";
245                 }
246
247                 [Test]
248                 [ExpectedException (typeof (ArgumentException))]
249                 public void Connect_Dual_Null ()
250                 {
251                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
252                         a.Connect = "/";
253                         a.Connect = null;
254                 }
255
256 #if NET_2_0
257                 [Test]
258                 public void Connect ()
259                 {
260                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
261                         a.Connect = "/";
262                         Assert.IsNull (a.Accept, "Accept");
263                         Assert.AreEqual ("/", a.Connect, "Connect");
264                 }
265 #endif
266
267                 [Test]
268                 [ExpectedException (typeof (ArgumentNullException))]
269                 public void ConnectPattern_Null ()
270                 {
271                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
272                         a.ConnectPattern = null;
273                 }
274
275                 [Test]
276                 [ExpectedException (typeof (ArgumentException))]
277                 public void ConnectPattern_Dual ()
278                 {
279                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
280                         a.ConnectPattern = "/";
281                         a.ConnectPattern = "\\";
282                 }
283
284 #if NET_2_0
285                 [Test]
286                 public void ConnectPattern ()
287                 {
288                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
289                         a.ConnectPattern = "\b(?"; // invalid regex expression
290                         Assert.IsNull (a.AcceptPattern, "AcceptPattern");
291                         Assert.AreEqual ("\b(?", a.ConnectPattern, "ConnectPattern");
292                 }
293 #endif
294
295                 [Test]
296                 [ExpectedException (typeof (ArgumentException))]
297                 public void Connect_ConnectPattern ()
298                 {
299                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
300                         a.Connect = "/";
301                         a.ConnectPattern = "\\";
302                 }
303
304                 [Test]
305                 [ExpectedException (typeof (ArgumentException))]
306                 public void ConnectPattern_Accept ()
307                 {
308                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
309                         a.ConnectPattern = "/";
310                         a.Connect = "\\";
311                 }
312
313 #if NET_2_0
314                 [Test]
315                 public void CreatePermission_InvalidRegex ()
316                 {
317                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
318                         a.AcceptPattern = "\b(?"; // invalid regex expression
319                         a.ConnectPattern = "\b(?"; // invalid regex expression
320                         WebPermission wp = (WebPermission) a.CreatePermission ();
321                         Assert.IsNotNull (wp, "CreatePermission");
322                 }
323 #endif
324
325                 [Test]
326                 public void Attributes ()
327                 {
328                         Type t = typeof (WebPermissionAttribute);
329                         Assert.IsTrue (t.IsSerializable, "IsSerializable");
330
331                         object [] attrs = t.GetCustomAttributes (typeof (AttributeUsageAttribute), false);
332                         Assert.AreEqual (1, attrs.Length, "AttributeUsage");
333                         AttributeUsageAttribute aua = (AttributeUsageAttribute)attrs [0];
334                         Assert.IsTrue (aua.AllowMultiple, "AllowMultiple");
335                         Assert.IsFalse (aua.Inherited, "Inherited");
336                         AttributeTargets at = (AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Constructor | AttributeTargets.Method);
337                         Assert.AreEqual (at, aua.ValidOn, "ValidOn");
338                 }
339         }
340 }