Adding ArrayListTest to AllTests
[mono.git] / mcs / class / corlib / Test / System.Security.Permissions / FileIOPermissionTest.cs
1 //\r
2 // MonoTests.System.Security.Permissions.FileIOPermissionTest.cs\r
3 //\r
4 // Author:\r
5 //   Nick Drochak (ndrochak@gol.com)\r
6 //\r
7 // (C) 2001 Nick Drochak II\r
8 //\r
9 \r
10 \r
11 using System;\r
12 using System.Security;\r
13 using System.Security.Permissions;\r
14 \r
15 using NUnit.Framework;\r
16 \r
17 namespace MonoTests.System.Security.Permissions {\r
18 \r
19         public class FileIOPermissionTest : TestCase {\r
20                 \r
21                 public FileIOPermissionTest(String name) : base(name) {\r
22                 }\r
23                 \r
24                 public static ITest Suite {\r
25                         get {\r
26                                 return new TestSuite(typeof(FileIOPermissionTest));\r
27                         }\r
28                 }\r
29 \r
30                 protected override void SetUp() {\r
31                 }\r
32 \r
33                 private void SetDefaultData() {\r
34                 }\r
35                 \r
36                 public void TestConstructorPermissionState() {\r
37                         FileIOPermission p;\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
42                         try{\r
43                                 p = new FileIOPermission((PermissionState)77);\r
44                                 Fail("Should have thrown an exception on invalid PermissionState");\r
45                         }\r
46                         catch{\r
47                                 // we should be here if things are working.  nothing to do\r
48                         }\r
49                 }\r
50 \r
51                 public void TestConstructorString() {\r
52                         FileIOPermission p;\r
53                         try{\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
56                         }\r
57                         catch{}\r
58 \r
59                         try{\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
62                         }\r
63                         catch{}\r
64                         \r
65                         try{\r
66                                 p = new FileIOPermission(FileIOPermissionAccess.Append, "\\\\mycomputer\\test*");\r
67                                 Fail("Should have thrown an exception on wildcards not allowed in path");\r
68                         }\r
69                         catch{}\r
70 \r
71                         try{\r
72                                 p = new FileIOPermission((FileIOPermissionAccess)77, "c:\\temp");\r
73                                 Fail("Should have thrown an exception on invalid access value");\r
74                         }\r
75                         catch{}\r
76 \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
82                 }\r
83 \r
84                 public void TestConstructorStringArray() {\r
85                         FileIOPermission p;\r
86                         string[] pathArrayGood = {"c:\\temp1", "d:\\temp2"};\r
87                         string[] pathArrayBad = {"c:\\temp1", "d:\\temp*"};\r
88                         string[] pathsInPermission;\r
89 \r
90                         try{\r
91                                 p = new FileIOPermission(FileIOPermissionAccess.Append, pathArrayBad);\r
92                                 Fail("Should have thrown an exception on wildcards not allowed in path");\r
93                         }\r
94                         catch{}\r
95 \r
96                         try{\r
97                                 p = new FileIOPermission((FileIOPermissionAccess)77, pathArrayGood);\r
98                                 Fail("Should have thrown an exception on invalid access value");\r
99                         }\r
100                         catch{}\r
101 \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
107                         }\r
108 \r
109                 }\r
110 \r
111                 public void TestAddPathListStringArray() {\r
112                         FileIOPermission p;\r
113                         string[] pathArrayGood = {"c:\\temp1", "d:\\temp2"};\r
114                         string[] pathsInPermission;\r
115 \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
121                         }\r
122 \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
128                         }\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
133                         }\r
134                 }\r
135 \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
144 \r
145                         p = new FileIOPermission(FileIOPermissionAccess.Read, pathArrayGood);\r
146                         p.AllFiles = FileIOPermissionAccess.Append;\r
147                         p.AllLocalFiles = FileIOPermissionAccess.Write;\r
148                         \r
149                         unrestricted = new FileIOPermission(PermissionState.Unrestricted);\r
150                         \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
156 \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
162 \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
171 \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
177                 }\r
178 \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
185 \r
186                         unrestricted = new FileIOPermission(PermissionState.Unrestricted);\r
187                         Assert("IsSubsetOf reflective test failed", unrestricted.IsSubsetOf(unrestricted));\r
188 \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
195 \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
200 \r
201                         Assert("IsSubsetOf true test failed", p.IsSubsetOf(p2));\r
202                         Assert("IsSubsetOf false test failed", !p2.IsSubsetOf(p));\r
203                 }\r
204 \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
213 \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
220 \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
225 \r
226                         p2 = new FileIOPermission(FileIOPermissionAccess.Append, pathArrayGood2);\r
227 \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
233 \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
239                 }\r
240 \r
241                 public void TestFromXML() {\r
242                         FileIOPermission p = new FileIOPermission(PermissionState.None);\r
243                         SecurityElement esd;\r
244                         string[] pathsInPermission;\r
245 \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
250                         p.FromXml(esd);\r
251                         Assert("Should get an unrestricted permission", p.IsUnrestricted());\r
252 \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
258 \r
259                         p = new FileIOPermission(PermissionState.None);\r
260                         p.FromXml(esd);\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
265                 }\r
266 \r
267                 public void TestToXML() {\r
268                         FileIOPermission p;\r
269                         SecurityElement esd;\r
270                         string[] pathsInPermission;\r
271                         string read;\r
272                         string[] pathArrayGood = {"c:\\temp1\\", "d:\\temp2\\"};\r
273                         p = new FileIOPermission(FileIOPermissionAccess.Read, pathArrayGood);\r
274                         esd = p.ToXml();\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
280                 }\r
281         }\r
282 }\r
283 \r