2 // FileIOPermissionAttributeTest.cs -
3 // NUnit Test Cases for FileIOPermissionAttribute
6 // Sebastien Pouliot <sebastien@ximian.com>
8 // (C) 2003 Motus Technologies Inc. (http://www.motus.com)
9 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
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:
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
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.
31 using NUnit.Framework;
34 using System.Reflection;
35 using System.Security;
36 using System.Security.Permissions;
39 namespace MonoTests.System.Security.Permissions {
42 public class FileIOPermissionAttributeTest {
45 public void Default ()
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");
53 Assert.IsNotNull (a.AllFiles, "AllFiles");
54 Assert.IsNotNull (a.AllLocalFiles, "AllLocalFiles");
55 Assert.IsNull (a.ChangeAccessControl, "ChangeAccessControl");
56 Assert.IsNull (a.ViewAccessControl, "ViewAccessControl");
59 Assert.AreEqual (a.ToString (), a.TypeId.ToString (), "TypeId");
60 Assert.IsFalse (a.Unrestricted, "Unrestricted");
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");
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");
92 public void Action_Invalid ()
94 FileDialogPermissionAttribute a = new FileDialogPermissionAttribute ((SecurityAction)Int32.MinValue);
95 // no validation in attribute
101 string filename = Assembly.GetCallingAssembly ().Location;
102 FileIOPermissionAttribute attr = new FileIOPermissionAttribute (SecurityAction.Assert);
104 Assert.AreEqual (filename, attr.Append, "All=Append");
105 Assert.AreEqual (filename, attr.PathDiscovery, "All=PathDiscovery");
106 Assert.AreEqual (filename, attr.Read, "All=Read");
107 Assert.AreEqual (filename, attr.Write, "All=Write");
109 Assert.IsNotNull (attr.AllFiles, "AllFiles");
110 Assert.IsNotNull (attr.AllLocalFiles, "AllLocalFiles");
111 Assert.IsNull (attr.ChangeAccessControl, "ChangeAccessControl");
112 Assert.IsNull (attr.ViewAccessControl, "ViewAccessControl");
114 FileIOPermission p = (FileIOPermission)attr.CreatePermission ();
115 filename = Path.GetFullPath (filename);
116 Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.Append) [0], "All=FileIOPermissionAttribute-Append");
117 Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.PathDiscovery) [0], "All=FileIOPermissionAttribute-PathDiscovery");
118 Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.Read) [0], "All=FileIOPermissionAttribute-Read");
119 Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.Write) [0], "All=FileIOPermissionAttribute-Write");
123 [ExpectedException (typeof (NotSupportedException))]
124 public void All_Get ()
126 FileIOPermissionAttribute attr = new FileIOPermissionAttribute (SecurityAction.Assert);
131 public void Append ()
133 string filename = Assembly.GetCallingAssembly ().Location;
134 FileIOPermissionAttribute attr = new FileIOPermissionAttribute (SecurityAction.Assert);
135 attr.Append = filename;
136 Assert.AreEqual (filename, attr.Append, "Append=Append");
137 Assert.IsNull (attr.PathDiscovery, "PathDiscovery=null");
138 Assert.IsNull (attr.Read, "Read=null");
139 Assert.IsNull (attr.Write, "Write=null");
141 Assert.IsNotNull (attr.AllFiles, "AllFiles");
142 Assert.IsNotNull (attr.AllLocalFiles, "AllLocalFiles");
143 Assert.IsNull (attr.ChangeAccessControl, "ChangeAccessControl");
144 Assert.IsNull (attr.ViewAccessControl, "ViewAccessControl");
146 FileIOPermission p = (FileIOPermission)attr.CreatePermission ();
147 filename = Path.GetFullPath (filename);
148 Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.Append) [0], "Append=FileIOPermissionAttribute-Append");
149 Assert.IsNull (p.GetPathList (FileIOPermissionAccess.PathDiscovery), "Append=FileIOPermissionAttribute-PathDiscovery");
150 Assert.IsNull (p.GetPathList (FileIOPermissionAccess.Read), "Append=FileIOPermissionAttribute-Read");
151 Assert.IsNull (p.GetPathList (FileIOPermissionAccess.Write), "Append=FileIOPermissionAttribute-Write");
155 public void PathDiscovery ()
157 string filename = Assembly.GetCallingAssembly ().Location;
158 FileIOPermissionAttribute attr = new FileIOPermissionAttribute (SecurityAction.Assert);
159 attr.PathDiscovery = filename;
160 Assert.IsNull (attr.Append, "Append=null");
161 Assert.AreEqual (filename, attr.PathDiscovery, "PathDiscovery=PathDiscovery");
162 Assert.IsNull (attr.Read, "Read=null");
163 Assert.IsNull (attr.Write, "Write=null");
165 Assert.IsNotNull (attr.AllFiles, "AllFiles");
166 Assert.IsNotNull (attr.AllLocalFiles, "AllLocalFiles");
167 Assert.IsNull (attr.ChangeAccessControl, "ChangeAccessControl");
168 Assert.IsNull (attr.ViewAccessControl, "ViewAccessControl");
170 FileIOPermission p = (FileIOPermission)attr.CreatePermission ();
171 filename = Path.GetFullPath (filename);
172 Assert.IsNull (p.GetPathList (FileIOPermissionAccess.Append), "PathDiscovery=FileIOPermissionAttribute-Append");
173 Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.PathDiscovery) [0], "PathDiscovery=FileIOPermissionAttribute-PathDiscovery");
174 Assert.IsNull (p.GetPathList (FileIOPermissionAccess.Read), "PathDiscovery=FileIOPermissionAttribute-Read");
175 Assert.IsNull (p.GetPathList (FileIOPermissionAccess.Write), "PathDiscovery=FileIOPermissionAttribute-Write");
181 string filename = Assembly.GetCallingAssembly ().Location;
182 FileIOPermissionAttribute attr = new FileIOPermissionAttribute (SecurityAction.Assert);
183 attr.Read = filename;
184 Assert.IsNull (attr.Append, "Append=null");
185 Assert.IsNull (attr.PathDiscovery, "PathDiscovery=null");
186 Assert.AreEqual (filename, attr.Read, "Read=Read");
187 Assert.IsNull (attr.Write, "Write=null");
189 Assert.IsNotNull (attr.AllFiles, "AllFiles");
190 Assert.IsNotNull (attr.AllLocalFiles, "AllLocalFiles");
191 Assert.IsNull (attr.ChangeAccessControl, "ChangeAccessControl");
192 Assert.IsNull (attr.ViewAccessControl, "ViewAccessControl");
194 FileIOPermission p = (FileIOPermission)attr.CreatePermission ();
195 filename = Path.GetFullPath (filename);
196 Assert.IsNull (p.GetPathList (FileIOPermissionAccess.Append), "PathDiscovery=FileIOPermissionAttribute-Append");
197 Assert.IsNull (p.GetPathList (FileIOPermissionAccess.PathDiscovery), "PathDiscovery=FileIOPermissionAttribute-PathDiscovery");
198 Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.Read) [0], "PathDiscovery=FileIOPermissionAttribute-Read");
199 Assert.IsNull (p.GetPathList (FileIOPermissionAccess.Write), "PathDiscovery=FileIOPermissionAttribute-Write");
204 public void ChangeAccessControl ()
206 FileIOPermissionAttribute a = new FileIOPermissionAttribute (SecurityAction.Assert);
207 a.ChangeAccessControl = "mono";
208 Assert.IsNull (a.Append, "Append");
209 Assert.AreEqual ("mono", a.ChangeAccessControl, "ChangeAccessControl");
210 Assert.IsNull (a.PathDiscovery, "PathDiscovery");
211 Assert.IsNull (a.Read, "Read");
212 Assert.IsNull (a.ViewAccessControl, "ViewAccessControl");
213 Assert.IsNull (a.Write, "Write");
215 a.ChangeAccessControl = null;
216 Assert.IsNull (a.Append, "Append");
217 Assert.IsNull (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");
225 public void ViewAccessControl ()
227 FileIOPermissionAttribute a = new FileIOPermissionAttribute (SecurityAction.Assert);
228 a.ViewAccessControl = "mono";
229 Assert.IsNull (a.Append, "Append");
230 Assert.IsNull (a.ChangeAccessControl, "ChangeAccessControl");
231 Assert.IsNull (a.PathDiscovery, "PathDiscovery");
232 Assert.IsNull (a.Read, "Read");
233 Assert.AreEqual ("mono", a.ViewAccessControl, "ViewAccessControl");
234 Assert.IsNull (a.Write, "Write");
236 a.ViewAccessControl = null;
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.IsNull (a.ViewAccessControl, "ViewAccessControl");
242 Assert.IsNull (a.Write, "Write");
246 public void ViewAndModify_Set ()
248 FileIOPermissionAttribute a = new FileIOPermissionAttribute (SecurityAction.Assert);
249 a.ViewAndModify = "mono";
250 Assert.AreEqual ("mono", a.Append, "Append");
251 Assert.IsNull (a.ChangeAccessControl, "ChangeAccessControl");
252 Assert.AreEqual ("mono", a.PathDiscovery, "PathDiscovery");
253 Assert.AreEqual ("mono", a.Read, "Read");
254 Assert.IsNull (a.ViewAccessControl, "ViewAccessControl");
255 Assert.AreEqual ("mono", a.Write, "Write");
257 a.ViewAndModify = null;
258 Assert.IsNull (a.Append, "Append");
259 Assert.IsNull (a.ChangeAccessControl, "ChangeAccessControl");
260 Assert.IsNull (a.PathDiscovery, "PathDiscovery");
261 Assert.IsNull (a.Read, "Read");
262 Assert.IsNull (a.ViewAccessControl, "ViewAccessControl");
263 Assert.IsNull (a.Write, "Write");
267 [ExpectedException (typeof (NotSupportedException))]
268 public void ViewAndModify_Get ()
270 FileIOPermissionAttribute a = new FileIOPermissionAttribute (SecurityAction.Assert);
271 a.ViewAndModify = "mono";
272 Assert.AreEqual ("ViewAndModify", "mono", a.ViewAndModify);
279 string filename = Assembly.GetCallingAssembly ().Location;
280 FileIOPermissionAttribute attr = new FileIOPermissionAttribute (SecurityAction.Assert);
281 attr.Write = filename;
282 Assert.IsNull (attr.Append, "Append=null");
283 Assert.IsNull (attr.PathDiscovery, "PathDiscovery=null");
284 Assert.IsNull (attr.Read, "Read=null");
285 Assert.AreEqual (filename, attr.Write, "Write=Write");
286 FileIOPermission p = (FileIOPermission) attr.CreatePermission ();
287 filename = Path.GetFullPath (filename);
288 Assert.IsNull (p.GetPathList (FileIOPermissionAccess.Append), "PathDiscovery=FileIOPermissionAttribute-Append");
289 Assert.IsNull (p.GetPathList (FileIOPermissionAccess.PathDiscovery), "PathDiscovery=FileIOPermissionAttribute-PathDiscovery");
290 Assert.IsNull (p.GetPathList (FileIOPermissionAccess.Read), "PathDiscovery=FileIOPermissionAttribute-Read");
291 Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.Write) [0], "PathDiscovery=FileIOPermissionAttribute-Write");
295 public void Unrestricted ()
297 FileIOPermissionAttribute a = new FileIOPermissionAttribute (SecurityAction.Assert);
298 a.Unrestricted = true;
300 FileIOPermission perm = (FileIOPermission) a.CreatePermission ();
301 Assert.IsTrue (perm.IsUnrestricted (), "CreatePermission.IsUnrestricted");
302 Assert.AreEqual (FileIOPermissionAccess.AllAccess, perm.AllFiles, "CreatePermission.AllFiles");
303 Assert.AreEqual (FileIOPermissionAccess.AllAccess, perm.AllLocalFiles, "CreatePermission.AllLocalFiles");
307 public void Attributes ()
309 Type t = typeof (FileDialogPermissionAttribute);
310 Assert.IsTrue (t.IsSerializable, "IsSerializable");
312 object [] attrs = t.GetCustomAttributes (typeof (AttributeUsageAttribute), false);
313 Assert.AreEqual (1, attrs.Length, "AttributeUsage");
314 AttributeUsageAttribute aua = (AttributeUsageAttribute)attrs [0];
315 Assert.IsTrue (aua.AllowMultiple, "AllowMultiple");
316 Assert.IsFalse (aua.Inherited, "Inherited");
317 AttributeTargets at = (AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Constructor | AttributeTargets.Method);
318 Assert.AreEqual (at, aua.ValidOn, "ValidOn");
322 [Category("NotDotNet")]
323 public void NonC14NPath ()
325 string filename = Path.Combine (Path.GetTempPath (), "test");
326 filename = Path.Combine (filename, "..");
327 filename = Path.Combine (filename, "here");
328 FileIOPermissionAttribute attr = new FileIOPermissionAttribute (SecurityAction.Assert);
329 // attribute class will keep the .. in the path
331 Assert.AreEqual (filename, attr.Append, "All=Append");
332 Assert.AreEqual (filename, attr.PathDiscovery, "All=PathDiscovery");
333 Assert.AreEqual (filename, attr.Read, "All=Read");
334 Assert.AreEqual (filename, attr.Write, "All=Write");
335 // but the permission class will c14n it
336 filename = Path.GetFullPath (filename);
337 FileIOPermission p = (FileIOPermission)attr.CreatePermission ();
338 Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.Append) [0], "All=FileIOPermissionAttribute-Append");
339 Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.PathDiscovery) [0], "All=FileIOPermissionAttribute-PathDiscovery");
340 Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.Read) [0], "All=FileIOPermissionAttribute-Read");
341 Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.Write) [0], "All=FileIOPermissionAttribute-Write");