Ignore:
Timestamp:
24/08/10 15:34:07 (9 years ago)
Author:
pjkersha
Message:

Incomplete - task 2: XACML-Security Integration

  • added caching capability to Policy Information Point. This enables the PIP to retrieve previously cached assertions from an Attribute Authority optimising performance. Caching is done with beaker.session but instead of indexing based on a cookie, it's based on the subject Id i.e. for ESG, a user's OpenID.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/NDGSecurity/python/ndg_security_test/ndg/security/test/unit/authz/xacml/test_saml_pip.py

    r7339 r7358  
    1515from os import path 
    1616import unittest 
     17 
     18from urllib2 import URLError 
    1719 
    1820from ndg.xacml.core.attributedesignator import SubjectAttributeDesignator 
     
    4547                                    
    4648    attributeValueClassFactory = AttributeValueClassFactory() 
    47      
    48     def __init__(self, *arg, **kw): 
    49         BaseTestCase.__init__(self, *arg, **kw) 
    50         self.startSiteAAttributeAuthority(withSSL=True,  
    51                     port=self.__class__.SITEA_SSL_ATTRIBUTEAUTHORITY_PORTNUM) 
    52          
     49             
    5350    def test01CreateAndCheckAttributes(self): 
    5451        pip = PIP() 
     
    6057        except AttributeError: 
    6158            pass 
     59         
     60        setattr(pip, 'sessionCacheDataDir', 'My data dir') 
    6261 
    6362    def test02ReadMappingFile(self): 
     
    8685         
    8786        return ctx 
    88                       
    89     def test03Query(self): 
     87     
     88    def _createPIP(self):    
     89        """Create PIP from test attribute settings"""               
    9090        pip = PIP() 
    9191        pip.mappingFilePath = self.__class__.MAPPING_FILEPATH 
     
    102102             
    103103        pip.attributeQueryBinding.sslCACertDir = self.__class__.CACERT_DIR 
    104              
    105         # Make attribute designator - in practice this would be passed back from 
    106         # the PDP via the context handler 
     104         
     105        return pip 
     106 
     107    def _createSubjectAttributeDesignator(self): 
     108        '''Make attribute designator - in practice this would be passed back  
     109        from the PDP via the context handler 
     110        ''' 
    107111        designator = SubjectAttributeDesignator() 
    108112        designator.attributeId = self.__class__.NDGS_ATTR_ID 
     
    112116                                    'http://www.w3.org/2001/XMLSchema#string') 
    113117         
     118        return designator 
     119     
     120    def _initQuery(self): 
     121        '''Convenience method to set-up the parameters needed for a query''' 
     122        pip = self._createPIP() 
     123        designator = self._createSubjectAttributeDesignator() 
    114124        ctx = self._createXacmlRequestCtx() 
     125        return pip, designator, ctx 
     126     
     127    def test03Query(self): 
     128        self.startSiteAAttributeAuthority(withSSL=True,  
     129                    port=self.__class__.SITEA_SSL_ATTRIBUTEAUTHORITY_PORTNUM) 
     130         
     131        pip, designator, ctx = self._initQuery() 
     132         
     133        # Avoid caching to avoid impacting other tests in this class 
     134        pip.cacheSessions = False 
    115135         
    116136        attributeValues = pip.attributeQuery(ctx, designator) 
     
    118138        print("PIP retrieved attribute values %r" % attributeValues) 
    119139         
     140        self.stopAllServices() 
     141         
    120142    def test04InitFromConfigFile(self): 
    121143        # Initialise from settings in a config file 
    122144        pip = PIP.fromConfig(self.__class__.CONFIG_FILEPATH) 
    123145        self.assert_(pip.mappingFilePath) 
    124  
     146         
     147    def test05SessionCaching(self): 
     148        self.startSiteAAttributeAuthority(withSSL=True,  
     149                    port=self.__class__.SITEA_SSL_ATTRIBUTEAUTHORITY_PORTNUM) 
     150         
     151        pipA, designator, ctx = self._initQuery() 
     152        attributeValuesA = pipA.attributeQuery(ctx, designator) 
     153         
     154        pipB = self._createPIP() 
     155        pipB.cacheSessions = False 
     156         
     157        attributeValuesB = pipB.attributeQuery(ctx, designator) 
     158         
     159        self.stopAllServices() 
     160         
     161        attributeValuesA2 = pipA.attributeQuery(ctx, designator) 
     162        self.assert_(len(attributeValuesA2) > 0) 
     163         
     164        try: 
     165            attributeValuesB2 = pipB.attributeQuery(ctx, designator) 
     166            self.fail("Expected URLError exception for call with no-caching set") 
     167        except URLError, e: 
     168            print("Pass: expected %r error for call with no-caching set" % e) 
     169         
     170         
    125171         
    126172if __name__ == "__main__": 
Note: See TracChangeset for help on using the changeset viewer.