28 lines
723 B
Python
28 lines
723 B
Python
from datetime import datetime
|
|
|
|
from robotproof_studio.contracts import PlanDelta
|
|
from robotproof_studio.audit import AuditLog
|
|
|
|
|
|
def make_delta(id_suffix: str) -> PlanDelta:
|
|
return PlanDelta(delta_id=f"d-{id_suffix}", timestamp=datetime.utcnow().isoformat() + "Z", data={"val": id_suffix})
|
|
|
|
|
|
def test_audit_log_chain_and_detection():
|
|
log = AuditLog()
|
|
|
|
d1 = make_delta("1")
|
|
d1.sign("tester")
|
|
e1 = log.append(d1)
|
|
|
|
d2 = make_delta("2")
|
|
d2.sign("tester")
|
|
e2 = log.append(d2)
|
|
|
|
# chain should be valid
|
|
assert log.verify_chain() is True
|
|
|
|
# tamper with second entry's delta_id (simulates external tampering)
|
|
log.entries[1].delta_id = "tampered"
|
|
assert log.verify_chain() is False
|