39 lines
1.6 KiB
Python
39 lines
1.6 KiB
Python
import pytest
|
|
from idea189_replicaweave_safe_mutation.crdt import Op, Delta
|
|
from idea189_replicaweave_safe_mutation.test_cartridge import built_in_cartridges
|
|
from idea189_replicaweave_safe_mutation.harness import run_cartridge
|
|
from idea189_replicaweave_safe_mutation.signer import generate_keypair, sign_bytes, verify_signature
|
|
|
|
|
|
def test_delta_merge_and_root():
|
|
a1 = Op(timestamp=1, actor="A", idx=0, op_type="param-set", target="/svc/replicas", value=3)
|
|
a2 = Op(timestamp=2, actor="A", idx=1, op_type="graft", target="/svc/new", value={"image": "v1"})
|
|
b1 = Op(timestamp=2, actor="B", idx=0, op_type="param-set", target="/svc/replicas", value=4)
|
|
|
|
d1 = Delta([a1, a2])
|
|
d2 = Delta([b1])
|
|
merged = d1.merge(d2)
|
|
# merged should contain 3 ops
|
|
assert len(merged.ops) == 3
|
|
root = merged.ops_root()
|
|
assert isinstance(root, str) and len(root) == 64
|
|
|
|
|
|
def test_harness_and_signing():
|
|
# prepare a simple delta
|
|
d = Delta()
|
|
d.add_op(Op(timestamp=1, actor="A", idx=0, op_type="graft", target="/x", value=1))
|
|
delta_payload = {"ops": d.to_list(), "ops_root": d.ops_root(), "parent_hash": None}
|
|
|
|
cartridge = built_in_cartridges[0] # network_partition
|
|
priv, pub = generate_keypair()
|
|
report, manifest = run_cartridge(cartridge, delta_payload, seed=42, signer_key=priv)
|
|
assert hasattr(report, "passed")
|
|
# signature present
|
|
assert "signature" in manifest
|
|
sig = bytes.fromhex(manifest["signature"])
|
|
signed_payload = manifest.get("signed_payload")
|
|
assert signed_payload is not None
|
|
ok = verify_signature(pub, signed_payload.encode("utf-8"), sig)
|
|
assert ok
|