From c3bb7b3249a789763bd307b14f5b60b7ac1c14aa Mon Sep 17 00:00:00 2001 From: Folker Bernitt Date: Tue, 26 Jan 2016 10:55:15 +0100 Subject: Refactor test account account creation into own class - Issue #576 - Step towards functional tests for multi user --- service/test/integration/test_multi_user_login.py | 2 +- .../test/support/integration/app_test_client.py | 109 +++++++++++++++------ .../test/support/integration/multi_user_client.py | 43 ++------ 3 files changed, 88 insertions(+), 66 deletions(-) (limited to 'service/test') diff --git a/service/test/integration/test_multi_user_login.py b/service/test/integration/test_multi_user_login.py index 3b5b9d4b..c571cf29 100644 --- a/service/test/integration/test_multi_user_login.py +++ b/service/test/integration/test_multi_user_login.py @@ -45,7 +45,7 @@ class MultiUserLoginTest(MultiUserClient, SoledadTestBase): @defer.inlineCallbacks def test_wrong_credentials_cannot_access_resources(self): - response, login_request = yield self.login('username', 'wrong_password') + response, login_request = self.login('username', 'wrong_password') response_str = yield response self.assertEqual(401, login_request.responseCode) self.assertIn('Invalid credentials', login_request.written) diff --git a/service/test/support/integration/app_test_client.py b/service/test/support/integration/app_test_client.py index dda13b4f..baf05e2a 100644 --- a/service/test/support/integration/app_test_client.py +++ b/service/test/support/integration/app_test_client.py @@ -46,52 +46,104 @@ from pixelated.resources.root_resource import RootResource from test.support.integration.model import MailBuilder from test.support.test_helper import request_mock from test.support.integration.model import ResponseMail +from tempdir import TempDir -class AppTestClient(object): +class AppTestAccount(object): INDEX_KEY = '\xde3?\x87\xff\xd9\xd3\x14\xf0\xa7>\x1f%C{\x16.\\\xae\x8c\x13\xa7\xfb\x04\xd4]+\x8d_\xed\xd1\x8d\x0bI' \ '\x8a\x0e\xa4tm\xab\xbf\xb4\xa5\x99\x00d\xd5w\x9f\x18\xbc\x1d\xd4_W\xd2\xb6\xe8H\x83\x1b\xd8\x9d\xad' - ACCOUNT = 'test' - MAIL_ADDRESS = 'test@pixelated.org' - # def __init__(self): - # self.start_client() + def __init__(self, user_id): + self._user_id = user_id + self._uuid = str(uuid.uuid4()) + self._mail_address = '%s@pixelated.org' % user_id + self._tmp_dir = TempDir() + self._soledad = None + self._services = None @defer.inlineCallbacks - def start_client(self): - soledad_test_folder = self._generate_soledad_test_folder_name() - SearchEngine.DEFAULT_INDEX_HOME = soledad_test_folder - - self.cleanup = lambda: shutil.rmtree(soledad_test_folder) - - self.soledad = yield initialize_soledad(tempdir=soledad_test_folder) - - self.keymanager = mock() - + def start(self): + soledad_test_folder = os.path.join(self._tmp_dir.name, self._uuid) + self.soledad = yield initialize_soledad(tempdir=soledad_test_folder, uuid=self._uuid) self.search_engine = SearchEngine(self.INDEX_KEY, user_home=soledad_test_folder) + self.keymanager = mock() self.mail_sender = self._create_mail_sender() - self.mail_store = SearchableMailStore(LeapMailStore(self.soledad), self.search_engine) self.attachment_store = LeapAttachmentStore(self.soledad) - account_ready_cb = defer.Deferred() - self.account = IMAPAccount(self.ACCOUNT, self.soledad, account_ready_cb) - yield account_ready_cb + yield self._initialize_imap_account() + self.draft_service = DraftService(self.mail_store) self.leap_session = mock() self.feedback_service = FeedbackService(self.leap_session) self.mail_service = self._create_mail_service(self.mail_sender, self.mail_store, self.search_engine, self.attachment_store) + mails = yield self.mail_service.all_mails() + if len(mails) > 0: + raise Exception('What? Where did these come from?') self.search_engine.index_mails(mails) + @property + def services(self): + if self._services is None: + services = mock() + services.keymanager = self.keymanager + services.mail_service = self.mail_service + services.draft_service = self.draft_service + services.search_engine = self.search_engine + services.feedback_service = self.feedback_service + + self._services = services + + return self._services + + def cleanup(self): + self._tmp_dir.dissolve() + + def _initialize_imap_account(self): + account_ready_cb = defer.Deferred() + self.account = IMAPAccount(self._user_id, self.soledad, account_ready_cb) + return account_ready_cb + + def _create_mail_service(self, mail_sender, mail_store, search_engine, attachment_store): + return MailService(mail_sender, mail_store, search_engine, self._mail_address, attachment_store) + + def _create_mail_sender(self): + mail_sender = Mock() + mail_sender.sendmail.side_effect = lambda mail: succeed(mail) + return mail_sender + + +class AppTestClient(object): + INDEX_KEY = '\xde3?\x87\xff\xd9\xd3\x14\xf0\xa7>\x1f%C{\x16.\\\xae\x8c\x13\xa7\xfb\x04\xd4]+\x8d_\xed\xd1\x8d\x0bI' \ + '\x8a\x0e\xa4tm\xab\xbf\xb4\xa5\x99\x00d\xd5w\x9f\x18\xbc\x1d\xd4_W\xd2\xb6\xe8H\x83\x1b\xd8\x9d\xad' + ACCOUNT = 'test' + MAIL_ADDRESS = 'test@pixelated.org' + + @defer.inlineCallbacks + def start_client(self): + self._test_account = AppTestAccount(self.ACCOUNT) + + yield self._test_account.start() + + self.cleanup = lambda: self._test_account.cleanup() + + # copy fields for single user tests + self.soledad = self._test_account.soledad + self.search_engine = self._test_account.search_engine + self.keymanager = self._test_account.keymanager + self.mail_sender = self._test_account.mail_sender + self.mail_store = self._test_account.mail_store + self.attachment_store = self._test_account.attachment_store + self.draft_service = self._test_account.draft_service + self.leap_session = self._test_account.leap_session + self.feedback_service = self._test_account.feedback_service + self.mail_service = self._test_account.mail_service + self.account = self._test_account.account + self.service_factory = SingleUserServicesFactory(UserAgentMode(is_single_user=True)) - services = mock() - services.keymanager = self.keymanager - services.mail_service = self.mail_service - services.draft_service = self.draft_service - services.search_engine = self.search_engine - services.feedback_service = self.feedback_service + services = self._test_account.services self.service_factory.add_session('someuserid', services) self.resource = RootResource(self.service_factory) @@ -177,10 +229,6 @@ class AppTestClient(object): mail_sender.sendmail.side_effect = lambda mail: succeed(mail) return mail_sender - def _create_mail_service(self, mail_sender, mail_store, search_engine, attachment_store): - mail_service = MailService(mail_sender, mail_store, search_engine, self.MAIL_ADDRESS, attachment_store) - return mail_service - def _generate_soledad_test_folder_name(self, soledad_test_folder='/tmp/soledad-test/test'): return os.path.join(soledad_test_folder, str(uuid.uuid4())) @@ -254,11 +302,10 @@ class AppTestClient(object): @defer.inlineCallbacks -def initialize_soledad(tempdir): +def initialize_soledad(tempdir, uuid): if os.path.isdir(tempdir): shutil.rmtree(tempdir) - uuid = "foobar-uuid" passphrase = u"verysecretpassphrase" secret_path = os.path.join(tempdir, "secret.gpg") local_db_path = os.path.join(tempdir, "soledad.u1db") diff --git a/service/test/support/integration/multi_user_client.py b/service/test/support/integration/multi_user_client.py index 897799aa..af314fdf 100644 --- a/service/test/support/integration/multi_user_client.py +++ b/service/test/support/integration/multi_user_client.py @@ -41,7 +41,7 @@ from pixelated.resources.auth import LeapPasswordChecker, SessionChecker, Pixela from pixelated.resources.login_resource import LoginResource from pixelated.resources.root_resource import RootResource from test.support.integration import AppTestClient -from test.support.integration.app_test_client import initialize_soledad +from test.support.integration.app_test_client import initialize_soledad, AppTestAccount from test.support.test_helper import request_mock @@ -50,10 +50,12 @@ class MultiUserClient(AppTestClient): @defer.inlineCallbacks def start_client(self): - self.soledad_test_folder = self._generate_soledad_test_folder_name() - SearchEngine.DEFAULT_INDEX_HOME = self.soledad_test_folder - self.cleanup = lambda: shutil.rmtree(self.soledad_test_folder) - self.soledad = yield initialize_soledad(tempdir=self.soledad_test_folder) + self._test_account = AppTestAccount('test') + + yield self._test_account.start() + + self.cleanup = lambda: self._test_account.cleanup() + self.soledad = self._test_account.soledad self.service_factory = ServicesFactory(UserAgentMode(is_single_user=False)) @@ -61,7 +63,6 @@ class MultiUserClient(AppTestClient): leap_provider = mock() self.resource = set_up_protected_resources(root_resource, leap_provider, self.service_factory) - @defer.inlineCallbacks def login(self, username='username', password='password'): leap_session = mock(LeapSession) user_auth = mock() @@ -74,12 +75,11 @@ class MultiUserClient(AppTestClient): self._set_leap_srp_auth(username, password) when(LeapSessionFactory).create(username, password).thenReturn(leap_session) - _services = yield self.generate_services() - when(config_services).Services(leap_session).thenReturn(_services) + when(config_services).Services(leap_session).thenReturn(self._test_account.services) # when(Services).setup().thenReturn(defer.succeed('mocked so irrelevant')) request = request_mock(path='/login', method="POST", body={'username': username, 'password': password}) - defer.returnValue(self._render(request, as_json=False)) + return self._render(request, as_json=False) def _set_leap_srp_auth(self, username, password): auth_dict = {'username': 'password'} @@ -95,28 +95,3 @@ class MultiUserClient(AppTestClient): session = from_request.getSession() request.session = session return self._render(request, as_json) - - @defer.inlineCallbacks - def generate_services(self): - search_engine = SearchEngine(self.INDEX_KEY, user_home=self.soledad_test_folder) - self.mail_sender = self._create_mail_sender() - - self.mail_store = SearchableMailStore(LeapMailStore(self.soledad), search_engine) - self.attachment_store = LeapAttachmentStore(self.soledad) - - account_ready_cb = defer.Deferred() - self.account = IMAPAccount(self.ACCOUNT, self.soledad, account_ready_cb) - yield account_ready_cb - self.leap_session = mock() - - mail_service = self._create_mail_service(self.mail_sender, self.mail_store, search_engine, self.attachment_store) - mails = yield mail_service.all_mails() - search_engine.index_mails(mails) - - services = mock() - services.keymanager = mock() - services.mail_service = mail_service - services.draft_service = DraftService(self.mail_store) - services.search_engine = search_engine - services.feedback_service = FeedbackService(self.leap_session) - defer.returnValue(services) -- cgit v1.2.3