Skip to content

Commit 205cd79

Browse files
committed
Add OPA self-protection tests
1 parent a378c2d commit 205cd79

1 file changed

Lines changed: 43 additions & 0 deletions

File tree

tests/test_opa_self_protection.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import json
2+
from pathlib import Path
3+
4+
from ovk.adapters.opa import evaluate_self_protection
5+
from ovk.adapters.opa.self_protection import find_self_protection_violations
6+
7+
8+
FIXTURE_DIR = Path("examples/no_agent_self_approval")
9+
10+
11+
def load_fixture(name: str) -> dict:
12+
return json.loads((FIXTURE_DIR / name).read_text(encoding="utf-8"))
13+
14+
15+
def test_gate_removed_produces_violation() -> None:
16+
data = load_fixture("input_gate_removed.json")
17+
violations = find_self_protection_violations(data)
18+
assert len(violations) == 1
19+
assert violations[0].failure_mode == "required_check_removed"
20+
21+
22+
def test_gate_removed_blocks_merge() -> None:
23+
data = load_fixture("input_gate_removed.json")
24+
evidence = evaluate_self_protection(data, repo="example/repo", head_sha="abc")
25+
assert evidence.backend_claims[0].status.value == "fail"
26+
assert evidence.decision["merge_recommendation"] == "block"
27+
assert evidence.counterexamples[0]["failure_mode"] == "required_check_removed"
28+
29+
30+
def test_gate_preserved_allows_merge() -> None:
31+
data = load_fixture("input_gate_preserved.json")
32+
evidence = evaluate_self_protection(data, repo="example/repo", head_sha="abc")
33+
assert evidence.backend_claims[0].status.value == "pass"
34+
assert evidence.decision["merge_recommendation"] == "allow"
35+
assert evidence.counterexamples == []
36+
37+
38+
def test_human_authored_change_does_not_trigger_agent_self_protection() -> None:
39+
data = load_fixture("input_gate_removed.json")
40+
data["actor"]["type"] = "human"
41+
evidence = evaluate_self_protection(data, repo="example/repo", head_sha="abc")
42+
assert evidence.backend_claims[0].status.value == "pass"
43+
assert evidence.decision["merge_recommendation"] == "allow"

0 commit comments

Comments
 (0)