File: test_logger.py

package info (click to toggle)
python-zeroconf 0.147.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,380 kB
  • sloc: python: 15,356; makefile: 23
file content (108 lines) | stat: -rw-r--r-- 3,474 bytes parent folder | download | duplicates (2)
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