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
;
34 using System
.Reflection
;
35 using System
.Security
.Policy
;
36 using NUnit
.Framework
;
38 namespace MonoTests
.System
.Security
.Policy
{
41 public class EvidenceTest
{
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");
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");
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");
82 public void Constructor_Null ()
84 Evidence e
= new Evidence (null);
85 Assert
.AreEqual (0, e
.Count
, "Count-Empty");
89 public void Constructor_NullNull ()
91 Evidence e
= new Evidence (null, null);
92 Assert
.AreEqual (0, e
.Count
, "Count-Empty");
96 public void AddAssembly ()
98 Evidence evidence
= new Evidence ();
99 object[] comparray
= new object[100];
102 for (int i
=0; i
<100; i
++) {
103 obj
= String
.Format ("asmb-{0}", i
+1);
105 evidence
.AddAssembly (obj
);
106 Assert
.AreEqual (evidence
.Count
, i
+1);
110 foreach (object compobj
in evidence
) {
111 Assert
.AreEqual (comparray
[index
++], compobj
, "Comparison object does not equal evidence assembly object");
116 public void AddHost ()
118 Evidence evidence
= new Evidence ();
119 object[] comparray
= new object[100];
122 for (int i
=0; i
<100; i
++) {
123 obj
= String
.Format ("asmb-{0}", i
+1);
125 evidence
.AddAssembly ( obj
);
126 Assert
.AreEqual (evidence
.Count
, i
+1);
130 foreach (object compobj
in evidence
) {
131 Assert
.AreEqual (comparray
[index
++], compobj
, "Comparison object does not equal evidence host object");
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
);
148 foreach (object obj
in evidence
) {
149 Assert
.AreEqual (obj
, compare
[i
++]);
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
);
164 IEnumerator enumerator
= evidence
.GetEnumerator ();
165 while (enumerator
.MoveNext ()) {
166 Assert
.AreEqual (enumerator
.Current
, compare
[i
++]);
171 while (enumerator
.MoveNext ()) {
172 Assert
.AreEqual (enumerator
.Current
, compare
[i
++]);
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 ();
184 while (enumerator
.MoveNext ()) {
185 Assert
.AreEqual (enumerator
.Current
, hostarray
[i
++]);
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" }
;
195 IEnumerator enumerator
;
198 evidence
= new Evidence (hostarray
, asmbarray
);
199 enumerator
= evidence
.GetAssemblyEnumerator ();
202 while (enumerator
.MoveNext()) {
203 Assert
.AreEqual (enumerator
.Current
, asmbarray
[i
++]);
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
++ ) {
217 evidence
.AddHost (String
.Format ("host-{0}", i
+ 5) );
219 evidence
.AddAssembly (String
.Format ("asmb-{0}", i
+ 5));
221 Assert
.AreEqual (evidence
.Count
, 9 + i
);
226 [ExpectedException (typeof (ArgumentNullException
))]
227 public void NullCopyToException()
229 Evidence evidence
= new Evidence ();
230 evidence
.AddHost ("host-1");
231 evidence
.CopyTo (null, 100);
235 /// No Exception will be generated because the copy won't run because the evidence list is empty
238 public void CopyToNoException()
240 Evidence evidence
= new Evidence ();
241 evidence
.CopyTo (null, 100);
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);
253 /// No Exception will be generated because the copy won't run because the evidence list is empty
256 public void ArgOutOfRangeCopyToNoException()
258 Evidence evidence
= new Evidence ();
259 evidence
.CopyTo (new object[10], -100);
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");
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");
281 public void Merge_Null ()
283 Evidence evidence
= new Evidence ();
284 evidence
.Merge (null);
286 Assert
.AreEqual (0, evidence
.Count
, "Count");
290 public void DefaultProperties ()
292 Evidence e
= new Evidence ();
293 Assert
.AreEqual (0, e
.Count
, "Count");
294 Assert
.IsTrue (!e
.IsReadOnly
, "IsReadOnly");
296 Assert
.IsTrue (!e
.IsSynchronized
, "IsSynchronized");
298 // LAMESPEC: Always TRUE (not FALSE)
299 Assert
.IsTrue (e
.IsSynchronized
, "IsSynchronized");
301 Assert
.IsTrue (!e
.Locked
, "Locked");
302 Assert
.IsNotNull (e
.SyncRoot
, "SyncRoot");
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)");
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");
332 Assert
.AreEqual (0, e
.Count
, "Count-Cleared");
335 [Category ("NotWorking")]
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)");
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)");
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");
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");