2 // MonoTests.System.Security.Policy.EvidenceTest
5 // Jackson Harper (Jackson@LatitudeGeo.com)
6 // Sebastien Pouliot <sebastien@ximian.com>
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:
20 // The above copyright notice and this permission notice shall be
21 // included in all copies or substantial portions of the Software.
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.
33 using System.Collections;
\r
34 using System.Reflection;
35 using System.Security.Policy;
36 using NUnit.Framework;
38 namespace MonoTests.System.Security.Policy {
41 public class EvidenceTest : Assertion {
44 public void DefaultConstructor ()
46 Evidence evidence = new Evidence ();
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);
58 public void MultipleConstructor ()
60 object[] hostarray = new object[10];
61 object[] assemarray = new object[10];
62 Evidence evidence = new Evidence ( hostarray, assemarray );
64 AssertEquals ( "Count of multiple arg constructor should equal 20", evidence.Count, 20 );
68 public void CopyConstructor ()
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);
75 AssertEquals("Copy constructor counts do not match", evidence1.Count, evidence2.Count);
79 public void Constructor_Null ()
81 Evidence e = new Evidence (null);
82 AssertEquals ("Count-Empty", 0, e.Count);
86 public void Constructor_NullNull ()
88 Evidence e = new Evidence (null, null);
89 AssertEquals ("Count-Empty", 0, e.Count);
93 public void AddAssembly ()
95 Evidence evidence = new Evidence ();
96 object[] comparray = new object[100];
99 for (int i=0; i<100; i++) {
100 obj = String.Format ("asmb-{0}", i+1);
102 evidence.AddAssembly (obj);
103 AssertEquals (evidence.Count, i+1);
107 foreach (object compobj in evidence) {
108 AssertEquals ("Comparison object does not equal evidence assembly object",
109 comparray[index++], compobj);
114 public void AddHost ()
116 Evidence evidence = new Evidence ();
117 object[] comparray = new object[100];
120 for (int i=0; i<100; i++) {
121 obj = String.Format ("asmb-{0}", i+1);
123 evidence.AddAssembly ( obj );
124 AssertEquals (evidence.Count, i+1);
128 foreach (object compobj in evidence) {
129 AssertEquals ("Comparison object does not equal evidence host object",
130 comparray[index++], compobj);
135 public void MultiArgConstructorForEach ()
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);
142 compare.AddRange (hostarray);
143 compare.AddRange (asmbarray);
146 foreach (object obj in evidence) {
147 AssertEquals (obj, compare[i++]);
152 public void EnumeratorReset ()
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);
162 IEnumerator enumerator = evidence.GetEnumerator ();
163 while (enumerator.MoveNext ()) {
164 AssertEquals (enumerator.Current, compare[i++]);
169 while (enumerator.MoveNext ()) {
170 AssertEquals (enumerator.Current, compare[i++]);
175 public void GetHostEnumerator ()
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 ();
182 while (enumerator.MoveNext ()) {
183 AssertEquals (enumerator.Current, hostarray[i++]);
188 public void GetHostAssemblyEnumerator ()
190 object[] hostarray = { "host-1", "host-2", "host-3", "host-4" };
191 object[] asmbarray = { "asmb-1", "asmb-2", "asmb-3", "asmb-4" };
193 IEnumerator enumerator;
196 evidence = new Evidence (hostarray, asmbarray);
197 enumerator = evidence.GetAssemblyEnumerator ();
200 while (enumerator.MoveNext()) {
201 AssertEquals (enumerator.Current, asmbarray[i++]);
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);
213 for( int i=0; i<100; i++ ) {
215 evidence.AddHost (String.Format ("host-{0}", i + 5) );
217 evidence.AddAssembly (String.Format ("asmb-{0}", i + 5));
219 AssertEquals (evidence.Count, 9 + i);
224 [ExpectedException (typeof (ArgumentNullException))]
225 public void NullCopyToException()
227 Evidence evidence = new Evidence ();
228 evidence.AddHost ("host-1");
229 evidence.CopyTo (null, 100);
233 /// No Exception will be generated because the copy won't run because the evidence list is empty
236 public void CopyToNoException()
238 Evidence evidence = new Evidence ();
239 evidence.CopyTo (null, 100);
243 [ExpectedException (typeof (ArgumentOutOfRangeException))]
244 public void ArgOutOfRangeCopyToException()
246 Evidence evidence = new Evidence (new object[10], new object[10]);
247 evidence.CopyTo (new object[10], -100);
251 /// No Exception will be generated because the copy won't run because the evidence list is empty
254 public void ArgOutOfRangeCopyToNoException()
256 Evidence evidence = new Evidence ();
257 evidence.CopyTo (new object[10], -100);
261 public void BadMerge ()
263 Evidence evidence = new Evidence (null, null);
264 Evidence evidence2 = new Evidence ();
265 evidence2.Merge (evidence);
266 AssertEquals ("Count", evidence.Count, evidence2.Count);
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);
279 public void Merge_Null ()
281 Evidence evidence = new Evidence ();
282 evidence.Merge (null);
284 AssertEquals ("Count", 0, evidence.Count);
288 public void DefaultProperties ()
290 Evidence e = new Evidence ();
291 AssertEquals ("Count", 0, e.Count);
292 Assert ("IsReadOnly", !e.IsReadOnly);
294 Assert ("IsSynchronized", !e.IsSynchronized);
296 // LAMESPEC: Always TRUE (not FALSE)
297 Assert ("IsSynchronized", e.IsSynchronized);
299 Assert ("Locked", !e.Locked);
300 AssertNotNull ("SyncRoot", e.SyncRoot);
305 public void Equals_GetHashCode ()
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));
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);
330 AssertEquals ("Count-Cleared", 0, e.Count);
333 [Category ("NotWorking")]
335 public void RemoveType ()
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);
347 public void Equals_GetHashCode ()
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));
357 public void AppDomain_NoPermissionRequestEvidence ()
\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
369 public void Assembly_NoPermissionRequestEvidence ()
\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