1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
"""Unit tests for logger.py."""
from __future__ import annotations
import logging
from unittest.mock import call, patch
from zeroconf._logger import QuietLogger, set_logger_level_if_unset
def test_loading_logger():
"""Test loading logger does not change level unless it is unset."""
log = logging.getLogger("zeroconf")
log.setLevel(logging.CRITICAL)
set_logger_level_if_unset()
log = logging.getLogger("zeroconf")
assert log.level == logging.CRITICAL
log = logging.getLogger("zeroconf")
log.setLevel(logging.NOTSET)
set_logger_level_if_unset()
log = logging.getLogger("zeroconf")
assert log.level == logging.WARNING
def test_log_warning_once():
"""Test we only log with warning level once."""
QuietLogger._seen_logs = {}
quiet_logger = QuietLogger()
with (
patch("zeroconf._logger.log.warning") as mock_log_warning,
patch("zeroconf._logger.log.debug") as mock_log_debug,
):
quiet_logger.log_warning_once("the warning")
assert mock_log_warning.mock_calls
assert not mock_log_debug.mock_calls
with (
patch("zeroconf._logger.log.warning") as mock_log_warning,
patch("zeroconf._logger.log.debug") as mock_log_debug,
):
quiet_logger.log_warning_once("the warning")
assert not mock_log_warning.mock_calls
assert mock_log_debug.mock_calls
def test_log_exception_warning():
"""Test we only log with warning level once."""
QuietLogger._seen_logs = {}
quiet_logger = QuietLogger()
with (
patch("zeroconf._logger.log.warning") as mock_log_warning,
patch("zeroconf._logger.log.debug") as mock_log_debug,
):
quiet_logger.log_exception_warning("the exception warning")
assert mock_log_warning.mock_calls
assert not mock_log_debug.mock_calls
with (
patch("zeroconf._logger.log.warning") as mock_log_warning,
patch("zeroconf._logger.log.debug") as mock_log_debug,
):
quiet_logger.log_exception_warning("the exception warning")
assert not mock_log_warning.mock_calls
assert mock_log_debug.mock_calls
def test_llog_exception_debug():
"""Test we only log with a trace once."""
QuietLogger._seen_logs = {}
quiet_logger = QuietLogger()
with patch("zeroconf._logger.log.debug") as mock_log_debug:
quiet_logger.log_exception_debug("the exception")
assert mock_log_debug.mock_calls == [call("the exception", exc_info=True)]
with patch("zeroconf._logger.log.debug") as mock_log_debug:
quiet_logger.log_exception_debug("the exception")
assert mock_log_debug.mock_calls == [call("the exception", exc_info=False)]
def test_log_exception_once():
"""Test we only log with warning level once."""
QuietLogger._seen_logs = {}
quiet_logger = QuietLogger()
exc = Exception()
with (
patch("zeroconf._logger.log.warning") as mock_log_warning,
patch("zeroconf._logger.log.debug") as mock_log_debug,
):
quiet_logger.log_exception_once(exc, "the exceptional exception warning")
assert mock_log_warning.mock_calls
assert not mock_log_debug.mock_calls
with (
patch("zeroconf._logger.log.warning") as mock_log_warning,
patch("zeroconf._logger.log.debug") as mock_log_debug,
):
quiet_logger.log_exception_once(exc, "the exceptional exception warning")
assert not mock_log_warning.mock_calls
assert mock_log_debug.mock_calls
|