Package ndg :: Package xacml :: Package test
[hide private]

Source Code for Package ndg.xacml.test

  1  """NDG XACML unit test package  
  2   
  3  NERC DataGrid 
  4  """ 
  5  __author__ = "P J Kershaw" 
  6  __date__ = "16/03/10" 
  7  __copyright__ = "(C) 2010 Science and Technology Facilities Council" 
  8  __contact__ = "Philip.Kershaw@stfc.ac.uk" 
  9  __license__ = "BSD - see LICENSE file in top-level directory" 
 10  __contact__ = "Philip.Kershaw@stfc.ac.uk" 
 11  __revision__ = "$Id: __init__.py 8011 2012-02-08 11:44:34Z rwilkinson $" 
 12  from os import path 
 13   
 14  from ndg.xacml.core.attributevalue import (AttributeValueClassFactory,  
 15                                             AttributeValue) 
 16  from ndg.xacml.core.functions.v1.bag import BagBase 
 17  from ndg.xacml.core.functions.v1.at_least_one_member_of import \ 
 18      AtLeastOneMemberOfBase  
 19       
 20  from ndg.xacml.parsers import XMLParseError 
 21  from ndg.xacml.parsers.etree import QName 
 22  from ndg.xacml.parsers.etree.attributevaluereader import ( 
 23                                                  DataTypeReaderClassFactory, 
 24                                                  ETreeDataTypeReaderBase) 
 25   
 26  THIS_DIR = path.dirname(__file__) 
 27  XACML_NDGTEST1_FILENAME = "ndg1.xml" 
 28  XACML_NDGTEST1_FILEPATH = path.join(THIS_DIR, XACML_NDGTEST1_FILENAME) 
 29  XACML_ESGFTEST1_FILENAME = "esgf1.xml" 
 30  XACML_ESGFTEST1_FILEPATH = path.join(THIS_DIR, XACML_ESGFTEST1_FILENAME) 
 31  XACML_ATTRIBUTESELECTOR1_FILENAME = 'policy_attributeselector_1.xml' 
 32  XACML_ATTRIBUTESELECTOR1_FILEPATH = path.join(THIS_DIR, 
 33                                               XACML_ATTRIBUTESELECTOR1_FILENAME) 
 34  XACML_ATTRIBUTESELECTOR2_FILENAME = 'policy_attributeselector_2.xml' 
 35  XACML_ATTRIBUTESELECTOR2_FILEPATH = path.join(THIS_DIR, 
 36                                               XACML_ATTRIBUTESELECTOR2_FILENAME) 
 37  XACML_ATTRIBUTESELECTOR3_FILENAME = 'policy_attributeselector_3.xml' 
 38  XACML_ATTRIBUTESELECTOR3_FILEPATH = path.join(THIS_DIR, 
 39                                               XACML_ATTRIBUTESELECTOR3_FILENAME) 
 40  XACML_ATTRIBUTESELECTOR4_FILENAME = 'policy_attributeselector_4.xml' 
 41  XACML_ATTRIBUTESELECTOR4_FILEPATH = path.join(THIS_DIR, 
 42                                               XACML_ATTRIBUTESELECTOR4_FILENAME) 
 43  XACML_ATTRIBUTESELECTOR5_FILENAME = 'policy_attributeselector_5.xml' 
 44  XACML_ATTRIBUTESELECTOR5_FILEPATH = path.join(THIS_DIR, 
 45                                               XACML_ATTRIBUTESELECTOR5_FILENAME) 
 46  XACML_ATTRIBUTESELECTOR6_FILENAME = 'policy_attributeselector_6.xml' 
 47  XACML_ATTRIBUTESELECTOR6_FILEPATH = path.join(THIS_DIR, 
 48                                               XACML_ATTRIBUTESELECTOR6_FILENAME) 
 49  XACML_FIRSTAPPLICABLE_FILENAME = "firstapplicable.xml" 
 50  XACML_FIRSTAPPLICABLE_FILEPATH = path.join(THIS_DIR, 
 51                                             XACML_FIRSTAPPLICABLE_FILENAME) 
 52  XACML_SUBJECTMATCH_FILENAME = "subjectmatch.xml" 
 53  XACML_SUBJECTMATCH_FILEPATH = path.join(THIS_DIR, XACML_SUBJECTMATCH_FILENAME) 
54 55 56 -class GroupRoleAttributeValue(AttributeValue):
57 """Example Custom Attribute Value""" 58 IDENTIFIER = 'urn:grouprole' 59 TYPE = dict 60 GROUPROLE_ELEMENT_LOCAL_NAME = 'groupRole' 61 GROUP_ELEMENT_LOCAL_NAME = 'group' 62 ROLE_ELEMENT_LOCAL_NAME = 'role' 63 ROLE_DEFAULT_VALUE = 'default' 64 65 __slots__ = ('group', 'role') 66
67 - def __init__(self):
68 super(GroupRoleAttributeValue, self).__init__() 69 self.group = None 70 self.role = self.__class__.ROLE_DEFAULT_VALUE
71 72 @property
73 - def value(self):
74 """Override default value property to give custom result. Also, 75 'value' becomes a read-only property. Making this change is critical 76 to the function of the GroupRoleAtLeastOneMemberOf class below - it 77 relies on being able to make comparison of the value attribute of 78 different GroupRoleAttributeValue instances. Defined this way, 79 comparison is by group,role to group,role tuple 80 """ 81 return self.group, self.role
82
83 84 -class GroupRoleBag(BagBase):
85 """Bag function for Group/Role custom attribute value type""" 86 TYPE = GroupRoleAttributeValue 87 FUNCTION_NS = 'urn:grouprole-bag'
88
89 90 -class GroupRoleAtLeastOneMemberOf(AtLeastOneMemberOfBase):
91 """At least one member of function for Group/Role custom attribute value 92 type""" 93 TYPE = GroupRoleAttributeValue 94 FUNCTION_NS = 'urn:grouprole-bag'
95
96 97 -class ETreeGroupRoleDataTypeReader(ETreeDataTypeReaderBase):
98 """Example custom parser to read custom attribute value data type""" 99 100 @classmethod
101 - def parse(cls, elem, attributeValue):
102 """Parse ESG Group/Role type object 103 104 @param obj: input object to parse 105 @type obj: ElementTree Element, or stream object 106 @return: ElementTree element 107 @rtype: xml.etree.Element 108 """ 109 if len(elem) != 1: 110 raise XMLParseError("Expecting single groupRole child element but " 111 "found only %d element(s)" % len(elem)) 112 113 groupRoleElem = elem[0] 114 115 if (QName.getLocalPart(groupRoleElem.tag) != 116 attributeValue.__class__.GROUPROLE_ELEMENT_LOCAL_NAME): 117 raise XMLParseError("%r element found, expecting \"%s\" element " 118 "instead" % 119 attributeValue.__class__.GROUPROLE_ELEMENT_LOCAL_NAME) 120 121 # Allow for any of the defined Expression sub-types in the child 122 # elements 123 for subElem in groupRoleElem: 124 localName = QName.getLocalPart(subElem.tag) 125 if localName == attributeValue.__class__.ROLE_ELEMENT_LOCAL_NAME: 126 attributeValue.role = subElem.text 127 elif localName == attributeValue.__class__.GROUP_ELEMENT_LOCAL_NAME: 128 attributeValue.group = subElem.text 129 else: 130 raise XMLParseError('%r ESG Group/Role sub-element not ' 131 'recognised' % localName)
132