idea156-kappabridge-privacy.../tests/test_framework.py

79 lines
2.7 KiB
Python

from __future__ import annotations
from pathlib import Path
from idea156_kappabridge_privacy_safe import (
AccessPolicyContract,
AdapterMarketplace,
AttestationAuthority,
ClimateCSVAdapter,
ContractRegistry,
DeltaSyncEngine,
FederationStore,
FederatedPlanner,
GenomicsFASTAAdapter,
LabProfile,
)
from idea156_kappabridge_privacy_safe.harness import ConformanceHarness
def test_registry_ledger_and_attestation(tmp_path: Path) -> None:
store = FederationStore(tmp_path / "kappa.db")
registry = ContractRegistry(store)
policy = AccessPolicyContract(name="open-policy", allowed_actions=["read", "request"], privacy_budget_epsilon=1.0)
registry.register(policy)
authority = AttestationAuthority("lab-a")
attestation = authority.attest(policy, purpose="governance")
assert authority.verify(attestation, policy)
assert registry.active_contracts(kind="AccessPolicy")[0]["name"] == "open-policy"
assert store.latest_seq() == 1
def test_delta_sync_replays_ledger(tmp_path: Path) -> None:
left = FederationStore(tmp_path / "left.db")
right = FederationStore(tmp_path / "right.db")
left_registry = ContractRegistry(left)
right_registry = ContractRegistry(right)
policy = AccessPolicyContract(name="sync-policy", allowed_actions=["read"])
left_registry.register(policy)
engine = DeltaSyncEngine(left, peer_id="lab-left")
envelope = engine.build_envelope(anchor_seq=0)
assert right_registry.store.latest_seq() == 0
applied = DeltaSyncEngine(right, peer_id="lab-right").ingest_envelope(envelope)
assert applied == 1
assert right_registry.store.latest_seq() == 1
assert right_registry.get(policy.contract_id)["name"] == "sync-policy"
def test_adapters_and_planner_conformance(tmp_path: Path) -> None:
climate_csv = tmp_path / "climate.csv"
climate_csv.write_text("station,temp,humidity\nA,12,40\nB,15,55\n", encoding="utf-8")
fasta = tmp_path / "genome.fasta"
fasta.write_text(
">seq1\nACGT\n>seq2\nGGTT\n",
encoding="utf-8",
)
marketplace = AdapterMarketplace()
marketplace.register(ClimateCSVAdapter())
marketplace.register(GenomicsFASTAAdapter())
harness = ConformanceHarness(marketplace)
assert harness.validate("climate-csv", climate_csv, dataset_name="climate", discipline="climate").passed
assert harness.validate("genomics-fasta", fasta, dataset_name="genome", discipline="genomics").passed
planner = FederatedPlanner()
plan = planner.plan_joint_objective(
"joint climate-genomics study",
[LabProfile("lab-a", "climate", ["tabular"]), LabProfile("lab-b", "genomics", ["sequence"])],
["contract-a", "contract-b"],
)
assert plan.kind == "PlanDelta"
assert plan.steps