Blame bindings/python/tests/binding_tests.py

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