Blame bindings/python/tests/binding_tests.py

Packit 228f82
# -*- coding: UTF-8 -*-
Packit 228f82
#
Packit 228f82
# $Id: binding_tests.py 3283 2007-06-11 09:10:18Z dlaniel $
Packit 228f82
#
Packit 228f82
# Python unit tests for Lasso library
Packit 228f82
#
Packit 228f82
# Copyright (C) 2004-2007 Entr'ouvert
Packit 228f82
# http://lasso.entrouvert.org
Packit 228f82
#
Packit 228f82
# Authors: See AUTHORS file in top-level directory.
Packit 228f82
#
Packit 228f82
# This program is free software; you can redistribute it and/or modify
Packit 228f82
# it under the terms of the GNU General Public License as published by
Packit 228f82
# the Free Software Foundation; either version 2 of the License, or
Packit 228f82
# (at your option) any later version.
Packit 228f82
#
Packit 228f82
# This program is distributed in the hope that it will be useful,
Packit 228f82
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 228f82
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 228f82
# GNU General Public License for more details.
Packit 228f82
#
Packit 228f82
# You should have received a copy of the GNU General Public License
Packit 228f82
# along with this program; if not, see <http://www.gnu.org/licenses/>.
Packit 228f82
Packit 228f82
Packit 228f82
import unittest
Packit 228f82
import sys
Packit 228f82
import os
Packit 228f82
import logging
Packit 228f82
Packit 228f82
logging.basicConfig()
Packit 228f82
Packit 228f82
if not '..' in sys.path:
Packit 228f82
    sys.path.insert(0, '..')
Packit 228f82
if not '../.libs' in sys.path:
Packit 228f82
    sys.path.insert(0, '../.libs')
Packit 228f82
Packit 228f82
import lasso
Packit 228f82
Packit 228f82
try:
Packit 228f82
    dataDir
Packit 228f82
except NameError:
Packit 228f82
    srcdir = os.environ.get('TOP_SRCDIR', '.')
Packit 228f82
    dataDir = '%s/tests/data' % srcdir
Packit 228f82
Packit 228f82
Packit 228f82
class BindingTestCase(unittest.TestCase):
Packit 228f82
    def test01(self):
Packit 228f82
        """Create and delete nodes."""
Packit 228f82
Packit 228f82
        authnRequest = lasso.LibAuthnRequest()
Packit 228f82
        del authnRequest
Packit 228f82
Packit 228f82
    def test02(self):
Packit 228f82
        """Get & set simple attributes of nodes."""
Packit 228f82
Packit 228f82
        authnRequest = lasso.LibAuthnRequest()
Packit 228f82
Packit 228f82
        # Test a string attribute.
Packit 228f82
        self.failUnlessEqual(authnRequest.consent, None)
Packit 228f82
        authnRequest.consent = lasso.LIB_CONSENT_OBTAINED
Packit 228f82
        self.failUnlessEqual(authnRequest.consent, lasso.LIB_CONSENT_OBTAINED)
Packit 228f82
        authnRequest.consent = None
Packit 228f82
        self.failUnlessEqual(authnRequest.consent, None)
Packit 228f82
Packit 228f82
        # Test a renamed string attribute.
Packit 228f82
        self.failUnlessEqual(authnRequest.relayState, None)
Packit 228f82
        authnRequest.relayState = 'Hello World!'
Packit 228f82
        self.failUnlessEqual(authnRequest.relayState, 'Hello World!')
Packit 228f82
        authnRequest.relayState = None
Packit 228f82
        self.failUnlessEqual(authnRequest.relayState, None)
Packit 228f82
Packit 228f82
        # Test an integer attribute.
Packit 228f82
        self.failUnlessEqual(authnRequest.majorVersion, 0)
Packit 228f82
        authnRequest.majorVersion = 314
Packit 228f82
        self.failUnlessEqual(authnRequest.majorVersion, 314)
Packit 228f82
Packit 228f82
        del authnRequest
Packit 228f82
Packit 228f82
    def test03(self):
Packit 228f82
        """Get & set attributes of nodes of type string list."""
Packit 228f82
Packit 228f82
        authnRequest = lasso.LibAuthnRequest()
