railiance-infra/tests/test_handoff.py

65 lines
1.9 KiB
Python
Raw Normal View History

from __future__ import annotations
import sys
import unittest
from datetime import datetime, timezone
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT / "scripts"))
from s1_handoff import build_receipt # noqa: E402
from s1_receipt import validate_receipt # noqa: E402
HOSTS = [
{"name": "Railiance01", "baseline_profile": "ufw-managed"},
{"name": "CoulombCore", "baseline_profile": "external-firewall"},
]
class HandoffTests(unittest.TestCase):
def test_all_hosts_and_evidence_produce_pass(self) -> None:
receipt = build_receipt(
revision="3734a1c",
inventory_digest="a" * 64,
hosts=HOSTS,
results={"Railiance01": 0, "CoulombCore": 0},
observed_at=datetime(2026, 8, 23, tzinfo=timezone.utc),
freshness_hours=24,
evidence=[
{"kind": "goss-tap", "sha256": "b" * 64},
{"kind": "goss-tap", "sha256": "c" * 64},
],
)
self.assertEqual("pass", receipt["status"])
validate_receipt(receipt)
def test_one_failed_host_fails_aggregate(self) -> None:
receipt = build_receipt(
revision="3734a1c",
inventory_digest="a" * 64,
hosts=HOSTS,
results={"Railiance01": 0, "CoulombCore": 1},
observed_at=datetime(2026, 8, 23, tzinfo=timezone.utc),
freshness_hours=24,
evidence=[],
)
self.assertEqual("fail", receipt["status"])
def test_dry_run_cannot_claim_pass(self) -> None:
receipt = build_receipt(
revision="3734a1c",
inventory_digest="a" * 64,
hosts=HOSTS,
results=None,
observed_at=datetime(2026, 8, 23, tzinfo=timezone.utc),
freshness_hours=24,
evidence=[],
)
self.assertEqual("not-run", receipt["status"])
if __name__ == "__main__":
unittest.main()