idea19-missionledger-verifi.../tests/test_csfd.py

34 lines
1.3 KiB
Python

from missionledger.dsl import PlanDelta
from missionledger.csfd import generate_csfd
def test_csfd_generation_small_plandelta():
pd = PlanDelta(delta={"move": True, "safe_buffer": 0.5}, version=2, metadata={
"invariants": {"collision": True, "energy": True},
"proof_stub_hash": "stub-abc",
"expected_resource_bounds": {"energy": [0, 100]},
})
csfd = generate_csfd(pd, signer="planner-v1", n_frames=3)
assert csfd is not None
assert csfd.signer == "planner-v1"
# frames count should be at least 1 and at most requested
assert 1 <= len(csfd.frames) <= 3
# digest hex should be a 64-char hex string
assert isinstance(csfd.digest_hex, str)
assert len(csfd.digest_hex) == 64
def test_csfd_size_bound():
# Create a PlanDelta with large metadata to force truncation path
large_meta = {f"k{i}": "v" * 200 for i in range(5)}
pd = PlanDelta(delta={"x": 1}, version=1, metadata={"invariants": {"a": True}, **large_meta})
csfd = generate_csfd(pd, signer="s", n_frames=5)
# Ensure serialized representation is <= 512 bytes as enforced
import json
serialized = json.dumps({"frames": [f.__dict__ for f in csfd.frames], "signer": csfd.signer, "digest_hex": csfd.digest_hex}, sort_keys=True, separators=(",", ":"))
assert len(serialized.encode()) <= 512