47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
import pytest
|
|
from idea85_blockenergy_mesh_verifiable.primitives import LocalProblem
|
|
from idea85_blockenergy_mesh_verifiable.adapters import SubstationMeterAdapter, DerAggregatorAdapter
|
|
from idea85_blockenergy_mesh_verifiable.proofs import verify_proof
|
|
from datetime import datetime
|
|
|
|
|
|
def sample_meter_payload():
|
|
return {
|
|
"node_id": "substation-1",
|
|
"timestamp": datetime.utcnow().isoformat(),
|
|
"horizon_minutes": 60,
|
|
"net_load_kw": [10.0, 12.0, 11.0, 9.0],
|
|
"capacity_kw": 12.0,
|
|
}
|
|
|
|
|
|
def test_substation_adapter_plan_and_proof():
|
|
adapter = SubstationMeterAdapter("submeter")
|
|
payload = sample_meter_payload()
|
|
out = adapter.produce_plan_and_proof(payload)
|
|
|
|
assert "plan_delta" in out and "proof" in out
|
|
plan_delta = out["plan_delta"]
|
|
proof = out["proof"]
|
|
|
|
# Plan delta is a PlanDelta model
|
|
assert plan_delta.node_id == payload["node_id"]
|
|
# Proof verifies against original LocalProblem
|
|
lp = adapter.to_local_problem(payload)
|
|
assert verify_proof(lp.dict(), proof)
|
|
|
|
|
|
def test_der_adapter_plan_and_proof():
|
|
adapter = DerAggregatorAdapter("deragg")
|
|
payload = {
|
|
"id": "der-1",
|
|
"ts": datetime.utcnow().isoformat(),
|
|
"horizon": 60,
|
|
"profile": [2.0, 3.0, 5.0, 1.0],
|
|
"cap": 6.0,
|
|
}
|
|
out = adapter.produce_plan_and_proof(payload)
|
|
assert "plan_delta" in out and "proof" in out
|
|
lp = adapter.to_local_problem(payload)
|
|
assert verify_proof(lp.dict(), out["proof"]) is True
|