diff options
author | NavaL <ayoyo@thoughtworks.com> | 2016-06-14 17:13:13 +0200 |
---|---|---|
committer | NavaL <ayoyo@thoughtworks.com> | 2016-06-14 17:13:13 +0200 |
commit | 59f4366b4ac0b669d8b848e845bd982490cc46f0 (patch) | |
tree | 79f3c777c0ab51bd2011b4ef3474273450cb612d /service/test/unit/test_application.py | |
parent | 9a17e2e25c0bb93f46c7a8de729b0537ec02011d (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.py | 38 |
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 |