test(opcua): add fixed candidate saturation diagnosis with observer barriers
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
#!/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('<TestRun xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010"><Results>'
|
||||
'<UnitTestResult outcome="NotExecuted" /></Results><ResultSummary>'
|
||||
'<Counters executed="1" notExecuted="0" /></ResultSummary></TestRun>')
|
||||
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)")
|
||||
Reference in New Issue
Block a user