2 // PerformanceCounterPermissionTest.cs -
3 // NUnit Test Cases for PerformanceCounterPermission
6 // Sebastien Pouliot <sebastien@ximian.com>
8 // Copyright (C) 2004 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.
30 using NUnit
.Framework
;
32 using System
.Diagnostics
;
33 using System
.Security
;
34 using System
.Security
.Permissions
;
36 namespace MonoTests
.System
.Diagnostics
{
39 public class PerformanceCounterPermissionTest
{
41 static PerformanceCounterPermissionAccess
[] AllAccess
= {
42 PerformanceCounterPermissionAccess
.None
,
43 PerformanceCounterPermissionAccess
.Browse
,
45 PerformanceCounterPermissionAccess
.Read
,
46 PerformanceCounterPermissionAccess
.Write
,
48 PerformanceCounterPermissionAccess
.Instrument
,
49 PerformanceCounterPermissionAccess
.Administer
,
53 public void PermissionState_None ()
55 PermissionState ps
= PermissionState
.None
;
56 PerformanceCounterPermission pcp
= new PerformanceCounterPermission (ps
);
57 Assert
.AreEqual (0, pcp
.PermissionEntries
.Count
, "PermissionEntries");
58 Assert
.IsFalse (pcp
.IsUnrestricted (), "IsUnrestricted");
60 SecurityElement se
= pcp
.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 PerformanceCounterPermission copy
= (PerformanceCounterPermission
)pcp
.Copy ();
66 Assert
.IsFalse (Object
.ReferenceEquals (pcp
, copy
), "ReferenceEquals");
67 Assert
.AreEqual (pcp
.PermissionEntries
.Count
, copy
.PermissionEntries
.Count
, "copy-PermissionEntries");
68 Assert
.AreEqual (pcp
.IsUnrestricted (), copy
.IsUnrestricted (), "IsUnrestricted ()");
72 public void PermissionState_Unrestricted ()
74 PermissionState ps
= PermissionState
.Unrestricted
;
75 PerformanceCounterPermission pcp
= new PerformanceCounterPermission (ps
);
76 Assert
.AreEqual (0, pcp
.PermissionEntries
.Count
, "PermissionEntries");
77 Assert
.IsTrue (pcp
.IsUnrestricted (), "IsUnrestricted");
79 SecurityElement se
= pcp
.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 PerformanceCounterPermission copy
= (PerformanceCounterPermission
)pcp
.Copy ();
85 Assert
.IsFalse (Object
.ReferenceEquals (pcp
, copy
), "ReferenceEquals");
86 Assert
.AreEqual (pcp
.PermissionEntries
.Count
, copy
.PermissionEntries
.Count
, "copy-PermissionEntries");
87 Assert
.AreEqual (pcp
.IsUnrestricted (), copy
.IsUnrestricted (), "copy-IsUnrestricted ()");
91 // strange as ancestors does the checking (reported as FDBK15131)
92 // [ExpectedException (typeof (ArgumentException))]
93 public void PermissionState_Bad ()
95 PermissionState ps
= (PermissionState
)77;
96 PerformanceCounterPermission pcp
= new PerformanceCounterPermission (ps
);
97 Assert
.IsFalse (pcp
.IsUnrestricted (), "IsUnrestricted");
101 [ExpectedException (typeof (ArgumentNullException
))]
102 public void Constructor_PermissionEntries_Null ()
104 PerformanceCounterPermission pcp
= new PerformanceCounterPermission (null);
108 [ExpectedException (typeof (ArgumentException
))]
109 public void Constructor_MachineName_Null ()
111 PerformanceCounterPermission pcp
= new PerformanceCounterPermission (PerformanceCounterPermissionAccess
.None
, null, String
.Empty
);
115 [ExpectedException (typeof (ArgumentNullException
))]
116 public void Constructor_CategoryName_Null ()
118 PerformanceCounterPermission pcp
= new PerformanceCounterPermission (PerformanceCounterPermissionAccess
.None
, "localhost", null);
122 public void PerformanceCounterPermissionAccesss_Bad ()
124 PerformanceCounterPermissionAccess pcpa
= (PerformanceCounterPermissionAccess
)Int32
.MinValue
;
125 PerformanceCounterPermission pcp
= new PerformanceCounterPermission (pcpa
, "localhost", String
.Empty
);
126 Assert
.AreEqual (1, pcp
.PermissionEntries
.Count
, "Count");
127 Assert
.AreEqual ((PerformanceCounterPermissionAccess
)Int32
.MinValue
, pcp
.PermissionEntries
[0].PermissionAccess
, "PermissionAccess");
131 public void PermissionEntries ()
133 PerformanceCounterPermissionAccess pcpa
= PerformanceCounterPermissionAccess
.None
;
134 PerformanceCounterPermission pcp
= new PerformanceCounterPermission (pcpa
, "localhost", String
.Empty
);
135 PerformanceCounterPermissionEntryCollection pcpec
= pcp
.PermissionEntries
;
136 Assert
.AreEqual (1, pcpec
.Count
, "Count==1");
138 PerformanceCounterPermissionEntry pcpe
= new PerformanceCounterPermissionEntry (PerformanceCounterPermissionAccess
.Browse
, "*", String
.Empty
);
139 pcp
.PermissionEntries
.Add (pcpe
);
140 Assert
.AreEqual (2, pcpec
.Count
, "Count==2");
142 // remove (same instance)
143 pcp
.PermissionEntries
.Remove (pcpe
);
144 Assert
.AreEqual (1, pcpec
.Count
, "Count==1 (b)");
146 // remove different instance (doesn't work)
147 pcpe
= new PerformanceCounterPermissionEntry (PerformanceCounterPermissionAccess
.None
, "localhost", String
.Empty
);
148 Assert
.AreEqual (1, pcpec
.Count
, "Count==1");
154 foreach (PerformanceCounterPermissionAccess pcpa
in AllAccess
) {
155 PerformanceCounterPermission pcp
= new PerformanceCounterPermission (PermissionState
.None
);
156 PerformanceCounterPermissionEntry pcpe
= new PerformanceCounterPermissionEntry (pcpa
, pcpa
.ToString (), String
.Empty
);
157 pcp
.PermissionEntries
.Add (pcpe
);
158 PerformanceCounterPermission copy
= (PerformanceCounterPermission
)pcp
.Copy ();
159 Assert
.AreEqual (1, copy
.PermissionEntries
.Count
, "Count==1");
160 Assert
.AreEqual (pcpa
, pcp
.PermissionEntries
[0].PermissionAccess
, pcpa
.ToString ());
165 public void Intersect_Null ()
167 PerformanceCounterPermission pcp
= new PerformanceCounterPermission (PermissionState
.None
);
168 // No intersection with null
169 Assert
.IsNull (pcp
.Intersect (null), "None N null");
173 public void Intersect_None ()
175 PerformanceCounterPermission pcp1
= new PerformanceCounterPermission (PermissionState
.None
);
176 PerformanceCounterPermission pcp2
= new PerformanceCounterPermission (PermissionState
.None
);
178 PerformanceCounterPermission result
= (PerformanceCounterPermission
)pcp1
.Intersect (pcp2
);
179 Assert
.IsNull (result
, "Empty N Empty");
181 pcp2
.PermissionEntries
.Add (new PerformanceCounterPermissionEntry (PerformanceCounterPermissionAccess
.None
, "localhost", String
.Empty
));
182 result
= (PerformanceCounterPermission
)pcp1
.Intersect (pcp2
);
183 Assert
.IsNull (result
, "Empty N Entry");
185 result
= (PerformanceCounterPermission
)pcp2
.Intersect (pcp1
);
186 Assert
.IsNull (result
, "Entry N Empty");
190 public void Intersect_Unrestricted ()
192 // Intersection with unrestricted == Copy
193 // a. source (this) is unrestricted
194 PerformanceCounterPermission pcp1
= new PerformanceCounterPermission (PermissionState
.Unrestricted
);
195 PerformanceCounterPermission pcp2
= new PerformanceCounterPermission (PermissionState
.None
);
197 // 1. Unrestricted N None
198 PerformanceCounterPermission result
= (PerformanceCounterPermission
)pcp1
.Intersect (pcp2
);
199 Assert
.IsFalse (result
.IsUnrestricted (), "(Unrestricted N None).IsUnrestricted");
200 Assert
.AreEqual (0, result
.PermissionEntries
.Count
, "(Unrestricted N None).Count");
202 // 2. None N Unrestricted
203 result
= (PerformanceCounterPermission
)pcp2
.Intersect (pcp1
);
204 Assert
.IsFalse (result
.IsUnrestricted (), "(None N Unrestricted).IsUnrestricted");
205 Assert
.AreEqual (0, result
.PermissionEntries
.Count
, "(None N Unrestricted).Count");
207 // 3. Unrestricted N Unrestricted
208 result
= (PerformanceCounterPermission
)pcp1
.Intersect (pcp1
);
209 Assert
.IsTrue (result
.IsUnrestricted (), "(Unrestricted N Unrestricted).IsUnrestricted");
210 Assert
.AreEqual (0, result
.PermissionEntries
.Count
, "(Unrestricted N Unrestricted).Count");
212 // 4. Unrestricted N Entry
213 pcp2
.PermissionEntries
.Add (new PerformanceCounterPermissionEntry (PerformanceCounterPermissionAccess
.None
, "localhost", String
.Empty
));
214 result
= (PerformanceCounterPermission
)pcp1
.Intersect (pcp2
);
215 Assert
.IsFalse (result
.IsUnrestricted (), "(Unrestricted N Entry).IsUnrestricted");
216 Assert
.AreEqual (1, result
.PermissionEntries
.Count
, "(Unrestricted N Entry).Count");
218 // 5. Entry N Unrestricted
219 result
= (PerformanceCounterPermission
)pcp2
.Intersect (pcp1
);
220 Assert
.IsFalse (result
.IsUnrestricted (), "(Entry N Unrestricted).IsUnrestricted");
221 Assert
.AreEqual (1, result
.PermissionEntries
.Count
, "(Entry N Unrestricted).Count");
223 // 6. Unrestricted N Unrestricted
224 pcp1
.PermissionEntries
.Add (new PerformanceCounterPermissionEntry (PerformanceCounterPermissionAccess
.None
, "localhost", String
.Empty
));
225 result
= (PerformanceCounterPermission
)pcp1
.Intersect (pcp1
);
226 Assert
.IsTrue (result
.IsUnrestricted (), "(Unrestricted N Unrestricted).IsUnrestricted");
227 Assert
.AreEqual (1, result
.PermissionEntries
.Count
, "(Unrestricted N Unrestricted).Count");
231 [ExpectedException (typeof (ArgumentException
))]
232 public void Intersect_BadPermission ()
234 PerformanceCounterPermission pcp1
= new PerformanceCounterPermission (PermissionState
.Unrestricted
);
235 pcp1
.Intersect (new SecurityPermission (SecurityPermissionFlag
.Assertion
));
239 public void IsSubset_Null ()
241 PerformanceCounterPermission pcp
= new PerformanceCounterPermission (PermissionState
.None
);
242 Assert
.IsTrue (pcp
.IsSubsetOf (null), "null");
246 public void IsSubset_None ()
248 // IsSubset with none
249 // a. source (this) is none -> target is never a subset
250 // b. destination (target) is none -> target is always a subset
251 PerformanceCounterPermission pcp1
= new PerformanceCounterPermission (PermissionState
.None
);
252 foreach (PerformanceCounterPermissionAccess pcpa
in AllAccess
) {
253 PerformanceCounterPermission pcp2
= new PerformanceCounterPermission (PermissionState
.None
);
254 pcp2
.PermissionEntries
.Add (new PerformanceCounterPermissionEntry (pcpa
, pcpa
.ToString (), String
.Empty
));
255 Assert
.IsTrue (pcp1
.IsSubsetOf (pcp2
), "target " + pcpa
.ToString ());
256 Assert
.IsFalse (pcp2
.IsSubsetOf (pcp1
), "source " + pcpa
.ToString ());
261 public void IsSubset_Self ()
263 foreach (PerformanceCounterPermissionAccess pcpa
in AllAccess
) {
264 PerformanceCounterPermission pcp
= new PerformanceCounterPermission (PermissionState
.None
);
265 pcp
.PermissionEntries
.Add (new PerformanceCounterPermissionEntry (pcpa
, pcpa
.ToString (), String
.Empty
));
266 Assert
.IsTrue (pcp
.IsSubsetOf (pcp
), pcpa
.ToString ());
271 public void IsSubset_Unrestricted ()
273 // IsSubset with unrestricted
274 // a. source (this) is unrestricted -> target is never a subset
275 // b. destination (target) is unrestricted -> source is always a subset
276 PerformanceCounterPermission pcp1
= new PerformanceCounterPermission (PermissionState
.Unrestricted
);
277 foreach (PerformanceCounterPermissionAccess pcpa
in AllAccess
) {
278 PerformanceCounterPermission pcp2
= new PerformanceCounterPermission (PermissionState
.None
);
279 pcp2
.PermissionEntries
.Add (new PerformanceCounterPermissionEntry (pcpa
, pcpa
.ToString (), String
.Empty
));
280 Assert
.IsFalse (pcp1
.IsSubsetOf (pcp2
), "target " + pcpa
.ToString ());
281 Assert
.IsTrue (pcp2
.IsSubsetOf (pcp1
), "source " + pcpa
.ToString ());
283 Assert
.IsTrue (pcp1
.IsSubsetOf (pcp1
), "Unrestricted.IsSubsetOf(Unrestricted)");
287 // "special" behavior inherited from ResourceBasePermission
288 // [ExpectedException (typeof (ArgumentException))]
289 public void IsSubsetOf_BadPermission ()
291 PerformanceCounterPermission pcp1
= new PerformanceCounterPermission (PermissionState
.Unrestricted
);
292 Assert
.IsFalse (pcp1
.IsSubsetOf (new SecurityPermission (SecurityPermissionFlag
.Assertion
)));
296 public void Union_Null ()
298 PerformanceCounterPermission pcp
= new PerformanceCounterPermission (PermissionState
.None
);
299 pcp
.PermissionEntries
.Add (new PerformanceCounterPermissionEntry (PerformanceCounterPermissionAccess
.None
, "localhost", String
.Empty
));
300 // Union with null is a simple copy
301 PerformanceCounterPermission union
= (PerformanceCounterPermission
)pcp
.Union (null);
302 Assert
.IsNotNull (pcp
.PermissionEntries
.Count
, "Count");
306 public void Union_None ()
308 PerformanceCounterPermission pcp1
= new PerformanceCounterPermission (PermissionState
.None
);
309 foreach (PerformanceCounterPermissionAccess pcpa
in AllAccess
) {
310 PerformanceCounterPermission pcp2
= new PerformanceCounterPermission (PermissionState
.None
);
311 pcp2
.PermissionEntries
.Add (new PerformanceCounterPermissionEntry (pcpa
, pcpa
.ToString (), String
.Empty
));
312 PerformanceCounterPermission union
= (PerformanceCounterPermission
)pcp1
.Union (pcp2
);
313 Assert
.IsFalse (union
.IsUnrestricted (), "target.IsUnrestricted " + pcpa
.ToString ());
314 Assert
.AreEqual (1, union
.PermissionEntries
.Count
, "target.Count " + pcpa
.ToString ());
316 union
= (PerformanceCounterPermission
)pcp2
.Union (pcp1
);
317 Assert
.IsFalse (union
.IsUnrestricted (), "source.IsUnrestricted " + pcpa
.ToString ());
318 Assert
.AreEqual (1, union
.PermissionEntries
.Count
, "source.Count " + pcpa
.ToString ());
323 public void Union_Self ()
325 foreach (PerformanceCounterPermissionAccess pcpa
in AllAccess
) {
326 PerformanceCounterPermission pcp
= new PerformanceCounterPermission (PermissionState
.None
);
327 pcp
.PermissionEntries
.Add (new PerformanceCounterPermissionEntry (pcpa
, pcpa
.ToString (), String
.Empty
));
328 PerformanceCounterPermission union
= (PerformanceCounterPermission
)pcp
.Union (pcp
);
329 Assert
.IsFalse (union
.IsUnrestricted (), "IsUnrestricted " + pcpa
.ToString ());
330 Assert
.AreEqual (1, union
.PermissionEntries
.Count
, "Count " + pcpa
.ToString ());
335 public void Union_Unrestricted ()
337 // Union with unrestricted is unrestricted
338 PerformanceCounterPermission pcp1
= new PerformanceCounterPermission (PermissionState
.Unrestricted
);
339 foreach (PerformanceCounterPermissionAccess pcpa
in AllAccess
) {
340 PerformanceCounterPermission pcp2
= new PerformanceCounterPermission (PermissionState
.None
);
341 pcp2
.PermissionEntries
.Add (new PerformanceCounterPermissionEntry (pcpa
, pcpa
.ToString (), String
.Empty
));
342 PerformanceCounterPermission union
= (PerformanceCounterPermission
)pcp1
.Union (pcp2
);
343 Assert
.IsTrue (union
.IsUnrestricted (), "target.IsUnrestricted " + pcpa
.ToString ());
344 Assert
.AreEqual (0, union
.PermissionEntries
.Count
, "target.Count " + pcpa
.ToString ());
346 union
= (PerformanceCounterPermission
)pcp2
.Union (pcp1
);
347 Assert
.IsTrue (union
.IsUnrestricted (), "source.IsUnrestricted " + pcpa
.ToString ());
348 Assert
.AreEqual (0, union
.PermissionEntries
.Count
, "source.Count " + pcpa
.ToString ());
353 [ExpectedException (typeof (ArgumentException
))]
354 public void Union_BadPermission ()
356 PerformanceCounterPermission pcp1
= new PerformanceCounterPermission (PermissionState
.Unrestricted
);
357 pcp1
.Union (new SecurityPermission (SecurityPermissionFlag
.Assertion
));
361 // Problem inherited from ResourcePermissionBase
362 // [ExpectedException (typeof (ArgumentNullException))]
363 [ExpectedException (typeof (NullReferenceException
))]
364 public void FromXml_Null ()
366 PerformanceCounterPermission pcp
= new PerformanceCounterPermission (PermissionState
.None
);
371 public void FromXml_WrongTag ()
373 PerformanceCounterPermission pcp
= new PerformanceCounterPermission (PermissionState
.None
);
374 SecurityElement se
= pcp
.ToXml ();
377 // note: normally IPermission classes (in corlib) DO care about the
382 public void FromXml_WrongTagCase ()
384 PerformanceCounterPermission pcp
= new PerformanceCounterPermission (PermissionState
.None
);
385 SecurityElement se
= pcp
.ToXml ();
386 se
.Tag
= "IPERMISSION"; // instead of IPermission
388 // note: normally IPermission classes (in corlib) DO care about the
393 public void FromXml_WrongClass ()
395 PerformanceCounterPermission pcp
= new PerformanceCounterPermission (PermissionState
.None
);
396 SecurityElement se
= pcp
.ToXml ();
398 SecurityElement w
= new SecurityElement (se
.Tag
);
399 w
.AddAttribute ("class", "Wrong" + se
.Attribute ("class"));
400 w
.AddAttribute ("version", se
.Attribute ("version"));
402 // doesn't care of the class name at that stage
403 // anyway the class has already be created so...
407 public void FromXml_NoClass ()
409 PerformanceCounterPermission pcp
= new PerformanceCounterPermission (PermissionState
.None
);
410 SecurityElement se
= pcp
.ToXml ();
412 SecurityElement w
= new SecurityElement (se
.Tag
);
413 w
.AddAttribute ("version", se
.Attribute ("version"));
415 // doesn't even care of the class attribute presence
419 [ExpectedException (typeof (ArgumentException
))]
420 public void FromXml_WrongVersion ()
422 PerformanceCounterPermission pcp
= new PerformanceCounterPermission (PermissionState
.None
);
423 SecurityElement se
= pcp
.ToXml ();
424 se
.Attributes
.Remove ("version");
425 se
.Attributes
.Add ("version", "2");
430 public void FromXml_NoVersion ()
432 PerformanceCounterPermission pcp
= new PerformanceCounterPermission (PermissionState
.None
);
433 SecurityElement se
= pcp
.ToXml ();
435 SecurityElement w
= new SecurityElement (se
.Tag
);
436 w
.AddAttribute ("class", se
.Attribute ("class"));