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");
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");
100 public void Action_Invalid ()
102 FileDialogPermissionAttribute a = new FileDialogPermissionAttribute ((SecurityAction)Int32.MinValue);
103 // no validation in attribute
109 string filename = Assembly.GetCallingAssembly ().Location;
110 FileIOPermissionAttribute attr = new FileIOPermissionAttribute (SecurityAction.Assert);
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");
117 Assert.IsNotNull (attr.AllFiles, "AllFiles");
118 Assert.IsNotNull (attr.AllLocalFiles, "AllLocalFiles");
119 Assert.IsNull (attr.ChangeAccessControl, "ChangeAccessControl");
120 Assert.IsNull (attr.ViewAccessControl, "ViewAccessControl");
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");
131 [ExpectedException (typeof (NotSupportedException))]
132 public void All_Get ()
134 FileIOPermissionAttribute attr = new FileIOPermissionAttribute (SecurityAction.Assert);
139 public void Append ()
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");
149 Assert.IsNotNull (attr.AllFiles, "AllFiles");
150 Assert.IsNotNull (attr.AllLocalFiles, "AllLocalFiles");
151 Assert.IsNull (attr.ChangeAccessControl, "ChangeAccessControl");
152 Assert.IsNull (attr.ViewAccessControl, "ViewAccessControl");
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");
163 public void PathDiscovery ()
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");
173 Assert.IsNotNull (attr.AllFiles, "AllFiles");
174 Assert.IsNotNull (attr.AllLocalFiles, "AllLocalFiles");
175 Assert.IsNull (attr.ChangeAccessControl, "ChangeAccessControl");
176 Assert.IsNull (attr.ViewAccessControl, "ViewAccessControl");
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");
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");
197 Assert.IsNotNull (attr.AllFiles, "AllFiles");
198 Assert.IsNotNull (attr.AllLocalFiles, "AllLocalFiles");
199 Assert.IsNull (attr.ChangeAccessControl, "ChangeAccessControl");
200 Assert.IsNull (attr.ViewAccessControl, "ViewAccessControl");
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");
212 public void ChangeAccessControl ()
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");
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");
233 public void ViewAccessControl ()
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");
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");
254 public void ViewAndModify_Set ()
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");
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");
275 [ExpectedException (typeof (NotSupportedException))]
276 public void ViewAndModify_Get ()
278 FileIOPermissionAttribute a = new FileIOPermissionAttribute (SecurityAction.Assert);
279 a.ViewAndModify = "mono";
280 Assert.AreEqual ("ViewAndModify", "mono", a.ViewAndModify);
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");
303 public void Unrestricted ()
305 FileIOPermissionAttribute a = new FileIOPermissionAttribute (SecurityAction.Assert);
306 a.Unrestricted = true;
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");
315 public void Attributes ()
317 Type t = typeof (FileDialogPermissionAttribute);
318 Assert.IsTrue (t.IsSerializable, "IsSerializable");
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");
330 public void NonC14NPath ()
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
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");