Changeset 7666 for TI12-security


Ignore:
Timestamp:
28/10/10 16:00:42 (9 years ago)
Author:
pjkersha
Message:

Started testing PDP with custom Group/Role? Attribute Value type. Custom match and Bag functions are needed to enable evaluation of rules using the custom type.

Location:
TI12-security/trunk/ndg_xacml/ndg/xacml/test
Files:
1 added
7 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/ndg_xacml/ndg/xacml/test/__init__.py

    r7665 r7666  
    1212from os import path 
    1313 
     14from ndg.xacml.core.attributevalue import (AttributeValueClassFactory,  
     15                                           AttributeValue) 
     16from ndg.xacml.parsers import XMLParseError 
     17from ndg.xacml.parsers.etree import QName 
     18from ndg.xacml.parsers.etree.attributevaluereader import ( 
     19                                                DataTypeReaderClassFactory, 
     20                                                ETreeDataTypeReaderBase) 
     21 
    1422THIS_DIR = path.dirname(__file__) 
    1523XACML_NDGTEST1_FILENAME = "ndg1.xml" 
    1624XACML_NDGTEST1_FILEPATH = path.join(THIS_DIR, XACML_NDGTEST1_FILENAME) 
     25XACML_ESGFTEST1_FILENAME = "esgf1.xml" 
     26XACML_ESGFTEST1_FILEPATH = path.join(THIS_DIR, XACML_ESGFTEST1_FILENAME) 
     27 
     28 
     29class GroupRoleAttributeValue(AttributeValue): 
     30    """Example Custom Attribute Value""" 
     31    IDENTIFIER = 'urn:grouprole' 
     32    TYPE = dict 
     33    GROUPROLE_ELEMENT_LOCAL_NAME = 'groupRole' 
     34    GROUP_ELEMENT_LOCAL_NAME = 'group' 
     35    ROLE_ELEMENT_LOCAL_NAME = 'role' 
     36    ROLE_DEFAULT_VALUE = 'default' 
    1737     
     38    __slots__ = ('group', 'role') 
     39     
     40    def __init__(self): 
     41        super(GroupRoleAttributeValue, self).__init__() 
     42        self.group = None 
     43        self.role = self.__class__.ROLE_DEFAULT_VALUE 
     44         
     45    @property 
     46    def value(self): 
     47        """Override default value property to give custom result.  Also, 
     48        'value' becomes a read-only property""" 
     49        return self.group, self.value 
     50     
     51     
     52class ETreeGroupRoleDataTypeReader(ETreeDataTypeReaderBase): 
     53    """Example custom parser to read custom attribute value data type""" 
     54     
     55    @classmethod 
     56    def parse(cls, elem, attributeValue): 
     57        """Parse ESG Group/Role type object 
     58 
     59        @param obj: input object to parse 
     60        @type obj: ElementTree Element, or stream object 
     61        @return: ElementTree element 
     62        @rtype: xml.etree.Element 
     63        """ 
     64        if len(elem) != 1: 
     65            raise XMLParseError("Expecting single groupRole child element but "  
     66                                "found only %d element(s)" % len(elem)) 
     67                      
     68        groupRoleElem = elem[0] 
     69         
     70        if (QName.getLocalPart(groupRoleElem.tag) !=  
     71            attributeValue.__class__.GROUPROLE_ELEMENT_LOCAL_NAME): 
     72            raise XMLParseError("%r element found, expecting \"%s\" element "   
     73                        "instead" %  
     74                        attributeValue.__class__.GROUPROLE_ELEMENT_LOCAL_NAME) 
     75         
     76        # Allow for any of the defined Expression sub-types in the child  
     77        # elements 
     78        for subElem in groupRoleElem: 
     79            localName = QName.getLocalPart(subElem.tag) 
     80            if localName == attributeValue.__class__.ROLE_ELEMENT_LOCAL_NAME: 
     81                attributeValue.role = subElem.text 
     82            elif localName == attributeValue.__class__.GROUP_ELEMENT_LOCAL_NAME: 
     83                attributeValue.group = subElem.text 
     84            else: 
     85                raise XMLParseError('%r ESG Group/Role sub-element not ' 
     86                                    'recognised' % localName)  
  • TI12-security/trunk/ndg_xacml/ndg/xacml/test/context/__init__.py

    r7665 r7666  
    9090    def _createRequestCtx(resourceId,  
    9191                          includeSubject=True, 
    92                           subjectRoles=('staff',), 
     92                          subjectRoles=None, 
    9393                          roleAttributeId=ROLE_ATTRIBUTE_ID, 
    9494                          action='read'): 
    9595        """Create an example XACML Request Context for tests""" 
     96        if subjectRoles is None: 
     97            subjectRoles = ('staff',) 
     98             
    9699        request = Request() 
    97100         
  • TI12-security/trunk/ndg_xacml/ndg/xacml/test/context/test_context.py

    r7665 r7666  
    11#!/usr/bin/env python 
    2 """NDG XACML Context unit test package  
     2"""NDG XACML Context unit tests  
    33 
    44NERC DataGrid 
  • TI12-security/trunk/ndg_xacml/ndg/xacml/test/context/test_pdp.py

    r7665 r7666  
    1 ''' 
    2 Created on 28 Oct 2010 
     1#!/usr/bin/env python 
     2"""NDG XACML PDP unit tests  
    33 
    4 @author: pjkersha 
    5 ''' 
     4NERC DataGrid 
     5""" 
     6__author__ = "P J Kershaw" 
     7__date__ = "28/10/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$" 
    613import unittest 
     14import logging 
     15logging.basicConfig(level=logging.DEBUG) 
    716 
    817from ndg.xacml.core.context.result import Decision 
     
    143152        for result in response.results: 
    144153            self.failIf(result.decision != Decision.PERMIT,  
    145                         "Expecting PERMIT decision")          
    146  
    147  
     154                        "Expecting PERMIT decision")             
     155         
     156         
    148157if __name__ == "__main__": 
    149158    unittest.main() 
  • TI12-security/trunk/ndg_xacml/ndg/xacml/test/esgf1.xml

    r7661 r7666  
    6262        --> 
    6363        <Condition> 
    64             <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-at-least-one-member-of"> 
     64            <Apply FunctionId="urn:grouprole-at-least-one-member-of"> 
    6565                <SubjectAttributeDesignator  
    66                     AttributeId="urn:ndg:security:authz:1.0:attr"  
    67                     DataType="http://www.w3.org/2001/XMLSchema#string"/> 
    68                 <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-bag"> 
    69                     <AttributeValue DataType="urn:esgf:pcmdi:grouprole"> 
     66                    AttributeId="urn:esg:attr" 
     67                    DataType="urn:grouprole"/> 
     68                <Apply FunctionId="urn:grouprole-bag"> 
     69                    <AttributeValue DataType="urn:grouprole"> 
    7070                        <esg:groupRole> 
    71                             <esg:group>CMIP5_Research</esg:group> 
     71                            <esg:group>ACME</esg:group> 
    7272                            <esg:role>default</esg:role> 
    7373                        </esg:groupRole> 
    7474                    </AttributeValue> 
    75                     <AttributeValue DataType="urn:esgf:pcmdi:grouprole"> 
     75                    <AttributeValue DataType="urn:grouprole"> 
    7676                        <esg:groupRole> 
    77                             <esg:group>CMIP5_Commercial</esg:group> 
    78                             <esg:role>default</esg:role> 
     77                            <esg:group>Staff</esg:group> 
     78                            <esg:role>Administrator</esg:role> 
    7979                        </esg:groupRole> 
    8080                    </AttributeValue> 
  • TI12-security/trunk/ndg_xacml/ndg/xacml/test/policy/test_policy.py

    r7665 r7666  
    11#!/usr/bin/env python 
    2 """NDG XACML Policy unit test package  
     2"""NDG XACML Policy unit tests  
    33 
    44NERC DataGrid 
     
    1919from ndg.xacml.core.attributedesignator import SubjectAttributeDesignator 
    2020from ndg.xacml.core.attributeselector import AttributeSelector 
    21 from ndg.xacml.core.attributevalue import (AttributeValueClassFactory,  
    22                                            AttributeValue) 
    23 from ndg.xacml.parsers.etree import QName 
     21from ndg.xacml.core.attributevalue import AttributeValueClassFactory 
    2422from ndg.xacml.parsers.etree.factory import ReaderFactory 
    25 from ndg.xacml.parsers.etree.attributevaluereader import ( 
    26                                                 DataTypeReaderClassFactory, 
    27                                                 ETreeDataTypeReaderBase) 
    28  
    29 from ndg.xacml.test import XACML_NDGTEST1_FILEPATH, THIS_DIR 
    30  
    31  
    32 class GroupRoleAttributeValue(AttributeValue): 
    33     IDENTIFIER = 'urn:esgf:pcmdi:grouprole' 
    34     TYPE = dict 
    35     GROUPROLE_ELEMENT_LOCAL_NAME = 'groupRole' 
    36     GROUP_ELEMENT_LOCAL_NAME = 'group' 
    37     ROLE_ELEMENT_LOCAL_NAME = 'role' 
    38     ROLE_DEFAULT_VALUE = 'default' 
    39      
    40     __slots__ = ('group', 'role') 
    41      
    42     def __init__(self): 
    43         super(GroupRoleAttributeValue, self).__init__() 
    44         self.group = None 
    45         self.role = self.__class__.ROLE_DEFAULT_VALUE 
    46      
    47      
    48 class ETreeGroupRoleDataTypeReader(ETreeDataTypeReaderBase): 
    49          
    50     @classmethod 
    51     def parse(cls, elem, attributeValue): 
    52         """Parse ESG Group/Role type object 
    53  
    54         @param obj: input object to parse 
    55         @type obj: ElementTree Element, or stream object 
    56         @return: ElementTree element 
    57         @rtype: xml.etree.Element 
    58         """ 
    59         if len(elem) != 1: 
    60             raise XMLParseError("Expecting single groupRole child element but "  
    61                                 "found only %d element(s)" % len(elem)) 
    62                       
    63         groupRoleElem = elem[0] 
    64          
    65         if (QName.getLocalPart(groupRoleElem.tag) !=  
    66             attributeValue.__class__.GROUPROLE_ELEMENT_LOCAL_NAME): 
    67             raise XMLParseError("%r element found, expecting \"%s\" element "   
    68                                 "instead" %  
    69                                 xacmlType.GROUPROLE_ELEMENT_LOCAL_NAME) 
    70          
    71         # Allow for any of the defined Expression sub-types in the child  
    72         # elements 
    73         for subElem in groupRoleElem: 
    74             localName = QName.getLocalPart(subElem.tag) 
    75             if localName == attributeValue.__class__.ROLE_ELEMENT_LOCAL_NAME: 
    76                 attributeValue.role = subElem.text 
    77             elif localName == attributeValue.__class__.GROUP_ELEMENT_LOCAL_NAME: 
    78                 attributeValue.group = subElem.text 
    79             else: 
    80                 raise XMLParseError('%r ESG Group/Role sub-element not ' 
    81                                     'recognised' % localName)  
     23from ndg.xacml.parsers.etree.attributevaluereader import \ 
     24                                                DataTypeReaderClassFactory 
     25 
     26from ndg.xacml.test import (XACML_NDGTEST1_FILEPATH, THIS_DIR,  
     27                            GroupRoleAttributeValue,  
     28                            ETreeGroupRoleDataTypeReader) 
    8229                                
    8330     
     
    317264        self.assert_(policy)     
    318265                     
    319     def test05ETreeParseEsgf1Policy(self): 
     266    def test05ETreeParsePolicyWithCustomAttributeTypes(self): 
    320267        # Example policy with custom attribute value type used with ESGF 
    321268         
    322269        # Add new type 
    323         AttributeValueClassFactory.addClass('urn:esgf:pcmdi:grouprole',  
     270        AttributeValueClassFactory.addClass('urn:grouprole',  
    324271                                            GroupRoleAttributeValue) 
    325272         
    326273        # Add new parser for this type 
    327         DataTypeReaderClassFactory.addReader('urn:esgf:pcmdi:grouprole',  
     274        DataTypeReaderClassFactory.addReader('urn:grouprole',  
    328275                                ETreeGroupRoleDataTypeReader) 
    329276         
  • TI12-security/trunk/ndg_xacml/ndg/xacml/test/test_matchfunctions.py

    r7087 r7666  
    11#!/usr/bin/env python 
    2 """NDG XACML functions unit test package  
     2"""NDG XACML functions unit tests  
    33 
    44NERC DataGrid 
     
    2121 
    2222class FunctionTestCase(unittest.TestCase): 
    23     """Test XACML match functions implementation 
     23    """Test XACML functions implementation 
    2424     
    2525    The log output gives an indication of the XACML functions which are not  
Note: See TracChangeset for help on using the changeset viewer.