test(sofiia-console): add multi-node e2e routing test
Made-with: Cursor
This commit is contained in:
118
tests/test_sofiia_e2e_multinode.py
Normal file
118
tests/test_sofiia_e2e_multinode.py
Normal file
@@ -0,0 +1,118 @@
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
def _create_chat(client, agent_id: str, node_id: str, ref: str) -> str:
|
||||
r = client.post(
|
||||
"/api/chats",
|
||||
json={
|
||||
"agent_id": agent_id,
|
||||
"node_id": node_id,
|
||||
"source": "web",
|
||||
"external_chat_ref": ref,
|
||||
},
|
||||
)
|
||||
assert r.status_code == 200, r.text
|
||||
return r.json()["chat"]["chat_id"]
|
||||
|
||||
|
||||
def test_e2e_routes_send_to_noda1_via_infer(sofiia_client, sofiia_module, monkeypatch):
|
||||
calls = []
|
||||
|
||||
def _router_url(node_id: str) -> str:
|
||||
return {
|
||||
"NODA1": "http://fake-noda1-router:9102",
|
||||
"NODA2": "http://fake-noda2-router:9102",
|
||||
}.get(str(node_id).upper(), "")
|
||||
|
||||
async def _fake_infer(base_url, agent_id, text, **kwargs):
|
||||
calls.append(
|
||||
{
|
||||
"base_url": base_url,
|
||||
"agent_id": agent_id,
|
||||
"text": text,
|
||||
"metadata": kwargs.get("metadata") or {},
|
||||
}
|
||||
)
|
||||
return {
|
||||
"response": "fake-noda1-response",
|
||||
"backend": "fake-router",
|
||||
"model": "fake-model",
|
||||
"node_id": "NODA1",
|
||||
"message_id": "m-noda1",
|
||||
}
|
||||
|
||||
monkeypatch.setattr(sofiia_module, "get_router_url", _router_url)
|
||||
monkeypatch.setattr(sofiia_module, "infer", _fake_infer)
|
||||
|
||||
chat_id = _create_chat(sofiia_client, "monitor", "NODA1", "e2e-n1")
|
||||
r = sofiia_client.post(f"/api/chats/{chat_id}/send", json={"text": "ping NODA1"})
|
||||
assert r.status_code == 200, r.text
|
||||
body = r.json()
|
||||
|
||||
assert len(calls) == 1
|
||||
assert calls[0]["base_url"] == "http://fake-noda1-router:9102"
|
||||
assert calls[0]["metadata"].get("chat_id") == chat_id
|
||||
assert calls[0]["metadata"].get("node_id") == "NODA1"
|
||||
assert body["node_id"] == "NODA1"
|
||||
|
||||
|
||||
def test_e2e_routes_send_to_noda2_via_infer(sofiia_client, sofiia_module, monkeypatch):
|
||||
calls = []
|
||||
|
||||
def _router_url(node_id: str) -> str:
|
||||
return {
|
||||
"NODA1": "http://fake-noda1-router:9102",
|
||||
"NODA2": "http://fake-noda2-router:9102",
|
||||
}.get(str(node_id).upper(), "")
|
||||
|
||||
async def _fake_infer(base_url, agent_id, text, **kwargs):
|
||||
calls.append(
|
||||
{
|
||||
"base_url": base_url,
|
||||
"agent_id": agent_id,
|
||||
"text": text,
|
||||
"metadata": kwargs.get("metadata") or {},
|
||||
}
|
||||
)
|
||||
return {
|
||||
"response": "fake-noda2-response",
|
||||
"backend": "fake-router",
|
||||
"model": "fake-model",
|
||||
"node_id": "NODA2",
|
||||
"message_id": "m-noda2",
|
||||
}
|
||||
|
||||
monkeypatch.setattr(sofiia_module, "get_router_url", _router_url)
|
||||
monkeypatch.setattr(sofiia_module, "infer", _fake_infer)
|
||||
|
||||
chat_id = _create_chat(sofiia_client, "sofiia", "NODA2", "e2e-n2")
|
||||
r = sofiia_client.post(f"/api/chats/{chat_id}/send", json={"text": "ping NODA2"})
|
||||
assert r.status_code == 200, r.text
|
||||
body = r.json()
|
||||
|
||||
assert len(calls) == 1
|
||||
assert calls[0]["base_url"] == "http://fake-noda2-router:9102"
|
||||
assert calls[0]["metadata"].get("chat_id") == chat_id
|
||||
assert calls[0]["metadata"].get("node_id") == "NODA2"
|
||||
assert body["node_id"] == "NODA2"
|
||||
|
||||
|
||||
def test_e2e_noda1_route_is_not_hardcoded_to_noda2(sofiia_client, sofiia_module, monkeypatch):
|
||||
def _router_url(node_id: str) -> str:
|
||||
return {
|
||||
"NODA1": "http://fake-noda1-router:9102",
|
||||
"NODA2": "http://fake-noda2-router:9102",
|
||||
}.get(str(node_id).upper(), "")
|
||||
|
||||
async def _guard_infer(base_url, agent_id, text, **kwargs):
|
||||
assert base_url != "http://fake-noda2-router:9102"
|
||||
return {"response": "guard-ok", "backend": "fake-router", "model": "fake-model"}
|
||||
|
||||
monkeypatch.setattr(sofiia_module, "get_router_url", _router_url)
|
||||
monkeypatch.setattr(sofiia_module, "infer", _guard_infer)
|
||||
|
||||
chat_id = _create_chat(sofiia_client, "monitor", "NODA1", "e2e-guard")
|
||||
r = sofiia_client.post(f"/api/chats/{chat_id}/send", json={"text": "guard ping"})
|
||||
assert r.status_code == 200, r.text
|
||||
assert r.json()["node_id"] == "NODA1"
|
||||
|
||||
Reference in New Issue
Block a user