Changeset 6572


Ignore:
Timestamp:
15/02/10 11:33:01 (9 years ago)
Author:
pjkersha
Message:

Working refactored Attribute Authority Client unit tests.

Location:
TI12-security/trunk/NDGSecurity/python
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/NDGSecurity/python/ndg_security_common/ndg/security/common/saml_utils/binding/soap/__init__.py

    r6570 r6572  
    5353    __PRIVATE_ATTR_PREFIX = "__" 
    5454    __slots__ = tuple([__PRIVATE_ATTR_PREFIX + i  
    55                        for i in CONFIG_FILE_OPTNAMES + ("__client",)]) 
     55                       for i in CONFIG_FILE_OPTNAMES + ("client",)]) 
    5656    del i 
    5757     
     
    9494    def _setSerialise(self, value): 
    9595        if isinstance(value, basestring): 
    96             self.__deserialise = importModuleObject(value) 
     96            self.__serialise = importModuleObject(value) 
    9797             
    9898        elif callable(value): 
    99             self.__deserialise = value 
     99            self.__serialise = value 
    100100        else: 
    101101            raise TypeError('Expecting callable for "serialise"; got %r' %  
    102102                            value) 
    103         self.__serialise = value 
    104103 
    105104    serialise = property(_getSerialise, _setSerialise,  
     
    181180             
    182181        if request is None: 
    183             request = UrlLib2SOAPRequest()             
     182            request = UrlLib2SOAPRequest() 
    184183            request.envelope = self.requestEnvelopeClass() 
    185184            request.envelope.create() 
  • TI12-security/trunk/NDGSecurity/python/ndg_security_common/ndg/security/common/saml_utils/binding/soap/attributequery.py

    r6570 r6572  
    4646    __slots__ = (__PRIVATE_ATTR_PREFIX + QUERY_ATTRIBUTES_ATTRNAME,) 
    4747 
     48    SERIALISE_KW = 'serialise' 
     49    DESERIALISE_KW = 'deserialise' 
    4850     
    4951    def __init__(self, **kw): 
    5052        '''Create SOAP Client for SAML Attribute Query''' 
    5153        self.__queryAttributes = TypedList(Attribute) 
    52                  
     54         
     55        # Default to ElementTree based serialisation/deserialisation 
     56        if AttributeQuerySOAPBinding.SERIALISE_KW not in kw: 
     57            from saml.xml.etree import AttributeQueryElementTree 
     58            kw[AttributeQuerySOAPBinding.SERIALISE_KW 
     59               ] = AttributeQueryElementTree.toXML 
     60                
     61        if AttributeQuerySOAPBinding.DESERIALISE_KW not in kw: 
     62            from saml.xml.etree import ResponseElementTree 
     63            kw[AttributeQuerySOAPBinding.DESERIALISE_KW 
     64               ] = ResponseElementTree.fromXML 
     65         
    5366        super(AttributeQuerySOAPBinding, self).__init__(**kw) 
    5467             
     
    148161            super(AttributeQuerySslSOAPBinding, self).__setattr__(name, value) 
    149162             
    150         except AttributeError: 
     163        except AttributeError, e: 
    151164            # Coerce into setting SSL Context Proxy attributes 
    152165            try: 
    153166                setattr(self.sslCtxProxy, name, value) 
    154167            except: 
    155                 raise 
     168                raise e 
  • TI12-security/trunk/NDGSecurity/python/ndg_security_common/ndg/security/common/saml_utils/binding/soap/authzdecisionquery.py

    r6567 r6572  
    9999                                                                      value) 
    100100             
    101         except AttributeError: 
     101        except AttributeError, e: 
    102102            # Coerce into setting SSL Context Proxy attributes 
    103103            try: 
    104104                setattr(self.sslCtxProxy, name, value) 
    105105            except: 
    106                 raise 
     106                raise e 
  • TI12-security/trunk/NDGSecurity/python/ndg_security_common/ndg/security/common/saml_utils/binding/soap/subjectquery.py

    r6570 r6572  
    220220        # Perform validation 
    221221        if response.status.statusCode.value != StatusCode.SUCCESS_URI: 
    222             msg = ('Return status code flagged an error.  The message is: %r' % 
    223                    response.status.statusMessage.value) 
     222            msg = ('Return status code flagged an error, %r.  ' 
     223                   'The message is, %r' % 
     224                   (response.status.statusCode.value, 
     225                    response.status.statusMessage.value)) 
    224226            samlRespError = SubjectQueryResponseError(msg) 
    225227            samlRespError.response = response 
  • TI12-security/trunk/NDGSecurity/python/ndg_security_common/ndg/security/common/utils/classfactory.py

    r6570 r6572  
    1515def importClass(*arg, **kw): 
    1616    """Backwards compatibility - use importModuleObject instead""" 
    17     kw['objectName'] = kw.pop('className', None) 
     17    nArgs = len(arg) 
     18    if nArgs > 1: 
     19        kw['objectName'] = arg.pop(1) 
     20    else: 
     21        kw['objectName'] = kw.pop('className', None) 
     22         
    1823    return importModuleObject(*arg, **kw) 
    1924 
     
    2126def instantiateClass(*arg, **kw): 
    2227    """Wrapper to callModuleObject""" 
    23     kw['objectName'] = kw.pop('className', None) 
    24     kw['objectArgs'] = kw.pop('classargs', None) 
    25     kw['objectProperties'] = kw.pop('classProperties', None) 
     28    nArgs = len(arg) 
     29    arg = list(arg) 
     30    if nArgs > 1: 
     31        kw['objectName'] = arg.pop(1) 
     32    else: 
     33        kw['objectName'] = kw.pop('className', None) 
     34         
     35    if nArgs > 2: 
     36        kw['objectArgs'] = arg.pop(2) 
     37    else: 
     38        kw['objectArgs'] = kw.pop('classArgs', None) 
     39         
     40    if nArgs > 3: 
     41        kw['objectProperties'] = arg.pop(3) 
     42    else: 
     43        kw['objectProperties'] = kw.pop('classProperties', None) 
    2644 
     45    arg = tuple(arg) 
    2746    return callModuleObject(*arg, **kw) 
  • TI12-security/trunk/NDGSecurity/python/ndg_security_common/ndg/security/common/utils/factory.py

    r6570 r6572  
    2121    @param moduleName: Name of module containing the class 
    2222    @type moduleName: str  
    23     @param className: Name of the class to import.  If none is given, the  
     23    @param objectName: Name of the class to import.  If none is given, the  
    2424    class name will be assumed to be the last component of modulePath 
    25     @type className: str 
     25    @type objectName: str 
    2626    @rtype: class object 
    2727    @return: imported class''' 
    28      
    29     if className is None: 
    30         _moduleName, className = moduleName.rsplit('.', 1) 
     28    if objectName is None: 
     29        if ':' in moduleName: 
     30            # Support PAste style import syntax with rhs of colon denoting  
     31            # module content to import 
     32            _moduleName, objectName = moduleName.rsplit(':', 1) 
     33            if '.' in objectName: 
     34                objectName = objectName.split('.') 
     35        else:  
     36            _moduleName, objectName = moduleName.rsplit('.', 1) 
     37            objectName = [objectName] 
    3138    else: 
    3239        _moduleName = moduleName 
     40        if isinstance(objectName, basestring): 
     41            objectName = [objectName] 
    3342     
    34     log.debug("Importing %r ..." % className)  
     43    log.debug("Importing %r ..." % objectName)  
    3544       
    3645    module = __import__(_moduleName, globals(), locals(), []) 
     
    4150    except AttributeError, e: 
    4251        raise AttributeError("Error importing %r: %s" % 
    43                              (className, traceback.format_exc())) 
     52                             (objectName, traceback.format_exc())) 
    4453 
    45     importedObject = getattr(module, className) 
     54    importedObject = module 
     55    for i in objectName: 
     56        importedObject = getattr(importedObject, i) 
    4657 
    4758    # Check class inherits from a base class 
    4859    if objectType and not issubclass(importedObject, objectType): 
    4960        raise TypeError("Specified class %r must be derived from %r; got %r" % 
    50                         (className, objectType, importedObject)) 
     61                        (objectName, objectType, importedObject)) 
    5162     
    52     log.info('Imported %r from module, %r', className, _moduleName) 
     63    log.info('Imported %r from module, %r', objectName, _moduleName) 
    5364    return importedObject 
    5465 
    5566 
    56 def callModuleObject(moduleName, className=None, moduleFilePath=None,  
     67def callModuleObject(moduleName, objectName=None, moduleFilePath=None,  
    5768                     objectType=None, objectArgs=(), objectProperties={}): 
    5869    ''' 
     
    6071    @param moduleName: Name of module containing the class 
    6172    @type moduleName: str  
    62     @param className: Name of the class to instantiate.  May be None in  
     73    @param objectName: Name of the class to instantiate.  May be None in  
    6374    which case, the class name is parsed from the moduleName last element 
    64     @type className: str 
     75    @type objectName: str 
    6576    @param moduleFilePath: Path to the module - if unset, assume module on  
    6677    system path already 
  • TI12-security/trunk/NDGSecurity/python/ndg_security_server/ndg/security/server/attributeauthority.py

    r6067 r6572  
    11211121            log.error('SAML Attribute Query issuer format is %r; expecting ' 
    11221122                      '%r' % (attributeQuery.issuer.format, 
    1123                                 Issuer.X509_SUBJECT)) 
     1123                              Issuer.X509_SUBJECT)) 
    11241124            samlResponse.status.statusCode.value = StatusCode.REQUESTER_URI 
    11251125            samlResponse.status.statusMessage.value = \ 
  • TI12-security/trunk/NDGSecurity/python/ndg_security_test/ndg/security/test/unit/attributeauthorityclient/__init__.py

    r6571 r6572  
    4343        except KeyError: 
    4444            self.sslCACertList = [] 
    45              
    46         self.startAttributeAuthorities()         
     45        
  • TI12-security/trunk/NDGSecurity/python/ndg_security_test/ndg/security/test/unit/attributeauthorityclient/test_attributeauthorityclient.py

    r6571 r6572  
    3232    pemPat = "-----BEGIN CERTIFICATE-----[^\-]*-----END CERTIFICATE-----" 
    3333 
     34    def __init__(self, *arg, **kw): 
     35        super(AttributeAuthorityClientTestCase, self).__init__(*arg, **kw)             
     36        self.startAttributeAuthorities()  
     37         
    3438    def _getCertChainFromProxyCertFile(self, proxyCertFilePath): 
    3539        '''Read proxy cert and user cert from a single PEM file and put in 
  • TI12-security/trunk/NDGSecurity/python/ndg_security_test/ndg/security/test/unit/attributeauthorityclient/test_samlattributeauthorityclient.cfg

    r6571 r6572  
    3030subject = https://openid.localhost/philip.kershaw 
    3131siteAttributeName = invalid-attr 
     32prefix = saml. 
     33saml.serialise = saml.xml.etree:AttributeQueryElementTree.toXML 
     34saml.deserialise = saml.xml.etree:ResponseElementTree.fromXML 
    3235 
    3336[test05AttributeQuerySOAPBindingInterface] 
  • TI12-security/trunk/NDGSecurity/python/ndg_security_test/ndg/security/test/unit/attributeauthorityclient/test_samlattributeauthorityclient.py

    r6571 r6572  
    2626                                        AttributeQuerySOAPBinding,  
    2727                                        AttributeQuerySslSOAPBinding) 
    28 from ndg.security.common.saml_utils.esg import EsgSamlNamespaces 
     28from ndg.security.common.saml_utils.esg import (EsgSamlNamespaces, 
     29                                                EsgDefaultQueryAttributes) 
    2930from ndg.security.test.unit.attributeauthorityclient import \ 
    3031                                        AttributeAuthorityClientBaseTestCase 
     
    4041        super(AttributeAuthoritySAMLInterfaceTestCase, self).__init__(*arg,  
    4142                                                                      **kw) 
     43         
     44        # Run same config but on two different ports - one HTTP and one HTTPS 
     45        self.startSiteAAttributeAuthority() 
    4246        self.startSiteAAttributeAuthority(withSSL=True, port=5443) 
    4347        
     
    5458        attributeQuery.issuer.value = "/CN=Authorisation Service/O=Site A"     
    5559                         
    56         attributeQuery.subject = Subject()   
     60        attributeQuery.subject = Subject() 
    5761        attributeQuery.subject.nameID = NameID() 
    5862        attributeQuery.subject.nameID.format = EsgSamlNamespaces.NAMEID_FORMAT 
     
    120124        attributeQuery.issuer = Issuer() 
    121125        attributeQuery.issuer.format = Issuer.X509_SUBJECT 
    122         attributeQuery.issuer.value = "Invalid Site"     
     126        attributeQuery.issuer.value = "/O=Invalid Site/CN=PDP"     
    123127                         
    124128        attributeQuery.subject = Subject()   
     
    136140 
    137141        binding = SOAPBinding() 
     142        binding.serialise = AttributeQueryElementTree.toXML 
     143        binding.deserialise = ResponseElementTree.fromXML 
    138144        response = binding.send(attributeQuery, _cfg['uri']) 
    139145 
     
    174180 
    175181        binding = SOAPBinding() 
     182        binding.serialise = AttributeQueryElementTree.toXML 
     183        binding.deserialise = ResponseElementTree.fromXML 
    176184        response = binding.send(attributeQuery, _cfg['uri']) 
    177185         
     
    186194              
    187195    def test04SAMLAttributeQueryInvalidAttrName(self): 
    188         _cfg = self.cfg['test04SAMLAttributeQueryInvalidAttrName'] 
     196        thisSection = 'test04SAMLAttributeQueryInvalidAttrName' 
     197        _cfg = self.cfg[thisSection] 
    189198         
    190199        attributeQuery = AttributeQuery() 
     
    210219        attributeQuery.attributes.append(invalidAttribute)  
    211220 
    212         binding = SOAPBinding() 
     221        binding = SOAPBinding.fromConfig( 
     222                     AttributeAuthoritySAMLInterfaceTestCase.CONFIG_FILENAME,  
     223                     prefix='saml.',  
     224                     section=thisSection) 
    213225        response = binding.send(attributeQuery, _cfg['uri']) 
    214226         
     
    229241         
    230242        binding.subjectID = AttributeAuthoritySAMLInterfaceTestCase.OPENID_URI 
    231         binding.issuerDN = \ 
    232             AttributeAuthoritySAMLInterfaceTestCase.VALID_REQUESTOR_IDS[0]         
     243        binding.subjectIdFormat = EsgSamlNamespaces.NAMEID_FORMAT 
     244        binding.issuerName = \ 
     245            str(AttributeAuthoritySAMLInterfaceTestCase.VALID_REQUESTOR_IDS[0]) 
     246        binding.issuerFormat = Issuer.X509_SUBJECT 
    233247         
    234248        binding.queryAttributes = EsgDefaultQueryAttributes.ATTRIBUTES 
Note: See TracChangeset for help on using the changeset viewer.