qemu: command: move qemuBuildGraphicsSPICECommandLine validation to qemu_domain.c

Move the SPICE caps validation from qemuBuildGraphicsSPICECommandLine()
to a new function called qemuDomainDeviceDefValidateSPICEGraphics().
This function is called by qemuDomainDeviceDefValidateGraphics(),
which in turn is called by qemuDomainDefValidate(), validating the graphics
parameters in domain define time.

This validation move exposed a flaw in the 'default-video-type' tests
for PPC64, AARCH64 and s390 archs. The XML was considering 'spice' as
the default video type, which isn't true for those architectures.
This was flying under the radar until now because the SPICE validation
was being made in 'virsh start' time, while the XML validation done in
qemuxml2xmltest.c considers define time.

All other tests were adapted to consider SPICE validation in this
earlier stage.

Reviewed-by: Cole Robinson <crobinso@redhat.com>
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
This commit is contained in:
Daniel Henrique Barboza 2019-12-09 20:15:27 -03:00 committed by Cole Robinson
parent 45270337f0
commit c19bb8c0cf
10 changed files with 150 additions and 65 deletions

View File

@ -7568,7 +7568,6 @@ qemuBuildGraphicsVNCCommandLine(virQEMUDriverConfigPtr cfg,
static int static int
qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg, qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg,
virCommandPtr cmd, virCommandPtr cmd,
virQEMUCapsPtr qemuCaps,
virDomainGraphicsDefPtr graphics) virDomainGraphicsDefPtr graphics)
{ {
g_auto(virBuffer) opt = VIR_BUFFER_INITIALIZER; g_auto(virBuffer) opt = VIR_BUFFER_INITIALIZER;
@ -7579,12 +7578,6 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg,
bool hasSecure = false; bool hasSecure = false;
bool hasInsecure = false; bool hasInsecure = false;
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("spice graphics are not supported with this QEMU"));
return -1;
}
if (!(glisten = virDomainGraphicsGetListen(graphics, 0))) { if (!(glisten = virDomainGraphicsGetListen(graphics, 0))) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s", virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("missing listen element")); _("missing listen element"));
@ -7593,13 +7586,6 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg,
switch (glisten->type) { switch (glisten->type) {
case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET: case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET:
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE_UNIX)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("unix socket for spice graphics are not supported "
"with this QEMU"));
return -1;
}
virBufferAddLit(&opt, "unix,addr="); virBufferAddLit(&opt, "unix,addr=");
virQEMUBuildBufferEscapeComma(&opt, glisten->socket); virQEMUBuildBufferEscapeComma(&opt, glisten->socket);
virBufferAddLit(&opt, ","); virBufferAddLit(&opt, ",");
@ -7614,12 +7600,6 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg,
} }
if (tlsPort > 0) { if (tlsPort > 0) {
if (!cfg->spiceTLS) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("spice TLS port set in XML configuration, "
"but TLS is disabled in qemu.conf"));
return -1;
}
virBufferAsprintf(&opt, "tls-port=%u,", tlsPort); virBufferAsprintf(&opt, "tls-port=%u,", tlsPort);
hasSecure = true; hasSecure = true;
} }
@ -7758,35 +7738,16 @@ qemuBuildGraphicsSPICECommandLine(virQEMUDriverConfigPtr cfg,
if (graphics->data.spice.copypaste == VIR_TRISTATE_BOOL_NO) if (graphics->data.spice.copypaste == VIR_TRISTATE_BOOL_NO)
virBufferAddLit(&opt, "disable-copy-paste,"); virBufferAddLit(&opt, "disable-copy-paste,");
if (graphics->data.spice.filetransfer == VIR_TRISTATE_BOOL_NO) { if (graphics->data.spice.filetransfer == VIR_TRISTATE_BOOL_NO)
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE_FILE_XFER_DISABLE)) { virBufferAddLit(&opt, "disable-agent-file-xfer,");
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("This QEMU can't disable file transfers through spice"));
return -1;
} else {
virBufferAddLit(&opt, "disable-agent-file-xfer,");
}
}
if (graphics->data.spice.gl == VIR_TRISTATE_BOOL_YES) { if (graphics->data.spice.gl == VIR_TRISTATE_BOOL_YES) {
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE_GL)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("This QEMU doesn't support spice OpenGL"));
return -1;
}
/* spice.gl is a TristateBool, but qemu expects on/off: use /* spice.gl is a TristateBool, but qemu expects on/off: use
* TristateSwitch helper */ * TristateSwitch helper */
virBufferAsprintf(&opt, "gl=%s,", virBufferAsprintf(&opt, "gl=%s,",
virTristateSwitchTypeToString(graphics->data.spice.gl)); virTristateSwitchTypeToString(graphics->data.spice.gl));
if (graphics->data.spice.rendernode) { if (graphics->data.spice.rendernode) {
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE_RENDERNODE)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("This QEMU doesn't support spice OpenGL rendernode"));
return -1;
}
virBufferAddLit(&opt, "rendernode="); virBufferAddLit(&opt, "rendernode=");
virQEMUBuildBufferEscapeComma(&opt, graphics->data.spice.rendernode); virQEMUBuildBufferEscapeComma(&opt, graphics->data.spice.rendernode);
virBufferAddLit(&opt, ","); virBufferAddLit(&opt, ",");
@ -7869,7 +7830,7 @@ qemuBuildGraphicsCommandLine(virQEMUDriverConfigPtr cfg,
break; break;
case VIR_DOMAIN_GRAPHICS_TYPE_SPICE: case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
if (qemuBuildGraphicsSPICECommandLine(cfg, cmd, if (qemuBuildGraphicsSPICECommandLine(cfg, cmd,
qemuCaps, graphics) < 0) graphics) < 0)
return -1; return -1;
break; break;

View File

@ -7633,9 +7633,84 @@ qemuDomainDeviceDefValidateTPM(virDomainTPMDef *tpm,
} }
static int
qemuDomainDeviceDefValidateSPICEGraphics(const virDomainGraphicsDef *graphics,
virQEMUDriverPtr driver,
virQEMUCapsPtr qemuCaps)
{
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
virDomainGraphicsListenDefPtr glisten = NULL;
int tlsPort = graphics->data.spice.tlsPort;
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("spice graphics are not supported with this QEMU"));
return -1;
}
glisten = virDomainGraphicsGetListen((virDomainGraphicsDefPtr)graphics, 0);
if (!glisten) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("missing listen element"));
return -1;
}
switch (glisten->type) {
case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET:
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE_UNIX)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("unix socket for spice graphics are not supported "
"with this QEMU"));
return -1;
}
break;
case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS:
case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK:
if (tlsPort > 0 && !cfg->spiceTLS) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("spice TLS port set in XML configuration, "
"but TLS is disabled in qemu.conf"));
return -1;
}
break;
case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NONE:
break;
case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_LAST:
break;
}
if (graphics->data.spice.filetransfer == VIR_TRISTATE_BOOL_NO &&
!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE_FILE_XFER_DISABLE)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("This QEMU can't disable file transfers through spice"));
return -1;
}
if (graphics->data.spice.gl == VIR_TRISTATE_BOOL_YES) {
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE_GL)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("This QEMU doesn't support spice OpenGL"));
return -1;
}
if (graphics->data.spice.rendernode &&
!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE_RENDERNODE)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("This QEMU doesn't support spice OpenGL rendernode"));
return -1;
}
}
return 0;
}
static int static int
qemuDomainDeviceDefValidateGraphics(const virDomainGraphicsDef *graphics, qemuDomainDeviceDefValidateGraphics(const virDomainGraphicsDef *graphics,
const virDomainDef *def, const virDomainDef *def,
virQEMUDriverPtr driver,
virQEMUCapsPtr qemuCaps) virQEMUCapsPtr qemuCaps)
{ {
bool have_egl_headless = false; bool have_egl_headless = false;
@ -7702,6 +7777,12 @@ qemuDomainDeviceDefValidateGraphics(const virDomainGraphicsDef *graphics,
break; break;
case VIR_DOMAIN_GRAPHICS_TYPE_SPICE: case VIR_DOMAIN_GRAPHICS_TYPE_SPICE:
if (qemuDomainDeviceDefValidateSPICEGraphics(graphics, driver,
qemuCaps) < 0)
return -1;
break;
case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS: case VIR_DOMAIN_GRAPHICS_TYPE_EGL_HEADLESS:
break; break;
case VIR_DOMAIN_GRAPHICS_TYPE_RDP: case VIR_DOMAIN_GRAPHICS_TYPE_RDP:
@ -8109,7 +8190,7 @@ qemuDomainDeviceDefValidate(const virDomainDeviceDef *dev,
case VIR_DOMAIN_DEVICE_GRAPHICS: case VIR_DOMAIN_DEVICE_GRAPHICS:
ret = qemuDomainDeviceDefValidateGraphics(dev->data.graphics, def, ret = qemuDomainDeviceDefValidateGraphics(dev->data.graphics, def,
qemuCaps); driver, qemuCaps);
break; break;
case VIR_DOMAIN_DEVICE_INPUT: case VIR_DOMAIN_DEVICE_INPUT:

View File

@ -85,6 +85,8 @@ qemuHotplugCreateObjects(virDomainXMLOptionPtr xmlopt,
virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_PIIX_DISABLE_S3); virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_PIIX_DISABLE_S3);
virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_PIIX_DISABLE_S4); virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_PIIX_DISABLE_S4);
virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_VNC); virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_VNC);
virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_SPICE);
virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
if (qemuTestCapsCacheInsert(driver.qemuCapsCache, priv->qemuCaps) < 0) if (qemuTestCapsCacheInsert(driver.qemuCapsCache, priv->qemuCaps) < 0)
return -1; return -1;
@ -592,6 +594,7 @@ mymain(void)
struct qemuHotplugTestData data = {0}; struct qemuHotplugTestData data = {0};
struct testQemuHotplugCpuParams cpudata; struct testQemuHotplugCpuParams cpudata;
g_autofree char *fakerootdir = NULL; g_autofree char *fakerootdir = NULL;
g_autoptr(virQEMUDriverConfig) cfg = NULL;
fakerootdir = g_strdup(FAKEROOTDIRTEMPLATE); fakerootdir = g_strdup(FAKEROOTDIRTEMPLATE);
@ -605,6 +608,8 @@ mymain(void)
if (qemuTestDriverInit(&driver) < 0) if (qemuTestDriverInit(&driver) < 0)
return EXIT_FAILURE; return EXIT_FAILURE;
cfg = virQEMUDriverGetConfig(&driver);
virEventRegisterDefaultImpl(); virEventRegisterDefaultImpl();
VIR_FREE(driver.config->spiceListen); VIR_FREE(driver.config->spiceListen);
@ -671,6 +676,7 @@ mymain(void)
" }" \ " }" \
"}\r\n" "}\r\n"
cfg->spiceTLS = true;
DO_TEST_UPDATE("graphics-spice", "graphics-spice-nochange", false, false, NULL); DO_TEST_UPDATE("graphics-spice", "graphics-spice-nochange", false, false, NULL);
DO_TEST_UPDATE("graphics-spice-timeout", "graphics-spice-timeout-nochange", false, false, DO_TEST_UPDATE("graphics-spice-timeout", "graphics-spice-timeout-nochange", false, false,
"set_password", QMP_OK, "expire_password", QMP_OK); "set_password", QMP_OK, "expire_password", QMP_OK);
@ -679,6 +685,7 @@ mymain(void)
DO_TEST_UPDATE("graphics-spice", "graphics-spice-listen", true, false, NULL); DO_TEST_UPDATE("graphics-spice", "graphics-spice-listen", true, false, NULL);
DO_TEST_UPDATE("graphics-spice-listen-network", "graphics-spice-listen-network-password", false, false, DO_TEST_UPDATE("graphics-spice-listen-network", "graphics-spice-listen-network-password", false, false,
"set_password", QMP_OK, "expire_password", QMP_OK); "set_password", QMP_OK, "expire_password", QMP_OK);
cfg->spiceTLS = false;
/* Strange huh? Currently, only graphics can be updated :-P */ /* Strange huh? Currently, only graphics can be updated :-P */
DO_TEST_UPDATE("disk-cdrom", "disk-cdrom-nochange", true, false, NULL); DO_TEST_UPDATE("disk-cdrom", "disk-cdrom-nochange", true, false, NULL);