Packit 228f82
Packit 228f82
        self.failUnlessEqual(authnRequest.respondWith, ())
Packit 228f82
Packit 228f82
        respondWith = []
Packit 228f82
        self.failUnlessEqual(len(respondWith), 0)
Packit 228f82
        respondWith.append('first string')
Packit 228f82
        self.failUnlessEqual(len(respondWith), 1)
Packit 228f82
        self.failUnlessEqual(respondWith[0], 'first string')
Packit 228f82
        respondWith.append('second string')
Packit 228f82
        self.failUnlessEqual(len(respondWith), 2)
Packit 228f82
        self.failUnlessEqual(respondWith[0], 'first string')
Packit 228f82
        self.failUnlessEqual(respondWith[1], 'second string')
Packit 228f82
        respondWith.append('third string')
Packit 228f82
        self.failUnlessEqual(len(respondWith), 3)
Packit 228f82
        self.failUnlessEqual(respondWith[0], 'first string')
Packit 228f82
        self.failUnlessEqual(respondWith[1], 'second string')
Packit 228f82
        self.failUnlessEqual(respondWith[2], 'third string')
Packit 228f82
        authnRequest.respondWith = tuple(respondWith)
Packit 228f82
        self.failUnlessEqual(authnRequest.respondWith[0], 'first string')
Packit 228f82
        self.failUnlessEqual(authnRequest.respondWith[1], 'second string')
Packit 228f82
        self.failUnlessEqual(authnRequest.respondWith[2], 'third string')
Packit 228f82
        self.failUnlessEqual(respondWith[0], 'first string')
Packit 228f82
        self.failUnlessEqual(respondWith[1], 'second string')
Packit 228f82
        self.failUnlessEqual(respondWith[2], 'third string')
Packit 228f82
        del respondWith
Packit 228f82
        self.failUnlessEqual(authnRequest.respondWith[0], 'first string')
Packit 228f82
        self.failUnlessEqual(authnRequest.respondWith[1], 'second string')
Packit 228f82
        self.failUnlessEqual(authnRequest.respondWith[2], 'third string')
Packit 228f82
        respondWith = authnRequest.respondWith
Packit 228f82
        self.failUnlessEqual(respondWith[0], 'first string')
Packit 228f82
        self.failUnlessEqual(respondWith[1], 'second string')
Packit 228f82
        self.failUnlessEqual(respondWith[2], 'third string')
Packit 228f82
        del respondWith
Packit 228f82
        self.failUnlessEqual(authnRequest.respondWith[0], 'first string')
Packit 228f82
        self.failUnlessEqual(authnRequest.respondWith[1], 'second string')
Packit 228f82
        self.failUnlessEqual(authnRequest.respondWith[2], 'third string')
Packit 228f82
        authnRequest.respondWith = None
Packit 228f82
        self.failUnlessEqual(authnRequest.respondWith, ())
Packit 228f82
Packit 228f82
        del authnRequest
Packit 228f82
Packit 228f82
    def test04(self):
Packit 228f82
        """Get & set attributes of nodes of type node list."""
Packit 228f82
Packit 228f82
        response = lasso.SamlpResponse()
Packit 228f82
Packit 228f82
        self.failUnlessEqual(response.assertion, ())
Packit 228f82
Packit 228f82
        assertions = []
Packit 228f82
        self.failUnlessEqual(len(assertions), 0)
Packit 228f82
        assertion1 = lasso.SamlAssertion()
Packit 228f82
        assertion1.assertionId = 'assertion 1'
Packit 228f82
        assertions.append(assertion1)
Packit 228f82
        self.failUnlessEqual(len(assertions), 1)
Packit 228f82
        self.failUnlessEqual(assertions[0].assertionId, 'assertion 1')
Packit 228f82
        self.failUnlessEqual(assertions[0].assertionId, 'assertion 1')
Packit 228f82
        assertion2 = lasso.SamlAssertion()
Packit 228f82
        assertion2.assertionId = 'assertion 2'
Packit 228f82
        assertions.append(assertion2)
Packit 228f82
        self.failUnlessEqual(len(assertions), 2)
