#!/usr/bin/env python3 """Small negative controls for artifact tampering and VSTest's misleading skipped counter.""" import hashlib import json from pathlib import Path import tempfile from launch_saturation import trx, verify with tempfile.TemporaryDirectory(prefix="opcua-saturation-tools-") as temporary: root = Path(temporary) artifact = root / "immutable" artifact.write_text("control") receipt = {"protocol": "sdk2-saturation-v1", "acceptance": False, "canonicalCycles": 384, "completedRestarts": 96, "settlingCycles": 1, "maximumPhaseSeconds": 1800, "files": {"immutable": hashlib.sha256(artifact.read_bytes()).hexdigest()}} path = root / "receipt.json" path.write_text(json.dumps(receipt)) digest = hashlib.sha256(path.read_bytes()).hexdigest() verify(root, digest) artifact.write_text("tampered") try: verify(root, digest) except ValueError: pass else: raise RuntimeError("Changed artifact was accepted") xml = root / "skipped.trx" xml.write_text('' '' '') try: trx(xml, 1) except ValueError: pass else: raise RuntimeError("Direct skipped result was hidden by the counter") print("Artifact verification, tamper rejection and direct skipped-result controls passed (3/3)")