source: TI12-security/trunk/NDG_XACML/ndg/xacml/test/test_context.py @ 6802

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

Fixed AttributeValueReader? to handler attribute value derived types correctly.

Line 
1#!/usr/bin/env python
2"""NDG XACML Context unit test package
3
4NERC DataGrid Project
5"""
6__author__ = "P J Kershaw"
7__date__ = "26/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.test import XACML_NDGTEST1_FILEPATH
19from ndg.xacml.parsers.etree.factory import ReaderFactory
20from ndg.xacml.core.context.pdpinterface import PDPInterface
21from ndg.xacml.core.context.pdp import PDP
22from ndg.xacml.core.context.handler import AbstractContextHandler
23from ndg.xacml.core.attribute import Attribute
24from ndg.xacml.core.attributevalue import (AttributeValueClassFactory, 
25                                           AttributeValue)
26from ndg.xacml.core.context.request import Request
27from ndg.xacml.core.context.response import Response
28from ndg.xacml.core.context.result import Result, Decision
29from ndg.xacml.core.context.subject import Subject
30from ndg.xacml.core.context.resource import Resource
31from ndg.xacml.core.context.action import Action
32
33               
34class TestContextHandler(AbstractContextHandler):
35    """Test implementation of Context Handler"""
36   
37    def __init__(self):
38        super(TestContextHandler, self).__init__()
39        self.pip = None       
40       
41    def handlePEPRequest(self, myRequest):
42       
43        # Convert myRequest to XACML context request
44        request = myRequest
45       
46        if self.pdp is None:
47            raise TypeError('No "pdp" attribute set')
48       
49        response = self.pdp.evaluate(request)
50       
51        # Convert XACML context response to domain specific request
52        myResponse = response
53       
54        return myResponse
55
56
57class XACMLContextTestCase(unittest.TestCase):
58    """Test PDP, PAP, PIP and Context handler"""
59   
60    def _createRequestCtx(self):
61        request = Request()
62        subject = Subject()
63       
64        attributeValueFactory = AttributeValueClassFactory()
65       
66        openidSubjectAttribute = Attribute()
67        roleAttribute = Attribute()
68       
69        openidSubjectAttribute.attributeId = "urn:esg:openid"
70        openidSubjectAttribute.dataType = \
71                                    'http://www.w3.org/2001/XMLSchema#anyURI'
72
73        StringAttributeValue = attributeValueFactory(
74                                    'http://www.w3.org/2001/XMLSchema#anyURI')
75        openidSubjectAttribute.attributeValues.append(StringAttributeValue())
76   
77        openidSubjectAttribute.attributeValues[-1].dataType = \
78                                    'http://www.w3.org/2001/XMLSchema#anyURI'
79        openidSubjectAttribute.attributeValues[-1].value = \
80                                    'https://my.name.somewhere.ac.uk'
81       
82        subject.attributes.append(openidSubjectAttribute)
83
84        roleAttribute.attributeId = "urn:ndg:security:authz:1.0:attr"
85        roleAttribute.dataType = 'http://www.w3.org/2001/XMLSchema#string'
86        roleAttribute.attributeValues.append(StringAttributeValue())
87        roleAttribute.attributeValues[-1].dataType = \
88                                    'http://www.w3.org/2001/XMLSchema#string'
89        roleAttribute.attributeValues[-1].value = 'staff' 
90       
91        subject.attributes.append(roleAttribute)
92                                 
93        request.subjects.append(subject)
94       
95        resource = Resource()
96        resourceAttribute = Attribute()
97        resource.attributes.append(resourceAttribute)
98       
99        resourceAttribute.attributeId = \
100                            "urn:oasis:names:tc:xacml:1.0:resource:resource-id"
101                           
102        resourceAttribute.dataType = "http://www.w3.org/2001/XMLSchema#anyURI"
103        resourceAttribute.attributeValues.append(StringAttributeValue())
104        resourceAttribute.attributeValues[-1].value = \
105                                        'http://www.localhost/test_securedURI'
106
107        request.resources.append(resource)
108       
109        request.action = Action()
110        actionAttribute = Attribute()
111        request.action.attributes.append(actionAttribute)
112       
113        actionAttribute.attributeId = \
114                                "urn:oasis:names:tc:xacml:1.0:action:action-id"
115        actionAttribute.dataType = "http://www.w3.org/2001/XMLSchema#string"
116        actionAttribute.attributeValues.append(StringAttributeValue())
117        actionAttribute.attributeValues[-1].value = 'read'
118       
119        return request
120   
121    def test01CreateRequest(self):
122        requestCtx = self._createRequestCtx()
123        self.assert_(requestCtx)
124       
125    def test02CreateResponse(self):
126        response = Response()
127        result = Result()
128        response.results.append(result)
129        result.decision = Decision()
130        result.decision.value = Decision.NOT_APPLICABLE
131       
132    def test03AbstractCtxHandler(self):
133        self.assertRaises(TypeError, AbstractContextHandler)
134       
135    def test04CreateCtxHandler(self):
136        ctxHandler = TestContextHandler()
137       
138    def test04PDPInterface(self):
139        self.assertRaises(TypeError, PDPInterface)
140       
141    def test05CreatePDP(self):
142        pdp = PDP()
143        self.assert_(pdp)
144       
145    def _createPDPfromPolicy(self):
146        pdp = PDP.fromPolicySource(XACML_NDGTEST1_FILEPATH, ReaderFactory)
147        return pdp
148       
149    def test06CreatePDPfromPolicy(self):
150        pdp = self._createPDPfromPolicy()
151        self.assert_(pdp)
152       
153    def test07EvaluatePDP(self):
154        request = self._createRequestCtx()
155        pdp = self._createPDPfromPolicy()
156        response = pdp.evaluate(request)
157        self.assert_(response)
158
159       
160if __name__ == "__main__":
161    unittest.main()
Note: See TracBrowser for help on using the repository browser.