Packit 228f82
        self.failUnlessEqual(assertions[0].assertionId, 'assertion 1')
Packit 228f82
        self.failUnlessEqual(assertions[1].assertionId, 'assertion 2')
Packit 228f82
        assertion3 = lasso.SamlAssertion()
Packit 228f82
        assertion3.assertionId = 'assertion 3'
Packit 228f82
        assertions.append(assertion3)
Packit 228f82
        self.failUnlessEqual(len(assertions), 3)
Packit 228f82
        self.failUnlessEqual(assertions[0].assertionId, 'assertion 1')
Packit 228f82
        self.failUnlessEqual(assertions[1].assertionId, 'assertion 2')
Packit 228f82
        self.failUnlessEqual(assertions[2].assertionId, 'assertion 3')
Packit 228f82
        response.assertion = tuple(assertions)
Packit 228f82
        self.failUnlessEqual(response.assertion[0].assertionId, 'assertion 1')
Packit 228f82
        self.failUnlessEqual(response.assertion[1].assertionId, 'assertion 2')
Packit 228f82
        self.failUnlessEqual(response.assertion[2].assertionId, 'assertion 3')
Packit 228f82
        self.failUnlessEqual(assertions[0].assertionId, 'assertion 1')
Packit 228f82
        self.failUnlessEqual(assertions[1].assertionId, 'assertion 2')
Packit 228f82
        self.failUnlessEqual(assertions[2].assertionId, 'assertion 3')
Packit 228f82
        del assertions
Packit 228f82
        self.failUnlessEqual(response.assertion[0].assertionId, 'assertion 1')
Packit 228f82
        self.failUnlessEqual(response.assertion[1].assertionId, 'assertion 2')
Packit 228f82
        self.failUnlessEqual(response.assertion[2].assertionId, 'assertion 3')
Packit 228f82
        assertions = response.assertion
Packit 228f82
        self.failUnlessEqual(assertions[0].assertionId, 'assertion 1')
Packit 228f82
        self.failUnlessEqual(assertions[1].assertionId, 'assertion 2')
Packit 228f82
        self.failUnlessEqual(assertions[2].assertionId, 'assertion 3')
Packit 228f82
        del assertions
Packit 228f82
        self.failUnlessEqual(response.assertion[0].assertionId, 'assertion 1')
Packit 228f82
        self.failUnlessEqual(response.assertion[1].assertionId, 'assertion 2')
Packit 228f82
        self.failUnlessEqual(response.assertion[2].assertionId, 'assertion 3')
Packit 228f82
        response.assertion = None
Packit 228f82
        self.failUnlessEqual(response.assertion, ())
Packit 228f82
Packit 228f82
        del response
Packit 228f82
Packit 228f82
    def test05(self):
Packit 228f82
        """Get & set attributes of nodes of type XML list."""
Packit 228f82
Packit 228f82
        authnRequest = lasso.LibAuthnRequest()
Packit 228f82
Packit 228f82
        self.failUnlessEqual(authnRequest.extension, ())
Packit 228f82
Packit 228f82
        actionString1 = """\
Packit 228f82
<lib:Extension xmlns:lib="urn:liberty:iff:2003-08">
Packit 228f82
  <action>do 1</action>
Packit 228f82
</lib:Extension>"""
Packit 228f82
        actionString2 = """\
Packit 228f82
<lib:Extension xmlns:lib="urn:liberty:iff:2003-08">
Packit 228f82
  <action>do 2</action>
Packit 228f82
</lib:Extension>"""
Packit 228f82
        actionString3 = """\
Packit 228f82
<lib:Extension xmlns:lib="urn:liberty:iff:2003-08">
Packit 228f82
  <action>do 3</action>
Packit 228f82
</lib:Extension>"""
Packit 228f82
        extension = []
Packit 228f82
        self.failUnlessEqual(len(extension), 0)
Packit 228f82
        extension.append(actionString1)
Packit 228f82
        self.failUnlessEqual(len(extension), 1)
Packit 228f82
        self.failUnlessEqual(extension[0], actionString1)
Packit 228f82
        self.failUnlessEqual(extension[0], actionString1)
Packit 228f82
        extension.append(actionString2)
