qemuxml2argvtest.c 131.2 KB
Newer Older
1
#include <config.h>
2 3

#include <unistd.h>
4 5 6 7

#include <sys/types.h>
#include <fcntl.h>

8 9
#include "testutils.h"

10 11
#ifdef WITH_QEMU

12
# include "internal.h"
13
# include "viralloc.h"
14
# include "qemu/qemu_alias.h"
15 16
# include "qemu/qemu_capabilities.h"
# include "qemu/qemu_command.h"
M
Matthias Bolte 已提交
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 "qemu/qemu_qapi.h"
22
# include "datatypes.h"
23
# include "conf/storage_conf.h"
24
# include "cpu/cpu_map.h"
25
# include "virstring.h"
26
# include "storage/storage_driver.h"
27
# include "virmock.h"
28 29
# include "virfilewrapper.h"
# include "configmake.h"
30 31
# include "testutilsqemuschema.h"
# include "qemu/qemu_monitor_json.h"
32

33
# define LIBVIRT_QEMU_CAPSPRIV_H_ALLOW
34 35
# include "qemu/qemu_capspriv.h"

36
# include "testutilsqemu.h"
37

38 39
# define VIR_FROM_THIS VIR_FROM_QEMU

40
static virQEMUDriver driver;
41

42
static unsigned char *
J
Ján Tomko 已提交
43
fakeSecretGetValue(virSecretPtr obj G_GNUC_UNUSED,
44
                   size_t *value_size,
J
Ján Tomko 已提交
45 46
                   unsigned int fakeflags G_GNUC_UNUSED,
                   unsigned int internalFlags G_GNUC_UNUSED)
47
{
48
    char *secret;
49
    secret = g_strdup("AQCVn5hO6HzFAhAAq0NCv8jtJcIcE+HOBlMQ1A");
50 51 52 53 54 55
    *value_size = strlen(secret);
    return (unsigned char *) secret;
}

static virSecretPtr
fakeSecretLookupByUsage(virConnectPtr conn,
56
                        int usageType,
57 58
                        const char *usageID)
{
59
    unsigned char uuid[VIR_UUID_BUFLEN];
60 61 62 63 64 65 66 67 68 69
    if (usageType == VIR_SECRET_USAGE_TYPE_VOLUME) {
        if (!STRPREFIX(usageID, "/storage/guest_disks/")) {
            virReportError(VIR_ERR_INTERNAL_ERROR,
                           "test provided invalid volume storage prefix '%s'",
                           usageID);
            return NULL;
        }
    } else if (STRNEQ(usageID, "mycluster_myname")) {
        virReportError(VIR_ERR_INTERNAL_ERROR,
                       "test provided incorrect usage '%s'", usageID);
70
        return NULL;
71
    }
72

73 74 75
    if (virUUIDGenerate(uuid) < 0)
        return NULL;

76
    return virGetSecret(conn, uuid, usageType, usageID);
77 78
}

79 80 81 82
static virSecretPtr
fakeSecretLookupByUUID(virConnectPtr conn,
                       const unsigned char *uuid)
{
83 84 85
    /* NB: This mocked value could be "tls" or "volume" depending on
     * which test is being run, we'll leave at NONE (or 0) */
    return virGetSecret(conn, uuid, VIR_SECRET_USAGE_TYPE_NONE, "");
86 87
}

88
static virSecretDriver fakeSecretDriver = {
89 90
    .connectNumOfSecrets = NULL,
    .connectListSecrets = NULL,
91
    .secretLookupByUUID = fakeSecretLookupByUUID,
92 93 94 95 96 97
    .secretLookupByUsage = fakeSecretLookupByUsage,
    .secretDefineXML = NULL,
    .secretGetXMLDesc = NULL,
    .secretSetValue = NULL,
    .secretGetValue = fakeSecretGetValue,
    .secretUndefine = NULL,
98 99
};

100 101 102 103 104 105 106 107 108 109 110 111

# define STORAGE_POOL_XML_PATH "storagepoolxml2xmlout/"
static const unsigned char fakeUUID[VIR_UUID_BUFLEN] = "fakeuuid";

static virStoragePoolPtr
fakeStoragePoolLookupByName(virConnectPtr conn,
                            const char *name)
{
    char *xmlpath = NULL;
    virStoragePoolPtr ret = NULL;

    if (STRNEQ(name, "inactive")) {
112 113
        xmlpath = g_strdup_printf("%s/%s%s.xml", abs_srcdir,
                                  STORAGE_POOL_XML_PATH, name);
114 115 116 117 118 119 120 121 122 123

        if (!virFileExists(xmlpath)) {
            virReportError(VIR_ERR_NO_STORAGE_POOL,
                           "File '%s' not found", xmlpath);
            goto cleanup;
        }
    }

    ret = virGetStoragePool(conn, name, fakeUUID, NULL, NULL);

124
 cleanup:
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
    VIR_FREE(xmlpath);
    return ret;
}


static virStorageVolPtr
fakeStorageVolLookupByName(virStoragePoolPtr pool,
                           const char *name)
{
    char **volinfo = NULL;
    virStorageVolPtr ret = NULL;

    if (STREQ(pool->name, "inactive")) {
        virReportError(VIR_ERR_OPERATION_INVALID,
                       "storage pool '%s' is not active", pool->name);
        return NULL;
    }

    if (STREQ(name, "nonexistent")) {
        virReportError(VIR_ERR_NO_STORAGE_VOL,
                       "no storage vol with matching name '%s'", name);
        return NULL;
    }

    if (!strchr(name, '+'))
        goto fallback;

    if (!(volinfo = virStringSplit(name, "+", 2)))
        return NULL;

    if (!volinfo[1])
        goto fallback;

    ret = virGetStorageVol(pool->conn, pool->name, volinfo[1], volinfo[0],
                           NULL, NULL);

161
 cleanup:
162
    virStringListFree(volinfo);
163 164
    return ret;

165
 fallback:
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
    ret = virGetStorageVol(pool->conn, pool->name, name, "block", NULL, NULL);
    goto cleanup;
}

static int
fakeStorageVolGetInfo(virStorageVolPtr vol,
                      virStorageVolInfoPtr info)
{
    memset(info, 0, sizeof(*info));

    info->type = virStorageVolTypeFromString(vol->key);

    if (info->type < 0) {
        virReportError(VIR_ERR_INTERNAL_ERROR,
                       "Invalid volume type '%s'", vol->key);
        return -1;
    }

    return 0;
}


static char *
fakeStorageVolGetPath(virStorageVolPtr vol)
{
M
Michal Privoznik 已提交
191
    return g_strdup_printf("/some/%s/device/%s", vol->key, vol->name);
192 193 194 195 196
}


static char *
fakeStoragePoolGetXMLDesc(virStoragePoolPtr pool,
J
Ján Tomko 已提交
197
                          unsigned int flags_unused G_GNUC_UNUSED)
198 199 200 201 202 203 204 205 206
{
    char *xmlpath = NULL;
    char *xmlbuf = NULL;

    if (STREQ(pool->name, "inactive")) {
        virReportError(VIR_ERR_NO_STORAGE_POOL, NULL);
        return NULL;
    }

207 208
    xmlpath = g_strdup_printf("%s/%s%s.xml", abs_srcdir, STORAGE_POOL_XML_PATH,
                              pool->name);
209

210
    if (virTestLoadFile(xmlpath, &xmlbuf) < 0) {
211 212 213 214 215 216
        virReportError(VIR_ERR_INTERNAL_ERROR,
                       "failed to load XML file '%s'",
                       xmlpath);
        goto cleanup;
    }

217
 cleanup:
218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234
    VIR_FREE(xmlpath);

    return xmlbuf;
}

static int
fakeStoragePoolIsActive(virStoragePoolPtr pool)
{
    if (STREQ(pool->name, "inactive"))
        return 0;

    return 1;
}

/* Test storage pool implementation
 *
 * These functions aid testing of storage pool related stuff when creating a
235
 * qemu command line.
236 237 238
 *
 * There are a few "magic" values to pass to these functions:
 *
239 240
 * 1) "inactive" as a pool name to create an inactive pool. All other names are
 * interpreted as file names in storagepoolxml2xmlout/ and are used as the
241 242 243
 * definition for the pool. If the file doesn't exist the pool doesn't exist.
 *
 * 2) "nonexistent" returns an error while looking up a volume. Otherwise
244
 * pattern VOLUME_TYPE+VOLUME_PATH can be used to simulate a volume in a pool.
245 246 247 248 249 250 251 252 253 254 255 256
 * This creates a fake path for this volume. If the '+' sign is omitted, block
 * type is assumed.
 */
static virStorageDriver fakeStorageDriver = {
    .storagePoolLookupByName = fakeStoragePoolLookupByName,
    .storageVolLookupByName = fakeStorageVolLookupByName,
    .storagePoolGetXMLDesc = fakeStoragePoolGetXMLDesc,
    .storageVolGetPath = fakeStorageVolGetPath,
    .storageVolGetInfo = fakeStorageVolGetInfo,
    .storagePoolIsActive = fakeStoragePoolIsActive,
};

257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272

/* virNetDevOpenvswitchGetVhostuserIfname mocks a portdev name - handle that */
static virNWFilterBindingPtr
fakeNWFilterBindingLookupByPortDev(virConnectPtr conn,
                                   const char *portdev)
{
    if (STREQ(portdev, "vhost-user0"))
        return virGetNWFilterBinding(conn, "fake_vnet0", "fakeFilterName");

    virReportError(VIR_ERR_NO_NWFILTER_BINDING,
                   "no nwfilter binding for port dev '%s'", portdev);
    return NULL;
}


static int
J
Ján Tomko 已提交
273
fakeNWFilterBindingDelete(virNWFilterBindingPtr binding G_GNUC_UNUSED)
274 275 276 277 278 279 280 281 282 283
{
    return 0;
}


static virNWFilterDriver fakeNWFilterDriver = {
    .nwfilterBindingLookupByPortDev = fakeNWFilterBindingLookupByPortDev,
    .nwfilterBindingDelete = fakeNWFilterBindingDelete,
};

284 285 286 287

static int
testAddCPUModels(virQEMUCapsPtr caps, bool skipLegacy)
{
288 289
    virArch arch = virQEMUCapsGetArch(caps);
    const char *x86Models[] = {
290 291 292 293
        "Opteron_G3", "Opteron_G2", "Opteron_G1",
        "Nehalem", "Penryn", "Conroe",
        "Haswell-noTSX", "Haswell",
    };
294
    const char *x86LegacyModels[] = {
295 296 297 298
        "n270", "athlon", "pentium3", "pentium2", "pentium",
        "486", "coreduo", "kvm32", "qemu32", "kvm64",
        "core2duo", "phenom", "qemu64",
    };
299 300 301 302 303 304
    const char *armModels[] = {
        "cortex-a9", "cortex-a8", "cortex-a57", "cortex-a53",
    };
    const char *ppc64Models[] = {
        "POWER8", "POWER7",
    };
305 306 307
    const char *s390xModels[] = {
        "z990", "zEC12", "z13",
    };
308

309
    if (ARCH_IS_X86(arch)) {
310
        if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM, x86Models,
311
                                         G_N_ELEMENTS(x86Models),
312
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
313
            virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU, x86Models,
314
                                         G_N_ELEMENTS(x86Models),
315
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
316 317
            return -1;

318 319 320
        if (!skipLegacy) {
            if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM,
                                             x86LegacyModels,
321
                                             G_N_ELEMENTS(x86LegacyModels),
322
                                             VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
323 324
                virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU,
                                             x86LegacyModels,
325
                                             G_N_ELEMENTS(x86LegacyModels),
326
                                             VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
327 328
                return -1;
        }
329
    } else if (ARCH_IS_ARM(arch)) {
330
        if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM, armModels,
331
                                         G_N_ELEMENTS(armModels),
332
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
333
            virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU, armModels,
334
                                         G_N_ELEMENTS(armModels),
335
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
336 337
            return -1;
    } else if (ARCH_IS_PPC64(arch)) {
338
        if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM, ppc64Models,
339
                                         G_N_ELEMENTS(ppc64Models),
340
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
341
            virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU, ppc64Models,
342
                                         G_N_ELEMENTS(ppc64Models),
343
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
344
            return -1;
345 346
    } else if (ARCH_IS_S390(arch)) {
        if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM, s390xModels,
347
                                         G_N_ELEMENTS(s390xModels),
348 349
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
            return -1;
350
    }
351 352 353 354 355

    return 0;
}


356
static int
357
testUpdateQEMUCaps(const struct testQemuInfo *info,
358 359
                   virDomainObjPtr vm,
                   virCapsPtr caps)
360
{
361
    if (!caps)
362
        return -1;
363

364 365
    virQEMUCapsSetArch(info->qemuCaps, vm->def->os.arch);

366 367
    virQEMUCapsInitQMPBasicArch(info->qemuCaps);

368 369
    if (testAddCPUModels(info->qemuCaps,
                         !!(info->flags & FLAG_SKIP_LEGACY_CPUS)) < 0)
370
        return -1;
371

372 373 374 375
    virQEMUCapsInitHostCPUModel(info->qemuCaps, caps->host.arch,
                                VIR_DOMAIN_VIRT_KVM);
    virQEMUCapsInitHostCPUModel(info->qemuCaps, caps->host.arch,
                                VIR_DOMAIN_VIRT_QEMU);
376

377
    return 0;
378 379 380
}


381 382 383 384 385 386
static int
testCheckExclusiveFlags(int flags)
{
    virCheckFlags(FLAG_EXPECT_FAILURE |
                  FLAG_EXPECT_PARSE_ERROR |
                  FLAG_FIPS |
387
                  FLAG_REAL_CAPS |
388
                  FLAG_SKIP_LEGACY_CPUS |
389
                  FLAG_SLIRP_HELPER |
390 391
                  0, -1);

392
    VIR_EXCLUSIVE_FLAGS_RET(FLAG_REAL_CAPS, FLAG_SKIP_LEGACY_CPUS, -1);
393 394 395 396
    return 0;
}


397 398 399 400 401
static virCommandPtr
testCompareXMLToArgvCreateArgs(virQEMUDriverPtr drv,
                               virDomainObjPtr vm,
                               const char *migrateURI,
                               struct testQemuInfo *info,
402 403
                               unsigned int flags,
                               bool jsonPropsValidation)
404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440
{
    size_t i;

    for (i = 0; i < vm->def->nhostdevs; i++) {
        virDomainHostdevDefPtr hostdev = vm->def->hostdevs[i];

        if (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS &&
            hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI &&
            hostdev->source.subsys.u.pci.backend == VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT) {
            hostdev->source.subsys.u.pci.backend = VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO;
        }
    }

    for (i = 0; i < vm->def->nfss; i++) {
        virDomainFSDefPtr fs = vm->def->fss[i];
        char *s;

        if (fs->fsdriver != VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS ||
            QEMU_DOMAIN_FS_PRIVATE(fs)->vhostuser_fs_sock)
            continue;

        s = g_strdup_printf("/tmp/lib/domain--1-guest/fs%zu.vhost-fs.sock", i);
        QEMU_DOMAIN_FS_PRIVATE(fs)->vhostuser_fs_sock = s;
    }

    if (vm->def->vsock) {
        virDomainVsockDefPtr vsock = vm->def->vsock;
        qemuDomainVsockPrivatePtr vsockPriv =
            (qemuDomainVsockPrivatePtr)vsock->privateData;

        if (vsock->auto_cid == VIR_TRISTATE_BOOL_YES)
            vsock->guest_cid = 42;

        vsockPriv->vhostfd = 6789;
    }

    if (vm->def->tpm) {
441
        if (vm->def->tpm->type == VIR_DOMAIN_TPM_TYPE_EMULATOR) {
442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472
            VIR_FREE(vm->def->tpm->data.emulator.source.data.file.path);
            vm->def->tpm->data.emulator.source.data.file.path = g_strdup("/dev/test");
            vm->def->tpm->data.emulator.source.type = VIR_DOMAIN_CHR_TYPE_FILE;
       }
    }

    for (i = 0; i < vm->def->nvideos; i++) {
        virDomainVideoDefPtr video = vm->def->videos[i];

        if (video->backend == VIR_DOMAIN_VIDEO_BACKEND_TYPE_VHOSTUSER) {
            qemuDomainVideoPrivatePtr vpriv = QEMU_DOMAIN_VIDEO_PRIVATE(video);

            vpriv->vhost_user_fd = 1729;
        }
    }

    if (flags & FLAG_SLIRP_HELPER) {
        for (i = 0; i < vm->def->nnets; i++) {
            virDomainNetDefPtr net = vm->def->nets[i];

            if (net->type == VIR_DOMAIN_NET_TYPE_USER &&
                virQEMUCapsGet(info->qemuCaps, QEMU_CAPS_DBUS_VMSTATE)) {
                qemuSlirpPtr slirp = qemuSlirpNew();
                slirp->fd[0] = 42;
                QEMU_DOMAIN_NETWORK_PRIVATE(net)->slirp = slirp;
            }
        }
    }

    return qemuProcessCreatePretendCmd(drv, vm, migrateURI,
                                       (flags & FLAG_FIPS), false,
473
                                       jsonPropsValidation,
474 475 476 477
                                       VIR_QEMU_PROCESS_START_COLD);
}


478 479 480 481 482 483 484
static int
testCompareXMLToArgvValidateSchema(virQEMUDriverPtr drv,
                                   const char *migrateURI,
                                   struct testQemuInfo *info,
                                   unsigned int flags)
{
    VIR_AUTOSTRINGLIST args = NULL;
485
    g_autoptr(virDomainObj) vm = NULL;
486 487 488 489
    size_t nargs = 0;
    size_t i;
    g_autoptr(virHashTable) schema = NULL;
    g_autoptr(virCommand) cmd = NULL;
490
    unsigned int parseFlags = info->parseFlags;
491 492 493 494 495 496 497 498 499 500 501 502

    if (info->schemafile)
        schema = testQEMUSchemaLoad(info->schemafile);

    /* comment out with line comment to enable schema checking for non _CAPS tests
    if (!schema)
        schema = testQEMUSchemaLoadLatest(virArchToString(info->arch));
    // */

    if (!schema)
        return 0;

503 504 505 506 507 508 509 510 511
    if (!(vm = virDomainObjNew(driver.xmlopt)))
        return -1;

    parseFlags |= VIR_DOMAIN_DEF_PARSE_INACTIVE;
    if (!(vm->def = virDomainDefParseFile(info->infile,
                                          driver.xmlopt,
                                          NULL, parseFlags)))
        return -1;

512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557
    if (!(cmd = testCompareXMLToArgvCreateArgs(drv, vm, migrateURI, info, flags,
                                               true)))
        return -1;

    if (virCommandGetArgList(cmd, &args, &nargs) < 0)
        return -1;

    for (i = 0; i < nargs; i++) {
        g_auto(virBuffer) debug = VIR_BUFFER_INITIALIZER;
        g_autoptr(virJSONValue) jsonargs = NULL;

        if (STREQ(args[i], "-blockdev")) {
            if (!(jsonargs = virJSONValueFromString(args[i + 1])))
                return -1;

            if (testQEMUSchemaValidateCommand("blockdev-add", jsonargs,
                                              schema, false, false, &debug) < 0) {
                VIR_TEST_VERBOSE("failed to validate -blockdev '%s' against QAPI schema: %s",
                                 args[i + 1], virBufferCurrentContent(&debug));
                return -1;
            }

            i++;
        } else if (STREQ(args[i], "-netdev")) {
            if (!(jsonargs = virJSONValueFromString(args[i + 1])))
                return -1;

            /* skip the validation for pre-QAPIfication cases */
            if (virQEMUQAPISchemaPathExists("netdev_add/arg-type/type/!string", schema))
                continue;

            if (testQEMUSchemaValidateCommand("netdev_add", jsonargs,
                                              schema, false, false, &debug) < 0) {
                VIR_TEST_VERBOSE("failed to validate -netdev '%s' against QAPI schema: %s",
                                 args[i + 1], virBufferCurrentContent(&debug));
                return -1;
            }

            i++;
        }
    }

    return 0;
}


