summaryrefslogtreecommitdiff
path: root/service/test/unit/test_application.py
diff options
context:
space:
mode:
authorNavaL <ayoyo@thoughtworks.com>2016-06-14 17:13:13 +0200
committerNavaL <ayoyo@thoughtworks.com>2016-06-14 17:13:13 +0200
commit59f4366b4ac0b669d8b848e845bd982490cc46f0 (patch)
tree79f3c777c0ab51bd2011b4ef3474273450cb612d /service/test/unit/test_application.py
parent9a17e2e25c0bb93f46c7a8de729b0537ec02011d (diff)
starting the server when the reactor is running and adding proper error handling during multi-user boostrap
- reactor.stop will not work if the reactor is not running. This will make sure it will be stopped on bootstrap errors now. - added a wrapper that returns a defer.fail for exceptions thrown during the multi-user boostrap - Issue #535
Diffstat (limited to 'service/test/unit/test_application.py')
-rw-r--r--service/test/unit/test_application.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/service/test/unit/test_application.py b/service/test/unit/test_application.py
index 82a956b8..02edcd70 100644
--- a/service/test/unit/test_application.py
+++ b/service/test/unit/test_application.py
@@ -113,3 +113,41 @@ class ApplicationTest(unittest.TestCase):
d.addCallback(_assert_user_logged_out_using_uuid)
d.addCallback(_assert_user_logged_out_using_email_id)
return d
+
+ @patch('pixelated.application.reactor')
+ @patch('pixelated.application._setup_multi_user')
+ def test_should_defer_fail_errors_during_multi_user_start_site(self, mock_multi_user_bootstrap, reactor_mock):
+ args_mock = MagicMock()
+ root_resources_mock = MagicMock()
+ services_factory_mock = MagicMock()
+
+ mock_multi_user_bootstrap.side_effect = Exception('multi-user failed bootstrap for whatever reason')
+
+ d = pixelated.application._start_in_multi_user_mode(args_mock, root_resources_mock, services_factory_mock)
+
+ def _assert_the_same_error_is_relayed_in_the_deferred(e):
+ self.assertIsInstance(e.value, Exception)
+ self.assertEqual(e.value.message, 'multi-user failed bootstrap for whatever reason')
+
+ d.addErrback(_assert_the_same_error_is_relayed_in_the_deferred)
+ return d
+
+
+ @patch('pixelated.application.reactor')
+ @patch('pixelated.application.start_site')
+ @patch('pixelated.application._setup_multi_user')
+ def test_should_defer_fail_errors_during_multi_user_bootstrap(self, ignore_setup_multi_user, mock_start_site, reactor_mock):
+ args_mock = MagicMock()
+ root_resources_mock = MagicMock()
+ services_factory_mock = MagicMock()
+
+ mock_start_site.side_effect = Exception('multi-user failed start site for whatever reason')
+
+ d = pixelated.application._start_in_multi_user_mode(args_mock, root_resources_mock, services_factory_mock)
+
+ def _assert_the_same_error_is_relayed_in_the_deferred(e):
+ self.assertIsInstance(e.value, Exception)
+ self.assertEqual(e.value.message, 'multi-user failed start site for whatever reason')
+
+ d.addErrback(_assert_the_same_error_is_relayed_in_the_deferred)
+ return d