2010-04-15 Jb Evain <jbevain@novell.com>
[mcs.git] / class / corlib / Test / System.Security.Policy / EvidenceTest.cs
blob0134860b90aef3439607a1bdb347d8c1c662cc40
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)
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.
32 using System;
33 using System.Collections;
34 using System.Reflection;
35 using System.Security.Policy;
36 using NUnit.Framework;
38 namespace MonoTests.System.Security.Policy {
40 [TestFixture]
41 public class EvidenceTest {
43 [Test]
44 public void DefaultConstructor ()
46 Evidence evidence = new Evidence ();
48 Assert.AreEqual (evidence.Count, 0, "Default constructor count should be zero");
49 Assert.AreEqual (evidence.GetHostEnumerator().MoveNext(), false,
50 "Default constructor host enumerator MoveNext() should be false");
52 Assert.AreEqual (evidence.GetAssemblyEnumerator().MoveNext(), false,
53 "Default constructor assembly enumerator MoveNext() should be false");
55 Assert.AreEqual (evidence.GetEnumerator().MoveNext(), false,
56 "Default constructor enumerator MoveNext() should be false");
59 [Test]
60 public void MultipleConstructor ()
62 object[] hostarray = new object[10];
63 object[] assemarray = new object[10];
64 Evidence evidence = new Evidence ( hostarray, assemarray );
66 Assert.AreEqual (evidence.Count, 20,
67 "Count of multiple arg constructor should equal 20");
70 [Test]
71 public void CopyConstructor ()
73 object[] hostlist = { "host-1", "host-2", "host-3", "host-4" };
74 object[] asmblist = { "asmb-1", "asmb-2", "asmb-3", "asmb-4" };
75 Evidence evidence1 = new Evidence (hostlist, asmblist);
76 Evidence evidence2 = new Evidence (evidence1);
78 Assert.AreEqual(evidence1.Count, evidence2.Count, "Copy constructor counts do not match");
81 [Test]
82 public void Constructor_Null ()
84 Evidence e = new Evidence (null);
85 Assert.AreEqual (0, e.Count, "Count-Empty");
88 [Test]
89 public void Constructor_NullNull ()
91 Evidence e = new Evidence (null, null);
92 Assert.AreEqual (0, e.Count, "Count-Empty");
95 [Test]
96 public void AddAssembly ()
98 Evidence evidence = new Evidence ();
99 object[] comparray = new object[100];
100 string obj;
102 for (int i=0; i<100; i++) {
103 obj = String.Format ("asmb-{0}", i+1);
104 comparray[i] = obj;
105 evidence.AddAssembly (obj);
106 Assert.AreEqual (evidence.Count, i+1);
109 int index = 0;
110 foreach (object compobj in evidence) {
111 Assert.AreEqual (comparray[index++], compobj, "Comparison object does not equal evidence assembly object");
115 [Test]
116 public void AddHost ()
118 Evidence evidence = new Evidence ();
119 object[] comparray = new object[100];
120 string obj;
122 for (int i=0; i<100; i++) {
123 obj = String.Format ("asmb-{0}", i+1);
124 comparray[i] = obj;
125 evidence.AddAssembly ( obj );
126 Assert.AreEqual (evidence.Count, i+1);
129 int index = 0;
130 foreach (object compobj in evidence) {
131 Assert.AreEqual (comparray[index++], compobj, "Comparison object does not equal evidence host object");
136 [Test]
137 public void MultiArgConstructorForEach ()
139 object[] hostarray = { "host-1", "host-2", "host-3", "host-4" };
140 object[] asmbarray = { "asmb-1", "asmb-2", "asmb-3", "asmb-4" };
141 ArrayList compare = new ArrayList ();
142 Evidence evidence = new Evidence (hostarray, asmbarray);
144 compare.AddRange (hostarray);
145 compare.AddRange (asmbarray);
147 int i = 0;
148 foreach (object obj in evidence) {
149 Assert.AreEqual (obj, compare[i++]);
153 [Test]
154 public void EnumeratorReset ()
156 object[] hostarray = { "host-1", "host-2", "host-3", "host-4" };
157 object[] asmbarray = { "asmb-1", "asmb-2", "asmb-3", "asmb-4" };
158 ArrayList compare = new ArrayList ();
159 Evidence evidence = new Evidence (hostarray, asmbarray);
160 compare.AddRange (hostarray);
161 compare.AddRange (asmbarray);
163 int i = 0;
164 IEnumerator enumerator = evidence.GetEnumerator ();
165 while (enumerator.MoveNext ()) {
166 Assert.AreEqual (enumerator.Current, compare[i++]);
169 enumerator.Reset ();
170 i = 0;
171 while (enumerator.MoveNext ()) {
172 Assert.AreEqual (enumerator.Current, compare[i++]);
176 [Test]
177 public void GetHostEnumerator ()
179 object[] hostarray = { "host-1", "host-2", "host-3", "host-4" };
180 object[] asmbarray = { "asmb-1", "asmb-2" };
181 Evidence evidence = new Evidence (hostarray, asmbarray);
182 IEnumerator enumerator = evidence.GetHostEnumerator ();
183 int i = 0;
184 while (enumerator.MoveNext ()) {
185 Assert.AreEqual (enumerator.Current, hostarray[i++]);
189 [Test]
190 public void GetHostAssemblyEnumerator ()
192 object[] hostarray = { "host-1", "host-2", "host-3", "host-4" };
193 object[] asmbarray = { "asmb-1", "asmb-2", "asmb-3", "asmb-4" };
194 Evidence evidence;
195 IEnumerator enumerator;
196 int i;
198 evidence = new Evidence (hostarray, asmbarray);
199 enumerator = evidence.GetAssemblyEnumerator ();
201 i = 0;
202 while (enumerator.MoveNext()) {
203 Assert.AreEqual (enumerator.Current, asmbarray[i++]);
207 [Test]
208 public void Count ()
210 object[] hostarray = { "host-1", "host-2", "host-3", "host-4" };
211 object[] asmbarray = { "asmb-1", "asmb-2", "asmb-3", "asmb-4" };
212 Evidence evidence = new Evidence (hostarray, asmbarray);
213 Assert.AreEqual (evidence.Count, 8);
215 for( int i=0; i<100; i++ ) {
216 if ( 0 == i%2 ) {
217 evidence.AddHost (String.Format ("host-{0}", i + 5) );
218 } else {
219 evidence.AddAssembly (String.Format ("asmb-{0}", i + 5));
221 Assert.AreEqual (evidence.Count, 9 + i);
225 [Test]
226 [ExpectedException (typeof (ArgumentNullException))]
227 public void NullCopyToException()
229 Evidence evidence = new Evidence ();
230 evidence.AddHost ("host-1");
231 evidence.CopyTo (null, 100);
234 /// <summary>
235 /// No Exception will be generated because the copy won't run because the evidence list is empty
236 /// </summary>
237 [Test]
238 public void CopyToNoException()
240 Evidence evidence = new Evidence ();
241 evidence.CopyTo (null, 100);
244 [Test]
245 [ExpectedException (typeof (ArgumentOutOfRangeException))]
246 public void ArgOutOfRangeCopyToException()
248 Evidence evidence = new Evidence (new object[10], new object[10]);
249 evidence.CopyTo (new object[10], -100);
252 /// <summary>
253 /// No Exception will be generated because the copy won't run because the evidence list is empty
254 /// </summary>
255 [Test]
256 public void ArgOutOfRangeCopyToNoException()
258 Evidence evidence = new Evidence ();
259 evidence.CopyTo (new object[10], -100);
262 [Test]
263 public void BadMerge ()
265 Evidence evidence = new Evidence (null, null);
266 Evidence evidence2 = new Evidence ();
267 evidence2.Merge (evidence);
268 Assert.AreEqual (evidence.Count, evidence2.Count, "Count");
271 [Test]
272 public void Merge ()
274 Evidence evidence = new Evidence (new object[10], new object[10]);
275 Evidence evidence2 = new Evidence ();
276 evidence2.Merge (evidence);
277 Assert.AreEqual (evidence.Count, evidence2.Count, "Count");
280 [Test]
281 public void Merge_Null ()
283 Evidence evidence = new Evidence ();
284 evidence.Merge (null);
285 // no exception!
286 Assert.AreEqual (0, evidence.Count, "Count");
289 [Test]
290 public void DefaultProperties ()
292 Evidence e = new Evidence ();
293 Assert.AreEqual (0, e.Count, "Count");
294 Assert.IsTrue (!e.IsReadOnly, "IsReadOnly");
295 #if NET_2_0
296 Assert.IsTrue (!e.IsSynchronized, "IsSynchronized");
297 #else
298 // LAMESPEC: Always TRUE (not FALSE)
299 Assert.IsTrue (e.IsSynchronized, "IsSynchronized");
300 #endif
301 Assert.IsTrue (!e.Locked, "Locked");
302 Assert.IsNotNull (e.SyncRoot, "SyncRoot");
305 #if NET_2_0
306 [Test]
307 public void Equals_GetHashCode ()
309 Evidence e1 = new Evidence ();
310 Evidence e2 = new Evidence ();
311 Assert.AreEqual (e1.GetHashCode (), e2.GetHashCode (), "GetHashCode-1");
312 Assert.IsTrue (e1.Equals (e2), "e1.Equals(e2)");
313 e1.AddAssembly (String.Empty);
314 e2.AddAssembly (String.Empty);
315 Assert.AreEqual (e1.GetHashCode (), e2.GetHashCode (), "GetHashCode-2");
316 e1.AddHost (String.Empty);
317 e2.AddHost (String.Empty);
318 Assert.AreEqual (e1.GetHashCode (), e2.GetHashCode (), "GetHashCode-3");
319 Assert.IsTrue (e2.Equals (e1), "e2.Equals(e1)");
322 [Test]
323 public void Clear ()
325 Evidence e = new Evidence ();
326 Assert.AreEqual (0, e.Count, "Count-Empty");
327 e.AddAssembly (new object ());
328 Assert.AreEqual (1, e.Count, "Count+Assembly");
329 e.AddHost (new object ());
330 Assert.AreEqual (2, e.Count, "Count+Host");
331 e.Clear ();
332 Assert.AreEqual (0, e.Count, "Count-Cleared");
335 [Category ("NotWorking")]
336 [Test]
337 public void RemoveType ()
339 Evidence e = new Evidence ();
340 Assert.AreEqual (0, e.Count, "Count-Empty");
341 e.AddAssembly (new object ());
342 e.AddHost (new object ());
343 Assert.AreEqual (2, e.Count, "Count");
344 e.RemoveType (typeof (object));
345 Assert.AreEqual (0, e.Count, "Count-RemoveType(object)");
347 #else
348 [Test]
349 public void Equals_GetHashCode ()
351 Evidence e1 = new Evidence ();
352 Evidence e2 = new Evidence ();
353 Assert.IsTrue (e1.GetHashCode () != e2.GetHashCode (), "GetHashCode");
354 Assert.IsTrue (!e1.Equals (e2), "!e1.Equals(e2)");
355 Assert.IsTrue (!e2.Equals (e1), "!e2.Equals(e1)");
357 #endif
358 [Test]
359 public void AppDomain_NoPermissionRequestEvidence ()
361 // PermissionRequestEvidence is only used druing policy resolution
362 // and can't be accessed using the Evidence property
363 Evidence e = AppDomain.CurrentDomain.Evidence;
364 foreach (object o in e) {
365 if (o is PermissionRequestEvidence)
366 Assert.Fail ("Found PermissionRequestEvidence in AppDomain.CurrentDomain.Evidence");
370 [Test]
371 public void Assembly_NoPermissionRequestEvidence ()
373 // PermissionRequestEvidence is only used druing policy resolution
374 // and can't be accessed using the Evidence property
375 Evidence e = Assembly.GetExecutingAssembly ().Evidence;
376 foreach (object o in e) {
377 if (o is PermissionRequestEvidence)
378 Assert.Fail ("Found PermissionRequestEvidence in Assembly.GetExecutingAssembly.Evidence");