Packit 228f82
        self.failUnlessEqual(len(extension), 2)
Packit 228f82
        self.failUnlessEqual(extension[0], actionString1)
Packit 228f82
        self.failUnlessEqual(extension[1], actionString2)
Packit 228f82
        extension.append(actionString3)
Packit 228f82
        self.failUnlessEqual(len(extension), 3)
Packit 228f82
        self.failUnlessEqual(extension[0], actionString1)
Packit 228f82
        self.failUnlessEqual(extension[1], actionString2)
Packit 228f82
        self.failUnlessEqual(extension[2], actionString3)
Packit 228f82
        authnRequest.extension = tuple(extension)
Packit 228f82
        self.failUnlessEqual(authnRequest.extension[0], actionString1)
Packit 228f82
        self.failUnlessEqual(authnRequest.extension[1], actionString2)
Packit 228f82
        self.failUnlessEqual(authnRequest.extension[2], actionString3)
Packit 228f82
        self.failUnlessEqual(extension[0], actionString1)
Packit 228f82
        self.failUnlessEqual(extension[1], actionString2)
Packit 228f82
        self.failUnlessEqual(extension[2], actionString3)
Packit 228f82
        del extension
Packit 228f82
        self.failUnlessEqual(authnRequest.extension[0], actionString1)
Packit 228f82
        self.failUnlessEqual(authnRequest.extension[1], actionString2)
Packit 228f82
        self.failUnlessEqual(authnRequest.extension[2], actionString3)
Packit 228f82
        extension = authnRequest.extension
Packit 228f82
        self.failUnlessEqual(extension[0], actionString1)
Packit 228f82
        self.failUnlessEqual(extension[1], actionString2)
Packit 228f82
        self.failUnlessEqual(extension[2], actionString3)
Packit 228f82
        del extension
Packit 228f82
        self.failUnlessEqual(authnRequest.extension[0], actionString1)
Packit 228f82
        self.failUnlessEqual(authnRequest.extension[1], actionString2)
Packit 228f82
        self.failUnlessEqual(authnRequest.extension[2], actionString3)
Packit 228f82
        authnRequest.extension = None
Packit 228f82
        self.failUnlessEqual(authnRequest.extension, ())
Packit 228f82
Packit 228f82
        del authnRequest
Packit 228f82
Packit 228f82
    def test06(self):
Packit 228f82
        """Get & set attributes of nodes of type node."""
Packit 228f82
Packit 228f82
        login = lasso.Login(lasso.Server(
Packit 228f82
            os.path.join(dataDir, 'sp1-la/metadata.xml'),
Packit 228f82
            os.path.join(dataDir, 'sp1-la/private-key-raw.pem'),
Packit 228f82
            None,
Packit 228f82
            os.path.join(dataDir, 'sp1-la/certificate.pem')))
Packit 228f82
Packit 228f82
        self.failUnlessEqual(login.request, None)
Packit 228f82
        login.request = lasso.LibAuthnRequest()
Packit 228f82
        login.request.consent = lasso.LIB_CONSENT_OBTAINED
Packit 228f82
        self.failUnlessEqual(login.request.consent, lasso.LIB_CONSENT_OBTAINED)
Packit 228f82
        login.request = None
Packit 228f82
        self.failUnlessEqual(login.request, None)
Packit 228f82
Packit 228f82
        del login
Packit 228f82
Packit 228f82
    def test07(self):
Packit 228f82
        '''Check reference counting'''
Packit 228f82
        s = lasso.Samlp2AuthnRequest()
Packit 228f82
        cptr = s._cptr
Packit 228f82
        a = sys.getrefcount(s._cptr)
Packit 228f82
        del(s)
Packit 228f82
        b = sys.getrefcount(cptr)
Packit 228f82
        self.failUnlessEqual(b, a-1)
Packit 228f82
Packit 228f82
    def test08(self):
Packit 228f82
        '''Test an integer attribute'''
Packit 228f82
        authnRequest = lasso.LibAuthnRequest()
Packit 228f82
        authnRequest.majorVersion = 314
Packit 228f82
        self.failUnlessEqual(authnRequest.majorVersion, 314)
Packit 228f82
Packit 228f82
    def test09(self):
