Files
zeekay ff7ef7114f feat: merge agents control plane + SDKs into unified agent repo
Consolidate all Hanzo agent infrastructure into one repo:
- control-plane/: Go control plane server (was agents-new)
- sdk/: Go, Python, TypeScript SDKs
- deployments/: Docker, Kubernetes, Helm configs
- Dockerfile.sdk: Python SDK image (ghcr.io/hanzoai/agent:latest)
- CI builds both SDK + control-plane images

No more agentfield — everything is hanzoai/agent.
2026-02-13 12:24:31 -08:00

113 lines
3.5 KiB
Python

import base64
from datetime import datetime
from types import SimpleNamespace
from hanzo_agents.vc_generator import VCGenerator
def make_execution_context():
return SimpleNamespace(
execution_id="exec-1",
workflow_id="wf-1",
session_id="sess-1",
caller_did="did:caller",
target_did="did:target",
agent_node_did="did:agent",
timestamp=datetime.utcnow(),
)
def test_generate_execution_vc_success(monkeypatch):
generator = VCGenerator("http://hanzo_agents")
generator.set_enabled(True)
payload = {
"vc_id": "vc-1",
"execution_id": "exec-1",
"workflow_id": "wf-1",
"session_id": "sess-1",
"issuer_did": "did:issuer",
"target_did": "did:target",
"caller_did": "did:caller",
"vc_document": {"proof": {}},
"signature": "sig",
"input_hash": "hash-in",
"output_hash": "hash-out",
"status": "succeeded",
"created_at": datetime.utcnow().isoformat() + "Z",
}
def fake_post(url, json=None, headers=None, timeout=None):
assert url.endswith("/execution/vc")
return SimpleNamespace(status_code=200, json=lambda: payload)
monkeypatch.setattr("hanzo_agents.vc_generator.requests.post", fake_post)
vc = generator.generate_execution_vc(
make_execution_context(), {"x": 1}, {"y": 2}, status="succeeded"
)
assert vc.execution_id == "exec-1"
def test_generate_execution_vc_disabled():
generator = VCGenerator("http://hanzo_agents")
generator.set_enabled(False)
assert (
generator.generate_execution_vc(
make_execution_context(), None, None, status="succeeded"
)
is None
)
def test_verify_vc(monkeypatch):
generator = VCGenerator("http://hanzo_agents")
def fake_post(url, json=None, headers=None, timeout=None):
return SimpleNamespace(status_code=200, json=lambda: {"valid": True})
monkeypatch.setattr("hanzo_agents.vc_generator.requests.post", fake_post)
result = generator.verify_vc({"proof": {}})
assert result == {"valid": True}
def test_create_workflow_vc(monkeypatch):
generator = VCGenerator("http://hanzo_agents")
payload = {
"workflow_id": "wf-1",
"session_id": "sess-1",
"component_vcs": ["vc-1"],
"workflow_vc_id": "wvc-1",
"status": "succeeded",
"start_time": datetime.utcnow().isoformat() + "Z",
"end_time": datetime.utcnow().isoformat() + "Z",
"total_steps": 1,
"completed_steps": 1,
}
def fake_post(url, json=None, headers=None, timeout=None):
return SimpleNamespace(status_code=200, json=lambda: payload)
monkeypatch.setattr("hanzo_agents.vc_generator.requests.post", fake_post)
vc = generator.create_workflow_vc("wf-1", "sess-1", ["vc-1"])
assert vc.workflow_vc_id == "wvc-1"
def test_get_workflow_vc_chain(monkeypatch):
generator = VCGenerator("http://hanzo_agents")
def fake_get(url, headers=None, timeout=None):
return SimpleNamespace(status_code=200, json=lambda: {"chain": ["vc-1"]})
monkeypatch.setattr("hanzo_agents.vc_generator.requests.get", fake_get)
chain = generator.get_workflow_vc_chain("wf-1")
assert chain == {"chain": ["vc-1"]}
def test_serialize_data_for_json_base64():
generator = VCGenerator("http://hanzo_agents")
generator.set_enabled(True)
encoded = generator._serialize_data_for_json({"a": 1})
decoded = base64.b64decode(encoded.encode()).decode()
assert decoded == '{"a": 1}'