70 lines
2.2 KiB
Python
70 lines
2.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""Unit tests for watchdog logging helpers."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import logging
|
|
from unittest.mock import patch
|
|
|
|
from mes_dashboard.core.watchdog_logging import attach_sqlite_log_handler
|
|
|
|
|
|
def _reset_logger(logger: logging.Logger) -> None:
|
|
logger.handlers.clear()
|
|
if hasattr(logger, "_watchdog_sqlite_handler_registered"):
|
|
delattr(logger, "_watchdog_sqlite_handler_registered")
|
|
|
|
|
|
def test_attach_sqlite_log_handler_enabled_attaches_once():
|
|
test_logger = logging.getLogger("mes_dashboard.watchdog.test.enabled")
|
|
_reset_logger(test_logger)
|
|
handler_one = logging.NullHandler()
|
|
handler_two = logging.NullHandler()
|
|
|
|
with patch("mes_dashboard.core.log_store.LOG_STORE_ENABLED", True), patch(
|
|
"mes_dashboard.core.log_store.get_sqlite_log_handler",
|
|
side_effect=[handler_one, handler_two],
|
|
) as handler_factory:
|
|
first = attach_sqlite_log_handler(test_logger)
|
|
second = attach_sqlite_log_handler(test_logger)
|
|
|
|
assert first is True
|
|
assert second is False
|
|
assert handler_factory.call_count == 1
|
|
assert handler_one in test_logger.handlers
|
|
assert handler_two not in test_logger.handlers
|
|
|
|
_reset_logger(test_logger)
|
|
|
|
|
|
def test_attach_sqlite_log_handler_disabled_skips_factory():
|
|
test_logger = logging.getLogger("mes_dashboard.watchdog.test.disabled")
|
|
_reset_logger(test_logger)
|
|
|
|
with patch("mes_dashboard.core.log_store.LOG_STORE_ENABLED", False), patch(
|
|
"mes_dashboard.core.log_store.get_sqlite_log_handler"
|
|
) as handler_factory:
|
|
attached = attach_sqlite_log_handler(test_logger)
|
|
|
|
assert attached is False
|
|
handler_factory.assert_not_called()
|
|
assert not test_logger.handlers
|
|
|
|
_reset_logger(test_logger)
|
|
|
|
|
|
def test_attach_sqlite_log_handler_handles_handler_errors():
|
|
test_logger = logging.getLogger("mes_dashboard.watchdog.test.error")
|
|
_reset_logger(test_logger)
|
|
|
|
with patch("mes_dashboard.core.log_store.LOG_STORE_ENABLED", True), patch(
|
|
"mes_dashboard.core.log_store.get_sqlite_log_handler",
|
|
side_effect=RuntimeError("boom"),
|
|
):
|
|
attached = attach_sqlite_log_handler(test_logger)
|
|
|
|
assert attached is False
|
|
assert not test_logger.handlers
|
|
|
|
_reset_logger(test_logger)
|