source: TI12-security/trunk/NDG_XACML/ndg/xacml/test/test_policy.py @ 6781

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI12-security/trunk/NDG_XACML/ndg/xacml/test/test_policy.py@6781
Revision 6781, 11.4 KB checked in by pjkersha, 10 years ago (diff)

Corrected name

Line 
1#!/usr/bin/env python
2"""NDG XACML Policy unit test package
3
4NERC DataGrid Project
5"""
6__author__ = "P J Kershaw"
7__date__ = "16/03/10"
8__copyright__ = "(C) 2010 Science and Technology Facilities Council"
9__contact__ = "Philip.Kershaw@stfc.ac.uk"
10__license__ = "BSD - see LICENSE file in top-level directory"
11__contact__ = "Philip.Kershaw@stfc.ac.uk"
12__revision__ = "$Id: $"
13import unittest
14from os import path
15import logging
16logging.basicConfig(level=logging.DEBUG)
17
18from ndg.xacml.core.policy import Policy
19from ndg.xacml.core.attributedesignator import SubjectAttributeDesignator
20from ndg.xacml.core.attributeselector import AttributeSelector
21from ndg.xacml.parsers.etree.factory import ReaderFactory
22
23from ndg.xacml.test import XACML_NDGTEST1_FILEPATH, THIS_DIR
24
25
26class XACMLPolicyTestCase(unittest.TestCase):
27    XACML_TEST1_FILENAME = "rule1.xml"
28    XACML_TEST1_FILEPATH = path.join(THIS_DIR, XACML_TEST1_FILENAME)
29    XACML_TEST2_FILENAME = "rule2.xml"
30    XACML_TEST2_FILEPATH = path.join(THIS_DIR, XACML_TEST2_FILENAME)
31    XACML_TEST3_FILENAME = "rule3.xml"
32    XACML_TEST3_FILEPATH = path.join(THIS_DIR, XACML_TEST3_FILENAME)
33    XACML_TEST4_FILENAME = "rule4.xml"
34    XACML_TEST4_FILEPATH = path.join(THIS_DIR, XACML_TEST4_FILENAME)
35   
36    def test01ETreeParseRule1Policy(self):
37        PolicyReader = ReaderFactory.getReader(Policy)
38        policy = PolicyReader.parse(XACMLPolicyTestCase.XACML_TEST1_FILEPATH)
39        self.assert_(policy)
40       
41        self.assert_(
42            policy.policyId == "urn:oasis:names:tc:example:SimplePolicy1")
43       
44        self.assert_(policy.ruleCombiningAlgId == \
45        "urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:deny-overrides")
46       
47        self.assert_(
48            "Med Example Corp access control policy" in policy.description)
49       
50        self.assert_(len(policy.target.subjects) == 0)
51       
52        self.assert_(policy.rules[0].id == \
53                     "urn:oasis:names:tc:xacml:2.0:example:SimpleRule1")
54       
55        self.assert_(policy.rules[0].effect == 'Permit')
56       
57        self.assert_(
58            'Any subject with an e-mail name in the med.example.com domain' in \
59            policy.rules[0].description)
60       
61        self.assert_(len(policy.rules[0].target.subjects) == 1)
62        self.assert_(len(policy.rules[0].target.actions) == 0)
63        self.assert_(len(policy.rules[0].target.resources) == 0)
64        self.assert_(len(policy.rules[0].target.environments) == 0)
65       
66        self.assert_(len(policy.rules[0].target.subjects[0
67                                                         ].subjectMatches) == 1)
68       
69        self.assert_(policy.rules[0].target.subjects[0].subjectMatches[0
70            ].matchId == \
71            "urn:oasis:names:tc:xacml:1.0:function:rfc822Name-match")
72       
73        self.assert_(policy.rules[0].target.subjects[0].subjectMatches[0
74            ].attributeValue.dataType == \
75            "urn:oasis:names:tc:xacml:1.0:data-type:rfc822Name")
76       
77        self.assert_(policy.rules[0].target.subjects[0].subjectMatches[0
78            ].attributeDesignator.dataType == \
79            "urn:oasis:names:tc:xacml:1.0:data-type:rfc822Name")
80       
81        # Attribute ID
82        self.assert_(policy.rules[0].target.subjects[0].subjectMatches[0
83            ].attributeDesignator.attributeId == \
84            "urn:oasis:names:tc:xacml:1.0:subject:subject-id")
85         
86    def test02ETreeParseRule2Policy(self):
87        PolicyReader = ReaderFactory.getReader(Policy)
88        policy = PolicyReader.parse(XACMLPolicyTestCase.XACML_TEST2_FILEPATH)
89        self.assert_(policy)
90       
91        self.assert_(
92        policy.policyId == "urn:oasis:names:tc:xacml:2.0:example:policyid:2")
93       
94        self.assert_(policy.ruleCombiningAlgId == \
95        "urn:oasis:names:tc:xacml:1.0:rule-combining-algorithm:deny-overrides")
96       
97        self.assert_(policy.description is None)
98       
99        self.assert_(len(policy.target.actions) == 0)
100       
101        self.assert_(policy.rules[0].id == \
102                     "urn:oasis:names:tc:xacml:2.0:example:ruleid:2")
103       
104        self.assert_(policy.rules[0].effect == 'Permit')
105       
106        self.assert_(policy.rules[0].description == """\
107A person may read any medical record in the
108            http://www.med.example.com/records.xsd namespace
109            for which he or she is the designated parent or guardian,
110            and for which the patient is under 16 years of age""")
111       
112        self.assert_(len(policy.rules[0].target.subjects) == 0)
113        self.assert_(len(policy.rules[0].target.actions) == 1)
114        self.assert_(len(policy.rules[0].target.resources) == 1)
115        self.assert_(len(policy.rules[0].target.environments) == 0)
116       
117        self.assert_(len(policy.rules[0].target.resources[0
118                                                    ].resourceMatches) == 2)
119       
120        self.assert_(policy.rules[0].target.resources[0].resourceMatches[0
121            ].matchId == "urn:oasis:names:tc:xacml:1.0:function:string-equal")
122       
123        self.assert_(policy.rules[0].target.resources[0].resourceMatches[0
124            ].attributeValue.dataType == \
125                                    "http://www.w3.org/2001/XMLSchema#string")
126       
127        self.assert_(policy.rules[0].target.resources[0].resourceMatches[0
128            ].attributeValue.value == 'urn:med:example:schemas:record')
129       
130        self.assert_(policy.rules[0].target.resources[0].resourceMatches[0
131            ].attributeDesignator.dataType == \
132                                    "http://www.w3.org/2001/XMLSchema#string")
133       
134        self.assert_(policy.rules[0].target.resources[0].resourceMatches[1
135            ].attributeDesignator.attributeId == \
136                            "urn:oasis:names:tc:xacml:1.0:resource:xpath")
137        self.assert_(policy.rules[0].target.resources[0].resourceMatches[1
138            ].matchId == \
139                "urn:oasis:names:tc:xacml:1.0:function:xpath-node-match")
140       
141        self.assert_(policy.rules[0].target.resources[0].resourceMatches[1
142            ].attributeValue.dataType == \
143                                    "http://www.w3.org/2001/XMLSchema#string")
144       
145        self.assert_(policy.rules[0].target.resources[0].resourceMatches[1
146            ].attributeValue.value == '/md:record')
147       
148        self.assert_(policy.rules[0].target.resources[0].resourceMatches[1
149            ].attributeDesignator.dataType == \
150                                    "http://www.w3.org/2001/XMLSchema#string")
151       
152        self.assert_(policy.rules[0].target.resources[0].resourceMatches[1
153            ].attributeDesignator.attributeId == \
154                                "urn:oasis:names:tc:xacml:1.0:resource:xpath")
155       
156        # Verify Action
157        self.assert_(len(policy.rules[0].target.actions[0
158                                                    ].actionMatches) == 1)
159       
160        self.assert_(policy.rules[0].target.actions[0].actionMatches[0
161            ].matchId == "urn:oasis:names:tc:xacml:1.0:function:string-equal")
162       
163        self.assert_(policy.rules[0].target.actions[0].actionMatches[0
164            ].attributeValue.dataType == \
165                                    "http://www.w3.org/2001/XMLSchema#string")
166       
167        self.assert_(policy.rules[0].target.actions[0].actionMatches[0
168            ].attributeValue.value == "read")
169       
170        self.assert_(policy.rules[0].target.actions[0].actionMatches[0
171            ].attributeDesignator.dataType == \
172                                    "http://www.w3.org/2001/XMLSchema#string")
173       
174        self.assert_(policy.rules[0].target.actions[0].actionMatches[0
175            ].attributeDesignator.attributeId == \
176                            "urn:oasis:names:tc:xacml:1.0:action:action-id")
177
178        self.assert_(policy.rules[0].condition)       
179        self.assert_(policy.rules[0].condition.expression.functionId == \
180                     "urn:oasis:names:tc:xacml:1.0:function:and")
181       
182        self.assert_(len(policy.rules[0].condition.expression.expressions) == 1)
183       
184        self.assert_(policy.rules[0].condition.expression.expressions[0
185            ].functionId == \
186                'urn:oasis:names:tc:xacml:1.0:function:string-equal')
187       
188        self.assert_(len(policy.rules[0].condition.expression.expressions) == 1)
189       
190        self.assert_(len(policy.rules[0].condition.expression.expressions[0
191                     ].expressions) == 2)
192       
193        self.assert_(policy.rules[0].condition.expression.expressions[0
194            ].expressions[0].functionId == \
195                "urn:oasis:names:tc:xacml:1.0:function:string-one-and-only")
196       
197        self.assert_(isinstance(
198                        policy.rules[0].condition.expression.expressions[0
199                            ].expressions[0
200                            ].expressions[0], SubjectAttributeDesignator))
201       
202        self.assert_(policy.rules[0].condition.expression.expressions[0
203                            ].expressions[0
204                            ].expressions[0].attributeId == \
205                            "urn:oasis:names:tc:xacml:2.0:example:attribute:"
206                            "parent-guardian-id")
207
208        self.assert_(policy.rules[0].condition.expression.expressions[0
209                            ].expressions[0
210                            ].expressions[0].dataType == \
211                            "http://www.w3.org/2001/XMLSchema#string")
212       
213        self.assert_(policy.rules[0].condition.expression.expressions[0
214                            ].expressions[0
215                            ].expressions[0].attributeId == \
216                            "urn:oasis:names:tc:xacml:2.0:example:attribute:"
217                            "parent-guardian-id")
218       
219        self.assert_(isinstance(policy.rules[0
220                            ].condition.expression.expressions[0
221                            ].expressions[1
222                            ].expressions[0], AttributeSelector))
223       
224        self.assert_(policy.rules[0
225                            ].condition.expression.expressions[0
226                            ].expressions[1
227                            ].expressions[0].requestContextPath == \
228                            "//md:record/md:parentGuardian/md:parentGuardianId/"
229                            "text()")
230       
231        self.assert_(policy.rules[0
232                            ].condition.expression.expressions[0
233                            ].expressions[1
234                            ].expressions[0].dataType == \
235                            "http://www.w3.org/2001/XMLSchema#string")
236
237    def test03ETreeParseRule3Policy(self):
238        PolicyReader = ReaderFactory.getReader(Policy)
239       
240        try:
241            policy = PolicyReader.parse(XACMLPolicyTestCase.XACML_TEST3_FILEPATH)
242            self.assert_(policy)
243        except NotImplementedError, e:
244            print("Expecting Obligations not implemented exception: %s" %e)
245                   
246    def test04ETreeParseRule4Policy(self):
247        PolicyReader = ReaderFactory.getReader(Policy)
248        policy = PolicyReader.parse(XACMLPolicyTestCase.XACML_TEST4_FILEPATH)
249        self.assert_(policy)
250                   
251    def test05ETreeParseNdg1Policy(self):
252        # Example policy for URI Regular expression based matching of
253        # resources for NDG
254        PolicyReader = ReaderFactory.getReader(Policy)
255        policy = PolicyReader.parse(XACML_NDGTEST1_FILEPATH)
256        self.assert_(policy)   
257
258       
259if __name__ == "__main__":
260    unittest.main()
Note: See TracBrowser for help on using the repository browser.