def test_unregistered_worker(self): worker = NowcastWorker("test_worker", "description") worker._parsed_args = Mock(debug=True) worker.logger = Mock(name="logger") config = Config() config.file = "nowcast.yaml" worker.config._dict = {"message registry": {"workers": {}}} with pytest.raises(WorkerError): worker.tell_manager("success", "payload")
def test_tell_manager(self): worker = NowcastWorker("test_worker", "description") worker._parsed_args = Mock(debug=False) worker._socket = Mock(name="_socket") worker.logger = Mock(name="logger") config = Config() config.file = "nowcast.yaml" worker.config._dict = { "message registry": { "manager": { "ack": "message acknowledged" }, "workers": { "test_worker": { "success": "successful test" } }, } } mgr_msg = Message(source="manager", type="ack") worker._socket.recv_string.return_value = mgr_msg.serialize() response = worker.tell_manager("success", "payload") worker._socket.send_string.assert_called_once_with( Message(source="test_worker", type="success", payload="payload").serialize()) worker._socket.recv_string.assert_called_once_with() assert worker.logger.debug.call_count == 2 assert response == mgr_msg
def test_crash_tell_manager(self): worker = NowcastWorker("worker_name", "description") worker.logger = Mock(name="logger") worker.tell_manager = Mock(name="tell_manager") worker.worker_func = Mock(name="worker_func", side_effect=Exception) worker._do_work() worker.tell_manager.assert_called_once_with("crash")
def test_logger_critical_unhandled_exception(self): worker = NowcastWorker("worker_name", "description") worker.logger = Mock(name="logger") worker.tell_manager = Mock(name="tell_manager") worker._context = Mock(name="context") worker.worker_func = Mock(name="worker_func", side_effect=Exception) worker._do_work() worker.logger.critical.assert_called_once_with("unhandled exception:", exc_info=True)
def test_failure_tell_manager(self): worker = NowcastWorker("worker_name", "description") worker.init_cli() worker.logger = Mock(name="logger") worker.tell_manager = Mock(name="tell_manager") worker.worker_func = Mock(name="worker_func", side_effect=WorkerError) worker.failure = Mock(name="failure_func", return_value="failure") worker._do_work() worker.tell_manager.assert_called_once_with("failure")
def test_success_tell_manager(self): worker = NowcastWorker("worker_name", "description") worker.init_cli() worker.logger = Mock(name="logger") worker.tell_manager = Mock(name="tell_manager") worker.worker_func = Mock(name="worker_func", return_value="checklist") worker.success = Mock(name="success_func", return_value="success") worker._do_work() worker.tell_manager.assert_called_once_with("success", "checklist")
def test_success_func(self): worker = NowcastWorker("worker_name", "description") worker.init_cli() worker.logger = Mock(name="logger") worker.tell_manager = Mock(name="tell_manager") worker.worker_func = Mock(name="worker_func") worker.success = Mock(name="success_func") worker._do_work() worker.success.assert_called_once_with(worker._parsed_args)
def test_unregistered_manager_message_type(self): worker = NowcastWorker("test_worker", "description") worker._parsed_args = Mock(debug=False) worker._socket = Mock(name="_socket") worker.logger = Mock(name="logger") config = Config() config.file = "nowcast.yaml" worker.config._dict = { "message registry": { "manager": { "ack": "message acknowledged" }, "workers": { "test_worker": { "success": "successful test" } }, } } mgr_msg = Message(source="manager", type="foo") worker._socket.recv_string.return_value = mgr_msg.serialize() with pytest.raises(WorkerError): worker.tell_manager("success", "payload")
def test_debug_mode(self): worker = NowcastWorker("test_worker", "description") worker._parsed_args = Mock(debug=True) worker.logger = Mock(name="logger") config = Config() config.file = "nowcast.yaml" worker.config._dict = { "message registry": { "workers": { "test_worker": { "success": "successful test" } } } } response_payload = worker.tell_manager("success", "payload") assert worker.logger.debug.call_count == 1 assert response_payload is None