Tidy up logging and rework tests from scratch
This commit is contained in:
86
tests/unit/test_logging.py
Normal file
86
tests/unit/test_logging.py
Normal 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()
|
||||
Reference in New Issue
Block a user