42 lines
1.4 KiB
Python
42 lines
1.4 KiB
Python
import pytest
|
|
from src.log_pruner import LogPruner
|
|
from src.log_registry import LogRegistry
|
|
from pathlib import Path
|
|
from unittest.mock import MagicMock, patch
|
|
import time
|
|
from datetime import datetime, timedelta
|
|
|
|
@pytest.fixture
|
|
def pruner_setup(tmp_path: Path) -> tuple[LogPruner, LogRegistry, Path]:
|
|
logs_dir = tmp_path / "logs"
|
|
logs_dir.mkdir()
|
|
reg_file = tmp_path / "log_registry.toml"
|
|
registry = LogRegistry(str(reg_file))
|
|
pruner = LogPruner(registry, str(logs_dir))
|
|
return pruner, registry, logs_dir
|
|
|
|
def test_prune_old_insignificant_logs(pruner_setup: tuple[LogPruner, LogRegistry, Path]) -> None:
|
|
pruner, registry, logs_dir = pruner_setup
|
|
|
|
# 1. Create a very old, small session
|
|
old_session = "old_session"
|
|
old_dir = logs_dir / old_session
|
|
old_dir.mkdir()
|
|
(old_dir / "comms.log").write_text("{}", encoding="utf-8")
|
|
|
|
# Register it with a very old start time
|
|
old_time = (datetime.now() - timedelta(days=40)).isoformat()
|
|
registry.register_session(old_session, str(old_dir), old_time)
|
|
|
|
# Ensure it is considered old by the registry
|
|
old_sessions = registry.get_old_non_whitelisted_sessions(datetime.now() - timedelta(days=30))
|
|
assert any(s['session_id'] == old_session for s in old_sessions)
|
|
|
|
# 2. Run pruner
|
|
with patch("shutil.rmtree") as mock_rm:
|
|
pruner.prune(max_age_days=30)
|
|
# Verify session removed from registry
|
|
assert old_session not in registry.data
|
|
# Verify directory deletion triggered
|
|
assert mock_rm.called
|