Add runtime capability scaffolding and align docs
This commit is contained in:
parent
fb8b985049
commit
cbf212bb7b
19 changed files with 1048 additions and 71 deletions
|
|
@ -9,10 +9,15 @@ import pytest
|
|||
import pyro_mcp.server as server_module
|
||||
from pyro_mcp.server import create_server
|
||||
from pyro_mcp.vm_manager import VmManager
|
||||
from pyro_mcp.vm_network import TapNetworkManager
|
||||
|
||||
|
||||
def test_create_server_registers_vm_tools(tmp_path: Path) -> None:
|
||||
manager = VmManager(backend_name="mock", base_dir=tmp_path / "vms")
|
||||
manager = VmManager(
|
||||
backend_name="mock",
|
||||
base_dir=tmp_path / "vms",
|
||||
network_manager=TapNetworkManager(enabled=False),
|
||||
)
|
||||
|
||||
async def _run() -> list[str]:
|
||||
server = create_server(manager=manager)
|
||||
|
|
@ -23,11 +28,16 @@ def test_create_server_registers_vm_tools(tmp_path: Path) -> None:
|
|||
assert "vm_create" in tool_names
|
||||
assert "vm_exec" in tool_names
|
||||
assert "vm_list_profiles" in tool_names
|
||||
assert "vm_network_info" in tool_names
|
||||
assert "vm_status" in tool_names
|
||||
|
||||
|
||||
def test_vm_tools_lifecycle_round_trip(tmp_path: Path) -> None:
|
||||
manager = VmManager(backend_name="mock", base_dir=tmp_path / "vms")
|
||||
manager = VmManager(
|
||||
backend_name="mock",
|
||||
base_dir=tmp_path / "vms",
|
||||
network_manager=TapNetworkManager(enabled=False),
|
||||
)
|
||||
|
||||
def _extract_structured(raw_result: object) -> dict[str, Any]:
|
||||
if not isinstance(raw_result, tuple) or len(raw_result) != 2:
|
||||
|
|
@ -60,7 +70,11 @@ def test_vm_tools_lifecycle_round_trip(tmp_path: Path) -> None:
|
|||
|
||||
|
||||
def test_vm_tools_status_stop_delete_and_reap(tmp_path: Path) -> None:
|
||||
manager = VmManager(backend_name="mock", base_dir=tmp_path / "vms")
|
||||
manager = VmManager(
|
||||
backend_name="mock",
|
||||
base_dir=tmp_path / "vms",
|
||||
network_manager=TapNetworkManager(enabled=False),
|
||||
)
|
||||
manager.MIN_TTL_SECONDS = 1
|
||||
|
||||
def _extract_structured(raw_result: object) -> dict[str, Any]:
|
||||
|
|
@ -72,7 +86,12 @@ def test_vm_tools_status_stop_delete_and_reap(tmp_path: Path) -> None:
|
|||
return cast(dict[str, Any], structured)
|
||||
|
||||
async def _run() -> tuple[
|
||||
dict[str, Any], dict[str, Any], dict[str, Any], list[dict[str, object]], dict[str, Any]
|
||||
dict[str, Any],
|
||||
dict[str, Any],
|
||||
dict[str, Any],
|
||||
dict[str, Any],
|
||||
list[dict[str, object]],
|
||||
dict[str, Any],
|
||||
]:
|
||||
server = create_server(manager=manager)
|
||||
profiles_raw = await server.call_tool("vm_list_profiles", {})
|
||||
|
|
@ -93,6 +112,7 @@ def test_vm_tools_status_stop_delete_and_reap(tmp_path: Path) -> None:
|
|||
vm_id = str(created["vm_id"])
|
||||
await server.call_tool("vm_start", {"vm_id": vm_id})
|
||||
status = _extract_structured(await server.call_tool("vm_status", {"vm_id": vm_id}))
|
||||
network = _extract_structured(await server.call_tool("vm_network_info", {"vm_id": vm_id}))
|
||||
stopped = _extract_structured(await server.call_tool("vm_stop", {"vm_id": vm_id}))
|
||||
deleted = _extract_structured(await server.call_tool("vm_delete", {"vm_id": vm_id}))
|
||||
|
||||
|
|
@ -105,10 +125,18 @@ def test_vm_tools_status_stop_delete_and_reap(tmp_path: Path) -> None:
|
|||
expiring_id = str(expiring["vm_id"])
|
||||
manager._instances[expiring_id].expires_at = 0.0 # noqa: SLF001
|
||||
reaped = _extract_structured(await server.call_tool("vm_reap_expired", {}))
|
||||
return status, stopped, deleted, cast(list[dict[str, object]], raw_profiles), reaped
|
||||
return (
|
||||
status,
|
||||
network,
|
||||
stopped,
|
||||
deleted,
|
||||
cast(list[dict[str, object]], raw_profiles),
|
||||
reaped,
|
||||
)
|
||||
|
||||
status, stopped, deleted, profiles, reaped = asyncio.run(_run())
|
||||
status, network, stopped, deleted, profiles, reaped = asyncio.run(_run())
|
||||
assert status["state"] == "started"
|
||||
assert network["network_enabled"] is False
|
||||
assert stopped["state"] == "stopped"
|
||||
assert bool(deleted["deleted"]) is True
|
||||
assert profiles[0]["name"] == "debian-base"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue