59 lines
2.2 KiB
Python
59 lines
2.2 KiB
Python
"""list_vms / vm_info status reporting."""
|
|
|
|
from fastmcp import Client
|
|
|
|
from conftest import FakeQMPClient, result_data, write_registry
|
|
from mcqemu.server import mcp
|
|
from test_lifecycle import seeded_record
|
|
|
|
|
|
async def test_list_vms_stopped(dirs, all_pids_dead):
|
|
write_registry(dirs, seeded_record(dirs, "vm1"))
|
|
async with Client(mcp) as client:
|
|
vms = result_data(await client.call_tool("list_vms", {}))
|
|
assert vms[0]["status"] == "stopped"
|
|
|
|
|
|
async def test_list_vms_running(dirs, fake_qmp, all_pids_alive):
|
|
FakeQMPClient.responses["query-status"] = {"status": "running"}
|
|
write_registry(dirs, seeded_record(dirs, "vm1"))
|
|
async with Client(mcp) as client:
|
|
vms = result_data(await client.call_tool("list_vms", {}))
|
|
assert vms[0]["status"] == "running"
|
|
|
|
|
|
async def test_list_vms_unreachable_when_qmp_fails(dirs, fake_qmp, all_pids_alive):
|
|
FakeQMPClient.connect_error = OSError("connection refused")
|
|
write_registry(dirs, seeded_record(dirs, "vm1"))
|
|
async with Client(mcp) as client:
|
|
vms = result_data(await client.call_tool("list_vms", {}))
|
|
assert vms[0]["status"] == "unreachable"
|
|
|
|
|
|
async def test_vm_info_running_includes_block_devices(dirs, fake_qmp, all_pids_alive):
|
|
FakeQMPClient.responses["query-status"] = {"status": "running"}
|
|
FakeQMPClient.responses["query-cpus-fast"] = [{"cpu-index": 0}, {"cpu-index": 1}]
|
|
FakeQMPClient.responses["query-block"] = [
|
|
{
|
|
"device": "virtio0",
|
|
"inserted": {"file": "/vms/a.qcow2", "drv": "qcow2", "ro": False},
|
|
},
|
|
{"device": "empty-cd"},
|
|
]
|
|
write_registry(dirs, seeded_record(dirs, "vm1"))
|
|
async with Client(mcp) as client:
|
|
info = result_data(await client.call_tool("vm_info", {"name": "vm1"}))
|
|
assert info["status"] == "running"
|
|
assert info["vcpus"] == 2
|
|
assert info["block_devices"] == [
|
|
{"device": "virtio0", "file": "/vms/a.qcow2", "format": "qcow2", "read_only": False}
|
|
]
|
|
|
|
|
|
async def test_vm_info_stopped_skips_qmp(dirs, all_pids_dead):
|
|
write_registry(dirs, seeded_record(dirs, "vm1"))
|
|
async with Client(mcp) as client:
|
|
info = result_data(await client.call_tool("vm_info", {"name": "vm1"}))
|
|
assert info["status"] == "stopped"
|
|
assert "vcpus" not in info
|