(DISTFILES): Comment out a few missing files.
[mono-project.git] / mcs / class / System.Data / Test / System.Data.Common / DBDataPermissionTest.cs
blob1abb13cd08c29894657939096833db2e437dae36
1 //
2 // DBDataPermissionTest.cs - NUnit Test Cases for DBDataPermission
3 //
4 // Author:
5 // Sebastien Pouliot <sebastien@ximian.com>
6 //
7 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 //
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 //
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 using NUnit.Framework;
30 using System;
31 using System.Data;
32 using System.Data.Common;
33 using System.Security;
34 using System.Security.Permissions;
35 using System.IO;
36 namespace MonoTests.System.Data.Common {
38 public class NonAbstractDBDataPermission : DBDataPermission {
40 #if !NET_2_0
41 public NonAbstractDBDataPermission ()
42 : base ()
46 public NonAbstractDBDataPermission (DBDataPermission permission, bool allowBlankPassword)
47 : base (permission)
49 AllowBlankPassword = allowBlankPassword;
51 #else
52 // make Copy and CreateInstance work :)
53 public NonAbstractDBDataPermission ()
54 : base (PermissionState.None)
57 #endif
58 public NonAbstractDBDataPermission (PermissionState state)
59 : base (state)
63 public NonAbstractDBDataPermission (DBDataPermission permission)
64 : base (permission)
68 public NonAbstractDBDataPermission (DBDataPermissionAttribute permissionAttribute)
69 : base (permissionAttribute)
72 #if NET_2_0
73 public NonAbstractDBDataPermission (DbConnectionOptions connectionOptions)
74 : base (connectionOptions)
77 #endif
79 public new void Clear ()
81 base.Clear ();
84 public new DBDataPermission CreateInstance ()
86 return base.CreateInstance ();
90 [TestFixture]
91 public class DBDataPermissionTest {
93 private const string defaultConnectString = "Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;";
94 private const string defaultConnectString2 = "Data Source=127.0.0.1;Integrated Security=SSPI;Initial Catalog=Northwind;";
96 private void Check (string msg, NonAbstractDBDataPermission dbdp, bool blank, bool unrestricted, int count)
98 Assert.AreEqual (blank, dbdp.AllowBlankPassword, msg + ".AllowBlankPassword");
99 Assert.AreEqual (unrestricted, dbdp.IsUnrestricted (), msg + ".IsUnrestricted");
100 if (count == 0)
101 Assert.IsNull (dbdp.ToXml ().Children, msg + ".Count != 0");
102 else
103 Assert.AreEqual (count, dbdp.ToXml ().Children.Count, msg + ".Count");
106 #if !NET_2_0
107 [Test]
108 public void Constructor_Empty ()
110 NonAbstractDBDataPermission dbdp = new NonAbstractDBDataPermission ();
111 Check ("Empty", dbdp, false, false, 0);
113 #elif !NET_1_1
114 [Test]
115 [ExpectedException (typeof (ArgumentOutOfRangeException))]
116 public void Constructor_PermissionStateBoolean_Invalid ()
118 PermissionState ps = (PermissionState) Int32.MinValue;
119 NonAbstractDBDataPermission dbdp = new NonAbstractDBDataPermission (ps, false);
122 [Test]
123 public void Constructor_PermissionStateBoolean_None ()
125 PermissionState ps = PermissionState.None;
126 NonAbstractDBDataPermission dbdp = new NonAbstractDBDataPermission (ps, false);
127 Check ("None,False", dbdp, false, false, 0);
129 dbdp = new NonAbstractDBDataPermission (ps, true);
130 Check ("None,True", dbdp, true, false, 0);
133 [Test]
134 public void Constructor_PermissionStateBoolean_Unrestricted ()
136 PermissionState ps = PermissionState.Unrestricted;
137 NonAbstractDBDataPermission dbdp = new NonAbstractDBDataPermission (ps, false);
138 Check ("Unrestricted,False", dbdp, false, true, 0);
140 dbdp = new NonAbstractDBDataPermission (ps, true);
141 Check ("Unrestricted,True", dbdp, true, true, 0);
143 #endif
144 [Test]
145 [ExpectedException (typeof (ArgumentNullException))]
146 public void Constructor_DBDataPermission_Null ()
148 DBDataPermission p = null;
149 NonAbstractDBDataPermission dbdp = new NonAbstractDBDataPermission (p);
152 [Test]
153 public void Constructor_DBDataPermission ()
155 DBDataPermission p = new NonAbstractDBDataPermission (PermissionState.None);
156 p.AllowBlankPassword = true;
157 p.Add (defaultConnectString, String.Empty, KeyRestrictionBehavior.AllowOnly);
159 NonAbstractDBDataPermission dbdp = new NonAbstractDBDataPermission (p);
160 Check ("DBDataPermission", dbdp, true, false, 1);
163 [Test]
164 [ExpectedException (typeof (ArgumentNullException))]
165 public void Constructor_DBDataPermissionAttribute_Null ()
167 DBDataPermissionAttribute a = null;
168 NonAbstractDBDataPermission dbdp = new NonAbstractDBDataPermission (a);
171 [Test]
172 public void Constructor_DBDataPermissionAttribute ()
174 DBDataPermissionAttribute a = new NonAbstractDBDataPermissionAttribute (SecurityAction.Assert);
175 a.AllowBlankPassword = true;
177 NonAbstractDBDataPermission dbdp = new NonAbstractDBDataPermission (a);
178 Check ("DBDataPermissionAttribute-0", dbdp, true, false, 0);
180 a.Unrestricted = true;
181 dbdp = new NonAbstractDBDataPermission (a);
182 Check ("DBDataPermissionAttribute-1", dbdp, false, true, 0);
183 // Unrestricted "bypass" the AllowBlankPassword (so it report false)
185 a.ConnectionString = defaultConnectString;
186 dbdp = new NonAbstractDBDataPermission (a);
187 Check ("DBDataPermissionAttribute-2", dbdp, false, true, 0);
188 // Unrestricted "bypass" the ConnectionString (so it report 0 childs)
190 a.Unrestricted = false;
191 dbdp = new NonAbstractDBDataPermission (a);
192 Check ("DBDataPermissionAttribute-3", dbdp, true, false, 1);
194 #if NET_2_0
195 [Test]
196 // [ExpectedException (typeof (ArgumentNullException))]
197 public void Constructor_DbConnectionOptions_Null ()
199 DbConnectionOptions o = null;
200 NonAbstractDBDataPermission dbdp = new NonAbstractDBDataPermission (o);
201 Check ("DbConnectionOptions_Null", dbdp, false, false, 0);
204 [Test]
205 public void Constructor_DbConnectionOptions ()
207 DbConnectionOptions o = new DbConnectionOptions (defaultConnectString);
208 NonAbstractDBDataPermission dbdp = new NonAbstractDBDataPermission (o);
209 Check ("DbConnectionOptions", dbdp, false, false, 1);
211 #endif
212 [Test]
213 [ExpectedException (typeof (ArgumentOutOfRangeException))]
214 public void Constructor_PermissionState_Invalid ()
216 PermissionState ps = (PermissionState) Int32.MinValue;
217 NonAbstractDBDataPermission dbdp = new NonAbstractDBDataPermission (ps);
220 [Test]
221 public void Constructor_PermissionState_None ()
223 PermissionState ps = PermissionState.None;
224 NonAbstractDBDataPermission dbdp = new NonAbstractDBDataPermission (ps);
225 Check ("PermissionState_None-1", dbdp, false, false, 0);
226 dbdp.AllowBlankPassword = true;
227 Check ("PermissionState_None-1", dbdp, true, false, 0);
230 [Test]
231 public void Constructor_PermissionState_Unrestricted ()
233 PermissionState ps = PermissionState.Unrestricted;
234 NonAbstractDBDataPermission dbdp = new NonAbstractDBDataPermission (ps);
235 Check ("PermissionState_Unrestricted-1", dbdp, false, true, 0);
236 dbdp.AllowBlankPassword = true;
237 Check ("PermissionState_Unrestricted-2", dbdp, true, true, 0);
240 [Test]
241 public void AllowBlankPassword ()
243 NonAbstractDBDataPermission dbdp = new NonAbstractDBDataPermission (PermissionState.None);
244 Assert.IsFalse (dbdp.AllowBlankPassword, "Default");
245 dbdp.AllowBlankPassword = true;
246 Assert.IsTrue (dbdp.AllowBlankPassword, "True");
247 dbdp.Clear ();
248 // clear the connection list - not the permission itself
249 Assert.IsTrue (dbdp.AllowBlankPassword, "Clear");
250 dbdp.AllowBlankPassword = false;
251 Assert.IsFalse (dbdp.AllowBlankPassword, "False");
254 [Test]
255 public void Add ()
257 NonAbstractDBDataPermission dbdp = new NonAbstractDBDataPermission (PermissionState.None);
258 dbdp.Add (defaultConnectString, String.Empty, KeyRestrictionBehavior.AllowOnly);
259 Assert.AreEqual (1, dbdp.ToXml ().Children.Count, "Count");
261 NonAbstractDBDataPermission copy = (NonAbstractDBDataPermission)dbdp.Copy ();
262 Assert.AreEqual (1, copy.ToXml ().Children.Count, "Copy.Count");
264 dbdp.Clear ();
265 Assert.IsNull (dbdp.ToXml ().Children, "Clear");
266 Assert.AreEqual (1, copy.ToXml ().Children.Count, "Copy.Count-2");
269 [Test]
270 public void Add_Duplicates ()
272 NonAbstractDBDataPermission dbdp = new NonAbstractDBDataPermission (PermissionState.None);
273 dbdp.Add (defaultConnectString, String.Empty, KeyRestrictionBehavior.AllowOnly);
274 dbdp.Add (defaultConnectString, String.Empty, KeyRestrictionBehavior.AllowOnly);
275 // no exception but a single element is kept
276 Assert.AreEqual (1, dbdp.ToXml ().Children.Count, "Count");
277 dbdp.Add (defaultConnectString, String.Empty, KeyRestrictionBehavior.PreventUsage);
279 dbdp.Clear ();
280 Assert.IsNull (dbdp.ToXml ().Children, "Clear");
283 [Test]
284 public void Add_Differents ()
286 NonAbstractDBDataPermission dbdp = new NonAbstractDBDataPermission (PermissionState.None);
287 dbdp.Add (defaultConnectString, String.Empty, KeyRestrictionBehavior.AllowOnly);
288 string connectString = "Data Source=127.0.0.1;Integrated Security=SSPI;Initial Catalog=Northwind;";
289 dbdp.Add (connectString, String.Empty, KeyRestrictionBehavior.AllowOnly);
290 Assert.AreEqual (2, dbdp.ToXml ().Children.Count, "Count");
292 dbdp.Clear ();
293 Assert.IsNull (dbdp.ToXml ().Children, "Clear");
296 [Test]
297 public void Add_Unrestricted ()
299 NonAbstractDBDataPermission dbdp = new NonAbstractDBDataPermission (PermissionState.Unrestricted);
300 Assert.IsTrue (dbdp.IsUnrestricted (), "IsUnrestricted-1");
301 // we lose unrestricted by adding an element
302 dbdp.Add (defaultConnectString, String.Empty, KeyRestrictionBehavior.AllowOnly);
303 Assert.IsFalse (dbdp.IsUnrestricted (), "IsUnrestricted-2");
304 // removing the element doesn't regain unrestricted status
305 dbdp.Clear ();
306 Assert.IsFalse (dbdp.IsUnrestricted (), "IsUnrestricted-3");
309 [Test]
310 public void CreateInstance ()
312 NonAbstractDBDataPermission dbdp = new NonAbstractDBDataPermission (PermissionState.Unrestricted);
313 Assert.AreEqual (typeof (NonAbstractDBDataPermission), dbdp.CreateInstance ().GetType (), "Same type");
317 [Test]
318 public void Intersect_Null ()
320 NonAbstractDBDataPermission elp = new NonAbstractDBDataPermission (PermissionState.None);
321 // No intersection with null
322 Assert.IsNull (elp.Intersect (null), "None N null");
325 [Test]
326 public void Intersect ()
328 NonAbstractDBDataPermission dbdp1 = new NonAbstractDBDataPermission (PermissionState.None);
329 NonAbstractDBDataPermission dbdp2 = new NonAbstractDBDataPermission (PermissionState.None);
331 // 1. None N None
332 NonAbstractDBDataPermission result = (NonAbstractDBDataPermission) dbdp1.Intersect (dbdp2);
333 Assert.IsNull (result, "Empty N Empty");
335 // 2. None N Entry
336 dbdp2.Add (defaultConnectString, String.Empty, KeyRestrictionBehavior.AllowOnly);
337 result = (NonAbstractDBDataPermission)dbdp1.Intersect (dbdp2);
338 Assert.IsNull (result, "Empty N Entry");
340 // 3. Entry N None
341 result = (NonAbstractDBDataPermission)dbdp2.Intersect (dbdp1);
342 Assert.IsNull (result, "Entry N Empty");
344 // 4. Unrestricted N None
345 NonAbstractDBDataPermission unr = new NonAbstractDBDataPermission (PermissionState.Unrestricted);
346 result = (NonAbstractDBDataPermission)unr.Intersect (dbdp1);
347 Check ("(Unrestricted N None)", result, false, false, 0);
349 // 5. None N Unrestricted
350 result = (NonAbstractDBDataPermission)dbdp1.Intersect (unr);
351 Check ("(None N Unrestricted)", result, false, false, 0);
353 // 6. Unrestricted N Unrestricted
354 result = (NonAbstractDBDataPermission)unr.Intersect (unr);
355 Check ("(Unrestricted N Unrestricted)", result, false, true, 0);
357 // 7. Unrestricted N Entry
358 result = (NonAbstractDBDataPermission)unr.Intersect (dbdp2);
359 Check ("(Unrestricted N Entry)", result, false, false, 1);
361 // 8. Entry N Unrestricted
362 result = (NonAbstractDBDataPermission)dbdp2.Intersect (unr);
363 Check ("(Entry N Unrestricted)", result, false, false, 1);
365 // 9. Entry2 N Entry2
366 result = (NonAbstractDBDataPermission)dbdp2.Intersect (dbdp2);
367 Check ("(Entry2 N Entry2)", result, false, false, 1);
369 // 10. Entry1 N Entry 2
370 dbdp1.Add (defaultConnectString2, String.Empty, KeyRestrictionBehavior.PreventUsage);
371 result = (NonAbstractDBDataPermission)dbdp1.Intersect (dbdp2);
372 Assert.IsNull (result, "(Entry1 N Entry2)");
374 // 11. Entry2 N Entry 1
375 result = (NonAbstractDBDataPermission)dbdp2.Intersect (dbdp1);
376 Assert.IsNull (result, "(Entry2 N Entry1)");
379 [Test]
380 public void Intersect_AllowBlankPassword ()
382 NonAbstractDBDataPermission ptrue = new NonAbstractDBDataPermission (PermissionState.None);
383 ptrue.AllowBlankPassword = true;
384 ptrue.Add (defaultConnectString, String.Empty, KeyRestrictionBehavior.AllowOnly);
385 NonAbstractDBDataPermission pfalse = new NonAbstractDBDataPermission (PermissionState.None);
386 pfalse.AllowBlankPassword = false;
387 pfalse.Add (defaultConnectString, String.Empty, KeyRestrictionBehavior.AllowOnly);
389 NonAbstractDBDataPermission intersect = (NonAbstractDBDataPermission)ptrue.Intersect (ptrue);
390 Check ("true N true", intersect, true, false, 1);
391 intersect = (NonAbstractDBDataPermission)ptrue.Intersect (pfalse);
392 Check ("true N false", intersect, false, false, 1);
393 intersect = (NonAbstractDBDataPermission)pfalse.Intersect (ptrue);
394 Check ("false N true", intersect, false, false, 1);
395 intersect = (NonAbstractDBDataPermission)pfalse.Intersect (pfalse);
396 Check ("false N false", intersect, false, false, 1);
399 [Test]
400 [ExpectedException (typeof (ArgumentException))]
401 public void Intersect_BadPermission ()
403 NonAbstractDBDataPermission dbdp = new NonAbstractDBDataPermission (PermissionState.Unrestricted);
404 dbdp.Intersect (new SecurityPermission (SecurityPermissionFlag.Assertion));
407 [Test]
408 public void IsSubset_Null ()
410 NonAbstractDBDataPermission dbdp = new NonAbstractDBDataPermission (PermissionState.None);
411 Assert.IsTrue (dbdp.IsSubsetOf (null), "Empty-null");
413 dbdp.Add (defaultConnectString, String.Empty, KeyRestrictionBehavior.AllowOnly);
414 Assert.IsFalse (dbdp.IsSubsetOf (null), "Element-null");
416 dbdp = new NonAbstractDBDataPermission (PermissionState.Unrestricted);
417 Assert.IsFalse (dbdp.IsSubsetOf (null), "Unrestricted-null");
420 [Test]
421 public void IsSubset ()
423 NonAbstractDBDataPermission empty = new NonAbstractDBDataPermission (PermissionState.None);
424 Assert.IsTrue (empty.IsSubsetOf (empty), "Empty-Empty");
426 NonAbstractDBDataPermission dbdp1 = new NonAbstractDBDataPermission (PermissionState.None);
427 dbdp1.Add (defaultConnectString, String.Empty, KeyRestrictionBehavior.AllowOnly);
428 Assert.IsTrue (empty.IsSubsetOf (dbdp1), "Empty-1");
429 Assert.IsFalse (dbdp1.IsSubsetOf (empty), "1-Empty");
430 Assert.IsTrue (dbdp1.IsSubsetOf (dbdp1), "1-1");
432 NonAbstractDBDataPermission dbdp2 = (NonAbstractDBDataPermission)dbdp1.Copy ();
433 dbdp2.Add (defaultConnectString2, String.Empty, KeyRestrictionBehavior.AllowOnly);
434 Assert.IsTrue (dbdp1.IsSubsetOf (dbdp2), "1-2");
435 Assert.IsFalse (dbdp2.IsSubsetOf (dbdp1), "2-1");
436 Assert.IsTrue (dbdp2.IsSubsetOf (dbdp2), "2-2");
438 NonAbstractDBDataPermission dbdp3 = new NonAbstractDBDataPermission (PermissionState.None);
439 dbdp3.Add (defaultConnectString, String.Empty, KeyRestrictionBehavior.PreventUsage);
440 Assert.IsTrue (dbdp3.IsSubsetOf (dbdp1), "3-1");
441 Assert.IsTrue (dbdp1.IsSubsetOf (dbdp3), "1-3");
442 Assert.IsTrue (dbdp3.IsSubsetOf (dbdp3), "3-3");
444 NonAbstractDBDataPermission unr = new NonAbstractDBDataPermission (PermissionState.Unrestricted);
445 Assert.IsTrue (dbdp1.IsSubsetOf (unr), "1-unrestricted");
446 Assert.IsFalse (unr.IsSubsetOf (dbdp1), "unrestricted-1");
447 Assert.IsTrue (dbdp2.IsSubsetOf (unr), "2-unrestricted");
448 Assert.IsFalse (unr.IsSubsetOf (dbdp2), "unrestricted-2");
449 Assert.IsTrue (dbdp3.IsSubsetOf (unr), "3-unrestricted");
450 Assert.IsFalse (unr.IsSubsetOf (dbdp3), "unrestricted-3");
451 Assert.IsTrue (unr.IsSubsetOf (unr), "unrestricted-unrestricted");
454 [Test]
455 public void IsSubsetOf_AllowBlankPassword ()
457 NonAbstractDBDataPermission ptrue = new NonAbstractDBDataPermission (PermissionState.None);
458 ptrue.AllowBlankPassword = true;
459 ptrue.Add (defaultConnectString, String.Empty, KeyRestrictionBehavior.AllowOnly);
460 NonAbstractDBDataPermission pfalse = new NonAbstractDBDataPermission (PermissionState.None);
461 pfalse.AllowBlankPassword = false;
462 pfalse.Add (defaultConnectString, String.Empty, KeyRestrictionBehavior.AllowOnly);
464 Assert.IsTrue (ptrue.IsSubsetOf (ptrue), "true subsetof true");
465 Assert.IsFalse (ptrue.IsSubsetOf (pfalse), "true subsetof false");
466 Assert.IsTrue (pfalse.IsSubsetOf (ptrue), "false subsetof true");
467 Assert.IsTrue (pfalse.IsSubsetOf (pfalse), "false subsetof false");
470 [Test]
471 public void IsSubsetOf_BothEmpty_KeyRestrictionBehavior ()
473 NonAbstractDBDataPermission pAllow = new NonAbstractDBDataPermission (PermissionState.None);
474 pAllow.Add (defaultConnectString, String.Empty, KeyRestrictionBehavior.AllowOnly);
475 NonAbstractDBDataPermission pPrevent = new NonAbstractDBDataPermission (PermissionState.None);
476 pPrevent.Add (defaultConnectString, String.Empty, KeyRestrictionBehavior.PreventUsage);
478 Assert.IsTrue (pAllow.IsSubsetOf (pAllow), "BothEmpty - pAllow subsetof pAllow");
479 Assert.IsTrue (pAllow.IsSubsetOf (pPrevent), "BothEmpty - pAllow subsetof pPrevent");
480 Assert.IsTrue (pPrevent.IsSubsetOf (pAllow), "BothEmpty - pPrevent subsetof pAllow");
481 Assert.IsTrue (pPrevent.IsSubsetOf (pPrevent), "BothEmpty - pPrevent subsetof pPrevent");
484 [Test]
485 public void IsSubsetOf_EmptyAllow_Prevent_KeyRestrictionBehavior ()
487 NonAbstractDBDataPermission pAllow = new NonAbstractDBDataPermission (PermissionState.None);
488 pAllow.Add (defaultConnectString, String.Empty, KeyRestrictionBehavior.AllowOnly);
489 NonAbstractDBDataPermission pPrevent = new NonAbstractDBDataPermission (PermissionState.None);
490 pPrevent.Add (defaultConnectString, "password=;", KeyRestrictionBehavior.PreventUsage);
492 Assert.IsTrue (pAllow.IsSubsetOf (pAllow), "EmptyAllow_Prevent - pAllow subsetof pAllow");
493 Assert.IsTrue (pAllow.IsSubsetOf (pPrevent), "EmptyAllow_Prevent - pAllow subsetof pPrevent");
494 Assert.IsTrue (pPrevent.IsSubsetOf (pAllow), "EmptyAllow_Prevent - pPrevent subsetof pAllow");
495 Assert.IsTrue (pPrevent.IsSubsetOf (pPrevent), "EmptyAllow_Prevent - pPrevent subsetof pPrevent");
498 [Test]
499 public void IsSubsetOf_Allow_EmptyPrevent_KeyRestrictionBehavior ()
501 NonAbstractDBDataPermission pAllow = new NonAbstractDBDataPermission (PermissionState.None);
502 pAllow.Add (defaultConnectString, "data source=;", KeyRestrictionBehavior.AllowOnly);
503 NonAbstractDBDataPermission pPrevent = new NonAbstractDBDataPermission (PermissionState.None);
504 pPrevent.Add (defaultConnectString, String.Empty, KeyRestrictionBehavior.PreventUsage);
506 Assert.IsTrue (pAllow.IsSubsetOf (pAllow), "Allow_EmptyPrevent - pAllow subsetof pAllow");
507 Assert.IsTrue (pAllow.IsSubsetOf (pPrevent), "Allow_EmptyPrevent - pAllow subsetof pPrevent");
508 Assert.IsTrue (pPrevent.IsSubsetOf (pAllow), "Allow_EmptyPrevent - pPrevent subsetof pAllow");
509 Assert.IsTrue (pPrevent.IsSubsetOf (pPrevent), "Allow_EmptyPrevent - pPrevent subsetof pPrevent");
512 [Test]
513 public void IsSubsetOf_AllowPreventSame_KeyRestrictionBehavior ()
515 NonAbstractDBDataPermission pAllow = new NonAbstractDBDataPermission (PermissionState.None);
516 pAllow.Add (defaultConnectString, "password=;", KeyRestrictionBehavior.AllowOnly);
517 NonAbstractDBDataPermission pPrevent = new NonAbstractDBDataPermission (PermissionState.None);
518 pPrevent.Add (defaultConnectString, "password=;", KeyRestrictionBehavior.PreventUsage);
520 Assert.IsTrue (pAllow.IsSubsetOf (pAllow), "AllowPreventSame - pAllow subsetof pAllow");
521 Assert.IsTrue (pAllow.IsSubsetOf (pPrevent), "AllowPreventSame - pAllow subsetof pPrevent");
522 Assert.IsTrue (pPrevent.IsSubsetOf (pAllow), "AllowPreventSame - pPrevent subsetof pAllow");
523 Assert.IsTrue (pPrevent.IsSubsetOf (pPrevent), "AllowPreventSame - pPrevent subsetof pPrevent");
526 [Test]
527 public void IsSubsetOf_AllowPreventDifferent_KeyRestrictionBehavior ()
529 NonAbstractDBDataPermission pAllow1 = new NonAbstractDBDataPermission (PermissionState.None);
530 pAllow1.Add (defaultConnectString, "security=;", KeyRestrictionBehavior.AllowOnly);
531 NonAbstractDBDataPermission pAllow2 = new NonAbstractDBDataPermission (PermissionState.None);
532 pAllow2.Add (defaultConnectString, "password=;", KeyRestrictionBehavior.AllowOnly);
533 NonAbstractDBDataPermission pPrevent1 = new NonAbstractDBDataPermission (PermissionState.None);
534 pPrevent1.Add (defaultConnectString, "security=;", KeyRestrictionBehavior.PreventUsage);
535 NonAbstractDBDataPermission pPrevent2 = new NonAbstractDBDataPermission (PermissionState.None);
536 pPrevent2.Add (defaultConnectString, "password=;", KeyRestrictionBehavior.PreventUsage);
538 Assert.IsTrue (pAllow1.IsSubsetOf (pAllow1), "AllowPreventDifferent - pAllow subsetof pAllow");
539 Assert.IsTrue (pAllow1.IsSubsetOf (pPrevent2), "AllowPreventDifferent - pAllow subsetof pPrevent");
540 Assert.IsTrue (pPrevent1.IsSubsetOf (pAllow2), "AllowPreventDifferent - pPrevent subsetof pAllow");
541 Assert.IsTrue (pPrevent1.IsSubsetOf (pPrevent2), "AllowPreventDifferent - pPrevent subsetof pPrevent");
544 [Test]
545 [ExpectedException (typeof (ArgumentException))]
546 public void IsSubsetOf_BadPermission ()
548 NonAbstractDBDataPermission dbdp = new NonAbstractDBDataPermission (PermissionState.Unrestricted);
549 dbdp.IsSubsetOf (new SecurityPermission (SecurityPermissionFlag.Assertion));
552 [Test]
553 public void Union_Null ()
555 NonAbstractDBDataPermission dbdp = new NonAbstractDBDataPermission (PermissionState.None);
556 NonAbstractDBDataPermission union = (NonAbstractDBDataPermission) dbdp.Union (null);
557 Check ("Empty U null", dbdp, false, false, 0);
559 dbdp.AllowBlankPassword = true;
560 dbdp.Add (defaultConnectString, String.Empty, KeyRestrictionBehavior.AllowOnly);
561 union = (NonAbstractDBDataPermission) dbdp.Union (null);
562 Check ("Element U null", dbdp, true, false, 1);
564 dbdp = new NonAbstractDBDataPermission (PermissionState.Unrestricted);
565 union = (NonAbstractDBDataPermission) dbdp.Union (null);
566 Check ("Unrestricted U null", dbdp, false, true, 0);
569 [Test]
570 public void Union ()
572 NonAbstractDBDataPermission empty = new NonAbstractDBDataPermission (PermissionState.None);
573 NonAbstractDBDataPermission union = (NonAbstractDBDataPermission) empty.Union (empty);
574 Assert.IsNull (union, "Empty U Empty");
576 NonAbstractDBDataPermission dbdp1 = new NonAbstractDBDataPermission (PermissionState.None);
577 dbdp1.Add (defaultConnectString, String.Empty, KeyRestrictionBehavior.AllowOnly);
578 union = (NonAbstractDBDataPermission) empty.Union (dbdp1);
579 Check ("Empty U 1", union, false, false, 1);
581 NonAbstractDBDataPermission dbdp2 = (NonAbstractDBDataPermission)dbdp1.Copy ();
582 dbdp2.Add (defaultConnectString2, String.Empty, KeyRestrictionBehavior.AllowOnly);
583 union = (NonAbstractDBDataPermission) dbdp1.Union (dbdp2);
584 Check ("1 U 2", union, false, false, 2);
586 NonAbstractDBDataPermission dbdp3 = new NonAbstractDBDataPermission (PermissionState.None);
587 dbdp3.Add (defaultConnectString, String.Empty, KeyRestrictionBehavior.PreventUsage);
588 union = (NonAbstractDBDataPermission) dbdp2.Union (dbdp3);
589 Check ("2 U 3", union, false, false, 2);
591 NonAbstractDBDataPermission dbdp4 = new NonAbstractDBDataPermission (PermissionState.None);
592 dbdp4.Add (defaultConnectString, "Data Source=;", KeyRestrictionBehavior.PreventUsage);
593 union = (NonAbstractDBDataPermission) dbdp3.Union (dbdp4);
594 Check ("3 U 4", union, false, false, 1);
596 NonAbstractDBDataPermission unr = new NonAbstractDBDataPermission (PermissionState.Unrestricted);
597 union = (NonAbstractDBDataPermission) unr.Union (empty);
598 Check ("unrestricted U empty", union, false, true, 0);
600 union = (NonAbstractDBDataPermission)unr.Union (dbdp4);
601 Check ("unrestricted U 4", union, false, true, 0);
604 [Test]
605 public void Union_AllowBlankPassword ()
607 NonAbstractDBDataPermission ptrue = new NonAbstractDBDataPermission (PermissionState.None);
608 ptrue.AllowBlankPassword = true;
609 ptrue.Add (defaultConnectString, String.Empty, KeyRestrictionBehavior.AllowOnly);
610 NonAbstractDBDataPermission pfalse = new NonAbstractDBDataPermission (PermissionState.None);
611 pfalse.AllowBlankPassword = false;
612 pfalse.Add (defaultConnectString, String.Empty, KeyRestrictionBehavior.AllowOnly);
614 NonAbstractDBDataPermission union = (NonAbstractDBDataPermission) ptrue.Union (ptrue);
615 Check ("true U true", union, true, false, 1);
616 union = (NonAbstractDBDataPermission)ptrue.Union (pfalse);
617 Check ("true U false", union, true, false, 1);
618 union = (NonAbstractDBDataPermission)pfalse.Union (ptrue);
619 Check ("false U true", union, true, false, 1);
620 union = (NonAbstractDBDataPermission)pfalse.Union (pfalse);
621 Check ("false U false", union, false, false, 1);
624 [Test]
625 [ExpectedException (typeof (ArgumentException))]
626 public void Union_BadPermission ()
628 NonAbstractDBDataPermission dbdp1 = new NonAbstractDBDataPermission (PermissionState.Unrestricted);
629 dbdp1.Union (new SecurityPermission (SecurityPermissionFlag.Assertion));
632 [Test]
633 [ExpectedException (typeof (ArgumentNullException))]
634 public void FromXml_Null ()
636 NonAbstractDBDataPermission elp = new NonAbstractDBDataPermission (PermissionState.None);
637 elp.FromXml (null);
640 [Test]
641 [ExpectedException (typeof (ArgumentException))]
642 public void FromXml_WrongTag ()
644 NonAbstractDBDataPermission elp = new NonAbstractDBDataPermission (PermissionState.None);
645 SecurityElement se = elp.ToXml ();
646 se.Tag = "IMono";
647 elp.FromXml (se);
650 [Test]
651 [ExpectedException (typeof (ArgumentException))]
652 public void FromXml_WrongTagCase ()
654 NonAbstractDBDataPermission elp = new NonAbstractDBDataPermission (PermissionState.None);
655 SecurityElement se = elp.ToXml ();
656 se.Tag = "IPERMISSION"; // instead of IPermission
657 elp.FromXml (se);
660 [Test]
661 public void FromXml_WrongClass ()
663 NonAbstractDBDataPermission elp = new NonAbstractDBDataPermission (PermissionState.None);
664 SecurityElement se = elp.ToXml ();
666 SecurityElement w = new SecurityElement (se.Tag);
667 w.AddAttribute ("class", "Wrong" + se.Attribute ("class"));
668 w.AddAttribute ("version", se.Attribute ("version"));
669 elp.FromXml (w);
670 // doesn't care of the class name at that stage
671 // anyway the class has already be created so...
674 [Test]
675 public void FromXml_NoClass ()
677 NonAbstractDBDataPermission elp = new NonAbstractDBDataPermission (PermissionState.None);
678 SecurityElement se = elp.ToXml ();
680 SecurityElement w = new SecurityElement (se.Tag);
681 w.AddAttribute ("version", se.Attribute ("version"));
682 elp.FromXml (w);
683 // doesn't even care of the class attribute presence
686 [Test]
687 [ExpectedException (typeof (ArgumentException))]
688 public void FromXml_WrongVersion ()
690 NonAbstractDBDataPermission elp = new NonAbstractDBDataPermission (PermissionState.None);
691 SecurityElement se = elp.ToXml ();
692 se.Attributes.Remove ("version");
693 se.Attributes.Add ("version", "2");
694 elp.FromXml (se);
697 [Test]
698 public void FromXml_NoVersion ()
700 NonAbstractDBDataPermission elp = new NonAbstractDBDataPermission (PermissionState.None);
701 SecurityElement se = elp.ToXml ();
703 SecurityElement w = new SecurityElement (se.Tag);
704 w.AddAttribute ("class", se.Attribute ("class"));
705 elp.FromXml (w);