2 // MonoTests.System.Security.Permissions.FileIOPermissionTest.cs
\r
5 // Nick Drochak (ndrochak@gol.com)
\r
7 // (C) 2001 Nick Drochak II
\r
12 using System.Security;
\r
13 using System.Security.Permissions;
\r
15 using NUnit.Framework;
\r
17 namespace MonoTests.System.Security.Permissions {
\r
19 public class FileIOPermissionTest : TestCase {
\r
21 public FileIOPermissionTest() : base ("MonoTests.System.Security.Permissions.FileIOPermissionTest testcase") { }
\r
22 public FileIOPermissionTest(String name) : base(name) {
\r
25 public static ITest Suite {
\r
27 return new TestSuite(typeof(FileIOPermissionTest));
\r
31 protected override void SetUp() {
\r
34 private void SetDefaultData() {
\r
37 public void TestConstructorPermissionState() {
\r
39 p = new FileIOPermission(PermissionState.None);
\r
40 AssertEquals("Should be Restricted", false, p.IsUnrestricted());
\r
41 p = new FileIOPermission(PermissionState.Unrestricted);
\r
42 AssertEquals("Should be Unrestricted", true, p.IsUnrestricted());
\r
44 p = new FileIOPermission((PermissionState)77);
\r
45 Fail("Should have thrown an exception on invalid PermissionState");
\r
48 // we should be here if things are working. nothing to do
\r
52 public void TestConstructorString() {
\r
55 p = new FileIOPermission(FileIOPermissionAccess.Append, "this path is not rooted");
\r
56 Fail("Should have thrown an exception on path not rooted");
\r
61 p = new FileIOPermission(FileIOPermissionAccess.Append, "<this is not a valid path>");
\r
62 Fail("Should have thrown an exception on invalid characters in path");
\r
67 p = new FileIOPermission(FileIOPermissionAccess.Append, "\\\\mycomputer\\test*");
\r
68 Fail("Should have thrown an exception on wildcards not allowed in path");
\r
73 p = new FileIOPermission((FileIOPermissionAccess)77, "c:\\temp");
\r
74 Fail("Should have thrown an exception on invalid access value");
\r
78 string pathToAdd = "c:\\temp";
\r
79 p = new FileIOPermission(FileIOPermissionAccess.Read, pathToAdd);
\r
80 string[] pathsInPermission = p.GetPathList(FileIOPermissionAccess.Read);
\r
81 Assert("Does not contain correct number of paths. Expected 1 but got: "+pathsInPermission.Length, pathsInPermission.Length == 1);
\r
82 Assert("Does not contain expected path from constructor: "+pathToAdd, pathsInPermission[0] == pathToAdd);
\r
85 public void TestConstructorStringArray() {
\r
87 string[] pathArrayGood = {"c:\\temp1", "d:\\temp2"};
\r
88 string[] pathArrayBad = {"c:\\temp1", "d:\\temp*"};
\r
89 string[] pathsInPermission;
\r
92 p = new FileIOPermission(FileIOPermissionAccess.Append, pathArrayBad);
\r
93 Fail("Should have thrown an exception on wildcards not allowed in path");
\r
98 p = new FileIOPermission((FileIOPermissionAccess)77, pathArrayGood);
\r
99 Fail("Should have thrown an exception on invalid access value");
\r
103 p = new FileIOPermission(FileIOPermissionAccess.Read, pathArrayGood);
\r
104 pathsInPermission = p.GetPathList(FileIOPermissionAccess.Read);
\r
105 Assert("Does not contain correct number of paths. Expected 2 but got: "+pathsInPermission.Length, pathsInPermission.Length == 2);
\r
106 foreach (string s in pathsInPermission){
\r
107 Assert("Unexpected path in the Permission: " + s, Array.IndexOf(pathsInPermission, s) >=0);
\r
112 public void TestAddPathListStringArray() {
\r
113 FileIOPermission p;
\r
114 string[] pathArrayGood = {"c:\\temp1", "d:\\temp2"};
\r
115 string[] pathsInPermission;
\r
117 p = new FileIOPermission(FileIOPermissionAccess.Read, pathArrayGood);
\r
118 pathsInPermission = p.GetPathList(FileIOPermissionAccess.Read);
\r
119 Assert("Does not contain correct number of paths. Expected 2 but got: "+pathsInPermission.Length, pathsInPermission.Length == 2);
\r
120 foreach (string s in pathsInPermission){
\r
121 Assert("Unexpected path in the Permission: " + s, Array.IndexOf(pathsInPermission, s) >=0);
\r
124 p.AddPathList(FileIOPermissionAccess.Append, pathArrayGood);
\r
125 pathsInPermission = p.GetPathList(FileIOPermissionAccess.Read);
\r
126 Assert("Should still contain correct number Read paths. Expected 2 but got: "+pathsInPermission.Length, pathsInPermission.Length == 2);
\r
127 foreach (string s in pathsInPermission){
\r
128 Assert("Unexpected path in the Permission: " + s, Array.IndexOf(pathsInPermission, s) >=0);
\r
130 pathsInPermission = p.GetPathList(FileIOPermissionAccess.Append);
\r
131 Assert("Should contain correct number of Append paths. Expected 2 but got: "+pathsInPermission.Length, pathsInPermission.Length == 2);
\r
132 foreach (string s in pathsInPermission){
\r
133 Assert("Unexpected path in the Permission: " + s, Array.IndexOf(pathsInPermission, s) >=0);
\r
137 public void TestIntersect() {
\r
138 FileIOPermission p;
\r
139 FileIOPermission p2;
\r
140 FileIOPermission unrestricted;
\r
141 FileIOPermission intersection;
\r
142 string[] pathArrayGood = {"c:\\temp1\\", "d:\\temp2\\"};
\r
143 string[] pathArrayGood2 = {"c:\\temp1\\", "d:\\temp2\\", "z:\\something"};
\r
144 string[] pathsInPermission;
\r
146 p = new FileIOPermission(FileIOPermissionAccess.Read, pathArrayGood);
\r
147 p.AllFiles = FileIOPermissionAccess.Append;
\r
148 p.AllLocalFiles = FileIOPermissionAccess.Write;
\r
150 unrestricted = new FileIOPermission(PermissionState.Unrestricted);
\r
152 intersection = (FileIOPermission)p.Intersect(unrestricted);
\r
153 pathsInPermission = intersection.GetPathList(FileIOPermissionAccess.Read);
\r
154 Assert("Should contain correct number of Read paths. Expected 2 but got: "+pathsInPermission.Length, pathsInPermission.Length == 2);
\r
155 Assert("Should have Append bit in AllFiles.", (intersection.AllFiles & FileIOPermissionAccess.Append) != 0);
\r
156 Assert("Should have Write bit in AllLocalFiles.", (intersection.AllLocalFiles & FileIOPermissionAccess.Write) != 0);
\r
158 intersection = (FileIOPermission)unrestricted.Intersect(p);
\r
159 pathsInPermission = intersection.GetPathList(FileIOPermissionAccess.Read);
\r
160 Assert("Should contain correct number of Read paths. Expected 2 but got: "+pathsInPermission.Length, pathsInPermission.Length == 2);
\r
161 Assert("Should have Append bit in AllFiles.", (intersection.AllFiles & FileIOPermissionAccess.Append) != 0);
\r
162 Assert("Should have Write bit in AllLocalFiles.", (intersection.AllLocalFiles & FileIOPermissionAccess.Write) != 0);
\r
164 p2 = new FileIOPermission(FileIOPermissionAccess.Append | FileIOPermissionAccess.Read, pathArrayGood2);
\r
165 p2.AllFiles = FileIOPermissionAccess.Append | FileIOPermissionAccess.Write;
\r
166 p2.AllLocalFiles = FileIOPermissionAccess.Write | FileIOPermissionAccess.Read;
\r
167 intersection = (FileIOPermission)p.Intersect(p2);
\r
168 pathsInPermission = intersection.GetPathList(FileIOPermissionAccess.Read);
\r
169 Assert("Should contain correct number of Read paths. Expected 2 but got: "+pathsInPermission.Length, pathsInPermission.Length == 2);
\r
170 Assert("Should have only Append bit in AllFiles.", intersection.AllFiles == FileIOPermissionAccess.Append);
\r
171 Assert("Should have only Write bit in AllLocalFiles.", intersection.AllLocalFiles == FileIOPermissionAccess.Write);
\r
173 intersection = (FileIOPermission)p2.Intersect(p);
\r
174 pathsInPermission = intersection.GetPathList(FileIOPermissionAccess.Read);
\r
175 Assert("Should contain correct number of Read paths. Expected 2 but got: "+pathsInPermission.Length, pathsInPermission.Length == 2);
\r
176 Assert("Should have only Append bit in AllFiles.", intersection.AllFiles == FileIOPermissionAccess.Append);
\r
177 Assert("Should have only Write bit in AllLocalFiles.", intersection.AllLocalFiles == FileIOPermissionAccess.Write);
\r
180 public void TestIsSubsetOf() {
\r
181 FileIOPermission p;
\r
182 FileIOPermission p2;
\r
183 FileIOPermission unrestricted;
\r
184 string[] pathArrayGood = {"c:\\temp1\\", "d:\\temp2\\"};
\r
185 string[] pathArrayGood2 = {"c:\\temp1\\", "d:\\temp2\\", "z:\\something"};
\r
187 unrestricted = new FileIOPermission(PermissionState.Unrestricted);
\r
188 Assert("IsSubsetOf reflective test failed", unrestricted.IsSubsetOf(unrestricted));
\r
190 p = new FileIOPermission(FileIOPermissionAccess.Read, pathArrayGood);
\r
191 p.AllFiles = FileIOPermissionAccess.Append;
\r
192 p.AllLocalFiles = FileIOPermissionAccess.Write;
\r
193 Assert("IsSubsetOf reflective test failed", p.IsSubsetOf(p));
\r
194 Assert("IsSubsetOf false test failed", !unrestricted.IsSubsetOf(p));
\r
195 Assert("IsSubsetOf true test failed", p.IsSubsetOf(unrestricted));
\r
197 p2 = new FileIOPermission(FileIOPermissionAccess.Append | FileIOPermissionAccess.Read, pathArrayGood2);
\r
198 p2.AllFiles = FileIOPermissionAccess.Append | FileIOPermissionAccess.Write;
\r
199 p2.AllLocalFiles = FileIOPermissionAccess.Write | FileIOPermissionAccess.Read;
\r
200 Assert("IsSubsetOf reflective test failed", p2.IsSubsetOf(p2));
\r
202 Assert("IsSubsetOf true test failed", p.IsSubsetOf(p2));
\r
203 Assert("IsSubsetOf false test failed", !p2.IsSubsetOf(p));
\r
206 public void TestUnion() {
\r
207 FileIOPermission p;
\r
208 FileIOPermission p2;
\r
209 FileIOPermission unrestricted;
\r
210 FileIOPermission union;
\r
211 string[] pathArrayGood = {"c:\\temp1\\", "d:\\temp2\\"};
\r
212 string[] pathArrayGood2 = {"c:\\temp1\\", "d:\\temp2\\", "z:\\something"};
\r
213 string[] pathsInPermission;
\r
215 unrestricted = new FileIOPermission(PermissionState.Unrestricted);
\r
216 p = new FileIOPermission(FileIOPermissionAccess.Read, pathArrayGood);
\r
217 union = (FileIOPermission)unrestricted.Union(p);
\r
218 pathsInPermission = union.GetPathList(FileIOPermissionAccess.Read);
\r
219 Assert("Should get an unrestricted permission", union.IsUnrestricted());
\r
220 Assert("Path list should be empty", pathsInPermission == null);
\r
222 union = (FileIOPermission)p.Union(unrestricted);
\r
223 pathsInPermission = union.GetPathList(FileIOPermissionAccess.Read);
\r
224 Assert("Should get an unrestricted permission", union.IsUnrestricted());
\r
225 Assert("Path list should be empty", pathsInPermission == null);
\r
227 p2 = new FileIOPermission(FileIOPermissionAccess.Append, pathArrayGood2);
\r
229 union = (FileIOPermission)p.Union(p2);
\r
230 pathsInPermission = union.GetPathList(FileIOPermissionAccess.Read);
\r
231 Assert("Path list should have 2 for Read", pathsInPermission.Length == pathArrayGood.Length);
\r
232 pathsInPermission = union.GetPathList(FileIOPermissionAccess.Append);
\r
233 Assert("Path list should have 3 for Append", pathsInPermission.Length == pathArrayGood2.Length);
\r
235 union = (FileIOPermission)p2.Union(p);
\r
236 pathsInPermission = union.GetPathList(FileIOPermissionAccess.Read);
\r
237 Assert("Path list should have 2 for Read", pathsInPermission.Length == pathArrayGood.Length);
\r
238 pathsInPermission = union.GetPathList(FileIOPermissionAccess.Append);
\r
239 Assert("Path list should have 3 for Append", pathsInPermission.Length == pathArrayGood2.Length);
\r
242 public void TestFromXML() {
\r
243 FileIOPermission p = new FileIOPermission(PermissionState.None);
\r
244 SecurityElement esd;
\r
245 string[] pathsInPermission;
\r
247 esd = new SecurityElement("IPermission");
\r
248 esd.AddAttribute("class", "FileIOPermission");
\r
249 esd.AddAttribute("version", "1");
\r
250 esd.AddAttribute("Unrestricted", "true");
\r
252 Assert("Should get an unrestricted permission", p.IsUnrestricted());
\r
254 esd = new SecurityElement("IPermission");
\r
255 esd.AddAttribute("class", "FileIOPermission");
\r
256 esd.AddAttribute("version", "1");
\r
257 esd.AddAttribute("Read", "c:\\temp;d:\\temp2");
\r
258 esd.AddAttribute("Write", "c:\\temp;d:\\temp2;z:\\temp3");
\r
260 p = new FileIOPermission(PermissionState.None);
\r
262 pathsInPermission = p.GetPathList(FileIOPermissionAccess.Read);
\r
263 Assert("Path list should have 2 for Read", pathsInPermission.Length == 2);
\r
264 pathsInPermission = p.GetPathList(FileIOPermissionAccess.Write);
\r
265 Assert("Path list should have 2 for Write", pathsInPermission.Length == 3);
\r
268 public void TestToXML() {
\r
269 FileIOPermission p;
\r
270 SecurityElement esd;
\r
271 string[] pathsInPermission;
\r
273 string[] pathArrayGood = {"c:\\temp1\\", "d:\\temp2\\"};
\r
274 p = new FileIOPermission(FileIOPermissionAccess.Read, pathArrayGood);
\r
276 Assert("Esd tag incorrect", esd.Tag == "IPermission");
\r
277 Assert("Esd version incorrect", (String)esd.Attributes["version"] == "1");
\r
278 read = (String)esd.Attributes["Read"];
\r
279 pathsInPermission = read.Split(';');
\r
280 Assert("Path list should have 2 for Read", pathsInPermission.Length == 2);
\r