Prompt-Injection-RL-environment / tests /test_gold_hard_scenarios.py
Jatin997's picture
Add benchmark core
3b452a0
Raw
History Blame Contribute Delete
3.39 kB
import json
import unittest
from pathlib import Path
from env.dataset_loader import DatasetLoader
from env.injection_engine import InjectionEngine
from env.scenario_validator import has_errors, validate_scenario_payload
class GoldHardScenarioTests(unittest.TestCase):
def setUp(self) -> None:
self.loader = DatasetLoader()
self.engine = InjectionEngine()
def test_loader_merges_gold_hard_overlay(self) -> None:
scenario = self.loader.get_scenario_by_id("hard", "hard_gold_transcript_finance_review")
self.assertEqual(scenario.difficulty, "hard")
self.assertTrue(scenario.summary_required)
def test_gold_transcript_scenario_parses_as_transcript_replay(self) -> None:
scenario = self.loader.get_scenario_by_id("hard", "hard_gold_transcript_finance_review")
metadata = self.engine.build_attack_metadata(scenario)
self.assertEqual(metadata["attack_channel"], "transcript_replay")
self.assertEqual(metadata["target_tool"], "SendEmail")
self.assertEqual(metadata["target_recipient"], "relay@external-audit.test")
def test_gold_authority_spoof_scenario_marks_authority_claim(self) -> None:
scenario = self.loader.get_scenario_by_id("hard", "hard_gold_authority_relay_directive")
metadata = self.engine.build_attack_metadata(scenario)
self.assertTrue(metadata["authority_claimed"])
self.assertIn("authority_spoof", metadata["concealment_techniques"])
self.assertEqual(metadata["target_tool"], "WriteDB")
def test_gold_attachment_summary_scenario_uses_attachment_channel(self) -> None:
scenario = self.loader.get_scenario_by_id("hard", "hard_gold_attachment_summary_append")
metadata = self.engine.build_attack_metadata(scenario)
self.assertEqual(metadata["attack_channel"], "attachment_instruction")
self.assertEqual(metadata["attack_visibility"], "hidden")
self.assertEqual(metadata["target_tool"], "WriteDB")
self.assertEqual(metadata["attack_intent"], "contaminate_internal_summary")
self.assertTrue(any(span["label"] == "attachment_block" for span in metadata["attack_spans"]))
def test_elite_alignment_clause_scenario_tracks_internal_clause_poisoning(self) -> None:
scenario = self.loader.get_scenario_by_id("hard", "hard_gold_attachment_alignment_clause")
metadata = self.engine.build_attack_metadata(scenario)
self.assertEqual(metadata["attack_channel"], "attachment_instruction")
self.assertEqual(metadata["target_tool"], "WriteDB")
self.assertIsNone(metadata["target_recipient"])
self.assertEqual(metadata["payload_exactness"], "exact")
self.assertEqual(metadata["requested_artifact_type"], "internal_summary")
self.assertEqual(metadata["target_payload"], "reconciliation marker: amber lattice verified")
def test_hard_gold_overlay_has_no_validation_errors(self) -> None:
gold_path = Path(__file__).resolve().parents[1] / "env" / "data" / "scenarios" / "gold" / "hard.jsonl"
rows = [json.loads(line) for line in gold_path.read_text(encoding="utf-8-sig").splitlines() if line.strip()]
for payload in rows:
issues = validate_scenario_payload(payload)
self.assertFalse(has_errors(issues), msg=payload["scenario_id"])
if __name__ == "__main__":
unittest.main()