fix(qemu): build a command line for a headless node

_console_options() fell through the "none" branch and returned None, so
_build_command() blew up on `command.extend(None)`: a QEMU node with
console_type "none" -- offered by the GUI, and what API/MCP-driven labs use
to skip the console entirely -- failed to start with a 500 and a traceback.

Return an empty list, exactly like _aux_options() already does, and cover it
with a test that builds the command line for a headless node. Verified on a
live instance: such a node now starts (204) with `console: null` and no
-serial device in the QEMU command line.
This commit is contained in:
YueGuobin committed 2026-10-06 00:21:08 +08:00
1 parent 187201a08c
commit a1fcd29bce
2 files changed
+17

No files matched your search

+16
View File
@@ -624,6 +624,22 @@ async def test_build_command(vm, fake_qemu_binary):
]
@pytest.mark.asyncio
async def test_build_command_console_none(vm):
"""
A headless QEMU node (console_type none) builds a command line without a
serial device: the console options for "none" used to fall through and
return None, which made node start fail with a TypeError.
"""
vm.console_type = "none"
os.environ["DISPLAY"] = "0:0"
with asyncio_patch("asyncio.create_subprocess_exec", return_value=MagicMock()):
cmd = await vm._build_command()
assert "-serial" not in cmd
assert "-netdev" in cmd
@pytest.mark.asyncio
async def test_build_command_manual_uuid(vm):
"""