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_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_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_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_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_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_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_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_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_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
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
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)
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