Ignore:
Timestamp:
09/11/09 14:28:29 (11 years ago)
Author:
pjkersha
Message:
  • SQLAlchemyAttributeInterface complete and tested.
  • Moved ESG specific SAML types out of saml egg and into ndg.security.common.saml.esg
File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/python/ndg_security_test/ndg/security/test/unit/attributeauthority/test_attributeauthority.py

    r5977 r5982  
    248248                             Status, StatusMessage, StatusCode) 
    249249from saml.xml import XMLConstants 
     250from ndg.security.common.saml.esg import EsgSamlNamespaces 
    250251 
    251252 
     
    263264                              BaseTestCase.OPENID_URI_STEM) 
    264265         
    265     SAML_EMAILADDRESS_SQLQUERY = ("select emailaddress from users where '%s' || " 
    266                                   "openid_identifier = '${userId}'" % 
     266    SAML_EMAILADDRESS_SQLQUERY = ("select emailaddress from users where '%s' ||" 
     267                                  " openid_identifier = '${userId}'" % 
    267268                                  BaseTestCase.OPENID_URI_STEM) 
    268269         
    269     SAML_ATTRIBUTES_SQLQUERY = ("select attributename from attributes where " 
    270                                 "'%s' || openid_identifier = '${userId}'" % 
    271                                 BaseTestCase.OPENID_URI_STEM) 
     270    SAML_ATTRIBUTES_SQLQUERY = ("select attributename from attributes, users " 
     271                                "where '%s' || users.openid_identifier = " 
     272                                "'${userId}' and attributes.username = " 
     273                                "users.username" % BaseTestCase.OPENID_URI_STEM) 
     274#         
     275#    SAML_ATTRIBUTES_SQLQUERY = ("select attributename from attributes " 
     276#                                "where username = 'pjk'") 
    272277                                 
    273278    def __init__(self, *arg, **kw): 
     
    275280        self.skipTests = False 
    276281        try: 
    277             self._createDb() 
     282            import sqlalchemy 
    278283 
    279284        except NotImplementedError: 
     
    283288            self.skipTests = True 
    284289         
     290        if 'NDGSEC_AA_UNITTEST_DIR' not in os.environ: 
     291            os.environ['NDGSEC_AA_UNITTEST_DIR' 
     292                       ] = os.path.abspath(os.path.dirname(__file__)) 
     293             
     294        if not os.path.exists(mkPath('user.db')): 
     295            self._createDb() 
     296         
    285297    def test01TrySamlAttribute2SqlQuery__setattr__(self): 
    286298        if self.skipTests: 
     
    290302         
    291303        # Define queries for SAML attribute names 
    292         attributeInterface.samlAttribute2SqlQuery_firstName = \ 
    293             SQLAlchemyAttributeInterfaceTestCase.SAML_FIRSTNAME_SQLQUERY 
    294              
    295         setattr(attributeInterface, 'samlAttribute2SqlQuery.lastName', 
    296             SQLAlchemyAttributeInterfaceTestCase.SAML_LASTNAME_SQLQUERY) 
    297          
    298         attributeInterface.samlAttribute2SqlQuery['emailAddress'] = ( 
    299             SQLAlchemyAttributeInterfaceTestCase.SAML_EMAILADDRESS_SQLQUERY) 
    300          
    301         attributeInterface.samlAttribute2SqlQuery_attributes = ( 
     304        attributeInterface.samlAttribute2SqlQuery_firstName = '"%s" "%s"' % ( 
     305            EsgSamlNamespaces.FIRSTNAME_ATTRNAME,                                                                
     306            SQLAlchemyAttributeInterfaceTestCase.SAML_FIRSTNAME_SQLQUERY) 
     307             
     308        setattr(attributeInterface,  
     309                'samlAttribute2SqlQuery.lastName', 
     310                "%s %s" % (EsgSamlNamespaces.LASTNAME_ATTRNAME, 
     311                SQLAlchemyAttributeInterfaceTestCase.SAML_LASTNAME_SQLQUERY)) 
     312         
     313        attributeInterface.samlAttribute2SqlQuery[ 
     314            EsgSamlNamespaces.EMAILADDRESS_ATTRNAME] = ( 
     315                SQLAlchemyAttributeInterfaceTestCase.SAML_EMAILADDRESS_SQLQUERY) 
     316         
     317        attributeInterface.samlAttribute2SqlQuery[ 
     318            SQLAlchemyAttributeInterfaceTestCase.ATTRIBUTE_NAMES[0]] = ( 
    302319            SQLAlchemyAttributeInterfaceTestCase.SAML_ATTRIBUTES_SQLQUERY) 
    303320         
     
    307324            return 
    308325         
     326        # samlAttribute2SqlQuery* suffixes have no particular requirement 
     327        # only that they are unique and start with an underscore or period. 
    309328        properties = { 
    310329            'connectionString':  
     
    314333                SQLAlchemyAttributeInterfaceTestCase.SAML_SUBJECT_SQLQUERY, 
    315334                 
    316             'samlAttribute2SqlQuery.urn:esg:first:name': 
    317                 SQLAlchemyAttributeInterfaceTestCase.SAML_FIRSTNAME_SQLQUERY, 
    318              
    319             'samlAttribute2SqlQuery.urn:esg:last:name': 
    320                 SQLAlchemyAttributeInterfaceTestCase.SAML_LASTNAME_SQLQUERY, 
    321          
    322             'samlAttribute2SqlQuery.urn:esg:first:email:address': 
    323                 SQLAlchemyAttributeInterfaceTestCase.SAML_EMAILADDRESS_SQLQUERY, 
    324          
    325             'samlAttribute2SqlQuery_attributes': 
    326                 SQLAlchemyAttributeInterfaceTestCase.SAML_ATTRIBUTES_SQLQUERY, 
     335            'samlAttribute2SqlQuery.firstname': '"%s" "%s"' % ( 
     336                EsgSamlNamespaces.FIRSTNAME_ATTRNAME, 
     337                SQLAlchemyAttributeInterfaceTestCase.SAML_FIRSTNAME_SQLQUERY), 
     338             
     339            'samlAttribute2SqlQuery.blah': '"%s" "%s"' % ( 
     340                EsgSamlNamespaces.LASTNAME_ATTRNAME, 
     341                SQLAlchemyAttributeInterfaceTestCase.SAML_LASTNAME_SQLQUERY), 
     342         
     343            'samlAttribute2SqlQuery.3': '%s "%s"' % ( 
     344            EsgSamlNamespaces.EMAILADDRESS_ATTRNAME, 
     345            SQLAlchemyAttributeInterfaceTestCase.SAML_EMAILADDRESS_SQLQUERY), 
     346         
     347            'samlAttribute2SqlQuery_0': '%s %s' % ( 
     348                SQLAlchemyAttributeInterfaceTestCase.ATTRIBUTE_NAMES[0], 
     349                SQLAlchemyAttributeInterfaceTestCase.SAML_ATTRIBUTES_SQLQUERY), 
    327350             
    328351            'samlValidRequestorDNs': ('/O=STFC/OU=CEDA/CN=AuthorisationService', 
     
    334357        attributeInterface.setProperties(**properties) 
    335358         
    336         self.assert_(attributeInterface.samlAttribute2SqlQuery['firstName'] == \ 
     359        self.assert_( 
     360            attributeInterface.samlAttribute2SqlQuery[ 
     361                EsgSamlNamespaces.FIRSTNAME_ATTRNAME] == \ 
    337362            SQLAlchemyAttributeInterfaceTestCase.SAML_FIRSTNAME_SQLQUERY) 
    338363         
     
    343368        attributeInterface2 = SQLAlchemyAttributeInterface(**properties) 
    344369        self.assert_(attributeInterface2.samlAssertionLifetime.days == 1) 
    345          
    346     def test03SamlAttributeQuery(self): 
     370 
     371    def test03FromConfigFile(self): 
     372        if self.skipTests: 
     373            return 
     374        cfgParser = CaseSensitiveConfigParser() 
     375        cfgFilePath = mkPath('test_sqlalchemyattributeinterface.cfg') 
     376        cfgParser.read(cfgFilePath) 
     377         
     378        cfg = dict(cfgParser.items('DEFAULT')) 
     379        attributeInterface = SQLAlchemyAttributeInterface() 
     380        attributeInterface.setProperties(prefix='attributeInterface.', **cfg) 
     381         
     382        self.assert_( 
     383            attributeInterface.samlAttribute2SqlQuery[ 
     384                EsgSamlNamespaces.EMAILADDRESS_ATTRNAME] == \ 
     385            SQLAlchemyAttributeInterfaceTestCase.SAML_EMAILADDRESS_SQLQUERY) 
     386 
     387    def test04SamlAttributeQuery(self): 
    347388        if self.skipTests: 
    348389            return 
     
    361402        attributeQuery.subject = Subject()   
    362403        attributeQuery.subject.nameID = NameID() 
    363         attributeQuery.subject.nameID.format = "urn:esg:openid" 
     404        attributeQuery.subject.nameID.format = EsgSamlNamespaces.NAMEID_FORMAT 
    364405        attributeQuery.subject.nameID.value = \ 
    365406                                    "https://openid.localhost/philip.kershaw" 
    366407         
    367408        fnAttribute = Attribute() 
    368         fnAttribute.name = "urn:esg:first:name" 
     409        fnAttribute.name = EsgSamlNamespaces.FIRSTNAME_ATTRNAME 
    369410        fnAttribute.nameFormat = "http://www.w3.org/2001/XMLSchema#string" 
    370411        fnAttribute.friendlyName = "FirstName" 
     
    373414     
    374415        lnAttribute = Attribute() 
    375         lnAttribute.name = "urn:esg:last:name" 
     416        lnAttribute.name = EsgSamlNamespaces.LASTNAME_ATTRNAME 
    376417        lnAttribute.nameFormat = "http://www.w3.org/2001/XMLSchema#string" 
    377418        lnAttribute.friendlyName = "LastName" 
     
    380421     
    381422        emailAddressAttribute = Attribute() 
    382         emailAddressAttribute.name = "urn:esg:email:address" 
     423        emailAddressAttribute.name = EsgSamlNamespaces.EMAILADDRESS_ATTRNAME 
    383424        emailAddressAttribute.nameFormat = XMLConstants.XSD_NS+"#"+\ 
    384425                                    XSStringAttributeValue.TYPE_LOCAL_NAME 
     
    397438         
    398439        # Add the response - the interface will populate with an assertion as 
    399         # appropraite 
     440        # appropriate 
    400441        samlResponse = Response() 
    401442         
     
    419460        # Define queries for SAML attribute names 
    420461        samlAttribute2SqlQuery = { 
    421             'firstName':  
     462            EsgSamlNamespaces.FIRSTNAME_ATTRNAME:  
    422463                SQLAlchemyAttributeInterfaceTestCase.SAML_FIRSTNAME_SQLQUERY, 
    423464             
    424             'lastName':  
     465            EsgSamlNamespaces.LASTNAME_ATTRNAME:  
    425466                SQLAlchemyAttributeInterfaceTestCase.SAML_LASTNAME_SQLQUERY, 
    426467         
    427             'emailAddress':  
     468            EsgSamlNamespaces.EMAILADDRESS_ATTRNAME:  
    428469                SQLAlchemyAttributeInterfaceTestCase.SAML_EMAILADDRESS_SQLQUERY, 
    429470         
    430             'attributes':  
    431                 SQLAlchemyAttributeInterfaceTestCase.SAML_ATTRIBUTES_SQLQUERY,                                
     471            SQLAlchemyAttributeInterfaceTestCase.ATTRIBUTE_NAMES[0]:  
     472                SQLAlchemyAttributeInterfaceTestCase.SAML_ATTRIBUTES_SQLQUERY                     
    432473        } 
    433474         
     
    455496        self.assert_(samlResponse.assertions[0].subject.nameID.value == \ 
    456497                     attributeQuery.subject.nameID.value) 
     498        self.assert_( 
     499            samlResponse.assertions[0].attributeStatements[0].attributes[1 
     500                ].attributeValues[0].value == 'Kershaw') 
     501         
     502        self.assert_( 
     503            len(samlResponse.assertions[0].attributeStatements[0].attributes[3 
     504                ].attributeValues) == \ 
     505                    SQLAlchemyAttributeInterfaceTestCase.N_ATTRIBUTE_VALUES) 
    457506 
    458507         
Note: See TracChangeset for help on using the changeset viewer.