(DISTFILES): Comment out a few missing files.
[mono-project.git] / mcs / class / System.ServiceProcess / Test / System.ServiceProcess / ServiceControllerPermissionTest.cs
blob6004b89dc66cac1fea4ca2210dc937718046c0f0
1 //
2 // ServiceControllerPermissionTest.cs -
3 // NUnit Test Cases for ServiceControllerPermission
4 //
5 // Author:
6 // Sebastien Pouliot <sebastien@ximian.com>
7 //
8 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
9 //
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:
17 //
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
20 //
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;
31 using System;
32 using System.Security;
33 using System.Security.Permissions;
34 using System.ServiceProcess;
36 namespace MonoTests.System.ServiceProcess {
38 [TestFixture]
39 public class ServiceControllerPermissionTest {
41 static ServiceControllerPermissionAccess [] AllAccess = {
42 ServiceControllerPermissionAccess.None,
43 ServiceControllerPermissionAccess.Browse,
44 ServiceControllerPermissionAccess.Control,
47 [Test]
48 public void PermissionState_None ()
50 PermissionState ps = PermissionState.None;
51 ServiceControllerPermission scp = new ServiceControllerPermission (ps);
52 Assert.AreEqual (0, scp.PermissionEntries.Count, "PermissionEntries");
53 Assert.IsFalse (scp.IsUnrestricted (), "IsUnrestricted");
55 SecurityElement se = scp.ToXml ();
56 // only class and version are present
57 Assert.AreEqual (2, se.Attributes.Count, "Xml-Attributes");
58 Assert.IsNull (se.Children, "Xml-Children");
60 ServiceControllerPermission copy = (ServiceControllerPermission)scp.Copy ();
61 Assert.IsFalse (Object.ReferenceEquals (scp, copy), "ReferenceEquals");
62 Assert.AreEqual (scp.PermissionEntries.Count, copy.PermissionEntries.Count, "copy-PermissionEntries");
63 Assert.AreEqual (scp.IsUnrestricted (), copy.IsUnrestricted (), "IsUnrestricted ()");
66 [Test]
67 public void PermissionState_Unrestricted ()
69 PermissionState ps = PermissionState.Unrestricted;
70 ServiceControllerPermission scp = new ServiceControllerPermission (ps);
71 Assert.AreEqual (0, scp.PermissionEntries.Count, "PermissionEntries");
72 Assert.IsTrue (scp.IsUnrestricted (), "IsUnrestricted");
74 SecurityElement se = scp.ToXml ();
75 // only class and version are present
76 Assert.AreEqual ("true", se.Attribute ("Unrestricted"), "Xml-Unrestricted");
77 Assert.IsNull (se.Children, "Xml-Children");
79 ServiceControllerPermission copy = (ServiceControllerPermission)scp.Copy ();
80 Assert.IsFalse (Object.ReferenceEquals (scp, copy), "ReferenceEquals");
81 Assert.AreEqual (scp.PermissionEntries.Count, copy.PermissionEntries.Count, "copy-PermissionEntries");
82 Assert.AreEqual (scp.IsUnrestricted (), copy.IsUnrestricted (), "copy-IsUnrestricted ()");
85 [Test]
86 // strange as ancestors does the checking (reported as FDBK15131)
87 // [ExpectedException (typeof (ArgumentException))]
88 public void PermissionState_Bad ()
90 PermissionState ps = (PermissionState)77;
91 ServiceControllerPermission scp = new ServiceControllerPermission (ps);
92 Assert.IsFalse (scp.IsUnrestricted (), "IsUnrestricted");
95 [Test]
96 public void ServiceControllerPermissionAccesss_Bad ()
98 ServiceControllerPermissionAccess scpa = (ServiceControllerPermissionAccess)Int32.MinValue;
99 ServiceControllerPermission scp = new ServiceControllerPermission (scpa, "localhost", "http");
100 Assert.AreEqual (1, scp.PermissionEntries.Count, "Count");
101 Assert.AreEqual ((ServiceControllerPermissionAccess)Int32.MinValue, scp.PermissionEntries [0].PermissionAccess, "PermissionAccess");
104 [Test]
105 public void PermissionEntries ()
107 ServiceControllerPermissionAccess scpa = ServiceControllerPermissionAccess.None;
108 ServiceControllerPermission scp = new ServiceControllerPermission (scpa, "localhost", "http");
109 ServiceControllerPermissionEntryCollection scpec = scp.PermissionEntries;
110 Assert.AreEqual (1, scpec.Count, "Count==1");
112 ServiceControllerPermissionEntry scpe = new ServiceControllerPermissionEntry (ServiceControllerPermissionAccess.Browse, "*", "ftp");
113 scp.PermissionEntries.Add (scpe);
114 Assert.AreEqual (2, scpec.Count, "Count==2");
116 // remove (same instance)
117 scp.PermissionEntries.Remove (scpe);
118 Assert.AreEqual (1, scpec.Count, "Count==1 (b)");
120 // remove different instance (doesn't work)
121 scpe = new ServiceControllerPermissionEntry (ServiceControllerPermissionAccess.None, "localhost", "http");
122 Assert.AreEqual (1, scpec.Count, "Count==1");
125 [Test]
126 public void Copy ()
128 foreach (ServiceControllerPermissionAccess scpa in AllAccess) {
129 ServiceControllerPermission scp = new ServiceControllerPermission (PermissionState.None);
130 ServiceControllerPermissionEntry scpe = new ServiceControllerPermissionEntry (scpa, "localhost", scpa.ToString ());
131 scp.PermissionEntries.Add (scpe);
132 ServiceControllerPermission copy = (ServiceControllerPermission)scp.Copy ();
133 Assert.AreEqual (1, copy.PermissionEntries.Count, "Count==1");
134 Assert.AreEqual (scpa, scp.PermissionEntries [0].PermissionAccess, scpa.ToString ());
138 [Test]
139 public void Intersect_Null ()
141 ServiceControllerPermission scp = new ServiceControllerPermission (PermissionState.None);
142 // No intersection with null
143 Assert.IsNull (scp.Intersect (null), "None N null");
146 [Test]
147 public void Intersect_None ()
149 ServiceControllerPermission scp1 = new ServiceControllerPermission (PermissionState.None);
150 ServiceControllerPermission scp2 = new ServiceControllerPermission (PermissionState.None);
151 // 1. None N None
152 ServiceControllerPermission result = (ServiceControllerPermission)scp1.Intersect (scp2);
153 Assert.IsNull (result, "Empty N Empty");
154 // 2. None N Entry
155 scp2.PermissionEntries.Add (new ServiceControllerPermissionEntry (ServiceControllerPermissionAccess.None, "localhost", "http"));
156 result = (ServiceControllerPermission)scp1.Intersect (scp2);
157 Assert.IsNull (result, "Empty N Entry");
158 // 3. Entry N None
159 result = (ServiceControllerPermission)scp2.Intersect (scp1);
160 Assert.IsNull (result, "Entry N Empty");
163 [Test]
164 public void Intersect_Unrestricted ()
166 // Intersection with unrestricted == Copy
167 // a. source (this) is unrestricted
168 ServiceControllerPermission scp1 = new ServiceControllerPermission (PermissionState.Unrestricted);
169 ServiceControllerPermission scp2 = new ServiceControllerPermission (PermissionState.None);
171 // 1. Unrestricted N None
172 ServiceControllerPermission result = (ServiceControllerPermission)scp1.Intersect (scp2);
173 Assert.IsFalse (result.IsUnrestricted (), "(Unrestricted N None).IsUnrestricted");
174 Assert.AreEqual (0, result.PermissionEntries.Count, "(Unrestricted N None).Count");
176 // 2. None N Unrestricted
177 result = (ServiceControllerPermission)scp2.Intersect (scp1);
178 Assert.IsFalse (result.IsUnrestricted (), "(None N Unrestricted).IsUnrestricted");
179 Assert.AreEqual (0, result.PermissionEntries.Count, "(None N Unrestricted).Count");
181 // 3. Unrestricted N Unrestricted
182 result = (ServiceControllerPermission)scp1.Intersect (scp1);
183 Assert.IsTrue (result.IsUnrestricted (), "(Unrestricted N Unrestricted).IsUnrestricted");
184 Assert.AreEqual (0, result.PermissionEntries.Count, "(Unrestricted N Unrestricted).Count");
186 // 4. Unrestricted N Entry
187 scp2.PermissionEntries.Add (new ServiceControllerPermissionEntry (ServiceControllerPermissionAccess.None, "localhost", "http"));
188 result = (ServiceControllerPermission)scp1.Intersect (scp2);
189 Assert.IsFalse (result.IsUnrestricted (), "(Unrestricted N Entry).IsUnrestricted");
190 Assert.AreEqual (1, result.PermissionEntries.Count, "(Unrestricted N Entry).Count");
192 // 5. Entry N Unrestricted
193 result = (ServiceControllerPermission)scp2.Intersect (scp1);
194 Assert.IsFalse (result.IsUnrestricted (), "(Entry N Unrestricted).IsUnrestricted");
195 Assert.AreEqual (1, result.PermissionEntries.Count, "(Entry N Unrestricted).Count");
197 // 6. Unrestricted N Unrestricted
198 scp1.PermissionEntries.Add (new ServiceControllerPermissionEntry (ServiceControllerPermissionAccess.None, "localhost", "http"));
199 result = (ServiceControllerPermission)scp1.Intersect (scp1);
200 Assert.IsTrue (result.IsUnrestricted (), "(Unrestricted N Unrestricted).IsUnrestricted");
201 Assert.AreEqual (1, result.PermissionEntries.Count, "(Unrestricted N Unrestricted).Count");
204 [Test]
205 [ExpectedException (typeof (ArgumentException))]
206 public void Intersect_BadPermission ()
208 ServiceControllerPermission scp1 = new ServiceControllerPermission (PermissionState.Unrestricted);
209 scp1.Intersect (new SecurityPermission (SecurityPermissionFlag.Assertion));
212 [Test]
213 public void IsSubset_Null ()
215 ServiceControllerPermission scp = new ServiceControllerPermission (PermissionState.None);
216 Assert.IsTrue (scp.IsSubsetOf (null), "null");
219 [Test]
220 public void IsSubset_None ()
222 // IsSubset with none
223 // a. source (this) is none -> target is never a subset
224 // b. destination (target) is none -> target is always a subset
225 ServiceControllerPermission scp1 = new ServiceControllerPermission (PermissionState.None);
226 foreach (ServiceControllerPermissionAccess scpa in AllAccess) {
227 ServiceControllerPermission scp2 = new ServiceControllerPermission (PermissionState.None);
228 scp2.PermissionEntries.Add (new ServiceControllerPermissionEntry (scpa, "localhost", scpa.ToString ()));
229 Assert.IsTrue (scp1.IsSubsetOf (scp2), "target " + scpa.ToString ());
230 Assert.IsFalse (scp2.IsSubsetOf (scp1), "source " + scpa.ToString ());
234 [Test]
235 public void IsSubset_Self ()
237 foreach (ServiceControllerPermissionAccess scpa in AllAccess) {
238 ServiceControllerPermission scp = new ServiceControllerPermission (PermissionState.None);
239 scp.PermissionEntries.Add (new ServiceControllerPermissionEntry (scpa, "localhost", scpa.ToString ()));
240 Assert.IsTrue (scp.IsSubsetOf (scp), scpa.ToString ());
244 [Test]
245 public void IsSubset_Unrestricted ()
247 // IsSubset with unrestricted
248 // a. source (this) is unrestricted -> target is never a subset
249 // b. destination (target) is unrestricted -> source is always a subset
250 ServiceControllerPermission scp1 = new ServiceControllerPermission (PermissionState.Unrestricted);
251 foreach (ServiceControllerPermissionAccess scpa in AllAccess) {
252 ServiceControllerPermission scp2 = new ServiceControllerPermission (PermissionState.None);
253 scp2.PermissionEntries.Add (new ServiceControllerPermissionEntry (scpa, "localhost", scpa.ToString ()));
254 Assert.IsFalse (scp1.IsSubsetOf (scp2), "target " + scpa.ToString ());
255 Assert.IsTrue (scp2.IsSubsetOf (scp1), "source " + scpa.ToString ());
257 Assert.IsTrue (scp1.IsSubsetOf (scp1), "Unrestricted.IsSubsetOf(Unrestricted)");
260 [Test]
261 // "special" behavior inherited from ResourceBasePermission
262 // [ExpectedException (typeof (ArgumentException))]
263 public void IsSubsetOf_BadPermission ()
265 ServiceControllerPermission scp1 = new ServiceControllerPermission (PermissionState.Unrestricted);
266 Assert.IsFalse (scp1.IsSubsetOf (new SecurityPermission (SecurityPermissionFlag.Assertion)));
269 [Test]
270 public void Union_Null ()
272 ServiceControllerPermission scp = new ServiceControllerPermission (PermissionState.None);
273 scp.PermissionEntries.Add (new ServiceControllerPermissionEntry (ServiceControllerPermissionAccess.None, "localhost", "http"));
274 // Union with null is a simple copy
275 ServiceControllerPermission union = (ServiceControllerPermission)scp.Union (null);
276 Assert.IsNotNull (scp.PermissionEntries.Count, "Count");
279 [Test]
280 public void Union_None ()
282 ServiceControllerPermission scp1 = new ServiceControllerPermission (PermissionState.None);
283 foreach (ServiceControllerPermissionAccess scpa in AllAccess) {
284 ServiceControllerPermission scp2 = new ServiceControllerPermission (PermissionState.None);
285 scp2.PermissionEntries.Add (new ServiceControllerPermissionEntry (scpa, "localhost", scpa.ToString ()));
286 ServiceControllerPermission union = (ServiceControllerPermission)scp1.Union (scp2);
287 Assert.IsFalse (union.IsUnrestricted (), "target.IsUnrestricted " + scpa.ToString ());
288 Assert.AreEqual (1, union.PermissionEntries.Count, "target.Count " + scpa.ToString ());
290 union = (ServiceControllerPermission)scp2.Union (scp1);
291 Assert.IsFalse (union.IsUnrestricted (), "source.IsUnrestricted " + scpa.ToString ());
292 Assert.AreEqual (1, union.PermissionEntries.Count, "source.Count " + scpa.ToString ());
296 [Test]
297 public void Union_Self ()
299 foreach (ServiceControllerPermissionAccess scpa in AllAccess) {
300 ServiceControllerPermission scp = new ServiceControllerPermission (PermissionState.None);
301 scp.PermissionEntries.Add (new ServiceControllerPermissionEntry (scpa, "localhost", scpa.ToString ()));
302 ServiceControllerPermission union = (ServiceControllerPermission)scp.Union (scp);
303 Assert.IsFalse (union.IsUnrestricted (), "IsUnrestricted " + scpa.ToString ());
304 Assert.AreEqual (1, union.PermissionEntries.Count, "Count " + scpa.ToString ());
308 [Test]
309 public void Union_Unrestricted ()
311 // Union with unrestricted is unrestricted
312 ServiceControllerPermission scp1 = new ServiceControllerPermission (PermissionState.Unrestricted);
313 foreach (ServiceControllerPermissionAccess scpa in AllAccess) {
314 ServiceControllerPermission scp2 = new ServiceControllerPermission (PermissionState.None);
315 scp2.PermissionEntries.Add (new ServiceControllerPermissionEntry (scpa, "localhost", scpa.ToString ()));
316 ServiceControllerPermission union = (ServiceControllerPermission)scp1.Union (scp2);
317 Assert.IsTrue (union.IsUnrestricted (), "target.IsUnrestricted " + scpa.ToString ());
318 Assert.AreEqual (0, union.PermissionEntries.Count, "target.Count " + scpa.ToString ());
320 union = (ServiceControllerPermission)scp2.Union (scp1);
321 Assert.IsTrue (union.IsUnrestricted (), "source.IsUnrestricted " + scpa.ToString ());
322 Assert.AreEqual (0, union.PermissionEntries.Count, "source.Count " + scpa.ToString ());
326 [Test]
327 [ExpectedException (typeof (ArgumentException))]
328 public void Union_BadPermission ()
330 ServiceControllerPermission scp1 = new ServiceControllerPermission (PermissionState.Unrestricted);
331 scp1.Union (new SecurityPermission (SecurityPermissionFlag.Assertion));
334 [Test]
335 // Problem inherited from ResourcePermissionBase
336 // [ExpectedException (typeof (ArgumentNullException))]
337 [ExpectedException (typeof (NullReferenceException))]
338 public void FromXml_Null ()
340 ServiceControllerPermission scp = new ServiceControllerPermission (PermissionState.None);
341 scp.FromXml (null);
344 [Test]
345 public void FromXml_WrongTag ()
347 ServiceControllerPermission scp = new ServiceControllerPermission (PermissionState.None);
348 SecurityElement se = scp.ToXml ();
349 se.Tag = "IMono";
350 scp.FromXml (se);
351 // note: normally IPermission classes (in corlib) DO care about the
352 // IPermission tag
355 [Test]
356 public void FromXml_WrongTagCase ()
358 ServiceControllerPermission scp = new ServiceControllerPermission (PermissionState.None);
359 SecurityElement se = scp.ToXml ();
360 se.Tag = "IPERMISSION"; // instead of IPermission
361 scp.FromXml (se);
362 // note: normally IPermission classes (in corlib) DO care about the
363 // IPermission tag
366 [Test]
367 public void FromXml_WrongClass ()
369 ServiceControllerPermission scp = new ServiceControllerPermission (PermissionState.None);
370 SecurityElement se = scp.ToXml ();
372 SecurityElement w = new SecurityElement (se.Tag);
373 w.AddAttribute ("class", "Wrong" + se.Attribute ("class"));
374 w.AddAttribute ("version", se.Attribute ("version"));
375 scp.FromXml (w);
376 // doesn't care of the class name at that stage
377 // anyway the class has already be created so...
380 [Test]
381 public void FromXml_NoClass ()
383 ServiceControllerPermission scp = new ServiceControllerPermission (PermissionState.None);
384 SecurityElement se = scp.ToXml ();
386 SecurityElement w = new SecurityElement (se.Tag);
387 w.AddAttribute ("version", se.Attribute ("version"));
388 scp.FromXml (w);
389 // doesn't even care of the class attribute presence
392 [Test]
393 [ExpectedException (typeof (ArgumentException))]
394 public void FromXml_WrongVersion ()
396 ServiceControllerPermission scp = new ServiceControllerPermission (PermissionState.None);
397 SecurityElement se = scp.ToXml ();
398 se.Attributes.Remove ("version");
399 se.Attributes.Add ("version", "2");
400 scp.FromXml (se);
403 [Test]
404 public void FromXml_NoVersion ()
406 ServiceControllerPermission scp = new ServiceControllerPermission (PermissionState.None);
407 SecurityElement se = scp.ToXml ();
409 SecurityElement w = new SecurityElement (se.Tag);
410 w.AddAttribute ("class", se.Attribute ("class"));
411 scp.FromXml (w);