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