2009-06-12 Bill Holmes <billholmes54@gmail.com>
[mono.git] / mcs / class / corlib / Test / System.Security.Policy / EvidenceTest.cs
1 //
2 // MonoTests.System.Security.Policy.EvidenceTest
3 //
4 // Authors:
5 //      Jackson Harper (Jackson@LatitudeGeo.com)
6 //      Sebastien Pouliot  <sebastien@ximian.com>
7 //
8 // (C) 2001 Jackson Harper, All rights reserved.
9 // Portions (C) 2003, 2004 Motus Technologies Inc. (http://www.motus.com)
10 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
11 //
12 // Permission is hereby granted, free of charge, to any person obtaining
13 // a copy of this software and associated documentation files (the
14 // "Software"), to deal in the Software without restriction, including
15 // without limitation the rights to use, copy, modify, merge, publish,
16 // distribute, sublicense, and/or sell copies of the Software, and to
17 // permit persons to whom the Software is furnished to do so, subject to
18 // the following conditions:
19 // 
20 // The above copyright notice and this permission notice shall be
21 // included in all copies or substantial portions of the Software.
22 // 
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
27 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
28 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
29 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30 //
31
32 using System;
33 using System.Collections;\r
34 using System.Reflection;
35 using System.Security.Policy;
36 using NUnit.Framework;
37
38 namespace MonoTests.System.Security.Policy {
39
40         [TestFixture]
41         public class EvidenceTest : Assertion {
42                 
43                 [Test]
44                 public void DefaultConstructor ()
45                 {
46                         Evidence evidence = new Evidence ();
47                         
48                         AssertEquals ("Default constructor count should be zero", evidence.Count, 0);
49                         AssertEquals ("Default constructor host enumerator MoveNext() should be false", 
50                                 evidence.GetHostEnumerator().MoveNext(), false);
51                         AssertEquals ("Default constructor assembly enumerator MoveNext() should be false",
52                                 evidence.GetAssemblyEnumerator().MoveNext(), false);
53                         AssertEquals ("Default constructor enumerator MoveNext() should be false",
54                                 evidence.GetEnumerator().MoveNext(), false);
55                 }
56
57                 [Test]
58                 public void MultipleConstructor ()
59                 {
60                         object[] hostarray = new object[10];
61                         object[] assemarray = new object[10];
62                         Evidence evidence = new Evidence ( hostarray, assemarray );
63
64                         AssertEquals ( "Count of multiple arg constructor should equal 20", evidence.Count, 20 );
65                 }
66
67                 [Test]
68                 public void CopyConstructor ()
69                 {
70                         object[] hostlist = { "host-1", "host-2", "host-3", "host-4" };
71                         object[] asmblist = { "asmb-1", "asmb-2", "asmb-3", "asmb-4" };
72                         Evidence evidence1 = new Evidence (hostlist, asmblist);
73                         Evidence evidence2 = new Evidence (evidence1);
74                         
75                         AssertEquals("Copy constructor counts do not match", evidence1.Count, evidence2.Count);
76                 }
77
78                 [Test]
79                 public void Constructor_Null ()
80                 {
81                         Evidence e = new Evidence (null);
82                         AssertEquals ("Count-Empty", 0, e.Count);
83                 }
84
85                 [Test]
86                 public void Constructor_NullNull ()
87                 {
88                         Evidence e = new Evidence (null, null);
89                         AssertEquals ("Count-Empty", 0, e.Count);
90                 }
91
92                 [Test]
93                 public void AddAssembly ()
94                 {
95                         Evidence evidence = new Evidence ();
96                         object[] comparray = new object[100];
97                         string obj;
98
99                         for (int i=0; i<100; i++) {
100                                 obj = String.Format ("asmb-{0}", i+1);
101                                 comparray[i] = obj;
102                                 evidence.AddAssembly (obj);
103                                 AssertEquals (evidence.Count, i+1);
104                         }
105                         
106                         int index = 0;
107                         foreach (object compobj in evidence) {
108                                 AssertEquals ("Comparison object does not equal evidence assembly object", 
109                                         comparray[index++], compobj);
110                         }
111                 }
112
113                 [Test]
114                 public void AddHost ()
115                 {
116                         Evidence evidence = new Evidence ();
117                         object[] comparray = new object[100];
118                         string obj;
119
120                         for (int i=0; i<100; i++) {
121                                 obj = String.Format ("asmb-{0}", i+1);
122                                 comparray[i] = obj;
123                                 evidence.AddAssembly ( obj );
124                                 AssertEquals (evidence.Count, i+1);
125                         }
126
127                         int index = 0;
128                         foreach (object compobj in evidence) {
129                                 AssertEquals ("Comparison object does not equal evidence host object", 
130                                         comparray[index++], compobj);
131                         }
132                 }
133
134                 [Test]
135                 public void MultiArgConstructorForEach ()
136                 {
137                         object[] hostarray = { "host-1", "host-2", "host-3", "host-4" };
138                         object[] asmbarray = { "asmb-1", "asmb-2", "asmb-3", "asmb-4" };
139                         ArrayList compare = new ArrayList (); 
140                         Evidence evidence = new Evidence (hostarray, asmbarray);
141                 
142                         compare.AddRange (hostarray);
143                         compare.AddRange (asmbarray);
144         
145                         int i = 0;              
146                         foreach (object obj in evidence) {
147                                 AssertEquals (obj, compare[i++]);
148                         }
149                 }
150
151                 [Test]
152                 public void EnumeratorReset ()
153                 {
154                         object[] hostarray = { "host-1", "host-2", "host-3", "host-4" };
155                         object[] asmbarray = { "asmb-1", "asmb-2", "asmb-3", "asmb-4" };
156                         ArrayList compare = new ArrayList (); 
157                         Evidence evidence = new Evidence (hostarray, asmbarray);
158                         compare.AddRange (hostarray);
159                         compare.AddRange (asmbarray);
160
161                         int i = 0;
162                         IEnumerator enumerator = evidence.GetEnumerator ();     
163                         while (enumerator.MoveNext ()) {
164                                 AssertEquals (enumerator.Current, compare[i++]);
165                         }
166
167                         enumerator.Reset ();
168                         i = 0;
169                         while (enumerator.MoveNext ()) {
170                                 AssertEquals (enumerator.Current, compare[i++]);
171                         }
172                 }
173
174                 [Test]
175                 public void GetHostEnumerator ()
176                 {
177                         object[] hostarray = { "host-1", "host-2", "host-3", "host-4" };
178                         object[] asmbarray = { "asmb-1", "asmb-2" };
179                         Evidence evidence = new Evidence (hostarray, asmbarray);
180                         IEnumerator enumerator = evidence.GetHostEnumerator ();
181                         int i = 0;
182                         while (enumerator.MoveNext ()) {
183                                 AssertEquals (enumerator.Current, hostarray[i++]);
184                         }
185                 }
186
187                 [Test]
188                 public void GetHostAssemblyEnumerator ()
189                 {
190                         object[] hostarray = { "host-1", "host-2", "host-3", "host-4" };
191                         object[] asmbarray = { "asmb-1", "asmb-2", "asmb-3", "asmb-4" };
192                         Evidence evidence;
193                         IEnumerator enumerator;
194                         int i;
195
196                         evidence = new Evidence (hostarray, asmbarray);
197                         enumerator = evidence.GetAssemblyEnumerator ();
198                         
199                         i = 0;
200                         while (enumerator.MoveNext()) {
201                                 AssertEquals (enumerator.Current, asmbarray[i++]);
202                         }
203                 }
204
205                 [Test]
206                 public void Count ()
207                 {
208                         object[] hostarray = { "host-1", "host-2", "host-3", "host-4" };
209                         object[] asmbarray = { "asmb-1", "asmb-2", "asmb-3", "asmb-4" };
210                         Evidence evidence = new Evidence (hostarray, asmbarray);
211                         Assertion.AssertEquals (evidence.Count, 8);
212
213                         for( int i=0; i<100; i++ ) {
214                                 if ( 0 == i%2 ) {
215                                         evidence.AddHost (String.Format ("host-{0}", i + 5) );
216                                 } else {
217                                         evidence.AddAssembly (String.Format ("asmb-{0}", i + 5));
218                                 }
219                                 AssertEquals (evidence.Count, 9 + i);
220                         }
221                 }
222
223                 [Test]
224                 [ExpectedException (typeof (ArgumentNullException))]
225                 public void NullCopyToException() 
226                 {
227                         Evidence evidence = new Evidence ();
228                         evidence.AddHost ("host-1");
229                         evidence.CopyTo (null, 100);
230                 }
231
232                 /// <summary>
233                 ///    No Exception will be generated because the copy won't run because the evidence list is empty
234                 /// </summary>
235                 [Test]
236                 public void CopyToNoException() 
237                 {
238                         Evidence evidence = new Evidence ();
239                         evidence.CopyTo (null, 100);
240                 }
241
242                 [Test]
243                 [ExpectedException (typeof (ArgumentOutOfRangeException))]
244                 public void ArgOutOfRangeCopyToException() 
245                 {
246                         Evidence evidence = new Evidence (new object[10], new object[10]);
247                         evidence.CopyTo (new object[10], -100);
248                 }
249
250                 /// <summary>
251                 ///    No Exception will be generated because the copy won't run because the evidence list is empty
252                 /// </summary>
253                 [Test]
254                 public void ArgOutOfRangeCopyToNoException() 
255                 {
256                         Evidence evidence = new Evidence ();
257                         evidence.CopyTo (new object[10], -100);
258                 }
259
260                 [Test]
261                 public void BadMerge ()
262                 {
263                         Evidence evidence = new Evidence (null, null);
264                         Evidence evidence2 = new Evidence ();
265                         evidence2.Merge (evidence);
266                         AssertEquals ("Count", evidence.Count, evidence2.Count);
267                 }
268
269                 [Test]
270                 public void Merge ()
271                 {
272                         Evidence evidence = new Evidence (new object[10], new object[10]);
273                         Evidence evidence2 = new Evidence ();
274                         evidence2.Merge (evidence);
275                         AssertEquals ("Count", evidence.Count, evidence2.Count);
276                 }
277
278                 [Test]
279                 public void Merge_Null ()
280                 {
281                         Evidence evidence = new Evidence ();
282                         evidence.Merge (null);
283                         // no exception!
284                         AssertEquals ("Count", 0, evidence.Count);
285                 }
286
287                 [Test]
288                 public void DefaultProperties () 
289                 {
290                         Evidence e = new Evidence ();
291                         AssertEquals ("Count", 0, e.Count);
292                         Assert ("IsReadOnly", !e.IsReadOnly);
293 #if NET_2_0
294                         Assert ("IsSynchronized", !e.IsSynchronized);
295 #else
296                         // LAMESPEC: Always TRUE (not FALSE)
297                         Assert ("IsSynchronized", e.IsSynchronized);
298 #endif
299                         Assert ("Locked", !e.Locked);
300                         AssertNotNull ("SyncRoot", e.SyncRoot);
301                 }
302
303 #if NET_2_0
304                 [Test]
305                 public void Equals_GetHashCode () 
306                 {
307                         Evidence e1 = new Evidence ();
308                         Evidence e2 = new Evidence ();
309                         AssertEquals ("GetHashCode-1", e1.GetHashCode (), e2.GetHashCode ());
310                         Assert ("e1.Equals(e2)", e1.Equals (e2));
311                         e1.AddAssembly (String.Empty);
312                         e2.AddAssembly (String.Empty);
313                         AssertEquals ("GetHashCode-2", e1.GetHashCode (), e2.GetHashCode ());
314                         e1.AddHost (String.Empty);
315                         e2.AddHost (String.Empty);
316                         AssertEquals ("GetHashCode-3", e1.GetHashCode (), e2.GetHashCode ());
317                         Assert ("e2.Equals(e1)", e2.Equals (e1));
318                 }
319
320                 [Test]
321                 public void Clear () 
322                 {
323                         Evidence e = new Evidence ();
324                         AssertEquals ("Count-Empty", 0, e.Count);
325                         e.AddAssembly (new object ());
326                         AssertEquals ("Count+Assembly", 1, e.Count);
327                         e.AddHost (new object ());
328                         AssertEquals ("Count+Host", 2, e.Count);
329                         e.Clear ();
330                         AssertEquals ("Count-Cleared", 0, e.Count);
331                 }
332
333                 [Category ("NotWorking")]
334                 [Test]
335                 public void RemoveType ()
336                 {
337                         Evidence e = new Evidence ();
338                         AssertEquals ("Count-Empty", 0, e.Count);
339                         e.AddAssembly (new object ());
340                         e.AddHost (new object ());
341                         AssertEquals ("Count", 2, e.Count);
342                         e.RemoveType (typeof (object));
343                         AssertEquals ("Count-RemoveType(object)", 0, e.Count);
344                 }
345 #else
346                 [Test]
347                 public void Equals_GetHashCode () 
348                 {
349                         Evidence e1 = new Evidence ();
350                         Evidence e2 = new Evidence ();
351                         Assert ("GetHashCode", e1.GetHashCode () != e2.GetHashCode ());
352                         Assert ("!e1.Equals(e2)", !e1.Equals (e2));
353                         Assert ("!e2.Equals(e1)", !e2.Equals (e1));
354                 }
355 #endif\r
356                 [Test]\r
357                 public void AppDomain_NoPermissionRequestEvidence ()\r
358                 {\r
359                         // PermissionRequestEvidence is only used druing policy resolution\r
360                         // and can't be accessed using the Evidence property\r
361                         Evidence e = AppDomain.CurrentDomain.Evidence;\r
362                         foreach (object o in e) {\r
363                                 if (o is PermissionRequestEvidence)\r
364                                         Fail ("Found PermissionRequestEvidence in AppDomain.CurrentDomain.Evidence");\r
365                         }\r
366                 }\r
367 \r
368                 [Test]\r
369                 public void Assembly_NoPermissionRequestEvidence ()\r
370                 {\r
371                         // PermissionRequestEvidence is only used druing policy resolution\r
372                         // and can't be accessed using the Evidence property\r
373                         Evidence e = Assembly.GetExecutingAssembly ().Evidence;\r
374                         foreach (object o in e) {\r
375                                 if (o is PermissionRequestEvidence)\r
376                                         Fail ("Found PermissionRequestEvidence in Assembly.GetExecutingAssembly.Evidence");\r
377                         }\r
378                 }\r
379         }
380 }