ACL uses enums, some more tests, other stuff.
[python_utils.git] / tests / acl_test.py
1 #!/usr/bin/env python3
2
3 import re
4 import unittest
5
6 import acl
7 import bootstrap
8
9
10 class TestSimpleACL(unittest.TestCase):
11
12     def test_set_based_acl(self):
13         even = acl.SetBasedACL(
14             allow_set = set([2, 4, 6, 8, 10]),
15             deny_set = set([1, 3, 5, 7, 9]),
16             order_to_check_allow_deny = acl.Order.ALLOW_DENY,
17             default_answer = False
18         )
19         self.assertTrue(even(2))
20         self.assertFalse(even(3))
21         self.assertFalse(even(-4))
22
23     def test_wildcard_based_acl(self):
24         a_or_b = acl.StringWildcardBasedACL(
25             allowed_patterns = ['a*', 'b*'],
26             order_to_check_allow_deny = acl.Order.ALLOW_DENY,
27             default_answer = False
28         )
29         self.assertTrue(a_or_b('aardvark'))
30         self.assertTrue(a_or_b('baboon'))
31         self.assertFalse(a_or_b('cheetah'))
32
33     def test_re_based_acl(self):
34         weird = acl.StringREBasedACL(
35             denied_regexs = [
36                 re.compile('^a.*a$'),
37                 re.compile('^b.*b$')
38             ],
39             order_to_check_allow_deny = acl.Order.DENY_ALLOW,
40             default_answer = True
41         )
42         self.assertTrue(weird('aardvark'))
43         self.assertFalse(weird('anaconda'))
44         self.assertFalse(weird('blackneb'))
45         self.assertTrue(weird('crow'))
46
47     def test_compound_acls_disjunction(self):
48         a_b_c = acl.StringWildcardBasedACL(
49             allowed_patterns = ['a*', 'b*', 'c*'],
50             order_to_check_allow_deny = acl.Order.ALLOW_DENY,
51             default_answer = False
52         )
53         c_d_e = acl.StringWildcardBasedACL(
54             allowed_patterns = ['c*', 'd*', 'e*'],
55             order_to_check_allow_deny = acl.Order.ALLOW_DENY,
56             default_answer = False
57         )
58         disjunction = acl.AnyCompoundACL(
59             subacls = [a_b_c, c_d_e],
60             order_to_check_allow_deny = acl.Order.ALLOW_DENY,
61             default_answer = False,
62         )
63         self.assertTrue(disjunction('aardvark'))
64         self.assertTrue(disjunction('caribou'))
65         self.assertTrue(disjunction('eagle'))
66         self.assertFalse(disjunction('newt'))
67
68     def test_compound_acls_conjunction(self):
69         a_b_c = acl.StringWildcardBasedACL(
70             allowed_patterns = ['a*', 'b*', 'c*'],
71             order_to_check_allow_deny = acl.Order.ALLOW_DENY,
72             default_answer = False
73         )
74         c_d_e = acl.StringWildcardBasedACL(
75             allowed_patterns = ['c*', 'd*', 'e*'],
76             order_to_check_allow_deny = acl.Order.ALLOW_DENY,
77             default_answer = False
78         )
79         conjunction = acl.AllCompoundACL(
80             subacls = [a_b_c, c_d_e],
81             order_to_check_allow_deny = acl.Order.ALLOW_DENY,
82             default_answer = False,
83         )
84         self.assertFalse(conjunction('aardvark'))
85         self.assertTrue(conjunction('caribou'))
86         self.assertTrue(conjunction('condor'))
87         self.assertFalse(conjunction('eagle'))
88         self.assertFalse(conjunction('newt'))
89
90
91 if __name__ == '__main__':
92     unittest.main = bootstrap.initialize(unittest.main)
93     unittest.main()