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 #if MOBILE 43 [Ignore] 44 #endif 45 public class FileIOPermissionAttributeTest { 46 47 [Test] Default()48 public void Default () 49 { 50 FileIOPermissionAttribute a = new FileIOPermissionAttribute (SecurityAction.Assert); 51 Assert.IsNull (a.Append, "Append"); 52 Assert.IsNull (a.PathDiscovery, "PathDiscovery"); 53 Assert.IsNull (a.Read, "Read"); 54 Assert.IsNull (a.Write, "Write"); 55 Assert.IsNotNull (a.AllFiles, "AllFiles"); 56 Assert.IsNotNull (a.AllLocalFiles, "AllLocalFiles"); 57 Assert.IsNull (a.ChangeAccessControl, "ChangeAccessControl"); 58 Assert.IsNull (a.ViewAccessControl, "ViewAccessControl"); 59 60 Assert.AreEqual (a.ToString (), a.TypeId.ToString (), "TypeId"); 61 Assert.IsFalse (a.Unrestricted, "Unrestricted"); 62 63 FileIOPermission perm = (FileIOPermission) a.CreatePermission (); 64 Assert.AreEqual (FileIOPermissionAccess.NoAccess, perm.AllFiles, "CreatePermission-AllFiles"); 65 Assert.AreEqual (FileIOPermissionAccess.NoAccess, perm.AllLocalFiles, "CreatePermission-AllLocalFiles"); 66 Assert.IsFalse (perm.IsUnrestricted (), "perm-Unrestricted"); 67 } 68 69 [Test] Action()70 public void Action () 71 { 72 FileIOPermissionAttribute a = new FileIOPermissionAttribute (SecurityAction.Assert); 73 Assert.AreEqual (SecurityAction.Assert, a.Action, "Action=Assert"); 74 a.Action = SecurityAction.Demand; 75 Assert.AreEqual (SecurityAction.Demand, a.Action, "Action=Demand"); 76 a.Action = SecurityAction.Deny; 77 Assert.AreEqual (SecurityAction.Deny, a.Action, "Action=Deny"); 78 a.Action = SecurityAction.InheritanceDemand; 79 Assert.AreEqual (SecurityAction.InheritanceDemand, a.Action, "Action=InheritanceDemand"); 80 a.Action = SecurityAction.LinkDemand; 81 Assert.AreEqual (SecurityAction.LinkDemand, a.Action, "Action=LinkDemand"); 82 a.Action = SecurityAction.PermitOnly; 83 Assert.AreEqual (SecurityAction.PermitOnly, a.Action, "Action=PermitOnly"); 84 a.Action = SecurityAction.RequestMinimum; 85 Assert.AreEqual (SecurityAction.RequestMinimum, a.Action, "Action=RequestMinimum"); 86 a.Action = SecurityAction.RequestOptional; 87 Assert.AreEqual (SecurityAction.RequestOptional, a.Action, "Action=RequestOptional"); 88 a.Action = SecurityAction.RequestRefuse; 89 Assert.AreEqual (SecurityAction.RequestRefuse, a.Action, "Action=RequestRefuse"); 90 } 91 92 [Test] Action_Invalid()93 public void Action_Invalid () 94 { 95 FileDialogPermissionAttribute a = new FileDialogPermissionAttribute ((SecurityAction)Int32.MinValue); 96 // no validation in attribute 97 } 98 99 [Test] All()100 public void All () 101 { 102 string filename = Assembly.GetCallingAssembly ().Location; 103 FileIOPermissionAttribute attr = new FileIOPermissionAttribute (SecurityAction.Assert); 104 attr.All = filename; 105 Assert.AreEqual (filename, attr.Append, "All=Append"); 106 Assert.AreEqual (filename, attr.PathDiscovery, "All=PathDiscovery"); 107 Assert.AreEqual (filename, attr.Read, "All=Read"); 108 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"); 113 FileIOPermission p = (FileIOPermission)attr.CreatePermission (); 114 filename = Path.GetFullPath (filename); 115 Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.Append) [0], "All=FileIOPermissionAttribute-Append"); 116 Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.PathDiscovery) [0], "All=FileIOPermissionAttribute-PathDiscovery"); 117 Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.Read) [0], "All=FileIOPermissionAttribute-Read"); 118 Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.Write) [0], "All=FileIOPermissionAttribute-Write"); 119 } 120 121 [Test] 122 [ExpectedException (typeof (NotSupportedException))] All_Get()123 public void All_Get () 124 { 125 FileIOPermissionAttribute attr = new FileIOPermissionAttribute (SecurityAction.Assert); 126 string s = attr.All; 127 } 128 129 [Test] Append()130 public void Append () 131 { 132 string filename = Assembly.GetCallingAssembly ().Location; 133 FileIOPermissionAttribute attr = new FileIOPermissionAttribute (SecurityAction.Assert); 134 attr.Append = filename; 135 Assert.AreEqual (filename, attr.Append, "Append=Append"); 136 Assert.IsNull (attr.PathDiscovery, "PathDiscovery=null"); 137 Assert.IsNull (attr.Read, "Read=null"); 138 Assert.IsNull (attr.Write, "Write=null"); 139 Assert.IsNotNull (attr.AllFiles, "AllFiles"); 140 Assert.IsNotNull (attr.AllLocalFiles, "AllLocalFiles"); 141 Assert.IsNull (attr.ChangeAccessControl, "ChangeAccessControl"); 142 Assert.IsNull (attr.ViewAccessControl, "ViewAccessControl"); 143 FileIOPermission p = (FileIOPermission)attr.CreatePermission (); 144 filename = Path.GetFullPath (filename); 145 Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.Append) [0], "Append=FileIOPermissionAttribute-Append"); 146 Assert.IsNull (p.GetPathList (FileIOPermissionAccess.PathDiscovery), "Append=FileIOPermissionAttribute-PathDiscovery"); 147 Assert.IsNull (p.GetPathList (FileIOPermissionAccess.Read), "Append=FileIOPermissionAttribute-Read"); 148 Assert.IsNull (p.GetPathList (FileIOPermissionAccess.Write), "Append=FileIOPermissionAttribute-Write"); 149 } 150 151 [Test] PathDiscovery()152 public void PathDiscovery () 153 { 154 string filename = Assembly.GetCallingAssembly ().Location; 155 FileIOPermissionAttribute attr = new FileIOPermissionAttribute (SecurityAction.Assert); 156 attr.PathDiscovery = filename; 157 Assert.IsNull (attr.Append, "Append=null"); 158 Assert.AreEqual (filename, attr.PathDiscovery, "PathDiscovery=PathDiscovery"); 159 Assert.IsNull (attr.Read, "Read=null"); 160 Assert.IsNull (attr.Write, "Write=null"); 161 Assert.IsNotNull (attr.AllFiles, "AllFiles"); 162 Assert.IsNotNull (attr.AllLocalFiles, "AllLocalFiles"); 163 Assert.IsNull (attr.ChangeAccessControl, "ChangeAccessControl"); 164 Assert.IsNull (attr.ViewAccessControl, "ViewAccessControl"); 165 FileIOPermission p = (FileIOPermission)attr.CreatePermission (); 166 filename = Path.GetFullPath (filename); 167 Assert.IsNull (p.GetPathList (FileIOPermissionAccess.Append), "PathDiscovery=FileIOPermissionAttribute-Append"); 168 Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.PathDiscovery) [0], "PathDiscovery=FileIOPermissionAttribute-PathDiscovery"); 169 Assert.IsNull (p.GetPathList (FileIOPermissionAccess.Read), "PathDiscovery=FileIOPermissionAttribute-Read"); 170 Assert.IsNull (p.GetPathList (FileIOPermissionAccess.Write), "PathDiscovery=FileIOPermissionAttribute-Write"); 171 } 172 173 [Test] Read()174 public void Read () 175 { 176 string filename = Assembly.GetCallingAssembly ().Location; 177 FileIOPermissionAttribute attr = new FileIOPermissionAttribute (SecurityAction.Assert); 178 attr.Read = filename; 179 Assert.IsNull (attr.Append, "Append=null"); 180 Assert.IsNull (attr.PathDiscovery, "PathDiscovery=null"); 181 Assert.AreEqual (filename, attr.Read, "Read=Read"); 182 Assert.IsNull (attr.Write, "Write=null"); 183 Assert.IsNotNull (attr.AllFiles, "AllFiles"); 184 Assert.IsNotNull (attr.AllLocalFiles, "AllLocalFiles"); 185 Assert.IsNull (attr.ChangeAccessControl, "ChangeAccessControl"); 186 Assert.IsNull (attr.ViewAccessControl, "ViewAccessControl"); 187 FileIOPermission p = (FileIOPermission)attr.CreatePermission (); 188 filename = Path.GetFullPath (filename); 189 Assert.IsNull (p.GetPathList (FileIOPermissionAccess.Append), "PathDiscovery=FileIOPermissionAttribute-Append"); 190 Assert.IsNull (p.GetPathList (FileIOPermissionAccess.PathDiscovery), "PathDiscovery=FileIOPermissionAttribute-PathDiscovery"); 191 Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.Read) [0], "PathDiscovery=FileIOPermissionAttribute-Read"); 192 Assert.IsNull (p.GetPathList (FileIOPermissionAccess.Write), "PathDiscovery=FileIOPermissionAttribute-Write"); 193 } 194 195 [Test] ChangeAccessControl()196 public void ChangeAccessControl () 197 { 198 FileIOPermissionAttribute a = new FileIOPermissionAttribute (SecurityAction.Assert); 199 a.ChangeAccessControl = "mono"; 200 Assert.IsNull (a.Append, "Append"); 201 Assert.AreEqual ("mono", a.ChangeAccessControl, "ChangeAccessControl"); 202 Assert.IsNull (a.PathDiscovery, "PathDiscovery"); 203 Assert.IsNull (a.Read, "Read"); 204 Assert.IsNull (a.ViewAccessControl, "ViewAccessControl"); 205 Assert.IsNull (a.Write, "Write"); 206 207 a.ChangeAccessControl = null; 208 Assert.IsNull (a.Append, "Append"); 209 Assert.IsNull (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"); 214 } 215 216 [Test] ViewAccessControl()217 public void ViewAccessControl () 218 { 219 FileIOPermissionAttribute a = new FileIOPermissionAttribute (SecurityAction.Assert); 220 a.ViewAccessControl = "mono"; 221 Assert.IsNull (a.Append, "Append"); 222 Assert.IsNull (a.ChangeAccessControl, "ChangeAccessControl"); 223 Assert.IsNull (a.PathDiscovery, "PathDiscovery"); 224 Assert.IsNull (a.Read, "Read"); 225 Assert.AreEqual ("mono", a.ViewAccessControl, "ViewAccessControl"); 226 Assert.IsNull (a.Write, "Write"); 227 228 a.ViewAccessControl = null; 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.IsNull (a.ViewAccessControl, "ViewAccessControl"); 234 Assert.IsNull (a.Write, "Write"); 235 } 236 237 [Test] ViewAndModify_Set()238 public void ViewAndModify_Set () 239 { 240 FileIOPermissionAttribute a = new FileIOPermissionAttribute (SecurityAction.Assert); 241 a.ViewAndModify = "mono"; 242 Assert.AreEqual ("mono", a.Append, "Append"); 243 Assert.IsNull (a.ChangeAccessControl, "ChangeAccessControl"); 244 Assert.AreEqual ("mono", a.PathDiscovery, "PathDiscovery"); 245 Assert.AreEqual ("mono", a.Read, "Read"); 246 Assert.IsNull (a.ViewAccessControl, "ViewAccessControl"); 247 Assert.AreEqual ("mono", a.Write, "Write"); 248 249 a.ViewAndModify = null; 250 Assert.IsNull (a.Append, "Append"); 251 Assert.IsNull (a.ChangeAccessControl, "ChangeAccessControl"); 252 Assert.IsNull (a.PathDiscovery, "PathDiscovery"); 253 Assert.IsNull (a.Read, "Read"); 254 Assert.IsNull (a.ViewAccessControl, "ViewAccessControl"); 255 Assert.IsNull (a.Write, "Write"); 256 } 257 258 [Test] 259 [ExpectedException (typeof (NotSupportedException))] ViewAndModify_Get()260 public void ViewAndModify_Get () 261 { 262 FileIOPermissionAttribute a = new FileIOPermissionAttribute (SecurityAction.Assert); 263 a.ViewAndModify = "mono"; 264 Assert.AreEqual ("ViewAndModify", "mono", a.ViewAndModify); 265 } 266 267 [Test] Write()268 public void Write () 269 { 270 string filename = Assembly.GetCallingAssembly ().Location; 271 FileIOPermissionAttribute attr = new FileIOPermissionAttribute (SecurityAction.Assert); 272 attr.Write = filename; 273 Assert.IsNull (attr.Append, "Append=null"); 274 Assert.IsNull (attr.PathDiscovery, "PathDiscovery=null"); 275 Assert.IsNull (attr.Read, "Read=null"); 276 Assert.AreEqual (filename, attr.Write, "Write=Write"); 277 FileIOPermission p = (FileIOPermission) attr.CreatePermission (); 278 filename = Path.GetFullPath (filename); 279 Assert.IsNull (p.GetPathList (FileIOPermissionAccess.Append), "PathDiscovery=FileIOPermissionAttribute-Append"); 280 Assert.IsNull (p.GetPathList (FileIOPermissionAccess.PathDiscovery), "PathDiscovery=FileIOPermissionAttribute-PathDiscovery"); 281 Assert.IsNull (p.GetPathList (FileIOPermissionAccess.Read), "PathDiscovery=FileIOPermissionAttribute-Read"); 282 Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.Write) [0], "PathDiscovery=FileIOPermissionAttribute-Write"); 283 } 284 285 [Test] Unrestricted()286 public void Unrestricted () 287 { 288 FileIOPermissionAttribute a = new FileIOPermissionAttribute (SecurityAction.Assert); 289 a.Unrestricted = true; 290 291 FileIOPermission perm = (FileIOPermission) a.CreatePermission (); 292 Assert.IsTrue (perm.IsUnrestricted (), "CreatePermission.IsUnrestricted"); 293 Assert.AreEqual (FileIOPermissionAccess.AllAccess, perm.AllFiles, "CreatePermission.AllFiles"); 294 Assert.AreEqual (FileIOPermissionAccess.AllAccess, perm.AllLocalFiles, "CreatePermission.AllLocalFiles"); 295 } 296 297 [Test] Attributes()298 public void Attributes () 299 { 300 Type t = typeof (FileDialogPermissionAttribute); 301 Assert.IsTrue (t.IsSerializable, "IsSerializable"); 302 303 object [] attrs = t.GetCustomAttributes (typeof (AttributeUsageAttribute), false); 304 Assert.AreEqual (1, attrs.Length, "AttributeUsage"); 305 AttributeUsageAttribute aua = (AttributeUsageAttribute)attrs [0]; 306 Assert.IsTrue (aua.AllowMultiple, "AllowMultiple"); 307 Assert.IsFalse (aua.Inherited, "Inherited"); 308 AttributeTargets at = (AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Constructor | AttributeTargets.Method); 309 Assert.AreEqual (at, aua.ValidOn, "ValidOn"); 310 } 311 312 [Test] 313 [Category("NotDotNet")] NonC14NPath()314 public void NonC14NPath () 315 { 316 string filename = Path.Combine (Path.GetTempPath (), "test"); 317 filename = Path.Combine (filename, ".."); 318 filename = Path.Combine (filename, "here"); 319 FileIOPermissionAttribute attr = new FileIOPermissionAttribute (SecurityAction.Assert); 320 // attribute class will keep the .. in the path 321 attr.All = filename; 322 Assert.AreEqual (filename, attr.Append, "All=Append"); 323 Assert.AreEqual (filename, attr.PathDiscovery, "All=PathDiscovery"); 324 Assert.AreEqual (filename, attr.Read, "All=Read"); 325 Assert.AreEqual (filename, attr.Write, "All=Write"); 326 // but the permission class will c14n it 327 filename = Path.GetFullPath (filename); 328 FileIOPermission p = (FileIOPermission)attr.CreatePermission (); 329 Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.Append) [0], "All=FileIOPermissionAttribute-Append"); 330 Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.PathDiscovery) [0], "All=FileIOPermissionAttribute-PathDiscovery"); 331 Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.Read) [0], "All=FileIOPermissionAttribute-Read"); 332 Assert.AreEqual (filename, p.GetPathList (FileIOPermissionAccess.Write) [0], "All=FileIOPermissionAttribute-Write"); 333 } 334 } 335 } 336