From 4873b25259b7ec1c060e32993857a183314eaa66 Mon Sep 17 00:00:00 2001 From: NavaL Date: Wed, 3 Feb 2016 13:44:13 +0100 Subject: checks to load leap sessions and services or not Issue #590 --- service/pixelated/resources/login_resource.py | 12 +++++++----- .../test/support/integration/multi_user_client.py | 9 +++------ service/test/unit/resources/test_login_resource.py | 22 +++++++++++++++++++--- 3 files changed, 29 insertions(+), 14 deletions(-) (limited to 'service') diff --git a/service/pixelated/resources/login_resource.py b/service/pixelated/resources/login_resource.py index dd5563a5..9e47fd3c 100644 --- a/service/pixelated/resources/login_resource.py +++ b/service/pixelated/resources/login_resource.py @@ -131,9 +131,11 @@ class LoginResource(BaseResource): @defer.inlineCallbacks def _setup_user_services(self, srp_auth, request): - leap_session = yield self._init_leap_session(srp_auth) - yield self._initialize_services(leap_session) - self._init_http_session(request, leap_session) + user_id = srp_auth.uuid + if not self._services_factory.is_logged_in(user_id): + leap_session = yield self._init_leap_session(srp_auth) + yield self._initialize_services(leap_session) + self._init_http_session(request, user_id) @defer.inlineCallbacks def _init_leap_session(self, srp_auth): @@ -147,6 +149,6 @@ class LoginResource(BaseResource): if leap_session.fresh_account: yield add_welcome_mail(leap_session.mail_store) - def _init_http_session(self, request, leap_session): + def _init_http_session(self, request, user_id): session = IPixelatedSession(request.getSession()) - session.user_uuid = leap_session.user_auth.uuid + session.user_uuid = user_id diff --git a/service/test/support/integration/multi_user_client.py b/service/test/support/integration/multi_user_client.py index 692dc5e9..19833c9f 100644 --- a/service/test/support/integration/multi_user_client.py +++ b/service/test/support/integration/multi_user_client.py @@ -13,8 +13,6 @@ # # You should have received a copy of the GNU Affero General Public License # along with Pixelated. If not, see . - - from leap.exceptions import SRPAuthenticationError from mockito import mock, when, any as ANY from twisted.internet import defer @@ -27,7 +25,7 @@ from pixelated.bitmask_libraries.session import LeapSession, LeapSessionFactory import pixelated.config.services from pixelated.resources.root_resource import RootResource from test.support.integration import AppTestClient -from test.support.integration.app_test_client import initialize_soledad, AppTestAccount +from test.support.integration.app_test_client import AppTestAccount import test.support.mockito from test.support.test_helper import request_mock @@ -60,9 +58,8 @@ class MultiUserClient(AppTestClient): leap_session.config = config leap_session.fresh_account = False - mock_srp_auth = 'mocked so irrelevant but just need a return value' - self._set_leap_srp_auth(username, password, mock_srp_auth) - when(LeapSessionFactory).create(username, password, mock_srp_auth).thenReturn(leap_session) + self._set_leap_srp_auth(username, password, user_auth) + when(LeapSessionFactory).create(username, password, user_auth).thenReturn(leap_session) when(leap_session).initial_sync().thenAnswer(lambda: defer.succeed(None)) when(pixelated.config.services).Services(ANY()).thenReturn(self._test_account.services) diff --git a/service/test/unit/resources/test_login_resource.py b/service/test/unit/resources/test_login_resource.py index 50b96f15..8f65a030 100644 --- a/service/test/unit/resources/test_login_resource.py +++ b/service/test/unit/resources/test_login_resource.py @@ -1,8 +1,6 @@ -import os - from leap.exceptions import SRPAuthenticationError from mock import patch -from mockito import mock, when, any as ANY, verify, verifyZeroInteractions +from mockito import mock, when, any as ANY, verify, verifyZeroInteractions, verifyNoMoreInteractions from twisted.trial import unittest from twisted.web.resource import IResource from twisted.web.test.requesthelper import DummyRequest @@ -113,6 +111,24 @@ class TestLoginPOST(unittest.TestCase): d.addCallback(assert_login_setup_service_for_user) return d + def test_login_does_not_reload_leap_sessions_and_services_if_already_loaded(self): + irrelevant = None + when(self.portal).login(ANY(), None, IResource).thenReturn((irrelevant, self.user_auth, irrelevant)) + when(self.services_factory).is_logged_in('some_user_uuid').thenReturn(True) + + d = self.web.get(self.request) + + def assert_login_setup_service_for_user(_): + verify(self.portal).login(ANY(), None, IResource) + verify(self.services_factory).is_logged_in('some_user_uuid') + verifyNoMoreInteractions(self.services_factory) + interstitial_js_in_template = '' + self.assertIn(interstitial_js_in_template, self.request.written[0]) + self.assertTrue(self.resource.is_logged_in(self.request)) + + d.addCallback(assert_login_setup_service_for_user) + return d + def test_should_return_form_back_with_error_message_when_login_fails(self): when(self.portal).login(ANY(), None, IResource).thenRaise(Exception()) d = self.web.get(self.request) -- cgit v1.2.3