From 60de7464f6112412f071963613dffcc37d1d675d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Nowak?= <luke@nexedi.com> Date: Thu, 14 Oct 2010 13:04:43 +0000 Subject: [PATCH] - start testing of ERP5RemoteUserManager against simulated remote authentication server git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@39144 20353a03-c40f-0410-a6d1-a30d3c3de9de --- .../tests/testERP5RemoteUserManager.py | 186 ++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100644 product/ERP5Wizard/tests/testERP5RemoteUserManager.py diff --git a/product/ERP5Wizard/tests/testERP5RemoteUserManager.py b/product/ERP5Wizard/tests/testERP5RemoteUserManager.py new file mode 100644 index 0000000000..651550578d --- /dev/null +++ b/product/ERP5Wizard/tests/testERP5RemoteUserManager.py @@ -0,0 +1,186 @@ +############################################################################## +# +# Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved. +# Lukasz Nowak <luke@nexedi.com> +# +# WARNING: This program as such is intended to be used by professional +# programmers who take the whole responsibility of assessing all potential +# consequences resulting from its eventual inadequacies and bugs +# End users who are looking for a ready-to-use solution with commercial +# guarantees and support are strongly advised to contract a Free Software +# Service Company +# +# 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. +# +############################################################################## + +from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase +from Products.ERP5Type.tests.utils import createZODBPythonScript +from Products.ERP5Wizard import addERP5RemoteUserManager +import transaction +import unittest +from Products.ERP5Security.ERP5UserManager import SUPER_USER +from AccessControl.SecurityManagement import getSecurityManager,\ + newSecurityManager +from Products.ERP5Type.Base import Base +from Products.ERP5.ERP5Site import ERP5Site +from Products.ERP5Wizard.Tool.WizardTool import GeneratorCall + +# portal_witch simulation +def proxyMethodHandler(self, kw): + """Dummy proxyMethodHandler""" + # login as super user + newSecurityManager(self, self.getPortalObject().acl_users.getUserById( + SUPER_USER)) + data = getattr(self, kw['method_id'])(**kw['method_kw']) + response = GeneratorCall(data=data) + return response.dump() + +Base.proxyMethodHandler = proxyMethodHandler +Base.security.declarePublic('proxyMethodHandler') + +def Base_authenticateCredentialsFromExpressInstance(self, **kw): + person_list = self.portal_catalog(portal_type='Person', + reference=kw['login']) + + if len(person_list) == 1: + if person_list[0].getTitle() == kw['password']: + return 1 + return 0 + +Base.Base_authenticateCredentialsFromExpressInstance =\ + Base_authenticateCredentialsFromExpressInstance +Base.security.declarePublic('Base_authenticateCredentialsFromExpressInstance') + +# portal_wizard simulation +def ERP5Site_getExpressInstanceUid(self, **kw): + """Dummy site it""" + return 'dummy_site_id' + +ERP5Site.ERP5Site_getExpressInstanceUid =\ + ERP5Site_getExpressInstanceUid +ERP5Site.security.declarePublic('ERP5Site_getExpressInstanceUid') + + +class TestERP5RemoteUserManager(ERP5TypeTestCase): + """Low level tests of remote logging""" + def getBusinessTemplateList(self): + return ( + 'erp5_base', + 'erp5_wizard', + ) + + base_type_portal_type = 'Base Type' + person_portal_type = 'Person' + system_preference_portal_type = 'System Preference' + + erp5_remote_manager_id = 'erp5_remote_user_manager' + system_preference_id = 'TestERP5RemoteUserManager' + + + def setUpRemoteUserManager(self): + acl_users = self.portal.acl_users + addERP5RemoteUserManager(acl_users, self.erp5_remote_manager_id) + erp5_remote_manager = getattr(acl_users, self.erp5_remote_manager_id) + erp5_users = getattr(acl_users, 'erp5_users') + erp5_users.manage_activateInterfaces(['IUserEnumerationPlugin']) + erp5_remote_manager.manage_activateInterfaces(['IAuthenticationPlugin']) + transaction.commit() + + def afterSetUp(self): + self.portal = self.getPortalObject() + self.person_module = self.portal.person_module + acl_users = self.portal.acl_users + self.erp5_remote_manager = getattr(acl_users, self.erp5_remote_manager_id) + # set preferences before each test, as test suite can have different + # ip/port after being saved and then loaded + self.setUpAuthenticationServerPreferences() + transaction.commit() + self.tic() + + def beforeTearDown(self): + self.portal.portal_caches.clearAllCache() + transaction.commit() + self.tic() + self.person_module.deleteContent(list(self.person_module.objectIds())) + transaction.commit() + self.tic() + + def setUpAuthenticationServerPreferences(self): + portal_preferences = self.portal.portal_preferences + # disable all existing system preferences + system_preference = None + if self.system_preference_id in portal_preferences.objectIds(): + system_preference = getattr(portal_preferences, + self.system_preference_id) + self.assertEqual(self.system_preference_portal_type, + system_preference.getPortalType()) + else: + system_preference = portal_preferences.newContent( + portal_type=self.system_preference_portal_type) + system_preference.edit( + preferred_witch_tool_server_url=self.portal.absolute_url() + '/', + preferred_witch_tool_server_root=self.getPortalId(), + ) + if self.portal.portal_workflow.isTransitionPossible(system_preference, + 'enable'): + system_preference.enable() + self.assertEqual('global', system_preference.getPreferenceState()) + # clear cache after setting preferences + self.portal.portal_caches.clearAllCache() + + def createDummyWitchTool(self): + if 'portal_witch' not in self.portal.objectIds(): + self.portal.newContent(id='portal_witch', + portal_type=self.base_type_portal_type) + + def setUpOnce(self): + self.portal = self.getPortalObject() + self.setUpRemoteUserManager() + self.createDummyWitchTool() + transaction.commit() + self.tic() + + def createPerson(self, reference, password): + """Creates person with reference and password in title to simulate remote + logging""" + person = self.person_module.newContent( + portal_type=self.person_portal_type, + reference=reference, title=password) + + def test_correct_login(self): + login = 'someone' + password = 'somepass' + self.createPerson(login, password) + transaction.commit() + self.tic() + kw = {'login':login, 'password': password} + self.assertEqual(('someone', 'someone'), + self.erp5_remote_manager.authenticateCredentials(kw)) + + def test_incorrect_login(self): + login = 'someone' + password = 'somepass' + self.createPerson(login, password) + transaction.commit() + self.tic() + kw = {'login':login, 'password': 'another_password'} + self.assertEqual(None, + self.erp5_remote_manager.authenticateCredentials(kw)) + +def test_suite(): + suite = unittest.TestSuite() + suite.addTest(unittest.makeSuite(TestERP5RemoteUserManager)) + return suite -- 2.30.9