558 559 560
static int
testCompareXMLToArgv(const void *data)
{
561
    struct testQemuInfo *info = (void *) data;
562
    char *migrateURI = NULL;
563
    char *actualargv = NULL;
564 565
    unsigned int flags = info->flags;
    unsigned int parseFlags = info->parseFlags;
E
Eric Blake 已提交
566
    int ret = -1;
567
    virDomainObjPtr vm = NULL;
568
    virDomainChrSourceDef monitor_chr;
569
    virConnectPtr conn;
J
Jiri Denemark 已提交
570
    char *log = NULL;
E
Eric Blake 已提交
571
    virCommandPtr cmd = NULL;
572
    qemuDomainObjPrivatePtr priv = NULL;
573

574
    if (info->arch != VIR_ARCH_NONE && info->arch != VIR_ARCH_X86_64)
575
        qemuTestSetHostArch(&driver, info->arch);
576

577 578
    memset(&monitor_chr, 0, sizeof(monitor_chr));

579
    if (!(conn = virGetConnect()))
580
        goto cleanup;
581

582
    conn->secretDriver = &fakeSecretDriver;
583
    conn->storageDriver = &fakeStorageDriver;
584
    conn->nwfilterDriver = &fakeNWFilterDriver;
585

586 587 588 589
    virSetConnectInterface(conn);
    virSetConnectNetwork(conn);
    virSetConnectNWFilter(conn);
    virSetConnectNodeDev(conn);
590 591 592
    virSetConnectSecret(conn);
    virSetConnectStorage(conn);

593 594 595
    if (virQEMUCapsGet(info->qemuCaps, QEMU_CAPS_ENABLE_FIPS))
        flags |= FLAG_FIPS;

596 597 598
    if (testCheckExclusiveFlags(info->flags) < 0)
        goto cleanup;

599
    if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0)
600 601 602
        goto cleanup;

    if (info->migrateFrom &&
603 604
        !(migrateURI = qemuMigrationDstGetURI(info->migrateFrom,
                                              info->migrateFd)))
605 606
        goto cleanup;

607
    if (!(vm = virDomainObjNew(driver.xmlopt)))
608
        goto cleanup;
609

610
    parseFlags |= VIR_DOMAIN_DEF_PARSE_INACTIVE;
611
    if (!(vm->def = virDomainDefParseFile(info->infile,
612
                                          driver.xmlopt,
613
                                          NULL, parseFlags))) {
P
Pavel Hrdina 已提交
614
        if (flags & FLAG_EXPECT_PARSE_ERROR)
615
            goto ok;
616
        goto cleanup;
617
    }
618 619 620 621
    if (flags & FLAG_EXPECT_PARSE_ERROR) {
        VIR_TEST_DEBUG("passed instead of expected parse error");
        goto cleanup;
    }
622
    priv = vm->privateData;
623

624
    if (virBitmapParse("0-3", &priv->autoNodeset, 4) < 0)
625
        goto cleanup;
P
Pavel Hrdina 已提交
626

627
    if (!virDomainDefCheckABIStability(vm->def, vm->def, driver.xmlopt)) {
628
        VIR_TEST_DEBUG("ABI stability check failed on %s", info->infile);
629
        goto cleanup;
630 631
    }

632
    vm->def->id = -1;
633

634
    if (qemuProcessPrepareMonitorChr(&monitor_chr, priv->libDir) < 0)
635
        goto cleanup;
636

637 638 639 640 641 642
    if (!(info->flags & FLAG_REAL_CAPS)) {
        if (testUpdateQEMUCaps(info, vm, driver.caps) < 0)
            goto cleanup;
        if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0)
            goto cleanup;
    }
643

644
    log = virTestLogContentAndReset();
645
    VIR_FREE(log);
646
    virResetLastError();
J
Jiri Denemark 已提交
647

648
    if (!(cmd = testCompareXMLToArgvCreateArgs(&driver, vm, migrateURI, info,
649
                                               flags, false))) {
P
Pavel Hrdina 已提交
650 651
        if (flags & FLAG_EXPECT_FAILURE)
            goto ok;
652
        goto cleanup;
J
Jiri Denemark 已提交
653
    }
654 655 656 657
    if (flags & FLAG_EXPECT_FAILURE) {
        VIR_TEST_DEBUG("passed instead of expected failure");
        goto cleanup;
    }
J
Jiri Denemark 已提交
658

659
    if (testCompareXMLToArgvValidateSchema(&driver, migrateURI, info, flags) < 0)
660 661
        goto cleanup;

662
    if (!(actualargv = virCommandToString(cmd, false)))
663
        goto cleanup;
E
Eric Blake 已提交
664

665
    if (virTestCompareToFile(actualargv, info->outfile) < 0)
666
        goto cleanup;
667

P
Pavel Hrdina 已提交
668 669
    ret = 0;

670
 ok:
671
    if (ret == 0 && flags & FLAG_EXPECT_FAILURE) {
P
Pavel Hrdina 已提交
672
        ret = -1;
673
        VIR_TEST_DEBUG("Error expected but there wasn't any.");
674
        goto cleanup;
P
Pavel Hrdina 已提交
675
    }
676 677 678
    if (flags & FLAG_EXPECT_FAILURE) {
        if ((log = virTestLogContentAndReset()))
            VIR_TEST_DEBUG("Got expected error: \n%s", log);
679
    }
680 681
    virResetLastError();
    ret = 0;
682

683
 cleanup:
684 685
    VIR_FREE(log);
    VIR_FREE(actualargv);
686
    virDomainChrSourceDefClear(&monitor_chr);
E
Eric Blake 已提交
687
    virCommandFree(cmd);
688
    virObjectUnref(vm);
689 690
    virSetConnectSecret(NULL);
    virSetConnectStorage(NULL);
691
    virObjectUnref(conn);
692
    VIR_FREE(migrateURI);
693
    if (info->arch != VIR_ARCH_NONE && info->arch != VIR_ARCH_X86_64)
694
        qemuTestSetHostArch(&driver, VIR_ARCH_NONE);
695

696
    return ret;
697 698
}

699
static void
700
testInfoSetPaths(struct testQemuInfo *info,
701 702
                 const char *suffix)
{
703 704 705 706
    info->infile = g_strdup_printf("%s/qemuxml2argvdata/%s.xml",
                                   abs_srcdir, info->name);
    info->outfile = g_strdup_printf("%s/qemuxml2argvdata/%s%s.args",
                                    abs_srcdir, info->name, suffix ? suffix : "");
707 708
}

709 710
# define FAKEROOTDIRTEMPLATE abs_builddir "/fakerootdir-XXXXXX"

711
static int
E
Eric Blake 已提交
712
mymain(void)
713
{
C
Cole Robinson 已提交
714
    int ret = 0;
715
    char *fakerootdir;
716
    virHashTablePtr capslatest = NULL;
717

718 719 720 721 722 723 724 725 726
    fakerootdir = g_strdup(FAKEROOTDIRTEMPLATE);

    if (!g_mkdtemp(fakerootdir)) {
        fprintf(stderr, "Cannot create fakerootdir");
        abort();
    }

    g_setenv("LIBVIRT_FAKE_ROOT_DIR", fakerootdir, TRUE);

727 728 729 730 731
    /* Set the timezone because we are mocking the time() function.
     * If we don't do that, then localtime() may return unpredictable
     * results. In order to detect things that just work by a blind
     * chance, we need to set an virtual timezone that no libvirt
     * developer resides in. */
732 733
    if (g_setenv("TZ", "VIR00:30", TRUE) == FALSE) {
        perror("g_setenv");
734 735 736
        return EXIT_FAILURE;
    }

737
    if (qemuTestDriverInit(&driver) < 0)
738
        return EXIT_FAILURE;
739 740

    driver.privileged = true;
741

742
    VIR_FREE(driver.config->defaultTLSx509certdir);
743
    driver.config->defaultTLSx509certdir = g_strdup("/etc/pki/qemu");
744
    VIR_FREE(driver.config->vncTLSx509certdir);
745
    driver.config->vncTLSx509certdir = g_strdup("/etc/pki/libvirt-vnc");
746
    VIR_FREE(driver.config->spiceTLSx509certdir);
747
    driver.config->spiceTLSx509certdir = g_strdup("/etc/pki/libvirt-spice");
748
    VIR_FREE(driver.config->chardevTLSx509certdir);
749
    driver.config->chardevTLSx509certdir = g_strdup("/etc/pki/libvirt-chardev");
750
    VIR_FREE(driver.config->vxhsTLSx509certdir);
751
    driver.config->vxhsTLSx509certdir = g_strdup("/etc/pki/libvirt-vxhs/dummy,path");
752
    VIR_FREE(driver.config->nbdTLSx509certdir);
753
    driver.config->nbdTLSx509certdir = g_strdup("/etc/pki/libvirt-nbd/dummy,path");
754

755
    VIR_FREE(driver.config->hugetlbfs);
756
    if (VIR_ALLOC_N(driver.config->hugetlbfs, 2) < 0)
757
        return EXIT_FAILURE;
758
    driver.config->nhugetlbfs = 2;
759 760
    driver.config->hugetlbfs[0].mnt_dir = g_strdup("/dev/hugepages2M");
    driver.config->hugetlbfs[1].mnt_dir = g_strdup("/dev/hugepages1G");
761 762
    driver.config->hugetlbfs[0].size = 2048;
    driver.config->hugetlbfs[0].deflt = true;
763
    driver.config->hugetlbfs[1].size = 1048576;
764
    driver.config->spiceTLS = 1;
765
    driver.config->spicePassword = g_strdup("123456");
766
    VIR_FREE(driver.config->memoryBackingDir);
767
    driver.config->memoryBackingDir = g_strdup("/var/lib/libvirt/qemu/ram");
768
    VIR_FREE(driver.config->nvramDir);
769
    driver.config->nvramDir = g_strdup("/var/lib/libvirt/qemu/nvram");
770

C
Cole Robinson 已提交
771
    capslatest = testQemuGetLatestCaps();
772
    if (!capslatest)
773 774
        return EXIT_FAILURE;

775 776 777 778 779 780 781
    virFileWrapperAddPrefix(SYSCONFDIR "/qemu/firmware",
                            abs_srcdir "/qemufirmwaredata/etc/qemu/firmware");
    virFileWrapperAddPrefix(PREFIX "/share/qemu/firmware",
                            abs_srcdir "/qemufirmwaredata/usr/share/qemu/firmware");
    virFileWrapperAddPrefix("/home/user/.config/qemu/firmware",
                            abs_srcdir "/qemufirmwaredata/home/user/.config/qemu/firmware");

782 783 784 785 786 787 788 789 790 791
    virFileWrapperAddPrefix(SYSCONFDIR "/qemu/vhost-user",
                            abs_srcdir "/qemuvhostuserdata/etc/qemu/vhost-user");
    virFileWrapperAddPrefix(PREFIX "/share/qemu/vhost-user",
                            abs_srcdir "/qemuvhostuserdata/usr/share/qemu/vhost-user");
    virFileWrapperAddPrefix("/home/user/.config/qemu/vhost-user",
                            abs_srcdir "/qemuvhostuserdata/home/user/.config/qemu/vhost-user");

    virFileWrapperAddPrefix("/usr/libexec/qemu/vhost-user",
                            abs_srcdir "/qemuvhostuserdata/usr/libexec/qemu/vhost-user");

792 793 794 795 796 797 798 799 800 801 802 803 804 805
/**
 * The following set of macros allows testing of XML -> argv conversion with a
 * real set of capabilities gathered from a real qemu copy. It is desired to use
 * these for positive test cases as it provides combinations of flags which
 * can be met in real life.
 *
 * The capabilities are taken from the real capabilities stored in
 * tests/qemucapabilitiesdata.
 *
 * It is suggested to use the DO_TEST_CAPS_LATEST macro which always takes the
 * most recent capability set. In cases when the new code would change behaviour
 * the test cases should be forked using DO_TEST_CAPS_VER with the appropriate
 * version.
 */
806
# define DO_TEST_INTERNAL(_name, _suffix, ...) \
807
    do { \
808
        static struct testQemuInfo info = { \
809
            .name = _name, \
810
        }; \
811 812
        if (testQemuInfoSetArgs(&info, capslatest, \
                                __VA_ARGS__, ARG_END) < 0) \
813
            return EXIT_FAILURE; \
814
        testInfoSetPaths(&info, _suffix); \
815
        if (virTestRun("QEMU XML-2-ARGV " _name _suffix, \
816 817
                       testCompareXMLToArgv, &info) < 0) \
            ret = -1; \
818
        testQemuInfoClear(&info); \
819 820
    } while (0)

821 822 823 824 825 826
# define DO_TEST_CAPS_INTERNAL(name, arch, ver, ...) \
    DO_TEST_INTERNAL(name, "." arch "-" ver, \
                     ARG_CAPS_ARCH, arch, \
                     ARG_CAPS_VER, ver, \
                     __VA_ARGS__)

827
# define DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, ...) \
828
    DO_TEST_CAPS_INTERNAL(name, arch, "latest", __VA_ARGS__)
829

830 831 832
# define DO_TEST_CAPS_ARCH_VER_FULL(name, arch, ver, ...) \
    DO_TEST_CAPS_INTERNAL(name, arch, ver, __VA_ARGS__)

833
# define DO_TEST_CAPS_ARCH_LATEST(name, arch) \
834
    DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, ARG_END)
835

836
# define DO_TEST_CAPS_ARCH_VER(name, arch, ver) \
837
    DO_TEST_CAPS_ARCH_VER_FULL(name, arch, ver, ARG_END)
838

839
# define DO_TEST_CAPS_LATEST(name) \
840
    DO_TEST_CAPS_ARCH_LATEST(name, "x86_64")
841

842 843 844
# define DO_TEST_CAPS_VER(name, ver) \
    DO_TEST_CAPS_ARCH_VER(name, "x86_64", ver)

845 846 847
# define DO_TEST_CAPS_LATEST_PPC64(name) \
    DO_TEST_CAPS_ARCH_LATEST(name, "ppc64")

848 849
# define DO_TEST_CAPS_ARCH_LATEST_FAILURE(name, arch) \
    DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, \
850
                                  ARG_FLAGS, FLAG_EXPECT_FAILURE)
851

852 853 854 855 856 857 858 859 860 861 862 863
# define DO_TEST_CAPS_ARCH_VER_FAILURE(name, arch, ver) \
    DO_TEST_CAPS_ARCH_VER_FULL(name, arch, ver, \
                               ARG_FLAGS, FLAG_EXPECT_FAILURE)

# define DO_TEST_CAPS_LATEST_FAILURE(name) \
    DO_TEST_CAPS_ARCH_LATEST_FAILURE(name, "x86_64")

# define DO_TEST_CAPS_VER_FAILURE(name, ver) \
    DO_TEST_CAPS_ARCH_VER_FAILURE(name, "x86_64", ver)

# define DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR(name, arch) \
    DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, \
864
                                  ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR)
865

866 867 868 869 870 871 872 873 874 875
# define DO_TEST_CAPS_ARCH_VER_PARSE_ERROR(name, arch, ver) \
    DO_TEST_CAPS_ARCH_VER_FULL(name, arch, ver, \
                               ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR)

# define DO_TEST_CAPS_LATEST_PARSE_ERROR(name) \
    DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR(name, "x86_64")

# define DO_TEST_CAPS_VER_PARSE_ERROR(name, ver) \
    DO_TEST_CAPS_ARCH_VER_PARSE_ERROR(name, "x86_64", ver)

876 877 878
# define DO_TEST_FULL(name, ...) \
    DO_TEST_INTERNAL(name, "", \
                     __VA_ARGS__, QEMU_CAPS_LAST)
879

880 881 882
/* All the following macros require an explicit QEMU_CAPS_* list
 * at the end of the argument list, or the NONE placeholder.
 * */
883
# define DO_TEST(name, ...) \
884
    DO_TEST_FULL(name, \
885
                 ARG_QEMU_CAPS, __VA_ARGS__)
886

887
# define DO_TEST_GIC(name, gic, ...) \
888
    DO_TEST_FULL(name, \
889
                 ARG_GIC, gic, \
890
                 ARG_QEMU_CAPS, __VA_ARGS__)
891

892
# define DO_TEST_FAILURE(name, ...) \
893 894
    DO_TEST_FULL(name, \
                 ARG_FLAGS, FLAG_EXPECT_FAILURE, \
895
                 ARG_QEMU_CAPS, __VA_ARGS__)
896

897
# define DO_TEST_PARSE_ERROR(name, ...) \
898
    DO_TEST_FULL(name, \
899
                 ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE, \
900
                 ARG_QEMU_CAPS, __VA_ARGS__)
901

902
# define NONE QEMU_CAPS_LAST
903

904 905 906
    /* Unset or set all envvars here that are copied in qemudBuildCommandLine
     * using ADD_ENV_COPY, otherwise these tests may fail due to unexpected
     * values for these envvars */
907 908 909 910 911 912 913 914 915
    g_setenv("PATH", "/bin", TRUE);
    g_setenv("USER", "test", TRUE);
    g_setenv("LOGNAME", "test", TRUE);
    g_setenv("HOME", "/home/test", TRUE);
    g_unsetenv("TMPDIR");
    g_unsetenv("LD_PRELOAD");
    g_unsetenv("LD_LIBRARY_PATH");
    g_unsetenv("QEMU_AUDIO_DRV");
    g_unsetenv("SDL_AUDIODRIVER");
916

917
    DO_TEST("minimal", NONE);
918 919
    DO_TEST("minimal-sandbox",
            QEMU_CAPS_SECCOMP_BLACKLIST);
920
    DO_TEST_PARSE_ERROR("minimal-no-memory", NONE);
921
    DO_TEST("minimal-msg-timestamp", QEMU_CAPS_MSG_TIMESTAMP);
922 923 924 925

    DO_TEST_CAPS_LATEST("genid");
    DO_TEST_CAPS_LATEST("genid-auto");

926
    DO_TEST("machine-aliases1", NONE);
927
    DO_TEST("machine-aliases2", QEMU_CAPS_KVM);
928
    DO_TEST("machine-core-on", NONE);
929
    driver.config->dumpGuestCore = true;
930
    DO_TEST("machine-core-off", NONE);
931
    driver.config->dumpGuestCore = false;
M
Michal Privoznik 已提交
932 933 934
    DO_TEST("machine-smm-opt",
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
935
            QEMU_CAPS_DEVICE_IOH3420,
M
Michal Privoznik 已提交
936 937 938
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_MACHINE_SMM_OPT,
            QEMU_CAPS_VIRTIO_SCSI);
939
    DO_TEST("machine-vmport-opt",
940
            QEMU_CAPS_MACHINE_VMPORT_OPT);
941 942 943
    DO_TEST("default-kvm-host-arch", NONE);
    DO_TEST("default-qemu-host-arch", NONE);
    DO_TEST("x86-kvm-32-on-64", NONE);
944 945 946
    DO_TEST("boot-cdrom", NONE);
    DO_TEST("boot-network", NONE);
    DO_TEST("boot-floppy", NONE);
947
    DO_TEST("boot-floppy-q35",
948
            QEMU_CAPS_DEVICE_IOH3420,
949
            QEMU_CAPS_ICH9_AHCI);
J
Ján Tomko 已提交
950 951
    DO_TEST("boot-multi", NONE);
    DO_TEST("boot-menu-enable", NONE);
952
    DO_TEST("boot-menu-enable-with-timeout",
953
            QEMU_CAPS_SPLASH_TIMEOUT);
954
    DO_TEST_PARSE_ERROR("boot-menu-enable-with-timeout", NONE);
955
    DO_TEST_PARSE_ERROR("boot-menu-enable-with-timeout-invalid", NONE);
J
Ján Tomko 已提交
956 957
    DO_TEST("boot-menu-disable", NONE);
    DO_TEST("boot-menu-disable-drive", NONE);
958
    DO_TEST_PARSE_ERROR("boot-dev+order",
959
            QEMU_CAPS_VIRTIO_BLK_SCSI);
960
    DO_TEST("boot-order",
961
            QEMU_CAPS_VIRTIO_BLK_SCSI);
962
    DO_TEST("boot-complex",
963
            QEMU_CAPS_VIRTIO_BLK_SCSI);
964
    DO_TEST("boot-strict",
965
            QEMU_CAPS_BOOT_STRICT,
966
            QEMU_CAPS_VIRTIO_BLK_SCSI);
967 968 969

    DO_TEST("reboot-timeout-disabled", QEMU_CAPS_REBOOT_TIMEOUT);
    DO_TEST("reboot-timeout-enabled", QEMU_CAPS_REBOOT_TIMEOUT);
970
    DO_TEST_PARSE_ERROR("reboot-timeout-enabled", NONE);
971

972
    DO_TEST("bios",
973
            QEMU_CAPS_DEVICE_ISA_SERIAL,
974
            QEMU_CAPS_SGA);
