2 // EventLogPermissionTest.cs -
3 // NUnit Test Cases for EventLogPermission
6 // Sebastien Pouliot <sebastien@ximian.com>
8 // Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com)
10 // Permission is hereby granted, free of charge, to any person obtaining
11 // a copy of this software and associated documentation files (the
12 // "Software"), to deal in the Software without restriction, including
13 // without limitation the rights to use, copy, modify, merge, publish,
14 // distribute, sublicense, and/or sell copies of the Software, and to
15 // permit persons to whom the Software is furnished to do so, subject to
16 // the following conditions:
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32 using NUnit.Framework;
34 using System.Diagnostics;
35 using System.Security;
36 using System.Security.Permissions;
38 namespace MonoTests.System.Diagnostics {
41 public class EventLogPermissionTest {
43 static EventLogPermissionAccess[] AllAccess = {
44 EventLogPermissionAccess.None,
45 EventLogPermissionAccess.Browse,
46 EventLogPermissionAccess.Instrument,
47 EventLogPermissionAccess.Audit,
48 EventLogPermissionAccess.Write,
49 EventLogPermissionAccess.Administer,
53 public void PermissionState_None ()
55 PermissionState ps = PermissionState.None;
56 EventLogPermission elp = new EventLogPermission (ps);
57 Assert.AreEqual (0, elp.PermissionEntries.Count, "PermissionEntries");
58 Assert.IsFalse (elp.IsUnrestricted (), "IsUnrestricted");
60 SecurityElement se = elp.ToXml ();
61 // only class and version are present
62 Assert.AreEqual (2, se.Attributes.Count, "Xml-Attributes");
63 Assert.IsNull (se.Children, "Xml-Children");
65 EventLogPermission copy = (EventLogPermission)elp.Copy ();
66 Assert.IsFalse (Object.ReferenceEquals (elp, copy), "ReferenceEquals");
67 Assert.AreEqual (elp.PermissionEntries.Count, copy.PermissionEntries.Count, "copy-PermissionEntries");
68 Assert.AreEqual (elp.IsUnrestricted (), copy.IsUnrestricted (), "IsUnrestricted ()");
72 public void PermissionState_Unrestricted ()
74 PermissionState ps = PermissionState.Unrestricted;
75 EventLogPermission elp = new EventLogPermission (ps);
76 Assert.AreEqual (0, elp.PermissionEntries.Count, "PermissionEntries");
77 Assert.IsTrue (elp.IsUnrestricted (), "IsUnrestricted");
79 SecurityElement se = elp.ToXml ();
80 // only class and version are present
81 Assert.AreEqual ("true", se.Attribute ("Unrestricted"), "Xml-Unrestricted");
82 Assert.IsNull (se.Children, "Xml-Children");
84 EventLogPermission copy = (EventLogPermission)elp.Copy ();
85 Assert.IsFalse (Object.ReferenceEquals (elp, copy), "ReferenceEquals");
86 Assert.AreEqual (elp.PermissionEntries.Count, copy.PermissionEntries.Count, "copy-PermissionEntries");
87 Assert.AreEqual (elp.IsUnrestricted (), copy.IsUnrestricted (), "copy-IsUnrestricted ()");
91 [ExpectedException (typeof (ArgumentException))]
92 public void PermissionState_Bad ()
94 PermissionState ps = (PermissionState)77;
95 EventLogPermission elp = new EventLogPermission (ps);
96 Assert.IsFalse (elp.IsUnrestricted (), "IsUnrestricted");
100 [ExpectedException (typeof (ArgumentNullException))]
101 public void Constructor_PermissionEntries_Null ()
103 EventLogPermission elp = new EventLogPermission (null);
107 [ExpectedException (typeof (ArgumentException))]
108 public void Constructor_MachineName_Null ()
110 EventLogPermission elp = new EventLogPermission (EventLogPermissionAccess.None, null);
114 public void EventLogPermissionAccesss_Bad ()
116 EventLogPermissionAccess elpa = (EventLogPermissionAccess)Int32.MinValue;
117 EventLogPermission elp = new EventLogPermission (elpa, "localhost");
118 Assert.AreEqual (1, elp.PermissionEntries.Count, "Count");
119 Assert.AreEqual ((EventLogPermissionAccess)Int32.MinValue, elp.PermissionEntries [0].PermissionAccess, "PermissionAccess");
123 public void PermissionEntries ()
125 EventLogPermissionAccess elpa = EventLogPermissionAccess.None;
126 EventLogPermission elp = new EventLogPermission (elpa, "localhost");
127 EventLogPermissionEntryCollection elpec = elp.PermissionEntries;
128 Assert.AreEqual (1, elpec.Count, "Count==1");
130 EventLogPermissionEntry elpe = new EventLogPermissionEntry (EventLogPermissionAccess.Browse, "*");
131 elp.PermissionEntries.Add (elpe);
132 Assert.AreEqual (2, elpec.Count, "Count==2");
134 // remove (same instance)
135 elp.PermissionEntries.Remove (elpe);
136 Assert.AreEqual (1, elpec.Count, "Count==1 (b)");
138 // remove different instance (doesn't work)
139 elpe = new EventLogPermissionEntry (EventLogPermissionAccess.None, "localhost");
140 Assert.AreEqual (1, elpec.Count, "Count==1");
146 foreach (EventLogPermissionAccess elpa in AllAccess) {
147 EventLogPermission elp = new EventLogPermission (PermissionState.None);
148 EventLogPermissionEntry elpe = new EventLogPermissionEntry (elpa, elpa.ToString ());
149 elp.PermissionEntries.Add (elpe);
150 EventLogPermission copy = (EventLogPermission)elp.Copy ();
151 Assert.AreEqual (1, copy.PermissionEntries.Count, "Count==1");
152 Assert.AreEqual (elpa, elp.PermissionEntries [0].PermissionAccess, elpa.ToString ());
157 public void Intersect_Null ()
159 EventLogPermission elp = new EventLogPermission (PermissionState.None);
160 // No intersection with null
161 Assert.IsNull (elp.Intersect (null), "None N null");
165 public void Intersect_None ()
167 EventLogPermission elp1 = new EventLogPermission (PermissionState.None);
168 EventLogPermission elp2 = new EventLogPermission (PermissionState.None);
170 EventLogPermission result = (EventLogPermission)elp1.Intersect (elp2);
171 Assert.IsNull (result, "Empty N Empty");
173 elp2.PermissionEntries.Add (new EventLogPermissionEntry (EventLogPermissionAccess.None, "localhost"));
174 result = (EventLogPermission)elp1.Intersect (elp2);
175 Assert.IsNull (result, "Empty N Entry");
177 result = (EventLogPermission)elp2.Intersect (elp1);
178 Assert.IsNull (result, "Entry N Empty");
182 public void Intersect_Unrestricted ()
184 // Intersection with unrestricted == Copy
185 // a. source (this) is unrestricted
186 EventLogPermission elp1 = new EventLogPermission (PermissionState.Unrestricted);
187 EventLogPermission elp2 = new EventLogPermission (PermissionState.None);
189 // 1. Unrestricted N None
190 EventLogPermission result = (EventLogPermission)elp1.Intersect (elp2);
191 Assert.IsFalse (result.IsUnrestricted (), "(Unrestricted N None).IsUnrestricted");
192 Assert.AreEqual (0, result.PermissionEntries.Count, "(Unrestricted N None).Count");
194 // 2. None N Unrestricted
195 result = (EventLogPermission)elp2.Intersect (elp1);
196 Assert.IsFalse (result.IsUnrestricted (), "(None N Unrestricted).IsUnrestricted");
197 Assert.AreEqual (0, result.PermissionEntries.Count, "(None N Unrestricted).Count");
199 // 3. Unrestricted N Unrestricted
200 result = (EventLogPermission)elp1.Intersect (elp1);
201 Assert.IsTrue (result.IsUnrestricted (), "(Unrestricted N Unrestricted).IsUnrestricted");
202 Assert.AreEqual (0, result.PermissionEntries.Count, "(Unrestricted N Unrestricted).Count");
204 // 4. Unrestricted N Entry
205 elp2.PermissionEntries.Add (new EventLogPermissionEntry (EventLogPermissionAccess.None, "localhost"));
206 result = (EventLogPermission)elp1.Intersect (elp2);
207 Assert.IsFalse (result.IsUnrestricted (), "(Unrestricted N Entry).IsUnrestricted");
208 Assert.AreEqual (1, result.PermissionEntries.Count, "(Unrestricted N Entry).Count");
210 // 5. Entry N Unrestricted
211 result = (EventLogPermission)elp2.Intersect (elp1);
212 Assert.IsFalse (result.IsUnrestricted (), "(Entry N Unrestricted).IsUnrestricted");
213 Assert.AreEqual (1, result.PermissionEntries.Count, "(Entry N Unrestricted).Count");
215 // 6. Unrestricted N Unrestricted
216 elp1.PermissionEntries.Add (new EventLogPermissionEntry (EventLogPermissionAccess.None, "localhost"));
217 result = (EventLogPermission)elp1.Intersect (elp1);
218 Assert.IsTrue (result.IsUnrestricted (), "(Unrestricted N Unrestricted).IsUnrestricted");
219 Assert.AreEqual (1, result.PermissionEntries.Count, "(Unrestricted N Unrestricted).Count");
223 [ExpectedException (typeof (ArgumentException))]
224 public void Intersect_BadPermission ()
226 EventLogPermission elp1 = new EventLogPermission (PermissionState.Unrestricted);
227 elp1.Intersect (new SecurityPermission (SecurityPermissionFlag.Assertion));
231 public void IsSubset_Null ()
233 EventLogPermission elp = new EventLogPermission (PermissionState.None);
234 Assert.IsTrue (elp.IsSubsetOf (null), "null");
238 public void IsSubset_None ()
240 // IsSubset with none
241 // a. source (this) is none -> target is never a subset
242 // b. destination (target) is none -> target is always a subset
243 EventLogPermission elp1 = new EventLogPermission (PermissionState.None);
244 foreach (EventLogPermissionAccess elpa in AllAccess) {
245 EventLogPermission elp2 = new EventLogPermission (PermissionState.None);
246 elp2.PermissionEntries.Add (new EventLogPermissionEntry (elpa, elpa.ToString ()));
247 Assert.IsTrue (elp1.IsSubsetOf (elp2), "target " + elpa.ToString ());
248 Assert.IsFalse (elp2.IsSubsetOf (elp1), "source " + elpa.ToString ());
253 public void IsSubset_Self ()
255 foreach (EventLogPermissionAccess elpa in AllAccess) {
256 EventLogPermission elp = new EventLogPermission (PermissionState.None);
257 elp.PermissionEntries.Add (new EventLogPermissionEntry (elpa, elpa.ToString ()));
258 Assert.IsTrue (elp.IsSubsetOf (elp), elpa.ToString ());
263 public void IsSubset_Unrestricted ()
265 // IsSubset with unrestricted
266 // a. source (this) is unrestricted -> target is never a subset
267 // b. destination (target) is unrestricted -> source is always a subset
268 EventLogPermission elp1 = new EventLogPermission (PermissionState.Unrestricted);
269 foreach (EventLogPermissionAccess elpa in AllAccess) {
270 EventLogPermission elp2 = new EventLogPermission (PermissionState.None);
271 elp2.PermissionEntries.Add (new EventLogPermissionEntry (elpa, elpa.ToString ()));
272 Assert.IsFalse (elp1.IsSubsetOf (elp2), "target " + elpa.ToString ());
273 Assert.IsTrue (elp2.IsSubsetOf (elp1), "source " + elpa.ToString ());
275 Assert.IsTrue (elp1.IsSubsetOf (elp1), "Unrestricted.IsSubsetOf(Unrestricted)");
279 // "special" behavior inherited from ResourceBasePermission
280 // [ExpectedException (typeof (ArgumentException))]
281 public void IsSubsetOf_BadPermission ()
283 EventLogPermission elp1 = new EventLogPermission (PermissionState.Unrestricted);
284 Assert.IsFalse (elp1.IsSubsetOf (new SecurityPermission (SecurityPermissionFlag.Assertion)));
288 public void Union_Null ()
290 EventLogPermission elp = new EventLogPermission (PermissionState.None);
291 elp.PermissionEntries.Add (new EventLogPermissionEntry (EventLogPermissionAccess.None, "localhost"));
292 // Union with null is a simple copy
293 EventLogPermission union = (EventLogPermission)elp.Union (null);
294 Assert.IsNotNull (elp.PermissionEntries.Count, "Count");
298 public void Union_None ()
300 EventLogPermission elp1 = new EventLogPermission (PermissionState.None);
301 foreach (EventLogPermissionAccess elpa in AllAccess) {
302 EventLogPermission elp2 = new EventLogPermission (PermissionState.None);
303 elp2.PermissionEntries.Add (new EventLogPermissionEntry (elpa, elpa.ToString ()));
304 EventLogPermission union = (EventLogPermission)elp1.Union (elp2);
305 Assert.IsFalse (union.IsUnrestricted (), "target.IsUnrestricted " + elpa.ToString ());
306 Assert.AreEqual (1, union.PermissionEntries.Count, "target.Count " + elpa.ToString ());
308 union = (EventLogPermission)elp2.Union (elp1);
309 Assert.IsFalse (union.IsUnrestricted (), "source.IsUnrestricted " + elpa.ToString ());
310 Assert.AreEqual (1, union.PermissionEntries.Count, "source.Count " + elpa.ToString ());
315 public void Union_Self ()
317 foreach (EventLogPermissionAccess elpa in AllAccess)
319 EventLogPermission elp = new EventLogPermission (PermissionState.None);
320 elp.PermissionEntries.Add (new EventLogPermissionEntry (elpa, elpa.ToString ()));
321 EventLogPermission union = (EventLogPermission)elp.Union (elp);
322 Assert.IsFalse (union.IsUnrestricted (), "IsUnrestricted " + elpa.ToString ());
323 Assert.AreEqual (1, union.PermissionEntries.Count, "Count " + elpa.ToString ());
328 public void Union_Unrestricted ()
330 // Union with unrestricted is unrestricted
331 EventLogPermission elp1 = new EventLogPermission (PermissionState.Unrestricted);
332 foreach (EventLogPermissionAccess elpa in AllAccess) {
333 EventLogPermission elp2 = new EventLogPermission (PermissionState.None);
334 elp2.PermissionEntries.Add (new EventLogPermissionEntry (elpa, elpa.ToString ()));
335 EventLogPermission union = (EventLogPermission)elp1.Union (elp2);
336 Assert.IsTrue (union.IsUnrestricted (), "target.IsUnrestricted " + elpa.ToString ());
337 Assert.AreEqual (0, union.PermissionEntries.Count, "target.Count " + elpa.ToString ());
339 union = (EventLogPermission)elp2.Union (elp1);
340 Assert.IsTrue (union.IsUnrestricted (), "source.IsUnrestricted " + elpa.ToString ());
341 Assert.AreEqual (0, union.PermissionEntries.Count, "source.Count " + elpa.ToString ());
346 [ExpectedException (typeof (ArgumentException))]
347 public void Union_BadPermission ()
349 EventLogPermission elp1 = new EventLogPermission (PermissionState.Unrestricted);
350 elp1.Union (new SecurityPermission (SecurityPermissionFlag.Assertion));
354 [ExpectedException (typeof (ArgumentNullException))]
355 public void FromXml_Null ()
357 EventLogPermission elp = new EventLogPermission (PermissionState.None);
362 [ExpectedException (typeof (ArgumentException))]
363 public void FromXml_WrongTag ()
365 EventLogPermission elp = new EventLogPermission (PermissionState.None);
366 SecurityElement se = elp.ToXml ();
369 // note: normally IPermission classes (in corlib) DO care about the
374 [ExpectedException (typeof (ArgumentException))]
375 public void FromXml_WrongTagCase ()
377 EventLogPermission elp = new EventLogPermission (PermissionState.None);
378 SecurityElement se = elp.ToXml ();
379 se.Tag = "IPERMISSION"; // instead of IPermission
381 // note: normally IPermission classes (in corlib) DO care about the
386 public void FromXml_WrongClass ()
388 EventLogPermission elp = new EventLogPermission (PermissionState.None);
389 SecurityElement se = elp.ToXml ();
391 SecurityElement w = new SecurityElement (se.Tag);
392 w.AddAttribute ("class", "Wrong" + se.Attribute ("class"));
393 w.AddAttribute ("version", se.Attribute ("version"));
395 // doesn't care of the class name at that stage
396 // anyway the class has already be created so...
400 public void FromXml_NoClass ()
402 EventLogPermission elp = new EventLogPermission (PermissionState.None);
403 SecurityElement se = elp.ToXml ();
405 SecurityElement w = new SecurityElement (se.Tag);
406 w.AddAttribute ("version", se.Attribute ("version"));
408 // doesn't even care of the class attribute presence
412 [ExpectedException (typeof (ArgumentException))]
413 public void FromXml_WrongVersion ()
415 EventLogPermission elp = new EventLogPermission (PermissionState.None);
416 SecurityElement se = elp.ToXml ();
417 se.Attributes.Remove ("version");
418 se.Attributes.Add ("version", "2");
423 public void FromXml_NoVersion ()
425 EventLogPermission elp = new EventLogPermission (PermissionState.None);
426 SecurityElement se = elp.ToXml ();
428 SecurityElement w = new SecurityElement (se.Tag);
429 w.AddAttribute ("class", se.Attribute ("class"));