81 lines
2.6 KiB
Python
81 lines
2.6 KiB
Python
|
# Copyright (c) 2023-2024 Arista Networks, Inc.
|
||
|
# Use of this source code is governed by the Apache License 2.0
|
||
|
# that can be found in the LICENSE file.
|
||
|
"""
|
||
|
Tests for anta.logger
|
||
|
"""
|
||
|
from __future__ import annotations
|
||
|
|
||
|
import logging
|
||
|
from typing import TYPE_CHECKING
|
||
|
from unittest.mock import patch
|
||
|
|
||
|
import pytest
|
||
|
|
||
|
from anta.logger import anta_log_exception
|
||
|
|
||
|
if TYPE_CHECKING:
|
||
|
from pytest import LogCaptureFixture
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
"exception, message, calling_logger, __DEBUG__value, expected_message",
|
||
|
[
|
||
|
pytest.param(ValueError("exception message"), None, None, False, "ValueError (exception message)", id="exception only"),
|
||
|
pytest.param(ValueError("exception message"), "custom message", None, False, "custom message\nValueError (exception message)", id="custom message"),
|
||
|
pytest.param(
|
||
|
ValueError("exception message"),
|
||
|
"custom logger",
|
||
|
logging.getLogger("custom"),
|
||
|
False,
|
||
|
"custom logger\nValueError (exception message)",
|
||
|
id="custom logger",
|
||
|
),
|
||
|
pytest.param(
|
||
|
ValueError("exception message"), "Use with custom message", None, True, "Use with custom message\nValueError (exception message)", id="__DEBUG__ on"
|
||
|
),
|
||
|
],
|
||
|
)
|
||
|
def test_anta_log_exception(
|
||
|
caplog: LogCaptureFixture,
|
||
|
exception: Exception,
|
||
|
message: str | None,
|
||
|
calling_logger: logging.Logger | None,
|
||
|
__DEBUG__value: bool,
|
||
|
expected_message: str,
|
||
|
) -> None:
|
||
|
"""
|
||
|
Test anta_log_exception
|
||
|
"""
|
||
|
|
||
|
if calling_logger is not None:
|
||
|
# https://github.com/pytest-dev/pytest/issues/3697
|
||
|
calling_logger.propagate = True
|
||
|
caplog.set_level(logging.ERROR, logger=calling_logger.name)
|
||
|
else:
|
||
|
caplog.set_level(logging.ERROR)
|
||
|
# Need to raise to trigger nice stacktrace for __DEBUG__ == True
|
||
|
try:
|
||
|
raise exception
|
||
|
except ValueError as e:
|
||
|
with patch("anta.logger.__DEBUG__", __DEBUG__value):
|
||
|
anta_log_exception(e, message=message, calling_logger=calling_logger)
|
||
|
|
||
|
# Two log captured
|
||
|
if __DEBUG__value:
|
||
|
assert len(caplog.record_tuples) == 2
|
||
|
else:
|
||
|
assert len(caplog.record_tuples) == 1
|
||
|
logger, level, message = caplog.record_tuples[0]
|
||
|
|
||
|
if calling_logger is not None:
|
||
|
assert calling_logger.name == logger
|
||
|
else:
|
||
|
assert logger == "anta.logger"
|
||
|
|
||
|
assert level == logging.CRITICAL
|
||
|
assert message == expected_message
|
||
|
# the only place where we can see the stracktrace is in the capture.text
|
||
|
if __DEBUG__value is True:
|
||
|
assert "Traceback" in caplog.text
|