View File

@ -11,6 +11,6 @@
<emulator>/usr/bin/qemu-system-aarch64</emulator> <emulator>/usr/bin/qemu-system-aarch64</emulator>
<controller type='usb' index='0' model='none'/> <controller type='usb' index='0' model='none'/>
<memballoon model='none'/> <memballoon model='none'/>
<graphics type='spice'/> <graphics type='vnc'/>
</devices> </devices>
</domain> </domain>

View File

@ -11,6 +11,6 @@
<emulator>/usr/bin/qemu-system-ppc64</emulator> <emulator>/usr/bin/qemu-system-ppc64</emulator>
<controller type='usb' index='0' model='none'/> <controller type='usb' index='0' model='none'/>
<memballoon model='none'/> <memballoon model='none'/>
<graphics type='spice'/> <graphics type='vnc'/>
</devices> </devices>
</domain> </domain>

View File

@ -11,6 +11,6 @@
<emulator>/usr/bin/qemu-system-s390x</emulator> <emulator>/usr/bin/qemu-system-s390x</emulator>
<controller type='usb' index='0' model='none'/> <controller type='usb' index='0' model='none'/>
<memballoon model='none'/> <memballoon model='none'/>
<graphics type='spice'/> <graphics type='vnc'/>
</devices> </devices>
</domain> </domain>

