2 // WebPermissionAttributeTest.cs - NUnit Test Cases for WebPermissionAttribute
5 // Sebastien Pouliot <sebastien@ximian.com>
7 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
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:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
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;
32 using System.Security;
33 using System.Security.Permissions;
34 using System.Text.RegularExpressions;
36 namespace MonoTests.System.Net {
40 [Ignore ("CAS is not supported and parts will be linked away")]
42 public class WebPermissionAttributeTest {
45 public void Default ()
47 WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
48 Assert.AreEqual (a.ToString (), a.TypeId.ToString (), "TypeId");
49 Assert.IsFalse (a.Unrestricted, "Unrestricted");
51 WebPermission wp = (WebPermission)a.CreatePermission ();
52 Assert.IsFalse (wp.IsUnrestricted (), "IsUnrestricted");
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");
79 public void Action_Invalid ()
81 WebPermissionAttribute a = new WebPermissionAttribute ((SecurityAction)Int32.MinValue);
82 // no validation in attribute
86 public void Unrestricted ()
88 WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
89 a.Unrestricted = true;
90 WebPermission wp = (WebPermission)a.CreatePermission ();
91 Assert.IsTrue (wp.IsUnrestricted (), "IsUnrestricted");
93 a.Unrestricted = false;
94 wp = (WebPermission)a.CreatePermission ();
95 Assert.IsFalse (wp.IsUnrestricted (), "!IsUnrestricted");
100 public void Accept_Null ()
102 WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
103 a.Accept = null; // legal
104 Assert.IsNull (a.Accept, "Accept");
105 Assert.IsNull (a.Connect, "Connect");
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 ()
115 WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
116 a.Accept = null; // legal
117 Assert.IsNull (a.Connect, "Connect");
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 ()
126 WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
127 a.Accept = null; // legal
128 Assert.IsNull (a.Accept, "Accept");
134 [ExpectedException (typeof (ArgumentException))]
135 public void Accept_Dual ()
137 WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
143 [ExpectedException (typeof (ArgumentException))]
144 public void Accept_Dual_Null ()
146 WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
152 public void Accept ()
154 WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
159 [ExpectedException (typeof (ArgumentNullException))]
160 public void AcceptPattern_Null ()
162 WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
163 a.AcceptPattern = null;
167 [ExpectedException (typeof (ArgumentException))]
168 public void AcceptPattern_Dual ()
170 WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
171 a.AcceptPattern = "/";
172 a.AcceptPattern = "\\";
177 public void AcceptPattern ()
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");
187 [ExpectedException (typeof (ArgumentException))]
188 public void Accept_AcceptPattern ()
190 WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
192 a.AcceptPattern = "\\";
196 [ExpectedException (typeof (ArgumentException))]
197 public void AcceptPattern_Accept ()
199 WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
200 a.AcceptPattern = "/";
206 public void Connect_Null ()
208 WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
209 a.Connect = null; // legal
210 Assert.IsNull (a.Accept, "Accept");
211 Assert.IsNull (a.Connect, "Connect");
215 [ExpectedException (typeof (NullReferenceException))]
216 public void Connect_Null ()
218 WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
219 a.Connect = null; // legal
220 Assert.IsNull (a.Accept, "Accept");
224 [ExpectedException (typeof (NullReferenceException))]
225 public void Connect_Null2 ()
227 WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
228 a.Connect = null; // legal
229 Assert.IsNull (a.Connect, "Connect");
234 [ExpectedException (typeof (ArgumentException))]
235 public void Connect_Dual ()
237 WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
243 [ExpectedException (typeof (ArgumentException))]
244 public void Connect_Dual_Null ()
246 WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
253 public void Connect ()
255 WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
257 Assert.IsNull (a.Accept, "Accept");
258 Assert.AreEqual ("/", a.Connect, "Connect");
263 [ExpectedException (typeof (ArgumentNullException))]
264 public void ConnectPattern_Null ()
266 WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
267 a.ConnectPattern = null;
271 [ExpectedException (typeof (ArgumentException))]
272 public void ConnectPattern_Dual ()
274 WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
275 a.ConnectPattern = "/";
276 a.ConnectPattern = "\\";
281 public void ConnectPattern ()
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");
291 [ExpectedException (typeof (ArgumentException))]
292 public void Connect_ConnectPattern ()
294 WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
296 a.ConnectPattern = "\\";
300 [ExpectedException (typeof (ArgumentException))]
301 public void ConnectPattern_Accept ()
303 WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
304 a.ConnectPattern = "/";
310 public void CreatePermission_InvalidRegex ()
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");
321 public void Attributes ()
323 Type t = typeof (WebPermissionAttribute);
324 Assert.IsTrue (t.IsSerializable, "IsSerializable");
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");