minor fix for bug 9520:
[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                 }
74
75                 [Test]
76                 public void Action_Invalid ()
77                 {
78                         WebPermissionAttribute a = new WebPermissionAttribute ((SecurityAction)Int32.MinValue);
79                         // no validation in attribute
80                 }
81
82                 [Test]
83                 public void Unrestricted ()
84                 {
85                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
86                         a.Unrestricted = true;
87                         WebPermission wp = (WebPermission)a.CreatePermission ();
88                         Assert.IsTrue (wp.IsUnrestricted (), "IsUnrestricted");
89
90                         a.Unrestricted = false;
91                         wp = (WebPermission)a.CreatePermission ();
92                         Assert.IsFalse (wp.IsUnrestricted (), "!IsUnrestricted");
93                 }
94
95 #if NET_2_0
96                 [Test]
97                 public void Accept_Null ()
98                 {
99                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
100                         a.Accept = null; // legal
101                         Assert.IsNull (a.Accept, "Accept");
102                         Assert.IsNull (a.Connect, "Connect");
103                 }
104 #else
105
106                 [Test]
107                 // Strangely, although you can set Accept to value of null, you cannot
108                 // then examine the value without throwing a NullRef
109                 [ExpectedException (typeof (NullReferenceException))]
110                 public void Accept_Null ()
111                 {
112                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
113                         a.Accept = null; // legal
114                         Assert.IsNull (a.Connect, "Connect");
115                 }
116
117                 [Test]
118                 // Strangely, although you can set Accept to value of null, you cannot
119                 // then examine the value without throwing a NullRef
120                 [ExpectedException (typeof (NullReferenceException))]
121                 public void Accept_Null2 ()
122                 {
123                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
124                         a.Accept = null; // legal
125                         Assert.IsNull (a.Accept, "Accept");
126                 }
127
128 #endif
129
130                 [Test]
131                 [ExpectedException (typeof (ArgumentException))]
132                 public void Accept_Dual ()
133                 {
134                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
135                         a.Accept = "/";
136                         a.Accept = "\\";
137                 }
138
139                 [Test]
140                 [ExpectedException (typeof (ArgumentException))]
141                 public void Accept_Dual_Null ()
142                 {
143                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
144                         a.Accept = "/";
145                         a.Accept = null;
146                 }
147
148                 [Test]
149                 public void Accept ()
150                 {
151                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
152                         a.Accept = "/";
153                 }
154
155                 [Test]
156                 [ExpectedException (typeof (ArgumentNullException))]
157                 public void AcceptPattern_Null ()
158                 {
159                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
160                         a.AcceptPattern = null; 
161                 }
162
163                 [Test]
164                 [ExpectedException (typeof (ArgumentException))]
165                 public void AcceptPattern_Dual ()
166                 {
167                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
168                         a.AcceptPattern = "/";
169                         a.AcceptPattern = "\\";
170                 }
171
172 #if NET_2_0
173                 [Test]
174                 public void AcceptPattern ()
175                 {
176                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
177                         a.AcceptPattern = "\b(?"; // invalid regex expression
178                         Assert.AreEqual ("\b(?", a.AcceptPattern, "AcceptPattern");
179                         Assert.IsNull (a.ConnectPattern, "ConnectPattern");
180                 }
181 #endif
182
183                 [Test]
184                 [ExpectedException (typeof (ArgumentException))]
185                 public void Accept_AcceptPattern ()
186                 {
187                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
188                         a.Accept = "/";
189                         a.AcceptPattern = "\\";
190                 }
191
192                 [Test]
193                 [ExpectedException (typeof (ArgumentException))]
194                 public void AcceptPattern_Accept ()
195                 {
196                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
197                         a.AcceptPattern = "/";
198                         a.Accept = "\\";
199                 }
200
201 #if NET_2_0
202                 [Test]
203                 public void Connect_Null ()
204                 {
205                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
206                         a.Connect = null; // legal
207                         Assert.IsNull (a.Accept, "Accept");
208                         Assert.IsNull (a.Connect, "Connect");
209                 }
210 #else
211                 [Test]
212                 [ExpectedException (typeof (NullReferenceException))]
213                 public void Connect_Null ()
214                 {
215                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
216                         a.Connect = null; // legal
217                         Assert.IsNull (a.Accept, "Accept");
218                 }
219
220                 [Test]
221                 [ExpectedException (typeof (NullReferenceException))]
222                 public void Connect_Null2 ()
223                 {
224                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
225                         a.Connect = null; // legal
226                         Assert.IsNull (a.Connect, "Connect");
227                 }
228 #endif
229
230                 [Test]
231                 [ExpectedException (typeof (ArgumentException))]
232                 public void Connect_Dual ()
233                 {
234                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
235                         a.Connect = "/";
236                         a.Connect = "\\";
237                 }
238
239                 [Test]
240                 [ExpectedException (typeof (ArgumentException))]
241                 public void Connect_Dual_Null ()
242                 {
243                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
244                         a.Connect = "/";
245                         a.Connect = null;
246                 }
247
248 #if NET_2_0
249                 [Test]
250                 public void Connect ()
251                 {
252                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
253                         a.Connect = "/";
254                         Assert.IsNull (a.Accept, "Accept");
255                         Assert.AreEqual ("/", a.Connect, "Connect");
256                 }
257 #endif
258
259                 [Test]
260                 [ExpectedException (typeof (ArgumentNullException))]
261                 public void ConnectPattern_Null ()
262                 {
263                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
264                         a.ConnectPattern = null;
265                 }
266
267                 [Test]
268                 [ExpectedException (typeof (ArgumentException))]
269                 public void ConnectPattern_Dual ()
270                 {
271                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
272                         a.ConnectPattern = "/";
273                         a.ConnectPattern = "\\";
274                 }
275
276 #if NET_2_0
277                 [Test]
278                 public void ConnectPattern ()
279                 {
280                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
281                         a.ConnectPattern = "\b(?"; // invalid regex expression
282                         Assert.IsNull (a.AcceptPattern, "AcceptPattern");
283                         Assert.AreEqual ("\b(?", a.ConnectPattern, "ConnectPattern");
284                 }
285 #endif
286
287                 [Test]
288                 [ExpectedException (typeof (ArgumentException))]
289                 public void Connect_ConnectPattern ()
290                 {
291                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
292                         a.Connect = "/";
293                         a.ConnectPattern = "\\";
294                 }
295
296                 [Test]
297                 [ExpectedException (typeof (ArgumentException))]
298                 public void ConnectPattern_Accept ()
299                 {
300                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
301                         a.ConnectPattern = "/";
302                         a.Connect = "\\";
303                 }
304
305 #if NET_2_0
306                 [Test]
307                 public void CreatePermission_InvalidRegex ()
308                 {
309                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
310                         a.AcceptPattern = "\b(?"; // invalid regex expression
311                         a.ConnectPattern = "\b(?"; // invalid regex expression
312                         WebPermission wp = (WebPermission) a.CreatePermission ();
313                         Assert.IsNotNull (wp, "CreatePermission");
314                 }
315 #endif
316
317                 [Test]
318                 public void Attributes ()
319                 {
320                         Type t = typeof (WebPermissionAttribute);
321                         Assert.IsTrue (t.IsSerializable, "IsSerializable");
322
323                         object [] attrs = t.GetCustomAttributes (typeof (AttributeUsageAttribute), false);
324                         Assert.AreEqual (1, attrs.Length, "AttributeUsage");
325                         AttributeUsageAttribute aua = (AttributeUsageAttribute)attrs [0];
326                         Assert.IsTrue (aua.AllowMultiple, "AllowMultiple");
327                         Assert.IsFalse (aua.Inherited, "Inherited");
328                         AttributeTargets at = (AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Constructor | AttributeTargets.Method);
329                         Assert.AreEqual (at, aua.ValidOn, "ValidOn");
330                 }
331         }
332 }