Tidy up logging and rework tests from scratch

This commit is contained in:
Javanaut
2026-04-09 12:46:24 +02:00
parent f9c8b8ac5e
commit 60ae58500a
84 changed files with 1283 additions and 187 deletions

View File

@@ -0,0 +1,86 @@
from __future__ import annotations
import logging
from pathlib import Path
import sys
import tempfile
import unittest
SRC_ROOT = Path(__file__).resolve().parents[2] / "src"
if str(SRC_ROOT) not in sys.path:
sys.path.insert(0, str(SRC_ROOT))
from ffx.logging_utils import ( # noqa: E402
CONSOLE_HANDLER_NAME,
FILE_HANDLER_NAME,
configure_ffx_logger,
get_ffx_logger,
)
class LoggingUtilsTests(unittest.TestCase):
def cleanup_logger(self, logger_name: str) -> None:
logger = logging.getLogger(logger_name)
for handler in list(logger.handlers):
logger.removeHandler(handler)
handler.close()
def test_get_ffx_logger_adds_only_one_null_handler(self):
logger_name = "ffx-test-null-handler"
self.cleanup_logger(logger_name)
logger = get_ffx_logger(logger_name)
logger = get_ffx_logger(logger_name)
null_handlers = [
handler for handler in logger.handlers if isinstance(handler, logging.NullHandler)
]
self.assertEqual(1, len(null_handlers))
self.cleanup_logger(logger_name)
def test_configure_ffx_logger_reuses_named_handlers(self):
logger_name = "ffx-test-configure-handler"
self.cleanup_logger(logger_name)
with tempfile.TemporaryDirectory() as tempdir:
first_log_path = Path(tempdir) / "first.log"
second_log_path = Path(tempdir) / "second.log"
logger = configure_ffx_logger(
str(first_log_path),
logging.ERROR,
logging.INFO,
name=logger_name,
)
logger = configure_ffx_logger(
str(second_log_path),
logging.DEBUG,
logging.WARNING,
name=logger_name,
)
console_handlers = [
handler for handler in logger.handlers if handler.get_name() == CONSOLE_HANDLER_NAME
]
file_handlers = [
handler for handler in logger.handlers if handler.get_name() == FILE_HANDLER_NAME
]
self.assertEqual(1, len(console_handlers))
self.assertEqual(1, len(file_handlers))
self.assertFalse(
any(isinstance(handler, logging.NullHandler) for handler in logger.handlers)
)
self.assertEqual(logging.WARNING, console_handlers[0].level)
self.assertEqual(logging.DEBUG, file_handlers[0].level)
self.assertEqual(str(second_log_path.resolve()), file_handlers[0].baseFilename)
self.cleanup_logger(logger_name)
if __name__ == "__main__":
unittest.main()