Ignore:
Timestamp:
28/10/10 16:00:42 (10 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.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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         
Note: See TracChangeset for help on using the changeset viewer.