idea44-soundgraph-studio-ve.../tests/test_core.py

36 lines
1.4 KiB
Python

import json
from idea44_soundgraph_studio_verifiable.core import AudioModule, AudioPatch, generate_ed25519_keypair, ProvenanceEvent
def test_audio_module_cid_is_stable():
m = AudioModule.make("oscillator", {"freq": 440, "wave": "sine"}, version="0.1")
cid1 = m.cid()
# recompute from dict to ensure canonicalization is stable
cid2 = AudioModule(id=m.id, type=m.type, params=m.params, version=m.version, license=m.license).cid()
assert cid1 == cid2
def test_patch_merkle_and_inclusion_proof():
m1 = AudioModule.make("oscillator", {"freq": 220})
m2 = AudioModule.make("filter", {"type": "lowpass", "cutoff": 1000})
node1 = {"id": "n1", "module_cid": m1.cid(), "params": {}}
node2 = {"id": "n2", "module_cid": m2.cid(), "params": {}}
patch = AudioPatch(nodes=[node1, node2], edges=[("n1","n2")])
root = patch.merkle_root()
assert isinstance(root, str) and len(root) == 64
proof, leaf = patch.inclusion_proof_for_module_cid(m1.cid())
# verify proof using the exported verification helper
from idea44_soundgraph_studio_verifiable.core import verify_merkle_proof
assert verify_merkle_proof(leaf, proof, root)
def test_provenance_event_sign_and_verify():
sk, pk = generate_ed25519_keypair()
ev = ProvenanceEvent(patch_id="patch-1", actor="alice", timestamp=123456.0, op_hash="deadbeef")
ev.sign(sk)
assert ev.verify(pk)