Merge pull request #733 from amoiseev-softheme/bugfix/monofix
[mono.git] / mcs / class / System / Test / System.Net / SocketPermissionAttributeTest.cs
1 //
2 // SocketPermissionAttributeTest.cs - NUnit Test Cases for SocketPermissionAttribute
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 #if !MOBILE
30
31 using NUnit.Framework;
32 using System;
33 using System.Net;
34 using System.Security;
35 using System.Security.Permissions;
36 using System.Text.RegularExpressions;
37
38 namespace MonoTests.System.Net {
39
40         [TestFixture]
41         public class SocketPermissionAttributeTest {
42
43                 [Test]
44                 public void Default ()
45                 {
46                         SocketPermissionAttribute a = new SocketPermissionAttribute (SecurityAction.Assert);
47                         Assert.AreEqual (a.ToString (), a.TypeId.ToString (), "TypeId");
48                         Assert.IsFalse (a.Unrestricted, "Unrestricted");
49                         Assert.IsNull (a.Access, "Access");
50                         Assert.IsNull (a.Host, "Host");
51                         Assert.IsNull (a.Port, "Port");
52                         Assert.IsNull (a.Transport, "Transport");
53
54                         a.Access = "connect";
55                         a.Host = String.Empty;
56                         a.Port = "80";
57                         a.Transport = "tcp";
58                         SocketPermission sp = (SocketPermission) a.CreatePermission ();
59                         Assert.IsFalse (sp.IsUnrestricted (), "IsUnrestricted");
60                 }
61
62                 [Test]
63                 public void Action ()
64                 {
65                         SocketPermissionAttribute a = new SocketPermissionAttribute (SecurityAction.Assert);
66                         Assert.AreEqual (SecurityAction.Assert, a.Action, "Action=Assert");
67                         a.Action = SecurityAction.Demand;
68                         Assert.AreEqual (SecurityAction.Demand, a.Action, "Action=Demand");
69                         a.Action = SecurityAction.Deny;
70                         Assert.AreEqual (SecurityAction.Deny, a.Action, "Action=Deny");
71                         a.Action = SecurityAction.InheritanceDemand;
72                         Assert.AreEqual (SecurityAction.InheritanceDemand, a.Action, "Action=InheritanceDemand");
73                         a.Action = SecurityAction.LinkDemand;
74                         Assert.AreEqual (SecurityAction.LinkDemand, a.Action, "Action=LinkDemand");
75                         a.Action = SecurityAction.PermitOnly;
76                         Assert.AreEqual (SecurityAction.PermitOnly, a.Action, "Action=PermitOnly");
77                         a.Action = SecurityAction.RequestMinimum;
78                         Assert.AreEqual (SecurityAction.RequestMinimum, a.Action, "Action=RequestMinimum");
79                         a.Action = SecurityAction.RequestOptional;
80                         Assert.AreEqual (SecurityAction.RequestOptional, a.Action, "Action=RequestOptional");
81                         a.Action = SecurityAction.RequestRefuse;
82                         Assert.AreEqual (SecurityAction.RequestRefuse, a.Action, "Action=RequestRefuse");
83                 }
84
85                 [Test]
86                 public void Action_Invalid ()
87                 {
88                         SocketPermissionAttribute a = new SocketPermissionAttribute ((SecurityAction)Int32.MinValue);
89                         // no validation in attribute
90                 }
91
92                 [Test]
93                 public void Unrestricted ()
94                 {
95                         SocketPermissionAttribute a = new SocketPermissionAttribute (SecurityAction.Assert);
96                         a.Access = "connect";
97                         a.Host = String.Empty;
98                         a.Port = "80";
99                         a.Transport = "tcp";
100                         a.Unrestricted = true;
101                         SocketPermission wp = (SocketPermission)a.CreatePermission ();
102                         Assert.IsTrue (wp.IsUnrestricted (), "IsUnrestricted");
103
104                         a.Unrestricted = false;
105                         wp = (SocketPermission)a.CreatePermission ();
106                         Assert.IsFalse (wp.IsUnrestricted (), "!IsUnrestricted");
107                 }
108
109                 [Test]
110                 [ExpectedException (typeof (ArgumentException))]
111                 public void Access_Null_CreatePermission ()
112                 {
113                         SocketPermissionAttribute a = new SocketPermissionAttribute (SecurityAction.Assert);
114                         a.Access = null; // legal (assign)
115                         SocketPermission sp = (SocketPermission) a.CreatePermission ();
116                 }
117
118                 [Test]
119                 public void Access_Null ()
120                 {
121                         SocketPermissionAttribute a = new SocketPermissionAttribute (SecurityAction.Assert);
122                         a.Access = null; // legal
123                         Assert.IsNull (a.Access, "Access");
124                 }
125
126                 [Test]
127                 [ExpectedException (typeof (ArgumentException))]
128                 public void Access_Dual ()
129                 {
130                         SocketPermissionAttribute a = new SocketPermissionAttribute (SecurityAction.Assert);
131                         a.Access = "/";
132                         a.Access = "\\";
133                 }
134
135                 [Test]
136                 [ExpectedException (typeof (ArgumentException))]
137                 public void Access_Dual_Null ()
138                 {
139                         SocketPermissionAttribute a = new SocketPermissionAttribute (SecurityAction.Assert);
140                         a.Access = "/";
141                         a.Access = null;
142                 }
143
144                 [Test]
145                 public void Access ()
146                 {
147                         SocketPermissionAttribute a = new SocketPermissionAttribute (SecurityAction.Assert);
148                         a.Access = "/";
149                 }
150
151                 [Test]
152                 [ExpectedException (typeof (ArgumentException))]
153                 public void Host_Null_CreatePermission ()
154                 {
155                         SocketPermissionAttribute a = new SocketPermissionAttribute (SecurityAction.Assert);
156                         a.Access = String.Empty;
157                         a.Host = null; // legal (assign)
158                         SocketPermission sp = (SocketPermission)a.CreatePermission ();
159                 }
160
161                 [Test]
162                 public void Host_Null ()
163                 {
164                         SocketPermissionAttribute a = new SocketPermissionAttribute (SecurityAction.Assert);
165                         a.Host = null; // legal
166                         Assert.IsNull (a.Host, "Host");
167                 }
168
169                 [Test]
170                 [ExpectedException (typeof (ArgumentException))]
171                 public void Host_Dual ()
172                 {
173                         SocketPermissionAttribute a = new SocketPermissionAttribute (SecurityAction.Assert);
174                         a.Host = "/";
175                         a.Host = "\\";
176                 }
177
178                 [Test]
179                 [ExpectedException (typeof (ArgumentException))]
180                 public void Host_Dual_Null ()
181                 {
182                         SocketPermissionAttribute a = new SocketPermissionAttribute (SecurityAction.Assert);
183                         a.Host = "/";
184                         a.Host = null;
185                 }
186
187                 [Test]
188                 public void Host ()
189                 {
190                         SocketPermissionAttribute a = new SocketPermissionAttribute (SecurityAction.Assert);
191                         a.Host = "www.mono-project.com";
192                 }
193
194                 [Test]
195                 [ExpectedException (typeof (ArgumentException))]
196                 public void Port_Null_CreatePermission ()
197                 {
198                         SocketPermissionAttribute a = new SocketPermissionAttribute (SecurityAction.Assert);
199                         a.Access = String.Empty;
200                         a.Host = String.Empty;
201                         a.Port = null; // legal (assign)
202                         SocketPermission sp = (SocketPermission)a.CreatePermission ();
203                 }
204
205                 [Test]
206                 public void Port_Null ()
207                 {
208                         SocketPermissionAttribute a = new SocketPermissionAttribute (SecurityAction.Assert);
209                         a.Port = null; // legal
210                         Assert.IsNull (a.Port, "Port");
211                 }
212
213                 [Test]
214                 [ExpectedException (typeof (ArgumentException))]
215                 public void Port_Dual ()
216                 {
217                         SocketPermissionAttribute a = new SocketPermissionAttribute (SecurityAction.Assert);
218                         a.Port = "/";
219                         a.Port = "\\";
220                 }
221
222                 [Test]
223                 [ExpectedException (typeof (ArgumentException))]
224                 public void Port_Dual_Null ()
225                 {
226                         SocketPermissionAttribute a = new SocketPermissionAttribute (SecurityAction.Assert);
227                         a.Port = "/";
228                         a.Port = null;
229                 }
230
231                 [Test]
232                 public void Port ()
233                 {
234                         SocketPermissionAttribute a = new SocketPermissionAttribute (SecurityAction.Assert);
235                         a.Port = "80";
236                 }
237
238                 [Test]
239                 [ExpectedException (typeof (ArgumentException))]
240                 public void Transport_Null_CreatePermission ()
241                 {
242                         SocketPermissionAttribute a = new SocketPermissionAttribute (SecurityAction.Assert);
243                         a.Access = String.Empty;
244                         a.Host = String.Empty;
245                         a.Port = String.Empty;
246                         a.Transport = null; // legal (assign)
247                         SocketPermission sp = (SocketPermission)a.CreatePermission ();
248                 }
249
250                 [Test]
251                 public void Transport_Null ()
252                 {
253                         SocketPermissionAttribute a = new SocketPermissionAttribute (SecurityAction.Assert);
254                         a.Transport = null; // legal
255                         Assert.IsNull (a.Transport, "Transport");
256                 }
257
258                 [Test]
259                 [ExpectedException (typeof (ArgumentException))]
260                 public void Transport_Dual ()
261                 {
262                         SocketPermissionAttribute a = new SocketPermissionAttribute (SecurityAction.Assert);
263                         a.Transport = "/";
264                         a.Transport = "\\";
265                 }
266
267                 [Test]
268                 [ExpectedException (typeof (ArgumentException))]
269                 public void Transport_Dual_Null ()
270                 {
271                         SocketPermissionAttribute a = new SocketPermissionAttribute (SecurityAction.Assert);
272                         a.Transport = "/";
273                         a.Transport = null;
274                 }
275
276                 [Test]
277                 public void Transport ()
278                 {
279                         SocketPermissionAttribute a = new SocketPermissionAttribute (SecurityAction.Assert);
280                         a.Transport = "http";
281                 }
282
283                 [Test]
284                 public void Attributes ()
285                 {
286                         Type t = typeof (SocketPermissionAttribute);
287                         Assert.IsTrue (t.IsSerializable, "IsSerializable");
288
289                         object [] attrs = t.GetCustomAttributes (typeof (AttributeUsageAttribute), false);
290                         Assert.AreEqual (1, attrs.Length, "AttributeUsage");
291                         AttributeUsageAttribute aua = (AttributeUsageAttribute)attrs [0];
292                         Assert.IsTrue (aua.AllowMultiple, "AllowMultiple");
293                         Assert.IsFalse (aua.Inherited, "Inherited");
294                         AttributeTargets at = (AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Constructor | AttributeTargets.Method);
295                         Assert.AreEqual (at, aua.ValidOn, "ValidOn");
296                 }
297         }
298 }
299
300 #endif