Beispiel #1
0
 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
Beispiel #2
0
 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")
Beispiel #3
0
 def test_logger_debug_task_completed(self):
     worker = NowcastWorker("worker_name", "description")
     worker.logger = Mock(name="logger")
     worker._context = Mock(name="context")
     worker.worker_func = Mock(name="worker_func", side_effect=SystemExit)
     worker._do_work()
     worker.logger.debug.assert_called_once_with(
         "shutting down", extra={"logger_name": "worker_name"})
Beispiel #4
0
 def test_system_exit_context_destroy(self):
     worker = NowcastWorker("worker_name", "description")
     worker.init_cli()
     worker.logger = Mock(name="logger")
     worker._context = Mock(name="context")
     worker.worker_func = Mock(name="worker_func", side_effect=SystemExit)
     worker._do_work()
     assert worker._context.destroy.call_count == 1
Beispiel #5
0
 def test_debug_mode(self):
     worker = NowcastWorker("worker_name", "description")
     worker._parsed_args = Mock(debug=True)
     worker.logger = Mock(name="logger")
     worker._context = Mock(name="context")
     worker._init_zmq_interface()
     assert worker.logger.debug.call_count == 1
     assert not worker._context.socket.called
Beispiel #6
0
 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")
Beispiel #7
0
 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)
Beispiel #8
0
 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")
Beispiel #9
0
 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")
Beispiel #10
0
 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)
Beispiel #11
0
 def test_do_work(self, m_logging):
     worker = NowcastWorker("worker_name", "description")
     worker.init_cli()
     m_worker_func = Mock(name="worker_func")
     m_success = Mock(name="success")
     m_failure = Mock(name="failure")
     worker.cli.parser.parse_args = Mock(name="parse_args")
     worker._configure_logging = Mock(name="_configure_logging")
     worker.logger = m_logging()
     worker._install_signal_handlers = Mock(name="_install_signal_handlers")
     worker._init_zmq_interface = Mock(name="_init_zmq_interface")
     worker._do_work = Mock(name="_do_work")
     p_config_open = patch("nemo_nowcast.config.open",
                           mock_open(read_data=self.config))
     with p_config_open:
         worker.run(m_worker_func, m_success, m_failure)
     assert worker._do_work.call_count == 1
Beispiel #12
0
 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
Beispiel #13
0
 def test_logging_info_debug_mode(self, m_logging):
     worker = NowcastWorker("worker_name", "description")
     worker.init_cli()
     m_worker_func = Mock(name="worker_func")
     m_success = Mock(name="success")
     m_failure = Mock(name="failure")
     worker.cli.parser.parse_args = Mock(
         name="parse_args",
         return_value=SimpleNamespace(debug=True,
                                      config_file="nowcast.yaml"),
     )
     worker._configure_logging = Mock(name="_configure_logging")
     worker.logger = m_logging()
     worker._install_signal_handlers = Mock(name="_install_signal_handlers")
     worker._init_zmq_interface = Mock(name="_init_zmq_interface")
     worker._do_work = Mock(name="_do_work")
     p_config_open = patch("nemo_nowcast.config.open",
                           mock_open(read_data=self.config))
     with p_config_open:
         worker.run(m_worker_func, m_success, m_failure)
     assert worker.logger.info.call_count == 2
Beispiel #14
0
 def test_socket(self):
     worker = NowcastWorker("worker_name", "description")
     worker._parsed_args = Mock(debug=False)
     worker.logger = Mock(name="logger")
     worker._context = Mock(name="context")
     worker.config = {
         "zmq": {
             "host": "example.com",
             "ports": {
                 "workers": 4343
             }
         }
     }
     worker._init_zmq_interface()
     worker._context.socket.assert_called_once_with(zmq.REQ)
     assert worker._socket.setsockopt.call_args_list == [
         call(zmq.TCP_KEEPALIVE, 1),
         call(zmq.TCP_KEEPALIVE_IDLE, 900),
     ]
     worker._socket.connect.assert_called_once_with(
         "tcp://example.com:4343")
     assert worker.logger.info.call_count == 1
Beispiel #15
0
 def test_config_load(self, m_logging):
     worker = NowcastWorker("worker_name", "description")
     worker.config._dict = {
         "logging": {},
         "message registry": {
             "next workers module": "nowcast.next_workers",
             "workers": {},
         },
     }
     worker.config.load = Mock()
     worker.init_cli()
     m_worker_func = Mock(name="worker_func")
     m_success = Mock(name="success")
     m_failure = Mock(name="failure")
     worker.cli.parser.parse_args = Mock(name="parse_args")
     worker._configure_logging = Mock(name="_configure_logging")
     worker.logger = m_logging()
     worker._install_signal_handlers = Mock(name="_install_signal_handlers")
     worker._init_zmq_interface = Mock(name="_init_zmq_interface")
     worker._do_work = Mock(name="_do_work")
     worker.run(m_worker_func, m_success, m_failure)
     worker.config.load.assert_called_once_with(
         worker._parsed_args.config_file)
Beispiel #16
0
 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")