From d2aabc8c514cb520d968e8241ec15c93bae2a0fe Mon Sep 17 00:00:00 2001 From: Tayane Fernandes Date: Wed, 11 Jan 2017 18:06:44 -0200 Subject: Close session when UploadKeyError occurs When the upload of the user key fails (i.e. Timeout), the session was being held in memory, preventing the user from trying again. Related with: #815, #889 --- service/pixelated/config/sessions.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/service/pixelated/config/sessions.py b/service/pixelated/config/sessions.py index ec5e1c0e..73c366c7 100644 --- a/service/pixelated/config/sessions.py +++ b/service/pixelated/config/sessions.py @@ -19,7 +19,7 @@ from leap.common.events import ( catalog as events ) -from pixelated.bitmask_libraries.keymanager import Keymanager +from pixelated.bitmask_libraries.keymanager import Keymanager, UploadKeyError from pixelated.adapter.mailstore import LeapMailStore from pixelated.config import leap_config from pixelated.bitmask_libraries.certs import LeapCertificate @@ -156,7 +156,12 @@ class LeapSession(object): @defer.inlineCallbacks def finish_bootstrap(self): - yield self.keymanager.generate_openpgp_key() + try: + yield self.keymanager.generate_openpgp_key() + except UploadKeyError as e: + logger.warn('{0}: {1}. Closing session for user: {2}'.format(e.__class__.__name__, e, self.account_email())) + self.close() + yield self._create_account(self.soledad, self.user_auth.uuid) self.incoming_mail_fetcher = yield self._create_incoming_mail_fetcher( self.keymanager, -- cgit v1.2.3 From 6a4545a33cb62abf32bf46422759778a88f96097 Mon Sep 17 00:00:00 2001 From: Tayane Fernandes Date: Thu, 12 Jan 2017 17:56:00 -0200 Subject: Re-raise the exception after closing the session We were trying to setup services even after closing the session. We fixed it and added unit test. Related with: #815 --- service/pixelated/config/sessions.py | 1 + service/test/unit/config/test_sessions.py | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/service/pixelated/config/sessions.py b/service/pixelated/config/sessions.py index 73c366c7..439ca9b3 100644 --- a/service/pixelated/config/sessions.py +++ b/service/pixelated/config/sessions.py @@ -161,6 +161,7 @@ class LeapSession(object): except UploadKeyError as e: logger.warn('{0}: {1}. Closing session for user: {2}'.format(e.__class__.__name__, e, self.account_email())) self.close() + raise yield self._create_account(self.soledad, self.user_auth.uuid) self.incoming_mail_fetcher = yield self._create_incoming_mail_fetcher( diff --git a/service/test/unit/config/test_sessions.py b/service/test/unit/config/test_sessions.py index a7e62c7a..8ae66015 100644 --- a/service/test/unit/config/test_sessions.py +++ b/service/test/unit/config/test_sessions.py @@ -17,9 +17,11 @@ import os from mock import patch from mock import MagicMock +from mockito import when from twisted.internet import defer from twisted.trial import unittest from pixelated.config.sessions import LeapSession, SessionCache +from pixelated.bitmask_libraries.keymanager import UploadKeyError from test.unit.bitmask_libraries.test_abstract_leap import AbstractLeapTest from leap.common.events.catalog import KEYMANAGER_FINISHED_KEY_GENERATION @@ -42,6 +44,16 @@ class SessionTest(AbstractLeapTest): yield session.first_required_sync() mail_fetcher_mock.startService.assert_called_once() + @defer.inlineCallbacks + def test_upload_key_error_closes_the_session(self): + when(self.keymanager).generate_openpgp_key().thenRaise(UploadKeyError('Could not upload key')) + session = self._create_session() + session.close = MagicMock() + + with self.assertRaises(UploadKeyError): + yield session.finish_bootstrap() + session.close.assert_called_once() + @patch('pixelated.config.sessions.register') @patch('pixelated.config.sessions.unregister') @patch('pixelated.config.sessions.Account') -- cgit v1.2.3 From ea44f5e82edccc8f35245f5df305ec68a7ff8b79 Mon Sep 17 00:00:00 2001 From: Tulio Casagrande Date: Fri, 13 Jan 2017 09:41:54 -0200 Subject: Mock register events to not complain about zmq certs Related with: #815 --- service/test/unit/config/test_sessions.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/service/test/unit/config/test_sessions.py b/service/test/unit/config/test_sessions.py index 8ae66015..ad4dd590 100644 --- a/service/test/unit/config/test_sessions.py +++ b/service/test/unit/config/test_sessions.py @@ -14,12 +14,10 @@ # You should have received a copy of the GNU Affero General Public License # along with Pixelated. If not, see . -import os from mock import patch from mock import MagicMock from mockito import when from twisted.internet import defer -from twisted.trial import unittest from pixelated.config.sessions import LeapSession, SessionCache from pixelated.bitmask_libraries.keymanager import UploadKeyError @@ -44,8 +42,9 @@ class SessionTest(AbstractLeapTest): yield session.first_required_sync() mail_fetcher_mock.startService.assert_called_once() + @patch('pixelated.config.sessions.register') @defer.inlineCallbacks - def test_upload_key_error_closes_the_session(self): + def test_upload_key_error_closes_the_session(self, _): when(self.keymanager).generate_openpgp_key().thenRaise(UploadKeyError('Could not upload key')) session = self._create_session() session.close = MagicMock() -- cgit v1.2.3