mirror of
https://github.com/elder-plinius/OBLITERATUS.git
synced 2026-08-17 16:37:30 +02:00
97 lines
3.5 KiB
Python
97 lines
3.5 KiB
Python
"""Executable contracts for the source-to-test risk map."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
from copy import deepcopy
|
|
from pathlib import Path
|
|
|
|
from scripts import check_test_risk_map
|
|
|
|
|
|
ROOT = Path(__file__).parents[1]
|
|
|
|
|
|
def _write(path: Path, value: object) -> Path:
|
|
path.write_text(json.dumps(value), encoding="utf-8")
|
|
return path
|
|
|
|
|
|
def test_committed_test_risk_map_is_complete():
|
|
assert check_test_risk_map.validate(
|
|
ROOT / "ci" / "test-risk-map.json",
|
|
ROOT / "ci" / "test-quality-policy.json",
|
|
ROOT / "ci" / "conditional-test-policy.json",
|
|
) == []
|
|
|
|
|
|
def test_risk_map_rejects_duplicate_missing_and_unowned_modules(tmp_path):
|
|
risk = json.loads((ROOT / "ci" / "test-risk-map.json").read_text())
|
|
risk["owner"] = ""
|
|
duplicate = deepcopy(risk["modules"][0])
|
|
duplicate["required_tests"] = ["tests/missing.py"]
|
|
duplicate["risk_class"] = "unknown"
|
|
risk["modules"].append(duplicate)
|
|
|
|
errors = check_test_risk_map.validate(
|
|
_write(tmp_path / "risk.json", risk),
|
|
ROOT / "ci" / "test-quality-policy.json",
|
|
ROOT / "ci" / "conditional-test-policy.json",
|
|
)
|
|
|
|
assert "test risk map requires a non-empty owner" in errors
|
|
assert "duplicate risk module path: obliteratus/cli.py" in errors
|
|
assert "risk module obliteratus/cli.py has invalid risk_class" in errors
|
|
assert "risk module obliteratus/cli.py maps missing test path: tests/missing.py" in errors
|
|
|
|
|
|
def test_risk_map_rejects_missing_exclusion_and_gate_mapping(tmp_path):
|
|
risk = json.loads((ROOT / "ci" / "test-risk-map.json").read_text())
|
|
risk["modules"] = [
|
|
module for module in risk["modules"] if module["path"] != "obliteratus/remote.py"
|
|
]
|
|
loader = next(
|
|
module for module in risk["modules"] if module["path"] == "obliteratus/models/loader.py"
|
|
)
|
|
loader["conditional_gates"].remove("cuda-runtime")
|
|
|
|
errors = check_test_risk_map.validate(
|
|
_write(tmp_path / "risk.json", risk),
|
|
ROOT / "ci" / "test-quality-policy.json",
|
|
ROOT / "ci" / "conditional-test-policy.json",
|
|
)
|
|
|
|
assert "CPU exclusion is missing from test risk map: obliteratus/remote.py" in errors
|
|
assert "conditional path is missing from test risk map: obliteratus/remote.py" in errors
|
|
assert "risk module obliteratus/models/loader.py is missing conditional gate cuda-runtime" in errors
|
|
|
|
|
|
def test_risk_map_rejects_gate_that_does_not_cover_module(tmp_path):
|
|
risk = json.loads((ROOT / "ci" / "test-risk-map.json").read_text())
|
|
cli = next(module for module in risk["modules"] if module["path"] == "obliteratus/cli.py")
|
|
cli["conditional_gates"] = ["remote-execution", "unknown-gate"]
|
|
|
|
errors = check_test_risk_map.validate(
|
|
_write(tmp_path / "risk.json", risk),
|
|
ROOT / "ci" / "test-quality-policy.json",
|
|
ROOT / "ci" / "conditional-test-policy.json",
|
|
)
|
|
|
|
assert "risk module obliteratus/cli.py is not covered by gate remote-execution" in errors
|
|
assert "risk module obliteratus/cli.py references unknown gate unknown-gate" in errors
|
|
|
|
|
|
def test_risk_map_cannot_drop_critical_cpu_path(tmp_path):
|
|
risk = json.loads((ROOT / "ci" / "test-risk-map.json").read_text())
|
|
risk["modules"] = [
|
|
module for module in risk["modules"] if module["path"] != "obliteratus/cli.py"
|
|
]
|
|
|
|
errors = check_test_risk_map.validate(
|
|
_write(tmp_path / "risk.json", risk),
|
|
ROOT / "ci" / "test-quality-policy.json",
|
|
ROOT / "ci" / "conditional-test-policy.json",
|
|
)
|
|
|
|
assert "critical CPU path is missing from test risk map: obliteratus/cli.py" in errors
|