mcqemu/tests/test_query.py

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