Files
awoooi/apps/api/tests/test_drift_fingerprint_state_service.py
Your Name 64b34828a7
All checks were successful
Code Review / ai-code-review (push) Successful in 11s
CD Pipeline / tests (push) Successful in 1m10s
CD Pipeline / build-and-deploy (push) Successful in 3m42s
CD Pipeline / post-deploy-checks (push) Successful in 1m18s
feat(drift): record remediation evidence
2026-05-19 09:13:58 +08:00

131 lines
4.1 KiB
Python

from src.models.drift import DriftItem, DriftLevel, DriftReport, DriftStatus
from src.services.drift_fingerprint_state_service import (
build_drift_fingerprint_state,
)
from src.services.drift_repeat_state import build_drift_repeat_state
def _report(report_id: str = "drift-1", status: DriftStatus = DriftStatus.PENDING) -> DriftReport:
return DriftReport(
report_id=report_id,
namespace="awoooi-prod",
high_count=1,
medium_count=32,
info_count=23,
status=status,
items=[
DriftItem(
resource_kind="Deployment",
resource_name="awoooi-api",
namespace="awoooi-prod",
field_path="spec.template.spec.volumes",
git_value=["a"],
actual_value=["a", "b"],
drift_level=DriftLevel.HIGH,
)
],
)
def _no_drift_report(report_id: str = "no-drift-1") -> DriftReport:
return DriftReport(
report_id=report_id,
namespace="awoooi-prod",
high_count=0,
medium_count=0,
info_count=0,
status=DriftStatus.IGNORED,
items=[],
)
def test_build_state_marks_repeated_pending_human() -> None:
current = _report("drift-3")
repeat = build_drift_repeat_state(
current,
[_report("drift-1"), _report("drift-2")],
)
state = build_drift_fingerprint_state(current, repeat)
assert state["schema_version"] == "drift_fingerprint_state_v1"
assert state["fingerprint"].startswith("dfp_")
assert state["occurrences_12h"] == 3
assert state["fsm_state"] == "pending_human_repeated"
assert state["writes_drift_status"] is False
assert state["writes_incident_state"] is False
assert state["p0_escalation"]["dedup_window_hours"] == 24
def test_build_state_marks_zero_diff_open_pr() -> None:
report = _report("drift-4")
repeat = build_drift_repeat_state(report, [])
state = build_drift_fingerprint_state(
report,
repeat,
open_pr={
"number": 145,
"state": "open",
"merged": False,
"file_count": 0,
"commit_count": 0,
"is_zero_diff": True,
"html_url": "http://gitea.local/wooo/awoooi/pulls/145",
},
)
assert state["fsm_state"] == "pr_open_zero_diff"
assert state["next_step"] == "close_zero_diff_pr_and_prepare_real_yaml_patch"
assert state["open_pr"]["number"] == 145
def test_build_state_marks_handoff_recorded() -> None:
report = _report("drift-5")
repeat = build_drift_repeat_state(report, [])
state = build_drift_fingerprint_state(
report,
repeat,
latest_handoff={
"handoff_kind": "manual_investigation",
"handoff_status": "recorded",
},
)
assert state["fsm_state"] == "handoff_recorded"
assert state["next_step"] == "operator_review_handoff_and_execute_manual_plan"
def test_build_state_marks_verified_no_drift_remediation() -> None:
report = _no_drift_report("no-drift-2")
repeat = build_drift_repeat_state(report, [])
state = build_drift_fingerprint_state(
report,
repeat,
latest_remediation={
"remediation_kind": "live_env_rollback",
"remediation_status": "verified_no_drift",
"verification_report_id": "no-drift-2",
},
)
assert state["fsm_state"] == "no_drift_verified"
assert state["next_step"] == "monitor_for_recurrence"
assert state["latest_remediation"]["remediation_status"] == "verified_no_drift"
assert state["writes_remediation_record"] is False
def test_build_state_marks_remediation_executed_unverified() -> None:
report = _report("drift-6")
repeat = build_drift_repeat_state(report, [])
state = build_drift_fingerprint_state(
report,
repeat,
latest_remediation={
"remediation_kind": "live_env_rollback",
"remediation_status": "executed_unverified",
},
)
assert state["fsm_state"] == "remediation_executed_unverified"
assert state["next_step"] == "run_verification_scan_then_record_result"