2004-12-03 Lluis Sanchez Gual <lluis@novell.com>
[mono.git] / mcs / class / corlib / Test / System.Security.Permissions / FileIOPermissionAttributeTest.cs
1 //
2 // FileIOPermissionAttributeTest.cs -
3 //      NUnit Test Cases for FileIOPermissionAttribute
4 //
5 // Author:
6 //      Sebastien Pouliot  <sebastien@ximian.com>
7 //
8 // (C) 2003 Motus Technologies Inc. (http://www.motus.com)
9 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
10 //
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
18 // 
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
21 // 
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30
31 using NUnit.Framework;
32 using System;
33 using System.IO;
34 using System.Reflection;
35 using System.Security;
36 using System.Security.Permissions;
37 using System.Text;
38
39 namespace MonoTests.System.Security.Permissions {
40
41         [TestFixture]
42         public class FileIOPermissionAttributeTest {
43
44                 [Test]
45                 public void Default () 
46                 {
47                         FileIOPermissionAttribute a = new FileIOPermissionAttribute (SecurityAction.Assert);
48                         Assert.IsNull (a.Append, "Append");
49                         Assert.IsNull (a.PathDiscovery, "PathDiscovery");
50                         Assert.IsNull (a.Read, "Read");
51                         Assert.IsNull (a.Write, "Write");
52 #if NET_2_0
53                         Assert.IsNotNull (a.AllFiles, "AllFiles");
54                         Assert.IsNotNull (a.AllLocalFiles, "AllLocalFiles");
55                         Assert.IsNull (a.ChangeAccessControl, "ChangeAccessControl");
56                         Assert.IsNull (a.ViewAccessControl, "ViewAccessControl");
57 #endif
58
59                         Assert.AreEqual (a.ToString (), a.TypeId.ToString (), "TypeId");
60                         Assert.IsFalse (a.Unrestricted, "Unrestricted");
61
62                         FileIOPermission perm = (FileIOPermission) a.CreatePermission ();
63                         Assert.AreEqual (FileIOPermissionAccess.NoAccess, perm.AllFiles, "CreatePermission-AllFiles");
64                         Assert.AreEqual (FileIOPermissionAccess.NoAccess, perm.AllLocalFiles, "CreatePermission-AllLocalFiles");
65                         Assert.IsFalse (perm.IsUnrestricted (), "perm-Unrestricted");
66                 }
67
68                 [Test]
69                 public void Action () 
70                 {
71                         FileIOPermissionAttribute a = new FileIOPermissionAttribute (SecurityAction.Assert);
72                         Assert.AreEqual (SecurityAction.Assert, a.Action, "Action=Assert");
73                         a.Action = SecurityAction.Demand;
74                         Assert.AreEqual (SecurityAction.Demand, a.Action, "Action=Demand");
75                         a.Action = SecurityAction.Deny;
76                         Assert.AreEqual (SecurityAction.Deny, a.Action, "Action=Deny");
77                         a.Action = SecurityAction.InheritanceDemand;
78                         Assert.AreEqual (SecurityAction.InheritanceDemand, a.Action, "Action=InheritanceDemand");
79                         a.Action = SecurityAction.LinkDemand;
80                         Assert.AreEqual (SecurityAction.LinkDemand, a.Action, "Action=LinkDemand");
81                         a.Action = SecurityAction.PermitOnly;
82                         Assert.AreEqual (SecurityAction.PermitOnly, a.Action, "Action=PermitOnly");
83                         a.Action = SecurityAction.RequestMinimum;
84                         Assert.AreEqual (SecurityAction.RequestMinimum, a.Action, "Action=RequestMinimum");
85                         a.Action = SecurityAction.RequestOptional;
86                         Assert.AreEqual (SecurityAction.RequestOptional, a.Action, "Action=RequestOptional");
87                         a.Action = SecurityAction.RequestRefuse;
88                         Assert.AreEqual (SecurityAction.RequestRefuse, a.Action, "Action=RequestRefuse");
89 #if NET_2_0
90                         a.Action = SecurityAction.DemandChoice;
91                         Assert.AreEqual (SecurityAction.DemandChoice, a.Action, "Action=DemandChoice");
92                         a.Action = SecurityAction.InheritanceDemandChoice;
93                         Assert.AreEqual (SecurityAction.InheritanceDemandChoice, a.Action, "Action=InheritanceDemandChoice");
94                         a.Action = SecurityAction.LinkDemandChoice;
95                         Assert.AreEqual (SecurityAction.LinkDemandChoice, a.Action, "Action=LinkDemandChoice");
96 #endif
97                 }
98
99                 [Test]
100                 public void Action_Invalid ()
101                 {
102                         FileDialogPermissionAttribute a = new FileDialogPermissionAttribute ((SecurityAction)Int32.MinValue);
103                         // no validation in attribute
104                 }
105
106                 [Test]
107                 public void All () 
108                 {
109                         string filename = Assembly.GetCallingAssembly ().Location;
110                         FileIOPermissionAttribute attr = new FileIOPermissionAttribute (SecurityAction.Assert);
111                         attr.All = filename;
112                         Assert.AreEqual (filename, attr.Append, "All=Append");
113                         Assert.AreEqual (filename, attr.PathDiscovery, "All=PathDiscovery");
114                         Assert.AreEqual (filename, attr.Read, "All=Read");
115                         Assert.AreEqual (filename, attr.Write, "All=Write");
116 #if NET_2_0
117                         Assert.IsNotNull (attr.AllFiles, "AllFiles");
118                         Assert.IsNotNull (attr.AllLocalFiles, "AllLocalFiles");
119                         Assert.IsNull (attr.ChangeAccessControl, "ChangeAccessControl");
120                         Assert.IsNull (attr.ViewAccessControl, "ViewAccessControl");
121 #endif
122                         FileIOPermission p = (FileIOPermission)attr.CreatePermission ();
123                         filename = Path.GetFullPath (filename);
124                         Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.Append) [0], "All=FileIOPermissionAttribute-Append");
125                         Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.PathDiscovery) [0], "All=FileIOPermissionAttribute-PathDiscovery");
126                         Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.Read) [0], "All=FileIOPermissionAttribute-Read");
127                         Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.Write) [0], "All=FileIOPermissionAttribute-Write");
128                 }
129 #if NET_1_1
130                 [Test]
131                 [ExpectedException (typeof (NotSupportedException))]
132                 public void All_Get () 
133                 {
134                         FileIOPermissionAttribute attr = new FileIOPermissionAttribute (SecurityAction.Assert);
135                         string s = attr.All;
136                 }
137 #endif
138                 [Test]
139                 public void Append ()
140                 {
141                         string filename = Assembly.GetCallingAssembly ().Location;
142                         FileIOPermissionAttribute attr = new FileIOPermissionAttribute (SecurityAction.Assert);
143                         attr.Append = filename;
144                         Assert.AreEqual (filename, attr.Append, "Append=Append");
145                         Assert.IsNull (attr.PathDiscovery, "PathDiscovery=null");
146                         Assert.IsNull (attr.Read, "Read=null");
147                         Assert.IsNull (attr.Write, "Write=null");
148 #if NET_2_0
149                         Assert.IsNotNull (attr.AllFiles, "AllFiles");
150                         Assert.IsNotNull (attr.AllLocalFiles, "AllLocalFiles");
151                         Assert.IsNull (attr.ChangeAccessControl, "ChangeAccessControl");
152                         Assert.IsNull (attr.ViewAccessControl, "ViewAccessControl");
153 #endif
154                         FileIOPermission p = (FileIOPermission)attr.CreatePermission ();
155                         filename = Path.GetFullPath (filename);
156                         Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.Append) [0], "Append=FileIOPermissionAttribute-Append");
157                         Assert.IsNull (p.GetPathList (FileIOPermissionAccess.PathDiscovery), "Append=FileIOPermissionAttribute-PathDiscovery");
158                         Assert.IsNull (p.GetPathList (FileIOPermissionAccess.Read), "Append=FileIOPermissionAttribute-Read");
159                         Assert.IsNull (p.GetPathList (FileIOPermissionAccess.Write), "Append=FileIOPermissionAttribute-Write");
160                 }
161
162                 [Test]
163                 public void PathDiscovery () 
164                 {
165                         string filename = Assembly.GetCallingAssembly ().Location;
166                         FileIOPermissionAttribute attr = new FileIOPermissionAttribute (SecurityAction.Assert);
167                         attr.PathDiscovery = filename;
168                         Assert.IsNull (attr.Append, "Append=null");
169                         Assert.AreEqual (filename, attr.PathDiscovery, "PathDiscovery=PathDiscovery");
170                         Assert.IsNull (attr.Read, "Read=null");
171                         Assert.IsNull (attr.Write, "Write=null");
172 #if NET_2_0
173                         Assert.IsNotNull (attr.AllFiles, "AllFiles");
174                         Assert.IsNotNull (attr.AllLocalFiles, "AllLocalFiles");
175                         Assert.IsNull (attr.ChangeAccessControl, "ChangeAccessControl");
176                         Assert.IsNull (attr.ViewAccessControl, "ViewAccessControl");
177 #endif
178                         FileIOPermission p = (FileIOPermission)attr.CreatePermission ();
179                         filename = Path.GetFullPath (filename);
180                         Assert.IsNull (p.GetPathList (FileIOPermissionAccess.Append), "PathDiscovery=FileIOPermissionAttribute-Append");
181                         Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.PathDiscovery) [0], "PathDiscovery=FileIOPermissionAttribute-PathDiscovery");
182                         Assert.IsNull (p.GetPathList (FileIOPermissionAccess.Read), "PathDiscovery=FileIOPermissionAttribute-Read");
183                         Assert.IsNull (p.GetPathList (FileIOPermissionAccess.Write), "PathDiscovery=FileIOPermissionAttribute-Write");
184                 }
185
186                 [Test]
187                 public void Read () 
188                 {
189                         string filename = Assembly.GetCallingAssembly ().Location;
190                         FileIOPermissionAttribute attr = new FileIOPermissionAttribute (SecurityAction.Assert);
191                         attr.Read = filename;
192                         Assert.IsNull (attr.Append, "Append=null");
193                         Assert.IsNull (attr.PathDiscovery, "PathDiscovery=null");
194                         Assert.AreEqual (filename, attr.Read, "Read=Read");
195                         Assert.IsNull (attr.Write, "Write=null");
196 #if NET_2_0
197                         Assert.IsNotNull (attr.AllFiles, "AllFiles");
198                         Assert.IsNotNull (attr.AllLocalFiles, "AllLocalFiles");
199                         Assert.IsNull (attr.ChangeAccessControl, "ChangeAccessControl");
200                         Assert.IsNull (attr.ViewAccessControl, "ViewAccessControl");
201 #endif
202                         FileIOPermission p = (FileIOPermission)attr.CreatePermission ();
203                         filename = Path.GetFullPath (filename);
204                         Assert.IsNull (p.GetPathList (FileIOPermissionAccess.Append), "PathDiscovery=FileIOPermissionAttribute-Append");
205                         Assert.IsNull (p.GetPathList (FileIOPermissionAccess.PathDiscovery), "PathDiscovery=FileIOPermissionAttribute-PathDiscovery");
206                         Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.Read) [0], "PathDiscovery=FileIOPermissionAttribute-Read");
207                         Assert.IsNull (p.GetPathList (FileIOPermissionAccess.Write), "PathDiscovery=FileIOPermissionAttribute-Write");
208                 }
209
210 #if NET_2_0
211                 [Test]
212                 public void ChangeAccessControl ()
213                 {
214                         FileIOPermissionAttribute a = new FileIOPermissionAttribute (SecurityAction.Assert);
215                         a.ChangeAccessControl = "mono";
216                         Assert.IsNull (a.Append, "Append");
217                         Assert.AreEqual ("mono", a.ChangeAccessControl, "ChangeAccessControl");
218                         Assert.IsNull (a.PathDiscovery, "PathDiscovery");
219                         Assert.IsNull (a.Read, "Read");
220                         Assert.IsNull (a.ViewAccessControl, "ViewAccessControl");
221                         Assert.IsNull (a.Write, "Write");
222
223                         a.ChangeAccessControl = null;
224                         Assert.IsNull (a.Append, "Append");
225                         Assert.IsNull (a.ChangeAccessControl, "ChangeAccessControl");
226                         Assert.IsNull (a.PathDiscovery, "PathDiscovery");
227                         Assert.IsNull (a.Read, "Read");
228                         Assert.IsNull (a.ViewAccessControl, "ViewAccessControl");
229                         Assert.IsNull (a.Write, "Write");
230                 }
231
232                 [Test]
233                 public void ViewAccessControl ()
234                 {
235                         FileIOPermissionAttribute a = new FileIOPermissionAttribute (SecurityAction.Assert);
236                         a.ViewAccessControl = "mono";
237                         Assert.IsNull (a.Append, "Append");
238                         Assert.IsNull (a.ChangeAccessControl, "ChangeAccessControl");
239                         Assert.IsNull (a.PathDiscovery, "PathDiscovery");
240                         Assert.IsNull (a.Read, "Read");
241                         Assert.AreEqual ("mono", a.ViewAccessControl, "ViewAccessControl");
242                         Assert.IsNull (a.Write, "Write");
243
244                         a.ViewAccessControl = null;
245                         Assert.IsNull (a.Append, "Append");
246                         Assert.IsNull (a.ChangeAccessControl, "ChangeAccessControl");
247                         Assert.IsNull (a.PathDiscovery, "PathDiscovery");
248                         Assert.IsNull (a.Read, "Read");
249                         Assert.IsNull (a.ViewAccessControl, "ViewAccessControl");
250                         Assert.IsNull (a.Write, "Write");
251                 }
252
253                 [Test]
254                 public void ViewAndModify_Set ()
255                 {
256                         FileIOPermissionAttribute a = new FileIOPermissionAttribute (SecurityAction.Assert);
257                         a.ViewAndModify = "mono";
258                         Assert.AreEqual ("mono", a.Append, "Append");
259                         Assert.IsNull (a.ChangeAccessControl, "ChangeAccessControl");
260                         Assert.AreEqual ("mono", a.PathDiscovery, "PathDiscovery");
261                         Assert.AreEqual ("mono", a.Read, "Read");
262                         Assert.IsNull (a.ViewAccessControl, "ViewAccessControl");
263                         Assert.AreEqual ("mono", a.Write, "Write");
264
265                         a.ViewAndModify = null;
266                         Assert.IsNull (a.Append, "Append");
267                         Assert.IsNull (a.ChangeAccessControl, "ChangeAccessControl");
268                         Assert.IsNull (a.PathDiscovery, "PathDiscovery");
269                         Assert.IsNull (a.Read, "Read");
270                         Assert.IsNull (a.ViewAccessControl, "ViewAccessControl");
271                         Assert.IsNull (a.Write, "Write");
272                 }
273
274                 [Test]
275                 [ExpectedException (typeof (NotSupportedException))]
276                 public void ViewAndModify_Get ()
277                 {
278                         FileIOPermissionAttribute a = new FileIOPermissionAttribute (SecurityAction.Assert);
279                         a.ViewAndModify = "mono";
280                         Assert.AreEqual ("ViewAndModify", "mono", a.ViewAndModify);
281                 }
282 #endif
283
284                 [Test]
285                 public void Write () 
286                 {
287                         string filename = Assembly.GetCallingAssembly ().Location;
288                         FileIOPermissionAttribute attr = new FileIOPermissionAttribute (SecurityAction.Assert);
289                         attr.Write = filename;
290                         Assert.IsNull (attr.Append, "Append=null");
291                         Assert.IsNull (attr.PathDiscovery, "PathDiscovery=null");
292                         Assert.IsNull (attr.Read, "Read=null");
293                         Assert.AreEqual (filename, attr.Write, "Write=Write");
294                         FileIOPermission p = (FileIOPermission) attr.CreatePermission ();
295                         filename = Path.GetFullPath (filename);
296                         Assert.IsNull (p.GetPathList (FileIOPermissionAccess.Append), "PathDiscovery=FileIOPermissionAttribute-Append");
297                         Assert.IsNull (p.GetPathList (FileIOPermissionAccess.PathDiscovery), "PathDiscovery=FileIOPermissionAttribute-PathDiscovery");
298                         Assert.IsNull (p.GetPathList (FileIOPermissionAccess.Read), "PathDiscovery=FileIOPermissionAttribute-Read");
299                         Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.Write) [0], "PathDiscovery=FileIOPermissionAttribute-Write");
300                 }
301
302                 [Test]
303                 public void Unrestricted () 
304                 {
305                         FileIOPermissionAttribute a = new FileIOPermissionAttribute (SecurityAction.Assert);
306                         a.Unrestricted = true;
307
308                         FileIOPermission perm = (FileIOPermission) a.CreatePermission ();
309                         Assert.IsTrue (perm.IsUnrestricted (), "CreatePermission.IsUnrestricted");
310                         Assert.AreEqual (FileIOPermissionAccess.AllAccess, perm.AllFiles, "CreatePermission.AllFiles");
311                         Assert.AreEqual (FileIOPermissionAccess.AllAccess, perm.AllLocalFiles, "CreatePermission.AllLocalFiles");
312                 }
313
314                 [Test]
315                 public void Attributes ()
316                 {
317                         Type t = typeof (FileDialogPermissionAttribute);
318                         Assert.IsTrue (t.IsSerializable, "IsSerializable");
319
320                         object [] attrs = t.GetCustomAttributes (typeof (AttributeUsageAttribute), false);
321                         Assert.AreEqual (1, attrs.Length, "AttributeUsage");
322                         AttributeUsageAttribute aua = (AttributeUsageAttribute)attrs [0];
323                         Assert.IsTrue (aua.AllowMultiple, "AllowMultiple");
324                         Assert.IsFalse (aua.Inherited, "Inherited");
325                         AttributeTargets at = (AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Constructor | AttributeTargets.Method);
326                         Assert.AreEqual (at, aua.ValidOn, "ValidOn");
327                 }
328
329                 [Test]
330                 public void NonC14NPath ()
331                 {
332                         string filename = Path.Combine (Path.GetTempPath (), "test");
333                         filename = Path.Combine (filename, "..");
334                         filename = Path.Combine (filename, "here");
335                         FileIOPermissionAttribute attr = new FileIOPermissionAttribute (SecurityAction.Assert);
336                         // attribute class will keep the .. in the path
337                         attr.All = filename;
338                         Assert.AreEqual (filename, attr.Append, "All=Append");
339                         Assert.AreEqual (filename, attr.PathDiscovery, "All=PathDiscovery");
340                         Assert.AreEqual (filename, attr.Read, "All=Read");
341                         Assert.AreEqual (filename, attr.Write, "All=Write");
342                         // but the permission class will c14n it
343                         filename = Path.GetFullPath (filename);
344                         FileIOPermission p = (FileIOPermission)attr.CreatePermission ();
345                         Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.Append) [0], "All=FileIOPermissionAttribute-Append");
346                         Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.PathDiscovery) [0], "All=FileIOPermissionAttribute-PathDiscovery");
347                         Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.Read) [0], "All=FileIOPermissionAttribute-Read");
348                         Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.Write) [0], "All=FileIOPermissionAttribute-Write");
349                 }
350         }
351 }