Files
skywipe/tests/test_logger.py

121 lines
3.7 KiB
Python

import logging
from skywipe.logger import LevelFilter, ProgressTracker, setup_logger
def test_level_filter_accepts_in_range():
logger = logging.getLogger("test.level_filter")
record = logger.makeRecord(
name="test.level_filter",
level=logging.INFO,
fn="test",
lno=1,
msg="message",
args=(),
exc_info=None,
)
level_filter = LevelFilter(logging.DEBUG, logging.INFO)
assert level_filter.filter(record) is True
def test_level_filter_rejects_out_of_range():
logger = logging.getLogger("test.level_filter")
record = logger.makeRecord(
name="test.level_filter",
level=logging.ERROR,
fn="test",
lno=1,
msg="message",
args=(),
exc_info=None,
)
level_filter = LevelFilter(logging.DEBUG, logging.INFO)
assert level_filter.filter(record) is False
def test_progress_tracker_updates_counts():
tracker = ProgressTracker(operation="Testing")
tracker.update()
tracker.update(2)
assert tracker.current == 3
def test_setup_logger_does_not_duplicate_handlers():
logger = logging.getLogger("skywipe")
original_handlers = list(logger.handlers)
for handler in original_handlers:
logger.removeHandler(handler)
try:
setup_logger(verbose=False)
first_count = len(logger.handlers)
setup_logger(verbose=False)
second_count = len(logger.handlers)
finally:
for handler in list(logger.handlers):
logger.removeHandler(handler)
for handler in original_handlers:
logger.addHandler(handler)
assert first_count == second_count
def test_setup_logger_file_handler_lifecycle(tmp_path):
logger = logging.getLogger("skywipe")
original_handlers = list(logger.handlers)
for handler in original_handlers:
logger.removeHandler(handler)
log_file = tmp_path / "skywipe.log"
try:
setup_logger(verbose=False, log_file=log_file)
file_handlers = [
handler for handler in logger.handlers
if isinstance(handler, logging.FileHandler)
]
assert len(file_handlers) == 1
assert file_handlers[0].baseFilename == str(log_file)
setup_logger(verbose=False, log_file=None)
file_handlers = [
handler for handler in logger.handlers
if isinstance(handler, logging.FileHandler)
]
assert file_handlers == []
finally:
for handler in list(logger.handlers):
logger.removeHandler(handler)
for handler in original_handlers:
logger.addHandler(handler)
def test_setup_logger_replaces_file_handler_when_path_changes(tmp_path):
logger = logging.getLogger("skywipe")
original_handlers = list(logger.handlers)
for handler in original_handlers:
logger.removeHandler(handler)
log_file1 = tmp_path / "skywipe1.log"
log_file2 = tmp_path / "skywipe2.log"
try:
setup_logger(verbose=False, log_file=log_file1)
file_handlers = [
handler for handler in logger.handlers
if isinstance(handler, logging.FileHandler)
]
assert len(file_handlers) == 1
assert file_handlers[0].baseFilename == str(log_file1)
setup_logger(verbose=False, log_file=log_file2)
file_handlers = [
handler for handler in logger.handlers
if isinstance(handler, logging.FileHandler)
]
assert len(file_handlers) == 1
assert file_handlers[0].baseFilename == str(log_file2)
finally:
for handler in list(logger.handlers):
logger.removeHandler(handler)
for handler in original_handlers:
logger.addHandler(handler)