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(String name) : base(name) {
\r
24 public static ITest Suite {
\r
26 return new TestSuite(typeof(FileIOPermissionTest));
\r
30 protected override void SetUp() {
\r
33 private void SetDefaultData() {
\r
36 public void TestConstructorPermissionState() {
\r
38 p = new FileIOPermission(PermissionState.None);
\r
39 AssertEquals("Should be Restricted", false, p.IsUnrestricted());
\r
40 p = new FileIOPermission(PermissionState.Unrestricted);
\r
41 AssertEquals("Should be Unrestricted", true, p.IsUnrestricted());
\r
43 p = new FileIOPermission((PermissionState)77);
\r
44 Fail("Should have thrown an exception on invalid PermissionState");
\r
47 // we should be here if things are working. nothing to do
\r
51 public void TestConstructorString() {
\r
54 p = new FileIOPermission(FileIOPermissionAccess.Append, "this path is not rooted");
\r
55 Fail("Should have thrown an exception on path not rooted");
\r
60 p = new FileIOPermission(FileIOPermissionAccess.Append, "<this is not a valid path>");
\r
61 Fail("Should have thrown an exception on invalid characters in path");
\r
66 p = new FileIOPermission(FileIOPermissionAccess.Append, "\\\\mycomputer\\test*");
\r
67 Fail("Should have thrown an exception on wildcards not allowed in path");
\r
72 p = new FileIOPermission((FileIOPermissionAccess)77, "c:\\temp");
\r
73 Fail("Should have thrown an exception on invalid access value");
\r
77 string pathToAdd = "c:\\temp";
\r
78 p = new FileIOPermission(FileIOPermissionAccess.Read, pathToAdd);
\r
79 string[] pathsInPermission = p.GetPathList(FileIOPermissionAccess.Read);
\r
80 Assert("Does not contain correct number of paths. Expected 1 but got: "+pathsInPermission.Length, pathsInPermission.Length == 1);
\r
81 Assert("Does not contain expected path from constructor: "+pathToAdd, pathsInPermission[0] == pathToAdd);
\r
84 public void TestConstructorStringArray() {
\r
86 string[] pathArrayGood = {"c:\\temp1", "d:\\temp2"};
\r
87 string[] pathArrayBad = {"c:\\temp1", "d:\\temp*"};
\r
88 string[] pathsInPermission;
\r
91 p = new FileIOPermission(FileIOPermissionAccess.Append, pathArrayBad);
\r
92 Fail("Should have thrown an exception on wildcards not allowed in path");
\r
97 p = new FileIOPermission((FileIOPermissionAccess)77, pathArrayGood);
\r
98 Fail("Should have thrown an exception on invalid access value");
\r
102 p = new FileIOPermission(FileIOPermissionAccess.Read, pathArrayGood);
\r
103 pathsInPermission = p.GetPathList(FileIOPermissionAccess.Read);
\r
104 Assert("Does not contain correct number of paths. Expected 2 but got: "+pathsInPermission.Length, pathsInPermission.Length == 2);
\r
105 foreach (string s in pathsInPermission){
\r
106 Assert("Unexpected path in the Permission: " + s, Array.IndexOf(pathsInPermission, s) >=0);
\r
111 public void TestAddPathListStringArray() {
\r
112 FileIOPermission p;
\r
113 string[] pathArrayGood = {"c:\\temp1", "d:\\temp2"};
\r
114 string[] pathsInPermission;
\r
116 p = new FileIOPermission(FileIOPermissionAccess.Read, pathArrayGood);
\r
117 pathsInPermission = p.GetPathList(FileIOPermissionAccess.Read);
\r
118 Assert("Does not contain correct number of paths. Expected 2 but got: "+pathsInPermission.Length, pathsInPermission.Length == 2);
\r
119 foreach (string s in pathsInPermission){
\r
120 Assert("Unexpected path in the Permission: " + s, Array.IndexOf(pathsInPermission, s) >=0);
\r
123 p.AddPathList(FileIOPermissionAccess.Append, pathArrayGood);
\r
124 pathsInPermission = p.GetPathList(FileIOPermissionAccess.Read);
\r
125 Assert("Should still contain correct number Read paths. Expected 2 but got: "+pathsInPermission.Length, pathsInPermission.Length == 2);
\r
126 foreach (string s in pathsInPermission){
\r
127 Assert("Unexpected path in the Permission: " + s, Array.IndexOf(pathsInPermission, s) >=0);
\r
129 pathsInPermission = p.GetPathList(FileIOPermissionAccess.Append);
\r
130 Assert("Should contain correct number of Append paths. Expected 2 but got: "+pathsInPermission.Length, pathsInPermission.Length == 2);
\r
131 foreach (string s in pathsInPermission){
\r
132 Assert("Unexpected path in the Permission: " + s, Array.IndexOf(pathsInPermission, s) >=0);
\r
136 public void TestIntersect() {
\r
137 FileIOPermission p;
\r
138 FileIOPermission p2;
\r
139 FileIOPermission unrestricted;
\r
140 FileIOPermission intersection;
\r
141 string[] pathArrayGood = {"c:\\temp1\\", "d:\\temp2\\"};
\r
142 string[] pathArrayGood2 = {"c:\\temp1\\", "d:\\temp2\\", "z:\\something"};
\r
143 string[] pathsInPermission;
\r
145 p = new FileIOPermission(FileIOPermissionAccess.Read, pathArrayGood);
\r
146 p.AllFiles = FileIOPermissionAccess.Append;
\r
147 p.AllLocalFiles = FileIOPermissionAccess.Write;
\r
149 unrestricted = new FileIOPermission(PermissionState.Unrestricted);
\r
151 intersection = (FileIOPermission)p.Intersect(unrestricted);
\r
152 pathsInPermission = intersection.GetPathList(FileIOPermissionAccess.Read);
\r
153 Assert("Should contain correct number of Read paths. Expected 2 but got: "+pathsInPermission.Length, pathsInPermission.Length == 2);
\r
154 Assert("Should have Append bit in AllFiles.", (intersection.AllFiles & FileIOPermissionAccess.Append) != 0);
\r
155 Assert("Should have Write bit in AllLocalFiles.", (intersection.AllLocalFiles & FileIOPermissionAccess.Write) != 0);
\r
157 intersection = (FileIOPermission)unrestricted.Intersect(p);
\r
158 pathsInPermission = intersection.GetPathList(FileIOPermissionAccess.Read);
\r
159 Assert("Should contain correct number of Read paths. Expected 2 but got: "+pathsInPermission.Length, pathsInPermission.Length == 2);
\r
160 Assert("Should have Append bit in AllFiles.", (intersection.AllFiles & FileIOPermissionAccess.Append) != 0);
\r
161 Assert("Should have Write bit in AllLocalFiles.", (intersection.AllLocalFiles & FileIOPermissionAccess.Write) != 0);
\r
163 p2 = new FileIOPermission(FileIOPermissionAccess.Append | FileIOPermissionAccess.Read, pathArrayGood2);
\r
164 p2.AllFiles = FileIOPermissionAccess.Append | FileIOPermissionAccess.Write;
\r
165 p2.AllLocalFiles = FileIOPermissionAccess.Write | FileIOPermissionAccess.Read;
\r
166 intersection = (FileIOPermission)p.Intersect(p2);
\r
167 pathsInPermission = intersection.GetPathList(FileIOPermissionAccess.Read);
\r
168 Assert("Should contain correct number of Read paths. Expected 2 but got: "+pathsInPermission.Length, pathsInPermission.Length == 2);
\r
169 Assert("Should have only Append bit in AllFiles.", intersection.AllFiles == FileIOPermissionAccess.Append);
\r
170 Assert("Should have only Write bit in AllLocalFiles.", intersection.AllLocalFiles == FileIOPermissionAccess.Write);
\r
172 intersection = (FileIOPermission)p2.Intersect(p);
\r
173 pathsInPermission = intersection.GetPathList(FileIOPermissionAccess.Read);
\r
174 Assert("Should contain correct number of Read paths. Expected 2 but got: "+pathsInPermission.Length, pathsInPermission.Length == 2);
\r
175 Assert("Should have only Append bit in AllFiles.", intersection.AllFiles == FileIOPermissionAccess.Append);
\r
176 Assert("Should have only Write bit in AllLocalFiles.", intersection.AllLocalFiles == FileIOPermissionAccess.Write);
\r
179 public void TestIsSubsetOf() {
\r
180 FileIOPermission p;
\r
181 FileIOPermission p2;
\r
182 FileIOPermission unrestricted;
\r
183 string[] pathArrayGood = {"c:\\temp1\\", "d:\\temp2\\"};
\r
184 string[] pathArrayGood2 = {"c:\\temp1\\", "d:\\temp2\\", "z:\\something"};
\r
186 unrestricted = new FileIOPermission(PermissionState.Unrestricted);
\r
187 Assert("IsSubsetOf reflective test failed", unrestricted.IsSubsetOf(unrestricted));
\r
189 p = new FileIOPermission(FileIOPermissionAccess.Read, pathArrayGood);
\r
190 p.AllFiles = FileIOPermissionAccess.Append;
\r
191 p.AllLocalFiles = FileIOPermissionAccess.Write;
\r
192 Assert("IsSubsetOf reflective test failed", p.IsSubsetOf(p));
\r
193 Assert("IsSubsetOf false test failed", !unrestricted.IsSubsetOf(p));
\r
194 Assert("IsSubsetOf true test failed", p.IsSubsetOf(unrestricted));
\r
196 p2 = new FileIOPermission(FileIOPermissionAccess.Append | FileIOPermissionAccess.Read, pathArrayGood2);
\r
197 p2.AllFiles = FileIOPermissionAccess.Append | FileIOPermissionAccess.Write;
\r
198 p2.AllLocalFiles = FileIOPermissionAccess.Write | FileIOPermissionAccess.Read;
\r
199 Assert("IsSubsetOf reflective test failed", p2.IsSubsetOf(p2));
\r
201 Assert("IsSubsetOf true test failed", p.IsSubsetOf(p2));
\r
202 Assert("IsSubsetOf false test failed", !p2.IsSubsetOf(p));
\r
205 public void TestUnion() {
\r
206 FileIOPermission p;
\r
207 FileIOPermission p2;
\r
208 FileIOPermission unrestricted;
\r
209 FileIOPermission union;
\r
210 string[] pathArrayGood = {"c:\\temp1\\", "d:\\temp2\\"};
\r
211 string[] pathArrayGood2 = {"c:\\temp1\\", "d:\\temp2\\", "z:\\something"};
\r
212 string[] pathsInPermission;
\r
214 unrestricted = new FileIOPermission(PermissionState.Unrestricted);
\r
215 p = new FileIOPermission(FileIOPermissionAccess.Read, pathArrayGood);
\r
216 union = (FileIOPermission)unrestricted.Union(p);
\r
217 pathsInPermission = union.GetPathList(FileIOPermissionAccess.Read);
\r
218 Assert("Should get an unrestricted permission", union.IsUnrestricted());
\r
219 Assert("Path list should be empty", pathsInPermission == null);
\r
221 union = (FileIOPermission)p.Union(unrestricted);
\r
222 pathsInPermission = union.GetPathList(FileIOPermissionAccess.Read);
\r
223 Assert("Should get an unrestricted permission", union.IsUnrestricted());
\r
224 Assert("Path list should be empty", pathsInPermission == null);
\r
226 p2 = new FileIOPermission(FileIOPermissionAccess.Append, pathArrayGood2);
\r
228 union = (FileIOPermission)p.Union(p2);
\r
229 pathsInPermission = union.GetPathList(FileIOPermissionAccess.Read);
\r
230 Assert("Path list should have 2 for Read", pathsInPermission.Length == pathArrayGood.Length);
\r
231 pathsInPermission = union.GetPathList(FileIOPermissionAccess.Append);
\r
232 Assert("Path list should have 3 for Append", pathsInPermission.Length == pathArrayGood2.Length);
\r
234 union = (FileIOPermission)p2.Union(p);
\r
235 pathsInPermission = union.GetPathList(FileIOPermissionAccess.Read);
\r
236 Assert("Path list should have 2 for Read", pathsInPermission.Length == pathArrayGood.Length);
\r
237 pathsInPermission = union.GetPathList(FileIOPermissionAccess.Append);
\r
238 Assert("Path list should have 3 for Append", pathsInPermission.Length == pathArrayGood2.Length);
\r
241 public void TestFromXML() {
\r
242 FileIOPermission p = new FileIOPermission(PermissionState.None);
\r
243 SecurityElement esd;
\r
244 string[] pathsInPermission;
\r
246 esd = new SecurityElement("IPermission");
\r
247 esd.AddAttribute("class", "FileIOPermission");
\r
248 esd.AddAttribute("version", "1");
\r
249 esd.AddAttribute("Unrestricted", "true");
\r
251 Assert("Should get an unrestricted permission", p.IsUnrestricted());
\r
253 esd = new SecurityElement("IPermission");
\r
254 esd.AddAttribute("class", "FileIOPermission");
\r
255 esd.AddAttribute("version", "1");
\r
256 esd.AddAttribute("Read", "c:\\temp;d:\\temp2");
\r
257 esd.AddAttribute("Write", "c:\\temp;d:\\temp2;z:\\temp3");
\r
259 p = new FileIOPermission(PermissionState.None);
\r
261 pathsInPermission = p.GetPathList(FileIOPermissionAccess.Read);
\r
262 Assert("Path list should have 2 for Read", pathsInPermission.Length == 2);
\r
263 pathsInPermission = p.GetPathList(FileIOPermissionAccess.Write);
\r
264 Assert("Path list should have 2 for Write", pathsInPermission.Length == 3);
\r
267 public void TestToXML() {
\r
268 FileIOPermission p;
\r
269 SecurityElement esd;
\r
270 string[] pathsInPermission;
\r
272 string[] pathArrayGood = {"c:\\temp1\\", "d:\\temp2\\"};
\r
273 p = new FileIOPermission(FileIOPermissionAccess.Read, pathArrayGood);
\r
275 Assert("Esd tag incorrect", esd.Tag == "IPermission");
\r
276 Assert("Esd version incorrect", (String)esd.Attributes["version"] == "1");
\r
277 read = (String)esd.Attributes["Read"];
\r
278 pathsInPermission = read.Split(';');
\r
279 Assert("Path list should have 2 for Read", pathsInPermission.Length == 2);
\r