diff options
Diffstat (limited to 'python/tests/profiles_tests.py')
| -rwxr-xr-x | python/tests/profiles_tests.py | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/python/tests/profiles_tests.py b/python/tests/profiles_tests.py new file mode 100755 index 00000000..4e367ad7 --- /dev/null +++ b/python/tests/profiles_tests.py @@ -0,0 +1,169 @@ +#! /usr/bin/env python +# -*- coding: UTF-8 -*- + + +# Python unit tests for Lasso library +# By: Frederic Peters <fpeters@entrouvert.com> +# Emmanuel Raviart <eraviart@entrouvert.com> +# +# Copyright (C) 2004 Entr'ouvert +# http://lasso.entrouvert.org +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +import os +import unittest +import sys + +if not '..' in sys.path: + sys.path.insert(0, '..') +if not '../.libs' in sys.path: + sys.path.insert(0, '../.libs') + +import lasso + + +try: + dataDir +except NameError: + dataDir = '../../tests/data' + + +class ServerTestCase(unittest.TestCase): + def test01(self): + """Server construction, dump & new_from_dump.""" + + lassoServer = lasso.Server( + os.path.join(dataDir, 'sp1-la/metadata.xml'), + None, # os.path.join(dataDir, 'sp1-la/public-key.pem') is no more used + os.path.join(dataDir, 'sp1-la/private-key-raw.pem'), + os.path.join(dataDir, 'sp1-la/certificate.pem'), + lasso.signatureMethodRsaSha1) + lassoServer.add_provider( + os.path.join(dataDir, 'idp1-la/metadata.xml'), + os.path.join(dataDir, 'idp1-la/public-key.pem'), + os.path.join(dataDir, 'idp1-la/certificate.pem')) + dump = lassoServer.dump() + lassoServer2 = lassoServer.new_from_dump(dump) + dump2 = lassoServer2.dump() + self.failUnlessEqual(dump, dump2) + + def test02(self): + """Server construction without argument, dump & new_from_dump.""" + + lassoServer = lasso.Server() + lassoServer.add_provider(os.path.join(dataDir, 'idp1-la/metadata.xml')) + dump = lassoServer.dump() + lassoServer2 = lassoServer.new_from_dump(dump) + dump2 = lassoServer2.dump() + self.failUnlessEqual(dump, dump2) + + +class LoginTestCase(unittest.TestCase): + def test01(self): + """SP login; testing access to authentication request.""" + + lassoServer = lasso.Server( + os.path.join(dataDir, 'sp1-la/metadata.xml'), + None, # os.path.join(dataDir, 'sp1-la/public-key.pem') is no more used + os.path.join(dataDir, 'sp1-la/private-key-raw.pem'), + os.path.join(dataDir, 'sp1-la/certificate.pem'), + lasso.signatureMethodRsaSha1) + lassoServer.add_provider( + os.path.join(dataDir, 'idp1-la/metadata.xml'), + os.path.join(dataDir, 'idp1-la/public-key.pem'), + os.path.join(dataDir, 'idp1-la/certificate.pem')) + login = lasso.Login(lassoServer) + login.init_authn_request(lasso.httpMethodRedirect) + self.failUnlessEqual(login.request_type, lasso.messageTypeAuthnRequest) + login.authn_request + login.authn_request.protocolProfile = lasso.libProtocolProfileBrwsArt + + +class LogoutTestCase(unittest.TestCase): + def test01(self): + """SP logout without session and identity; testing init_request.""" + + lassoServer = lasso.Server( + os.path.join(dataDir, 'sp1-la/metadata.xml'), + None, # os.path.join(dataDir, 'sp1-la/public-key.pem') is no more used + os.path.join(dataDir, 'sp1-la/private-key-raw.pem'), + os.path.join(dataDir, 'sp1-la/certificate.pem'), + lasso.signatureMethodRsaSha1) + lassoServer.add_provider( + os.path.join(dataDir, 'idp1-la/metadata.xml'), + os.path.join(dataDir, 'idp1-la/public-key.pem'), + os.path.join(dataDir, 'idp1-la/certificate.pem')) + logout = lasso.Logout(lassoServer, lasso.providerTypeSp) + try: + logout.init_request() + except lasso.Error, error: + if error.code != -1: + raise + else: + self.fail('logout.init_request without having set identity before should fail') + + def test02(self): + """IDP logout without session and identity; testing logout.get_next_providerID.""" + + lassoServer = lasso.Server( + os.path.join(dataDir, 'idp1-la/metadata.xml'), + None, # os.path.join(dataDir, 'idp1-la/public-key.pem') is no more used + os.path.join(dataDir, 'idp1-la/private-key-raw.pem'), + os.path.join(dataDir, 'idp1-la/certificate.pem'), + lasso.signatureMethodRsaSha1) + lassoServer.add_provider( + os.path.join(dataDir, 'sp1-la/metadata.xml'), + os.path.join(dataDir, 'sp1-la/public-key.pem'), + os.path.join(dataDir, 'sp1-la/certificate.pem')) + logout = lasso.Logout(lassoServer, lasso.providerTypeIdp) + self.failIf(logout.get_next_providerID()) + + +class DefederationTestCase(unittest.TestCase): + def test01(self): + """IDP initiated defederation; testing process_notification_msg with non Liberty query.""" + + lassoServer = lasso.Server( + os.path.join(dataDir, 'idp1-la/metadata.xml'), + None, # os.path.join(dataDir, 'idp1-la/public-key.pem') is no more used + os.path.join(dataDir, 'idp1-la/private-key-raw.pem'), + os.path.join(dataDir, 'idp1-la/certificate.pem'), + lasso.signatureMethodRsaSha1) + lassoServer.add_provider( + os.path.join(dataDir, 'sp1-la/metadata.xml'), + os.path.join(dataDir, 'sp1-la/public-key.pem'), + os.path.join(dataDir, 'sp1-la/certificate.pem')) + defederation = lasso.Defederation(lassoServer, lasso.providerTypeIdp) + # The process_notification_msg should failt but not abort. + try: + defederation.process_notification_msg('nonLibertyQuery=1', lasso.httpMethodRedirect) + except lasso.Error, error: + pass + else: + self.fail('Defederation process_notification_msg should have failed.') + + +suite1 = unittest.makeSuite(ServerTestCase, 'test') +suite2 = unittest.makeSuite(LoginTestCase, 'test') +suite3 = unittest.makeSuite(LogoutTestCase, 'test') +suite4 = unittest.makeSuite(DefederationTestCase, 'test') + +allTests = unittest.TestSuite((suite1, suite2, suite3, suite4)) + +if __name__ == '__main__': + sys.exit(not unittest.TextTestRunner(verbosity = 2).run(allTests).wasSuccessful()) + |