Packit 228f82
        '''Test dictionary attributes'''
Packit 228f82
        identity = lasso.Identity.newFromDump(open(
Packit 228f82
                    os.path.join(dataDir, 'sample-identity-dump-1.xml')).read())
Packit 228f82
        self.failUnlessEqual(len(identity.federations.keys()), 2)
Packit 228f82
        self.failIf(not 'http://idp1.lasso.lan' in identity.federations.keys())
Packit 228f82
        self.failUnlessEqual(
Packit 228f82
                identity.federations['http://idp1.lasso.lan'].localNameIdentifier.content,
Packit 228f82
                'first name id')
Packit 228f82
Packit 228f82
    def test10(self):
Packit 228f82
        '''Test Server.setEncryptionPrivateKeyWithPassword'''
Packit 228f82
        pkey_path = os.path.join(
Packit 228f82
            dataDir, 'idp5-saml2', 'private-key.pem')
Packit 228f82
        server = lasso.Server(os.path.join(dataDir, 'idp5-saml2', 'metadata.xml'),
Packit 228f82
                pkey_path)
Packit 228f82
        # from file
Packit 228f82
        server.setEncryptionPrivateKeyWithPassword(pkey_path)
Packit 228f82
        # from buffer
Packit 228f82
        server.setEncryptionPrivateKeyWithPassword(open(pkey_path).read())
Packit 228f82
        # reset
Packit 228f82
        server.setEncryptionPrivateKeyWithPassword()
Packit 228f82
Packit 228f82
    def test11(self):
Packit 228f82
        '''Test saving and reloading a Server using an encrypted private key'''
Packit 228f82
        pkey = os.path.join(dataDir, 'sp7-saml2', 'private-key.pem')
Packit 228f82
        mdata = os.path.join(dataDir, 'sp7-saml2', 'metadata.xml')
Packit 228f82
        password = open(os.path.join(dataDir, 'sp7-saml2', 'password')).read().strip()
Packit 228f82
        server = lasso.Server(mdata, pkey, password)
Packit 228f82
        assert isinstance(server, lasso.Server)
Packit 228f82
        server_dump = server.dump()
Packit 228f82
        assert server_dump
Packit 228f82
        server = lasso.Server.newFromDump(server_dump)
Packit 228f82
        assert isinstance(server, lasso.Server)
Packit 228f82
Packit 228f82
    def test12(self):
Packit 228f82
        node = lasso.Samlp2Extensions()
Packit 228f82
        assert not node.any
Packit 228f82
        content = '''
Packit 228f82
                        xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
Packit 228f82
                        xmlns:eo="https://www.entrouvert.com/" eo:huhu="xxx">
Packit 228f82
                      <eo:next_url>%s</eo:next_url>
Packit 228f82
                   </samlp:Extensions>'''
Packit 228f82
        node = lasso.Node.newFromXmlNode(content)
Packit 228f82
        assert 'next_url' in node.any[1]
Packit Service 55e21f
        assert '{https://www.entrouvert.com/}huhu' in node.attributes.keys()
Packit Service 55e21f
        assert 'xxx' in node.attributes.values()
Packit 228f82
        node.any = ('<zob>coin</zob>',)
Packit 228f82
        node.attributes = {'michou': 'zozo'}
Packit 228f82
        assert '<zob>coin</zob>' in node.dump()
Packit 228f82
        assert 'michou="zozo"' in node.dump()
Packit 228f82
        node = lasso.Node.newFromDump(node.dump())
Packit 228f82
        assert node.any == ('<zob>coin</zob>',)
Packit 228f82
        # on reparse non namespaces attributes are ignore, they should not exist
Packit 228f82
        assert node.attributes == {}
Packit 228f82
Packit 228f82
Packit 228f82
bindingSuite = unittest.makeSuite(BindingTestCase, 'test')
Packit 228f82
Packit 228f82
allTests = unittest.TestSuite((bindingSuite, ))
Packit 228f82
Packit 228f82
if __name__ == '__main__':
Packit 228f82
    sys.exit(not unittest.TextTestRunner(verbosity = 2).run(allTests).wasSuccessful())
Packit 228f82