* Mono.Posix.dll.sources: Rename Mono.Posix to Mono.Unix.
[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                 [Test]
104                 public void Accept_Null ()
105                 {
106                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
107                         a.Accept = null; // legal
108                         Assert.IsNull (a.Accept, "Accept");
109                         Assert.IsNull (a.Connect, "Connect");
110                 }
111
112                 [Test]
113                 [ExpectedException (typeof (ArgumentException))]
114                 public void Accept_Dual ()
115                 {
116                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
117                         a.Accept = "/";
118                         a.Accept = "\\";
119                 }
120
121                 [Test]
122                 [ExpectedException (typeof (ArgumentException))]
123                 public void Accept_Dual_Null ()
124                 {
125                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
126                         a.Accept = "/";
127                         a.Accept = null;
128                 }
129
130                 [Test]
131                 public void Accept ()
132                 {
133                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
134                         a.Accept = "/";
135                 }
136
137                 [Test]
138                 [ExpectedException (typeof (ArgumentNullException))]
139                 public void AcceptPattern_Null ()
140                 {
141                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
142                         a.AcceptPattern = null; 
143                 }
144
145                 [Test]
146                 [ExpectedException (typeof (ArgumentException))]
147                 public void AcceptPattern_Dual ()
148                 {
149                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
150                         a.AcceptPattern = "/";
151                         a.AcceptPattern = "\\";
152                 }
153
154                 [Test]
155                 public void AcceptPattern ()
156                 {
157                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
158                         a.AcceptPattern = "\b(?"; // invalid regex expression
159                         Assert.AreEqual ("\b(?", a.AcceptPattern, "AcceptPattern");
160                         Assert.IsNull (a.ConnectPattern, "ConnectPattern");
161                 }
162
163                 [Test]
164                 [ExpectedException (typeof (ArgumentException))]
165                 public void Accept_AcceptPattern ()
166                 {
167                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
168                         a.Accept = "/";
169                         a.AcceptPattern = "\\";
170                 }
171
172                 [Test]
173                 [ExpectedException (typeof (ArgumentException))]
174                 public void AcceptPattern_Accept ()
175                 {
176                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
177                         a.AcceptPattern = "/";
178                         a.Accept = "\\";
179                 }
180
181                 [Test]
182                 public void Connect_Null ()
183                 {
184                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
185                         a.Connect = null; // legal
186                         Assert.IsNull (a.Accept, "Accept");
187                         Assert.IsNull (a.Connect, "Connect");
188                 }
189
190                 [Test]
191                 [ExpectedException (typeof (ArgumentException))]
192                 public void Connect_Dual ()
193                 {
194                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
195                         a.Connect = "/";
196                         a.Connect = "\\";
197                 }
198
199                 [Test]
200                 [ExpectedException (typeof (ArgumentException))]
201                 public void Connect_Dual_Null ()
202                 {
203                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
204                         a.Connect = "/";
205                         a.Connect = null;
206                 }
207
208                 [Test]
209                 public void Connect ()
210                 {
211                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
212                         a.Connect = "/";
213                         Assert.IsNull (a.Accept, "Accept");
214                         Assert.AreEqual ("/", a.Connect, "Connect");
215                 }
216
217                 [Test]
218                 [ExpectedException (typeof (ArgumentNullException))]
219                 public void ConnectPattern_Null ()
220                 {
221                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
222                         a.ConnectPattern = null;
223                 }
224
225                 [Test]
226                 [ExpectedException (typeof (ArgumentException))]
227                 public void ConnectPattern_Dual ()
228                 {
229                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
230                         a.ConnectPattern = "/";
231                         a.ConnectPattern = "\\";
232                 }
233
234                 [Test]
235                 public void ConnectPattern ()
236                 {
237                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
238                         a.ConnectPattern = "\b(?"; // invalid regex expression
239                         Assert.IsNull (a.AcceptPattern, "AcceptPattern");
240                         Assert.AreEqual ("\b(?", a.ConnectPattern, "ConnectPattern");
241                 }
242
243                 [Test]
244                 [ExpectedException (typeof (ArgumentException))]
245                 public void Connect_ConnectPattern ()
246                 {
247                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
248                         a.Connect = "/";
249                         a.ConnectPattern = "\\";
250                 }
251
252                 [Test]
253                 [ExpectedException (typeof (ArgumentException))]
254                 public void ConnectPattern_Accept ()
255                 {
256                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
257                         a.ConnectPattern = "/";
258                         a.Connect = "\\";
259                 }
260
261                 [Test]
262                 public void CreatePermission_InvalidRegex ()
263                 {
264                         WebPermissionAttribute a = new WebPermissionAttribute (SecurityAction.Assert);
265                         a.AcceptPattern = "\b(?"; // invalid regex expression
266                         a.ConnectPattern = "\b(?"; // invalid regex expression
267                         WebPermission wp = (WebPermission) a.CreatePermission ();
268                         Assert.IsNotNull (wp, "CreatePermission");
269                 }
270
271                 [Test]
272                 public void Attributes ()
273                 {
274                         Type t = typeof (WebPermissionAttribute);
275                         Assert.IsTrue (t.IsSerializable, "IsSerializable");
276
277                         object [] attrs = t.GetCustomAttributes (typeof (AttributeUsageAttribute), false);
278                         Assert.AreEqual (1, attrs.Length, "AttributeUsage");
279                         AttributeUsageAttribute aua = (AttributeUsageAttribute)attrs [0];
280                         Assert.IsTrue (aua.AllowMultiple, "AllowMultiple");
281                         Assert.IsFalse (aua.Inherited, "Inherited");
282                         AttributeTargets at = (AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Constructor | AttributeTargets.Method);
283                         Assert.AreEqual (at, aua.ValidOn, "ValidOn");
284                 }
285         }
286 }