def test_msg_debug_mode(self, m_logging_config, config, worker_name, exp_msg): worker = NowcastWorker(worker_name, "description") worker.config._dict = config worker._parsed_args = SimpleNamespace(debug=True) msg = worker._configure_logging() assert msg == "**debug mode** writing log messages to console"
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_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
def test_all_ports_in_use(self, m_logging_config, config, worker_name, exception): worker = NowcastWorker(worker_name, "description") worker._socket = Mock(name="zmq_socket") worker.config._dict = config worker._parsed_args = SimpleNamespace(debug=False) m_logging_config.dictConfig.side_effect = exception with pytest.raises(WorkerError): worker._configure_logging()
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_port_in_use(self, m_logging_config, config, worker_name, exception, exp_msg): worker = NowcastWorker(worker_name, "description") worker._socket = Mock(name="zmq_socket") worker.config._dict = config worker._parsed_args = SimpleNamespace(debug=False) m_logging_config.dictConfig.side_effect = (exception, None) msg = worker._configure_logging() assert msg == exp_msg
def test_zmq_handler_root_topic(self, m_logging, m_logging_config): worker = NowcastWorker("test_worker", "description") worker.config._dict = self.zmq_logging_config_ports_list worker._parsed_args = SimpleNamespace(debug=False) m_handler = Mock(name="m_zmq_handler", spec=zmq.log.handlers.PUBHandler) m_logging.getLogger.return_value = Mock(root=Mock( handlers=[m_handler])) worker._configure_logging() assert m_handler.root_topic == "test_worker"
def test_debug_mode_no_console_handler(self, m_logging, m_logging_config, config, worker_name): worker = NowcastWorker(worker_name, "description") worker.config._dict = config worker._parsed_args = SimpleNamespace(debug=True) m_file_handler = Mock(name="m_file_handler") m_logging.getLogger.return_value = Mock(root=Mock( handlers=[m_file_handler])) worker._configure_logging() m_file_handler.setLevel.assert_called_once_with(100)
def test_logging_dictConfig(self, m_logging_config, config, worker_name): worker = NowcastWorker(worker_name, "description") worker.config._dict = config worker._parsed_args = SimpleNamespace(debug=False) worker._configure_logging() if "publisher" in worker.config["logging"]: m_logging_config.dictConfig.assert_called_once_with( worker.config["logging"]["publisher"]) else: m_logging_config.dictConfig.assert_called_once_with( worker.config["logging"])
def test_different_hosts_different_ports(self, m_logging, m_logging_config): worker = NowcastWorker("remote_worker", "description") worker.config._dict = self.zmq_logging_config_different_hosts_different_ports worker._parsed_args = SimpleNamespace(debug=False) m_handler = Mock(name="m_zmq_handler", spec=zmq.log.handlers.PUBHandler) m_logging.getLogger.return_value = Mock(root=Mock( handlers=[m_handler])) with pytest.raises(WorkerError): worker._configure_logging()
def test_zmq_handler_formatters(self, m_logging, m_logging_config): worker = NowcastWorker("test_worker", "description") worker.config._dict = self.zmq_logging_config_ports_list worker._parsed_args = SimpleNamespace(debug=False) m_handler = Mock(name="m_zmq_handler", spec=zmq.log.handlers.PUBHandler) m_logging.getLogger.return_value = Mock(root=Mock( handlers=[m_handler])) worker._configure_logging() expected = { m_logging.DEBUG: m_logging.Formatter("%(message)s\n"), m_logging.INFO: m_logging.Formatter("%(message)s\n"), m_logging.WARNING: m_logging.Formatter("%(message)s\n"), m_logging.ERROR: m_logging.Formatter("%(message)s\n"), m_logging.CRITICAL: m_logging.Formatter("%(message)s\n"), } assert m_handler.formatters == expected
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
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
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_console_logging_only(self, m_logging, m_logging_config, config, worker_name): worker = NowcastWorker(worker_name, "description") if "publisher" in config["logging"]: p_config = patch.dict(config["logging"]["publisher"]["handlers"], {"console": { "level": 1000 }}) else: p_config = patch.dict(config["logging"]["handlers"], {"console": { "level": 1000 }}) worker._parsed_args = SimpleNamespace(debug=True) m_file_handler = Mock(name="m_file_handler") m_console_handler = Mock(name="m_console_handler") m_console_handler.name = "console" m_logging.getLogger.return_value = Mock(root=Mock( handlers=[m_file_handler, m_console_handler])) with p_config: worker.config._dict = config worker._configure_logging() m_console_handler.setLevel.assert_called_once_with(m_logging.DEBUG) m_file_handler.setLevel.assert_called_once_with(1000)
def test_logger_name(self, m_logging_config, config, worker_name): worker = NowcastWorker(worker_name, "description") worker.config._dict = config worker._parsed_args = SimpleNamespace(debug=False) worker._configure_logging() assert worker.logger.name == worker_name
def test_msg(self, m_logging_config, config, worker_name, exp_msg): worker = NowcastWorker(worker_name, "description") worker.config._dict = config worker._parsed_args = SimpleNamespace(debug=False) msg = worker._configure_logging() assert msg == exp_msg