09eaf69a83
The phase2_4_5_call_site_completion_20260621 track's end-of-track report
documented 5 pre-existing tier-1-unit-core failures as 'not caused by
this track' and deferred them to a future track. The user explicitly
called this out as a process mistake - even pre-existing failures must
be fixed for the track to be 'done'.
Fixed 3 of 5 (the other 2 are sandbox-pollution audit_tier2_leaks tests
that require infrastructure changes):
1. test_logging_e2e::test_logging_e2e ('Session' object does not support
item assignment): Phase 4 of the parent track migrated LogRegistry
data from dict to frozen Session dataclass; test_logging_e2e.py was
missed in the migration. Fix: add LogRegistry.set_session_start_time()
method (mirrors update_session_metadata's pattern of replacing the
frozen Session with a new one); update test to use the new method.
2. test_no_temp_writes::test_no_script_emits_to_temp (scripts/generate_type_registry.py
uses tempfile): The --check mode was using tempfile.TemporaryDirectory
which the audit forbids. Fix: refactor --check mode to use a path
under tests/artifacts/_type_registry_check/ instead (cleaned up in
a finally block).
3. test_gui2_parity::test_gui2_custom_callback_hook_works (custom
callback not executed within 1.5s): The test used time.sleep(1.5) +
assert, the documented race condition anti-pattern. Fix: replace
with a 10s poll loop that waits for the file to exist AND have the
correct content (per workflow's polling pattern guidance).
Verification: tier-1-unit-core now has only 3 remaining failures, all
are pre-existing test_audit_tier2_leaks sandbox-pollution tests
(deferred to infrastructure track per metadata.json).
62 lines
2.6 KiB
Python
62 lines
2.6 KiB
Python
import pytest
|
|
from typing import Any
|
|
from pathlib import Path
|
|
from datetime import datetime, timedelta
|
|
from src import session_logger
|
|
from src.log_registry import LogRegistry
|
|
from src.log_pruner import LogPruner
|
|
|
|
@pytest.fixture
|
|
def e2e_setup(tmp_path: Path, monkeypatch: Any) -> Any:
|
|
# Ensure closed before starting
|
|
session_logger.close_session()
|
|
monkeypatch.setattr(session_logger, "_comms_fh", None)
|
|
|
|
logs_dir = tmp_path / "logs"
|
|
scripts_dir = tmp_path / "scripts" / "generated"
|
|
logs_dir.mkdir(parents=True, exist_ok=True)
|
|
scripts_dir.mkdir(parents=True, exist_ok=True)
|
|
|
|
from src import paths
|
|
monkeypatch.setattr(paths, "get_logs_dir", lambda: logs_dir)
|
|
monkeypatch.setattr(paths, "get_scripts_dir", lambda: scripts_dir)
|
|
|
|
yield tmp_path
|
|
# Cleanup
|
|
session_logger.close_session()
|
|
|
|
def test_logging_e2e(e2e_setup: Any) -> None:
|
|
tmp_path = e2e_setup
|
|
logs_dir = tmp_path / "logs"
|
|
# Step 1: Initialize (open_session)
|
|
session_logger.open_session(label="E2E_Test")
|
|
session_id = session_logger._session_id
|
|
session_dir = session_logger._session_dir
|
|
# Step 2: Simulate logs (write 'ERROR' to 'comms.log')
|
|
# Use log_comms which writes to comms.log
|
|
session_logger.log_comms({"level": "ERROR", "message": "Something went wrong"})
|
|
# Step 3: Shutdown (close_session)
|
|
session_logger.close_session()
|
|
# Step 4: Verify 'log_registry.toml' has the session whitelisted due to 'ERROR'
|
|
registry_path = logs_dir / "log_registry.toml"
|
|
registry = LogRegistry(str(registry_path))
|
|
assert registry.is_session_whitelisted(session_id), "Current session should be whitelisted due to ERROR keyword"
|
|
# Step 5: Simulate an OLD insignificant session in the registry and directory
|
|
old_session_id = "20200101_120000_OLD"
|
|
old_session_dir = logs_dir / old_session_id
|
|
old_session_dir.mkdir()
|
|
(old_session_dir / "comms.log").write_text("nothing special") # < 2KB
|
|
old_start_time = datetime.now() - timedelta(days=2)
|
|
registry.register_session(old_session_id, str(old_session_dir), old_start_time)
|
|
# Step 6: Trigger 'LogPruner.prune()'
|
|
pruner = LogPruner(registry, str(logs_dir))
|
|
pruner.prune()
|
|
# Step 7: Verify the OLD session is deleted but the NEW (whitelisted) session is kept.
|
|
assert not old_session_dir.exists(), "Old insignificant session should have been pruned"
|
|
assert session_dir.exists(), "New whitelisted session should have been kept"
|
|
# Extra check: Whitelisted sessions should be kept even if old
|
|
# Manually backdate the current session
|
|
registry.set_session_start_time(session_id, datetime.now() - timedelta(days=2))
|
|
pruner.prune()
|
|
assert session_dir.exists(), "Whitelisted session should be kept even if it is old and small"
|