blob: 5f1dca099c9b0ed0f722666d5865176154d9a3cc [file] [log] [blame]
Sapan Bhatiadb183c22017-06-23 02:47:42 -07001import unittest
2from xosgenx.generator import XOSGenerator
3from helpers import FakeArgs, XProtoTestHelpers
4import pdb
5
6"""
7The tests below convert the policy logic expression
8into Python, set up an appropriate environment and execute the Python.
9"""
10
11class XProtoPolicyTest(unittest.TestCase):
12 def test_constant(self):
13 xproto = \
14"""
15 policy true_policy < True >
16"""
17
18 target = XProtoTestHelpers.write_tmp_target("{{ proto.policies.true_policy }}")
19
20 args = FakeArgs()
21 args.inputs = xproto
22 args.target = target
23
24 output = XOSGenerator.generate(args).replace('t','T')
25 self.assertTrue(eval(output))
26
27 def test_equal(self):
28 xproto = \
29"""
30 policy slice_user < slice.user = obj.user >
31"""
32
33 target = XProtoTestHelpers.write_tmp_target("{{ proto.policies.slice_user }}")
34 args = FakeArgs()
35 args.inputs = xproto
36 args.target = target
37
38 output = XOSGenerator.generate(args)
39
40 slice = FakeArgs()
41 slice.user = 'twin'
42 obj = FakeArgs()
43 obj.user = 'twin'
44
45 (op, operands), = eval(output).items()
46 expr = op.join(operands).replace('=','==')
47
48 self.assertTrue(eval(expr))
49
50 def test_bin(self):
51 xproto = \
52"""
53 policy slice_admin < slice.is_admin | obj.empty >
54"""
55 target = XProtoTestHelpers.write_tmp_target("{{ proto.policies.slice_admin }}")
56 args = FakeArgs()
57 args.inputs = xproto
58 args.target = target
59
60 output = XOSGenerator.generate(args)
61
62 slice = FakeArgs()
63 slice.is_admin = False
64 obj = FakeArgs()
65 obj.empty = []
66
67 (op, operands), = eval(output).items()
68 expr = op.join(operands).replace('|',' or ')
69
70 self.assertFalse(eval(expr))
71
72
73 def test_exists(self):
74 xproto = \
75"""
76 policy privilege < exists Privilege: Privilege.object_id = obj.id >
77"""
78
79 target = XProtoTestHelpers.write_tmp_target("{{ proto.policies.privilege }} ")
80 args = FakeArgs()
81 args.inputs = xproto
82 args.target = target
83
84 output = XOSGenerator.generate(args)
85
86 Privilege = FakeArgs()
87 Privilege.object_id = 1
88 obj = FakeArgs()
89 obj.id = 1
90
91 (op, operands), = eval(output).items()
92 (op2, operands2), = operands[1].items()
93 expr = op2.join(operands2).replace('=','==')
94
95 self.assertTrue(eval(expr))
96
97 def test_forall(self):
98 # This one we only parse
99 xproto = \
100"""
101 policy instance < forall Instance: exists Credential: Credential.obj_id = Instance.obj_id >
102"""
103
104 target = XProtoTestHelpers.write_tmp_target("{{ proto.policies.instance }}")
105
106 args = FakeArgs()
107 args.inputs = xproto
108 args.target = target
109
110 output = XOSGenerator.generate(args)
111 (op, operands), = eval(output).items()
112
113 self.assertEqual(op,'forall')
114
115
116if __name__ == '__main__':
117 unittest.main()
118
119