J
Ján Tomko 已提交
975
    DO_TEST("bios-nvram", NONE);
M
Michal Privoznik 已提交
976 977 978
    DO_TEST("bios-nvram-secure",
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
979
            QEMU_CAPS_DEVICE_IOH3420,
M
Michal Privoznik 已提交
980 981 982
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_MACHINE_SMM_OPT,
            QEMU_CAPS_VIRTIO_SCSI);
983 984 985 986 987 988 989

    /* Make sure all combinations of ACPI and UEFI behave as expected */
    DO_TEST("q35-acpi-uefi", NONE);
    DO_TEST_PARSE_ERROR("q35-noacpi-uefi", NONE);
    DO_TEST("q35-noacpi-nouefi", NONE);
    DO_TEST("q35-acpi-nouefi", NONE);

990
    DO_TEST("clock-utc", NONE);
991
    DO_TEST("clock-localtime", NONE);
J
Ján Tomko 已提交
992 993 994 995
    DO_TEST("clock-localtime-basis-localtime", NONE);
    DO_TEST("clock-variable", NONE);
    DO_TEST("clock-france", NONE);
    DO_TEST("clock-hpet-off", NONE);
J
Ján Tomko 已提交
996
    DO_TEST("clock-catchup", QEMU_CAPS_KVM_PIT_TICK_POLICY);
997 998
    DO_TEST("cpu-kvmclock", NONE);
    DO_TEST("cpu-host-kvmclock", NONE);
999
    DO_TEST("kvmclock", QEMU_CAPS_KVM);
1000
    DO_TEST("clock-timer-hyperv-rtc", QEMU_CAPS_KVM);
1001

1002 1003
    DO_TEST("cpu-eoi-disabled", NONE);
    DO_TEST("cpu-eoi-enabled", NONE);
