diff options
| author | NavaL <mnandri@thoughtworks.com> | 2016-01-25 20:47:27 +0100 | 
|---|---|---|
| committer | NavaL <mnandri@thoughtworks.com> | 2016-01-25 20:47:52 +0100 | 
| commit | bb16581d63d1de23a5dc5457e0030802b9fd00d7 (patch) | |
| tree | d8e8adb2d6d76881c62a7fd5f374447995512608 /service/test/support/integration | |
| parent | a542199a90aefdcee010db02134c40a1aaf6e919 (diff) | |
added integration test
Issue #576
Diffstat (limited to 'service/test/support/integration')
| -rw-r--r-- | service/test/support/integration/multi_user_client.py | 134 | 
1 files changed, 134 insertions, 0 deletions
diff --git a/service/test/support/integration/multi_user_client.py b/service/test/support/integration/multi_user_client.py new file mode 100644 index 00000000..c610c3e8 --- /dev/null +++ b/service/test/support/integration/multi_user_client.py @@ -0,0 +1,134 @@ +# +# Copyright (c) 2014 ThoughtWorks, Inc. +# +# Pixelated is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pixelated 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 Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with Pixelated. If not, see <http://www.gnu.org/licenses/>. +import json +import shutil + +from leap.exceptions import SRPAuthenticationError +from leap.mail.imap.account import IMAPAccount +from mockito import mock, when, any as ANY +from twisted.cred import portal +from twisted.cred.checkers import AllowAnonymousAccess +from twisted.internet import defer + +from leap.auth import SRPAuth + +from pixelated.adapter.mailstore.leap_attachment_store import LeapAttachmentStore +from pixelated.adapter.services.feedback_service import FeedbackService +from pixelated.application import UserAgentMode, ServicesFactory + +from pixelated.adapter.mailstore import LeapMailStore +from pixelated.adapter.mailstore.searchable_mailstore import SearchableMailStore + +from pixelated.adapter.search import SearchEngine +from pixelated.adapter.services.draft_service import DraftService +from pixelated.bitmask_libraries.session import LeapSession, LeapSessionFactory +from pixelated.config import services as config_services +# from pixelated.config.services import Services +from pixelated.resources.auth import LeapPasswordChecker, SessionChecker, PixelatedRealm, PixelatedAuthSessionWrapper +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.test_helper import request_mock + + +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.service_factory = ServicesFactory(UserAgentMode(is_single_user=False)) + +        root_resource = RootResource(self.service_factory) +        anonymous_resource = LoginResource(self.service_factory) + +        leap_provider = mock() +        checker = LeapPasswordChecker(leap_provider) +        session_checker = SessionChecker() + +        realm = PixelatedRealm(root_resource, anonymous_resource) +        _portal = portal.Portal(realm, [checker, session_checker, AllowAnonymousAccess()]) + +        protected_resource = PixelatedAuthSessionWrapper(_portal, root_resource, anonymous_resource, []) +        anonymous_resource.set_portal(_portal) +        root_resource.initialize(_portal) + +        self.resource = protected_resource + +    @defer.inlineCallbacks +    def login(self, username='username', password='password'): +        leap_session = mock(LeapSession) +        user_auth = mock() +        user_auth.uuid = 'some_user_uuid' +        leap_session.user_auth = user_auth +        config = mock() +        config.leap_home = 'some_folder' +        leap_session.config = config +        leap_session.fresh_account = False + +        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(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)) + +    def _set_leap_srp_auth(self, username, password): +        auth_dict = {'username': 'password'} +        if auth_dict[username] == password: +            when(SRPAuth).authenticate(username, password).thenReturn(True) +        else: +            when(SRPAuth).authenticate(username, password).thenRaise(SRPAuthenticationError()) + +    def get(self, path, get_args='', as_json=True, from_request=None): +        request = request_mock(path) +        request.args = get_args +        if from_request: +            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)  | 