View File

@ -30,8 +30,8 @@
<target chassis='2' port='0x9'/> <target chassis='2' port='0x9'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller> </controller>
<graphics type='spice'> <graphics type='vnc' port='-1' autoport='yes'>
<listen type='none'/> <listen type='address'/>
</graphics> </graphics>
<video> <video>
<model type='virtio' heads='1' primary='yes'/> <model type='virtio' heads='1' primary='yes'/>

View File

@ -19,8 +19,8 @@
<controller type='pci' index='0' model='pci-root'/> <controller type='pci' index='0' model='pci-root'/>
<input type='keyboard' bus='usb'/> <input type='keyboard' bus='usb'/>
<input type='mouse' bus='usb'/> <input type='mouse' bus='usb'/>
<graphics type='spice'> <graphics type='vnc' port='-1' autoport='yes'>
<listen type='none'/> <listen type='address'/>
</graphics> </graphics>
<video> <video>
<model type='vga' vram='16384' heads='1' primary='yes'/> <model type='vga' vram='16384' heads='1' primary='yes'/>

View File

@ -17,8 +17,8 @@
<emulator>/usr/bin/qemu-system-s390x</emulator> <emulator>/usr/bin/qemu-system-s390x</emulator>
<controller type='usb' index='0' model='none'/> <controller type='usb' index='0' model='none'/>
<controller type='pci' index='0' model='pci-root'/> <controller type='pci' index='0' model='pci-root'/>
<graphics type='spice'> <graphics type='vnc' port='-1' autoport='yes'>
<listen type='none'/> <listen type='address'/>
</graphics> </graphics>
<video> <video>
<model type='virtio' heads='1' primary='yes'/> <model type='virtio' heads='1' primary='yes'/>