J
Ján Tomko 已提交
1004
    DO_TEST("controller-order",
1005 1006 1007 1008 1009 1010
            QEMU_CAPS_KVM,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_CCID_PASSTHRU,
            QEMU_CAPS_SPICE,
            QEMU_CAPS_HDA_DUPLEX,
            QEMU_CAPS_USB_HUB,
1011
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1012
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1013
    DO_TEST_CAPS_VER("eoi-disabled", "2.7.0");
1014
    DO_TEST_CAPS_VER("eoi-disabled", "4.0.0");
1015 1016
    DO_TEST_CAPS_LATEST("eoi-disabled");
    DO_TEST_CAPS_VER("eoi-enabled", "2.7.0");
1017
    DO_TEST_CAPS_VER("eoi-enabled", "4.0.0");
1018 1019
    DO_TEST_CAPS_LATEST("eoi-enabled");
    DO_TEST_CAPS_VER("pv-spinlock-disabled", "2.7.0");
1020
    DO_TEST_CAPS_VER("pv-spinlock-disabled", "4.0.0");
1021 1022
    DO_TEST_CAPS_LATEST("pv-spinlock-disabled");
    DO_TEST_CAPS_VER("pv-spinlock-enabled", "2.7.0");
1023
    DO_TEST_CAPS_VER("pv-spinlock-enabled", "4.0.0");
1024 1025
    DO_TEST_CAPS_LATEST("pv-spinlock-enabled");
    DO_TEST_CAPS_VER("kvmclock+eoi-disabled", "2.7.0");
1026
    DO_TEST_CAPS_VER("kvmclock+eoi-disabled", "4.0.0");
1027
    DO_TEST_CAPS_LATEST("kvmclock+eoi-disabled");
1028

1029 1030 1031 1032 1033 1034
    DO_TEST_CAPS_VER("hyperv", "4.0.0");
    DO_TEST_CAPS_LATEST("hyperv");
    DO_TEST_CAPS_VER("hyperv-off", "4.0.0");
    DO_TEST_CAPS_LATEST("hyperv-off");
    DO_TEST_CAPS_VER("hyperv-panic", "4.0.0");
    DO_TEST_CAPS_LATEST("hyperv-panic");
1035
    DO_TEST_CAPS_LATEST("hyperv-stimer-direct");
1036

1037 1038 1039
    DO_TEST("kvm-features", NONE);
    DO_TEST("kvm-features-off", NONE);

1040 1041 1042
    DO_TEST("pmu-feature", NONE);
    DO_TEST("pmu-feature-off", NONE);

1043 1044 1045
    DO_TEST("pages-discard",
            QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
1046 1047 1048 1049
    DO_TEST("pages-discard-hugepages",
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
1050 1051 1052 1053
    DO_TEST("pages-dimm-discard",
            QEMU_CAPS_DEVICE_PC_DIMM,
            QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
1054 1055
    DO_TEST("hugepages-default", QEMU_CAPS_OBJECT_MEMORY_FILE);
    DO_TEST("hugepages-default-2M", QEMU_CAPS_OBJECT_MEMORY_FILE);
1056
    DO_TEST("hugepages-default-system-size", QEMU_CAPS_OBJECT_MEMORY_FILE);
1057
    DO_TEST_PARSE_ERROR("hugepages-default-1G-nodeset-2M", NONE);
1058
    DO_TEST("hugepages-nodeset", QEMU_CAPS_OBJECT_MEMORY_FILE);
1059 1060 1061 1062
    DO_TEST_PARSE_ERROR("hugepages-nodeset-nonexist",
                        QEMU_CAPS_DEVICE_PC_DIMM,
                        QEMU_CAPS_OBJECT_MEMORY_FILE,
                        QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
1063
    DO_TEST("hugepages-numa-default",
1064
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1065 1066 1067
    DO_TEST("hugepages-numa-default-2M",
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1068
    DO_TEST("hugepages-numa-default-dimm",
1069
            QEMU_CAPS_DEVICE_PC_DIMM,
J
Ján Tomko 已提交
1070
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1071
    DO_TEST("hugepages-numa-nodeset",
A
Andrea Bolognani 已提交
1072
            QEMU_CAPS_OBJECT_MEMORY_RAM,
1073
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1074 1075
    DO_TEST("hugepages-numa-nodeset-part",
            QEMU_CAPS_OBJECT_MEMORY_RAM,
1076
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1077 1078 1079
    DO_TEST_PARSE_ERROR("hugepages-numa-nodeset-nonexist",
                        QEMU_CAPS_OBJECT_MEMORY_RAM,
                        QEMU_CAPS_OBJECT_MEMORY_FILE);
A
Andrea Bolognani 已提交
1080 1081 1082
    DO_TEST("hugepages-shared",
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1083
    DO_TEST_PARSE_ERROR("hugepages-memaccess-invalid", NONE);
1084 1085 1086
    DO_TEST("hugepages-memaccess", QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_DEVICE_PC_DIMM,
            QEMU_CAPS_NUMA);
1087 1088 1089
    DO_TEST("hugepages-memaccess2", QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_DEVICE_PC_DIMM,
            QEMU_CAPS_NUMA);
1090 1091 1092
    DO_TEST_PARSE_ERROR("hugepages-memaccess3",
                        QEMU_CAPS_OBJECT_MEMORY_RAM,
                        QEMU_CAPS_OBJECT_MEMORY_FILE);
1093
    DO_TEST_CAPS_LATEST("hugepages-nvdimm");
1094
    DO_TEST("nosharepages", QEMU_CAPS_MEM_MERGE);
1095
    DO_TEST("disk-cdrom", NONE);
1096
    DO_TEST_CAPS_VER("disk-cdrom", "2.12.0");
1097
    DO_TEST_CAPS_LATEST("disk-cdrom");
1098
    DO_TEST_CAPS_LATEST("disk-cdrom-empty-network-invalid");
1099
    DO_TEST_CAPS_LATEST("disk-cdrom-bus-other");
1100
    DO_TEST("disk-iscsi", NONE);
1101
    DO_TEST("disk-cdrom-network", QEMU_CAPS_KVM);
1102
    DO_TEST_CAPS_VER("disk-cdrom-network", "2.12.0");
1103
    DO_TEST_CAPS_LATEST("disk-cdrom-network");
1104
    DO_TEST("disk-cdrom-tray",
1105
            QEMU_CAPS_VIRTIO_TX_ALG);
1106
    DO_TEST_CAPS_VER("disk-cdrom-tray", "2.12.0");
1107
    DO_TEST_CAPS_LATEST("disk-cdrom-tray");
1108
    DO_TEST("disk-floppy", NONE);
1109
    DO_TEST_CAPS_VER("disk-floppy", "2.12.0");
1110
    DO_TEST_CAPS_LATEST("disk-floppy");
1111
    DO_TEST_CAPS_VER("disk-floppy-q35-2_9", "2.12.0");
1112
    DO_TEST_CAPS_LATEST("disk-floppy-q35-2_9");
1113
    DO_TEST_CAPS_VER("disk-floppy-q35-2_11", "2.12.0");
1114
    DO_TEST_CAPS_LATEST("disk-floppy-q35-2_11");
1115 1116
    DO_TEST_FAILURE("disk-floppy-pseries",
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
1117
    DO_TEST("disk-floppy-tray", NONE);
1118
    DO_TEST("disk-virtio-s390",
1119
            QEMU_CAPS_VIRTIO_S390);
1120
    DO_TEST("disk-virtio", NONE);
1121
    DO_TEST("disk-virtio-ccw",
1122
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1123
    DO_TEST("disk-virtio-ccw-many",
1124
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1125 1126 1127 1128
    DO_TEST("disk-virtio-s390-zpci",
            QEMU_CAPS_DEVICE_ZPCI,
            QEMU_CAPS_CCW,
            QEMU_CAPS_VIRTIO_S390);
1129
    DO_TEST("disk-order", QEMU_CAPS_VIRTIO_BLK_SCSI);
1130
    DO_TEST("disk-virtio-queues",
L
Lin Ma 已提交
1131
            QEMU_CAPS_VIRTIO_BLK_NUM_QUEUES);
1132 1133 1134
    DO_TEST("disk-boot-disk", NONE);
    DO_TEST("disk-boot-cdrom", NONE);
    DO_TEST("floppy-drive-fat", NONE);
1135
    DO_TEST_CAPS_VER("floppy-drive-fat", "2.12.0");
1136
    DO_TEST_CAPS_LATEST("floppy-drive-fat");
1137
    DO_TEST("disk-readonly-disk", NONE);
1138
    DO_TEST_CAPS_VER("disk-readonly-disk", "2.12.0");
1139
    DO_TEST_CAPS_LATEST("disk-readonly-disk");
1140 1141 1142 1143
    DO_TEST("disk-fmt-qcow", NONE);
    DO_TEST_PARSE_ERROR("disk-fmt-cow", NONE);
    DO_TEST_PARSE_ERROR("disk-fmt-dir", NONE);
    DO_TEST_PARSE_ERROR("disk-fmt-iso", NONE);
1144
    DO_TEST_CAPS_VER("disk-shared", "2.12.0");
1145
    DO_TEST_CAPS_LATEST("disk-shared");
1146 1147
    DO_TEST_PARSE_ERROR("disk-shared-qcow", NONE);
    DO_TEST("disk-error-policy", NONE);
1148
    DO_TEST_CAPS_VER("disk-error-policy", "2.12.0");
1149
    DO_TEST_CAPS_LATEST("disk-error-policy");
1150 1151
    DO_TEST_CAPS_ARCH_VER("disk-error-policy-s390x", "s390x", "2.12.0");
    DO_TEST_CAPS_ARCH_LATEST("disk-error-policy-s390x", "s390x");
1152
    DO_TEST_CAPS_VER("disk-cache", "1.5.3");
1153 1154
    DO_TEST_CAPS_VER("disk-cache", "2.6.0");
    DO_TEST_CAPS_VER("disk-cache", "2.7.0");
1155
    DO_TEST_CAPS_VER("disk-cache", "2.12.0");
1156
    DO_TEST_CAPS_LATEST("disk-cache");
1157
    DO_TEST("disk-network-nbd", NONE);
1158
    DO_TEST_CAPS_VER("disk-network-nbd", "2.12.0");
1159
    DO_TEST_CAPS_LATEST("disk-network-nbd");
1160
    DO_TEST("disk-network-iscsi", QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_BLOCK);
1161 1162 1163 1164
    DO_TEST("disk-network-iscsi-modern",
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_BLOCK,
            QEMU_CAPS_ISCSI_PASSWORD_SECRET);
1165
    DO_TEST_CAPS_VER("disk-network-iscsi", "2.12.0");
1166
    DO_TEST_CAPS_LATEST("disk-network-iscsi");
1167 1168 1169 1170
    DO_TEST_PARSE_ERROR("disk-network-iscsi-auth-secrettype-invalid", NONE);
    DO_TEST_PARSE_ERROR("disk-network-iscsi-auth-wrong-secrettype", NONE);
    DO_TEST_PARSE_ERROR("disk-network-source-auth-both", NONE);
    DO_TEST("disk-network-gluster",
1171
            QEMU_CAPS_GLUSTER_DEBUG_LEVEL);
1172
    DO_TEST_CAPS_VER("disk-network-gluster", "2.12.0");
1173
    DO_TEST_CAPS_LATEST("disk-network-gluster");
1174
    DO_TEST_CAPS_VER("disk-network-rbd", "2.5.0");
1175
    DO_TEST_CAPS_VER("disk-network-rbd", "2.12.0");
1176 1177
    DO_TEST_CAPS_LATEST("disk-network-rbd");
    DO_TEST_FAILURE("disk-network-rbd-no-colon", NONE);
1178
    DO_TEST("disk-network-sheepdog", NONE);
1179
    DO_TEST_CAPS_VER("disk-network-sheepdog", "2.12.0");
1180
    DO_TEST_CAPS_LATEST("disk-network-sheepdog");
1181
    DO_TEST("disk-network-source-auth", NONE);
1182
    DO_TEST_CAPS_VER("disk-network-source-auth", "2.12.0");
1183
    DO_TEST_CAPS_LATEST("disk-network-source-auth");
1184
    DO_TEST("disk-network-vxhs", QEMU_CAPS_VXHS);
1185
    driver.config->vxhsTLS = 1;
1186
    DO_TEST("disk-network-tlsx509", QEMU_CAPS_VXHS,
1187
            QEMU_CAPS_OBJECT_TLS_CREDS_X509, QEMU_CAPS_NBD_TLS);
1188
    DO_TEST_CAPS_VER("disk-network-tlsx509", "2.12.0");
1189
    DO_TEST_CAPS_LATEST("disk-network-tlsx509");
1190
    DO_TEST_CAPS_LATEST("disk-network-http");
1191 1192
    driver.config->vxhsTLS = 0;
    VIR_FREE(driver.config->vxhsTLSx509certdir);
1193
    DO_TEST("disk-no-boot", NONE);
1194
    DO_TEST_CAPS_LATEST("disk-nvme");
1195
    DO_TEST_PARSE_ERROR("disk-device-lun-type-invalid",
1196
                        QEMU_CAPS_VIRTIO_SCSI);
1197
    DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-attaching-partition-nosupport");
1198
    DO_TEST_FAILURE("disk-usb-nosupport", NONE);
1199
    DO_TEST("disk-usb-device",
1200
            QEMU_CAPS_DEVICE_USB_STORAGE);
1201
    DO_TEST("disk-usb-device-removable",
1202
            QEMU_CAPS_DEVICE_USB_STORAGE,
1203
            QEMU_CAPS_USB_STORAGE_REMOVABLE);
1204
    DO_TEST_FAILURE("disk-usb-pci",
1205
                    QEMU_CAPS_DEVICE_USB_STORAGE);
1206
    DO_TEST_CAPS_LATEST("disk-scsi");
1207 1208
    DO_TEST_CAPS_VER("disk-scsi-device-auto", "1.5.3");
    DO_TEST_CAPS_LATEST("disk-scsi-device-auto");
1209
    DO_TEST("disk-scsi-disk-split",
1210
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI);
1211
    DO_TEST("disk-scsi-disk-wwn",
1212
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_DISK_WWN);
1213
    DO_TEST("disk-scsi-disk-vpd",
1214
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_DISK_WWN);
1215
    DO_TEST_PARSE_ERROR("disk-scsi-disk-vpd-build-error",
1216
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_DISK_WWN);
1217
    DO_TEST_CAPS_LATEST("controller-virtio-scsi");
1218
    DO_TEST("disk-sata-device",
1219
            QEMU_CAPS_ICH9_AHCI);
J
Ján Tomko 已提交
1220
    DO_TEST("disk-aio", NONE);
1221
    DO_TEST_CAPS_VER("disk-aio", "2.12.0");
1222
    DO_TEST_CAPS_LATEST("disk-aio");
H
Han Han 已提交
1223
    DO_TEST_CAPS_LATEST("disk-aio-io_uring");
1224 1225
    DO_TEST("disk-source-pool", NONE);
    DO_TEST("disk-source-pool-mode", NONE);
1226
    DO_TEST("disk-ioeventfd",
1227
            QEMU_CAPS_VIRTIO_IOEVENTFD,
1228
            QEMU_CAPS_VIRTIO_TX_ALG,
1229
            QEMU_CAPS_VIRTIO_BLK_SCSI);
1230
    DO_TEST("disk-copy_on_read",
1231
            QEMU_CAPS_VIRTIO_TX_ALG,
1232
            QEMU_CAPS_VIRTIO_BLK_SCSI);
1233
    DO_TEST_CAPS_VER("disk-copy_on_read", "2.12.0");
1234
    DO_TEST_CAPS_LATEST("disk-copy_on_read");
1235 1236
    DO_TEST_CAPS_VER("disk-discard", "4.1.0");
    DO_TEST_CAPS_LATEST("disk-discard");
1237
    DO_TEST_CAPS_VER("disk-detect-zeroes", "2.12.0");
1238
    DO_TEST_CAPS_LATEST("disk-detect-zeroes");
1239
    DO_TEST("disk-snapshot", NONE);
1240 1241
    DO_TEST_PARSE_ERROR("disk-same-targets",
                        QEMU_CAPS_SCSI_LSI,
1242
                        QEMU_CAPS_DEVICE_USB_STORAGE);
1243
    DO_TEST_PARSE_ERROR("disk-address-conflict",
1244 1245
                        QEMU_CAPS_ICH9_AHCI);
    DO_TEST_PARSE_ERROR("disk-hostdev-scsi-address-conflict",
1246
                        QEMU_CAPS_VIRTIO_SCSI);
1247
    DO_TEST_PARSE_ERROR("hostdevs-drive-address-conflict",
1248
                        QEMU_CAPS_VIRTIO_SCSI);
1249
    DO_TEST("event_idx",
1250 1251
            QEMU_CAPS_VIRTIO_BLK_EVENT_IDX,
            QEMU_CAPS_VIRTIO_NET_EVENT_IDX,
1252
            QEMU_CAPS_VIRTIO_BLK_SCSI);
1253
    DO_TEST("virtio-lun",
1254
            QEMU_CAPS_VIRTIO_BLK_SCSI);
1255
    DO_TEST("disk-scsi-lun-passthrough",
1256
            QEMU_CAPS_SCSI_BLOCK,
1257
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI);
1258
    DO_TEST("disk-serial",
1259
            QEMU_CAPS_KVM);
1260 1261 1262 1263 1264 1265 1266 1267
    DO_TEST_PARSE_ERROR("disk-fdc-incompatible-address",
                        NONE);
    DO_TEST_PARSE_ERROR("disk-ide-incompatible-address",
                        NONE);
    DO_TEST_PARSE_ERROR("disk-sata-incompatible-address",
                        QEMU_CAPS_ICH9_AHCI);
    DO_TEST_PARSE_ERROR("disk-scsi-incompatible-address",
                        QEMU_CAPS_VIRTIO_SCSI);
1268 1269 1270 1271
    DO_TEST_CAPS_VER("disk-backing-chains-index", "2.12.0");
    DO_TEST_CAPS_LATEST("disk-backing-chains-index");
    DO_TEST_CAPS_VER("disk-backing-chains-noindex", "2.12.0");
    DO_TEST_CAPS_LATEST("disk-backing-chains-noindex");
1272

1273 1274
    DO_TEST_CAPS_LATEST("disk-slices");

1275 1276 1277
    DO_TEST_CAPS_ARCH_VER("disk-arm-virtio-sd", "aarch64", "4.0.0");
    DO_TEST_CAPS_ARCH_LATEST("disk-arm-virtio-sd", "aarch64");

1278 1279 1280
    DO_TEST("graphics-egl-headless",
            QEMU_CAPS_EGL_HEADLESS,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1281 1282
    DO_TEST_CAPS_LATEST("graphics-egl-headless");
    DO_TEST_CAPS_LATEST("graphics-egl-headless-rendernode");
1283

1284 1285
    DO_TEST("graphics-vnc", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("graphics-vnc-socket", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1286 1287
    DO_TEST("graphics-vnc-websocket",
            QEMU_CAPS_VNC,
1288
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1289
    DO_TEST("graphics-vnc-policy", QEMU_CAPS_VNC,
1290 1291 1292 1293 1294
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("graphics-vnc-no-listen-attr", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("graphics-vnc-remove-generated-socket", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1295
    driver.config->vncAutoUnixSocket = true;
1296 1297
    DO_TEST("graphics-vnc-auto-socket-cfg", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1298
    driver.config->vncAutoUnixSocket = false;
1299 1300 1301 1302
    DO_TEST("graphics-vnc-socket", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("graphics-vnc-auto-socket", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("graphics-vnc-none", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1303 1304
    DO_TEST("graphics-vnc-socket-new-cmdline", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA, QEMU_CAPS_VNC_MULTI_SERVERS);
1305

1306 1307
    driver.config->vncSASL = 1;
    VIR_FREE(driver.config->vncSASLdir);
1308
    driver.config->vncSASLdir = g_strdup("/root/.sasl2");
1309
    DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1310 1311
    driver.config->vncTLS = 1;
    driver.config->vncTLSx509verify = 1;
1312
    DO_TEST("graphics-vnc-tls", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1313 1314
    DO_TEST_CAPS_VER("graphics-vnc-tls", "2.4.0");
    DO_TEST_CAPS_LATEST("graphics-vnc-tls");
1315
    driver.config->vncTLSx509secretUUID = g_strdup("6fd3f62d-9fe7-4a4e-a869-7acd6376d8ea");
1316 1317
    DO_TEST_CAPS_LATEST("graphics-vnc-tls-secret");
    VIR_FREE(driver.config->vncTLSx509secretUUID);
1318
    driver.config->vncSASL = driver.config->vncTLSx509verify = driver.config->vncTLS = 0;
1319 1320
    VIR_FREE(driver.config->vncSASLdir);
    VIR_FREE(driver.config->vncTLSx509certdir);
1321 1322 1323 1324
    DO_TEST("graphics-vnc-egl-headless",
            QEMU_CAPS_VNC,
            QEMU_CAPS_EGL_HEADLESS,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1325

J
Ján Tomko 已提交
1326 1327
    DO_TEST("graphics-sdl",
            QEMU_CAPS_DEVICE_VGA);
1328
    DO_TEST_CAPS_LATEST_PARSE_ERROR("graphics-sdl-egl-headless");
J
Ján Tomko 已提交
1329
    DO_TEST("graphics-sdl-fullscreen",
1330
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1331
    DO_TEST("graphics-spice",
1332
            QEMU_CAPS_SPICE,
1333 1334
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
1335
    DO_TEST("graphics-spice-no-args",
1336
            QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1337
    driver.config->spiceSASL = 1;
1338
    driver.config->spiceSASLdir = g_strdup("/root/.sasl2");
1339
    DO_TEST("graphics-spice-sasl",
1340
            QEMU_CAPS_SPICE,
1341 1342 1343
            QEMU_CAPS_DEVICE_QXL);
    VIR_FREE(driver.config->spiceSASLdir);
    driver.config->spiceSASL = 0;
1344
    DO_TEST("graphics-spice-agentmouse",
1345
            QEMU_CAPS_DEVICE_QXL,
1346
            QEMU_CAPS_SPICE,
1347
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1348
    DO_TEST("graphics-spice-compression",
1349
            QEMU_CAPS_SPICE,
1350
            QEMU_CAPS_DEVICE_QXL);
1351
    DO_TEST("graphics-spice-timeout",
1352
            QEMU_CAPS_KVM,
1353
            QEMU_CAPS_SPICE,
1354 1355
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_DEVICE_VGA);
1356
    DO_TEST("graphics-spice-qxl-vga",
1357
            QEMU_CAPS_SPICE,
1358
            QEMU_CAPS_DEVICE_QXL);
1359
    DO_TEST("graphics-spice-usb-redir",
1360
            QEMU_CAPS_SPICE,
1361 1362 1363 1364
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1365
    DO_TEST("graphics-spice-agent-file-xfer",
1366
            QEMU_CAPS_SPICE,
1367 1368
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
1369 1370
    DO_TEST("graphics-spice-socket",
            QEMU_CAPS_SPICE,
1371 1372
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1373 1374
    DO_TEST("graphics-spice-auto-socket",
            QEMU_CAPS_SPICE,
1375 1376
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1377 1378 1379
    driver.config->spiceAutoUnixSocket = true;
    DO_TEST("graphics-spice-auto-socket-cfg",
            QEMU_CAPS_SPICE,
1380 1381
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1382
    driver.config->spiceAutoUnixSocket = false;
1383 1384 1385 1386
    DO_TEST("graphics-spice-egl-headless",
            QEMU_CAPS_SPICE,
            QEMU_CAPS_EGL_HEADLESS,
            QEMU_CAPS_DEVICE_QXL);
1387
    DO_TEST_CAPS_LATEST_PARSE_ERROR("graphics-spice-invalid-egl-headless");
1388
    DO_TEST_CAPS_LATEST("graphics-spice-gl-auto-rendernode");
1389

1390 1391 1392
    DO_TEST("input-usbmouse", NONE);
    DO_TEST("input-usbtablet", NONE);
    DO_TEST("misc-acpi", NONE);
1393 1394 1395
    DO_TEST("misc-disable-s3", QEMU_CAPS_PIIX_DISABLE_S3);
    DO_TEST("misc-disable-suspends", QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4);
    DO_TEST("misc-enable-s4", QEMU_CAPS_PIIX_DISABLE_S4);
1396
    DO_TEST_PARSE_ERROR("misc-enable-s4", NONE);
1397
    DO_TEST("misc-no-reboot", NONE);
1398
    DO_TEST("misc-uuid", NONE);
1399
    DO_TEST_PARSE_ERROR("vhost_queues-invalid", NONE);
1400
    DO_TEST("net-vhostuser", QEMU_CAPS_CHARDEV_FD_PASS);
1401 1402
    DO_TEST_CAPS_VER("net-vhostuser", "2.5.0");
    DO_TEST_CAPS_LATEST("net-vhostuser");
1403
    DO_TEST("net-vhostuser-multiq",
J
Ján Tomko 已提交
1404 1405
            QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
    DO_TEST_FAILURE("net-vhostuser-multiq", NONE);
1406 1407
    DO_TEST_FAILURE("net-vhostuser-fail",
                    QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
1408
    DO_TEST("net-user", NONE);
1409
    DO_TEST_CAPS_ARCH_VER_FULL("net-user", "x86_64", "4.0.0", ARG_FLAGS, FLAG_SLIRP_HELPER);
J
Ján Tomko 已提交
1410
    DO_TEST("net-user-addr", NONE);
1411 1412
    DO_TEST("net-virtio", NONE);
    DO_TEST("net-virtio-device",
1413 1414 1415
            QEMU_CAPS_VIRTIO_TX_ALG);
    DO_TEST("net-virtio-disable-offloads", NONE);
    DO_TEST("net-virtio-netdev", NONE);
1416
    DO_TEST("net-virtio-s390",
1417
            QEMU_CAPS_VIRTIO_S390);
1418
    DO_TEST("net-virtio-ccw",
1419
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1420 1421 1422
    DO_TEST("net-virtio-rxtxqueuesize",
            QEMU_CAPS_VIRTIO_NET_RX_QUEUE_SIZE,
            QEMU_CAPS_VIRTIO_NET_TX_QUEUE_SIZE);
1423
    DO_TEST_PARSE_ERROR("net-virtio-rxqueuesize-invalid-size", NONE);
1424 1425 1426 1427
    DO_TEST("net-virtio-teaming",
            QEMU_CAPS_VIRTIO_NET_FAILOVER,
            QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST_PARSE_ERROR("net-virtio-teaming", NONE);
1428 1429
    DO_TEST("net-eth", NONE);
    DO_TEST("net-eth-ifname", NONE);
1430
    DO_TEST("net-eth-names", NONE);
1431
    DO_TEST("net-eth-hostip", NONE);
1432
    DO_TEST("net-eth-unmanaged-tap", NONE);
1433 1434
    DO_TEST("net-client", NONE);
    DO_TEST("net-server", NONE);
1435
    DO_TEST("net-many-models", NONE);
1436
    DO_TEST("net-mcast", NONE);
1437
    DO_TEST("net-udp", NONE);
1438 1439 1440
    DO_TEST("net-hostdev", QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST("net-hostdev-bootorder", QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST("net-hostdev-multidomain", QEMU_CAPS_DEVICE_VFIO_PCI);
1441 1442
    DO_TEST("net-hostdev-vfio",
            QEMU_CAPS_DEVICE_VFIO_PCI);
1443
    DO_TEST("net-hostdev-vfio-multidomain",
1444
            QEMU_CAPS_DEVICE_VFIO_PCI);
1445 1446 1447
    DO_TEST_FAILURE("net-hostdev-fail",
                    QEMU_CAPS_DEVICE_VFIO_PCI);

1448 1449 1450
    DO_TEST("hostdev-pci-multifunction",
            QEMU_CAPS_KVM,
            QEMU_CAPS_DEVICE_VFIO_PCI);
1451

1452 1453 1454 1455
    DO_TEST("hostdev-pci-address-unassigned",
            QEMU_CAPS_KVM,
            QEMU_CAPS_DEVICE_VFIO_PCI);

1456 1457
    DO_TEST("serial-file-log",
            QEMU_CAPS_CHARDEV_FILE_APPEND,
1458
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1459
            QEMU_CAPS_CHARDEV_LOGFILE);
1460
    DO_TEST("serial-spiceport",
1461
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1462
            QEMU_CAPS_DEVICE_QXL,
1463
            QEMU_CAPS_SPICE,
1464
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1465
    DO_TEST("serial-spiceport-nospice", NONE);
1466

1467 1468 1469 1470
    DO_TEST("console-compat",
            QEMU_CAPS_DEVICE_ISA_SERIAL);
    DO_TEST("console-compat-auto",
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1471 1472

    DO_TEST("serial-vc-chardev",
1473
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1474
    DO_TEST("serial-pty-chardev",
1475
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1476
    DO_TEST("serial-dev-chardev",
1477
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1478
    DO_TEST("serial-dev-chardev-iobase",
1479
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1480
    DO_TEST("serial-file-chardev",
1481
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1482
            QEMU_CAPS_CHARDEV_FILE_APPEND);
1483
    DO_TEST("serial-unix-chardev",
1484
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1485
    DO_TEST_CAPS_LATEST("serial-unix-chardev");
1486
    DO_TEST_PARSE_ERROR("serial-unix-missing-source", NONE);
1487
    DO_TEST("serial-tcp-chardev",
1488
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1489
    DO_TEST("serial-udp-chardev",
1490
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1491
    DO_TEST("serial-tcp-telnet-chardev",
1492
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1493 1494
    driver.config->chardevTLS = 1;
    DO_TEST("serial-tcp-tlsx509-chardev",
1495
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1496
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1497 1498
    driver.config->chardevTLSx509verify = 1;
    DO_TEST("serial-tcp-tlsx509-chardev-verify",
1499
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1500 1501
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
    driver.config->chardevTLSx509verify = 0;
1502
    DO_TEST("serial-tcp-tlsx509-chardev-notls",
1503
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1504
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1505
    VIR_FREE(driver.config->chardevTLSx509certdir);
1506 1507
    driver.config->chardevTLSx509certdir = g_strdup("/etc/pki/libvirt-chardev");
    driver.config->chardevTLSx509secretUUID = g_strdup("6fd3f62d-9fe7-4a4e-a869-7acd6376d8ea");
1508 1509
    DO_TEST("serial-tcp-tlsx509-secret-chardev",
            QEMU_CAPS_OBJECT_SECRET,
1510
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1511
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1512 1513
    driver.config->chardevTLS = 0;
    VIR_FREE(driver.config->chardevTLSx509certdir);
1514
    DO_TEST("serial-many-chardev",
1515 1516 1517
            QEMU_CAPS_DEVICE_ISA_SERIAL);
    DO_TEST("parallel-tcp-chardev", NONE);
    DO_TEST("parallel-parport-chardev", NONE);
J
Ján Tomko 已提交
1518 1519
    DO_TEST_CAPS_VER("parallel-unix-chardev", "2.5.0");
    DO_TEST_CAPS_LATEST("parallel-unix-chardev");
1520
    DO_TEST("console-compat-chardev",
1521
            QEMU_CAPS_DEVICE_ISA_SERIAL);
M
Michal Privoznik 已提交
1522 1523
    DO_TEST("pci-serial-dev-chardev",
            QEMU_CAPS_DEVICE_PCI_SERIAL);
1524

1525
    DO_TEST("channel-guestfwd", NONE);
J
Ján Tomko 已提交
1526 1527
    DO_TEST_CAPS_VER("channel-unix-guestfwd", "2.5.0");
    DO_TEST_CAPS_LATEST("channel-unix-guestfwd");
1528 1529 1530 1531 1532 1533
    DO_TEST("channel-virtio", NONE);
    DO_TEST("channel-virtio-state", NONE);
    DO_TEST("channel-virtio-auto", NONE);
    DO_TEST("channel-virtio-autoassign", NONE);
    DO_TEST("channel-virtio-autoadd", NONE);
    DO_TEST("console-virtio", NONE);
1534
    DO_TEST("console-virtio-many",
1535
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1536
    DO_TEST("console-virtio-s390",
1537
            QEMU_CAPS_VIRTIO_S390);
1538
    DO_TEST("console-virtio-ccw",
1539
            QEMU_CAPS_CCW,
1540
            QEMU_CAPS_VIRTIO_S390);
J
Ján Tomko 已提交
1541 1542
    DO_TEST_CAPS_VER("console-virtio-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("console-virtio-unix");
1543
    DO_TEST("console-sclp",
1544
            QEMU_CAPS_VIRTIO_S390,
1545
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
1546
    DO_TEST("channel-spicevmc",
1547
            QEMU_CAPS_SPICE,
1548
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1549
    DO_TEST("channel-virtio-default",
1550
            QEMU_CAPS_SPICE);
1551
    DO_TEST("channel-virtio-unix", NONE);
1552

1553
    DO_TEST("smartcard-host",
1554
            QEMU_CAPS_CCID_EMULATED);
1555
    DO_TEST("smartcard-host-certificates",
1556
            QEMU_CAPS_CCID_EMULATED);
1557 1558
    DO_TEST("smartcard-host-certificates-database",
            QEMU_CAPS_CCID_EMULATED);
1559
    DO_TEST("smartcard-passthrough-tcp",
1560
            QEMU_CAPS_CCID_PASSTHRU);
1561
    DO_TEST("smartcard-passthrough-spicevmc",
1562
            QEMU_CAPS_CCID_PASSTHRU);
1563
    DO_TEST("smartcard-controller",
1564
            QEMU_CAPS_CCID_EMULATED);
J
Ján Tomko 已提交
1565 1566
    DO_TEST_CAPS_VER("smartcard-passthrough-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("smartcard-passthrough-unix");
1567

1568 1569 1570 1571 1572 1573 1574 1575
    DO_TEST("chardev-reconnect",
            QEMU_CAPS_CHARDEV_RECONNECT,
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD,
            QEMU_CAPS_CCID_PASSTHRU);
    DO_TEST_PARSE_ERROR("chardev-reconnect-invalid-timeout",
                        QEMU_CAPS_CHARDEV_RECONNECT);
1576 1577
    DO_TEST_PARSE_ERROR("chardev-reconnect-generated-path",
                        QEMU_CAPS_CHARDEV_RECONNECT);
1578

1579
    DO_TEST("usb-controller", NONE);
1580
    DO_TEST("usb-piix3-controller",
1581
            QEMU_CAPS_PIIX3_USB_UHCI);
1582
    DO_TEST("usb-ich9-ehci-addr",
1583
            QEMU_CAPS_ICH9_USB_EHCI1);
1584
    DO_TEST("input-usbmouse-addr", NONE);
1585
    DO_TEST("usb-ich9-companion",
1586
            QEMU_CAPS_ICH9_USB_EHCI1);
1587
    DO_TEST_PARSE_ERROR("usb-ich9-no-companion",
1588
            QEMU_CAPS_ICH9_USB_EHCI1);
1589
    DO_TEST("usb-ich9-autoassign",
1590
            QEMU_CAPS_ICH9_USB_EHCI1,
1591
            QEMU_CAPS_USB_HUB);
1592
    DO_TEST("usb-hub",
1593
            QEMU_CAPS_USB_HUB);
1594
    DO_TEST("usb-hub-autoadd",
1595
            QEMU_CAPS_USB_HUB);
1596
    DO_TEST("usb-hub-autoadd-deluxe",
1597
            QEMU_CAPS_USB_HUB);
J
Ján Tomko 已提交
1598
    DO_TEST_PARSE_ERROR("usb-hub-conflict",
1599
            QEMU_CAPS_USB_HUB);
1600
    DO_TEST_PARSE_ERROR("usb-hub-nonexistent",
1601
            QEMU_CAPS_USB_HUB);
J
Ján Tomko 已提交
1602
    DO_TEST("usb-port-missing",
1603
            QEMU_CAPS_USB_HUB);
1604
    DO_TEST_FAILURE("usb-bus-missing",
1605
                    QEMU_CAPS_USB_HUB);
1606
    DO_TEST("usb-ports",
1607
            QEMU_CAPS_USB_HUB);
1608
    DO_TEST_PARSE_ERROR("usb-ports-out-of-range",
1609
            QEMU_CAPS_USB_HUB);
1610
    DO_TEST("usb-port-autoassign",
1611
            QEMU_CAPS_USB_HUB);
1612
    DO_TEST("usb-redir",
1613 1614 1615
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
1616
            QEMU_CAPS_SPICE);
1617
    DO_TEST("usb-redir-boot",
1618 1619 1620
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
1621
            QEMU_CAPS_SPICE);
1622
    DO_TEST("usb-redir-filter",
1623 1624 1625 1626
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE,
1627
            QEMU_CAPS_USB_REDIR_FILTER);
1628 1629
    DO_TEST("usb-redir-filter-version",
            QEMU_CAPS_USB_REDIR,
1630
            QEMU_CAPS_SPICE,
1631
            QEMU_CAPS_USB_REDIR_FILTER);
J
Ján Tomko 已提交
1632 1633
    DO_TEST_CAPS_VER("usb-redir-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("usb-redir-unix");
1634
    DO_TEST("usb1-usb2",
1635 1636 1637
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1);
1638 1639
    DO_TEST("usb-none", NONE);
    DO_TEST_PARSE_ERROR("usb-none-other", NONE);
1640 1641
    DO_TEST_PARSE_ERROR("usb-none-hub",
            QEMU_CAPS_USB_HUB);
1642
    DO_TEST_PARSE_ERROR("usb-none-usbtablet", NONE);
1643
    DO_TEST("usb-controller-default-q35",
1644
            QEMU_CAPS_DEVICE_IOH3420,
1645 1646 1647
            QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI);
1648
    DO_TEST_FAILURE("usb-controller-default-unavailable-q35",
1649
                    QEMU_CAPS_DEVICE_IOH3420,
1650
                    QEMU_CAPS_PCI_OHCI,
1651 1652
                    QEMU_CAPS_NEC_USB_XHCI);
    DO_TEST("usb-controller-explicit-q35",
1653
            QEMU_CAPS_DEVICE_IOH3420,
1654 1655 1656
            QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI);
1657
    DO_TEST_FAILURE("usb-controller-explicit-unavailable-q35",
1658
                    QEMU_CAPS_DEVICE_IOH3420,
1659
                    QEMU_CAPS_PCI_OHCI,
1660
                    QEMU_CAPS_PIIX3_USB_UHCI);
1661
    DO_TEST("usb-controller-xhci",
1662 1663 1664
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_NEC_USB_XHCI_PORTS);
1665
    DO_TEST("usb-xhci-autoassign",
1666 1667 1668
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_NEC_USB_XHCI_PORTS,
1669
            QEMU_CAPS_USB_HUB);
1670
    DO_TEST_PARSE_ERROR("usb-controller-xhci-limit",
1671 1672 1673
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_NEC_USB_XHCI_PORTS);
1674 1675 1676 1677
    DO_TEST("usb-controller-qemu-xhci", QEMU_CAPS_DEVICE_QEMU_XHCI);
    DO_TEST_FAILURE("usb-controller-qemu-xhci-unavailable", NONE);
    DO_TEST_PARSE_ERROR("usb-controller-qemu-xhci-limit",
                        QEMU_CAPS_DEVICE_QEMU_XHCI);
1678

1679 1680 1681
    DO_TEST("smbios", NONE);
    DO_TEST_PARSE_ERROR("smbios-date", NONE);
    DO_TEST_PARSE_ERROR("smbios-uuid-match", NONE);
1682
    DO_TEST("smbios-type-fwcfg", QEMU_CAPS_FW_CFG);
1683

1684
    DO_TEST("watchdog", NONE);
1685
    DO_TEST("watchdog-device", NONE);
1686
    DO_TEST("watchdog-dump", NONE);
1687
    DO_TEST("watchdog-injectnmi", NONE);
1688
    DO_TEST("watchdog-diag288", QEMU_CAPS_VIRTIO_S390);
1689 1690
    DO_TEST("balloon-device", NONE);
    DO_TEST("balloon-device-deflate",
1691
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1692
    DO_TEST("balloon-ccw-deflate",
1693
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1694
    DO_TEST("balloon-mmio-deflate",
J
Ján Tomko 已提交
1695
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1696
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1697
    DO_TEST("balloon-device-deflate-off",
1698
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1699 1700
    DO_TEST("balloon-device-auto", NONE);
    DO_TEST("balloon-device-period", NONE);
1701 1702
    DO_TEST("sound", NONE);
    DO_TEST("sound-device",
1703
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_HDA_MICRO,
1704
            QEMU_CAPS_HDA_OUTPUT,
1705 1706
            QEMU_CAPS_DEVICE_ICH9_INTEL_HDA,
            QEMU_CAPS_OBJECT_USB_AUDIO);
1707
    DO_TEST("fs9p", NONE);
1708
    DO_TEST_CAPS_LATEST("fs9p");
1709
    DO_TEST("fs9p-ccw",
1710
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1711
    DO_TEST_CAPS_ARCH_LATEST("fs9p-ccw", "s390x");
1712

1713
    DO_TEST("hostdev-usb-address", NONE);
1714
    DO_TEST("hostdev-usb-address-device", NONE);
1715
    DO_TEST("hostdev-usb-address-device-boot", NONE);
1716 1717
    DO_TEST("hostdev-pci-address", QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST("hostdev-pci-address-device", QEMU_CAPS_DEVICE_VFIO_PCI);
1718 1719
    DO_TEST("hostdev-vfio",
            QEMU_CAPS_DEVICE_VFIO_PCI);
1720
    DO_TEST("hostdev-vfio-multidomain",
1721
            QEMU_CAPS_DEVICE_VFIO_PCI);
1722 1723 1724 1725 1726 1727
    DO_TEST("hostdev-mdev-precreated",
            QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST_PARSE_ERROR("hostdev-mdev-src-address-invalid",
            QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST_PARSE_ERROR("hostdev-mdev-invalid-target-address",
            QEMU_CAPS_DEVICE_VFIO_PCI);
1728 1729 1730 1731 1732 1733 1734
    DO_TEST_CAPS_LATEST("hostdev-mdev-display-spice-opengl");
    DO_TEST_CAPS_LATEST("hostdev-mdev-display-spice-egl-headless");
    DO_TEST_CAPS_LATEST("hostdev-mdev-display-vnc");
    DO_TEST_CAPS_LATEST("hostdev-mdev-display-vnc-egl-headless");
    DO_TEST_PARSE_ERROR("hostdev-mdev-display-missing-graphics",
            QEMU_CAPS_DEVICE_VFIO_PCI,
            QEMU_CAPS_VFIO_PCI_DISPLAY);
1735
    DO_TEST_CAPS_LATEST("hostdev-mdev-display-ramfb");
1736 1737
    DO_TEST_PARSE_ERROR("hostdev-vfio-zpci-wrong-arch",
                        QEMU_CAPS_DEVICE_VFIO_PCI);
1738 1739 1740
    DO_TEST("hostdev-vfio-zpci",
            QEMU_CAPS_DEVICE_VFIO_PCI,
            QEMU_CAPS_DEVICE_ZPCI);
1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753
    DO_TEST("hostdev-vfio-zpci-multidomain-many",
            QEMU_CAPS_DEVICE_VFIO_PCI,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_ZPCI);
    DO_TEST("hostdev-vfio-zpci-autogenerate",
            QEMU_CAPS_DEVICE_VFIO_PCI,
            QEMU_CAPS_DEVICE_ZPCI);
    DO_TEST("hostdev-vfio-zpci-boundaries",
            QEMU_CAPS_DEVICE_VFIO_PCI,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_ZPCI);
    DO_TEST_PARSE_ERROR("hostdev-vfio-zpci",
                        QEMU_CAPS_DEVICE_VFIO_PCI);
1754
    DO_TEST("pci-rom", QEMU_CAPS_DEVICE_VFIO_PCI);
1755
    DO_TEST("pci-rom-disabled", NONE);
1756
    DO_TEST("pci-rom-disabled-invalid", NONE);
1757

1758 1759 1760 1761
    DO_TEST("hostdev-subsys-mdev-vfio-ccw",
            QEMU_CAPS_CCW,
            QEMU_CAPS_CCW_CSSID_UNRESTRICTED,
            QEMU_CAPS_DEVICE_VFIO_CCW);
1762 1763
    DO_TEST_CAPS_ARCH_LATEST("hostdev-subsys-mdev-vfio-ccw-boot",
                             "s390x");
1764 1765 1766
    DO_TEST_PARSE_ERROR("hostdev-subsys-mdev-vfio-ccw",
                        QEMU_CAPS_CCW,
                        QEMU_CAPS_CCW_CSSID_UNRESTRICTED);
1767 1768 1769 1770 1771 1772 1773 1774 1775
    DO_TEST_PARSE_ERROR("hostdev-subsys-mdev-vfio-ccw-duplicate-address",
            QEMU_CAPS_CCW,
            QEMU_CAPS_CCW_CSSID_UNRESTRICTED,
            QEMU_CAPS_DEVICE_VFIO_CCW);
    DO_TEST_PARSE_ERROR("hostdev-subsys-mdev-vfio-ccw-invalid-address",
            QEMU_CAPS_CCW,
            QEMU_CAPS_CCW_CSSID_UNRESTRICTED,
            QEMU_CAPS_DEVICE_VFIO_CCW);

B
Boris Fiuczynski 已提交
1776 1777
    DO_TEST_CAPS_ARCH_LATEST("hostdev-subsys-mdev-vfio-ap",
                             "s390x");
1778 1779
    DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("hostdev-subsys-mdev-vfio-ap-boot-fail",
                                         "s390x");
B
Boris Fiuczynski 已提交
1780

1781
    DO_TEST_FULL("restore-v2",
1782 1783
                 ARG_MIGRATE_FROM, "exec:cat",
                 ARG_MIGRATE_FD, 7,
1784
                 ARG_QEMU_CAPS, NONE);
1785
    DO_TEST_FULL("restore-v2-fd",
1786 1787
                 ARG_MIGRATE_FROM, "stdio",
                 ARG_MIGRATE_FD, 7,
1788
                 ARG_QEMU_CAPS, NONE);
1789
    DO_TEST_FULL("restore-v2-fd",
1790 1791
                 ARG_MIGRATE_FROM, "fd:7",
                 ARG_MIGRATE_FD, 7,
1792
                 ARG_QEMU_CAPS, NONE);
1793
    DO_TEST_FULL("migrate",
1794
                 ARG_MIGRATE_FROM, "tcp:10.0.0.1:5000",
1795
                 ARG_QEMU_CAPS, NONE);
1796

1797
    DO_TEST_FULL("migrate-numa-unaligned",
1798 1799
                 ARG_MIGRATE_FROM, "stdio",
                 ARG_MIGRATE_FD, 7,
1800
                 ARG_QEMU_CAPS,
A
Andrea Bolognani 已提交
1801 1802
                 QEMU_CAPS_NUMA,
                 QEMU_CAPS_OBJECT_MEMORY_RAM);
1803

1804 1805
    DO_TEST_CAPS_VER("qemu-ns", "4.0.0");
    DO_TEST_CAPS_LATEST("qemu-ns");
1806
    DO_TEST("qemu-ns-no-env", NONE);
1807
    DO_TEST("qemu-ns-alt", NONE);
1808

1809
    DO_TEST("smp", NONE);
1810
    DO_TEST("smp-dies", QEMU_CAPS_SMP_DIES);
1811

J
John Ferlan 已提交
1812
    DO_TEST("iothreads", QEMU_CAPS_OBJECT_IOTHREAD);
1813 1814
    DO_TEST("iothreads-ids", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-ids-partial", QEMU_CAPS_OBJECT_IOTHREAD);
1815
    DO_TEST_FAILURE("iothreads-nocap", NONE);
1816 1817
    DO_TEST("iothreads-disk", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-disk-virtio-ccw", QEMU_CAPS_OBJECT_IOTHREAD,
1818
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1819 1820
    DO_TEST_CAPS_LATEST("iothreads-virtio-scsi-pci");
    DO_TEST_CAPS_ARCH_LATEST("iothreads-virtio-scsi-ccw", "s390x");
J
John Ferlan 已提交
1821

1822 1823
    DO_TEST("cpu-topology1", NONE);
    DO_TEST("cpu-topology2", NONE);
1824
    DO_TEST("cpu-topology3", NONE);
1825 1826 1827 1828 1829 1830 1831 1832
    DO_TEST("cpu-minimum1", QEMU_CAPS_KVM);
    DO_TEST("cpu-minimum2", QEMU_CAPS_KVM);
    DO_TEST("cpu-exact1", QEMU_CAPS_KVM);
    DO_TEST("cpu-exact2", QEMU_CAPS_KVM);
    DO_TEST("cpu-exact2-nofallback", QEMU_CAPS_KVM);
    DO_TEST("cpu-fallback", QEMU_CAPS_KVM);
    DO_TEST_FAILURE("cpu-nofallback", QEMU_CAPS_KVM);
    DO_TEST("cpu-strict1", QEMU_CAPS_KVM);
1833
    DO_TEST("cpu-no-removed-features", QEMU_CAPS_KVM);
1834
    DO_TEST("cpu-numa1", NONE);
1835 1836
    DO_TEST("cpu-numa2", NONE);
    DO_TEST("cpu-numa-no-memory-element", NONE);
1837
    DO_TEST_PARSE_ERROR("cpu-numa3", NONE);
1838
    DO_TEST_PARSE_ERROR("cpu-numa-disjoint", NONE);
1839
    DO_TEST("cpu-numa-disjoint", QEMU_CAPS_NUMA);
1840
    DO_TEST_FAILURE("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_RAM);
1841
    DO_TEST_PARSE_ERROR("cpu-numa-memshared", NONE);
1842
    DO_TEST("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_FILE);
1843
    DO_TEST("cpu-host-model", NONE);
1844
    DO_TEST("cpu-host-model-vendor", NONE);
1845
    DO_TEST_FULL("cpu-host-model-fallback",
1846
                 ARG_FLAGS, FLAG_SKIP_LEGACY_CPUS,
1847
                 ARG_QEMU_CAPS, NONE);
1848
    DO_TEST_FULL("cpu-host-model-nofallback",
1849
                 ARG_FLAGS, FLAG_SKIP_LEGACY_CPUS | FLAG_EXPECT_FAILURE,
1850
                 ARG_QEMU_CAPS, NONE);
A
Andrea Bolognani 已提交
1851 1852
    DO_TEST("cpu-host-passthrough", QEMU_CAPS_KVM);
    DO_TEST_FAILURE("cpu-qemu-host-passthrough", QEMU_CAPS_KVM);
1853

1854
    qemuTestSetHostArch(&driver, VIR_ARCH_S390X);
1855
    DO_TEST("cpu-s390-zEC12", QEMU_CAPS_KVM, QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1856 1857
    DO_TEST("cpu-s390-features", QEMU_CAPS_KVM, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION);
    DO_TEST_FAILURE("cpu-s390-features", QEMU_CAPS_KVM);
1858
    qemuTestSetHostArch(&driver, VIR_ARCH_NONE);
1859

1860
    qemuTestSetHostCPU(&driver, driver.hostarch, cpuHaswell);
1861 1862 1863 1864
    DO_TEST("cpu-Haswell", QEMU_CAPS_KVM);
    DO_TEST("cpu-Haswell2", QEMU_CAPS_KVM);
    DO_TEST("cpu-Haswell3", QEMU_CAPS_KVM);
    DO_TEST("cpu-Haswell-noTSX", QEMU_CAPS_KVM);
1865
    DO_TEST("cpu-host-model-cmt", NONE);
1866
    DO_TEST_CAPS_VER("cpu-host-model-cmt", "4.0.0");
1867
    DO_TEST("cpu-tsc-frequency", QEMU_CAPS_KVM);
1868
    DO_TEST_CAPS_VER("cpu-tsc-frequency", "4.0.0");
1869 1870
    DO_TEST_CAPS_VER("cpu-translation", "4.0.0");
    DO_TEST_CAPS_LATEST("cpu-translation");
1871
    qemuTestSetHostCPU(&driver, driver.hostarch, NULL);
1872

1873 1874
    DO_TEST("encrypted-disk", QEMU_CAPS_QCOW2_LUKS, QEMU_CAPS_OBJECT_SECRET);
    DO_TEST("encrypted-disk-usage", QEMU_CAPS_QCOW2_LUKS, QEMU_CAPS_OBJECT_SECRET);
1875
    DO_TEST("luks-disks", QEMU_CAPS_OBJECT_SECRET);
1876
    DO_TEST("luks-disks-source", QEMU_CAPS_OBJECT_SECRET);
1877 1878
    DO_TEST_PARSE_ERROR("luks-disks-source-qcow2", QEMU_CAPS_OBJECT_SECRET);
    DO_TEST("luks-disks-source-qcow2", QEMU_CAPS_OBJECT_SECRET, QEMU_CAPS_QCOW2_LUKS);
1879
    DO_TEST_CAPS_LATEST("luks-disks-source-qcow2");
1880
    DO_TEST_PARSE_ERROR("luks-disk-invalid", NONE);
1881
    DO_TEST_PARSE_ERROR("luks-disks-source-both", QEMU_CAPS_OBJECT_SECRET);
1882

1883 1884 1885 1886 1887 1888 1889 1890
    DO_TEST("memtune", NONE);
    DO_TEST("memtune-unlimited", NONE);
    DO_TEST("blkiotune", NONE);
    DO_TEST("blkiotune-device", NONE);
    DO_TEST("cputune", NONE);
    DO_TEST("cputune-zero-shares", NONE);
    DO_TEST_PARSE_ERROR("cputune-iothreadsched-toomuch", NONE);
    DO_TEST_PARSE_ERROR("cputune-vcpusched-overlap", NONE);
1891
    DO_TEST("cputune-numatune",
1892
            QEMU_CAPS_KVM,
1893
            QEMU_CAPS_OBJECT_IOTHREAD,
1894 1895
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1896 1897 1898
    DO_TEST("vcpu-placement-static",
            QEMU_CAPS_KVM,
            QEMU_CAPS_OBJECT_IOTHREAD);
1899
    DO_TEST_CAPS_LATEST("cputune-cpuset-big-id");
1900

1901
    DO_TEST("numatune-memory", NONE);
1902
    DO_TEST_PARSE_ERROR("numatune-memory-invalid-nodeset", NONE);
A
Andrea Bolognani 已提交
1903 1904 1905
    DO_TEST("numatune-memnode",
            QEMU_CAPS_NUMA,
            QEMU_CAPS_OBJECT_MEMORY_RAM);
1906
    DO_TEST_PARSE_ERROR("numatune-memnode", NONE);
1907

A
Andrea Bolognani 已提交
1908 1909 1910
    DO_TEST("numatune-memnode-no-memory",
            QEMU_CAPS_NUMA,
            QEMU_CAPS_OBJECT_MEMORY_RAM);
1911
    DO_TEST_PARSE_ERROR("numatune-memnode-no-memory", NONE);
1912

1913 1914
    DO_TEST("numatune-distances", QEMU_CAPS_NUMA, QEMU_CAPS_NUMA_DIST);

1915
    DO_TEST("numatune-auto-nodeset-invalid", NONE);
1916 1917
    DO_TEST("numatune-auto-prefer", QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1918 1919
    DO_TEST_FAILURE("numatune-static-nodeset-exceed-hostnode",
                    QEMU_CAPS_OBJECT_MEMORY_RAM);
1920 1921
    DO_TEST_PARSE_ERROR("numatune-memnode-nocpu", NONE);
    DO_TEST_PARSE_ERROR("numatune-memnodes-problematic", NONE);
1922 1923
    DO_TEST("numad", NONE);
    DO_TEST("numad-auto-vcpu-static-numatune", NONE);
1924
    DO_TEST_PARSE_ERROR("numad-auto-vcpu-static-numatune-no-nodeset", NONE);
1925 1926 1927
    DO_TEST("numad-auto-memory-vcpu-cpuset", NONE);
    DO_TEST("numad-auto-memory-vcpu-no-cpuset-and-placement", NONE);
    DO_TEST("numad-static-memory-auto-vcpu", NONE);
1928 1929 1930 1931 1932 1933
    DO_TEST_CAPS_VER("blkdeviotune-max", "4.1.0");
    DO_TEST_CAPS_LATEST("blkdeviotune-max");
    DO_TEST_CAPS_VER("blkdeviotune-group-num", "4.1.0");
    DO_TEST_CAPS_LATEST("blkdeviotune-group-num");
    DO_TEST_CAPS_VER("blkdeviotune-max-length", "4.1.0");
    DO_TEST_CAPS_LATEST("blkdeviotune-max-length");
1934

1935
    DO_TEST("multifunction-pci-device",
1936
            QEMU_CAPS_SCSI_LSI);
1937

1938
    DO_TEST("monitor-json", NONE);
1939

1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951
    DO_TEST("seclabel-dynamic", NONE);
    DO_TEST("seclabel-dynamic-baselabel", NONE);
    DO_TEST("seclabel-dynamic-override", NONE);
    DO_TEST("seclabel-dynamic-labelskip", NONE);
    DO_TEST("seclabel-dynamic-relabel", NONE);
    DO_TEST("seclabel-static", NONE);
    DO_TEST("seclabel-static-relabel", NONE);
    DO_TEST("seclabel-static-labelskip", NONE);
    DO_TEST("seclabel-none", NONE);
    DO_TEST("seclabel-dac-none", NONE);
    DO_TEST_PARSE_ERROR("seclabel-multiple", NONE);
    DO_TEST_PARSE_ERROR("seclabel-device-duplicates", NONE);
1952

1953
    DO_TEST("pseries-basic",
1954
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1955
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1956
    DO_TEST("pseries-vio",
1957
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1958
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1959
    DO_TEST("pseries-usb-default",
1960
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1961
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1962
            QEMU_CAPS_PIIX3_USB_UHCI,
1963
            QEMU_CAPS_PCI_OHCI);
1964
    DO_TEST("pseries-usb-multi",
1965
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1966
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1967
            QEMU_CAPS_PIIX3_USB_UHCI,
1968
            QEMU_CAPS_PCI_OHCI);
1969
    DO_TEST("pseries-vio-user-assigned",
1970
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1971 1972
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST_PARSE_ERROR("pseries-vio-address-clash", NONE);
1973 1974 1975
    DO_TEST("pseries-nvram",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_DEVICE_NVRAM);
1976
    DO_TEST("pseries-usb-kbd", QEMU_CAPS_PCI_OHCI,
1977
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1978
            QEMU_CAPS_DEVICE_USB_KBD,
1979
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1980
    DO_TEST("pseries-cpu-exact",
1981
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1982 1983
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST_PARSE_ERROR("pseries-no-parallel", NONE);
1984

1985
    qemuTestSetHostArch(&driver, VIR_ARCH_PPC64);
A
Andrea Bolognani 已提交
1986
    DO_TEST("pseries-cpu-compat", QEMU_CAPS_KVM,
1987
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1988
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1989 1990 1991
    DO_TEST("pseries-machine-max-cpu-compat",
            QEMU_CAPS_KVM,
            QEMU_CAPS_MACHINE_PSERIES_MAX_CPU_COMPAT,
1992
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
A
Andrea Bolognani 已提交
1993
    DO_TEST("pseries-cpu-le", QEMU_CAPS_KVM,
1994
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1995
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1996 1997 1998
    DO_TEST_FAILURE("pseries-cpu-compat-power9",
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
                    QEMU_CAPS_KVM);
1999

2000
    qemuTestSetHostCPU(&driver, driver.hostarch, cpuPower9);
2001
    DO_TEST("pseries-cpu-compat-power9",
2002
            QEMU_CAPS_KVM,
2003
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2004
            QEMU_CAPS_DEVICE_SPAPR_VTY);
2005
    qemuTestSetHostCPU(&driver, driver.hostarch, NULL);
2006

2007
    qemuTestSetHostArch(&driver, VIR_ARCH_NONE);
2008

2009
    DO_TEST("pseries-panic-missing",
2010
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2011
            QEMU_CAPS_DEVICE_SPAPR_VTY);
2012
    DO_TEST("pseries-panic-no-address",
2013
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2014
            QEMU_CAPS_DEVICE_SPAPR_VTY);
2015
    DO_TEST_FAILURE("pseries-panic-address",
2016
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
2017 2018 2019 2020 2021

    DO_TEST("pseries-phb-simple",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
    DO_TEST("pseries-phb-default-missing",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
2022 2023 2024 2025 2026 2027
    DO_TEST("pseries-phb-numa-node",
            QEMU_CAPS_NUMA,
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_SPAPR_PCI_HOST_BRIDGE_NUMA_NODE);
    DO_TEST_PARSE_ERROR("pseries-default-phb-numa-node", NONE);
2028 2029 2030
    DO_TEST_PARSE_ERROR("pseries-phb-invalid-target-index-1", NONE);
    DO_TEST_PARSE_ERROR("pseries-phb-invalid-target-index-2", NONE);
    DO_TEST_PARSE_ERROR("pseries-phb-invalid-target-index-3", NONE);
2031

2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053
    DO_TEST("pseries-many-devices",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST("pseries-many-buses-1",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST("pseries-many-buses-2",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST("pseries-hostdevs-1",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST("pseries-hostdevs-2",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST("pseries-hostdevs-3",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VFIO_PCI);

2054
    DO_TEST("pseries-features",
2055
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2056
            QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE,
2057
            QEMU_CAPS_MACHINE_PSERIES_CAP_HTM,
2058
            QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV,
2059
            QEMU_CAPS_MACHINE_PSERIES_CAP_CCF_ASSIST,
2060
            QEMU_CAPS_MACHINE_PSERIES_CAP_CFPC,
2061
            QEMU_CAPS_MACHINE_PSERIES_CAP_SBBC,
2062
            QEMU_CAPS_MACHINE_PSERIES_CAP_IBS,
2063
            QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);
2064 2065 2066 2067 2068 2069 2070

    /* parse error: no QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT */
    DO_TEST_PARSE_ERROR("pseries-features",
                        QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_HTM,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV,
2071
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CCF_ASSIST,
2072
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CFPC,
2073 2074
                        QEMU_CAPS_MACHINE_PSERIES_CAP_SBBC,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_IBS);
2075 2076 2077 2078 2079 2080 2081

    /* parse error: no QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE */
    DO_TEST_PARSE_ERROR("pseries-features",
                        QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_HTM,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CCF_ASSIST,
2082
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CFPC,
2083
                        QEMU_CAPS_MACHINE_PSERIES_CAP_SBBC,
2084
                        QEMU_CAPS_MACHINE_PSERIES_CAP_IBS,
2085 2086 2087 2088 2089 2090 2091 2092
                        QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);

    /* parse error: no QEMU_CAPS_MACHINE_PSERIES_CAP_HTM */
    DO_TEST_PARSE_ERROR("pseries-features",
                        QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CCF_ASSIST,
2093
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CFPC,
2094
                        QEMU_CAPS_MACHINE_PSERIES_CAP_SBBC,
2095
                        QEMU_CAPS_MACHINE_PSERIES_CAP_IBS,
2096 2097 2098 2099 2100 2101 2102 2103
                        QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);

    /* parse error: no QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV */
    DO_TEST_PARSE_ERROR("pseries-features",
                        QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_HTM,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CCF_ASSIST,
2104
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CFPC,
2105
                        QEMU_CAPS_MACHINE_PSERIES_CAP_SBBC,
2106
                        QEMU_CAPS_MACHINE_PSERIES_CAP_IBS,
2107 2108 2109 2110 2111 2112 2113 2114
                        QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);

    /* parse error: no QEMU_CAPS_MACHINE_PSERIES_CAP_CCF_ASSIST */
    DO_TEST_PARSE_ERROR("pseries-features",
                        QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_HTM,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV,
2115
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CFPC,
2116
                        QEMU_CAPS_MACHINE_PSERIES_CAP_SBBC,
2117
                        QEMU_CAPS_MACHINE_PSERIES_CAP_IBS,
2118 2119
                        QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);

2120 2121 2122 2123 2124 2125 2126
    /* parse error: no QEMU_CAPS_MACHINE_PSERIES_CFPC */
    DO_TEST_PARSE_ERROR("pseries-features",
                        QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
                        QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_HTM,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV,
2127
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CCF_ASSIST,
2128 2129
                        QEMU_CAPS_MACHINE_PSERIES_CAP_SBBC,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_IBS);
2130 2131 2132 2133 2134 2135 2136 2137 2138

    /* parse error: no QEMU_CAPS_MACHINE_PSERIES_SBBC */
    DO_TEST_PARSE_ERROR("pseries-features",
                        QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
                        QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_HTM,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CCF_ASSIST,
2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CFPC,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_IBS);

    /* parse error: no QEMU_CAPS_MACHINE_PSERIES_IBS */
    DO_TEST_PARSE_ERROR("pseries-features",
                        QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
                        QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_HTM,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CCF_ASSIST,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CFPC,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_SBBC);
2152

A
Andrea Bolognani 已提交
2153
    DO_TEST_PARSE_ERROR("pseries-features-invalid-machine", NONE);
2154

2155
    DO_TEST("pseries-serial-native",
2156
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2157 2158
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial+console-native",
2159
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2160 2161
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial-compat",
2162
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2163
            QEMU_CAPS_DEVICE_SPAPR_VTY);
2164
    DO_TEST("pseries-serial-pci",
2165
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2166 2167
            QEMU_CAPS_DEVICE_PCI_SERIAL);
    DO_TEST("pseries-serial-usb",
2168
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2169 2170
            QEMU_CAPS_DEVICE_QEMU_XHCI,
            QEMU_CAPS_DEVICE_USB_SERIAL);
2171
    DO_TEST("pseries-console-native",
2172
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2173 2174
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-console-virtio",
2175
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
2176
    DO_TEST_PARSE_ERROR("pseries-serial-invalid-machine", NONE);
2177
    DO_TEST_PARSE_ERROR("pseries-spaprvio-invalid", "ppc64");
2178

2179
    DO_TEST("mach-virt-serial-native",
2180
            QEMU_CAPS_DEVICE_PL011);
2181
    DO_TEST("mach-virt-serial+console-native",
2182
            QEMU_CAPS_DEVICE_PL011);
2183
    DO_TEST("mach-virt-serial-compat",
2184
            QEMU_CAPS_DEVICE_PL011);
2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196
    DO_TEST("mach-virt-serial-pci",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_SERIAL);
    DO_TEST("mach-virt-serial-usb",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT,
            QEMU_CAPS_DEVICE_QEMU_XHCI,
            QEMU_CAPS_DEVICE_USB_SERIAL);
    DO_TEST("mach-virt-console-native",
2197
            QEMU_CAPS_DEVICE_PL011);
2198 2199
    DO_TEST("mach-virt-console-virtio",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
2200 2201
    DO_TEST_PARSE_ERROR("mach-virt-serial-invalid-machine", NONE);

2202 2203
    DO_TEST("disk-ide-split", NONE);
    DO_TEST("disk-ide-wwn", QEMU_CAPS_IDE_DRIVE_WWN);
2204

2205
    DO_TEST("disk-geometry", NONE);
2206
    DO_TEST("disk-blockio", QEMU_CAPS_BLOCKIO);
2207

2208
    DO_TEST("video-device-pciaddr-default",
2209 2210
            QEMU_CAPS_KVM,
            QEMU_CAPS_VNC,
2211
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2212
            QEMU_CAPS_DEVICE_QXL);
2213
    DO_TEST("video-vga-nodevice", QEMU_CAPS_DEVICE_VGA);
2214
    DO_TEST("video-vga-device", QEMU_CAPS_DEVICE_VGA,
2215
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2216
    DO_TEST("video-vga-device-vgamem", QEMU_CAPS_DEVICE_VGA,
2217
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_VGA_VGAMEM);
2218
    DO_TEST("video-qxl-nodevice", QEMU_CAPS_DEVICE_QXL);
2219
    DO_TEST("video-qxl-device",
2220
            QEMU_CAPS_DEVICE_QXL,
2221
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2222
    DO_TEST("video-qxl-device-vgamem",
2223
            QEMU_CAPS_DEVICE_QXL,
2224
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2225
            QEMU_CAPS_QXL_VGAMEM);
2226
    DO_TEST_CAPS_LATEST("video-qxl-device-vram64");
2227
    DO_TEST("video-qxl-sec-device",
2228
            QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2229
    DO_TEST("video-qxl-sec-device-vgamem",
2230 2231
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2232
            QEMU_CAPS_QXL_VGAMEM);
2233
    DO_TEST_CAPS_LATEST("video-qxl-sec-device-vram64");
2234 2235 2236
    DO_TEST("video-qxl-heads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
2237
            QEMU_CAPS_QXL_MAX_OUTPUTS);
2238 2239 2240
    DO_TEST("video-vga-qxl-heads",
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_QXL_MAX_OUTPUTS);
2241 2242 2243
    DO_TEST("video-qxl-noheads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
2244
            QEMU_CAPS_QXL_MAX_OUTPUTS);
2245 2246 2247 2248
    DO_TEST("video-qxl-resolution",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_QXL_VGAMEM);
M
Marc-André Lureau 已提交
2249
    DO_TEST("video-virtio-gpu-device",
2250
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
M
Marc-André Lureau 已提交
2251
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2252
    DO_TEST("video-virtio-gpu-virgl",
2253
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
2254
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
2255
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2256 2257
    DO_TEST("video-virtio-gpu-spice-gl",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
2258
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
2259 2260
            QEMU_CAPS_SPICE,
            QEMU_CAPS_SPICE_GL,
2261
            QEMU_CAPS_SPICE_RENDERNODE,
2262
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2263 2264 2265 2266 2267
    DO_TEST("video-virtio-gpu-sdl-gl",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_SDL_GL,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2268 2269 2270
    DO_TEST("video-virtio-gpu-secondary",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2271 2272 2273
    DO_TEST("video-virtio-vga",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIRTIO_VGA,
2274 2275
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_GPU_MAX_OUTPUTS);
2276
    DO_TEST_CAPS_LATEST("video-bochs-display-device");
2277
    DO_TEST_CAPS_LATEST("video-ramfb-display-device");
2278 2279 2280
    DO_TEST("video-none-device",
            QEMU_CAPS_VNC);
    DO_TEST_PARSE_ERROR("video-invalid-multiple-devices", NONE);
2281
    DO_TEST_PARSE_ERROR("default-video-type-x86_64-caps-test-0", NONE);
2282

2283 2284 2285 2286 2287
    DO_TEST_CAPS_ARCH_LATEST("default-video-type-aarch64", "aarch64");
    DO_TEST_CAPS_ARCH_LATEST("default-video-type-ppc64", "ppc64");
    DO_TEST_CAPS_ARCH_LATEST("default-video-type-riscv64", "riscv64");
    DO_TEST_CAPS_ARCH_LATEST("default-video-type-s390x", "s390x");

2288 2289
    DO_TEST("virtio-rng-default",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2290
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2291 2292
    DO_TEST("virtio-rng-random",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2293
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2294 2295
    DO_TEST("virtio-rng-egd",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2296
            QEMU_CAPS_OBJECT_RNG_EGD);
H
Han Han 已提交
2297
    DO_TEST_CAPS_LATEST("virtio-rng-builtin");
J
Ján Tomko 已提交
2298 2299
    DO_TEST_CAPS_VER("virtio-rng-egd-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("virtio-rng-egd-unix");
2300 2301 2302 2303
    DO_TEST("virtio-rng-multiple",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2304
    DO_TEST_PARSE_ERROR("virtio-rng-egd-crash",
2305 2306
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD);
2307
    DO_TEST("virtio-rng-ccw",
2308
            QEMU_CAPS_CCW,
2309 2310
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2311
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2312

2313
    DO_TEST("s390-allow-bogus-usb-none",
2314 2315 2316
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2317
    DO_TEST("s390-allow-bogus-usb-controller",
2318 2319 2320
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2321

2322
    DO_TEST("s390-panic-no-address",
2323
            QEMU_CAPS_CCW,
2324
            QEMU_CAPS_VIRTIO_S390);
2325
    DO_TEST_FAILURE("s390-panic-address",
2326
            QEMU_CAPS_CCW,
2327
            QEMU_CAPS_VIRTIO_S390);
2328
    DO_TEST("s390-panic-missing",
2329
            QEMU_CAPS_CCW,
2330
            QEMU_CAPS_VIRTIO_S390);
2331
    DO_TEST_PARSE_ERROR("s390-no-parallel",
2332
            QEMU_CAPS_CCW,
2333
            QEMU_CAPS_VIRTIO_S390);
2334
    DO_TEST("s390-serial",
2335
            QEMU_CAPS_CCW,
2336 2337 2338
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
    DO_TEST("s390-serial-2",
2339
            QEMU_CAPS_CCW,
2340 2341 2342 2343
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE,
            QEMU_CAPS_DEVICE_SCLPLMCONSOLE);
    DO_TEST("s390-serial-console",
2344
            QEMU_CAPS_CCW,
2345 2346
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
2347

2348
    DO_TEST("ppc-dtb",
J
Ján Tomko 已提交
2349
            QEMU_CAPS_KVM);
2350 2351
    DO_TEST("ppce500-serial",
            QEMU_CAPS_KVM);
O
Olivia Yin 已提交
2352

2353 2354
    DO_TEST_CAPS_LATEST("tpm-passthrough");
    DO_TEST_CAPS_LATEST("tpm-passthrough-crb");
2355
    DO_TEST_PARSE_ERROR("tpm-no-backend-invalid",
2356
                        QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
2357
    DO_TEST_CAPS_LATEST("tpm-emulator");
2358
    DO_TEST_CAPS_LATEST("tpm-emulator-tpm2");
2359
    DO_TEST_CAPS_LATEST("tpm-emulator-tpm2-enc");
2360
    DO_TEST_CAPS_LATEST_PPC64("tpm-emulator-spapr");
2361

2362 2363 2364 2365
    DO_TEST_PARSE_ERROR("pci-domain-invalid", NONE);
    DO_TEST_PARSE_ERROR("pci-bus-invalid", NONE);
    DO_TEST_PARSE_ERROR("pci-slot-invalid", NONE);
    DO_TEST_PARSE_ERROR("pci-function-invalid", NONE);
2366

2367 2368 2369 2370 2371 2372
    DO_TEST("pci-bridge",
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("pci-autoadd-addr",
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2373
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
2374 2375
    DO_TEST("pci-autoadd-idx",
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2376 2377
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("pci-autofill-addr", QEMU_CAPS_DEVICE_CIRRUS_VGA);
2378
    DO_TEST("pci-many",
2379
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
2380
    DO_TEST("pci-bridge-many-disks",
2381
            QEMU_CAPS_DEVICE_PCI_BRIDGE);
L
Laine Stump 已提交
2382
    DO_TEST("pcie-root",
2383 2384 2385 2386
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL);
2387
    DO_TEST("q35",
2388
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2389
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2390
            QEMU_CAPS_DEVICE_IOH3420,
2391
            QEMU_CAPS_ICH9_AHCI,
2392
            QEMU_CAPS_ICH9_USB_EHCI1,
2393
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2394
            QEMU_CAPS_DEVICE_QXL);
2395 2396 2397 2398 2399 2400 2401 2402
    DO_TEST_PARSE_ERROR("q35-dmi-bad-address1",
                        QEMU_CAPS_DEVICE_PCI_BRIDGE,
                        QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
                        QEMU_CAPS_DEVICE_IOH3420);
    DO_TEST_PARSE_ERROR("q35-dmi-bad-address2",
                        QEMU_CAPS_DEVICE_PCI_BRIDGE,
                        QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
                        QEMU_CAPS_DEVICE_IOH3420);
2403
    DO_TEST("q35-pm-disable",
2404
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2405
            QEMU_CAPS_DEVICE_IOH3420,
2406 2407 2408 2409
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4,
            QEMU_CAPS_ICH9_DISABLE_S3, QEMU_CAPS_ICH9_DISABLE_S4);
    DO_TEST("q35-pm-disable-fallback",
2410
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2411
            QEMU_CAPS_DEVICE_IOH3420,
2412 2413
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4);
2414
    DO_TEST("q35-usb2",
2415
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2416
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2417
            QEMU_CAPS_DEVICE_IOH3420,
2418
            QEMU_CAPS_ICH9_AHCI,
2419
            QEMU_CAPS_ICH9_USB_EHCI1,
2420
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2421
            QEMU_CAPS_DEVICE_QXL);
2422
    DO_TEST("q35-usb2-multi",
2423
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2424
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2425
            QEMU_CAPS_DEVICE_IOH3420,
2426
            QEMU_CAPS_ICH9_AHCI,
2427
            QEMU_CAPS_ICH9_USB_EHCI1,
2428
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2429
            QEMU_CAPS_DEVICE_QXL);
2430
    DO_TEST("q35-usb2-reorder",
2431
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2432
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2433
            QEMU_CAPS_DEVICE_IOH3420,
2434
            QEMU_CAPS_ICH9_AHCI,
2435
            QEMU_CAPS_ICH9_USB_EHCI1,
2436
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2437
            QEMU_CAPS_DEVICE_QXL);
2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455
    /* verify that devices with pcie capability are assigned to a pcie slot */
    DO_TEST("q35-pcie",
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_ICH9_USB_EHCI1,
2456
            QEMU_CAPS_NEC_USB_XHCI,
2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
    /* same XML as q35-pcie, but don't set
     * QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY, so virtio devices should
     * be assigned to legacy pci slots
     */
    DO_TEST("q35-virtio-pci",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
    /* same as q35-pcie, but all PCI controllers are added automatically */
    DO_TEST("q35-pcie-autoadd",
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
    DO_TEST("q35-default-devices-only",
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
    DO_TEST("q35-multifunction",
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
2523 2524 2525 2526 2527
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
2528 2529 2530 2531 2532 2533 2534 2535
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_ICH9_USB_EHCI1,
2536
            QEMU_CAPS_NEC_USB_XHCI,
2537
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2538 2539
    DO_TEST("q35-virt-manager-basic",
            QEMU_CAPS_KVM,
2540
            QEMU_CAPS_MACHINE_VMPORT_OPT,
2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564
            QEMU_CAPS_ICH9_DISABLE_S3,
            QEMU_CAPS_ICH9_DISABLE_S4,
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_DEVICE_ICH9_INTEL_HDA,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_SPICE,
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_HDA_DUPLEX,
2565
            QEMU_CAPS_DEVICE_ISA_SERIAL,
2566
            QEMU_CAPS_USB_REDIR);
2567 2568

    /* Test automatic and manual setting of pcie-root-port attributes */
2569 2570
    DO_TEST("pcie-root-port",
            QEMU_CAPS_DEVICE_IOH3420,
2571
            QEMU_CAPS_ICH9_AHCI,
2572
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2573
            QEMU_CAPS_DEVICE_QXL);
2574 2575 2576 2577 2578 2579

    /* Make sure the default model for PCIe Root Ports is picked correctly
     * based on QEMU binary capabilities. We use x86/q35 for the test, but
     * any PCIe machine type (such as aarch64/virt) will behave the same */
    DO_TEST("pcie-root-port-model-generic",
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT,
2580
            QEMU_CAPS_DEVICE_IOH3420);
2581
    DO_TEST("pcie-root-port-model-ioh3420",
2582
            QEMU_CAPS_DEVICE_IOH3420);
2583
    DO_TEST_CAPS_LATEST("pcie-root-port-nohotplug");
2584

2585 2586 2587 2588 2589 2590 2591
    DO_TEST("autoindex",
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
            QEMU_CAPS_ICH9_AHCI,
2592
            QEMU_CAPS_ICH9_USB_EHCI1,
2593
            QEMU_CAPS_NEC_USB_XHCI);
2594 2595 2596 2597 2598 2599 2600
    /* Make sure the user can always override libvirt's default device
     * placement policy by providing an explicit PCI address */
    DO_TEST("q35-pci-force-address",
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_HDA_DUPLEX);
2601

2602
    DO_TEST_PARSE_ERROR("q35-wrong-root",
2603
            QEMU_CAPS_DEVICE_IOH3420,
2604
            QEMU_CAPS_ICH9_AHCI,
2605
            QEMU_CAPS_ICH9_USB_EHCI1,
2606
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2607
            QEMU_CAPS_DEVICE_QXL);
2608
    DO_TEST_PARSE_ERROR("440fx-wrong-root", NONE);
2609
    DO_TEST_PARSE_ERROR("440fx-ide-address-conflict", NONE);
2610

2611
    DO_TEST_PARSE_ERROR("pcie-root-port-too-many",
2612
            QEMU_CAPS_DEVICE_IOH3420,
2613
            QEMU_CAPS_ICH9_AHCI,
2614
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2615
            QEMU_CAPS_DEVICE_QXL);
2616

2617 2618 2619
    DO_TEST("pcie-switch-upstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
2620
            QEMU_CAPS_ICH9_AHCI,
2621
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2622
            QEMU_CAPS_DEVICE_QXL);
2623 2624 2625 2626
    DO_TEST("pcie-switch-downstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
2627
            QEMU_CAPS_ICH9_AHCI,
2628
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2629
            QEMU_CAPS_DEVICE_QXL);
2630

2631 2632 2633 2634 2635 2636
    DO_TEST("pci-expander-bus",
            QEMU_CAPS_DEVICE_PXB);
    DO_TEST_PARSE_ERROR("pci-expander-bus-bad-node",
                        QEMU_CAPS_DEVICE_PXB);
    DO_TEST_PARSE_ERROR("pci-expander-bus-bad-machine",
                        QEMU_CAPS_DEVICE_PXB);
2637 2638
    DO_TEST_PARSE_ERROR("pci-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_PXB);
2639

2640 2641 2642 2643 2644 2645 2646 2647 2648 2649
    DO_TEST("pcie-expander-bus",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
            QEMU_CAPS_DEVICE_PXB_PCIE);
    DO_TEST_PARSE_ERROR("pcie-expander-bus-bad-machine",
                        QEMU_CAPS_DEVICE_IOH3420,
                        QEMU_CAPS_DEVICE_X3130_UPSTREAM,
                        QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
                        QEMU_CAPS_DEVICE_PXB_PCIE);
2650 2651 2652
    DO_TEST_PARSE_ERROR("pcie-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_IOH3420,
                        QEMU_CAPS_DEVICE_PXB_PCIE);
2653

2654
    DO_TEST_CAPS_VER("hostdev-scsi-lsi", "2.8.0");
2655
    DO_TEST_CAPS_VER("hostdev-scsi-lsi", "4.1.0");
2656
    DO_TEST_CAPS_LATEST("hostdev-scsi-lsi");
2657
    DO_TEST_CAPS_VER("hostdev-scsi-virtio-scsi", "2.8.0");
2658
    DO_TEST_CAPS_VER("hostdev-scsi-virtio-scsi", "4.1.0");
2659
    DO_TEST_CAPS_LATEST("hostdev-scsi-virtio-scsi");
2660

2661 2662
    DO_TEST("hostdev-scsi-vhost-scsi-ccw",
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_VHOST_SCSI,
2663
            QEMU_CAPS_CCW);
2664
    DO_TEST("hostdev-scsi-vhost-scsi-pci",
2665 2666
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VHOST_SCSI);
2667
    DO_TEST_CAPS_LATEST_PARSE_ERROR("hostdev-scsi-vhost-scsi-pci-boot-fail");
2668 2669 2670 2671 2672
    DO_TEST("hostdev-scsi-vhost-scsi-pcie",
            QEMU_CAPS_KVM,
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_VHOST_SCSI,
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT,
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY);
2673

2674 2675
    DO_TEST_CAPS_VER("mlock-on", "3.0.0");
    DO_TEST_CAPS_VER("mlock-off", "3.0.0");
2676 2677
    DO_TEST_CAPS_LATEST("mlock-on");
    DO_TEST_CAPS_LATEST("mlock-off");
2678

2679 2680 2681 2682
    DO_TEST_PARSE_ERROR("pci-bridge-negative-index-invalid", NONE);
    DO_TEST_PARSE_ERROR("pci-bridge-duplicate-index", NONE);
    DO_TEST_PARSE_ERROR("pci-root-nonzero-index", NONE);
    DO_TEST_PARSE_ERROR("pci-root-address", NONE);
2683

2684
    DO_TEST("hotplug-base",
2685
            QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_SCSI);
2686

2687
    DO_TEST("pcihole64", QEMU_CAPS_I440FX_PCI_HOLE64_SIZE);
2688
    DO_TEST_PARSE_ERROR("pcihole64-none", NONE);
2689
    DO_TEST("pcihole64-q35",
2690
            QEMU_CAPS_DEVICE_IOH3420,
2691
            QEMU_CAPS_ICH9_AHCI,
2692
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2693
            QEMU_CAPS_DEVICE_QXL,
2694 2695
            QEMU_CAPS_Q35_PCI_HOLE64_SIZE);

J
Ján Tomko 已提交
2696 2697
    DO_TEST("arm-vexpressa9-nodevs", NONE);
    DO_TEST("arm-vexpressa9-basic", NONE);
2698
    DO_TEST("arm-vexpressa9-virtio",
2699
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2700
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2701
    DO_TEST("arm-virt-virtio",
2702
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2703
            QEMU_CAPS_DEVICE_PL011,
2704
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2705

2706
    DO_TEST("aarch64-virt-virtio",
2707
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2708
            QEMU_CAPS_DEVICE_PL011,
2709
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2710 2711 2712 2713 2714 2715

    /* Demonstrates the virtio-pci default... namely that there isn't any!
       q35 style PCI controllers will be added if the binary supports it,
       but virtio-mmio is always used unless PCI addresses are manually
       specified. */
    DO_TEST("aarch64-virtio-pci-default",
2716
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
2717 2718 2719
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2720
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2721
            QEMU_CAPS_DEVICE_IOH3420,
2722
            QEMU_CAPS_DEVICE_PL011,
2723
            QEMU_CAPS_VIRTIO_SCSI);
2724
    DO_TEST("aarch64-virt-2.6-virtio-pci-default",
2725
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2726 2727
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2728
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2729
            QEMU_CAPS_DEVICE_PL011,
2730
            QEMU_CAPS_DEVICE_IOH3420);
2731 2732 2733
    /* Example of using virtio-pci with no explicit PCI controller
       but with manual PCI addresses */
    DO_TEST("aarch64-virtio-pci-manual-addresses",
2734
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2735 2736
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2737 2738 2739
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_VIRTIO_SCSI);
2740
    DO_TEST("aarch64-video-virtio-gpu-pci",
2741
            QEMU_CAPS_OBJECT_GPEX,
2742
            QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_IOH3420,
2743
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2744
            QEMU_CAPS_DEVICE_VIRTIO_GPU);
2745
    DO_TEST("aarch64-video-default",
2746
            QEMU_CAPS_OBJECT_GPEX,
2747
            QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_IOH3420,
2748
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2749 2750
            QEMU_CAPS_DEVICE_VIRTIO_GPU, QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_VNC);
2751
    DO_TEST("aarch64-aavmf-virtio-mmio",
2752
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2753
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2754 2755
    DO_TEST("aarch64-virt-default-nic",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
2756
    qemuTestSetHostArch(&driver, VIR_ARCH_AARCH64);
2757
    DO_TEST("aarch64-cpu-passthrough",
2758
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2759
            QEMU_CAPS_KVM);
2760
    DO_TEST_GIC("aarch64-gic-none", GIC_NONE,
2761
            QEMU_CAPS_KVM,
2762
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2763
    DO_TEST_GIC("aarch64-gic-none-v2", GIC_V2,
2764
            QEMU_CAPS_KVM,
2765 2766
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-none-v3", GIC_V3,
2767
            QEMU_CAPS_KVM,
2768
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2769
    DO_TEST_GIC("aarch64-gic-none-both", GIC_BOTH,
2770
            QEMU_CAPS_KVM,
2771
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2772 2773
    DO_TEST_GIC("aarch64-gic-none-tcg", GIC_BOTH,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2774
    DO_TEST_GIC("aarch64-gic-default", GIC_NONE,
2775
            QEMU_CAPS_KVM,
2776
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
A
Andrea Bolognani 已提交
2777
    DO_TEST_GIC("aarch64-gic-default-v2", GIC_V2,
2778
            QEMU_CAPS_KVM,
2779
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
A
Andrea Bolognani 已提交
2780
    DO_TEST_GIC("aarch64-gic-default-v3", GIC_V3,
2781
            QEMU_CAPS_KVM,
2782
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
A
Andrea Bolognani 已提交
2783
    DO_TEST_GIC("aarch64-gic-default-both", GIC_BOTH,
2784
            QEMU_CAPS_KVM,
2785 2786
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v2", GIC_NONE,
2787
            QEMU_CAPS_KVM,
2788 2789
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v2", GIC_V2,
2790
            QEMU_CAPS_KVM,
2791 2792
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v2", GIC_V3,
2793
            QEMU_CAPS_KVM,
2794
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2795
    DO_TEST_GIC("aarch64-gic-v2", GIC_BOTH,
2796
            QEMU_CAPS_KVM,
2797
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2798
    DO_TEST_FAILURE("aarch64-gic-v3",
2799
            QEMU_CAPS_KVM, NONE);
2800
    DO_TEST_GIC("aarch64-gic-v3", GIC_NONE,
2801
            QEMU_CAPS_KVM,
2802 2803
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v3", GIC_V2,
2804
            QEMU_CAPS_KVM,
2805 2806
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v3", GIC_V3,
2807
            QEMU_CAPS_KVM,
2808 2809
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v3", GIC_BOTH,
2810
            QEMU_CAPS_KVM,
2811
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2812
    DO_TEST_FAILURE("aarch64-gic-host",
2813
            QEMU_CAPS_KVM, NONE);
2814
    DO_TEST_GIC("aarch64-gic-host", GIC_NONE,
2815
            QEMU_CAPS_KVM,
2816 2817
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-host", GIC_V2,
2818
            QEMU_CAPS_KVM,
2819 2820
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-host", GIC_V3,
2821
            QEMU_CAPS_KVM,
2822 2823
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-host", GIC_BOTH,
2824
            QEMU_CAPS_KVM,
2825
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2826
    DO_TEST_PARSE_ERROR("aarch64-gic-invalid",
2827
            QEMU_CAPS_KVM,
2828
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2829
    DO_TEST_PARSE_ERROR("aarch64-gic-not-virt",
2830
                        QEMU_CAPS_KVM,
2831 2832
                        QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_PARSE_ERROR("aarch64-gic-not-arm",
2833
                        QEMU_CAPS_KVM,
2834
                        QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2835
    DO_TEST("aarch64-kvm-32-on-64",
2836
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2837
            QEMU_CAPS_DEVICE_PL011,
A
Andrea Bolognani 已提交
2838
            QEMU_CAPS_KVM, QEMU_CAPS_CPU_AARCH64_OFF);
2839
    DO_TEST_FAILURE("aarch64-kvm-32-on-64",
2840
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2841
            QEMU_CAPS_KVM);
2842 2843 2844 2845 2846 2847 2848
    DO_TEST("aarch64-pci-serial",
            QEMU_CAPS_DEVICE_PCI_SERIAL,
            QEMU_CAPS_CHARDEV_LOGFILE,
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT);
2849 2850 2851 2852
    DO_TEST("aarch64-traditional-pci",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2853
            QEMU_CAPS_DEVICE_PCIE_PCI_BRIDGE,
2854 2855
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_SERIAL);
2856 2857 2858 2859 2860 2861 2862

    /* Make sure all combinations of ACPI and UEFI behave as expected */
    DO_TEST("aarch64-acpi-uefi", NONE);
    DO_TEST("aarch64-noacpi-uefi", NONE);
    DO_TEST("aarch64-noacpi-nouefi", NONE);
    DO_TEST_PARSE_ERROR("aarch64-acpi-nouefi", NONE);

2863 2864 2865 2866 2867 2868 2869 2870 2871
    /* QEMU 4.0.0 didn't have support for aarch64 CPU features */
    DO_TEST_CAPS_ARCH_VER_FAILURE("aarch64-features-sve", "aarch64", "4.0.0");
    /* aarch64 doesn't support the same CPU features as x86 */
    DO_TEST_CAPS_ARCH_LATEST_FAILURE("aarch64-features-wrong", "aarch64");
    /* Can't enable vector lengths when SVE is overall disabled */
    DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("aarch64-features-sve-disabled", "aarch64");
    /* SVE aarch64 CPU features work on modern QEMU */
    DO_TEST_CAPS_ARCH_LATEST("aarch64-features-sve", "aarch64");

2872 2873
    DO_TEST_CAPS_ARCH_LATEST("clock-timer-armvtimer", "aarch64");

2874
    qemuTestSetHostArch(&driver, VIR_ARCH_NONE);
2875

2876
    DO_TEST("kvm-pit-delay", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2877
    DO_TEST("kvm-pit-discard", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2878

2879 2880 2881 2882
    DO_TEST("panic",
            QEMU_CAPS_DEVICE_PANIC);
    DO_TEST("panic-double",
            QEMU_CAPS_DEVICE_PANIC);
H
Hu Tao 已提交
2883

2884 2885
    DO_TEST("panic-no-address",
            QEMU_CAPS_DEVICE_PANIC);
2886

2887 2888
    DO_TEST("fips-enabled", QEMU_CAPS_ENABLE_FIPS);

J
Ján Tomko 已提交
2889
    DO_TEST("shmem", QEMU_CAPS_DEVICE_IVSHMEM);
2890 2891 2892
    DO_TEST("shmem-plain-doorbell", QEMU_CAPS_DEVICE_IVSHMEM,
            QEMU_CAPS_DEVICE_IVSHMEM_PLAIN,
            QEMU_CAPS_DEVICE_IVSHMEM_DOORBELL);
2893
    DO_TEST_FAILURE("shmem", NONE);
J
Ján Tomko 已提交
2894
    DO_TEST_FAILURE("shmem-invalid-size",
2895
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2896
    DO_TEST_FAILURE("shmem-invalid-address",
2897
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2898
    DO_TEST_FAILURE("shmem-small-size",
2899
                    QEMU_CAPS_DEVICE_IVSHMEM);
2900
    DO_TEST_PARSE_ERROR("shmem-msi-only", NONE);
A
Andrea Bolognani 已提交
2901
    DO_TEST("cpu-host-passthrough-features", QEMU_CAPS_KVM);
2902

2903
    DO_TEST_FAILURE("memory-align-fail", NONE);
2904
    DO_TEST_FAILURE("memory-hotplug-nonuma", QEMU_CAPS_DEVICE_PC_DIMM);
M
Michal Privoznik 已提交
2905
    DO_TEST("memory-hotplug", NONE);
2906
    DO_TEST("memory-hotplug", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA);
2907
    DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2908
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2909
    DO_TEST("memory-hotplug-dimm-addr", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2910
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2911
    DO_TEST("memory-hotplug-ppc64-nonuma", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2912
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2913
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2914 2915 2916
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm");
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-access");
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-label");
2917
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-align");
2918
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-pmem");
2919
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-readonly");
2920
    DO_TEST_CAPS_ARCH_LATEST("memory-hotplug-nvdimm-ppc64", "ppc64");
2921

2922
    DO_TEST("machine-aeskeywrap-on-caps",
2923
            QEMU_CAPS_AES_KEY_WRAP,
2924
            QEMU_CAPS_DEA_KEY_WRAP,
2925
            QEMU_CAPS_VIRTIO_SCSI,
2926
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2927
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps",
2928
                    QEMU_CAPS_VIRTIO_SCSI,
2929
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2930 2931 2932
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps", NONE);

    DO_TEST("machine-aeskeywrap-on-cap",
2933
            QEMU_CAPS_AES_KEY_WRAP,
2934
            QEMU_CAPS_VIRTIO_SCSI,
2935
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2936
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap",
2937
                    QEMU_CAPS_VIRTIO_SCSI,
2938
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2939 2940 2941
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap", NONE);

    DO_TEST("machine-aeskeywrap-off-caps",
2942
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2943
            QEMU_CAPS_VIRTIO_SCSI,
2944
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2945
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps",
2946
                    QEMU_CAPS_VIRTIO_SCSI,
2947
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2948 2949 2950
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", NONE);

    DO_TEST("machine-aeskeywrap-off-cap",
2951
            QEMU_CAPS_AES_KEY_WRAP,
2952
            QEMU_CAPS_VIRTIO_SCSI,
2953
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2954
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap",
2955
                    QEMU_CAPS_VIRTIO_SCSI,
2956
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2957 2958 2959
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap", NONE);

    DO_TEST("machine-deakeywrap-on-caps",
2960
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2961
            QEMU_CAPS_VIRTIO_SCSI,
2962
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2963
    DO_TEST_FAILURE("machine-deakeywrap-on-caps",
2964
                    QEMU_CAPS_VIRTIO_SCSI,
2965
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2966 2967 2968
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", NONE);

    DO_TEST("machine-deakeywrap-on-cap",
2969
            QEMU_CAPS_DEA_KEY_WRAP,
2970
            QEMU_CAPS_VIRTIO_SCSI,
2971
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2972
    DO_TEST_FAILURE("machine-deakeywrap-on-cap",
2973
                    QEMU_CAPS_VIRTIO_SCSI,
2974
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2975 2976 2977
    DO_TEST_FAILURE("machine-deakeywrap-on-cap", NONE);

    DO_TEST("machine-deakeywrap-off-caps",
2978
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2979
            QEMU_CAPS_VIRTIO_SCSI,
2980
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2981
    DO_TEST_FAILURE("machine-deakeywrap-off-caps",
2982
                    QEMU_CAPS_VIRTIO_SCSI,
2983
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2984 2985 2986
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", NONE);

    DO_TEST("machine-deakeywrap-off-cap",
2987
            QEMU_CAPS_DEA_KEY_WRAP,
2988
            QEMU_CAPS_VIRTIO_SCSI,
2989
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2990
    DO_TEST_FAILURE("machine-deakeywrap-off-cap",
2991
                    QEMU_CAPS_VIRTIO_SCSI,
2992
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2993 2994 2995
    DO_TEST_FAILURE("machine-deakeywrap-off-cap", NONE);

    DO_TEST("machine-keywrap-none-caps",
2996
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2997
            QEMU_CAPS_VIRTIO_SCSI,
2998
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2999
    DO_TEST("machine-keywrap-none",
3000
            QEMU_CAPS_VIRTIO_SCSI,
3001
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
3002

3003
    DO_TEST("machine-loadparm-s390",
3004
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390,
3005
            QEMU_CAPS_LOADPARM);
3006
    DO_TEST("machine-loadparm-net-s390",
3007
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390,
3008
            QEMU_CAPS_LOADPARM);
3009
    DO_TEST("machine-loadparm-multiple-disks-nets-s390",
3010
            QEMU_CAPS_CCW,
3011
            QEMU_CAPS_VIRTIO_S390,
3012 3013
            QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-char-invalid",
3014
                        QEMU_CAPS_CCW,
3015
                        QEMU_CAPS_VIRTIO_S390,
3016 3017
                        QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-len-invalid",
3018
                        QEMU_CAPS_CCW,
3019
                        QEMU_CAPS_VIRTIO_S390,
3020 3021
                        QEMU_CAPS_LOADPARM);

J
Jiri Denemark 已提交
3022 3023 3024 3025 3026 3027 3028
    DO_TEST("qemu-ns-domain-ns0", NONE);
    DO_TEST("qemu-ns-domain-commandline", NONE);
    DO_TEST("qemu-ns-domain-commandline-ns0", NONE);
    DO_TEST("qemu-ns-commandline", NONE);
    DO_TEST("qemu-ns-commandline-ns0", NONE);
    DO_TEST("qemu-ns-commandline-ns1", NONE);

3029
    DO_TEST("virtio-input", QEMU_CAPS_VIRTIO_KEYBOARD,
3030
            QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET);
3031
    DO_TEST("virtio-input-passthrough", QEMU_CAPS_VIRTIO_INPUT_HOST);
3032

3033
    DO_TEST("ppc64-usb-controller",
3034
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
3035
            QEMU_CAPS_PCI_OHCI);
3036
    DO_TEST("ppc64-usb-controller-legacy",
3037
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
3038
            QEMU_CAPS_PIIX3_USB_UHCI);
3039
    DO_TEST_FULL("ppc64-usb-controller-qemu-xhci",
3040
                 ARG_PARSEFLAGS, VIR_DOMAIN_DEF_PARSE_ABI_UPDATE,
3041
                 ARG_QEMU_CAPS,
3042
                 QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
3043 3044 3045 3046 3047 3048 3049
                 QEMU_CAPS_NEC_USB_XHCI,
                 QEMU_CAPS_DEVICE_QEMU_XHCI);

    DO_TEST("aarch64-usb-controller-qemu-xhci",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_DEVICE_QEMU_XHCI);
3050

3051 3052 3053 3054
    DO_TEST("aarch64-usb-controller-nec-xhci",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_NEC_USB_XHCI);

3055
    /* VM XML has invalid arch/ostype/virttype combo, but the SKIP flag
3056 3057 3058 3059 3060
     * will avoid the error during parse. This will cause us to fill in
     * the missing machine type using the i386 binary, despite it being
     * the wrong binary for the arch. We expect to get a failure about
     * bad arch later when creating the pretend command.
     */
3061
    DO_TEST_FULL("missing-machine",
3062
                 ARG_FLAGS, FLAG_EXPECT_FAILURE,
3063 3064
                 ARG_PARSEFLAGS, VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE,
                 ARG_QEMU_CAPS, NONE);
3065

3066 3067 3068
    DO_TEST("name-escape",
            QEMU_CAPS_NAME_DEBUG_THREADS,
            QEMU_CAPS_OBJECT_SECRET,
3069 3070
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_GROUP,
3071 3072 3073 3074
            QEMU_CAPS_VNC,
            QEMU_CAPS_NAME_GUEST,
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_SPICE,
3075
            QEMU_CAPS_SPICE_UNIX,
3076 3077 3078 3079 3080
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_SPICE_GL,
            QEMU_CAPS_SPICE_RENDERNODE,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
3081
            QEMU_CAPS_DEVICE_ISA_SERIAL,
3082
            QEMU_CAPS_CHARDEV_FILE_APPEND,
3083
            QEMU_CAPS_CCID_EMULATED,
3084
            QEMU_CAPS_VIRTIO_SCSI);
M
Marc-André Lureau 已提交
3085 3086
    DO_TEST("debug-threads", QEMU_CAPS_NAME_DEBUG_THREADS);

3087
    DO_TEST("master-key", QEMU_CAPS_OBJECT_SECRET);
3088
    DO_TEST("usb-long-port-path",
J
Ján Tomko 已提交
3089
            QEMU_CAPS_USB_HUB);
3090
    DO_TEST_PARSE_ERROR("usb-too-long-port-path-invalid",
3091
                        QEMU_CAPS_USB_HUB);
3092

3093
    DO_TEST("acpi-table", NONE);
3094 3095 3096 3097 3098 3099

    DO_TEST_CAPS_LATEST("intel-iommu");
    DO_TEST_CAPS_VER("intel-iommu", "2.6.0");
    DO_TEST_CAPS_LATEST("intel-iommu-caching-mode");
    DO_TEST_CAPS_LATEST("intel-iommu-eim");
    DO_TEST_CAPS_LATEST("intel-iommu-device-iotlb");
3100
    DO_TEST_CAPS_LATEST("intel-iommu-aw-bits");
3101
    DO_TEST_CAPS_LATEST_PARSE_ERROR("intel-iommu-wrong-machine");
3102
    DO_TEST_CAPS_ARCH_LATEST("iommu-smmuv3", "aarch64");
3103

3104
    DO_TEST("cpu-hotplug-startup", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);
3105 3106 3107
    DO_TEST_PARSE_ERROR("cpu-hotplug-granularity",
                        QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);

3108
    DO_TEST_CAPS_LATEST("virtio-options");
3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132
    DO_TEST_CAPS_LATEST("virtio-options-controller-iommu");
    DO_TEST_CAPS_LATEST("virtio-options-disk-iommu");
    DO_TEST_CAPS_LATEST("virtio-options-fs-iommu");
    DO_TEST_CAPS_LATEST("virtio-options-input-iommu");
    DO_TEST_CAPS_LATEST("virtio-options-memballoon-iommu");
    DO_TEST_CAPS_LATEST("virtio-options-net-iommu");
    DO_TEST_CAPS_LATEST("virtio-options-rng-iommu");
    DO_TEST_CAPS_LATEST("virtio-options-video-iommu");
    DO_TEST_CAPS_LATEST("virtio-options-controller-ats");
    DO_TEST_CAPS_LATEST("virtio-options-disk-ats");
    DO_TEST_CAPS_LATEST("virtio-options-fs-ats");
    DO_TEST_CAPS_LATEST("virtio-options-input-ats");
    DO_TEST_CAPS_LATEST("virtio-options-memballoon-ats");
    DO_TEST_CAPS_LATEST("virtio-options-net-ats");
    DO_TEST_CAPS_LATEST("virtio-options-rng-ats");
    DO_TEST_CAPS_LATEST("virtio-options-video-ats");
    DO_TEST_CAPS_LATEST("virtio-options-controller-packed");
    DO_TEST_CAPS_LATEST("virtio-options-disk-packed");
    DO_TEST_CAPS_LATEST("virtio-options-fs-packed");
    DO_TEST_CAPS_LATEST("virtio-options-input-packed");
    DO_TEST_CAPS_LATEST("virtio-options-memballoon-packed");
    DO_TEST_CAPS_LATEST("virtio-options-net-packed");
    DO_TEST_CAPS_LATEST("virtio-options-rng-packed");
    DO_TEST_CAPS_LATEST("virtio-options-video-packed");
3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174
    DO_TEST_PARSE_ERROR("virtio-options-controller-iommu", QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST_PARSE_ERROR("virtio-options-disk-iommu", NONE);
    DO_TEST_PARSE_ERROR("virtio-options-fs-iommu", NONE);
    DO_TEST_PARSE_ERROR("virtio-options-input-iommu", QEMU_CAPS_VIRTIO_MOUSE,
                        QEMU_CAPS_VIRTIO_KEYBOARD);
    DO_TEST_PARSE_ERROR("virtio-options-net-iommu", NONE);
    DO_TEST_PARSE_ERROR("virtio-options-memballoon-iommu", NONE);
    DO_TEST_PARSE_ERROR("virtio-options-rng-iommu", QEMU_CAPS_DEVICE_VIRTIO_RNG,
                        QEMU_CAPS_OBJECT_RNG_RANDOM);
    DO_TEST_PARSE_ERROR("virtio-options-video-iommu", QEMU_CAPS_DEVICE_VIRTIO_GPU,
                        QEMU_CAPS_DEVICE_VIRTIO_GPU,
                        QEMU_CAPS_VIRTIO_GPU_VIRGL,
                        QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
                        QEMU_CAPS_DEVICE_VHOST_USER_GPU);
    DO_TEST_PARSE_ERROR("virtio-options-controller-ats", QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST_PARSE_ERROR("virtio-options-disk-ats", NONE);
    DO_TEST_PARSE_ERROR("virtio-options-fs-ats", NONE);
    DO_TEST_PARSE_ERROR("virtio-options-input-ats", QEMU_CAPS_VIRTIO_MOUSE,
                        QEMU_CAPS_VIRTIO_KEYBOARD);
    DO_TEST_PARSE_ERROR("virtio-options-memballoon-ats", NONE);
    DO_TEST_PARSE_ERROR("virtio-options-net-ats", NONE);
    DO_TEST_PARSE_ERROR("virtio-options-rng-ats", QEMU_CAPS_DEVICE_VIRTIO_RNG,
                        QEMU_CAPS_OBJECT_RNG_RANDOM);
    DO_TEST_PARSE_ERROR("virtio-options-video-ats", QEMU_CAPS_DEVICE_VIRTIO_GPU,
                        QEMU_CAPS_DEVICE_VIRTIO_GPU,
                        QEMU_CAPS_VIRTIO_GPU_VIRGL,
                        QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
                        QEMU_CAPS_DEVICE_VHOST_USER_GPU);
    DO_TEST_PARSE_ERROR("virtio-options-controller-packed", QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST_PARSE_ERROR("virtio-options-disk-packed", NONE);
    DO_TEST_PARSE_ERROR("virtio-options-fs-packed", NONE);
    DO_TEST_PARSE_ERROR("virtio-options-input-packed", QEMU_CAPS_VIRTIO_MOUSE,
                        QEMU_CAPS_VIRTIO_KEYBOARD);
    DO_TEST_PARSE_ERROR("virtio-options-memballoon-packed", NONE);
    DO_TEST_PARSE_ERROR("virtio-options-net-packed", NONE);
    DO_TEST_PARSE_ERROR("virtio-options-rng-packed", QEMU_CAPS_DEVICE_VIRTIO_RNG,
                        QEMU_CAPS_OBJECT_RNG_RANDOM);
    DO_TEST_PARSE_ERROR("virtio-options-video-packed", QEMU_CAPS_DEVICE_VIRTIO_GPU,
                        QEMU_CAPS_DEVICE_VIRTIO_GPU,
                        QEMU_CAPS_VIRTIO_GPU_VIRGL,
                        QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
                        QEMU_CAPS_DEVICE_VHOST_USER_GPU);
3175

J
Ján Tomko 已提交
3176
    DO_TEST("fd-memory-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
3177
            QEMU_CAPS_KVM);
J
Ján Tomko 已提交
3178
    DO_TEST("fd-memory-numa-topology2", QEMU_CAPS_OBJECT_MEMORY_FILE,
3179
            QEMU_CAPS_KVM);
J
Ján Tomko 已提交
3180
    DO_TEST("fd-memory-numa-topology3", QEMU_CAPS_OBJECT_MEMORY_FILE,
3181 3182
            QEMU_CAPS_KVM);

J
Ján Tomko 已提交
3183
    DO_TEST("fd-memory-no-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
3184 3185
            QEMU_CAPS_KVM);

M
Marc-André Lureau 已提交
3186
    DO_TEST_CAPS_LATEST("memfd-memory-numa");
3187
    DO_TEST_CAPS_LATEST("memfd-memory-default-hugepage");
M
Marc-André Lureau 已提交
3188

3189 3190 3191 3192 3193 3194 3195 3196
    DO_TEST("cpu-check-none", QEMU_CAPS_KVM);
    DO_TEST("cpu-check-partial", QEMU_CAPS_KVM);
    DO_TEST("cpu-check-full", QEMU_CAPS_KVM);
    DO_TEST("cpu-check-default-none", QEMU_CAPS_KVM);
    DO_TEST("cpu-check-default-none2", NONE);
    DO_TEST("cpu-check-default-partial", QEMU_CAPS_KVM);
    DO_TEST("cpu-check-default-partial2", QEMU_CAPS_KVM);

3197 3198 3199 3200 3201 3202 3203 3204 3205
    DO_TEST("cpu-cache-disable", QEMU_CAPS_KVM, QEMU_CAPS_CPU_CACHE);
    DO_TEST("cpu-cache-disable2", QEMU_CAPS_KVM);
    DO_TEST("cpu-cache-disable3", QEMU_CAPS_KVM, QEMU_CAPS_CPU_CACHE);
    DO_TEST("cpu-cache-passthrough", QEMU_CAPS_KVM, QEMU_CAPS_CPU_CACHE);
    DO_TEST("cpu-cache-passthrough2", QEMU_CAPS_KVM);
    DO_TEST("cpu-cache-emulate-l3", QEMU_CAPS_KVM, QEMU_CAPS_CPU_CACHE);
    DO_TEST_PARSE_ERROR("cpu-cache-emulate-l2", QEMU_CAPS_KVM);
    DO_TEST_PARSE_ERROR("cpu-cache-passthrough3", QEMU_CAPS_KVM);
    DO_TEST_PARSE_ERROR("cpu-cache-passthrough-l3", QEMU_CAPS_KVM);
M
Marc-André Lureau 已提交
3206
    DO_TEST("vmcoreinfo", QEMU_CAPS_DEVICE_VMCOREINFO);
3207

3208 3209 3210
    DO_TEST("user-aliases", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_OBJECT_MEMORY_FILE, QEMU_CAPS_PIIX_DISABLE_S3,
            QEMU_CAPS_PIIX_DISABLE_S4, QEMU_CAPS_VNC,
3211
            QEMU_CAPS_DEVICE_ISA_SERIAL,
3212
            QEMU_CAPS_HDA_DUPLEX,
3213 3214
            QEMU_CAPS_CCID_EMULATED,
            QEMU_CAPS_QCOW2_LUKS, QEMU_CAPS_OBJECT_SECRET);
3215
    DO_TEST("user-aliases2", QEMU_CAPS_DEVICE_IOH3420, QEMU_CAPS_ICH9_AHCI);
3216 3217
    DO_TEST("user-aliases-usb", QEMU_CAPS_KVM,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4,
3218
            QEMU_CAPS_ICH9_USB_EHCI1);
3219

3220
    DO_TEST_CAPS_VER("disk-virtio-scsi-reservations", "2.12.0");
3221
    DO_TEST_CAPS_LATEST("disk-virtio-scsi-reservations");
3222

3223
    DO_TEST_CAPS_LATEST("tseg-explicit-size");
3224 3225 3226
    DO_TEST_CAPS_LATEST_PARSE_ERROR("tseg-i440fx");
    DO_TEST_CAPS_VER_PARSE_ERROR("tseg-explicit-size", "2.10.0");
    DO_TEST_CAPS_LATEST_PARSE_ERROR("tseg-invalid-size");
3227

3228
    DO_TEST("video-virtio-gpu-ccw", QEMU_CAPS_CCW,
3229 3230 3231 3232 3233 3234
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_GPU_MAX_OUTPUTS,
            QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_VIRTIO_GPU_CCW);

3235
    DO_TEST("input-virtio-ccw", QEMU_CAPS_CCW,
3236 3237 3238 3239 3240 3241 3242
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_DEVICE_VIRTIO_KEYBOARD_CCW,
            QEMU_CAPS_DEVICE_VIRTIO_MOUSE_CCW,
            QEMU_CAPS_DEVICE_VIRTIO_TABLET_CCW);

3243 3244
    DO_TEST_CAPS_LATEST("vhost-vsock");
    DO_TEST_CAPS_LATEST("vhost-vsock-auto");
3245 3246
    DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw", "s390x");
    DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw-auto", "s390x");
3247

3248
    DO_TEST_CAPS_VER("launch-security-sev", "2.12.0");
3249

3250 3251
    DO_TEST_CAPS_LATEST("vhost-user-fs-fd-memory");
    DO_TEST_CAPS_LATEST("vhost-user-fs-hugepages");
3252
    DO_TEST_CAPS_LATEST_PARSE_ERROR("vhost-user-fs-readonly");
3253

L
Lubomir Rintel 已提交
3254 3255
    DO_TEST("riscv64-virt",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
3256 3257
    DO_TEST("riscv64-virt-pci",
            QEMU_CAPS_OBJECT_GPEX);
L
Lubomir Rintel 已提交
3258

3259 3260 3261 3262 3263
    /* Older version checks disable-legacy usage */
    DO_TEST_CAPS_VER("virtio-transitional", "3.1.0");
    DO_TEST_CAPS_VER("virtio-non-transitional", "3.1.0");
    DO_TEST_CAPS_LATEST("virtio-transitional");
    DO_TEST_CAPS_LATEST("virtio-non-transitional");
3264
    DO_TEST_CAPS_LATEST_PARSE_ERROR("virtio-transitional-not-supported");
3265

3266 3267 3268 3269 3270 3271 3272 3273
    /* Simple headless guests for various architectures */
    DO_TEST_CAPS_ARCH_LATEST("aarch64-virt-headless", "aarch64");
    DO_TEST_CAPS_ARCH_LATEST("ppc64-pseries-headless", "ppc64");
    DO_TEST_CAPS_ARCH_LATEST("riscv64-virt-headless", "riscv64");
    DO_TEST_CAPS_ARCH_LATEST("s390x-ccw-headless", "s390x");
    DO_TEST_CAPS_ARCH_LATEST("x86_64-pc-headless", "x86_64");
    DO_TEST_CAPS_ARCH_LATEST("x86_64-q35-headless", "x86_64");

3274 3275 3276
    /* Simple guests with graphics for various architectures */
    DO_TEST_CAPS_ARCH_LATEST("aarch64-virt-graphics", "aarch64");
    DO_TEST_CAPS_ARCH_LATEST("ppc64-pseries-graphics", "ppc64");
3277
    DO_TEST_CAPS_ARCH_LATEST("riscv64-virt-graphics", "riscv64");
3278
    DO_TEST_CAPS_ARCH_LATEST("s390x-ccw-graphics", "s390x");
3279 3280 3281
    DO_TEST_CAPS_ARCH_LATEST("x86_64-pc-graphics", "x86_64");
    DO_TEST_CAPS_ARCH_LATEST("x86_64-q35-graphics", "x86_64");

3282 3283 3284 3285 3286
    DO_TEST_CAPS_LATEST("os-firmware-bios");
    DO_TEST_CAPS_LATEST("os-firmware-efi");
    DO_TEST_CAPS_LATEST("os-firmware-efi-secboot");
    DO_TEST_CAPS_ARCH_LATEST("aarch64-os-firmware-efi", "aarch64");

3287 3288 3289
    DO_TEST_CAPS_LATEST("vhost-user-vga");
    DO_TEST_CAPS_LATEST("vhost-user-gpu-secondary");

3290 3291 3292
    DO_TEST_CAPS_VER("cpu-Icelake-Server-pconfig", "3.1.0");
    DO_TEST_CAPS_LATEST("cpu-Icelake-Server-pconfig");

3293 3294
    DO_TEST_CAPS_ARCH_LATEST("aarch64-default-cpu-kvm-virt-4.2", "aarch64");
    DO_TEST_CAPS_ARCH_LATEST("aarch64-default-cpu-tcg-virt-4.2", "aarch64");
3295 3296 3297 3298 3299 3300
    DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-kvm-pseries-2.7", "ppc64");
    DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-tcg-pseries-2.7", "ppc64");
    DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-kvm-pseries-3.1", "ppc64");
    DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-tcg-pseries-3.1", "ppc64");
    DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-kvm-pseries-4.2", "ppc64");
    DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-tcg-pseries-4.2", "ppc64");
3301 3302
    DO_TEST_CAPS_ARCH_LATEST("s390-default-cpu-kvm-ccw-virtio-2.7", "s390x");
    DO_TEST_CAPS_ARCH_LATEST("s390-default-cpu-tcg-ccw-virtio-2.7", "s390x");
3303 3304
    DO_TEST_CAPS_ARCH_LATEST("s390-default-cpu-kvm-ccw-virtio-4.2", "s390x");
    DO_TEST_CAPS_ARCH_LATEST("s390-default-cpu-tcg-ccw-virtio-4.2", "s390x");
3305 3306 3307 3308
    DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-kvm-pc-4.2", "x86_64");
    DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-tcg-pc-4.2", "x86_64");
    DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-kvm-q35-4.2", "x86_64");
    DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-tcg-q35-4.2", "x86_64");
3309

3310 3311
    DO_TEST_CAPS_LATEST("virtio-9p-multidevs");

3312 3313 3314
    if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL)
        virFileDeleteTree(fakerootdir);

3315
    VIR_FREE(driver.config->nbdTLSx509certdir);
3316
    qemuTestDriverFree(&driver);
3317
    VIR_FREE(fakerootdir);
3318
    virHashFree(capslatest);
3319
    virFileWrapperClearPrefixes();
3320

3321
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
3322 3323
}

3324
VIR_TEST_MAIN_PRELOAD(mymain,
3325
                      VIR_TEST_MOCK("qemuxml2argv"),
M
Michal Privoznik 已提交
3326
                      VIR_TEST_MOCK("domaincaps"),
3327 3328 3329
                      VIR_TEST_MOCK("virrandom"),
                      VIR_TEST_MOCK("qemucpu"),
                      VIR_TEST_MOCK("virpci"))
3330

3331 3332
#else

3333 3334 3335 3336
int main(void)
{
    return EXIT_AM_SKIP;
}
3337 3338

#endif /* WITH_QEMU */