Merge pull request #409 from Alkarex/patch-1
[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;
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  {
42                 
43                 [Test]
44                 public void DefaultConstructor ()
45                 {
46                         Evidence evidence = new Evidence ();
47                         
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");
51                                 
52                         Assert.AreEqual (evidence.GetAssemblyEnumerator().MoveNext(), false, 
53                                                   "Default constructor assembly enumerator MoveNext() should be false");
54                                 
55                         Assert.AreEqual (evidence.GetEnumerator().MoveNext(), false,
56                                                   "Default constructor enumerator MoveNext() should be false");
57                 }
58
59                 [Test]
60                 public void MultipleConstructor ()
61                 {
62                         object[] hostarray = new object[10];
63                         object[] assemarray = new object[10];
64                         Evidence evidence = new Evidence ( hostarray, assemarray );
65
66                         Assert.AreEqual (evidence.Count, 20,
67                                                   "Count of multiple arg constructor should equal 20");
68                 }
69
70                 [Test]
71                 public void CopyConstructor ()
72                 {
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);
77                         
78                         Assert.AreEqual(evidence1.Count, evidence2.Count, "Copy constructor counts do not match");
79                 }
80
81                 [Test]
82                 public void Constructor_Null ()
83                 {
84                         Evidence e = new Evidence (null);
85                         Assert.AreEqual (0, e.Count, "Count-Empty");
86                 }
87
88                 [Test]
89                 public void Constructor_NullNull ()
90                 {
91                         Evidence e = new Evidence (null, null);
92                         Assert.AreEqual (0, e.Count, "Count-Empty");
93                 }
94
95                 [Test]
96                 public void AddAssembly ()
97                 {
98                         Evidence evidence = new Evidence ();
99                         object[] comparray = new object[100];
100                         string obj;
101
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);
107                         }
108                         
109                         int index = 0;
110                         foreach (object compobj in evidence) {
111                                 Assert.AreEqual (comparray[index++], compobj, "Comparison object does not equal evidence assembly object");
112                         }
113                 }
114
115                 [Test]
116                 public void AddHost ()
117                 {
118                         Evidence evidence = new Evidence ();
119                         object[] comparray = new object[100];
120                         string obj;
121
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);
127                         }
128
129                         int index = 0;
130                         foreach (object compobj in evidence) {
131                                 Assert.AreEqual (comparray[index++], compobj, "Comparison object does not equal evidence host object");
132                                         
133                         }
134                 }
135
136                 [Test]
137                 public void MultiArgConstructorForEach ()
138                 {
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);
143                 
144                         compare.AddRange (hostarray);
145                         compare.AddRange (asmbarray);
146         
147                         int i = 0;              
148                         foreach (object obj in evidence) {
149                                 Assert.AreEqual (obj, compare[i++]);
150                         }
151                 }
152
153                 [Test]
154                 public void EnumeratorReset ()
155                 {
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);
162
163                         int i = 0;
164                         IEnumerator enumerator = evidence.GetEnumerator ();     
165                         while (enumerator.MoveNext ()) {
166                                 Assert.AreEqual (enumerator.Current, compare[i++]);
167                         }
168
169                         enumerator.Reset ();
170                         i = 0;
171                         while (enumerator.MoveNext ()) {
172                                 Assert.AreEqual (enumerator.Current, compare[i++]);
173                         }
174                 }
175
176                 [Test]
177                 public void GetHostEnumerator ()
178                 {
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++]);
186                         }
187                 }
188
189                 [Test]
190                 public void GetHostAssemblyEnumerator ()
191                 {
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;
197
198                         evidence = new Evidence (hostarray, asmbarray);
199                         enumerator = evidence.GetAssemblyEnumerator ();
200                         
201                         i = 0;
202                         while (enumerator.MoveNext()) {
203                                 Assert.AreEqual (enumerator.Current, asmbarray[i++]);
204                         }
205                 }
206
207                 [Test]
208                 public void Count ()
209                 {
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);
214
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));
220                                 }
221                                 Assert.AreEqual (evidence.Count, 9 + i);
222                         }
223                 }
224
225                 [Test]
226                 [ExpectedException (typeof (ArgumentNullException))]
227                 public void NullCopyToException() 
228                 {
229                         Evidence evidence = new Evidence ();
230                         evidence.AddHost ("host-1");
231                         evidence.CopyTo (null, 100);
232                 }
233
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() 
239                 {
240                         Evidence evidence = new Evidence ();
241                         evidence.CopyTo (null, 100);
242                 }
243
244                 [Test]
245                 [ExpectedException (typeof (ArgumentOutOfRangeException))]
246                 public void ArgOutOfRangeCopyToException() 
247                 {
248                         Evidence evidence = new Evidence (new object[10], new object[10]);
249                         evidence.CopyTo (new object[10], -100);
250                 }
251
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() 
257                 {
258                         Evidence evidence = new Evidence ();
259                         evidence.CopyTo (new object[10], -100);
260                 }
261
262                 [Test]
263                 public void BadMerge ()
264                 {
265                         Evidence evidence = new Evidence (null, null);
266                         Evidence evidence2 = new Evidence ();
267                         evidence2.Merge (evidence);
268                         Assert.AreEqual (evidence.Count, evidence2.Count, "Count");
269                 }
270
271                 [Test]
272                 public void Merge ()
273                 {
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");
278                 }
279
280                 [Test]
281                 public void Merge_Null ()
282                 {
283                         Evidence evidence = new Evidence ();
284                         evidence.Merge (null);
285                         // no exception!
286                         Assert.AreEqual (0, evidence.Count, "Count");
287                 }
288
289                 [Test]
290                 public void DefaultProperties () 
291                 {
292                         Evidence e = new Evidence ();
293                         Assert.AreEqual (0, e.Count, "Count");
294                         Assert.IsTrue (!e.IsReadOnly, "IsReadOnly");
295                         Assert.IsTrue (!e.IsSynchronized, "IsSynchronized");
296                         Assert.IsTrue (!e.Locked, "Locked");
297                         Assert.IsNotNull (e.SyncRoot, "SyncRoot");
298                 }
299
300 #if !NET_4_0
301                 [Test]
302                 public void Equals_GetHashCode () 
303                 {
304                         Evidence e1 = new Evidence ();
305                         Evidence e2 = new Evidence ();
306                         Assert.AreEqual (e1.GetHashCode (), e2.GetHashCode (), "GetHashCode-1");
307                         Assert.IsTrue (e1.Equals (e2), "e1.Equals(e2)");
308                         e1.AddAssembly (String.Empty);
309                         e2.AddAssembly (String.Empty);
310                         Assert.AreEqual (e1.GetHashCode (), e2.GetHashCode (), "GetHashCode-2");
311                         e1.AddHost (String.Empty);
312                         e2.AddHost (String.Empty);
313                         Assert.AreEqual (e1.GetHashCode (), e2.GetHashCode (), "GetHashCode-3");
314                         Assert.IsTrue (e2.Equals (e1), "e2.Equals(e1)");
315                 }
316 #endif
317
318                 [Test]
319                 public void Clear () 
320                 {
321                         Evidence e = new Evidence ();
322                         Assert.AreEqual (0, e.Count, "Count-Empty");
323                         e.AddAssembly (new object ());
324                         Assert.AreEqual (1, e.Count, "Count+Assembly");
325                         e.AddHost (new object ());
326                         Assert.AreEqual (2, e.Count, "Count+Host");
327                         e.Clear ();
328                         Assert.AreEqual (0, e.Count, "Count-Cleared");
329                 }
330
331                 [Category ("NotWorking")]
332                 [Test]
333                 public void RemoveType ()
334                 {
335                         Evidence e = new Evidence ();
336                         Assert.AreEqual (0, e.Count, "Count-Empty");
337                         e.AddAssembly (new object ());
338                         e.AddHost (new object ());
339                         Assert.AreEqual (2, e.Count, "Count");
340                         e.RemoveType (typeof (object));
341                         Assert.AreEqual (0, e.Count, "Count-RemoveType(object)");
342                 }
343
344                 [Test]
345                 public void AppDomain_NoPermissionRequestEvidence ()
346                 {
347                         // PermissionRequestEvidence is only used druing policy resolution
348                         // and can't be accessed using the Evidence property
349                         Evidence e = AppDomain.CurrentDomain.Evidence;
350                         foreach (object o in e) {
351                                 if (o is PermissionRequestEvidence)
352                                         Assert.Fail ("Found PermissionRequestEvidence in AppDomain.CurrentDomain.Evidence");
353                         }
354                 }
355
356                 [Test]
357                 public void Assembly_NoPermissionRequestEvidence ()
358                 {
359                         // PermissionRequestEvidence is only used druing policy resolution
360                         // and can't be accessed using the Evidence property
361                         Evidence e = Assembly.GetExecutingAssembly ().Evidence;
362                         foreach (object o in e) {
363                                 if (o is PermissionRequestEvidence)
364                                         Assert.Fail ("Found PermissionRequestEvidence in Assembly.GetExecutingAssembly.Evidence");
365                         }
366                 }
367         }
368 }