View File

@ -382,22 +382,45 @@ mymain(void)
DO_TEST_CAPS_ARCH_LATEST("default-video-type-ppc64", "ppc64"); DO_TEST_CAPS_ARCH_LATEST("default-video-type-ppc64", "ppc64");
DO_TEST_CAPS_ARCH_LATEST("default-video-type-riscv64", "riscv64"); DO_TEST_CAPS_ARCH_LATEST("default-video-type-riscv64", "riscv64");
DO_TEST_CAPS_ARCH_LATEST("default-video-type-s390x", "s390x"); DO_TEST_CAPS_ARCH_LATEST("default-video-type-s390x", "s390x");
DO_TEST("default-video-type-x86_64-caps-test-0", QEMU_CAPS_DEVICE_VGA); DO_TEST("default-video-type-x86_64-caps-test-0",
DO_TEST("default-video-type-x86_64-caps-test-1", QEMU_CAPS_DEVICE_CIRRUS_VGA); QEMU_CAPS_DEVICE_VGA,
QEMU_CAPS_SPICE);
DO_TEST("default-video-type-x86_64-caps-test-1",
QEMU_CAPS_DEVICE_CIRRUS_VGA,
QEMU_CAPS_SPICE);
DO_TEST("graphics-sdl", QEMU_CAPS_DEVICE_VGA); DO_TEST("graphics-sdl", QEMU_CAPS_DEVICE_VGA);
DO_TEST("graphics-sdl-fullscreen", QEMU_CAPS_DEVICE_CIRRUS_VGA); DO_TEST("graphics-sdl-fullscreen", QEMU_CAPS_DEVICE_CIRRUS_VGA);
DO_TEST("graphics-spice", QEMU_CAPS_DEVICE_QXL);
DO_TEST("graphics-spice-compression", QEMU_CAPS_DEVICE_QXL); cfg->spiceTLS = true;
DO_TEST("graphics-spice-qxl-vga", QEMU_CAPS_DEVICE_QXL); DO_TEST("graphics-spice",
DO_TEST("graphics-spice-socket", QEMU_CAPS_DEVICE_CIRRUS_VGA); QEMU_CAPS_DEVICE_QXL,
DO_TEST("graphics-spice-auto-socket", QEMU_CAPS_DEVICE_CIRRUS_VGA); QEMU_CAPS_SPICE,
QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
DO_TEST("graphics-spice-compression",
QEMU_CAPS_DEVICE_QXL,
QEMU_CAPS_SPICE);
DO_TEST("graphics-spice-qxl-vga",
QEMU_CAPS_DEVICE_QXL,
QEMU_CAPS_SPICE);
DO_TEST("graphics-spice-socket",
QEMU_CAPS_DEVICE_CIRRUS_VGA,
QEMU_CAPS_SPICE,
QEMU_CAPS_SPICE_UNIX);
DO_TEST("graphics-spice-auto-socket",
QEMU_CAPS_DEVICE_CIRRUS_VGA,
QEMU_CAPS_SPICE,
QEMU_CAPS_SPICE_UNIX);
cfg->spiceAutoUnixSocket = true; cfg->spiceAutoUnixSocket = true;
DO_TEST("graphics-spice-auto-socket-cfg", QEMU_CAPS_DEVICE_CIRRUS_VGA); DO_TEST("graphics-spice-auto-socket-cfg",
QEMU_CAPS_DEVICE_CIRRUS_VGA,
QEMU_CAPS_SPICE);
cfg->spiceAutoUnixSocket = false; cfg->spiceAutoUnixSocket = false;
cfg->spiceTLS = false;
DO_TEST("graphics-spice-egl-headless", DO_TEST("graphics-spice-egl-headless",
QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_QXL,
QEMU_CAPS_EGL_HEADLESS); QEMU_CAPS_EGL_HEADLESS,
QEMU_CAPS_SPICE);
DO_TEST("graphics-egl-headless-rendernode", DO_TEST("graphics-egl-headless-rendernode",
QEMU_CAPS_DEVICE_CIRRUS_VGA, QEMU_CAPS_DEVICE_CIRRUS_VGA,
@ -443,7 +466,13 @@ mymain(void)
DO_TEST("serial-tcp-tlsx509-chardev", NONE); DO_TEST("serial-tcp-tlsx509-chardev", NONE);
DO_TEST("serial-tcp-tlsx509-chardev-notls", NONE); DO_TEST("serial-tcp-tlsx509-chardev-notls", NONE);
DO_TEST("serial-spiceport", QEMU_CAPS_DEVICE_QXL);
cfg->spiceTLS = true;
DO_TEST("serial-spiceport",
QEMU_CAPS_DEVICE_QXL,
QEMU_CAPS_SPICE);
cfg->spiceTLS = false;
DO_TEST("serial-spiceport-nospice", NONE); DO_TEST("serial-spiceport-nospice", NONE);
DO_TEST("console-compat", NONE); DO_TEST("console-compat", NONE);
DO_TEST("console-compat2", NONE); DO_TEST("console-compat2", NONE);
@ -573,7 +602,8 @@ mymain(void)
DO_TEST("seclabel-device-multiple", NONE); DO_TEST("seclabel-device-multiple", NONE);
DO_TEST_FULL("seclabel-dynamic-none-relabel", WHEN_INACTIVE, DO_TEST_FULL("seclabel-dynamic-none-relabel", WHEN_INACTIVE,
ARG_QEMU_CAPS, QEMU_CAPS_DEVICE_CIRRUS_VGA, ARG_QEMU_CAPS, QEMU_CAPS_DEVICE_CIRRUS_VGA,
QEMU_CAPS_OBJECT_MEMORY_FILE, NONE); QEMU_CAPS_OBJECT_MEMORY_FILE,
QEMU_CAPS_SPICE, NONE);
DO_TEST("numad-static-vcpu-no-numatune", NONE); DO_TEST("numad-static-vcpu-no-numatune", NONE);
DO_TEST("disk-scsi-lun-passthrough-sgio", DO_TEST("disk-scsi-lun-passthrough-sgio",
@ -693,7 +723,9 @@ mymain(void)
DO_TEST("graphics-listen-network2", DO_TEST("graphics-listen-network2",
QEMU_CAPS_DEVICE_CIRRUS_VGA, QEMU_CAPS_DEVICE_CIRRUS_VGA,
QEMU_CAPS_VNC); QEMU_CAPS_VNC);
DO_TEST("graphics-spice-timeout", QEMU_CAPS_DEVICE_VGA); DO_TEST("graphics-spice-timeout",
QEMU_CAPS_DEVICE_VGA,
QEMU_CAPS_SPICE);
DO_TEST("numad-auto-vcpu-no-numatune", NONE); DO_TEST("numad-auto-vcpu-no-numatune", NONE);
DO_TEST("numad-auto-memory-vcpu-no-cpuset-and-placement", NONE); DO_TEST("numad-auto-memory-vcpu-no-cpuset-and-placement", NONE);
DO_TEST("numad-auto-memory-vcpu-cpuset", NONE); DO_TEST("numad-auto-memory-vcpu-cpuset", NONE);
@ -1197,7 +1229,11 @@ mymain(void)
QEMU_CAPS_VIRTIO_GPU_VIRGL); QEMU_CAPS_VIRTIO_GPU_VIRGL);
DO_TEST("video-virtio-gpu-spice-gl", DO_TEST("video-virtio-gpu-spice-gl",
QEMU_CAPS_DEVICE_VIRTIO_GPU, QEMU_CAPS_DEVICE_VIRTIO_GPU,
QEMU_CAPS_VIRTIO_GPU_VIRGL); QEMU_CAPS_VIRTIO_GPU_VIRGL,
QEMU_CAPS_SPICE,
QEMU_CAPS_SPICE_FILE_XFER_DISABLE,
QEMU_CAPS_SPICE_GL,
QEMU_CAPS_SPICE_RENDERNODE);
DO_TEST("video-virtio-gpu-sdl-gl", DO_TEST("video-virtio-gpu-sdl-gl",
QEMU_CAPS_DEVICE_VIRTIO_GPU, QEMU_CAPS_DEVICE_VIRTIO_GPU,
QEMU_CAPS_VIRTIO_GPU_VIRGL, QEMU_CAPS_VIRTIO_GPU_VIRGL,