88 lines
3.1 KiB
Python
88 lines
3.1 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from datetime import UTC, datetime
|
|
|
|
from src.services.agent_replay_fixture import REDACTED, build_agent_replay_fixture
|
|
|
|
|
|
@dataclass
|
|
class _Incident:
|
|
incident_id: str = "INC-001"
|
|
severity: str = "P1"
|
|
status: str = "resolved"
|
|
alertname: str = "PodCrashLooping"
|
|
alert_category: str = "kubernetes"
|
|
notification_type: str = "TYPE-2"
|
|
affected_services: list[str] | None = None
|
|
signals: list[dict] | None = None
|
|
frequency_snapshot: dict | None = None
|
|
created_at: datetime | None = None
|
|
updated_at: datetime | None = None
|
|
resolved_at: datetime | None = None
|
|
closed_at: datetime | None = None
|
|
|
|
|
|
@dataclass
|
|
class _Evidence:
|
|
evidence_summary: str = "Pod restart spike"
|
|
mcp_health: dict | None = None
|
|
sensors_attempted: int = 3
|
|
sensors_succeeded: int = 3
|
|
historical_context: str = "Similar incident recovered after rollout restart"
|
|
dependency_topology: dict | None = None
|
|
business_metrics: dict | None = None
|
|
verification_result: str | None = "success"
|
|
self_healing_score: float | None = 0.9
|
|
|
|
|
|
@dataclass
|
|
class _Execution:
|
|
success: bool = True
|
|
playbook_name: str = "rollout restart checkout"
|
|
executed_steps: list[str] | None = None
|
|
error_message: str | None = None
|
|
|
|
|
|
def test_fixture_separates_context_from_labels_and_redacts_secrets():
|
|
fixture = build_agent_replay_fixture(
|
|
run_id="fixtures",
|
|
incident=_Incident(
|
|
affected_services=["checkout"],
|
|
signals=[
|
|
{
|
|
"labels": {
|
|
"alertname": "PodCrashLooping",
|
|
"authorization": "Bearer live-token",
|
|
},
|
|
"annotations": {"summary": "pod failed"},
|
|
}
|
|
],
|
|
frequency_snapshot={"api_key": "secret-value"},
|
|
created_at=datetime(2026, 6, 1, tzinfo=UTC),
|
|
),
|
|
evidence=_Evidence(
|
|
mcp_health={"k8s": True, "token": "abc"},
|
|
business_metrics={"orders": 10, "password": "do-not-export"},
|
|
),
|
|
execution=_Execution(
|
|
executed_steps=["kubectl rollout restart deployment checkout -n prod"],
|
|
error_message="failed with Basic abc",
|
|
),
|
|
agent_turn_count=4,
|
|
).to_dict()
|
|
|
|
assert fixture["schema_version"] == "agent_replay_fixture_v1"
|
|
assert fixture["incident_context"]["signals"][0]["labels"]["authorization"] == REDACTED
|
|
assert fixture["incident_context"]["frequency_snapshot"]["api_key"] == REDACTED
|
|
assert fixture["incident_context"]["mcp_health"]["token"] == REDACTED
|
|
assert fixture["incident_context"]["business_metrics"]["password"] == REDACTED
|
|
assert fixture["evaluation_labels"]["execution_error"] == REDACTED
|
|
assert fixture["evaluation_labels"]["verification_result"] == "success"
|
|
assert fixture["evaluation_labels"]["expected_action_markers"] == [
|
|
"rollout restart",
|
|
"checkout",
|
|
]
|
|
assert "verification_result" not in fixture["incident_context"]
|
|
assert fixture["source_metadata"]["agent_turn_count"] == 4
|