34 lines
1.3 KiB
Python
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
|