12 # include "internal.h"
13 # include "viralloc.h"
14 # include "viridentity.h"
15 # include "qemu/qemu_block.h"
16 # include "qemu/qemu_capabilities.h"
17 # include "qemu/qemu_domain.h"
18 # include "qemu/qemu_migration.h"
19 # include "qemu/qemu_process.h"
20 # include "qemu/qemu_slirp.h"
21 # include "datatypes.h"
22 # include "conf/storage_conf.h"
23 # include "virfilewrapper.h"
24 # include "configmake.h"
25 # include "testutilsqemuschema.h"
27 # define LIBVIRT_QEMU_CAPSPRIV_H_ALLOW
28 # include "qemu/qemu_capspriv.h"
30 # include "testutilsqemu.h"
32 # define VIR_FROM_THIS VIR_FROM_QEMU
34 static virQEMUDriver driver
;
36 static unsigned char *
37 fakeSecretGetValue(virSecretPtr obj G_GNUC_UNUSED
,
39 unsigned int fakeflags G_GNUC_UNUSED
)
42 secret
= g_strdup("AQCVn5hO6HzFAhAAq0NCv8jtJcIcE+HOBlMQ1A");
43 *value_size
= strlen(secret
);
44 return (unsigned char *) secret
;
48 fakeSecretLookupByUsage(virConnectPtr conn
,
52 unsigned char uuid
[VIR_UUID_BUFLEN
];
53 if (usageType
== VIR_SECRET_USAGE_TYPE_VOLUME
) {
54 if (!STRPREFIX(usageID
, "/storage/guest_disks/")) {
55 virReportError(VIR_ERR_INTERNAL_ERROR
,
56 "test provided invalid volume storage prefix '%s'",
60 } else if (STRNEQ(usageID
, "mycluster_myname") &&
61 STRNEQ(usageID
, "client.admin secret")) {
62 virReportError(VIR_ERR_INTERNAL_ERROR
,
63 "test provided incorrect usage '%s'", usageID
);
67 if (virUUIDGenerate(uuid
) < 0)
70 return virGetSecret(conn
, uuid
, usageType
, usageID
);
74 fakeSecretLookupByUUID(virConnectPtr conn
,
75 const unsigned char *uuid
)
77 /* NB: This mocked value could be "tls" or "volume" depending on
78 * which test is being run, we'll leave at NONE (or 0) */
79 return virGetSecret(conn
, uuid
, VIR_SECRET_USAGE_TYPE_NONE
, "");
82 static virSecretDriver fakeSecretDriver
= {
83 .connectNumOfSecrets
= NULL
,
84 .connectListSecrets
= NULL
,
85 .secretLookupByUUID
= fakeSecretLookupByUUID
,
86 .secretLookupByUsage
= fakeSecretLookupByUsage
,
87 .secretDefineXML
= NULL
,
88 .secretGetXMLDesc
= NULL
,
89 .secretSetValue
= NULL
,
90 .secretGetValue
= fakeSecretGetValue
,
91 .secretUndefine
= NULL
,
95 # define STORAGE_POOL_XML_PATH "storagepoolxml2xmlout/"
96 static const unsigned char fakeUUID
[VIR_UUID_BUFLEN
] = "fakeuuid";
98 static virStoragePoolPtr
99 fakeStoragePoolLookupByName(virConnectPtr conn
,
102 g_autofree
char *xmlpath
= NULL
;
104 if (STRNEQ(name
, "inactive")) {
105 xmlpath
= g_strdup_printf("%s/%s%s.xml", abs_srcdir
,
106 STORAGE_POOL_XML_PATH
, name
);
108 if (!virFileExists(xmlpath
)) {
109 virReportError(VIR_ERR_NO_STORAGE_POOL
,
110 "File '%s' not found", xmlpath
);
115 return virGetStoragePool(conn
, name
, fakeUUID
, NULL
, NULL
);
119 static virStorageVolPtr
120 fakeStorageVolLookupByName(virStoragePoolPtr pool
,
123 g_auto(GStrv
) volinfo
= NULL
;
125 if (STREQ(pool
->name
, "inactive")) {
126 virReportError(VIR_ERR_OPERATION_INVALID
,
127 "storage pool '%s' is not active", pool
->name
);
131 if (STREQ(name
, "nonexistent")) {
132 virReportError(VIR_ERR_NO_STORAGE_VOL
,
133 "no storage vol with matching name '%s'", name
);
137 if (!(volinfo
= g_strsplit(name
, "+", 2)))
141 return virGetStorageVol(pool
->conn
, pool
->name
, name
, "block", NULL
, NULL
);
144 return virGetStorageVol(pool
->conn
, pool
->name
, volinfo
[1], volinfo
[0],
149 fakeStorageVolGetInfo(virStorageVolPtr vol
,
150 virStorageVolInfoPtr info
)
152 memset(info
, 0, sizeof(*info
));
154 info
->type
= virStorageVolTypeFromString(vol
->key
);
156 if (info
->type
< 0) {
157 virReportError(VIR_ERR_INTERNAL_ERROR
,
158 "Invalid volume type '%s'", vol
->key
);
167 fakeStorageVolGetPath(virStorageVolPtr vol
)
169 return g_strdup_printf("/some/%s/device/%s", vol
->key
, vol
->name
);
174 fakeStoragePoolGetXMLDesc(virStoragePoolPtr pool
,
175 unsigned int flags_unused G_GNUC_UNUSED
)
177 g_autofree
char *xmlpath
= NULL
;
180 if (STREQ(pool
->name
, "inactive")) {
181 virReportError(VIR_ERR_NO_STORAGE_POOL
, NULL
);
185 xmlpath
= g_strdup_printf("%s/%s%s.xml", abs_srcdir
, STORAGE_POOL_XML_PATH
,
188 if (virTestLoadFile(xmlpath
, &xmlbuf
) < 0) {
189 virReportError(VIR_ERR_INTERNAL_ERROR
,
190 "failed to load XML file '%s'",
199 fakeStoragePoolIsActive(virStoragePoolPtr pool
)
201 if (STREQ(pool
->name
, "inactive"))
207 /* Test storage pool implementation
209 * These functions aid testing of storage pool related stuff when creating a
212 * There are a few "magic" values to pass to these functions:
214 * 1) "inactive" as a pool name to create an inactive pool. All other names are
215 * interpreted as file names in storagepoolxml2xmlout/ and are used as the
216 * definition for the pool. If the file doesn't exist the pool doesn't exist.
218 * 2) "nonexistent" returns an error while looking up a volume. Otherwise
219 * pattern VOLUME_TYPE+VOLUME_PATH can be used to simulate a volume in a pool.
220 * This creates a fake path for this volume. If the '+' sign is omitted, block
223 static virStorageDriver fakeStorageDriver
= {
224 .storagePoolLookupByName
= fakeStoragePoolLookupByName
,
225 .storageVolLookupByName
= fakeStorageVolLookupByName
,
226 .storagePoolGetXMLDesc
= fakeStoragePoolGetXMLDesc
,
227 .storageVolGetPath
= fakeStorageVolGetPath
,
228 .storageVolGetInfo
= fakeStorageVolGetInfo
,
229 .storagePoolIsActive
= fakeStoragePoolIsActive
,
233 /* virNetDevOpenvswitchGetVhostuserIfname mocks a portdev name - handle that */
234 static virNWFilterBindingPtr
235 fakeNWFilterBindingLookupByPortDev(virConnectPtr conn
,
238 if (STREQ(portdev
, "vhost-user0"))
239 return virGetNWFilterBinding(conn
, "fake_vnet0", "fakeFilterName");
241 virReportError(VIR_ERR_NO_NWFILTER_BINDING
,
242 "no nwfilter binding for port dev '%s'", portdev
);
248 fakeNWFilterBindingDelete(virNWFilterBindingPtr binding G_GNUC_UNUSED
)
254 static virNWFilterDriver fakeNWFilterDriver
= {
255 .nwfilterBindingLookupByPortDev
= fakeNWFilterBindingLookupByPortDev
,
256 .nwfilterBindingDelete
= fakeNWFilterBindingDelete
,
260 /* name of the fake network shall be constructed as:
261 * NETWORKXMLNAME;NETWORKPORTXMLNAME
263 * NETWORKXMLNAME resolves to abs_srcdir/networkxml2xmlin/NETWORKXMLNAME.xml
264 * NETWORKPORTXMLNAME resolves to abs_srcdir/virnetworkportxml2xmldata/NETWORKPORTXMLNAME.xml
267 fakeNetworkLookupByName(virConnectPtr conn
,
270 unsigned char uuid
[VIR_UUID_BUFLEN
];
271 g_autofree
char *netname
= g_strdup(name
);
272 g_autofree
char *path
= NULL
;
275 memset(uuid
, 0, VIR_UUID_BUFLEN
);
277 if ((tmp
= strchr(netname
, ';'))) {
280 virReportError(VIR_ERR_NO_NETWORK
,
281 "Malformed fake network name '%s'. See fakeNetworkLookupByName.",
286 path
= g_strdup_printf(abs_srcdir
"/networkxml2xmlin/%s.xml", netname
);
288 if (!virFileExists(path
)) {
289 virReportError(VIR_ERR_NO_NETWORK
, "fake network '%s' not found", path
);
293 return virGetNetwork(conn
, name
, uuid
);
298 fakeNetworkGetXMLDesc(virNetworkPtr network
,
299 unsigned int noflags G_GNUC_UNUSED
)
301 g_autofree
char *netname
= g_strdup(network
->name
);
302 g_autofree
char *path
= NULL
;
305 *(strchr(netname
, ';')) = '\0';
307 path
= g_strdup_printf(abs_srcdir
"/networkxml2xmlin/%s.xml", netname
);
309 if (virFileReadAll(path
, 4 * 1024, &xml
) < 0)
316 static virNetworkPortPtr
317 fakeNetworkPortCreateXML(virNetworkPtr net
,
318 const char *xmldesc G_GNUC_UNUSED
,
319 unsigned int noflags G_GNUC_UNUSED
)
321 unsigned char uuid
[VIR_UUID_BUFLEN
];
322 g_autofree
char *portname
= g_strdup(strchr(net
->name
, ';') + 1);
323 g_autofree
char *path
= g_strdup_printf(abs_srcdir
"/virnetworkportxml2xmldata/%s.xml", portname
);
325 memset(uuid
, 0, VIR_UUID_BUFLEN
);
327 if (!virFileExists(path
)) {
328 virReportError(VIR_ERR_NO_NETWORK_PORT
, "fake network port '%s' not found", path
);
332 return virGetNetworkPort(net
, uuid
);
337 fakeNetworkPortGetXMLDesc(virNetworkPortPtr port
,
338 unsigned int noflags G_GNUC_UNUSED
)
340 g_autofree
char *portname
= g_strdup(strchr(port
->net
->name
, ';') + 1);
341 g_autofree
char *path
= g_strdup_printf(abs_srcdir
"/virnetworkportxml2xmldata/%s.xml", portname
);
344 if (virFileReadAll(path
, 4 * 1024, &xml
) < 0)
351 static virNetworkDriver fakeNetworkDriver
= {
352 .networkLookupByName
= fakeNetworkLookupByName
,
353 .networkGetXMLDesc
= fakeNetworkGetXMLDesc
,
354 .networkPortCreateXML
= fakeNetworkPortCreateXML
,
355 .networkPortGetXMLDesc
= fakeNetworkPortGetXMLDesc
,
360 testUpdateQEMUCapsHostCPUModel(virQEMUCaps
*qemuCaps
, virArch hostArch
)
362 virQEMUCapsUpdateHostCPUModel(qemuCaps
, hostArch
, VIR_DOMAIN_VIRT_KVM
);
363 virQEMUCapsUpdateHostCPUModel(qemuCaps
, hostArch
, VIR_DOMAIN_VIRT_QEMU
);
368 testCheckExclusiveFlags(int flags
)
370 virCheckFlags(FLAG_EXPECT_FAILURE
|
371 FLAG_EXPECT_PARSE_ERROR
|
374 FLAG_ALLOW_DUPLICATE_OUTPUT
|
375 FLAG_ALLOW_MISSING_INPUT
|
383 testCompareXMLToArgvCreateArgs(virQEMUDriver
*drv
,
385 const char *migrateURI
,
389 qemuDomainObjPrivate
*priv
= vm
->privateData
;
392 if (qemuProcessCreatePretendCmdPrepare(drv
, vm
, migrateURI
,
393 VIR_QEMU_PROCESS_START_COLD
) < 0)
396 if (qemuDomainDeviceBackendChardevForeach(vm
->def
,
397 testQemuPrepareHostBackendChardevOne
,
401 if (testQemuPrepareHostBackendChardevOne(NULL
, priv
->monConfig
, vm
) < 0)
404 for (i
= 0; i
< vm
->def
->ndisks
; i
++) {
405 virDomainDiskDef
*disk
= vm
->def
->disks
[i
];
406 virStorageSource
*src
;
408 /* host cdrom requires special treatment in qemu, mock it */
409 if (disk
->device
== VIR_DOMAIN_DISK_DEVICE_CDROM
&&
410 disk
->src
->format
== VIR_STORAGE_FILE_RAW
&&
411 virStorageSourceIsBlockLocal(disk
->src
) &&
412 STREQ(disk
->src
->path
, "/dev/cdrom"))
413 disk
->src
->hostcdrom
= true;
415 if (info
->args
.vdpafds
) {
416 for (src
= disk
->src
; virStorageSourceIsBacking(src
); src
= src
->backingStore
) {
419 if (src
->type
!= VIR_STORAGE_TYPE_VHOST_VDPA
)
422 if ((value
= g_hash_table_lookup(info
->args
.vdpafds
, src
->vdpadev
))) {
423 int fd
= GPOINTER_TO_INT(value
);
424 qemuDomainStorageSourcePrivate
*srcpriv
;
425 VIR_AUTOCLOSE fakefd
= open("/dev/zero", O_RDWR
);
427 if (fcntl(fd
, F_GETFD
) != -1) {
428 fprintf(stderr
, "fd '%d' is already in use\n", fd
);
432 if (dup2(fakefd
, fd
) < 0) {
433 fprintf(stderr
, "failed to duplicate fake fd: %s",
438 srcpriv
= qemuDomainStorageSourcePrivateFetch(src
);
440 srcpriv
->fdpass
= qemuFDPassNew(qemuBlockStorageSourceGetStorageNodename(src
), priv
);
441 qemuFDPassAddFD(srcpriv
->fdpass
, &fd
, "-vdpa");
447 if (vm
->def
->vsock
) {
448 virDomainVsockDef
*vsock
= vm
->def
->vsock
;
449 qemuDomainVsockPrivate
*vsockPriv
=
450 (qemuDomainVsockPrivate
*)vsock
->privateData
;
452 if (vsock
->auto_cid
== VIR_TRISTATE_BOOL_YES
)
453 vsock
->guest_cid
= 42;
455 vsockPriv
->vhostfd
= 6789;
458 for (i
= 0; i
< vm
->def
->ntpms
; i
++) {
459 if (vm
->def
->tpms
[i
]->type
!= VIR_DOMAIN_TPM_TYPE_EMULATOR
)
462 VIR_FREE(vm
->def
->tpms
[i
]->data
.emulator
.source
->data
.nix
.path
);
463 vm
->def
->tpms
[i
]->data
.emulator
.source
->type
= VIR_DOMAIN_CHR_TYPE_UNIX
;
464 vm
->def
->tpms
[i
]->data
.emulator
.source
->data
.nix
.path
= g_strdup("/dev/test");
467 for (i
= 0; i
< vm
->def
->nvideos
; i
++) {
468 virDomainVideoDef
*video
= vm
->def
->videos
[i
];
470 if (video
->backend
== VIR_DOMAIN_VIDEO_BACKEND_TYPE_VHOSTUSER
) {
471 qemuDomainVideoPrivate
*vpriv
= QEMU_DOMAIN_VIDEO_PRIVATE(video
);
473 vpriv
->vhost_user_fd
= 1729;
477 if (flags
& FLAG_SLIRP_HELPER
) {
478 for (i
= 0; i
< vm
->def
->nnets
; i
++) {
479 virDomainNetDef
*net
= vm
->def
->nets
[i
];
481 if (net
->type
== VIR_DOMAIN_NET_TYPE_USER
&&
482 net
->backend
.type
== VIR_DOMAIN_NET_BACKEND_DEFAULT
&&
483 virQEMUCapsGet(info
->qemuCaps
, QEMU_CAPS_DBUS_VMSTATE
)) {
484 qemuSlirp
*slirp
= qemuSlirpNew();
486 QEMU_DOMAIN_NETWORK_PRIVATE(net
)->slirp
= slirp
;
491 return qemuProcessCreatePretendCmdBuild(vm
, migrateURI
);
495 struct testValidateSchemaCommandData
{
498 bool allowIncomplete
; /* relax validator for commands with incomplete schema */
502 static const struct testValidateSchemaCommandData commands
[] = {
503 { "-blockdev", "blockdev-add", false },
504 { "-netdev", "netdev_add", false },
505 { "-object", "object-add", false },
506 { "-device", "device_add", true },
507 { "-chardev", "chardev-add", false },
511 testCompareXMLToArgvValidateSchemaCommand(GStrv args
,
516 for (arg
= args
; *arg
; arg
++) {
517 const char *curcommand
= *arg
;
518 const char *curargs
= *(arg
+ 1);
521 for (i
= 0; i
< G_N_ELEMENTS(commands
); i
++) {
522 const struct testValidateSchemaCommandData
*command
= commands
+ i
;
523 g_auto(virBuffer
) debug
= VIR_BUFFER_INITIALIZER
;
524 g_autoptr(virJSONValue
) jsonargs
= NULL
;
526 if (STRNEQ(curcommand
, command
->name
))
530 VIR_TEST_VERBOSE("expected arguments for command '%s'",
535 if (*curargs
!= '{') {
540 if (!(jsonargs
= virJSONValueFromString(curargs
)))
543 if (testQEMUSchemaValidateCommand(command
->schema
, jsonargs
,
544 schema
, false, false,
545 command
->allowIncomplete
,
547 VIR_TEST_VERBOSE("failed to validate '%s %s' against QAPI schema: %s",
548 command
->name
, curargs
, virBufferCurrentContent(&debug
));
561 testCompareXMLToArgvValidateSchema(virCommand
*cmd
,
564 g_auto(GStrv
) args
= NULL
;
566 if (!info
->qmpSchema
)
569 if (virCommandGetArgList(cmd
, &args
) < 0)
572 if (testCompareXMLToArgvValidateSchemaCommand(args
, info
->qmpSchema
) < 0)
580 testInfoCheckDuplicate(testQemuInfo
*info
)
582 const char *path
= info
->outfile
;
584 if (info
->flags
& FLAG_ALLOW_DUPLICATE_OUTPUT
)
588 path
= info
->errfile
;
590 if (g_hash_table_contains(info
->conf
->duplicateTests
, path
)) {
591 fprintf(stderr
, "\nduplicate invocation of test case: %s\n'", path
);
595 g_hash_table_insert(info
->conf
->duplicateTests
, g_strdup(path
), NULL
);
602 * testQemuConfXMLCommon: Prepare common test data (e.g. parse input XML)
605 * @info: test info struct to prepare
606 * @rv: return value that the caller is supposed to return (see below)
608 * Since some of the prepared data is reused by multiple tests, which can be
609 * potentially skipped via 'VIR_TEST_RANGE', this function is designed to be
610 * callable multiple times but processes data just once.
612 * Returns 'true' if subsequent tests are expected to run (input XML was parsed
613 * properly and test is not expected to fail on parse error). Otherwise 'false'
614 * is returned and rv is populated according to the following logic:
615 * 1) expected failure of parsing (FLAG_EXPECT_PARSE_ERROR)
616 * - first invocation sets @rv to 0
617 * - other invocations set rv to EXIT_AM_SKIP
618 * 2) unexpected error
619 * - all invocations return -1
620 * - first invocation reports actual error
621 * - other invocations report replacement error
624 testQemuConfXMLCommon(testQemuInfo
*info
,
627 g_autoptr(virDomainDef
) def
= NULL
;
629 /* initialize a test just once */
633 /* mark test case as used */
634 ignore_value(g_hash_table_remove(info
->conf
->existingTestCases
, info
->infile
));
636 ignore_value(g_hash_table_remove(info
->conf
->existingTestCases
, info
->outfile
));
638 ignore_value(g_hash_table_remove(info
->conf
->existingTestCases
, info
->errfile
));
639 if (info
->out_xml_inactive
)
640 ignore_value(g_hash_table_remove(info
->conf
->existingTestCases
, info
->out_xml_inactive
));
642 if (testQemuInfoInitArgs((testQemuInfo
*) info
) < 0)
645 if (testInfoCheckDuplicate(info
) < 0)
649 /* when compiled without nbdkit support we want to skip the test after
650 * marking it as used */
651 if (info
->args
.fakeNbdkitCaps
) {
652 info
->prep_skip
= true;
653 info
->prepared
= true;
656 # endif /* !WITH_NBDKIT */
658 if (info
->arch
!= VIR_ARCH_NONE
&& info
->arch
!= VIR_ARCH_X86_64
)
659 qemuTestSetHostArch(&driver
, info
->arch
);
661 if (info
->args
.capsHostCPUModel
) {
662 virCPUDef
*hostCPUModel
= qemuTestGetCPUDef(info
->args
.capsHostCPUModel
);
664 qemuTestSetHostCPU(&driver
, driver
.hostarch
, hostCPUModel
);
665 testUpdateQEMUCapsHostCPUModel(info
->qemuCaps
, driver
.hostarch
);
668 if (testCheckExclusiveFlags(info
->flags
) < 0)
671 virFileCacheClear(driver
.qemuCapsCache
);
673 if (qemuTestCapsCacheInsert(driver
.qemuCapsCache
, info
->qemuCaps
) < 0)
676 if (!(info
->flags
& FLAG_ALLOW_MISSING_INPUT
) &&
677 !virFileExists(info
->infile
)) {
678 virReportError(VIR_ERR_INTERNAL_ERROR
,
679 "Input file '%s' not found", info
->infile
);
683 if (!(def
= virDomainDefParseFile(info
->infile
, driver
.xmlopt
, NULL
,
684 info
->parseFlags
| VIR_DOMAIN_DEF_PARSE_INACTIVE
))) {
685 virError
*err
= virGetLastError();
688 VIR_TEST_DEBUG("no error was reported for expected parse error");
692 if (info
->flags
& FLAG_EXPECT_PARSE_ERROR
) {
693 g_autoptr(GString
) errstr
= g_string_new(NULLSTR(err
->message
));
695 g_string_replace(errstr
, abs_srcdir
, "ABS_SRCDIR", 0);
696 g_string_append_c(errstr
, '\n');
698 if (virTestCompareToFile(errstr
->str
, info
->errfile
) >= 0) {
699 info
->prep_skip
= true;
706 if (info
->flags
& FLAG_EXPECT_PARSE_ERROR
) {
707 VIR_TEST_DEBUG("passed instead of expected parse error");
711 info
->def
= g_steal_pointer(&def
);
714 /* definition is present and correct, return true to signal that caller can continue */
716 info
->prepared
= true;
720 /* definition is not present, but failure was expected */
721 if (info
->prep_skip
) {
722 /* first time we report success, any subsequent time EXIT_AM_SKIP */
728 /* any other failure always results in error in all invocations
729 * so that the user will see all the failures in the final error
730 * message which is suggesting a VIR_TEST_RANGE-limited run for
734 /* report replacement error on subsequent runs */
736 VIR_TEST_VERBOSE("error from testQemuConfXMLCommon() was reported in the first invocation");
739 info
->prepared
= true;
740 /* caller is not expected to run tests */
746 testCompareDef2XML(const void *data
)
748 testQemuInfo
*info
= (void *) data
;
749 g_autofree
char *actual
= NULL
;
750 unsigned int format_flags
= VIR_DOMAIN_DEF_FORMAT_SECURE
;
753 if (!testQemuConfXMLCommon(info
, &rc
))
756 /* we deliberately format the XML as live to catch potential test regressions
757 * as virDomainDefFormatInternalSetRootName implies _INACTIVE if 'def->id'
758 * is -1, thus VM is inactive. */
759 if (!(actual
= virDomainDefFormat(info
->def
, driver
.xmlopt
, format_flags
)))
762 if (virTestCompareToFile(actual
, info
->out_xml_inactive
) < 0)
770 testCompareOutXML2XML(const void *data
)
772 testQemuInfo
*info
= (void *) data
;
773 g_autofree
char *actual
= NULL
;
774 g_autoptr(virDomainDef
) outdef
= NULL
;
775 unsigned int format_flags
= VIR_DOMAIN_DEF_FORMAT_SECURE
;
778 if (!testQemuConfXMLCommon(info
, &rc
))
781 /* parsing of the file produced by libvirt MUST succeed */
782 if (!(outdef
= virDomainDefParseFile(info
->out_xml_inactive
, driver
.xmlopt
, NULL
,
783 info
->parseFlags
| VIR_DOMAIN_DEF_PARSE_INACTIVE
))) {
784 VIR_TEST_VERBOSE("failed to parse '%s'", info
->out_xml_inactive
);
788 /* we deliberately format the XML as live to catch potential test regressions
789 * as virDomainDefFormatInternalSetRootName implies _INACTIVE if 'def->id'
790 * is -1, thus VM is inactive. */
791 if (!(actual
= virDomainDefFormat(outdef
, driver
.xmlopt
, format_flags
)))
794 if (virTestCompareToFile(actual
, info
->out_xml_inactive
) < 0)
802 testCompareXMLToArgv(const void *data
)
804 testQemuInfo
*info
= (void *) data
;
805 g_autofree
char *migrateURI
= NULL
;
806 g_auto(virBuffer
) actualBuf
= VIR_BUFFER_INITIALIZER
;
807 g_autofree
char *actualargv
= NULL
;
808 unsigned int flags
= info
->flags
;
810 virDomainObj
*vm
= NULL
;
811 virDomainChrSourceDef monitor_chr
= { 0 };
812 virError
*err
= NULL
;
813 g_autofree
char *log
= NULL
;
814 g_autoptr(virCommand
) cmd
= NULL
;
815 qemuDomainObjPrivate
*priv
= NULL
;
816 g_autoptr(virIdentity
) sysident
= virIdentityGetSystem();
819 if (!testQemuConfXMLCommon(info
, &rc
))
822 if (virIdentitySetCurrent(sysident
) < 0)
825 if (info
->nbdkitCaps
) {
826 if (virFileCacheInsertData(driver
.nbdkitCapsCache
, TEST_NBDKIT_PATH
,
827 g_object_ref(info
->nbdkitCaps
)) < 0) {
828 g_object_unref(info
->nbdkitCaps
);
833 if (info
->migrateFrom
&&
834 !(migrateURI
= qemuMigrationDstGetURI(info
->migrateFrom
,
838 if (!(vm
= virDomainObjNew(driver
.xmlopt
)))
842 priv
= vm
->privateData
;
844 if (info
->args
.fds
) {
845 g_clear_pointer(&priv
->fds
, g_hash_table_unref
);
846 priv
->fds
= g_steal_pointer(&info
->args
.fds
);
849 if (virBitmapParse("0-3", &priv
->autoNodeset
, 4) < 0)
852 if (!virDomainDefCheckABIStability(vm
->def
, vm
->def
, driver
.xmlopt
)) {
853 VIR_TEST_DEBUG("ABI stability check failed on %s", info
->infile
);
859 if (qemuProcessPrepareMonitorChr(&monitor_chr
, priv
->libDir
) < 0)
864 if (!(cmd
= testCompareXMLToArgvCreateArgs(&driver
, vm
, migrateURI
, info
,
866 err
= virGetLastError();
868 VIR_TEST_DEBUG("no error was reported for expected failure");
871 if (flags
& FLAG_EXPECT_FAILURE
) {
872 g_autofree
char *tmperr
= g_strdup_printf("%s\n", NULLSTR(err
->message
));
873 if (virTestCompareToFile(tmperr
, info
->errfile
) >= 0)
878 if (flags
& FLAG_EXPECT_FAILURE
) {
879 VIR_TEST_DEBUG("passed instead of expected failure");
883 if (testCompareXMLToArgvValidateSchema(cmd
, info
) < 0)
886 if (virCommandToStringBuf(cmd
, &actualBuf
, true, false) < 0)
889 virBufferAddLit(&actualBuf
, "\n");
890 actualargv
= virBufferContentAndReset(&actualBuf
);
892 if (virTestCompareToFileFull(actualargv
, info
->outfile
, false) < 0)
898 if (ret
== 0 && flags
& FLAG_EXPECT_FAILURE
) {
900 VIR_TEST_DEBUG("Error expected but there wasn't any.");
903 if (flags
& FLAG_EXPECT_FAILURE
) {
904 if ((log
= virTestLogContentAndReset()))
905 VIR_TEST_DEBUG("Got expected error: \n%s", log
);
911 /* clear overriden host cpu */
912 if (info
->args
.capsHostCPUModel
)
913 qemuTestSetHostCPU(&driver
, driver
.hostarch
, NULL
);
914 virDomainChrSourceDefClear(&monitor_chr
);
919 virIdentitySetCurrent(NULL
);
920 if (info
->arch
!= VIR_ARCH_NONE
&& info
->arch
!= VIR_ARCH_X86_64
)
921 qemuTestSetHostArch(&driver
, VIR_ARCH_NONE
);
928 testConfXMLCheck(GHashTable
*existingTestCases
)
930 g_autofree virHashKeyValuePair
*items
= virHashGetItems(existingTestCases
, NULL
, true);
934 for (i
= 0; items
[i
].key
; i
++) {
936 fprintf(stderr
, "\n");
938 fprintf(stderr
, "unused file: %s\n", (const char *) items
[i
].key
);
947 testConfXMLEnumerate(GHashTable
*existingTestCases
)
950 g_autoptr(DIR) dir
= NULL
;
953 /* If VIR_TEST_RANGE is in use don't bother filling in the data, which
954 * also makes testConfXMLCheck succeed. */
955 if (virTestHasRangeBitmap())
958 if (virDirOpen(&dir
, abs_srcdir
"/qemuxmlconfdata") < 0)
961 while ((rc
= virDirRead(dir
, &ent
, abs_srcdir
"/qemuxmlconfdata")) > 0) {
962 if (virStringHasSuffix(ent
->d_name
, ".xml") ||
963 virStringHasSuffix(ent
->d_name
, ".args") ||
964 virStringHasSuffix(ent
->d_name
, ".err")) {
965 g_hash_table_insert(existingTestCases
,
966 g_strdup_printf(abs_srcdir
"/qemuxmlconfdata/%s", ent
->d_name
),
976 testXMLParse(const void *data
)
978 testQemuInfo
*info
= (void *) data
;
981 testQemuConfXMLCommon(info
, &rc
);
988 testRun(const char *name
,
991 struct testQemuConf
*testConf
,
994 g_autofree
char *name_parse
= g_strdup_printf("QEMU XML def parse %s%s", name
, suffix
);
995 g_autofree
char *name_xml
= g_strdup_printf("QEMU XML def -> XML %s%s", name
, suffix
);
996 g_autofree
char *name_outxml
= g_strdup_printf("QEMU XML OUT -> XML %s%s", name
, suffix
);
997 g_autofree
char *name_argv
= g_strdup_printf("QEMU XML def -> ARGV %s%s", name
, suffix
);
998 g_autoptr(testQemuInfo
) info
= g_new0(testQemuInfo
, 1);
1002 info
->conf
= testConf
;
1004 va_start(ap
, testConf
);
1005 testQemuInfoSetArgs(info
, ap
);
1008 info
->infile
= g_strdup_printf("%s/qemuxmlconfdata/%s.xml", abs_srcdir
, info
->name
);
1009 if (info
->flags
& (FLAG_EXPECT_FAILURE
| FLAG_EXPECT_PARSE_ERROR
)) {
1010 info
->errfile
= g_strdup_printf("%s/qemuxmlconfdata/%s%s.err", abs_srcdir
, info
->name
, suffix
);
1012 info
->outfile
= g_strdup_printf("%s/qemuxmlconfdata/%s%s.args", abs_srcdir
, info
->name
, suffix
);
1015 if (!(info
->flags
& FLAG_EXPECT_PARSE_ERROR
))
1016 info
->out_xml_inactive
= g_strdup_printf("%s/qemuxmlconfdata/%s%s.xml", abs_srcdir
, info
->name
, suffix
);
1018 virTestRunLog(ret
, name_parse
, testXMLParse
, info
);
1019 virTestRunLog(ret
, name_xml
, testCompareDef2XML
, info
);
1020 virTestRunLog(ret
, name_outxml
, testCompareOutXML2XML
, info
);
1021 virTestRunLog(ret
, name_argv
, testCompareXMLToArgv
, info
);
1023 /* clear overriden host cpu */
1024 if (info
->args
.capsHostCPUModel
)
1025 qemuTestSetHostCPU(&driver
, driver
.hostarch
, NULL
);
1026 if (info
->arch
!= VIR_ARCH_NONE
&& info
->arch
!= VIR_ARCH_X86_64
)
1027 qemuTestSetHostArch(&driver
, VIR_ARCH_NONE
);
1035 g_autoptr(virConnect
) conn
= NULL
;
1036 g_autoptr(GHashTable
) duplicateTests
= virHashNew(NULL
);
1037 g_autoptr(GHashTable
) existingTestCases
= virHashNew(NULL
);
1038 g_autoptr(GHashTable
) capslatest
= testQemuGetLatestCaps();
1039 g_autoptr(GHashTable
) qapiSchemaCache
= virHashNew((GDestroyNotify
) g_hash_table_unref
);
1040 g_autoptr(GHashTable
) capscache
= virHashNew(virObjectUnref
);
1041 struct testQemuConf testConf
= { .capslatest
= capslatest
,
1042 .capscache
= capscache
,
1043 .qapiSchemaCache
= qapiSchemaCache
,
1044 .duplicateTests
= duplicateTests
,
1045 .existingTestCases
= existingTestCases
};
1048 return EXIT_FAILURE
;
1050 /* enumerate and store all available test cases to verify at the end that
1051 * all of them were invoked */
1052 if (testConfXMLEnumerate(existingTestCases
) < 0)
1053 return EXIT_FAILURE
;
1055 /* Set the timezone because we are mocking the time() function.
1056 * If we don't do that, then localtime() may return unpredictable
1057 * results. In order to detect things that just work by a blind
1058 * chance, we need to set an virtual timezone that no libvirt
1059 * developer resides in. */
1060 if (g_setenv("TZ", "VIR00:30", TRUE
) == FALSE
) {
1062 return EXIT_FAILURE
;
1065 if (qemuTestDriverInit(&driver
) < 0)
1066 return EXIT_FAILURE
;
1068 virFileWrapperAddPrefix("/sys/devices/system",
1069 abs_srcdir
"/vircaps2xmldata/linux-basic/system");
1070 virFileWrapperAddPrefix(SYSCONFDIR
"/qemu/firmware",
1071 abs_srcdir
"/qemufirmwaredata/etc/qemu/firmware");
1072 virFileWrapperAddPrefix(PREFIX
"/share/qemu/firmware",
1073 abs_srcdir
"/qemufirmwaredata/usr/share/qemu/firmware");
1074 virFileWrapperAddPrefix("/home/user/.config/qemu/firmware",
1075 abs_srcdir
"/qemufirmwaredata/home/user/.config/qemu/firmware");
1077 virFileWrapperAddPrefix(SYSCONFDIR
"/qemu/vhost-user",
1078 abs_srcdir
"/qemuvhostuserdata/etc/qemu/vhost-user");
1079 virFileWrapperAddPrefix(PREFIX
"/share/qemu/vhost-user",
1080 abs_srcdir
"/qemuvhostuserdata/usr/share/qemu/vhost-user");
1081 virFileWrapperAddPrefix("/home/user/.config/qemu/vhost-user",
1082 abs_srcdir
"/qemuvhostuserdata/home/user/.config/qemu/vhost-user");
1084 virFileWrapperAddPrefix("/usr/libexec/qemu/vhost-user",
1085 abs_srcdir
"/qemuvhostuserdata/usr/libexec/qemu/vhost-user");
1086 virFileWrapperAddPrefix("/usr/libexec/virtiofsd",
1087 abs_srcdir
"/qemuvhostuserdata/usr/libexec/qemu/vhost-user/test-virtiofsd");
1089 if (!(conn
= virGetConnect()))
1090 return EXIT_FAILURE
;
1092 conn
->secretDriver
= &fakeSecretDriver
;
1093 conn
->storageDriver
= &fakeStorageDriver
;
1094 conn
->nwfilterDriver
= &fakeNWFilterDriver
;
1095 conn
->networkDriver
= &fakeNetworkDriver
;
1097 virSetConnectInterface(conn
);
1098 virSetConnectNetwork(conn
);
1099 virSetConnectNWFilter(conn
);
1100 virSetConnectNodeDev(conn
);
1101 virSetConnectSecret(conn
);
1102 virSetConnectStorage(conn
);
1105 * The following set of macros allows testing of XML -> argv conversion with a
1106 * real set of capabilities gathered from a real qemu copy. It is desired to use
1107 * these for positive test cases as it provides combinations of flags which
1108 * can be met in real life.
1110 * The capabilities are taken from the real capabilities stored in
1111 * tests/qemucapabilitiesdata.
1113 * It is suggested to use the DO_TEST_CAPS_LATEST macro which always takes the
1114 * most recent capability set. In cases when the new code would change behaviour
1115 * the test cases should be forked using DO_TEST_CAPS_VER with the appropriate
1118 # define DO_TEST_FULL(_name, _suffix, ...) \
1119 testRun(_name, _suffix, &ret, &testConf, __VA_ARGS__);
1121 # define DO_TEST_CAPS_INTERNAL(name, arch, ver, ...) \
1122 DO_TEST_FULL(name, "." arch "-" ver, \
1123 ARG_CAPS_ARCH, arch, \
1124 ARG_CAPS_VER, ver, \
1128 # define DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, ...) \
1129 DO_TEST_CAPS_INTERNAL(name, arch, "latest", __VA_ARGS__)
1131 # define DO_TEST_CAPS_ARCH_VER_FULL(name, arch, ver, ...) \
1132 DO_TEST_CAPS_INTERNAL(name, arch, ver, __VA_ARGS__)
1134 # define DO_TEST_CAPS_ARCH_LATEST(name, arch) \
1135 DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, ARG_END)
1137 # define DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE(name, arch) \
1138 DO_TEST_FULL(name, "." arch "-latest.abi-update", \
1139 ARG_CAPS_ARCH, arch, \
1140 ARG_CAPS_VER, "latest", \
1141 ARG_PARSEFLAGS, VIR_DOMAIN_DEF_PARSE_ABI_UPDATE, \
1144 # define DO_TEST_CAPS_ARCH_VER(name, arch, ver) \
1145 DO_TEST_CAPS_ARCH_VER_FULL(name, arch, ver, ARG_END)
1147 # define DO_TEST_CAPS_LATEST_NBDKIT(name, ...) \
1148 DO_TEST_CAPS_ARCH_LATEST_FULL(name, "x86_64", ARG_NBDKIT_CAPS, __VA_ARGS__, QEMU_NBDKIT_CAPS_LAST, ARG_END)
1150 # define DO_TEST_CAPS_LATEST(name) \
1151 DO_TEST_CAPS_ARCH_LATEST(name, "x86_64")
1153 # define DO_TEST_CAPS_LATEST_ABI_UPDATE(name) \
1154 DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE(name, "x86_64")
1156 # define DO_TEST_CAPS_VER(name, ver) \
1157 DO_TEST_CAPS_ARCH_VER(name, "x86_64", ver)
1159 # define DO_TEST_CAPS_LATEST_PPC64(name) \
1160 DO_TEST_CAPS_ARCH_LATEST(name, "ppc64")
1162 # define DO_TEST_CAPS_LATEST_PPC64_HOSTCPU(name, hostcpu) \
1163 DO_TEST_CAPS_ARCH_LATEST_FULL(name, "ppc64", \
1164 ARG_CAPS_HOST_CPU_MODEL, hostcpu)
1166 # define DO_TEST_CAPS_LATEST_PPC64_HOSTCPU_FAILURE(name, hostcpu) \
1167 DO_TEST_CAPS_ARCH_LATEST_FULL(name, "ppc64", \
1168 ARG_CAPS_HOST_CPU_MODEL, hostcpu, \
1169 ARG_FLAGS, FLAG_EXPECT_FAILURE)
1171 # define DO_TEST_CAPS_ARCH_LATEST_FAILURE(name, arch) \
1172 DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, \
1173 ARG_FLAGS, FLAG_EXPECT_FAILURE)
1175 # define DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE_FAILURE(name, arch) \
1176 DO_TEST_FULL(name, "." arch "-latest.abi-update", \
1177 ARG_CAPS_ARCH, arch, \
1178 ARG_CAPS_VER, "latest", \
1179 ARG_PARSEFLAGS, VIR_DOMAIN_DEF_PARSE_ABI_UPDATE, \
1180 ARG_FLAGS, FLAG_EXPECT_FAILURE, \
1183 # define DO_TEST_CAPS_ARCH_VER_FAILURE(name, arch, ver) \
1184 DO_TEST_CAPS_ARCH_VER_FULL(name, arch, ver, \
1185 ARG_FLAGS, FLAG_EXPECT_FAILURE)
1187 # define DO_TEST_CAPS_LATEST_FAILURE(name) \
1188 DO_TEST_CAPS_ARCH_LATEST_FAILURE(name, "x86_64")
1190 # define DO_TEST_CAPS_LATEST_ABI_UPDATE_FAILURE(name) \
1191 DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE_FAILURE(name, "x86_64")
1193 # define DO_TEST_CAPS_VER_FAILURE(name, ver) \
1194 DO_TEST_CAPS_ARCH_VER_FAILURE(name, "x86_64", ver)
1196 # define DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR(name, arch) \
1197 DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, \
1198 ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR)
1200 # define DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE_PARSE_ERROR(name, arch) \
1201 DO_TEST_FULL(name, "." arch "-latest.abi-update", \
1202 ARG_CAPS_ARCH, arch, \
1203 ARG_CAPS_VER, "latest", \
1204 ARG_PARSEFLAGS, VIR_DOMAIN_DEF_PARSE_ABI_UPDATE, \
1205 ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR, \
1208 # define DO_TEST_CAPS_ARCH_VER_PARSE_ERROR(name, arch, ver) \
1209 DO_TEST_CAPS_ARCH_VER_FULL(name, arch, ver, \
1210 ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR)
1212 # define DO_TEST_CAPS_LATEST_PARSE_ERROR(name) \
1213 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR(name, "x86_64")
1215 # define DO_TEST_CAPS_LATEST_ABI_UPDATE_PARSE_ERROR(name) \
1216 DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE_PARSE_ERROR(name, "x86_64")
1218 # define DO_TEST_CAPS_VER_PARSE_ERROR(name, ver) \
1219 DO_TEST_CAPS_ARCH_VER_PARSE_ERROR(name, "x86_64", ver)
1221 # define DO_TEST_GIC(name, ver, gic) \
1222 DO_TEST_CAPS_ARCH_VER_FULL(name, "aarch64", ver, ARG_GIC, gic, ARG_FLAGS, FLAG_ALLOW_DUPLICATE_OUTPUT, ARG_END)
1224 /* Unset or set all envvars here that are copied in qemudBuildCommandLine
1225 * using ADD_ENV_COPY, otherwise these tests may fail due to unexpected
1226 * values for these envvars */
1227 g_setenv("PATH", "/bin", TRUE
);
1228 g_setenv("USER", "test", TRUE
);
1229 g_setenv("LOGNAME", "test", TRUE
);
1230 g_setenv("HOME", "/home/test", TRUE
);
1231 g_setenv("LC_ALL", "C", TRUE
);
1232 g_unsetenv("TMPDIR");
1233 g_unsetenv("LD_PRELOAD");
1234 g_unsetenv("LD_LIBRARY_PATH");
1235 g_unsetenv("DYLD_INSERT_LIBRARIES");
1236 g_unsetenv("DYLD_FORCE_FLAT_NAMESPACE");
1237 g_unsetenv("QEMU_AUDIO_DRV");
1238 g_unsetenv("SDL_AUDIODRIVER");
1239 g_unsetenv("PIPEWIRE_CORE");
1240 g_unsetenv("PIPEWIRE_REMOTE");
1241 g_unsetenv("PIPEWIRE_RUNTIME_DIR");
1243 DO_TEST_CAPS_ARCH_LATEST_FULL("nonexistent-file", "x86_64",
1244 ARG_FLAGS
, FLAG_EXPECT_PARSE_ERROR
| FLAG_ALLOW_MISSING_INPUT
);
1245 DO_TEST_CAPS_LATEST_PARSE_ERROR("broken-xml-invalid");
1247 DO_TEST_CAPS_LATEST("x86_64-pc-minimal");
1248 DO_TEST_CAPS_LATEST_ABI_UPDATE("x86_64-pc-minimal");
1249 DO_TEST_CAPS_LATEST("x86_64-q35-minimal");
1250 DO_TEST_CAPS_LATEST_ABI_UPDATE("x86_64-q35-minimal");
1251 DO_TEST_CAPS_ARCH_LATEST("aarch64-virt-minimal", "aarch64");
1252 DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("aarch64-virt-minimal", "aarch64");
1253 DO_TEST_CAPS_ARCH_LATEST("aarch64-versatilepb-minimal", "aarch64");
1254 DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("aarch64-versatilepb-minimal", "aarch64");
1255 DO_TEST_CAPS_ARCH_LATEST("armv7l-versatilepb-minimal", "armv7l");
1256 DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("armv7l-versatilepb-minimal", "armv7l");
1257 DO_TEST_CAPS_ARCH_LATEST("aarch64-realview-minimal", "aarch64");
1258 DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("aarch64-realview-minimal", "aarch64");
1259 /* The '-nousb' test case tests machine without a built-in USB controller */
1260 DO_TEST_CAPS_ARCH_LATEST("aarch64-nousb-minimal", "aarch64");
1261 DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("aarch64-nousb-minimal", "aarch64");
1262 DO_TEST_CAPS_ARCH_LATEST("loongarch64-virt-minimal", "loongarch64");
1263 DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("loongarch64-virt-minimal", "loongarch64");
1264 DO_TEST_CAPS_ARCH_LATEST("riscv64-virt-minimal", "riscv64");
1265 DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("riscv64-virt-minimal", "riscv64");
1266 DO_TEST_CAPS_ARCH_LATEST("ppc64-pseries-minimal", "ppc64");
1267 DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("ppc64-pseries-minimal", "ppc64");
1268 DO_TEST_CAPS_ARCH_LATEST("ppc64-g3beige-minimal", "ppc64");
1269 DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("ppc64-g3beige-minimal", "ppc64");
1270 DO_TEST_CAPS_ARCH_LATEST("ppc64-mac99-minimal", "ppc64");
1271 DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("ppc64-mac99-minimal", "ppc64");
1272 DO_TEST_CAPS_ARCH_LATEST("ppc-mac99-minimal", "ppc");
1273 DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("ppc-mac99-minimal", "ppc");
1274 DO_TEST_CAPS_ARCH_LATEST("ppc64-powernv9-minimal", "ppc64");
1275 DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("ppc64-powernv9-minimal", "ppc64");
1276 DO_TEST_CAPS_ARCH_LATEST("s390x-ccw-minimal", "s390x");
1277 DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("s390x-ccw-minimal", "s390x");
1279 DO_TEST_CAPS_LATEST("x86_64-pc-default-models");
1280 DO_TEST_CAPS_LATEST_ABI_UPDATE("x86_64-pc-default-models");
1281 DO_TEST_CAPS_LATEST("x86_64-q35-default-models");
1282 DO_TEST_CAPS_LATEST_ABI_UPDATE("x86_64-q35-default-models");
1283 DO_TEST_CAPS_ARCH_LATEST("aarch64-virt-default-models", "aarch64");
1284 DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("aarch64-virt-default-models", "aarch64");
1285 DO_TEST_CAPS_ARCH_LATEST("loongarch64-virt-default-models", "loongarch64");
1286 DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("loongarch64-virt-default-models", "loongarch64");
1287 DO_TEST_CAPS_ARCH_LATEST("riscv64-virt-default-models", "riscv64");
1288 DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("riscv64-virt-default-models", "riscv64");
1289 DO_TEST_CAPS_ARCH_LATEST("ppc64-pseries-default-models", "ppc64");
1290 DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("ppc64-pseries-default-models", "ppc64");
1291 DO_TEST_CAPS_ARCH_LATEST("s390x-ccw-default-models", "s390x");
1292 DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("s390x-ccw-default-models", "s390x");
1294 DO_TEST_CAPS_LATEST_PARSE_ERROR("no-memory");
1296 DO_TEST_CAPS_LATEST("genid");
1297 DO_TEST_CAPS_LATEST("genid-auto");
1299 DO_TEST_CAPS_LATEST("machine-aliases1");
1300 DO_TEST_CAPS_LATEST("machine-aliases2");
1301 DO_TEST_CAPS_LATEST("machine-core-on");
1302 driver
.config
->dumpGuestCore
= true;
1303 DO_TEST_CAPS_LATEST("machine-core-off");
1304 driver
.config
->dumpGuestCore
= false;
1305 DO_TEST_CAPS_LATEST("machine-smm-on");
1306 DO_TEST_CAPS_LATEST("machine-smm-off");
1307 DO_TEST_CAPS_LATEST("machine-vmport-opt");
1308 DO_TEST_CAPS_LATEST("machine-i8042-on");
1309 DO_TEST_CAPS_VER_PARSE_ERROR("machine-i8042-on", "6.2.0");
1310 DO_TEST_CAPS_LATEST("machine-i8042-off");
1311 DO_TEST_CAPS_VER_PARSE_ERROR("machine-i8042-off", "6.2.0");
1312 DO_TEST_CAPS_LATEST_PARSE_ERROR("machine-i8042-off-vmport-on");
1313 DO_TEST_CAPS_LATEST_PARSE_ERROR("machine-i8042-off-explicit-ps2-inputs");
1314 DO_TEST_CAPS_LATEST("default-kvm-host-arch");
1315 DO_TEST_CAPS_LATEST("default-qemu-host-arch");
1316 DO_TEST_CAPS_LATEST("x86-kvm-32-on-64");
1317 DO_TEST_CAPS_LATEST("boot-cdrom");
1318 DO_TEST_CAPS_LATEST("boot-network");
1319 DO_TEST_CAPS_LATEST("boot-floppy");
1320 DO_TEST_CAPS_LATEST("boot-floppy-q35");
1321 DO_TEST_CAPS_LATEST("boot-multi");
1322 DO_TEST_CAPS_LATEST("boot-menu-enable");
1323 DO_TEST_CAPS_LATEST("boot-menu-enable-with-timeout");
1324 DO_TEST_CAPS_LATEST_PARSE_ERROR("boot-menu-enable-with-timeout-invalid");
1325 DO_TEST_CAPS_LATEST("boot-menu-disable");
1326 DO_TEST_CAPS_LATEST("boot-menu-disable-drive");
1328 DO_TEST_CAPS_LATEST_PARSE_ERROR("boot-dev+order");
1329 DO_TEST_CAPS_LATEST("boot-order");
1330 DO_TEST_CAPS_LATEST("boot-complex");
1332 DO_TEST_CAPS_LATEST("audio-none-minimal");
1333 DO_TEST_CAPS_LATEST("audio-alsa-minimal");
1334 DO_TEST_CAPS_LATEST("audio-coreaudio-minimal");
1335 DO_TEST_CAPS_LATEST("audio-jack-minimal");
1336 DO_TEST_CAPS_LATEST("audio-oss-minimal");
1337 DO_TEST_CAPS_LATEST("audio-pulseaudio-minimal");
1338 g_setenv("PIPEWIRE_RUNTIME_DIR", "/run/user/1000", TRUE
);
1339 DO_TEST_CAPS_LATEST("audio-pipewire-minimal");
1340 g_unsetenv("PIPEWIRE_RUNTIME_DIR");
1341 DO_TEST_CAPS_LATEST("audio-sdl-minimal");
1342 DO_TEST_CAPS_LATEST("audio-spice-minimal");
1343 DO_TEST_CAPS_LATEST("audio-file-minimal");
1345 DO_TEST_CAPS_LATEST("audio-none-best");
1346 DO_TEST_CAPS_LATEST("audio-alsa-best");
1347 DO_TEST_CAPS_LATEST("audio-coreaudio-best");
1348 DO_TEST_CAPS_LATEST("audio-oss-best");
1349 DO_TEST_CAPS_LATEST("audio-pulseaudio-best");
1350 DO_TEST_CAPS_LATEST("audio-pipewire-best");
1351 DO_TEST_CAPS_LATEST("audio-sdl-best");
1352 DO_TEST_CAPS_LATEST("audio-spice-best");
1353 DO_TEST_CAPS_LATEST("audio-file-best");
1355 DO_TEST_CAPS_LATEST("audio-none-full");
1356 DO_TEST_CAPS_LATEST("audio-alsa-full");
1357 DO_TEST_CAPS_LATEST("audio-coreaudio-full");
1358 DO_TEST_CAPS_LATEST("audio-jack-full");
1359 DO_TEST_CAPS_LATEST("audio-oss-full");
1360 DO_TEST_CAPS_LATEST("audio-pulseaudio-full");
1361 DO_TEST_CAPS_LATEST("audio-pipewire-full");
1362 DO_TEST_CAPS_LATEST("audio-sdl-full");
1363 DO_TEST_CAPS_LATEST("audio-spice-full");
1364 DO_TEST_CAPS_LATEST("audio-file-full");
1366 g_setenv("PIPEWIRE_RUNTIME_DIR", "/run/user/1000", TRUE
);
1367 DO_TEST_CAPS_LATEST("audio-many-backends");
1368 g_unsetenv("PIPEWIRE_RUNTIME_DIR");
1370 /* Validate auto-creation of <audio> for legacy compat */
1371 g_setenv("QEMU_AUDIO_DRV", "sdl", TRUE
);
1372 g_setenv("SDL_AUDIODRIVER", "esd", TRUE
);
1373 DO_TEST_CAPS_LATEST("audio-default-sdl");
1374 g_unsetenv("QEMU_AUDIO_DRV");
1375 g_unsetenv("SDL_AUDIODRIVER");
1377 g_setenv("QEMU_AUDIO_DRV", "alsa", TRUE
);
1378 driver
.config
->vncAllowHostAudio
= true;
1379 DO_TEST_CAPS_LATEST("audio-default-vnc");
1380 driver
.config
->vncAllowHostAudio
= false;
1381 g_unsetenv("QEMU_AUDIO_DRV");
1383 DO_TEST_CAPS_LATEST("audio-default-spice");
1385 g_setenv("QEMU_AUDIO_DRV", "alsa", TRUE
);
1386 driver
.config
->nogfxAllowHostAudio
= true;
1387 DO_TEST_CAPS_LATEST("audio-default-nographics");
1388 driver
.config
->nogfxAllowHostAudio
= false;
1389 g_unsetenv("QEMU_AUDIO_DRV");
1391 DO_TEST_CAPS_LATEST("reboot-timeout-disabled");
1392 DO_TEST_CAPS_LATEST("reboot-timeout-enabled");
1394 DO_TEST_CAPS_LATEST("firmware-manual-bios");
1395 DO_TEST_CAPS_LATEST("firmware-manual-bios-stateless");
1396 DO_TEST_CAPS_LATEST_PARSE_ERROR("firmware-manual-bios-not-stateless");
1397 DO_TEST_CAPS_LATEST("firmware-manual-efi");
1398 DO_TEST_CAPS_LATEST("firmware-manual-efi-features");
1399 DO_TEST_CAPS_LATEST_ABI_UPDATE_PARSE_ERROR("firmware-manual-efi-features");
1400 DO_TEST_CAPS_LATEST("firmware-manual-efi-rw");
1401 DO_TEST_CAPS_LATEST("firmware-manual-efi-rw-legacy-paths");
1402 DO_TEST_CAPS_LATEST("firmware-manual-efi-rw-modern-paths");
1403 DO_TEST_CAPS_LATEST("firmware-manual-efi-rw-implicit");
1404 DO_TEST_CAPS_LATEST("firmware-manual-efi-loader-secure");
1405 DO_TEST_CAPS_LATEST_PARSE_ERROR("firmware-manual-efi-loader-no-path");
1406 DO_TEST_CAPS_LATEST("firmware-manual-efi-loader-path-nonstandard");
1407 DO_TEST_CAPS_LATEST("firmware-manual-efi-secboot");
1408 DO_TEST_CAPS_LATEST("firmware-manual-efi-no-enrolled-keys");
1409 DO_TEST_CAPS_LATEST("firmware-manual-efi-no-secboot");
1410 DO_TEST_CAPS_LATEST("firmware-manual-efi-stateless");
1411 DO_TEST_CAPS_LATEST("firmware-manual-efi-nvram-template");
1412 DO_TEST_CAPS_LATEST("firmware-manual-efi-nvram-template-nonstandard");
1413 DO_TEST_CAPS_LATEST_PARSE_ERROR("firmware-manual-efi-nvram-template-stateless");
1414 DO_TEST_CAPS_LATEST("firmware-manual-efi-nvram-network-iscsi");
1415 DO_TEST_CAPS_LATEST("firmware-manual-efi-nvram-network-nbd");
1416 DO_TEST_CAPS_LATEST("firmware-manual-efi-nvram-file");
1417 DO_TEST_CAPS_LATEST_PARSE_ERROR("firmware-manual-efi-nvram-stateless");
1419 /* Make sure all combinations of ACPI and UEFI behave as expected */
1420 DO_TEST_CAPS_ARCH_LATEST("firmware-manual-efi-acpi-aarch64", "aarch64");
1421 DO_TEST_CAPS_LATEST("firmware-manual-efi-acpi-q35");
1422 DO_TEST_CAPS_ARCH_LATEST("firmware-manual-efi-noacpi-aarch64", "aarch64");
1423 DO_TEST_CAPS_LATEST_PARSE_ERROR("firmware-manual-efi-noacpi-q35");
1424 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("firmware-manual-noefi-acpi-aarch64", "aarch64");
1425 DO_TEST_CAPS_LATEST("firmware-manual-noefi-acpi-q35");
1426 DO_TEST_CAPS_ARCH_LATEST("firmware-manual-noefi-noacpi-aarch64", "aarch64");
1427 DO_TEST_CAPS_LATEST("firmware-manual-noefi-noacpi-q35");
1429 /* Ensure that legacy firmware paths keep working */
1430 DO_TEST_CAPS_LATEST("firmware-manual-efi-secboot-legacy-paths");
1431 DO_TEST_CAPS_LATEST("firmware-manual-efi-no-enrolled-keys-legacy-paths");
1432 DO_TEST_CAPS_LATEST("firmware-manual-efi-no-secboot-legacy-paths");
1433 DO_TEST_CAPS_ARCH_LATEST("firmware-manual-efi-aarch64-legacy-paths", "aarch64");
1435 DO_TEST_CAPS_LATEST("firmware-auto-bios");
1436 DO_TEST_CAPS_LATEST("firmware-auto-bios-stateless");
1437 DO_TEST_CAPS_LATEST_PARSE_ERROR("firmware-auto-bios-not-stateless");
1438 DO_TEST_CAPS_LATEST_PARSE_ERROR("firmware-auto-bios-nvram");
1439 DO_TEST_CAPS_LATEST("firmware-auto-efi");
1440 DO_TEST_CAPS_LATEST_ABI_UPDATE("firmware-auto-efi");
1441 DO_TEST_CAPS_LATEST("firmware-auto-efi-stateless");
1442 DO_TEST_CAPS_LATEST_FAILURE("firmware-auto-efi-rw");
1443 DO_TEST_CAPS_LATEST_FAILURE("firmware-auto-efi-rw-pflash");
1444 DO_TEST_CAPS_LATEST("firmware-auto-efi-loader-secure");
1445 DO_TEST_CAPS_LATEST_ABI_UPDATE("firmware-auto-efi-loader-secure");
1446 DO_TEST_CAPS_LATEST("firmware-auto-efi-loader-insecure");
1447 DO_TEST_CAPS_LATEST("firmware-auto-efi-loader-path");
1448 DO_TEST_CAPS_LATEST_FAILURE("firmware-auto-efi-loader-path-nonstandard");
1449 DO_TEST_CAPS_LATEST("firmware-auto-efi-secboot");
1450 DO_TEST_CAPS_LATEST("firmware-auto-efi-no-secboot");
1451 DO_TEST_CAPS_LATEST("firmware-auto-efi-enrolled-keys");
1452 DO_TEST_CAPS_LATEST("firmware-auto-efi-no-enrolled-keys");
1453 DO_TEST_CAPS_LATEST_PARSE_ERROR("firmware-auto-efi-enrolled-keys-no-secboot");
1454 DO_TEST_CAPS_LATEST("firmware-auto-efi-smm-off");
1455 DO_TEST_CAPS_ARCH_LATEST("firmware-auto-efi-aarch64", "aarch64");
1456 DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("firmware-auto-efi-aarch64", "aarch64");
1457 DO_TEST_CAPS_ARCH_LATEST("firmware-auto-efi-loongarch64", "loongarch64");
1458 DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("firmware-auto-efi-loongarch64", "loongarch64");
1459 DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("firmware-auto-efi-riscv64", "riscv64");
1460 DO_TEST_CAPS_LATEST("firmware-auto-efi-nvram-path");
1461 DO_TEST_CAPS_LATEST("firmware-auto-efi-nvram-template");
1462 DO_TEST_CAPS_LATEST_FAILURE("firmware-auto-efi-nvram-template-nonstandard");
1463 DO_TEST_CAPS_LATEST("firmware-auto-efi-nvram-file");
1464 DO_TEST_CAPS_LATEST("firmware-auto-efi-nvram-network-nbd");
1465 DO_TEST_CAPS_LATEST("firmware-auto-efi-nvram-network-iscsi");
1467 DO_TEST_CAPS_LATEST("firmware-auto-efi-format-loader-qcow2");
1468 DO_TEST_CAPS_LATEST("firmware-auto-efi-format-loader-qcow2-nvram-path");
1469 DO_TEST_CAPS_LATEST("firmware-auto-efi-format-nvram-qcow2");
1470 DO_TEST_CAPS_LATEST("firmware-auto-efi-format-nvram-qcow2-path");
1471 DO_TEST_CAPS_LATEST("firmware-auto-efi-format-nvram-qcow2-network-nbd");
1472 DO_TEST_CAPS_ARCH_LATEST("firmware-auto-efi-format-loader-raw", "aarch64");
1473 DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("firmware-auto-efi-format-loader-raw", "aarch64");
1474 DO_TEST_CAPS_LATEST("firmware-auto-efi-format-mismatch");
1476 DO_TEST_CAPS_LATEST("clock-utc");
1477 DO_TEST_CAPS_LATEST("clock-localtime");
1478 DO_TEST_CAPS_LATEST("clock-localtime-basis-localtime");
1479 DO_TEST_CAPS_LATEST("clock-variable");
1480 DO_TEST_CAPS_LATEST("clock-france");
1481 DO_TEST_CAPS_VER("clock-hpet-off", "7.2.0");
1482 DO_TEST_CAPS_LATEST("clock-hpet-off");
1483 DO_TEST_CAPS_LATEST("clock-catchup");
1484 DO_TEST_CAPS_ARCH_LATEST_FULL("cpu-kvmclock", "x86_64", ARG_CAPS_HOST_CPU_MODEL
, QEMU_CPU_DEF_HASWELL
);
1485 DO_TEST_CAPS_LATEST("cpu-host-kvmclock");
1486 DO_TEST_CAPS_LATEST("kvmclock");
1487 DO_TEST_CAPS_LATEST("clock-timer-hyperv-rtc");
1488 DO_TEST_CAPS_LATEST("clock-realtime");
1489 DO_TEST_CAPS_LATEST("clock-absolute");
1491 DO_TEST_CAPS_LATEST("controller-usb-order");
1493 DO_TEST_CAPS_LATEST("controller-order");
1494 /* 'eoi' cpu feature with an explicit CPU defined */
1495 DO_TEST_CAPS_LATEST("cpu-eoi-disabled");
1496 DO_TEST_CAPS_LATEST("cpu-eoi-enabled");
1497 /* 'eoi' cpu feature without an explicit CPU defined */
1498 DO_TEST_CAPS_LATEST("eoi-disabled");
1499 DO_TEST_CAPS_LATEST("eoi-enabled");
1500 DO_TEST_CAPS_LATEST("pv-spinlock-disabled");
1501 DO_TEST_CAPS_LATEST("pv-spinlock-enabled");
1502 DO_TEST_CAPS_LATEST("kvmclock+eoi-disabled");
1504 DO_TEST_CAPS_LATEST("hyperv");
1505 DO_TEST_CAPS_LATEST("hyperv-off");
1506 DO_TEST_CAPS_LATEST("hyperv-panic");
1507 DO_TEST_CAPS_VER("hyperv-passthrough", "6.1.0");
1508 DO_TEST_CAPS_LATEST("hyperv-passthrough");
1509 DO_TEST_CAPS_LATEST("hyperv-stimer-direct");
1511 DO_TEST_CAPS_LATEST("kvm-features");
1512 DO_TEST_CAPS_LATEST("kvm-features-off");
1514 DO_TEST_CAPS_LATEST("pmu-feature");
1515 DO_TEST_CAPS_LATEST("pmu-feature-off");
1517 DO_TEST_CAPS_LATEST("pages-discard");
1518 DO_TEST_CAPS_LATEST("pages-discard-hugepages");
1519 DO_TEST_CAPS_LATEST("pages-dimm-discard");
1520 DO_TEST_CAPS_LATEST("hugepages-default");
1521 DO_TEST_CAPS_LATEST("hugepages-default-2M");
1522 DO_TEST_CAPS_LATEST("hugepages-default-system-size");
1523 DO_TEST_CAPS_LATEST_FAILURE("hugepages-default-5M");
1524 DO_TEST_CAPS_LATEST_PARSE_ERROR("hugepages-default-1G-nodeset-2M");
1525 DO_TEST_CAPS_LATEST("hugepages-nodeset");
1526 DO_TEST_CAPS_LATEST_PARSE_ERROR("hugepages-nodeset-nonexist");
1527 DO_TEST_CAPS_LATEST("hugepages-numa-default");
1528 DO_TEST_CAPS_LATEST("hugepages-numa-default-2M");
1529 DO_TEST_CAPS_LATEST("hugepages-numa-default-dimm");
1530 DO_TEST_CAPS_LATEST("hugepages-numa-nodeset");
1531 DO_TEST_CAPS_LATEST("hugepages-numa-nodeset-part");
1532 DO_TEST_CAPS_LATEST_PARSE_ERROR("hugepages-numa-nodeset-nonexist");
1533 DO_TEST_CAPS_LATEST("hugepages-shared");
1534 DO_TEST_CAPS_LATEST_PARSE_ERROR("hugepages-memaccess-invalid");
1535 DO_TEST_CAPS_LATEST("hugepages-memaccess");
1536 DO_TEST_CAPS_LATEST("hugepages-memaccess2");
1537 DO_TEST_CAPS_LATEST("hugepages-memaccess3");
1538 DO_TEST_CAPS_LATEST("hugepages-nvdimm");
1539 DO_TEST_CAPS_LATEST("nosharepages");
1541 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("non-x86_64-timer-error", "s390x");
1543 DO_TEST_CAPS_LATEST("disk-cdrom");
1544 DO_TEST_CAPS_LATEST("disk-cdrom-empty-network-invalid");
1545 DO_TEST_CAPS_LATEST("disk-cdrom-bus-other");
1546 DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-cdrom-usb-empty");
1547 DO_TEST_CAPS_LATEST("disk-cdrom-network");
1548 DO_TEST_CAPS_LATEST("disk-cdrom-tray");
1549 DO_TEST_CAPS_LATEST("disk-floppy");
1550 DO_TEST_CAPS_LATEST("disk-floppy-q35");
1551 DO_TEST_CAPS_ARCH_LATEST_FAILURE("disk-floppy-pseries", "ppc64");
1552 DO_TEST_CAPS_LATEST("disk-floppy-tray");
1553 DO_TEST_CAPS_LATEST("disk-virtio");
1554 DO_TEST_CAPS_ARCH_LATEST("disk-virtio-ccw", "s390x");
1555 DO_TEST_CAPS_ARCH_LATEST("disk-virtio-ccw-many", "s390x");
1556 DO_TEST_CAPS_ARCH_LATEST("disk-virtio-s390-zpci", "s390x");
1557 DO_TEST_CAPS_LATEST("disk-order");
1558 DO_TEST_CAPS_LATEST("disk-virtio-queues");
1559 DO_TEST_CAPS_LATEST("disk-boot-disk");
1560 DO_TEST_CAPS_LATEST("disk-boot-cdrom");
1561 DO_TEST_CAPS_LATEST("floppy-drive-fat");
1562 DO_TEST_CAPS_LATEST("disk-readonly-disk");
1563 DO_TEST_CAPS_LATEST("disk-fmt-qcow");
1564 DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-fmt-cow");
1565 DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-fmt-dir");
1566 DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-fmt-iso");
1567 DO_TEST_CAPS_LATEST("disk-shared");
1568 DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-shared-qcow");
1569 DO_TEST_CAPS_LATEST("disk-error-policy");
1570 DO_TEST_CAPS_ARCH_LATEST("disk-error-policy-s390x", "s390x");
1571 DO_TEST_CAPS_LATEST("disk-cache");
1572 DO_TEST_CAPS_LATEST("disk-metadata-cache");
1573 DO_TEST_CAPS_LATEST("disk-transient");
1574 DO_TEST_CAPS_LATEST("disk-network-nbd");
1575 DO_TEST_CAPS_LATEST("disk-network-iscsi");
1576 DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-network-iscsi-auth-secrettype-invalid");
1577 DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-network-iscsi-auth-wrong-secrettype");
1578 DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-network-source-auth-both");
1579 /* 'gluster' protocol backend was deprecated in qemu-9.2 */
1580 DO_TEST_CAPS_VER("disk-network-gluster", "9.1.0");
1581 DO_TEST_CAPS_LATEST("disk-network-rbd");
1582 DO_TEST_CAPS_VER_PARSE_ERROR("disk-network-rbd-encryption", "6.0.0");
1583 DO_TEST_CAPS_LATEST("disk-network-rbd-encryption");
1584 DO_TEST_CAPS_VER_PARSE_ERROR("disk-network-rbd-encryption-layering", "7.2.0");
1585 DO_TEST_CAPS_LATEST("disk-network-rbd-encryption-layering");
1586 DO_TEST_CAPS_VER_PARSE_ERROR("disk-network-rbd-encryption-luks-any", "7.2.0");
1587 DO_TEST_CAPS_LATEST("disk-network-rbd-encryption-luks-any");
1588 DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-encryption-wrong");
1589 DO_TEST_CAPS_LATEST("disk-network-rbd-no-colon");
1590 /* qemu-6.0 is the last qemu version supporting sheepdog */
1591 DO_TEST_CAPS_VER("disk-network-sheepdog", "6.0.0");
1592 DO_TEST_CAPS_LATEST("disk-network-source-auth");
1593 DO_TEST_CAPS_LATEST("disk-network-source-curl");
1594 DO_TEST_CAPS_LATEST("disk-network-nfs");
1595 driver
.config
->vxhsTLS
= 1;
1596 driver
.config
->nbdTLSx509secretUUID
= g_strdup("6fd3f62d-9fe7-4a4e-a869-7acd6376d8ea");
1597 driver
.config
->vxhsTLSx509secretUUID
= g_strdup("6fd3f62d-9fe7-4a4e-a869-7acd6376d8ea");
1598 DO_TEST_CAPS_VER("disk-network-tlsx509-nbd", "5.2.0");
1599 DO_TEST_CAPS_LATEST("disk-network-tlsx509-nbd");
1600 DO_TEST_CAPS_VER_PARSE_ERROR("disk-network-tlsx509-nbd-hostname", "6.2.0");
1601 DO_TEST_CAPS_LATEST("disk-network-tlsx509-nbd-hostname");
1602 DO_TEST_CAPS_LATEST("disk-network-http");
1603 VIR_FREE(driver
.config
->nbdTLSx509secretUUID
);
1604 VIR_FREE(driver
.config
->vxhsTLSx509secretUUID
);
1605 driver
.config
->vxhsTLS
= 0;
1606 DO_TEST_CAPS_LATEST("disk-network-ssh");
1607 DO_TEST_CAPS_LATEST("disk-no-boot");
1608 DO_TEST_CAPS_LATEST("disk-nvme");
1609 DO_TEST_CAPS_LATEST("disk-vhostuser-numa");
1610 DO_TEST_CAPS_LATEST("disk-vhostuser");
1611 DO_TEST_CAPS_ARCH_LATEST_FULL("disk-vhostvdpa", "x86_64",
1612 ARG_VDPA_FD
, "/dev/vhost-vdpa-0", 201);
1613 DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-device-lun-type-invalid");
1614 DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-attaching-partition-nosupport");
1615 DO_TEST_CAPS_LATEST("disk-usb-device");
1616 DO_TEST_CAPS_LATEST("disk-device-removable");
1617 DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-usb-pci");
1618 DO_TEST_CAPS_LATEST("disk-scsi");
1619 DO_TEST_CAPS_LATEST("disk-scsi-device-auto");
1620 DO_TEST_CAPS_LATEST("disk-scsi-disk-split");
1621 DO_TEST_CAPS_LATEST("disk-scsi-disk-wwn");
1622 DO_TEST_CAPS_LATEST("disk-scsi-disk-vpd");
1623 DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-scsi-disk-vpd-build-error");
1624 DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-scsi-product-length");
1625 DO_TEST_CAPS_LATEST("controller-virtio-scsi");
1626 DO_TEST_CAPS_LATEST("controller-scsi-auto");
1627 DO_TEST_CAPS_LATEST("disk-sata-device");
1628 DO_TEST_CAPS_LATEST("disk-sata-product");
1629 DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-target-overflow");
1630 DO_TEST_CAPS_LATEST("disk-aio");
1631 DO_TEST_CAPS_LATEST("disk-aio-io_uring");
1632 DO_TEST_CAPS_LATEST("disk-source-pool");
1633 DO_TEST_CAPS_LATEST("disk-source-pool-mode");
1634 DO_TEST_CAPS_LATEST("disk-ioeventfd");
1635 DO_TEST_CAPS_LATEST("disk-copy_on_read");
1636 DO_TEST_CAPS_LATEST("disk-discard");
1637 DO_TEST_CAPS_LATEST("disk-detect-zeroes");
1638 DO_TEST_CAPS_LATEST("disk-discard_no_unref");
1639 DO_TEST_CAPS_LATEST("disk-snapshot");
1640 DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-same-targets");
1641 DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-missing-target-invalid");
1642 DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-address-conflict");
1643 DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-hostdev-scsi-address-conflict");
1644 DO_TEST_CAPS_LATEST_PARSE_ERROR("hostdevs-drive-address-conflict");
1645 DO_TEST_CAPS_LATEST("event_idx");
1646 DO_TEST_CAPS_VER("virtio-lun", "9.0.0");
1647 DO_TEST_CAPS_LATEST_PARSE_ERROR("virtio-lun");
1648 DO_TEST_CAPS_LATEST("disk-scsi-lun-passthrough");
1649 DO_TEST_CAPS_LATEST("disk-serial");
1650 DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-fdc-incompatible-address");
1651 DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-ide-incompatible-address");
1652 DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-sata-incompatible-address");
1653 DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-scsi-incompatible-address");
1654 DO_TEST_CAPS_LATEST("disk-backing-chains-index");
1655 DO_TEST_CAPS_LATEST("disk-backing-chains-noindex");
1656 DO_TEST_CAPS_LATEST("disk-qcow2-datafile-store");
1657 DO_TEST_CAPS_ARCH_LATEST_FULL("disk-source-fd", "x86_64",
1658 ARG_FD_GROUP
, "testgroup2", 2, 200, 205,
1659 ARG_FD_GROUP
, "testgroup5", 1, 204,
1660 ARG_FD_GROUP
, "testgroup6", 2, 247, 248);
1662 DO_TEST_CAPS_LATEST("disk-slices");
1663 DO_TEST_CAPS_LATEST("disk-rotation");
1665 DO_TEST_CAPS_ARCH_LATEST("disk-arm-virtio-sd", "aarch64");
1667 DO_TEST_CAPS_LATEST("encrypted-disk");
1668 DO_TEST_CAPS_LATEST("encrypted-disk-usage");
1669 DO_TEST_CAPS_LATEST("luks-disks");
1670 DO_TEST_CAPS_LATEST("luks-disks-source");
1671 DO_TEST_CAPS_VER("luks-disks-source-qcow2", "5.2.0");
1672 DO_TEST_CAPS_LATEST("luks-disks-source-qcow2");
1673 DO_TEST_CAPS_LATEST_PARSE_ERROR("luks-disk-invalid");
1674 DO_TEST_CAPS_LATEST_PARSE_ERROR("luks-disks-source-both");
1676 DO_TEST_CAPS_LATEST("disk-ide-split");
1677 DO_TEST_CAPS_LATEST("disk-ide-wwn");
1678 DO_TEST_CAPS_LATEST("disk-geometry");
1679 DO_TEST_CAPS_LATEST("disk-blockio");
1681 driver
.config
->storageUseNbdkit
= 1;
1682 DO_TEST_CAPS_LATEST_NBDKIT("disk-cdrom-network-nbdkit", QEMU_NBDKIT_CAPS_PLUGIN_CURL
);
1683 DO_TEST_CAPS_LATEST_NBDKIT("disk-network-source-curl-nbdkit", QEMU_NBDKIT_CAPS_PLUGIN_CURL
);
1684 DO_TEST_CAPS_LATEST_NBDKIT("disk-network-source-curl-nbdkit-backing", QEMU_NBDKIT_CAPS_PLUGIN_CURL
);
1685 DO_TEST_CAPS_LATEST_NBDKIT("disk-network-http-nbdkit", QEMU_NBDKIT_CAPS_PLUGIN_CURL
);
1686 DO_TEST_CAPS_LATEST_NBDKIT("disk-network-ssh-nbdkit", QEMU_NBDKIT_CAPS_PLUGIN_SSH
);
1687 DO_TEST_CAPS_LATEST_NBDKIT("disk-network-ssh-password", QEMU_NBDKIT_CAPS_PLUGIN_SSH
);
1688 DO_TEST_CAPS_LATEST_NBDKIT("disk-network-ssh-key", QEMU_NBDKIT_CAPS_PLUGIN_SSH
);
1689 driver
.config
->storageUseNbdkit
= 0;
1691 DO_TEST_CAPS_VER("disk-virtio-scsi-reservations", "5.2.0");
1692 DO_TEST_CAPS_LATEST("disk-virtio-scsi-reservations");
1694 DO_TEST_CAPS_LATEST("graphics-egl-headless");
1695 DO_TEST_CAPS_LATEST("graphics-egl-headless-rendernode");
1697 DO_TEST_CAPS_LATEST("graphics-vnc");
1698 DO_TEST_CAPS_LATEST("graphics-vnc-socket");
1699 DO_TEST_CAPS_LATEST("graphics-vnc-websocket");
1700 DO_TEST_CAPS_LATEST("graphics-vnc-policy");
1701 DO_TEST_CAPS_LATEST("graphics-vnc-power");
1702 DO_TEST_CAPS_LATEST("graphics-vnc-no-listen-attr");
1703 DO_TEST_CAPS_LATEST("graphics-vnc-remove-generated-socket");
1704 driver
.config
->vncAutoUnixSocket
= true;
1705 DO_TEST_CAPS_LATEST("graphics-vnc-auto-socket-cfg");
1706 driver
.config
->vncAutoUnixSocket
= false;
1707 DO_TEST_CAPS_LATEST("graphics-vnc-auto-socket");
1708 DO_TEST_CAPS_LATEST("graphics-vnc-none");
1709 DO_TEST_CAPS_LATEST("graphics-vnc-socket-new-cmdline");
1711 driver
.config
->vncSASL
= 1;
1712 DO_TEST_CAPS_LATEST("graphics-vnc-sasl");
1713 driver
.config
->vncTLS
= 1;
1714 driver
.config
->vncTLSx509verify
= 1;
1715 DO_TEST_CAPS_LATEST("graphics-vnc-tls");
1716 driver
.config
->vncTLSx509secretUUID
= g_strdup("6fd3f62d-9fe7-4a4e-a869-7acd6376d8ea");
1717 DO_TEST_CAPS_VER("graphics-vnc-tls-secret", "5.2.0");
1718 DO_TEST_CAPS_LATEST("graphics-vnc-tls-secret");
1719 VIR_FREE(driver
.config
->vncTLSx509secretUUID
);
1720 driver
.config
->vncSASL
= driver
.config
->vncTLSx509verify
= driver
.config
->vncTLS
= 0;
1721 DO_TEST_CAPS_LATEST("graphics-vnc-egl-headless");
1723 DO_TEST_CAPS_LATEST("graphics-sdl");
1724 DO_TEST_CAPS_LATEST_PARSE_ERROR("graphics-sdl-egl-headless");
1725 DO_TEST_CAPS_LATEST("graphics-sdl-fullscreen");
1727 driver
.config
->spiceTLS
= 1;
1728 DO_TEST_CAPS_LATEST("graphics-spice");
1729 DO_TEST_CAPS_LATEST("graphics-spice-no-args");
1730 driver
.config
->spiceSASL
= 1;
1731 DO_TEST_CAPS_LATEST("graphics-spice-sasl");
1732 driver
.config
->spiceSASL
= 0;
1733 DO_TEST_CAPS_LATEST("graphics-spice-agentmouse");
1734 DO_TEST_CAPS_LATEST("graphics-spice-compression");
1735 DO_TEST_CAPS_LATEST("graphics-spice-timeout");
1736 DO_TEST_CAPS_LATEST("graphics-spice-qxl-vga");
1737 DO_TEST_CAPS_LATEST("graphics-spice-usb-redir");
1738 DO_TEST_CAPS_LATEST("graphics-spice-agent-file-xfer");
1739 DO_TEST_CAPS_LATEST("graphics-spice-socket");
1740 DO_TEST_CAPS_LATEST("graphics-spice-auto-socket");
1741 driver
.config
->spiceAutoUnixSocket
= true;
1742 DO_TEST_CAPS_LATEST("graphics-spice-auto-socket-cfg");
1743 driver
.config
->spiceAutoUnixSocket
= false;
1744 DO_TEST_CAPS_LATEST("graphics-spice-egl-headless");
1745 DO_TEST_CAPS_LATEST_PARSE_ERROR("graphics-spice-invalid-egl-headless");
1746 DO_TEST_CAPS_LATEST("graphics-spice-gl-auto-rendernode");
1747 driver
.config
->spiceTLS
= 0;
1749 DO_TEST_CAPS_LATEST("graphics-dbus");
1750 DO_TEST_CAPS_LATEST("graphics-dbus-address");
1751 DO_TEST_CAPS_LATEST("graphics-dbus-p2p");
1752 DO_TEST_CAPS_LATEST("graphics-dbus-audio");
1753 DO_TEST_CAPS_LATEST("graphics-dbus-chardev");
1754 DO_TEST_CAPS_LATEST("graphics-dbus-usbredir");
1756 DO_TEST_CAPS_LATEST("input-usbmouse");
1757 DO_TEST_CAPS_LATEST("input-usbtablet");
1759 /* tests for ACPI support handling:
1760 * - existing positive test cases enabling ACPI for aarch64/x86_64/loongarch:
1761 * - firmware-manual-efi-acpi-q35
1762 * - firmware-manual-efi-acpi-aarch64
1763 * - firmware-auto-efi-loongarch64
1765 * - negative case for aarch64 with 'borzoi' machine not supporting ACPI
1767 * - s390x has hack to strip ACPI to preserve migration of old configs,
1768 * but should produce error when ABI_UPDATE is requested
1770 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("aarch64-noacpi-acpi", "aarch64");
1771 DO_TEST_CAPS_ARCH_LATEST("riscv64-virt-acpi", "riscv64");
1772 DO_TEST_CAPS_ARCH_LATEST("s390x-ccw-acpi", "s390x");
1773 DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE_PARSE_ERROR("s390x-ccw-acpi", "s390x");
1775 DO_TEST_CAPS_LATEST("misc-disable-s3");
1776 DO_TEST_CAPS_LATEST("misc-disable-suspends");
1777 DO_TEST_CAPS_LATEST("misc-enable-s4");
1778 DO_TEST_CAPS_VER("misc-no-reboot", "5.2.0");
1779 DO_TEST_CAPS_LATEST("misc-no-reboot");
1780 DO_TEST_CAPS_LATEST("misc-uuid");
1782 DO_TEST_CAPS_LATEST_PARSE_ERROR("vhost_queues-invalid");
1784 DO_TEST_CAPS_LATEST("net-vhostuser");
1785 DO_TEST_CAPS_LATEST("net-vhostuser-multiq");
1786 DO_TEST_CAPS_LATEST_FAILURE("net-vhostuser-fail");
1787 DO_TEST_CAPS_LATEST("net-user");
1788 DO_TEST_CAPS_ARCH_LATEST_FULL("net-user", "x86_64", ARG_FLAGS
, FLAG_SLIRP_HELPER
| FLAG_ALLOW_DUPLICATE_OUTPUT
);
1789 DO_TEST_CAPS_LATEST("net-user-addr");
1790 DO_TEST_CAPS_LATEST("net-user-passt");
1791 DO_TEST_CAPS_VER("net-user-passt", "7.2.0");
1792 DO_TEST_CAPS_LATEST_PARSE_ERROR("net-user-slirp-portforward");
1793 DO_TEST_CAPS_LATEST("net-virtio");
1794 DO_TEST_CAPS_LATEST("net-virtio-device");
1795 DO_TEST_CAPS_LATEST("net-virtio-disable-offloads");
1796 DO_TEST_CAPS_LATEST("net-virtio-netdev");
1797 DO_TEST_CAPS_LATEST("net-virtio-vhost");
1798 DO_TEST_CAPS_ARCH_LATEST("net-virtio-ccw", "s390x");
1799 DO_TEST_CAPS_LATEST("net-virtio-rxtxqueuesize");
1800 DO_TEST_CAPS_LATEST_PARSE_ERROR("net-virtio-rxqueuesize-invalid-size");
1801 DO_TEST_CAPS_LATEST("net-virtio-teaming");
1802 DO_TEST_CAPS_LATEST("net-virtio-teaming-hostdev");
1803 DO_TEST_CAPS_LATEST("net-linkstate");
1804 DO_TEST_CAPS_LATEST("net-eth");
1805 DO_TEST_CAPS_LATEST("net-eth-ifname");
1806 DO_TEST_CAPS_LATEST("net-eth-names");
1807 DO_TEST_CAPS_LATEST("net-eth-hostip");
1808 DO_TEST_CAPS_LATEST("net-eth-unmanaged-tap");
1809 DO_TEST_CAPS_LATEST("net-client");
1810 DO_TEST_CAPS_LATEST("net-server");
1811 DO_TEST_CAPS_LATEST("net-many-models");
1812 DO_TEST_CAPS_LATEST("net-mcast");
1813 DO_TEST_CAPS_LATEST("net-udp");
1814 DO_TEST_CAPS_LATEST("net-hostdev");
1815 DO_TEST_CAPS_LATEST("net-hostdev-bootorder");
1816 DO_TEST_CAPS_LATEST("net-hostdev-multidomain");
1817 DO_TEST_CAPS_LATEST("net-hostdev-vfio");
1818 DO_TEST_CAPS_LATEST("net-hostdev-vfio-multidomain");
1819 DO_TEST_CAPS_LATEST_FAILURE("net-hostdev-fail");
1820 DO_TEST_CAPS_LATEST("net-vdpa");
1821 DO_TEST_CAPS_LATEST("net-vdpa-multiqueue");
1822 DO_TEST_CAPS_LATEST("net-virtio-rss");
1824 DO_TEST_CAPS_LATEST("hostdev-pci-multifunction");
1826 DO_TEST_CAPS_LATEST("hostdev-pci-address-unassigned");
1828 DO_TEST_CAPS_LATEST("serial-file-log");
1829 driver
.config
->spiceTLS
= 1;
1830 DO_TEST_CAPS_LATEST("serial-spiceport");
1831 driver
.config
->spiceTLS
= 0;
1832 DO_TEST_CAPS_LATEST("serial-debugcon");
1834 DO_TEST_CAPS_LATEST("console-compat");
1835 DO_TEST_CAPS_LATEST("console-compat-auto");
1836 DO_TEST_CAPS_LATEST("console-compat-crash");
1838 /* 'qemu-9.2' deprecated 'reconnect' in favor of 'reconnect-ms' */
1839 DO_TEST_CAPS_VER("chardev-backends", "9.1.0");
1840 DO_TEST_CAPS_LATEST("chardev-backends");
1841 /* As qemu doesn't yet support JSON syntax for -chardev we use the
1842 * QEMU_CAPS_CHARDEV_JSON capability just in the tests to have QMP schema
1843 * validation also for the QMP mode of the -chardev props generator */
1844 DO_TEST_CAPS_ARCH_VER_FULL("chardev-backends-json", "x86_64", "9.1.0", ARG_QEMU_CAPS
, QEMU_CAPS_CHARDEV_JSON
, QEMU_CAPS_LAST
);
1845 DO_TEST_CAPS_ARCH_LATEST_FULL("chardev-backends-json", "x86_64", ARG_QEMU_CAPS
, QEMU_CAPS_CHARDEV_JSON
, QEMU_CAPS_LAST
);
1847 DO_TEST_CAPS_LATEST("serial-vc-chardev");
1848 DO_TEST_CAPS_LATEST("serial-pty-chardev");
1849 DO_TEST_CAPS_LATEST("serial-dev-chardev");
1850 DO_TEST_CAPS_LATEST("serial-dev-chardev-iobase");
1851 DO_TEST_CAPS_LATEST("serial-file-chardev");
1852 DO_TEST_CAPS_LATEST("serial-unix-chardev");
1853 DO_TEST_CAPS_LATEST_PARSE_ERROR("serial-unix-missing-source");
1854 DO_TEST_CAPS_LATEST("serial-tcp-chardev");
1855 DO_TEST_CAPS_LATEST_PARSE_ERROR("serial-tcp-chardev-telnets");
1856 DO_TEST_CAPS_LATEST("serial-udp-chardev");
1857 DO_TEST_CAPS_LATEST("serial-tcp-telnet-chardev");
1858 driver
.config
->chardevTLS
= 1;
1859 DO_TEST_CAPS_LATEST("serial-tcp-tlsx509-chardev");
1860 driver
.config
->chardevTLSx509verify
= 1;
1861 DO_TEST_CAPS_LATEST("serial-tcp-tlsx509-chardev-verify");
1862 driver
.config
->chardevTLSx509verify
= 0;
1863 DO_TEST_CAPS_LATEST("serial-tcp-tlsx509-chardev-notls");
1864 driver
.config
->chardevTLSx509secretUUID
= g_strdup("6fd3f62d-9fe7-4a4e-a869-7acd6376d8ea");
1865 DO_TEST_CAPS_LATEST("serial-tcp-tlsx509-secret-chardev");
1866 VIR_FREE(driver
.config
->chardevTLSx509secretUUID
);
1867 driver
.config
->chardevTLS
= 0;
1868 DO_TEST_CAPS_LATEST("serial-many-chardev");
1869 DO_TEST_CAPS_LATEST("parallel-tcp-chardev");
1870 DO_TEST_CAPS_LATEST("parallel-parport-chardev");
1871 DO_TEST_CAPS_LATEST("parallel-unix-chardev");
1872 DO_TEST_CAPS_LATEST("console-compat-chardev");
1873 DO_TEST_CAPS_LATEST("pci-serial-dev-chardev");
1875 DO_TEST_CAPS_LATEST("channel-guestfwd");
1876 DO_TEST_CAPS_LATEST("channel-unix-guestfwd");
1877 DO_TEST_CAPS_LATEST("channel-virtio");
1878 DO_TEST_CAPS_LATEST("channel-virtio-state");
1879 DO_TEST_CAPS_LATEST("channel-virtio-auto");
1880 DO_TEST_CAPS_LATEST("channel-virtio-autoassign");
1881 DO_TEST_CAPS_LATEST("channel-virtio-autoadd");
1882 DO_TEST_CAPS_LATEST("console-virtio");
1883 DO_TEST_CAPS_LATEST("console-virtio-many");
1884 DO_TEST_CAPS_ARCH_LATEST("console-virtio-ccw", "s390x");
1885 DO_TEST_CAPS_LATEST("console-virtio-unix");
1886 DO_TEST_CAPS_ARCH_LATEST("console-sclp", "s390x");
1887 driver
.config
->spiceTLS
= 1;
1888 DO_TEST_CAPS_LATEST("channel-spicevmc");
1889 driver
.config
->spiceTLS
= 0;
1890 DO_TEST_CAPS_LATEST("channel-qemu-vdagent");
1891 DO_TEST_CAPS_LATEST("channel-qemu-vdagent-features");
1892 DO_TEST_CAPS_LATEST("channel-virtio-default");
1893 DO_TEST_CAPS_LATEST("channel-virtio-unix");
1895 DO_TEST_CAPS_LATEST("smartcard-host");
1896 DO_TEST_CAPS_LATEST("smartcard-host-certificates");
1897 DO_TEST_CAPS_LATEST("smartcard-host-certificates-database");
1898 DO_TEST_CAPS_LATEST("smartcard-passthrough-tcp");
1899 DO_TEST_CAPS_LATEST("smartcard-passthrough-spicevmc");
1900 DO_TEST_CAPS_LATEST("smartcard-controller");
1901 DO_TEST_CAPS_LATEST("smartcard-passthrough-unix");
1903 /* 'qemu-9.2' deprecated 'reconnect' in favor of 'reconnect-ms' */
1904 DO_TEST_CAPS_VER("chardev-reconnect", "9.1.0");
1905 DO_TEST_CAPS_LATEST("chardev-reconnect");
1906 DO_TEST_CAPS_LATEST_PARSE_ERROR("chardev-reconnect-invalid-timeout");
1907 DO_TEST_CAPS_LATEST_PARSE_ERROR("chardev-reconnect-generated-path");
1909 DO_TEST_CAPS_LATEST("usb-controller-implicit-isapc");
1910 DO_TEST_CAPS_LATEST("usb-controller-implicit-i440fx");
1911 DO_TEST_CAPS_LATEST("usb-controller-implicit-q35");
1912 DO_TEST_CAPS_LATEST_PARSE_ERROR("usb-controller-default-isapc");
1913 DO_TEST_CAPS_LATEST("usb-controller-default-i440fx");
1914 DO_TEST_CAPS_LATEST("usb-controller-default-q35");
1915 DO_TEST_CAPS_ARCH_LATEST("usb-controller-default-pseries", "ppc64");
1916 DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("usb-controller-default-pseries", "ppc64");
1917 DO_TEST_CAPS_ARCH_LATEST("usb-controller-default-g3beige", "ppc64");
1918 DO_TEST_CAPS_ARCH_LATEST("usb-controller-default-mac99", "ppc64");
1919 DO_TEST_CAPS_ARCH_LATEST("usb-controller-default-mac99ppc", "ppc");
1920 DO_TEST_CAPS_ARCH_LATEST("usb-controller-default-powernv9", "ppc64");
1921 /* Until qemu-8.1 (see commit 6fe4464c05f) it was possible to compile
1922 * out USB support from i440fx; the implicit -usb controller still failed */
1923 DO_TEST_FULL("usb-controller-default-unavailable-i440fx", ".x86_64-latest",
1924 ARG_CAPS_ARCH
, "x86_64",
1925 ARG_CAPS_VER
, "latest",
1926 ARG_FLAGS
, FLAG_EXPECT_FAILURE
,
1927 ARG_QEMU_CAPS_DEL
, QEMU_CAPS_PIIX3_USB_UHCI
, QEMU_CAPS_LAST
,
1929 /* The implicit controller can be compiled out for q35; initialization fails though */
1930 DO_TEST_FULL("usb-controller-default-unavailable-q35", ".x86_64-latest",
1931 ARG_CAPS_ARCH
, "x86_64",
1932 ARG_CAPS_VER
, "latest",
1933 ARG_FLAGS
, FLAG_EXPECT_FAILURE
,
1934 ARG_QEMU_CAPS_DEL
, QEMU_CAPS_PIIX3_USB_UHCI
, QEMU_CAPS_LAST
,
1936 /* However, if the USB controller is the one that gets added
1937 * automatically for every guest instead of one that the user has
1938 * explicitly asked for, we prefer simply skipping it */
1939 DO_TEST_FULL("usb-controller-automatic-unavailable-q35", ".x86_64-latest",
1940 ARG_CAPS_ARCH
, "x86_64",
1941 ARG_CAPS_VER
, "latest",
1942 ARG_QEMU_CAPS_DEL
, QEMU_CAPS_DEVICE_QEMU_XHCI
, QEMU_CAPS_NEC_USB_XHCI
, QEMU_CAPS_ICH9_USB_EHCI1
, QEMU_CAPS_LAST
,
1945 /* The USB controllers can be compiled out but downgrade to -usb fails in qemu */
1946 DO_TEST_FULL("usb-controller-default-unavailable-pseries", ".ppc64-latest",
1947 ARG_CAPS_ARCH
, "ppc64",
1948 ARG_CAPS_VER
, "latest",
1949 ARG_FLAGS
, FLAG_EXPECT_FAILURE
,
1950 ARG_QEMU_CAPS_DEL
, QEMU_CAPS_NEC_USB_XHCI
, QEMU_CAPS_PCI_OHCI
, QEMU_CAPS_DEVICE_QEMU_XHCI
, QEMU_CAPS_LAST
,
1953 /* controller selection tests for various uncommon machine types */
1954 DO_TEST_CAPS_ARCH_LATEST("usb-controller-default-versatilepb-aarch64", "aarch64");
1955 DO_TEST_FULL("usb-controller-default-fallback-versatilepb-aarch64", ".aarch64-latest",
1956 ARG_CAPS_ARCH
, "aarch64",
1957 ARG_CAPS_VER
, "latest",
1958 ARG_QEMU_CAPS_DEL
, QEMU_CAPS_PIIX3_USB_UHCI
, QEMU_CAPS_LAST
,
1960 DO_TEST_FULL("usb-controller-default-unavailable-versatilepb-aarch64", ".aarch64-latest",
1961 ARG_CAPS_ARCH
, "aarch64",
1962 ARG_CAPS_VER
, "latest",
1963 ARG_QEMU_CAPS_DEL
, QEMU_CAPS_PIIX3_USB_UHCI
, QEMU_CAPS_PCI_OHCI
, QEMU_CAPS_LAST
,
1966 DO_TEST_CAPS_ARCH_LATEST("usb-controller-default-versatilepb-armv7l", "armv7l");
1967 DO_TEST_FULL("usb-controller-default-fallback-versatilepb-armv7l", ".armv7l-latest",
1968 ARG_CAPS_ARCH
, "armv7l",
1969 ARG_CAPS_VER
, "latest",
1970 ARG_QEMU_CAPS_DEL
, QEMU_CAPS_PIIX3_USB_UHCI
, QEMU_CAPS_LAST
,
1972 DO_TEST_FULL("usb-controller-default-unavailable-versatilepb-armv7l", ".armv7l-latest",
1973 ARG_CAPS_ARCH
, "armv7l",
1974 ARG_CAPS_VER
, "latest",
1975 ARG_FLAGS
, FLAG_EXPECT_FAILURE
,
1976 ARG_QEMU_CAPS_DEL
, QEMU_CAPS_PIIX3_USB_UHCI
, QEMU_CAPS_PCI_OHCI
, QEMU_CAPS_LAST
,
1979 DO_TEST_CAPS_ARCH_LATEST("usb-controller-default-realview", "aarch64");
1980 DO_TEST_FULL("usb-controller-default-fallback-realview", ".aarch64-latest",
1981 ARG_CAPS_ARCH
, "aarch64",
1982 ARG_CAPS_VER
, "latest",
1983 ARG_QEMU_CAPS_DEL
, QEMU_CAPS_PIIX3_USB_UHCI
, QEMU_CAPS_LAST
,
1985 DO_TEST_FULL("usb-controller-default-unavailable-realview", ".aarch64-latest",
1986 ARG_CAPS_ARCH
, "aarch64",
1987 ARG_CAPS_VER
, "latest",
1988 ARG_QEMU_CAPS_DEL
, QEMU_CAPS_PIIX3_USB_UHCI
, QEMU_CAPS_PCI_OHCI
, QEMU_CAPS_LAST
,
1991 /* The '-nousb' test case tests machine without a built-in USB controller */
1992 DO_TEST_CAPS_ARCH_LATEST("usb-controller-default-nousb", "aarch64");
1993 DO_TEST_FULL("usb-controller-default-fallback-nousb", ".aarch64-latest",
1994 ARG_CAPS_ARCH
, "aarch64",
1995 ARG_CAPS_VER
, "latest",
1996 ARG_QEMU_CAPS_DEL
, QEMU_CAPS_PIIX3_USB_UHCI
, QEMU_CAPS_LAST
,
1998 DO_TEST_FULL("usb-controller-default-unavailable-nousb", ".aarch64-latest",
1999 ARG_CAPS_ARCH
, "aarch64",
2000 ARG_CAPS_VER
, "latest",
2001 ARG_QEMU_CAPS_DEL
, QEMU_CAPS_PIIX3_USB_UHCI
, QEMU_CAPS_PCI_OHCI
, QEMU_CAPS_LAST
,
2004 DO_TEST_FULL("usb-controller-default-fallback-g3beige", ".ppc64-latest",
2005 ARG_CAPS_ARCH
, "ppc64",
2006 ARG_CAPS_VER
, "latest",
2007 ARG_QEMU_CAPS_DEL
, QEMU_CAPS_NEC_USB_XHCI
, QEMU_CAPS_DEVICE_QEMU_XHCI
, QEMU_CAPS_LAST
,
2009 DO_TEST_FULL("usb-controller-default-unavailable-g3beige", ".ppc64-latest",
2010 ARG_CAPS_ARCH
, "ppc64",
2011 ARG_CAPS_VER
, "latest",
2012 ARG_FLAGS
, FLAG_EXPECT_FAILURE
,
2013 ARG_QEMU_CAPS_DEL
, QEMU_CAPS_NEC_USB_XHCI
, QEMU_CAPS_PCI_OHCI
, QEMU_CAPS_DEVICE_QEMU_XHCI
, QEMU_CAPS_LAST
,
2016 DO_TEST_FULL("usb-controller-default-fallback-mac99", ".ppc64-latest",
2017 ARG_CAPS_ARCH
, "ppc64",
2018 ARG_CAPS_VER
, "latest",
2019 ARG_QEMU_CAPS_DEL
, QEMU_CAPS_NEC_USB_XHCI
, QEMU_CAPS_DEVICE_QEMU_XHCI
, QEMU_CAPS_LAST
,
2021 DO_TEST_FULL("usb-controller-default-unavailable-mac99", ".ppc64-latest",
2022 ARG_CAPS_ARCH
, "ppc64",
2023 ARG_CAPS_VER
, "latest",
2024 ARG_FLAGS
, FLAG_EXPECT_FAILURE
,
2025 ARG_QEMU_CAPS_DEL
, QEMU_CAPS_NEC_USB_XHCI
, QEMU_CAPS_PCI_OHCI
, QEMU_CAPS_DEVICE_QEMU_XHCI
, QEMU_CAPS_LAST
,
2028 DO_TEST_FULL("usb-controller-default-fallback-mac99ppc", ".ppc-latest",
2029 ARG_CAPS_ARCH
, "ppc",
2030 ARG_CAPS_VER
, "latest",
2031 ARG_QEMU_CAPS_DEL
, QEMU_CAPS_NEC_USB_XHCI
, QEMU_CAPS_DEVICE_QEMU_XHCI
, QEMU_CAPS_PIIX3_USB_UHCI
, QEMU_CAPS_LAST
,
2033 DO_TEST_FULL("usb-controller-default-unavailable-mac99ppc", ".ppc-latest",
2034 ARG_CAPS_ARCH
, "ppc",
2035 ARG_CAPS_VER
, "latest",
2036 ARG_FLAGS
, FLAG_EXPECT_FAILURE
,
2037 ARG_QEMU_CAPS_DEL
, QEMU_CAPS_NEC_USB_XHCI
, QEMU_CAPS_PCI_OHCI
, QEMU_CAPS_DEVICE_QEMU_XHCI
, QEMU_CAPS_PIIX3_USB_UHCI
, QEMU_CAPS_LAST
,
2040 DO_TEST_FULL("usb-controller-default-fallback-powernv9", ".ppc64-latest",
2041 ARG_CAPS_ARCH
, "ppc64",
2042 ARG_CAPS_VER
, "latest",
2043 ARG_QEMU_CAPS_DEL
, QEMU_CAPS_NEC_USB_XHCI
, QEMU_CAPS_DEVICE_QEMU_XHCI
, QEMU_CAPS_LAST
,
2045 DO_TEST_FULL("usb-controller-default-unavailable-powernv9", ".ppc64-latest",
2046 ARG_CAPS_ARCH
, "ppc64",
2047 ARG_CAPS_VER
, "latest",
2048 ARG_FLAGS
, FLAG_EXPECT_FAILURE
,
2049 ARG_QEMU_CAPS_DEL
, QEMU_CAPS_NEC_USB_XHCI
, QEMU_CAPS_PCI_OHCI
, QEMU_CAPS_DEVICE_QEMU_XHCI
, QEMU_CAPS_LAST
,
2051 DO_TEST_CAPS_LATEST("usb-none");
2053 DO_TEST_CAPS_LATEST("usb-controller-piix3");
2054 DO_TEST_CAPS_LATEST("usb-controller-ich9-ehci-addr");
2055 DO_TEST_CAPS_LATEST("usb-controller-ich9-companion");
2056 DO_TEST_CAPS_LATEST_PARSE_ERROR("usb-controller-ich9-no-companion");
2057 DO_TEST_CAPS_LATEST("usb-controller-ich9-autoassign");
2058 DO_TEST_CAPS_LATEST("usb1-usb2");
2060 DO_TEST_CAPS_LATEST("usb-controller-nec-xhci");
2061 DO_TEST_FULL("usb-controller-nec-xhci-unavailable", ".x86_64-latest",
2062 ARG_CAPS_ARCH
, "x86_64",
2063 ARG_CAPS_VER
, "latest",
2064 ARG_FLAGS
, FLAG_EXPECT_FAILURE
,
2065 ARG_QEMU_CAPS_DEL
, QEMU_CAPS_NEC_USB_XHCI
, QEMU_CAPS_LAST
,
2067 DO_TEST_CAPS_LATEST("usb-controller-nex-xhci-autoassign");
2068 DO_TEST_CAPS_LATEST_PARSE_ERROR("usb-controller-nec-xhci-limit");
2069 DO_TEST_CAPS_LATEST("usb-controller-qemu-xhci");
2070 DO_TEST_CAPS_LATEST_PARSE_ERROR("usb-controller-qemu-xhci-limit");
2072 DO_TEST_CAPS_LATEST("input-usbmouse-addr");
2073 DO_TEST_CAPS_LATEST("usb-hub");
2074 DO_TEST_CAPS_LATEST("usb-hub-autoadd");
2075 DO_TEST_CAPS_LATEST("usb-hub-autoadd-deluxe");
2076 DO_TEST_CAPS_LATEST_PARSE_ERROR("usb-hub-conflict");
2077 DO_TEST_CAPS_LATEST_PARSE_ERROR("usb-hub-nonexistent");
2078 DO_TEST_CAPS_LATEST("usb-port-missing");
2079 DO_TEST_CAPS_LATEST_FAILURE("usb-bus-missing");
2080 DO_TEST_CAPS_LATEST("usb-ports");
2081 DO_TEST_CAPS_LATEST_PARSE_ERROR("usb-ports-out-of-range");
2082 DO_TEST_CAPS_LATEST("usb-port-autoassign");
2083 DO_TEST_CAPS_LATEST("usb-redir");
2084 DO_TEST_CAPS_LATEST("usb-redir-boot");
2085 DO_TEST_CAPS_LATEST("usb-redir-filter");
2086 DO_TEST_CAPS_LATEST("usb-redir-filter-version");
2087 DO_TEST_CAPS_LATEST("usb-redir-unix");
2088 DO_TEST_CAPS_LATEST_PARSE_ERROR("usb-none-other");
2089 DO_TEST_CAPS_LATEST_PARSE_ERROR("usb-none-hub");
2090 DO_TEST_CAPS_LATEST_PARSE_ERROR("usb-none-usbtablet");
2091 DO_TEST_CAPS_LATEST("usb-long-port-path");
2093 DO_TEST_CAPS_LATEST("smbios");
2094 DO_TEST_CAPS_LATEST_PARSE_ERROR("smbios-date");
2095 DO_TEST_CAPS_LATEST_PARSE_ERROR("smbios-uuid-match");
2096 DO_TEST_CAPS_LATEST("smbios-type-fwcfg");
2098 DO_TEST_CAPS_LATEST("watchdog");
2099 DO_TEST_CAPS_LATEST("watchdog-device");
2100 DO_TEST_CAPS_LATEST("watchdog-dump");
2101 DO_TEST_CAPS_LATEST("watchdog-injectnmi");
2102 DO_TEST_CAPS_LATEST("watchdog-q35-multiple");
2103 DO_TEST_CAPS_ARCH_LATEST("watchdog-diag288", "s390x");
2105 DO_TEST_CAPS_LATEST("balloon-device");
2106 DO_TEST_CAPS_LATEST("balloon-device-deflate");
2107 DO_TEST_CAPS_ARCH_LATEST("balloon-ccw-deflate", "s390x");
2108 DO_TEST_CAPS_ARCH_LATEST("balloon-mmio-deflate", "aarch64");
2109 DO_TEST_CAPS_LATEST("balloon-device-deflate-off");
2110 DO_TEST_CAPS_LATEST("balloon-device-auto");
2111 DO_TEST_CAPS_LATEST("balloon-device-period");
2113 DO_TEST_CAPS_LATEST("sound-device");
2114 DO_TEST_CAPS_LATEST("fs9p");
2115 DO_TEST_CAPS_ARCH_LATEST("fs9p-ccw", "s390x");
2117 DO_TEST_CAPS_LATEST("hostdev-usb-address");
2118 DO_TEST_CAPS_LATEST("hostdev-usb-address-device");
2119 DO_TEST_CAPS_LATEST("hostdev-usb-address-device-boot");
2120 DO_TEST_CAPS_LATEST_PARSE_ERROR("hostdev-usb-duplicate");
2121 DO_TEST_CAPS_LATEST("hostdev-pci-address");
2122 DO_TEST_CAPS_LATEST("hostdev-pci-address-device");
2123 DO_TEST_CAPS_LATEST_PARSE_ERROR("hostdev-pci-duplicate");
2124 DO_TEST_CAPS_LATEST("hostdev-pci-display-ramfb");
2125 DO_TEST_CAPS_LATEST("hostdev-vfio");
2126 DO_TEST_CAPS_LATEST("hostdev-vfio-multidomain");
2127 DO_TEST_CAPS_LATEST("hostdev-mdev-precreated");
2128 DO_TEST_CAPS_LATEST_PARSE_ERROR("hostdev-mdev-src-address-invalid");
2129 DO_TEST_CAPS_LATEST_PARSE_ERROR("hostdev-mdev-invalid-target-address");
2130 DO_TEST_CAPS_LATEST_PARSE_ERROR("hostdev-mdev-duplicate");
2131 DO_TEST_CAPS_LATEST("hostdev-mdev-display-spice-opengl");
2132 DO_TEST_CAPS_LATEST("hostdev-mdev-display-spice-egl-headless");
2133 DO_TEST_CAPS_LATEST("hostdev-mdev-display-vnc");
2134 DO_TEST_CAPS_LATEST("hostdev-mdev-display-vnc-egl-headless");
2135 DO_TEST_CAPS_LATEST_PARSE_ERROR("hostdev-mdev-display-missing-graphics");
2136 DO_TEST_CAPS_LATEST("hostdev-mdev-display-ramfb");
2137 DO_TEST_CAPS_LATEST_PARSE_ERROR("hostdev-mdev-display-ramfb-multiple");
2138 DO_TEST_CAPS_LATEST_PARSE_ERROR("hostdev-vfio-zpci-wrong-arch");
2139 DO_TEST_CAPS_ARCH_LATEST("hostdev-vfio-zpci", "s390x");
2140 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("hostdev-vfio-zpci-invalid-uid-valid-fid", "s390x");
2141 DO_TEST_CAPS_ARCH_LATEST("hostdev-vfio-zpci-multidomain-many", "s390x");
2142 DO_TEST_CAPS_ARCH_LATEST("hostdev-vfio-zpci-autogenerate", "s390x");
2143 DO_TEST_CAPS_ARCH_LATEST("hostdev-vfio-zpci-autogenerate-uids", "s390x");
2144 DO_TEST_CAPS_ARCH_LATEST("hostdev-vfio-zpci-autogenerate-fids", "s390x");
2145 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("hostdev-vfio-zpci-uid-set-zero", "s390x");
2146 DO_TEST_CAPS_ARCH_LATEST("hostdev-vfio-zpci-boundaries", "s390x");
2147 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("hostdev-vfio-zpci-duplicate", "s390x");
2148 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("hostdev-vfio-zpci-set-zero", "s390x");
2149 DO_TEST_CAPS_ARCH_LATEST("hostdev-vfio-zpci-ccw-memballoon", "s390x");
2151 DO_TEST_CAPS_LATEST("pci-rom");
2152 DO_TEST_CAPS_LATEST("pci-rom-disabled");
2153 DO_TEST_CAPS_LATEST("pci-rom-disabled-invalid");
2155 DO_TEST_CAPS_ARCH_LATEST("hostdev-subsys-mdev-vfio-ccw", "s390x");
2156 DO_TEST_CAPS_ARCH_LATEST("hostdev-subsys-mdev-vfio-ccw-boot", "s390x");
2157 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("hostdev-subsys-mdev-vfio-ccw-duplicate-address", "s390x");
2158 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("hostdev-subsys-mdev-vfio-ccw-invalid-address", "s390x");
2160 DO_TEST_CAPS_ARCH_LATEST("hostdev-subsys-mdev-vfio-ap", "s390x");
2161 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("hostdev-subsys-mdev-vfio-ap-boot-fail", "s390x");
2163 DO_TEST_CAPS_ARCH_LATEST_FULL("restore-v2", "x86_64",
2164 ARG_MIGRATE_FROM
, "exec:cat",
2166 DO_TEST_CAPS_ARCH_LATEST_FULL("restore-v2-fd", "x86_64",
2167 ARG_MIGRATE_FROM
, "stdio",
2169 DO_TEST_CAPS_ARCH_LATEST_FULL("restore-v2-fd", "x86_64",
2170 ARG_MIGRATE_FROM
, "fd:7",
2172 ARG_FLAGS
, FLAG_ALLOW_DUPLICATE_OUTPUT
);
2173 DO_TEST_CAPS_ARCH_LATEST_FULL("migrate", "x86_64",
2174 ARG_MIGRATE_FROM
, "tcp:10.0.0.1:5000");
2175 DO_TEST_CAPS_ARCH_LATEST_FULL("migrate-numa-unaligned", "x86_64",
2176 ARG_MIGRATE_FROM
, "stdio",
2179 DO_TEST_CAPS_LATEST("qemu-ns");
2180 DO_TEST_CAPS_LATEST("qemu-ns-no-env");
2181 DO_TEST_CAPS_LATEST("qemu-ns-alt");
2183 DO_TEST_CAPS_LATEST("iothreads-ids");
2184 DO_TEST_CAPS_LATEST("iothreads-ids-partial");
2185 DO_TEST_CAPS_LATEST("iothreads-ids-pool-sizes");
2186 DO_TEST_CAPS_LATEST("iothreads-disk");
2187 DO_TEST_CAPS_VER("iothreads-virtio-scsi-pci", "5.2.0");
2188 DO_TEST_CAPS_LATEST("iothreads-virtio-scsi-pci");
2189 DO_TEST_CAPS_ARCH_LATEST("iothreads-virtio-scsi-ccw", "s390x");
2191 DO_TEST_CAPS_LATEST("cpu-topology1");
2192 DO_TEST_CAPS_LATEST("cpu-topology2");
2193 DO_TEST_CAPS_LATEST("cpu-topology3");
2194 DO_TEST_CAPS_LATEST("cpu-topology4");
2195 DO_TEST_CAPS_ARCH_LATEST("cpu-topology5", "aarch64");
2197 DO_TEST_CAPS_ARCH_LATEST_FULL("cpu-minimum1", "x86_64", ARG_CAPS_HOST_CPU_MODEL
, QEMU_CPU_DEF_HASWELL
);
2198 DO_TEST_CAPS_ARCH_LATEST_FULL("cpu-minimum2", "x86_64", ARG_CAPS_HOST_CPU_MODEL
, QEMU_CPU_DEF_HASWELL
);
2199 DO_TEST_CAPS_ARCH_LATEST_FULL("cpu-exact1", "x86_64", ARG_CAPS_HOST_CPU_MODEL
, QEMU_CPU_DEF_HASWELL
);
2200 DO_TEST_CAPS_ARCH_LATEST_FULL("cpu-exact2", "x86_64", ARG_CAPS_HOST_CPU_MODEL
, QEMU_CPU_DEF_HASWELL
);
2201 DO_TEST_CAPS_ARCH_LATEST_FULL("cpu-exact2-nofallback", "x86_64", ARG_CAPS_HOST_CPU_MODEL
, QEMU_CPU_DEF_HASWELL
);
2202 DO_TEST_CAPS_ARCH_LATEST_FULL("cpu-strict1", "x86_64", ARG_CAPS_HOST_CPU_MODEL
, QEMU_CPU_DEF_HASWELL
);
2203 DO_TEST_CAPS_ARCH_LATEST_FULL("cpu-no-removed-features", "x86_64", ARG_CAPS_HOST_CPU_MODEL
, QEMU_CPU_DEF_HASWELL
);
2205 /* EPYC-Milan became available in qemu-6.0, use it for the fallback tests */
2206 DO_TEST_CAPS_VER_FAILURE("cpu-nofallback", "5.2.0");
2207 DO_TEST_CAPS_VER("cpu-nofallback", "8.0.0");
2208 DO_TEST_CAPS_VER("cpu-fallback", "5.2.0");
2209 DO_TEST_CAPS_VER("cpu-fallback", "8.0.0");
2211 DO_TEST_CAPS_LATEST("cpu-numa1");
2212 DO_TEST_CAPS_LATEST("cpu-numa-memory-oldstyle");
2213 DO_TEST_CAPS_LATEST("cpu-numa2");
2214 DO_TEST_CAPS_LATEST("cpu-numa-no-memory-element");
2215 DO_TEST_CAPS_LATEST_PARSE_ERROR("cpu-numa3");
2216 DO_TEST_CAPS_LATEST("cpu-numa-disjoint");
2217 DO_TEST_CAPS_LATEST("cpu-numa-memshared");
2218 DO_TEST_CAPS_LATEST_PARSE_ERROR("cpu-numa-distance-nonexistent-sibling");
2220 /* host-model cpu expansion depends on the cpu reported by qemu and thus
2221 * we invoke it for all real capability dumps we have */
2222 DO_TEST_CAPS_VER("cpu-host-model-kvm", "5.2.0");
2223 DO_TEST_CAPS_VER("cpu-host-model-kvm", "6.0.0");
2224 DO_TEST_CAPS_VER("cpu-host-model-kvm", "6.1.0");
2225 DO_TEST_CAPS_VER("cpu-host-model-kvm", "6.2.0");
2226 DO_TEST_CAPS_VER("cpu-host-model-kvm", "7.0.0");
2227 DO_TEST_CAPS_VER("cpu-host-model-kvm", "7.1.0");
2228 DO_TEST_CAPS_VER("cpu-host-model-kvm", "7.2.0");
2229 DO_TEST_CAPS_VER("cpu-host-model-kvm", "8.0.0");
2230 DO_TEST_CAPS_VER("cpu-host-model-kvm", "8.1.0");
2232 DO_TEST_CAPS_VER("cpu-host-model-tcg", "5.2.0");
2233 DO_TEST_CAPS_VER("cpu-host-model-tcg", "6.0.0");
2234 DO_TEST_CAPS_VER("cpu-host-model-tcg", "6.1.0");
2235 DO_TEST_CAPS_VER("cpu-host-model-tcg", "6.2.0");
2236 DO_TEST_CAPS_VER("cpu-host-model-tcg", "7.0.0");
2237 DO_TEST_CAPS_VER("cpu-host-model-tcg", "7.1.0");
2238 DO_TEST_CAPS_VER("cpu-host-model-tcg", "7.2.0");
2239 DO_TEST_CAPS_VER("cpu-host-model-tcg", "8.0.0");
2240 DO_TEST_CAPS_VER("cpu-host-model-tcg", "8.1.0");
2242 DO_TEST_CAPS_VER("cpu-host-model-fallback-kvm", "5.2.0");
2243 DO_TEST_CAPS_VER("cpu-host-model-fallback-kvm", "6.0.0");
2244 DO_TEST_CAPS_VER("cpu-host-model-fallback-kvm", "6.1.0");
2245 DO_TEST_CAPS_VER("cpu-host-model-fallback-kvm", "6.2.0");
2246 DO_TEST_CAPS_VER("cpu-host-model-fallback-kvm", "7.0.0");
2247 DO_TEST_CAPS_VER("cpu-host-model-fallback-kvm", "7.1.0");
2248 DO_TEST_CAPS_VER("cpu-host-model-fallback-kvm", "7.2.0");
2249 DO_TEST_CAPS_VER("cpu-host-model-fallback-kvm", "8.0.0");
2250 DO_TEST_CAPS_VER("cpu-host-model-fallback-kvm", "8.1.0");
2252 DO_TEST_CAPS_VER("cpu-host-model-fallback-tcg", "5.2.0");
2253 DO_TEST_CAPS_VER("cpu-host-model-fallback-tcg", "6.0.0");
2254 DO_TEST_CAPS_VER("cpu-host-model-fallback-tcg", "6.1.0");
2255 DO_TEST_CAPS_VER("cpu-host-model-fallback-tcg", "6.2.0");
2256 DO_TEST_CAPS_VER("cpu-host-model-fallback-tcg", "7.0.0");
2257 DO_TEST_CAPS_VER("cpu-host-model-fallback-tcg", "7.1.0");
2258 DO_TEST_CAPS_VER("cpu-host-model-fallback-tcg", "7.2.0");
2259 DO_TEST_CAPS_VER("cpu-host-model-fallback-tcg", "8.0.0");
2260 DO_TEST_CAPS_VER("cpu-host-model-fallback-tcg", "8.1.0");
2262 DO_TEST_CAPS_VER("cpu-host-model-nofallback-kvm", "5.2.0");
2263 DO_TEST_CAPS_VER("cpu-host-model-nofallback-kvm", "6.0.0");
2264 DO_TEST_CAPS_VER("cpu-host-model-nofallback-kvm", "6.1.0");
2265 DO_TEST_CAPS_VER("cpu-host-model-nofallback-kvm", "6.2.0");
2266 DO_TEST_CAPS_VER("cpu-host-model-nofallback-kvm", "7.0.0");
2267 DO_TEST_CAPS_VER("cpu-host-model-nofallback-kvm", "7.1.0");
2268 DO_TEST_CAPS_VER("cpu-host-model-nofallback-kvm", "7.2.0");
2269 DO_TEST_CAPS_VER("cpu-host-model-nofallback-kvm", "8.0.0");
2270 DO_TEST_CAPS_VER("cpu-host-model-nofallback-kvm", "8.1.0");
2272 DO_TEST_CAPS_VER("cpu-host-model-nofallback-tcg", "5.2.0");
2273 DO_TEST_CAPS_VER("cpu-host-model-nofallback-tcg", "6.0.0");
2274 DO_TEST_CAPS_VER("cpu-host-model-nofallback-tcg", "6.1.0");
2275 DO_TEST_CAPS_VER("cpu-host-model-nofallback-tcg", "6.2.0");
2276 DO_TEST_CAPS_VER("cpu-host-model-nofallback-tcg", "7.0.0");
2277 DO_TEST_CAPS_VER("cpu-host-model-nofallback-tcg", "7.1.0");
2278 DO_TEST_CAPS_VER("cpu-host-model-nofallback-tcg", "7.2.0");
2279 DO_TEST_CAPS_VER("cpu-host-model-nofallback-tcg", "8.0.0");
2280 DO_TEST_CAPS_VER("cpu-host-model-nofallback-tcg", "8.1.0");
2282 /* For this specific test we accept the increased likelihood of changes
2283 * if qemu updates the CPU model */
2284 DO_TEST_CAPS_LATEST("cpu-host-model-kvm");
2285 DO_TEST_CAPS_LATEST("cpu-host-model-fallback-kvm");
2286 DO_TEST_CAPS_LATEST("cpu-host-model-nofallback-kvm");
2288 DO_TEST_CAPS_LATEST("cpu-host-model-tcg");
2289 DO_TEST_CAPS_LATEST("cpu-host-model-fallback-tcg");
2290 DO_TEST_CAPS_LATEST("cpu-host-model-nofallback-tcg");
2292 /* this test case uses 'cpu="host-model"', run it with Haswell host cpu to prevent test case churn */
2293 DO_TEST_CAPS_ARCH_LATEST_FULL("cpu-host-model-vendor", "x86_64", ARG_CAPS_HOST_CPU_MODEL
, QEMU_CPU_DEF_HASWELL
);
2294 DO_TEST_CAPS_LATEST("cpu-host-passthrough");
2295 DO_TEST_CAPS_LATEST_FAILURE("cpu-qemu-host-passthrough");
2297 DO_TEST_CAPS_ARCH_LATEST("cpu-s390-zEC12", "s390x");
2298 DO_TEST_CAPS_ARCH_LATEST("cpu-s390-features", "s390x");
2300 DO_TEST_CAPS_ARCH_VER_FAILURE("cpu-model-deprecated-features-off", "s390x", "8.2.0");
2301 DO_TEST_CAPS_ARCH_LATEST("cpu-model-deprecated-features-off", "s390x");
2303 DO_TEST_CAPS_ARCH_LATEST_FULL("cpu-Haswell", "x86_64", ARG_CAPS_HOST_CPU_MODEL
, QEMU_CPU_DEF_HASWELL
);
2304 DO_TEST_CAPS_ARCH_LATEST_FULL("cpu-Haswell2", "x86_64", ARG_CAPS_HOST_CPU_MODEL
, QEMU_CPU_DEF_HASWELL
);
2305 DO_TEST_CAPS_ARCH_LATEST_FULL("cpu-Haswell3", "x86_64", ARG_CAPS_HOST_CPU_MODEL
, QEMU_CPU_DEF_HASWELL
);
2306 DO_TEST_CAPS_ARCH_LATEST_FULL("cpu-Haswell-noTSX", "x86_64", ARG_CAPS_HOST_CPU_MODEL
, QEMU_CPU_DEF_HASWELL
);
2307 DO_TEST_CAPS_ARCH_LATEST_FULL("cpu-host-model-cmt", "x86_64", ARG_CAPS_HOST_CPU_MODEL
, QEMU_CPU_DEF_HASWELL
);
2308 DO_TEST_CAPS_ARCH_LATEST_FULL("cpu-tsc-frequency", "x86_64", ARG_CAPS_HOST_CPU_MODEL
, QEMU_CPU_DEF_HASWELL
);
2310 DO_TEST_CAPS_LATEST("cpu-translation");
2312 DO_TEST_CAPS_LATEST("memtune");
2313 DO_TEST_CAPS_LATEST("memtune-unlimited");
2314 DO_TEST_CAPS_LATEST("blkiotune");
2315 DO_TEST_CAPS_LATEST("blkiotune-device");
2316 DO_TEST_CAPS_LATEST("cputune");
2317 DO_TEST_CAPS_LATEST("cputune-zero-shares");
2318 DO_TEST_CAPS_LATEST_PARSE_ERROR("cputune-iothreadsched-toomuch");
2319 DO_TEST_CAPS_LATEST_PARSE_ERROR("cputune-vcpusched-overlap");
2320 DO_TEST_CAPS_LATEST("cputune-numatune");
2321 DO_TEST_CAPS_LATEST("vcpu-placement-static");
2322 DO_TEST_CAPS_LATEST("cputune-cpuset-big-id");
2323 DO_TEST_CAPS_LATEST_PARSE_ERROR("cpuset-invalid");
2325 DO_TEST_CAPS_LATEST_PARSE_ERROR("numatune-memory-invalid-nodeset");
2326 DO_TEST_CAPS_VER("numatune-memnode", "5.2.0");
2327 DO_TEST_CAPS_LATEST("numatune-memnode");
2328 DO_TEST_CAPS_LATEST_PARSE_ERROR("numatune-memnode-invalid-mode");
2329 DO_TEST_CAPS_LATEST("numatune-memnode-restrictive-mode");
2330 DO_TEST_CAPS_LATEST_PARSE_ERROR("numatune-memnode-restrictive-mode-err-mixed");
2331 DO_TEST_CAPS_LATEST("numatune-system-memory");
2333 DO_TEST_CAPS_LATEST("numatune-memnode-no-memory");
2335 DO_TEST_CAPS_LATEST("numatune-distances");
2336 DO_TEST_CAPS_LATEST("numatune-no-vcpu");
2337 DO_TEST_CAPS_LATEST("numatune-hmat");
2338 DO_TEST_CAPS_LATEST("numatune-hmat-none");
2340 DO_TEST_CAPS_LATEST("numatune-auto-nodeset-invalid");
2341 DO_TEST_CAPS_LATEST("numatune-auto-prefer");
2342 DO_TEST_CAPS_LATEST_FAILURE("numatune-static-nodeset-exceed-hostnode");
2343 DO_TEST_CAPS_LATEST_PARSE_ERROR("numatune-memnode-nocpu");
2344 DO_TEST_CAPS_LATEST_PARSE_ERROR("numatune-memnodes-problematic");
2345 DO_TEST_CAPS_LATEST_FAILURE("numatune-memnode-unavailable-strict");
2346 DO_TEST_CAPS_LATEST_FAILURE("numatune-memnode-unavailable-restrictive");
2348 DO_TEST_CAPS_LATEST("numad");
2349 DO_TEST_CAPS_LATEST("numad-auto-vcpu-static-numatune");
2350 DO_TEST_CAPS_LATEST_PARSE_ERROR("numad-auto-vcpu-static-numatune-no-nodeset");
2351 DO_TEST_CAPS_LATEST("numad-auto-memory-vcpu-cpuset");
2352 DO_TEST_CAPS_LATEST("numad-auto-memory-vcpu-no-cpuset-and-placement");
2353 DO_TEST_CAPS_LATEST("numad-static-memory-auto-vcpu");
2354 DO_TEST_CAPS_LATEST("blkdeviotune");
2355 DO_TEST_CAPS_LATEST("blkdeviotune-max");
2356 DO_TEST_CAPS_LATEST("blkdeviotune-group-num");
2357 DO_TEST_CAPS_LATEST("blkdeviotune-max-length");
2359 DO_TEST_CAPS_LATEST("multifunction-pci-device");
2361 DO_TEST_CAPS_LATEST("seclabel-dynamic");
2362 DO_TEST_CAPS_LATEST("seclabel-dynamic-baselabel");
2363 DO_TEST_CAPS_LATEST("seclabel-dynamic-override");
2364 DO_TEST_CAPS_LATEST("seclabel-dynamic-labelskip");
2365 DO_TEST_CAPS_LATEST("seclabel-dynamic-relabel");
2366 DO_TEST_CAPS_LATEST("seclabel-static");
2367 DO_TEST_CAPS_LATEST("seclabel-static-relabel");
2368 DO_TEST_CAPS_LATEST("seclabel-static-labelskip");
2369 DO_TEST_CAPS_LATEST("seclabel-none");
2370 DO_TEST_CAPS_LATEST("seclabel-dac-none");
2371 DO_TEST_CAPS_LATEST_PARSE_ERROR("seclabel-multiple");
2372 DO_TEST_CAPS_LATEST_PARSE_ERROR("seclabel-device-duplicates");
2373 DO_TEST_CAPS_LATEST_PARSE_ERROR("seclabel-device-relabel-invalid");
2375 DO_TEST_CAPS_LATEST_PPC64("pseries-basic");
2376 DO_TEST_CAPS_LATEST_PPC64("pseries-vio");
2377 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("pseries-vio-address-clash", "ppc64");
2378 DO_TEST_CAPS_LATEST_PPC64("pseries-usb-default");
2379 DO_TEST_CAPS_LATEST_PPC64("pseries-usb-multi");
2380 DO_TEST_CAPS_LATEST_PPC64("pseries-vio-user-assigned");
2381 DO_TEST_CAPS_LATEST_PPC64("pseries-nvram");
2382 DO_TEST_CAPS_LATEST_PPC64("pseries-usb-kbd");
2383 DO_TEST_CAPS_LATEST_PPC64("pseries-cpu-exact");
2384 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("pseries-no-parallel", "ppc64");
2385 DO_TEST_CAPS_LATEST_PPC64("pseries-cpu-le");
2387 qemuTestSetHostArch(&driver
, VIR_ARCH_PPC64
);
2388 DO_TEST_CAPS_LATEST_PPC64_HOSTCPU("pseries-cpu-compat",
2389 QEMU_CPU_DEF_POWER9
);
2390 DO_TEST_CAPS_LATEST_PPC64_HOSTCPU_FAILURE("pseries-cpu-compat-power9",
2391 QEMU_CPU_DEF_POWER8
);
2392 DO_TEST_CAPS_LATEST_PPC64_HOSTCPU("pseries-cpu-compat-power9",
2393 QEMU_CPU_DEF_POWER9
);
2394 DO_TEST_CAPS_LATEST_PPC64_HOSTCPU_FAILURE("pseries-cpu-compat-power10",
2395 QEMU_CPU_DEF_POWER9
);
2396 DO_TEST_CAPS_LATEST_PPC64_HOSTCPU("pseries-cpu-compat-power10",
2397 QEMU_CPU_DEF_POWER10
);
2399 qemuTestSetHostArch(&driver
, VIR_ARCH_NONE
);
2401 DO_TEST_CAPS_LATEST_PPC64("pseries-panic-missing");
2402 DO_TEST_CAPS_LATEST_PPC64("pseries-panic-no-address");
2403 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("pseries-panic-address", "ppc64");
2405 DO_TEST_CAPS_LATEST_PPC64("pseries-phb-simple");
2406 DO_TEST_CAPS_LATEST_PPC64("pseries-phb-default-missing");
2407 DO_TEST_CAPS_LATEST_PPC64("pseries-phb-numa-node");
2408 DO_TEST_CAPS_LATEST_PPC64("pseries-phb-user-alias");
2409 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("pseries-default-phb-numa-node",
2411 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("pseries-phb-invalid-target-index-1", "ppc64");
2412 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("pseries-phb-invalid-target-index-2", "ppc64");
2413 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("pseries-phb-invalid-target-index-3", "ppc64");
2415 DO_TEST_CAPS_LATEST_PPC64("pseries-many-devices");
2416 DO_TEST_CAPS_LATEST_PPC64("pseries-many-buses-1");
2417 DO_TEST_CAPS_LATEST_PPC64("pseries-many-buses-2");
2418 DO_TEST_CAPS_LATEST_PPC64("pseries-hostdevs-1");
2419 DO_TEST_CAPS_LATEST_PPC64("pseries-hostdevs-2");
2420 DO_TEST_CAPS_LATEST_PPC64("pseries-hostdevs-3");
2422 DO_TEST_CAPS_LATEST_PPC64("pseries-features");
2424 DO_TEST_CAPS_LATEST_PARSE_ERROR("pseries-features-invalid-machine");
2426 DO_TEST_CAPS_LATEST_PPC64("pseries-serial-native");
2427 DO_TEST_CAPS_LATEST_PPC64("pseries-serial+console-native");
2428 DO_TEST_CAPS_LATEST_PPC64("pseries-serial-compat");
2429 DO_TEST_CAPS_LATEST_PPC64("pseries-serial-pci");
2430 DO_TEST_CAPS_LATEST_PPC64("pseries-serial-usb");
2431 DO_TEST_CAPS_LATEST_PPC64("pseries-console-native");
2432 DO_TEST_CAPS_LATEST_PPC64("pseries-console-virtio");
2433 DO_TEST_CAPS_LATEST_PARSE_ERROR("pseries-serial-invalid-machine");
2434 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("pseries-spaprvio-invalid", "ppc64");
2436 DO_TEST_CAPS_ARCH_LATEST("mach-virt-serial-native", "aarch64");
2437 DO_TEST_CAPS_ARCH_LATEST("mach-virt-serial+console-native", "aarch64");
2438 DO_TEST_CAPS_ARCH_LATEST("mach-virt-serial-compat", "aarch64");
2439 DO_TEST_CAPS_ARCH_LATEST("mach-virt-serial-pci", "aarch64");
2440 DO_TEST_CAPS_ARCH_LATEST("mach-virt-serial-usb", "aarch64");
2441 DO_TEST_CAPS_ARCH_LATEST("mach-virt-console-native", "aarch64");
2442 DO_TEST_CAPS_ARCH_LATEST("mach-virt-console-virtio", "aarch64");
2443 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("mach-virt-serial-invalid-machine", "x86_64");
2445 DO_TEST_CAPS_LATEST("video-device-pciaddr-default");
2446 DO_TEST_CAPS_LATEST("video-vga-device");
2447 DO_TEST_CAPS_LATEST("video-vga-device-vgamem");
2448 DO_TEST_CAPS_LATEST("video-qxl-device");
2449 DO_TEST_CAPS_LATEST("video-qxl-device-vgamem");
2450 DO_TEST_CAPS_LATEST("video-qxl-device-vram64");
2451 DO_TEST_CAPS_LATEST("video-qxl-sec-device");
2452 DO_TEST_CAPS_LATEST("video-qxl-sec-device-vgamem");
2453 DO_TEST_CAPS_LATEST("video-qxl-sec-device-vram64");
2454 DO_TEST_CAPS_LATEST("video-qxl-heads");
2455 DO_TEST_CAPS_LATEST("video-vga-qxl-heads");
2456 DO_TEST_CAPS_LATEST("video-qxl-noheads");
2457 DO_TEST_CAPS_LATEST("video-qxl-resolution");
2458 DO_TEST_CAPS_LATEST("video-virtio-gpu-device");
2459 DO_TEST_CAPS_LATEST("video-virtio-gpu-virgl");
2460 DO_TEST_CAPS_LATEST("video-virtio-gpu-spice-gl");
2461 DO_TEST_CAPS_LATEST("video-virtio-gpu-sdl-gl");
2462 DO_TEST_CAPS_LATEST("video-virtio-gpu-secondary");
2463 DO_TEST_CAPS_LATEST("video-virtio-vga");
2464 DO_TEST_CAPS_LATEST("video-virtio-blob-on");
2465 DO_TEST_CAPS_LATEST("video-virtio-blob-off");
2466 DO_TEST_CAPS_LATEST("video-virtio-vga-gpu-gl");
2467 DO_TEST_CAPS_LATEST("video-bochs-display-device");
2468 DO_TEST_CAPS_LATEST("video-ramfb-display-device");
2469 DO_TEST_CAPS_LATEST_PARSE_ERROR("video-ramfb-display-device-pci-address");
2470 DO_TEST_CAPS_LATEST("video-none-device");
2471 DO_TEST_CAPS_LATEST_PARSE_ERROR("video-invalid-multiple-devices");
2472 DO_TEST_CAPS_LATEST("default-video-type-x86_64");
2474 DO_TEST_CAPS_ARCH_LATEST("default-video-type-aarch64", "aarch64");
2475 DO_TEST_CAPS_ARCH_LATEST("default-video-type-loongarch64", "loongarch64");
2476 DO_TEST_CAPS_ARCH_LATEST("default-video-type-ppc64", "ppc64");
2477 DO_TEST_CAPS_ARCH_LATEST("default-video-type-riscv64", "riscv64");
2478 DO_TEST_CAPS_ARCH_LATEST("default-video-type-s390x", "s390x");
2480 DO_TEST_CAPS_LATEST_PARSE_ERROR("video-multiple-primaries");
2482 DO_TEST_CAPS_LATEST("virtio-rng-default");
2483 DO_TEST_CAPS_LATEST("virtio-rng-random");
2484 DO_TEST_CAPS_LATEST("virtio-rng-egd");
2485 DO_TEST_CAPS_VER("virtio-rng-builtin", "5.2.0");
2486 DO_TEST_CAPS_LATEST("virtio-rng-builtin");
2487 DO_TEST_CAPS_VER("virtio-rng-egd-unix", "5.2.0");
2488 DO_TEST_CAPS_LATEST("virtio-rng-egd-unix");
2489 DO_TEST_CAPS_LATEST("virtio-rng-multiple");
2490 DO_TEST_CAPS_LATEST_PARSE_ERROR("virtio-rng-egd-crash");
2491 DO_TEST_CAPS_ARCH_LATEST("virtio-rng-ccw", "s390x");
2493 DO_TEST_CAPS_ARCH_LATEST("s390-usb-none", "s390x");
2494 DO_TEST_CAPS_ARCH_LATEST("s390-usb-address", "s390x");
2495 DO_TEST_CAPS_ARCH_LATEST("s390-usb-model", "s390x");
2497 DO_TEST_CAPS_ARCH_LATEST("s390-panic-no-address", "s390x");
2498 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("s390-panic-address", "s390x");
2499 DO_TEST_CAPS_ARCH_LATEST("s390-panic-missing", "s390x");
2500 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("s390-no-parallel", "s390x");
2501 DO_TEST_CAPS_ARCH_LATEST("s390-serial", "s390x");
2502 DO_TEST_CAPS_ARCH_LATEST("s390-serial-2", "s390x");
2503 DO_TEST_CAPS_ARCH_LATEST("s390-serial-console", "s390x");
2505 DO_TEST_CAPS_ARCH_LATEST("ppc-dtb", "ppc");
2506 DO_TEST_CAPS_ARCH_LATEST("ppce500-serial", "ppc");
2508 DO_TEST_CAPS_LATEST("tpm-passthrough");
2509 DO_TEST_CAPS_LATEST("tpm-passthrough-crb");
2510 DO_TEST_CAPS_LATEST_PARSE_ERROR("tpm-no-backend-invalid");
2511 DO_TEST_CAPS_LATEST("tpm-emulator");
2512 DO_TEST_CAPS_LATEST("tpm-emulator-tpm2");
2513 DO_TEST_CAPS_LATEST("tpm-emulator-tpm2-enc");
2514 DO_TEST_CAPS_LATEST("tpm-emulator-tpm2-pstate");
2515 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("aarch64-tpm-wrong-model", "aarch64");
2516 DO_TEST_CAPS_LATEST("tpm-external");
2517 DO_TEST_CAPS_LATEST("tpm-emulator-crb-profile");
2519 g_setenv(TEST_TPM_ENV_VAR
, TPM_VER_2_0
, true);
2520 DO_TEST_CAPS_LATEST_PARSE_ERROR("tpm-emulator");
2521 g_setenv(TEST_TPM_ENV_VAR
, TPM_VER_1_2
, true);
2522 DO_TEST_CAPS_LATEST_PARSE_ERROR("tpm-emulator-tpm2");
2523 unsetenv(TEST_TPM_ENV_VAR
);
2525 DO_TEST_CAPS_LATEST_PARSE_ERROR("pci-domain-invalid");
2526 DO_TEST_CAPS_LATEST_PARSE_ERROR("pci-bus-invalid");
2527 DO_TEST_CAPS_LATEST_PARSE_ERROR("pci-slot-invalid");
2528 DO_TEST_CAPS_LATEST_PARSE_ERROR("pci-function-invalid");
2530 DO_TEST_CAPS_LATEST("pci-bridge");
2531 DO_TEST_CAPS_LATEST("pci-autoadd-addr");
2532 DO_TEST_CAPS_LATEST("pci-autoadd-idx");
2533 DO_TEST_CAPS_LATEST("pci-autofill-addr");
2534 DO_TEST_CAPS_LATEST("pci-many");
2535 DO_TEST_CAPS_LATEST("pci-bridge-many-disks");
2536 DO_TEST_CAPS_LATEST("pcie-root");
2537 DO_TEST_CAPS_LATEST("q35");
2538 DO_TEST_CAPS_LATEST_PARSE_ERROR("q35-dmi-bad-address1");
2539 DO_TEST_CAPS_LATEST_PARSE_ERROR("q35-dmi-bad-address2");
2540 DO_TEST_CAPS_LATEST("pc-i440fx-acpi-root-hotplug-disable");
2541 DO_TEST_CAPS_LATEST("pc-i440fx-acpi-root-hotplug-enable");
2542 DO_TEST_CAPS_LATEST("q35-usb2");
2543 DO_TEST_CAPS_LATEST("q35-usb2-multi");
2544 DO_TEST_CAPS_LATEST("q35-usb2-reorder");
2546 DO_TEST_CAPS_LATEST("q35-pcie");
2547 /* same as q35-pcie, but all PCI controllers are added automatically */
2548 DO_TEST_CAPS_LATEST("q35-pcie-autoadd");
2549 DO_TEST_CAPS_LATEST("q35-default-devices-only");
2550 DO_TEST_CAPS_LATEST("q35-multifunction");
2551 DO_TEST_CAPS_LATEST("q35-virt-manager-basic");
2553 /* Test automatic and manual setting of pcie-root-port attributes */
2554 DO_TEST_CAPS_LATEST("pcie-root-port");
2556 /* Make sure the default model for PCIe Root Ports is picked correctly
2557 * based on QEMU binary capabilities. We use x86/q35 for the test, but
2558 * any PCIe machine type (such as aarch64/virt) will behave the same */
2559 DO_TEST_CAPS_LATEST("pcie-root-port-model-generic");
2560 DO_TEST_CAPS_LATEST("pcie-root-port-model-ioh3420");
2561 DO_TEST_CAPS_LATEST("pcie-root-port-nohotplug");
2563 DO_TEST_CAPS_LATEST("autoindex");
2564 /* Make sure the user can always override libvirt's default device
2565 * placement policy by providing an explicit PCI address */
2566 DO_TEST_CAPS_LATEST("q35-pci-force-address");
2568 DO_TEST_CAPS_LATEST_PARSE_ERROR("q35-wrong-root");
2569 DO_TEST_CAPS_LATEST_PARSE_ERROR("440fx-wrong-root");
2570 DO_TEST_CAPS_LATEST_PARSE_ERROR("440fx-ide-address-conflict");
2572 DO_TEST_CAPS_LATEST_PARSE_ERROR("pcie-root-port-too-many");
2574 DO_TEST_CAPS_LATEST("pcie-switch-upstream-port");
2575 DO_TEST_CAPS_LATEST("pcie-switch-downstream-port");
2577 DO_TEST_CAPS_LATEST("pci-expander-bus");
2578 DO_TEST_CAPS_LATEST_PARSE_ERROR("pci-expander-bus-bad-node");
2579 DO_TEST_CAPS_LATEST_PARSE_ERROR("pci-expander-bus-bad-machine");
2580 DO_TEST_CAPS_LATEST_PARSE_ERROR("pci-expander-bus-bad-bus");
2582 DO_TEST_CAPS_LATEST("pcie-expander-bus");
2583 DO_TEST_CAPS_LATEST_PARSE_ERROR("pcie-expander-bus-bad-machine");
2584 DO_TEST_CAPS_LATEST_PARSE_ERROR("pcie-expander-bus-bad-bus");
2585 DO_TEST_CAPS_ARCH_LATEST("pcie-expander-bus-aarch64", "aarch64");
2587 DO_TEST_CAPS_LATEST("hostdev-scsi-lsi");
2588 DO_TEST_CAPS_LATEST("hostdev-scsi-virtio-scsi");
2590 DO_TEST_CAPS_ARCH_LATEST("hostdev-scsi-vhost-scsi-ccw", "s390x");
2591 DO_TEST_CAPS_LATEST("hostdev-scsi-vhost-scsi-pci");
2592 DO_TEST_CAPS_LATEST_PARSE_ERROR("hostdev-scsi-vhost-scsi-pci-boot-fail");
2593 DO_TEST_CAPS_LATEST("hostdev-scsi-vhost-scsi-pcie");
2594 DO_TEST_CAPS_LATEST_PARSE_ERROR("hostdev-scsi-duplicate");
2596 DO_TEST_CAPS_LATEST("mlock-on");
2597 DO_TEST_CAPS_LATEST("mlock-off");
2599 DO_TEST_CAPS_LATEST_PARSE_ERROR("pci-bridge-negative-index-invalid");
2600 DO_TEST_CAPS_LATEST_PARSE_ERROR("pci-bridge-duplicate-index");
2601 DO_TEST_CAPS_LATEST_PARSE_ERROR("pci-root-nonzero-index");
2602 DO_TEST_CAPS_LATEST_PARSE_ERROR("pci-root-address");
2604 DO_TEST_CAPS_LATEST("hotplug-base");
2606 DO_TEST_CAPS_LATEST("pcihole64");
2607 DO_TEST_CAPS_LATEST("pcihole64-q35");
2609 DO_TEST_CAPS_ARCH_LATEST("arm-vexpressa9-nodevs", "aarch64");
2610 DO_TEST_CAPS_ARCH_LATEST("arm-vexpressa9-basic", "aarch64");
2611 DO_TEST_CAPS_ARCH_LATEST("arm-vexpressa9-virtio", "aarch64");
2613 DO_TEST_CAPS_ARCH_LATEST("aarch64-virt-virtio", "aarch64");
2615 /* Example of using virtio-pci with no explicit PCI controller
2616 but with manual PCI addresses */
2617 DO_TEST_CAPS_ARCH_LATEST("aarch64-virtio-pci-manual-addresses", "aarch64");
2618 DO_TEST_CAPS_ARCH_LATEST("aarch64-video-virtio-gpu-pci", "aarch64");
2619 DO_TEST_CAPS_ARCH_LATEST("aarch64-video-default", "aarch64");
2620 DO_TEST_CAPS_ARCH_LATEST("aarch64-virt-default-nic", "aarch64");
2621 DO_TEST_CAPS_ARCH_LATEST("aarch64-cpu-passthrough", "aarch64");
2622 DO_TEST_GIC("aarch64-gic-none", "latest", GIC_NONE
);
2623 DO_TEST_GIC("aarch64-gic-none-v2", "latest", GIC_V2
);
2624 DO_TEST_GIC("aarch64-gic-none-v3", "latest", GIC_V3
);
2625 DO_TEST_GIC("aarch64-gic-none-both", "latest", GIC_BOTH
);
2626 DO_TEST_CAPS_ARCH_VER_FULL("aarch64-gic-none-tcg", "aarch64", "latest",
2628 ARG_QEMU_CAPS_DEL
, QEMU_CAPS_KVM
, QEMU_CAPS_LAST
,
2630 DO_TEST_GIC("aarch64-gic-default", "latest", GIC_NONE
);
2631 DO_TEST_GIC("aarch64-gic-default-v2", "latest", GIC_V2
);
2632 DO_TEST_GIC("aarch64-gic-default-v3", "latest", GIC_V3
);
2633 DO_TEST_GIC("aarch64-gic-default-both", "latest", GIC_BOTH
);
2634 DO_TEST_GIC("aarch64-gic-v2", "latest", GIC_NONE
);
2635 DO_TEST_GIC("aarch64-gic-v2", "latest", GIC_V2
);
2636 DO_TEST_GIC("aarch64-gic-v2", "latest", GIC_V3
);
2637 DO_TEST_GIC("aarch64-gic-v2", "latest", GIC_BOTH
);
2638 DO_TEST_GIC("aarch64-gic-v3", "latest", GIC_NONE
);
2639 DO_TEST_GIC("aarch64-gic-v3", "latest", GIC_V2
);
2640 DO_TEST_GIC("aarch64-gic-v3", "latest", GIC_V3
);
2641 DO_TEST_GIC("aarch64-gic-v3", "latest", GIC_BOTH
);
2642 DO_TEST_GIC("aarch64-gic-host", "latest", GIC_NONE
);
2643 DO_TEST_GIC("aarch64-gic-host", "latest", GIC_V2
);
2644 DO_TEST_GIC("aarch64-gic-host", "latest", GIC_V3
);
2645 DO_TEST_GIC("aarch64-gic-host", "latest", GIC_BOTH
);
2646 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("aarch64-gic-invalid", "aarch64");
2647 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("aarch64-gic-not-virt", "aarch64");
2648 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("aarch64-gic-not-arm", "ppc64");
2649 DO_TEST_CAPS_ARCH_LATEST("aarch64-kvm-32-on-64", "aarch64");
2650 DO_TEST_CAPS_ARCH_LATEST("aarch64-pci-serial", "aarch64");
2651 DO_TEST_CAPS_ARCH_LATEST("aarch64-traditional-pci", "aarch64");
2653 /* aarch64 doesn't support the same CPU features as x86 */
2654 DO_TEST_CAPS_ARCH_LATEST_FAILURE("aarch64-features-wrong", "aarch64");
2655 /* Can't enable vector lengths when SVE is overall disabled */
2656 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("aarch64-features-sve-disabled", "aarch64");
2657 /* SVE aarch64 CPU features work on modern QEMU */
2658 DO_TEST_CAPS_ARCH_LATEST("aarch64-features-sve", "aarch64");
2660 DO_TEST_CAPS_ARCH_LATEST("aarch64-features-ras", "aarch64");
2661 DO_TEST_CAPS_ARCH_LATEST("aarch64-features-pauth", "aarch64");
2663 DO_TEST_CAPS_ARCH_LATEST("clock-timer-armvtimer", "aarch64");
2665 qemuTestSetHostArch(&driver
, VIR_ARCH_NONE
);
2667 DO_TEST_CAPS_LATEST("kvm-pit-delay");
2668 DO_TEST_CAPS_LATEST("kvm-pit-discard");
2670 DO_TEST_CAPS_LATEST("panic");
2671 DO_TEST_CAPS_LATEST("panic-double");
2672 DO_TEST_CAPS_LATEST("panic-no-address");
2673 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("riscv64-panic-no-model", "riscv64");
2675 DO_TEST_CAPS_LATEST("pvpanic-pci-x86_64");
2676 DO_TEST_CAPS_ARCH_LATEST("pvpanic-pci-aarch64", "aarch64");
2677 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("pvpanic-pci-invalid-address-aarch64", "aarch64");
2678 DO_TEST_CAPS_ARCH_LATEST("pvpanic-pci-no-address-aarch64", "aarch64");
2680 DO_TEST_CAPS_LATEST("fips-enabled");
2682 DO_TEST_CAPS_LATEST("shmem-plain-doorbell");
2683 DO_TEST_CAPS_LATEST_PARSE_ERROR("shmem-invalid-size");
2684 DO_TEST_CAPS_LATEST_FAILURE("shmem-invalid-address");
2685 DO_TEST_CAPS_LATEST_PARSE_ERROR("shmem-small-size");
2686 DO_TEST_CAPS_LATEST_PARSE_ERROR("shmem-msi-only");
2687 DO_TEST_CAPS_LATEST("cpu-host-passthrough-features");
2689 DO_TEST_CAPS_LATEST_FAILURE("memory-align-fail");
2690 DO_TEST_CAPS_LATEST_PARSE_ERROR("memory-hotplug-nonuma");
2691 DO_TEST_CAPS_LATEST_PARSE_ERROR("memory-hotplug-invalid-targetnode");
2692 DO_TEST_CAPS_LATEST("memory-hotplug");
2693 DO_TEST_CAPS_LATEST("memory-hotplug-dimm");
2694 DO_TEST_CAPS_LATEST("memory-hotplug-dimm-addr");
2695 DO_TEST_CAPS_ARCH_LATEST("memory-hotplug-ppc64-nonuma", "ppc64");
2696 DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("memory-hotplug-ppc64-nonuma", "ppc64");
2697 DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm");
2698 DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-access");
2699 DO_TEST_CAPS_VER("memory-hotplug-nvdimm-label", "5.2.0");
2700 DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-label");
2701 DO_TEST_CAPS_VER("memory-hotplug-nvdimm-align", "5.2.0");
2702 DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-align");
2703 DO_TEST_CAPS_VER("memory-hotplug-nvdimm-pmem", "5.2.0");
2704 DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-pmem");
2705 DO_TEST_CAPS_VER("memory-hotplug-nvdimm-readonly", "5.2.0");
2706 DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-readonly");
2707 DO_TEST_CAPS_ARCH_LATEST("memory-hotplug-nvdimm-ppc64", "ppc64");
2708 DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE("memory-hotplug-nvdimm-ppc64", "ppc64");
2709 DO_TEST_CAPS_VER("memory-hotplug-virtio-pmem", "5.2.0");
2710 DO_TEST_CAPS_LATEST("memory-hotplug-virtio-pmem");
2711 DO_TEST_CAPS_LATEST("memory-hotplug-virtio-mem");
2712 DO_TEST_CAPS_LATEST("memory-hotplug-multiple");
2713 DO_TEST_CAPS_LATEST_PARSE_ERROR("memory-hotplug-virtio-mem-overlap-address");
2714 /* Test whether overlap calculation done in
2715 * virDomainMemoryDefCheckConflict() works for NVDIMMs which are special
2716 * than other memory devices because of how they handle <labelsize/> */
2717 DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-overlap");
2718 DO_TEST_CAPS_ARCH_LATEST("memory-hotplug-virtio-mem-pci-s390x", "s390x");
2719 DO_TEST_CAPS_ARCH_LATEST("memory-hotplug-virtio-mem-ccw-s390x", "s390x");
2721 DO_TEST_CAPS_ARCH_LATEST("machine-aeskeywrap-on-caps", "s390x");
2722 DO_TEST_CAPS_ARCH_LATEST("machine-aeskeywrap-on-cap", "s390x");
2723 DO_TEST_CAPS_ARCH_LATEST("machine-aeskeywrap-off-caps", "s390x");
2724 DO_TEST_CAPS_ARCH_LATEST("machine-aeskeywrap-off-cap", "s390x");
2725 DO_TEST_CAPS_ARCH_LATEST("machine-deakeywrap-on-caps", "s390x");
2726 DO_TEST_CAPS_ARCH_LATEST("machine-deakeywrap-on-cap", "s390x");
2727 DO_TEST_CAPS_ARCH_LATEST("machine-deakeywrap-off-caps", "s390x");
2728 DO_TEST_CAPS_ARCH_LATEST("machine-deakeywrap-off-cap", "s390x");
2729 DO_TEST_CAPS_ARCH_LATEST("machine-keywrap-none-caps", "s390x");
2730 DO_TEST_CAPS_ARCH_LATEST("machine-keywrap-none", "s390x");
2732 DO_TEST_CAPS_ARCH_LATEST("machine-loadparm-s390", "s390x");
2733 DO_TEST_CAPS_ARCH_VER("machine-loadparm-s390", "s390x", "9.1.0");
2734 DO_TEST_CAPS_ARCH_LATEST("machine-loadparm-net-s390", "s390x");
2735 DO_TEST_CAPS_ARCH_VER("machine-loadparm-net-s390", "s390x", "9.1.0");
2736 DO_TEST_CAPS_ARCH_LATEST("machine-loadparm-hostdev", "s390x");
2737 DO_TEST_CAPS_ARCH_VER("machine-loadparm-hostdev", "s390x", "9.1.0");
2738 DO_TEST_CAPS_ARCH_LATEST("machine-loadparm-multiple-disks-nets-s390", "s390x");
2739 DO_TEST_CAPS_ARCH_VER("machine-loadparm-multiple-disks-nets-s390", "s390x", "9.1.0");
2740 DO_TEST_CAPS_LATEST_PARSE_ERROR("machine-loadparm-s390-char-invalid");
2741 DO_TEST_CAPS_LATEST_PARSE_ERROR("machine-loadparm-s390-len-invalid");
2743 DO_TEST_CAPS_LATEST("qemu-ns-domain-ns0");
2744 DO_TEST_CAPS_LATEST("qemu-ns-domain-commandline");
2745 DO_TEST_CAPS_LATEST("qemu-ns-domain-commandline-ns0");
2746 DO_TEST_CAPS_LATEST("qemu-ns-commandline");
2747 DO_TEST_CAPS_LATEST("qemu-ns-commandline-ns0");
2748 DO_TEST_CAPS_LATEST("qemu-ns-commandline-ns1");
2750 DO_TEST_CAPS_LATEST("virtio-input");
2751 DO_TEST_CAPS_LATEST("virtio-input-passthrough");
2753 DO_TEST_CAPS_LATEST("input-linux");
2755 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("ppc64-tpmproxy-double", "ppc64");
2756 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("ppc64-tpm-double", "ppc64");
2758 DO_TEST_CAPS_LATEST_PPC64("ppc64-tpmproxy-single");
2759 DO_TEST_CAPS_LATEST_PPC64("ppc64-tpmproxy-with-tpm");
2761 DO_TEST_CAPS_ARCH_LATEST("aarch64-usb-controller", "aarch64");
2763 DO_TEST_CAPS_ARCH_LATEST("sparc-minimal", "sparc");
2765 DO_TEST_CAPS_LATEST_PARSE_ERROR("missing-machine");
2767 DO_TEST_CAPS_LATEST("name-escape");
2769 DO_TEST_CAPS_LATEST_PARSE_ERROR("usb-too-long-port-path-invalid");
2771 DO_TEST_CAPS_LATEST("acpi-table");
2773 DO_TEST_CAPS_LATEST("intel-iommu");
2774 DO_TEST_CAPS_LATEST("intel-iommu-caching-mode");
2775 DO_TEST_CAPS_LATEST("intel-iommu-eim");
2776 DO_TEST_CAPS_LATEST("intel-iommu-device-iotlb");
2777 DO_TEST_CAPS_LATEST("intel-iommu-aw-bits");
2778 DO_TEST_CAPS_LATEST("intel-iommu-dma-translation");
2779 DO_TEST_CAPS_LATEST_PARSE_ERROR("intel-iommu-wrong-machine");
2780 DO_TEST_CAPS_LATEST_ABI_UPDATE("intel-iommu-eim-autoadd");
2781 DO_TEST_CAPS_LATEST_ABI_UPDATE("intel-iommu-eim-autoadd-v2");
2782 DO_TEST_CAPS_ARCH_LATEST("iommu-smmuv3", "aarch64");
2783 DO_TEST_CAPS_LATEST("virtio-iommu-x86_64");
2784 DO_TEST_CAPS_VER_PARSE_ERROR("virtio-iommu-x86_64", "6.1.0");
2785 DO_TEST_CAPS_ARCH_LATEST("virtio-iommu-aarch64", "aarch64");
2786 DO_TEST_CAPS_LATEST_PARSE_ERROR("virtio-iommu-wrong-machine");
2787 DO_TEST_CAPS_LATEST_PARSE_ERROR("virtio-iommu-no-acpi");
2788 DO_TEST_CAPS_LATEST_PARSE_ERROR("virtio-iommu-invalid-address-type");
2789 DO_TEST_CAPS_LATEST_PARSE_ERROR("virtio-iommu-invalid-address");
2790 DO_TEST_CAPS_LATEST_PARSE_ERROR("virtio-iommu-dma-translation");
2792 DO_TEST_CAPS_LATEST("cpu-hotplug-startup");
2793 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("cpu-hotplug-granularity", "ppc64");
2795 DO_TEST_CAPS_LATEST("virtio-options");
2796 DO_TEST_CAPS_LATEST("virtio-options-controller-iommu");
2797 DO_TEST_CAPS_LATEST("virtio-options-disk-iommu");
2798 DO_TEST_CAPS_LATEST("virtio-options-fs-iommu");
2799 DO_TEST_CAPS_LATEST("virtio-options-input-iommu");
2800 DO_TEST_CAPS_LATEST("virtio-options-memballoon-iommu");
2801 DO_TEST_CAPS_LATEST("virtio-options-net-iommu");
2802 DO_TEST_CAPS_LATEST("virtio-options-rng-iommu");
2803 DO_TEST_CAPS_LATEST("virtio-options-video-iommu");
2804 DO_TEST_CAPS_LATEST("virtio-options-controller-ats");
2805 DO_TEST_CAPS_LATEST("virtio-options-disk-ats");
2806 DO_TEST_CAPS_LATEST("virtio-options-fs-ats");
2807 DO_TEST_CAPS_LATEST("virtio-options-input-ats");
2808 DO_TEST_CAPS_LATEST("virtio-options-memballoon-ats");
2809 DO_TEST_CAPS_LATEST("virtio-options-net-ats");
2810 DO_TEST_CAPS_LATEST("virtio-options-rng-ats");
2811 DO_TEST_CAPS_LATEST("virtio-options-video-ats");
2812 DO_TEST_CAPS_LATEST("virtio-options-controller-packed");
2813 DO_TEST_CAPS_LATEST("virtio-options-disk-packed");
2814 DO_TEST_CAPS_LATEST("virtio-options-fs-packed");
2815 DO_TEST_CAPS_LATEST("virtio-options-input-packed");
2816 DO_TEST_CAPS_LATEST("virtio-options-memballoon-packed");
2817 DO_TEST_CAPS_LATEST("virtio-options-memballoon-freepage-reporting");
2818 DO_TEST_CAPS_LATEST("virtio-options-net-packed");
2819 DO_TEST_CAPS_LATEST("virtio-options-rng-packed");
2820 DO_TEST_CAPS_LATEST("virtio-options-video-packed");
2822 DO_TEST_CAPS_LATEST("fd-memory-numa-topology");
2823 DO_TEST_CAPS_LATEST("fd-memory-numa-topology2");
2824 DO_TEST_CAPS_LATEST("fd-memory-numa-topology3");
2825 DO_TEST_CAPS_LATEST("fd-memory-numa-topology4");
2827 DO_TEST_CAPS_LATEST("fd-memory-no-numa-topology");
2829 DO_TEST_CAPS_LATEST("memfd-memory-numa");
2830 DO_TEST_CAPS_LATEST("memfd-memory-default-hugepage");
2832 DO_TEST_CAPS_LATEST("cpu-check-none");
2833 DO_TEST_CAPS_ARCH_LATEST_FULL("cpu-check-partial", "x86_64", ARG_CAPS_HOST_CPU_MODEL
, QEMU_CPU_DEF_HASWELL
);
2834 DO_TEST_CAPS_LATEST("cpu-check-full");
2835 DO_TEST_CAPS_LATEST("cpu-check-default-none");
2836 DO_TEST_CAPS_LATEST("cpu-check-default-none2");
2837 /* this test case uses 'cpu="host-model"', run it with Haswell host cpu to prevent test case churn */
2838 DO_TEST_CAPS_ARCH_LATEST_FULL("cpu-check-default-partial", "x86_64", ARG_CAPS_HOST_CPU_MODEL
, QEMU_CPU_DEF_HASWELL
);
2839 DO_TEST_CAPS_ARCH_LATEST_FULL("cpu-check-default-partial2", "x86_64", ARG_CAPS_HOST_CPU_MODEL
, QEMU_CPU_DEF_HASWELL
);
2841 DO_TEST_CAPS_LATEST("cpu-cache-disable");
2842 /* this test case uses 'cpu="host-model"', run it with Haswell host cpu to prevent test case churn */
2843 DO_TEST_CAPS_ARCH_LATEST_FULL("cpu-cache-disable3", "x86_64", ARG_CAPS_HOST_CPU_MODEL
, QEMU_CPU_DEF_HASWELL
);
2844 DO_TEST_CAPS_LATEST("cpu-cache-passthrough");
2845 DO_TEST_CAPS_LATEST("cpu-cache-emulate-l3");
2846 DO_TEST_CAPS_LATEST_PARSE_ERROR("cpu-cache-emulate-l2");
2847 DO_TEST_CAPS_LATEST_PARSE_ERROR("cpu-cache-passthrough3");
2848 DO_TEST_CAPS_LATEST_PARSE_ERROR("cpu-cache-passthrough-l3");
2849 DO_TEST_CAPS_LATEST("vmcoreinfo");
2851 DO_TEST_CAPS_LATEST("user-aliases");
2852 DO_TEST_CAPS_LATEST("user-aliases2");
2853 DO_TEST_CAPS_LATEST("user-aliases-usb");
2855 DO_TEST_CAPS_LATEST("tseg-explicit-size");
2856 DO_TEST_CAPS_LATEST_PARSE_ERROR("tseg-i440fx");
2857 DO_TEST_CAPS_LATEST_PARSE_ERROR("tseg-invalid-size");
2859 DO_TEST_CAPS_ARCH_LATEST("video-virtio-gpu-ccw", "s390x");
2860 DO_TEST_CAPS_ARCH_LATEST("input-virtio-ccw", "s390x");
2862 DO_TEST_CAPS_LATEST("vhost-vsock");
2863 DO_TEST_CAPS_LATEST("vhost-vsock-auto");
2864 DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw", "s390x");
2865 DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw-auto", "s390x");
2866 DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw-iommu", "s390x");
2868 DO_TEST_CAPS_VER("launch-security-sev", "6.0.0");
2869 DO_TEST_CAPS_VER("launch-security-sev-missing-platform-info", "6.0.0");
2870 DO_TEST_CAPS_ARCH_LATEST_FULL("launch-security-sev-direct",
2873 QEMU_CAPS_SEV_GUEST
,
2876 DO_TEST_CAPS_ARCH_LATEST_FULL("launch-security-sev-snp",
2879 QEMU_CAPS_SEV_SNP_GUEST
,
2882 DO_TEST_CAPS_ARCH_LATEST("launch-security-s390-pv", "s390x");
2884 DO_TEST_CAPS_LATEST("vhost-user-fs-fd-memory");
2885 DO_TEST_CAPS_LATEST("vhost-user-fs-fd-openfiles");
2886 DO_TEST_CAPS_LATEST("vhost-user-fs-hugepages");
2887 DO_TEST_CAPS_LATEST("vhost-user-fs-readonly");
2889 DO_TEST_CAPS_ARCH_LATEST("vhost-user-fs-ccw", "s390x");
2890 DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("vhost-user-fs-ccw-bootindex", "s390x");
2892 DO_TEST_CAPS_LATEST("virtio-transitional");
2893 DO_TEST_CAPS_LATEST("virtio-non-transitional");
2894 DO_TEST_CAPS_LATEST_PARSE_ERROR("virtio-transitional-not-supported");
2896 /* Simple headless guests for various architectures */
2897 DO_TEST_CAPS_ARCH_LATEST("aarch64-virt-headless", "aarch64");
2898 DO_TEST_CAPS_ARCH_LATEST("aarch64-virt-headless-mmio", "aarch64");
2899 DO_TEST_CAPS_ARCH_LATEST("loongarch64-virt-headless", "loongarch64");
2900 DO_TEST_CAPS_ARCH_LATEST("ppc64-pseries-headless", "ppc64");
2901 DO_TEST_CAPS_ARCH_LATEST("riscv64-virt-headless", "riscv64");
2902 DO_TEST_CAPS_ARCH_LATEST("riscv64-virt-headless-mmio", "riscv64");
2903 DO_TEST_CAPS_ARCH_LATEST("s390x-ccw-headless", "s390x");
2904 DO_TEST_CAPS_ARCH_LATEST("x86_64-pc-headless", "x86_64");
2905 DO_TEST_CAPS_ARCH_LATEST("x86_64-q35-headless", "x86_64");
2907 /* Simple guests with graphics for various architectures */
2908 DO_TEST_CAPS_ARCH_LATEST("aarch64-virt-graphics", "aarch64");
2909 DO_TEST_CAPS_ARCH_LATEST("loongarch64-virt-graphics", "loongarch64");
2910 DO_TEST_CAPS_ARCH_LATEST("ppc64-pseries-graphics", "ppc64");
2911 DO_TEST_CAPS_ARCH_LATEST("riscv64-virt-graphics", "riscv64");
2912 DO_TEST_CAPS_ARCH_LATEST("s390x-ccw-graphics", "s390x");
2913 DO_TEST_CAPS_ARCH_LATEST("x86_64-pc-graphics", "x86_64");
2914 DO_TEST_CAPS_ARCH_LATEST("x86_64-q35-graphics", "x86_64");
2916 DO_TEST_CAPS_LATEST("vhost-user-vga");
2917 DO_TEST_CAPS_LATEST("vhost-user-gpu-secondary");
2919 DO_TEST_CAPS_LATEST("cpu-Icelake-Server-pconfig");
2921 DO_TEST_CAPS_ARCH_LATEST("aarch64-default-cpu-kvm-virt-4.2", "aarch64");
2922 DO_TEST_CAPS_ARCH_LATEST("aarch64-default-cpu-tcg-virt-4.2", "aarch64");
2923 DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-kvm-pseries-2.7", "ppc64");
2924 DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-tcg-pseries-2.7", "ppc64");
2925 DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-kvm-pseries-3.1", "ppc64");
2926 DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-tcg-pseries-3.1", "ppc64");
2927 DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-kvm-pseries-4.2", "ppc64");
2928 DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-tcg-pseries-4.2", "ppc64");
2929 DO_TEST_CAPS_ARCH_LATEST("s390-default-cpu-kvm-ccw-virtio-4.2", "s390x");
2930 DO_TEST_CAPS_ARCH_LATEST("s390-default-cpu-tcg-ccw-virtio-4.2", "s390x");
2931 DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-kvm-pc-4.2", "x86_64");
2932 DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-tcg-pc-4.2", "x86_64");
2933 DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-kvm-q35-4.2", "x86_64");
2934 DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-tcg-q35-4.2", "x86_64");
2935 DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-tcg-features", "x86_64");
2937 DO_TEST_CAPS_ARCH_LATEST("riscv64-virt-features-aia", "riscv64");
2939 DO_TEST_CAPS_LATEST("virtio-9p-multidevs");
2940 DO_TEST_CAPS_LATEST("virtio-9p-createmode");
2942 DO_TEST_CAPS_LATEST("devices-acpi-index");
2944 DO_TEST_CAPS_ARCH_LATEST_FULL("hvf-x86_64-q35-headless", "x86_64", ARG_CAPS_VARIANT
, "+hvf", ARG_END
);
2945 DO_TEST_CAPS_ARCH_LATEST_FULL("hvf-aarch64-virt-headless", "aarch64", ARG_CAPS_VARIANT
, "+hvf", ARG_END
);
2946 /* HVF guests should not work on Linux with KVM */
2947 DO_TEST_CAPS_LATEST_PARSE_ERROR("hvf-x86_64-q35-headless");
2949 DO_TEST_CAPS_LATEST("cpu-phys-bits-passthrough");
2950 DO_TEST_CAPS_LATEST("cpu-phys-bits-emulate");
2951 /* this test case uses 'cpu="host"', run it with Haswell host cpu to prevent test case churn */
2952 DO_TEST_CAPS_ARCH_LATEST_FULL("cpu-phys-bits-emulate2", "x86_64", ARG_CAPS_HOST_CPU_MODEL
, QEMU_CPU_DEF_HASWELL
);
2953 DO_TEST_CAPS_LATEST_PARSE_ERROR("cpu-phys-bits-passthrough2");
2954 DO_TEST_CAPS_LATEST("cpu-phys-bits-limit");
2955 DO_TEST_CAPS_LATEST("cpu-phys-bits-emulate-bare");
2957 DO_TEST_CAPS_VER("sgx-epc", "7.0.0");
2959 DO_TEST_CAPS_LATEST("crypto-builtin");
2961 DO_TEST_CAPS_LATEST("async-teardown");
2962 DO_TEST_CAPS_ARCH_LATEST("s390-async-teardown", "s390x");
2963 DO_TEST_CAPS_ARCH_LATEST("s390-async-teardown-no-attrib", "s390x");
2964 DO_TEST_CAPS_ARCH_VER_PARSE_ERROR("s390-async-teardown", "s390x", "6.0.0");
2965 DO_TEST_CAPS_ARCH_LATEST("s390-async-teardown-disabled", "s390x");
2966 DO_TEST_CAPS_ARCH_VER("s390-async-teardown-disabled", "s390x", "6.0.0");
2968 DO_TEST_CAPS_LATEST("boot-menu-disable-with-timeout");
2969 DO_TEST_CAPS_LATEST("channel-unix-source-path");
2970 DO_TEST_CAPS_LATEST("chardev-label");
2971 DO_TEST_CAPS_LATEST("console-compat2");
2972 DO_TEST_CAPS_LATEST("cpu-empty");
2973 DO_TEST_CAPS_LATEST("cpu-host-model-features");
2974 DO_TEST_CAPS_LATEST("cpu-numa-disordered");
2975 DO_TEST_CAPS_LATEST("disk-active-commit");
2976 DO_TEST_CAPS_LATEST("disk-mirror-old");
2977 DO_TEST_CAPS_LATEST("disk-mirror");
2978 DO_TEST_CAPS_LATEST("downscript");
2979 DO_TEST_CAPS_LATEST("hostdev-mdev-display");
2980 DO_TEST_CAPS_LATEST("hostdev-scsi-autogen-address");
2981 DO_TEST_CAPS_LATEST("hostdev-scsi-large-unit");
2982 DO_TEST_CAPS_LATEST("hostdev-scsi-shareable");
2983 DO_TEST_CAPS_LATEST("lease");
2984 DO_TEST_CAPS_LATEST("memorybacking-set");
2985 DO_TEST_CAPS_LATEST("memorybacking-unset");
2986 DO_TEST_CAPS_LATEST("metadata-duplicate");
2987 DO_TEST_CAPS_LATEST("metadata");
2988 DO_TEST_CAPS_LATEST("net-midonet");
2989 DO_TEST_CAPS_LATEST("numad-auto-vcpu-no-numatune");
2990 DO_TEST_CAPS_LATEST("numad-static-vcpu-no-numatune");
2991 DO_TEST_CAPS_LATEST("numavcpus-topology-mismatch");
2992 DO_TEST_CAPS_ARCH_LATEST("panic-pseries", "ppc64");
2993 DO_TEST_CAPS_LATEST("pcihole64-gib");
2994 DO_TEST_CAPS_ARCH_LATEST("s390-defaultconsole", "s390x");
2995 DO_TEST_CAPS_ARCH_LATEST("s390-panic", "s390x");
2996 DO_TEST_CAPS_LATEST("seclabel-device-multiple");
2997 DO_TEST_CAPS_LATEST("seclabel-dynamic-none-relabel");
2998 DO_TEST_CAPS_LATEST("seclabel-dynamic-none");
2999 DO_TEST_CAPS_LATEST("serial-target-port-auto");
3000 DO_TEST_CAPS_LATEST("vhost-user-fs-sock");
3001 DO_TEST_CAPS_ARCH_LATEST("video-virtio-gpu-ccw-auto", "s390x");
3003 DO_TEST_CAPS_LATEST("graphics-listen-network");
3004 DO_TEST_CAPS_LATEST("net-bandwidth");
3005 DO_TEST_CAPS_LATEST("net-bandwidth2");
3006 DO_TEST_CAPS_LATEST("net-coalesce");
3007 DO_TEST_CAPS_LATEST("net-isolated-port");
3008 DO_TEST_CAPS_LATEST("net-mtu");
3009 DO_TEST_CAPS_LATEST("net-openvswitch");
3010 DO_TEST_CAPS_LATEST("net-virtio-network-portgroup");
3011 DO_TEST_CAPS_LATEST("net-virtio-teaming-network");
3012 DO_TEST_CAPS_LATEST("tap-vhost-incorrect");
3013 DO_TEST_CAPS_LATEST("tap-vhost");
3015 DO_TEST_CAPS_LATEST("mtp-usb-device")
3016 DO_TEST_CAPS_LATEST("net-usb")
3017 DO_TEST_CAPS_LATEST("sound-device-virtio")
3018 DO_TEST_CAPS_LATEST("pstore-acpi-erst")
3020 DO_TEST_CAPS_LATEST_FAILURE("disk-network-iscsi-zero-hosts-invalid")
3021 DO_TEST_CAPS_LATEST_PARSE_ERROR("hostdev-scsi-vhost-rawio-invalid")
3022 DO_TEST_CAPS_LATEST_PARSE_ERROR("hostdev-scsi-vhost-sgio-invalid")
3023 DO_TEST_CAPS_LATEST("disk-startuppolicy-optional-drop")
3025 /* check that all input files were actually used here */
3026 if (testConfXMLCheck(existingTestCases
) < 0)
3029 qemuTestDriverFree(&driver
);
3030 virFileWrapperClearPrefixes();
3032 return ret
== 0 ? EXIT_SUCCESS
: EXIT_FAILURE
;
3035 VIR_TEST_MAIN_PRELOAD(mymain
,
3036 VIR_TEST_MOCK("qemuxml2argv"),
3037 VIR_TEST_MOCK("domaincaps"),
3038 VIR_TEST_MOCK("virrandom"),
3039 VIR_TEST_MOCK("qemucpu"),
3040 VIR_TEST_MOCK("virpci"),
3041 VIR_TEST_MOCK("virnuma"))
3047 return EXIT_AM_SKIP
;
3050 #endif /* WITH_QEMU */