"""Logging and the server (#5159): one handler, the level a setting, and Hypercorn's lines going through the same logging.""" import logging import pytest from steward.core import logging_setup from steward.core.settings import DEFAULTS @pytest.fixture def root(): root = logging.getLogger() handlers, level = list(root.handlers), root.level yield root root.handlers[:] = handlers root.setLevel(level) def test_configuring_twice_installs_one_handler(root): logging_setup.configure_logging("INFO") logging_setup.configure_logging("DEBUG") ours = [h for h in root.handlers if getattr(h, "_steward", False)] assert len(ours) == 1 assert ours[0].formatter._fmt == logging_setup.FORMAT assert root.level == logging.DEBUG @pytest.mark.parametrize("given, applied", [ ("warning", "WARNING"), (" Error ", "ERROR"), ("DEBUG", "DEBUG"), ("loud", "INFO"), ("", "INFO"), (None, "INFO"), ]) def test_the_level_setting_is_applied_and_an_unknown_one_is_info(root, given, applied): assert logging_setup.set_log_level(given) == applied assert root.level == getattr(logging, applied) def test_a_library_basic_config_after_ours_changes_nothing(root): logging_setup.configure_logging("WARNING") before = list(root.handlers) logging.basicConfig(level=logging.DEBUG, format="%(message)s") assert root.handlers == before and root.level == logging.WARNING def test_the_level_is_a_setting_defaulting_to_info(): assert DEFAULTS["log.level"] == "INFO" assert DEFAULTS["log.level"] in logging_setup.LEVELS def test_the_server_is_one_hypercorn_worker_logging_through_steward(): from steward.cli import GRACEFUL_TIMEOUT_SECONDS, hypercorn_config config = hypercorn_config("0.0.0.0", 5000) assert config.bind == ["0.0.0.0:5000"] assert config.workers == 1 # run, stream and scheduler state is in-process assert config.graceful_timeout == GRACEFUL_TIMEOUT_SECONDS assert config.accesslog is logging.getLogger("hypercorn.access") assert config.errorlog is logging.getLogger("hypercorn.error")