qemuxml2argvtest.c 131.5 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 441 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 473 474 475 476 477
{
    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) {
        switch (vm->def->tpm->type) {
        case VIR_DOMAIN_TPM_TYPE_EMULATOR:
            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;
            break;
        case VIR_DOMAIN_TPM_TYPE_PASSTHROUGH:
        case VIR_DOMAIN_TPM_TYPE_LAST:
            break;
       }
    }

    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,
478
                                       jsonPropsValidation,
479 480 481 482
                                       VIR_QEMU_PROCESS_START_COLD);
}


483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 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
static int
testCompareXMLToArgvValidateSchema(virQEMUDriverPtr drv,
                                   virDomainObjPtr vm,
                                   const char *migrateURI,
                                   struct testQemuInfo *info,
                                   unsigned int flags)
{
    VIR_AUTOSTRINGLIST args = NULL;
    size_t nargs = 0;
    size_t i;
    g_autoptr(virHashTable) schema = NULL;
    g_autoptr(virCommand) cmd = NULL;

    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;

    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;
}


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

569
    if (info->arch != VIR_ARCH_NONE && info->arch != VIR_ARCH_X86_64)
570
        qemuTestSetHostArch(&driver, info->arch);
571

572 573
    memset(&monitor_chr, 0, sizeof(monitor_chr));

574
    if (!(conn = virGetConnect()))
575
        goto cleanup;
576

577
    conn->secretDriver = &fakeSecretDriver;
578
    conn->storageDriver = &fakeStorageDriver;
579
    conn->nwfilterDriver = &fakeNWFilterDriver;
580

581 582 583 584
    virSetConnectInterface(conn);
    virSetConnectNetwork(conn);
    virSetConnectNWFilter(conn);
    virSetConnectNodeDev(conn);
585 586 587
    virSetConnectSecret(conn);
    virSetConnectStorage(conn);

588 589 590
    if (virQEMUCapsGet(info->qemuCaps, QEMU_CAPS_ENABLE_FIPS))
        flags |= FLAG_FIPS;

591 592 593
    if (testCheckExclusiveFlags(info->flags) < 0)
        goto cleanup;

594
    if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0)
595 596 597
        goto cleanup;

    if (info->migrateFrom &&
598 599
        !(migrateURI = qemuMigrationDstGetURI(info->migrateFrom,
                                              info->migrateFd)))
600 601
        goto cleanup;

602
    if (!(vm = virDomainObjNew(driver.xmlopt)))
603
        goto cleanup;
604

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

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

622
    if (!virDomainDefCheckABIStability(vm->def, vm->def, driver.xmlopt)) {
623
        VIR_TEST_DEBUG("ABI stability check failed on %s", info->infile);
624
        goto cleanup;
625 626
    }

627
    vm->def->id = -1;
628

629
    if (qemuProcessPrepareMonitorChr(&monitor_chr, priv->libDir) < 0)
630
        goto cleanup;
631

632 633 634 635 636 637
    if (!(info->flags & FLAG_REAL_CAPS)) {
        if (testUpdateQEMUCaps(info, vm, driver.caps) < 0)
            goto cleanup;
        if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0)
            goto cleanup;
    }
638

639
    log = virTestLogContentAndReset();
640
    VIR_FREE(log);
641
    virResetLastError();
J
Jiri Denemark 已提交
642

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

654 655 656
    if (testCompareXMLToArgvValidateSchema(&driver, vm, migrateURI, info, flags) < 0)
        goto cleanup;

657
    if (!(actualargv = virCommandToString(cmd, false)))
658
        goto cleanup;
E
Eric Blake 已提交
659

660
    if (virTestCompareToFile(actualargv, info->outfile) < 0)
661
        goto cleanup;
662

P
Pavel Hrdina 已提交
663 664
    ret = 0;

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

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

691
    return ret;
692 693
}

694
static void
695
testInfoSetPaths(struct testQemuInfo *info,
696 697
                 const char *suffix)
{
698 699 700 701
    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 : "");
702 703
}

704 705
# define FAKEROOTDIRTEMPLATE abs_builddir "/fakerootdir-XXXXXX"

706
static int
E
Eric Blake 已提交
707
mymain(void)
708
{
C
Cole Robinson 已提交
709
    int ret = 0;
710
    char *fakerootdir;
711
    virHashTablePtr capslatest = NULL;
712

713 714 715 716 717 718 719 720 721
    fakerootdir = g_strdup(FAKEROOTDIRTEMPLATE);

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

    g_setenv("LIBVIRT_FAKE_ROOT_DIR", fakerootdir, TRUE);

722 723 724 725 726
    /* 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. */
727 728
    if (g_setenv("TZ", "VIR00:30", TRUE) == FALSE) {
        perror("g_setenv");
729 730 731
        return EXIT_FAILURE;
    }

732
    if (qemuTestDriverInit(&driver) < 0)
733
        return EXIT_FAILURE;
734 735

    driver.privileged = true;
736

737
    VIR_FREE(driver.config->defaultTLSx509certdir);
738
    driver.config->defaultTLSx509certdir = g_strdup("/etc/pki/qemu");
739
    VIR_FREE(driver.config->vncTLSx509certdir);
740
    driver.config->vncTLSx509certdir = g_strdup("/etc/pki/libvirt-vnc");
741
    VIR_FREE(driver.config->spiceTLSx509certdir);
742
    driver.config->spiceTLSx509certdir = g_strdup("/etc/pki/libvirt-spice");
743
    VIR_FREE(driver.config->chardevTLSx509certdir);
744
    driver.config->chardevTLSx509certdir = g_strdup("/etc/pki/libvirt-chardev");
745
    VIR_FREE(driver.config->vxhsTLSx509certdir);
746
    driver.config->vxhsTLSx509certdir = g_strdup("/etc/pki/libvirt-vxhs/dummy,path");
747
    VIR_FREE(driver.config->nbdTLSx509certdir);
748
    driver.config->nbdTLSx509certdir = g_strdup("/etc/pki/libvirt-nbd/dummy,path");
749

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

C
Cole Robinson 已提交
766
    capslatest = testQemuGetLatestCaps();
767
    if (!capslatest)
768 769
        return EXIT_FAILURE;

770 771 772 773 774 775 776
    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");

777 778 779 780 781 782 783 784 785 786
    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");

787 788 789 790 791 792 793 794 795 796 797 798 799 800
/**
 * 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.
 */
801
# define DO_TEST_INTERNAL(_name, _suffix, ...) \
802
    do { \
803
        static struct testQemuInfo info = { \
804
            .name = _name, \
805
        }; \
806 807
        if (testQemuInfoSetArgs(&info, capslatest, \
                                __VA_ARGS__, ARG_END) < 0) \
808
            return EXIT_FAILURE; \
809
        testInfoSetPaths(&info, _suffix); \
810
        if (virTestRun("QEMU XML-2-ARGV " _name _suffix, \
811 812
                       testCompareXMLToArgv, &info) < 0) \
            ret = -1; \
813
        testQemuInfoClear(&info); \
814 815
    } while (0)

816 817 818 819 820 821
# define DO_TEST_CAPS_INTERNAL(name, arch, ver, ...) \
    DO_TEST_INTERNAL(name, "." arch "-" ver, \
                     ARG_CAPS_ARCH, arch, \
                     ARG_CAPS_VER, ver, \
                     __VA_ARGS__)

822
# define DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, ...) \
823
    DO_TEST_CAPS_INTERNAL(name, arch, "latest", __VA_ARGS__)
824

825 826 827
# define DO_TEST_CAPS_ARCH_VER_FULL(name, arch, ver, ...) \
    DO_TEST_CAPS_INTERNAL(name, arch, ver, __VA_ARGS__)

828
# define DO_TEST_CAPS_ARCH_LATEST(name, arch) \
829
    DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, ARG_END)
830

831
# define DO_TEST_CAPS_ARCH_VER(name, arch, ver) \
832
    DO_TEST_CAPS_ARCH_VER_FULL(name, arch, ver, ARG_END)
833

834
# define DO_TEST_CAPS_LATEST(name) \
835
    DO_TEST_CAPS_ARCH_LATEST(name, "x86_64")
836

837 838 839
# define DO_TEST_CAPS_VER(name, ver) \
    DO_TEST_CAPS_ARCH_VER(name, "x86_64", ver)

840 841 842
# define DO_TEST_CAPS_LATEST_PPC64(name) \
    DO_TEST_CAPS_ARCH_LATEST(name, "ppc64")

843 844
# define DO_TEST_CAPS_ARCH_LATEST_FAILURE(name, arch) \
    DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, \
845
                                  ARG_FLAGS, FLAG_EXPECT_FAILURE)
846

847 848 849 850 851 852 853 854 855 856 857 858
# 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, \
859
                                  ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR)
860

861 862 863 864 865 866 867 868 869 870
# 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)

871 872 873
# define DO_TEST_FULL(name, ...) \
    DO_TEST_INTERNAL(name, "", \
                     __VA_ARGS__, QEMU_CAPS_LAST)
874

875 876 877
/* All the following macros require an explicit QEMU_CAPS_* list
 * at the end of the argument list, or the NONE placeholder.
 * */
878
# define DO_TEST(name, ...) \
879
    DO_TEST_FULL(name, \
880
                 ARG_QEMU_CAPS, __VA_ARGS__)
881

882
# define DO_TEST_GIC(name, gic, ...) \
883
    DO_TEST_FULL(name, \
884
                 ARG_GIC, gic, \
885
                 ARG_QEMU_CAPS, __VA_ARGS__)
886

887
# define DO_TEST_FAILURE(name, ...) \
888 889
    DO_TEST_FULL(name, \
                 ARG_FLAGS, FLAG_EXPECT_FAILURE, \
890
                 ARG_QEMU_CAPS, __VA_ARGS__)
891

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

897
# define NONE QEMU_CAPS_LAST
898

899 900 901
    /* 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 */
902 903 904 905 906 907 908 909 910
    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");
911

912
    DO_TEST("minimal", NONE);
913 914
    DO_TEST("minimal-sandbox",
            QEMU_CAPS_SECCOMP_BLACKLIST);
915
    DO_TEST_PARSE_ERROR("minimal-no-memory", NONE);
916
    DO_TEST("minimal-msg-timestamp", QEMU_CAPS_MSG_TIMESTAMP);
917 918 919 920

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

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

    DO_TEST("reboot-timeout-disabled", QEMU_CAPS_REBOOT_TIMEOUT);
    DO_TEST("reboot-timeout-enabled", QEMU_CAPS_REBOOT_TIMEOUT);
965
    DO_TEST_PARSE_ERROR("reboot-timeout-enabled", NONE);
966

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

    /* 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);

985
    DO_TEST("clock-utc", NONE);
986
    DO_TEST("clock-localtime", NONE);
J
Ján Tomko 已提交
987 988 989 990
    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 已提交
991
    DO_TEST("clock-catchup", QEMU_CAPS_KVM_PIT_TICK_POLICY);
992 993
    DO_TEST("cpu-kvmclock", NONE);
    DO_TEST("cpu-host-kvmclock", NONE);
994
    DO_TEST("kvmclock", QEMU_CAPS_KVM);
995
    DO_TEST("clock-timer-hyperv-rtc", QEMU_CAPS_KVM);
996

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

1024 1025 1026 1027 1028 1029
    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");
1030
    DO_TEST_CAPS_LATEST("hyperv-stimer-direct");
1031

1032 1033 1034
    DO_TEST("kvm-features", NONE);
    DO_TEST("kvm-features-off", NONE);

1035 1036 1037
    DO_TEST("pmu-feature", NONE);
    DO_TEST("pmu-feature-off", NONE);

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

1268 1269
    DO_TEST_CAPS_LATEST("disk-slices");

1270 1271 1272
    DO_TEST_CAPS_ARCH_VER("disk-arm-virtio-sd", "aarch64", "4.0.0");
    DO_TEST_CAPS_ARCH_LATEST("disk-arm-virtio-sd", "aarch64");

1273 1274 1275
    DO_TEST("graphics-egl-headless",
            QEMU_CAPS_EGL_HEADLESS,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1276 1277
    DO_TEST_CAPS_LATEST("graphics-egl-headless");
    DO_TEST_CAPS_LATEST("graphics-egl-headless-rendernode");
1278

1279 1280
    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);
1281 1282
    DO_TEST("graphics-vnc-websocket",
            QEMU_CAPS_VNC,
1283
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1284
    DO_TEST("graphics-vnc-policy", QEMU_CAPS_VNC,
1285 1286 1287 1288 1289
            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);
1290
    driver.config->vncAutoUnixSocket = true;
1291 1292
    DO_TEST("graphics-vnc-auto-socket-cfg", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1293
    driver.config->vncAutoUnixSocket = false;
1294 1295 1296 1297
    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);
1298 1299
    DO_TEST("graphics-vnc-socket-new-cmdline", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA, QEMU_CAPS_VNC_MULTI_SERVERS);
1300

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

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

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

1443 1444 1445
    DO_TEST("hostdev-pci-multifunction",
            QEMU_CAPS_KVM,
            QEMU_CAPS_DEVICE_VFIO_PCI);
1446

1447 1448 1449 1450
    DO_TEST("hostdev-pci-address-unassigned",
            QEMU_CAPS_KVM,
            QEMU_CAPS_DEVICE_VFIO_PCI);

1451 1452
    DO_TEST("serial-file-log",
            QEMU_CAPS_CHARDEV_FILE_APPEND,
1453
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1454
            QEMU_CAPS_CHARDEV_LOGFILE);
1455
    DO_TEST("serial-spiceport",
1456
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1457
            QEMU_CAPS_DEVICE_QXL,
1458
            QEMU_CAPS_SPICE,
1459
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1460
    DO_TEST("serial-spiceport-nospice", NONE);
1461

1462 1463 1464 1465
    DO_TEST("console-compat",
            QEMU_CAPS_DEVICE_ISA_SERIAL);
    DO_TEST("console-compat-auto",
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1466 1467

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

1520
    DO_TEST("channel-guestfwd", NONE);
J
Ján Tomko 已提交
1521 1522
    DO_TEST_CAPS_VER("channel-unix-guestfwd", "2.5.0");
    DO_TEST_CAPS_LATEST("channel-unix-guestfwd");
1523 1524 1525 1526 1527 1528
    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);
1529
    DO_TEST("console-virtio-many",
1530
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1531
    DO_TEST("console-virtio-s390",
1532
            QEMU_CAPS_VIRTIO_S390);
1533
    DO_TEST("console-virtio-ccw",
1534
            QEMU_CAPS_CCW,
1535
            QEMU_CAPS_VIRTIO_S390);
J
Ján Tomko 已提交
1536 1537
    DO_TEST_CAPS_VER("console-virtio-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("console-virtio-unix");
1538
    DO_TEST("console-sclp",
1539
            QEMU_CAPS_VIRTIO_S390,
1540
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
1541
    DO_TEST("channel-spicevmc",
1542
            QEMU_CAPS_SPICE,
1543
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1544
    DO_TEST("channel-virtio-default",
1545
            QEMU_CAPS_SPICE);
1546
    DO_TEST("channel-virtio-unix", NONE);
1547

1548
    DO_TEST("smartcard-host",
1549
            QEMU_CAPS_CCID_EMULATED);
1550
    DO_TEST("smartcard-host-certificates",
1551
            QEMU_CAPS_CCID_EMULATED);
1552 1553
    DO_TEST("smartcard-host-certificates-database",
            QEMU_CAPS_CCID_EMULATED);
1554
    DO_TEST("smartcard-passthrough-tcp",
1555
            QEMU_CAPS_CCID_PASSTHRU);
1556
    DO_TEST("smartcard-passthrough-spicevmc",
1557
            QEMU_CAPS_CCID_PASSTHRU);
1558
    DO_TEST("smartcard-controller",
1559
            QEMU_CAPS_CCID_EMULATED);
J
Ján Tomko 已提交
1560 1561
    DO_TEST_CAPS_VER("smartcard-passthrough-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("smartcard-passthrough-unix");
1562

1563 1564 1565 1566 1567 1568 1569 1570
    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);
1571 1572
    DO_TEST_PARSE_ERROR("chardev-reconnect-generated-path",
                        QEMU_CAPS_CHARDEV_RECONNECT);
1573

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

1674 1675 1676
    DO_TEST("smbios", NONE);
    DO_TEST_PARSE_ERROR("smbios-date", NONE);
    DO_TEST_PARSE_ERROR("smbios-uuid-match", NONE);
1677

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

1707
    DO_TEST("hostdev-usb-address", NONE);
1708
    DO_TEST("hostdev-usb-address-device", NONE);
1709
    DO_TEST("hostdev-usb-address-device-boot", NONE);
1710 1711
    DO_TEST("hostdev-pci-address", QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST("hostdev-pci-address-device", QEMU_CAPS_DEVICE_VFIO_PCI);
1712 1713
    DO_TEST("hostdev-vfio",
            QEMU_CAPS_DEVICE_VFIO_PCI);
1714
    DO_TEST("hostdev-vfio-multidomain",
1715
            QEMU_CAPS_DEVICE_VFIO_PCI);
1716 1717 1718 1719 1720 1721
    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);
1722 1723 1724 1725 1726 1727 1728
    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);
1729
    DO_TEST_CAPS_LATEST("hostdev-mdev-display-ramfb");
1730 1731
    DO_TEST_PARSE_ERROR("hostdev-vfio-zpci-wrong-arch",
                        QEMU_CAPS_DEVICE_VFIO_PCI);
1732 1733 1734
    DO_TEST("hostdev-vfio-zpci",
            QEMU_CAPS_DEVICE_VFIO_PCI,
            QEMU_CAPS_DEVICE_ZPCI);
1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747
    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);
1748
    DO_TEST("pci-rom", QEMU_CAPS_DEVICE_VFIO_PCI);
1749
    DO_TEST("pci-rom-disabled", NONE);
1750
    DO_TEST("pci-rom-disabled-invalid", NONE);
1751

1752 1753 1754 1755
    DO_TEST("hostdev-subsys-mdev-vfio-ccw",
            QEMU_CAPS_CCW,
            QEMU_CAPS_CCW_CSSID_UNRESTRICTED,
            QEMU_CAPS_DEVICE_VFIO_CCW);
1756 1757
    DO_TEST_CAPS_ARCH_LATEST("hostdev-subsys-mdev-vfio-ccw-boot",
                             "s390x");
1758 1759 1760
    DO_TEST_PARSE_ERROR("hostdev-subsys-mdev-vfio-ccw",
                        QEMU_CAPS_CCW,
                        QEMU_CAPS_CCW_CSSID_UNRESTRICTED);
1761 1762 1763 1764 1765 1766 1767 1768 1769
    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 已提交
1770 1771
    DO_TEST_CAPS_ARCH_LATEST("hostdev-subsys-mdev-vfio-ap",
                             "s390x");
1772 1773
    DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("hostdev-subsys-mdev-vfio-ap-boot-fail",
                                         "s390x");
B
Boris Fiuczynski 已提交
1774

1775
    DO_TEST_FULL("restore-v2",
1776 1777
                 ARG_MIGRATE_FROM, "exec:cat",
                 ARG_MIGRATE_FD, 7,
1778
                 ARG_QEMU_CAPS, NONE);
1779
    DO_TEST_FULL("restore-v2-fd",
1780 1781
                 ARG_MIGRATE_FROM, "stdio",
                 ARG_MIGRATE_FD, 7,
1782
                 ARG_QEMU_CAPS, NONE);
1783
    DO_TEST_FULL("restore-v2-fd",
1784 1785
                 ARG_MIGRATE_FROM, "fd:7",
                 ARG_MIGRATE_FD, 7,
1786
                 ARG_QEMU_CAPS, NONE);
1787
    DO_TEST_FULL("migrate",
1788
                 ARG_MIGRATE_FROM, "tcp:10.0.0.1:5000",
1789
                 ARG_QEMU_CAPS, NONE);
1790

1791
    DO_TEST_FULL("migrate-numa-unaligned",
1792 1793
                 ARG_MIGRATE_FROM, "stdio",
                 ARG_MIGRATE_FD, 7,
1794
                 ARG_QEMU_CAPS,
A
Andrea Bolognani 已提交
1795 1796
                 QEMU_CAPS_NUMA,
                 QEMU_CAPS_OBJECT_MEMORY_RAM);
1797

1798 1799
    DO_TEST_CAPS_VER("qemu-ns", "4.0.0");
    DO_TEST_CAPS_LATEST("qemu-ns");
1800
    DO_TEST("qemu-ns-no-env", NONE);
1801
    DO_TEST("qemu-ns-alt", NONE);
1802

1803
    DO_TEST("smp", NONE);
1804
    DO_TEST("smp-dies", QEMU_CAPS_SMP_DIES);
1805

J
John Ferlan 已提交
1806
    DO_TEST("iothreads", QEMU_CAPS_OBJECT_IOTHREAD);
1807 1808
    DO_TEST("iothreads-ids", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-ids-partial", QEMU_CAPS_OBJECT_IOTHREAD);
1809
    DO_TEST_FAILURE("iothreads-nocap", NONE);
1810 1811
    DO_TEST("iothreads-disk", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-disk-virtio-ccw", QEMU_CAPS_OBJECT_IOTHREAD,
1812
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1813 1814
    DO_TEST_CAPS_LATEST("iothreads-virtio-scsi-pci");
    DO_TEST_CAPS_ARCH_LATEST("iothreads-virtio-scsi-ccw", "s390x");
J
John Ferlan 已提交
1815

1816 1817
    DO_TEST("cpu-topology1", NONE);
    DO_TEST("cpu-topology2", NONE);
1818
    DO_TEST("cpu-topology3", NONE);
1819 1820 1821 1822 1823 1824 1825 1826
    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);
1827
    DO_TEST("cpu-no-removed-features", QEMU_CAPS_KVM);
1828
    DO_TEST("cpu-numa1", NONE);
1829 1830
    DO_TEST("cpu-numa2", NONE);
    DO_TEST("cpu-numa-no-memory-element", NONE);
1831
    DO_TEST_PARSE_ERROR("cpu-numa3", NONE);
1832
    DO_TEST_PARSE_ERROR("cpu-numa-disjoint", NONE);
1833
    DO_TEST("cpu-numa-disjoint", QEMU_CAPS_NUMA);
1834
    DO_TEST_FAILURE("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_RAM);
1835
    DO_TEST_PARSE_ERROR("cpu-numa-memshared", NONE);
1836
    DO_TEST("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_FILE);
1837
    DO_TEST("cpu-host-model", NONE);
1838
    DO_TEST("cpu-host-model-vendor", NONE);
1839
    DO_TEST_FULL("cpu-host-model-fallback",
1840
                 ARG_FLAGS, FLAG_SKIP_LEGACY_CPUS,
1841
                 ARG_QEMU_CAPS, NONE);
1842
    DO_TEST_FULL("cpu-host-model-nofallback",
1843
                 ARG_FLAGS, FLAG_SKIP_LEGACY_CPUS | FLAG_EXPECT_FAILURE,
1844
                 ARG_QEMU_CAPS, NONE);
A
Andrea Bolognani 已提交
1845 1846
    DO_TEST("cpu-host-passthrough", QEMU_CAPS_KVM);
    DO_TEST_FAILURE("cpu-qemu-host-passthrough", QEMU_CAPS_KVM);
1847

1848
    qemuTestSetHostArch(&driver, VIR_ARCH_S390X);
1849
    DO_TEST("cpu-s390-zEC12", QEMU_CAPS_KVM, QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1850 1851
    DO_TEST("cpu-s390-features", QEMU_CAPS_KVM, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION);
    DO_TEST_FAILURE("cpu-s390-features", QEMU_CAPS_KVM);
1852
    qemuTestSetHostArch(&driver, VIR_ARCH_NONE);
1853

1854
    qemuTestSetHostCPU(&driver, driver.hostarch, cpuHaswell);
1855 1856 1857 1858
    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);
1859
    DO_TEST("cpu-host-model-cmt", NONE);
1860
    DO_TEST_CAPS_VER("cpu-host-model-cmt", "4.0.0");
1861
    DO_TEST("cpu-tsc-frequency", QEMU_CAPS_KVM);
1862
    DO_TEST_CAPS_VER("cpu-tsc-frequency", "4.0.0");
1863 1864
    DO_TEST_CAPS_VER("cpu-translation", "4.0.0");
    DO_TEST_CAPS_LATEST("cpu-translation");
1865
    qemuTestSetHostCPU(&driver, driver.hostarch, NULL);
1866

1867 1868
    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);
1869
    DO_TEST("luks-disks", QEMU_CAPS_OBJECT_SECRET);
1870
    DO_TEST("luks-disks-source", QEMU_CAPS_OBJECT_SECRET);
1871 1872
    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);
1873
    DO_TEST_CAPS_LATEST("luks-disks-source-qcow2");
1874
    DO_TEST_PARSE_ERROR("luks-disk-invalid", NONE);
1875
    DO_TEST_PARSE_ERROR("luks-disks-source-both", QEMU_CAPS_OBJECT_SECRET);
1876

1877 1878 1879 1880 1881 1882 1883 1884
    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);
1885
    DO_TEST("cputune-numatune",
1886
            QEMU_CAPS_KVM,
1887
            QEMU_CAPS_OBJECT_IOTHREAD,
1888 1889
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1890 1891 1892
    DO_TEST("vcpu-placement-static",
            QEMU_CAPS_KVM,
            QEMU_CAPS_OBJECT_IOTHREAD);
1893

1894
    DO_TEST("numatune-memory", NONE);
1895
    DO_TEST_PARSE_ERROR("numatune-memory-invalid-nodeset", NONE);
A
Andrea Bolognani 已提交
1896 1897 1898
    DO_TEST("numatune-memnode",
            QEMU_CAPS_NUMA,
            QEMU_CAPS_OBJECT_MEMORY_RAM);
1899
    DO_TEST_PARSE_ERROR("numatune-memnode", NONE);
1900

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

1906 1907
    DO_TEST("numatune-distances", QEMU_CAPS_NUMA, QEMU_CAPS_NUMA_DIST);

1908
    DO_TEST("numatune-auto-nodeset-invalid", NONE);
1909 1910
    DO_TEST("numatune-auto-prefer", QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1911 1912
    DO_TEST_FAILURE("numatune-static-nodeset-exceed-hostnode",
                    QEMU_CAPS_OBJECT_MEMORY_RAM);
1913 1914
    DO_TEST_PARSE_ERROR("numatune-memnode-nocpu", NONE);
    DO_TEST_PARSE_ERROR("numatune-memnodes-problematic", NONE);
1915 1916
    DO_TEST("numad", NONE);
    DO_TEST("numad-auto-vcpu-static-numatune", NONE);
1917
    DO_TEST_PARSE_ERROR("numad-auto-vcpu-static-numatune-no-nodeset", NONE);
1918 1919 1920
    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);
1921 1922 1923 1924 1925 1926
    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");
1927

1928
    DO_TEST("multifunction-pci-device",
1929
            QEMU_CAPS_SCSI_LSI);
1930

1931
    DO_TEST("monitor-json", NONE);
1932

1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944
    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);
1945

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

1978
    qemuTestSetHostArch(&driver, VIR_ARCH_PPC64);
A
Andrea Bolognani 已提交
1979
    DO_TEST("pseries-cpu-compat", QEMU_CAPS_KVM,
1980
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1981
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1982 1983 1984
    DO_TEST("pseries-machine-max-cpu-compat",
            QEMU_CAPS_KVM,
            QEMU_CAPS_MACHINE_PSERIES_MAX_CPU_COMPAT,
1985
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
A
Andrea Bolognani 已提交
1986
    DO_TEST("pseries-cpu-le", QEMU_CAPS_KVM,
1987
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1988
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1989 1990 1991
    DO_TEST_FAILURE("pseries-cpu-compat-power9",
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
                    QEMU_CAPS_KVM);
1992

1993
    qemuTestSetHostCPU(&driver, driver.hostarch, cpuPower9);
1994
    DO_TEST("pseries-cpu-compat-power9",
1995
            QEMU_CAPS_KVM,
1996
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1997
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1998
    qemuTestSetHostCPU(&driver, driver.hostarch, NULL);
1999

2000
    qemuTestSetHostArch(&driver, VIR_ARCH_NONE);
2001

2002
    DO_TEST("pseries-panic-missing",
2003
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2004
            QEMU_CAPS_DEVICE_SPAPR_VTY);
2005
    DO_TEST("pseries-panic-no-address",
2006
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2007
            QEMU_CAPS_DEVICE_SPAPR_VTY);
2008
    DO_TEST_FAILURE("pseries-panic-address",
2009
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
2010 2011 2012 2013 2014

    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);
2015 2016 2017 2018 2019 2020
    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);
2021 2022 2023
    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);
2024

2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046
    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);

2047
    DO_TEST("pseries-features",
2048
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2049
            QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE,
2050
            QEMU_CAPS_MACHINE_PSERIES_CAP_HTM,
2051
            QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV,
2052
            QEMU_CAPS_MACHINE_PSERIES_CAP_CCF_ASSIST,
2053
            QEMU_CAPS_MACHINE_PSERIES_CAP_CFPC,
2054
            QEMU_CAPS_MACHINE_PSERIES_CAP_SBBC,
2055
            QEMU_CAPS_MACHINE_PSERIES_CAP_IBS,
2056
            QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);
2057 2058 2059 2060 2061 2062 2063

    /* 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,
2064
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CCF_ASSIST,
2065
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CFPC,
2066 2067
                        QEMU_CAPS_MACHINE_PSERIES_CAP_SBBC,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_IBS);
2068 2069 2070 2071 2072 2073 2074

    /* 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,
2075
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CFPC,
2076
                        QEMU_CAPS_MACHINE_PSERIES_CAP_SBBC,
2077
                        QEMU_CAPS_MACHINE_PSERIES_CAP_IBS,
2078 2079 2080 2081 2082 2083 2084 2085
                        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,
2086
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CFPC,
2087
                        QEMU_CAPS_MACHINE_PSERIES_CAP_SBBC,
2088
                        QEMU_CAPS_MACHINE_PSERIES_CAP_IBS,
2089 2090 2091 2092 2093 2094 2095 2096
                        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,
2097
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CFPC,
2098
                        QEMU_CAPS_MACHINE_PSERIES_CAP_SBBC,
2099
                        QEMU_CAPS_MACHINE_PSERIES_CAP_IBS,
2100 2101 2102 2103 2104 2105 2106 2107
                        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,
2108
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CFPC,
2109
                        QEMU_CAPS_MACHINE_PSERIES_CAP_SBBC,
2110
                        QEMU_CAPS_MACHINE_PSERIES_CAP_IBS,
2111 2112
                        QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);

2113 2114 2115 2116 2117 2118 2119
    /* 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,
2120
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CCF_ASSIST,
2121 2122
                        QEMU_CAPS_MACHINE_PSERIES_CAP_SBBC,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_IBS);
2123 2124 2125 2126 2127 2128 2129 2130 2131

    /* 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,
2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144
                        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);
2145

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

2148
    DO_TEST("pseries-serial-native",
2149
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2150 2151
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial+console-native",
2152
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2153 2154
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial-compat",
2155
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2156
            QEMU_CAPS_DEVICE_SPAPR_VTY);
2157
    DO_TEST("pseries-serial-pci",
2158
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2159 2160
            QEMU_CAPS_DEVICE_PCI_SERIAL);
    DO_TEST("pseries-serial-usb",
2161
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2162 2163
            QEMU_CAPS_DEVICE_QEMU_XHCI,
            QEMU_CAPS_DEVICE_USB_SERIAL);
2164
    DO_TEST("pseries-console-native",
2165
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2166 2167
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-console-virtio",
2168
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
2169
    DO_TEST_PARSE_ERROR("pseries-serial-invalid-machine", NONE);
2170
    DO_TEST_PARSE_ERROR("pseries-spaprvio-invalid", "ppc64");
2171

2172
    DO_TEST("mach-virt-serial-native",
2173
            QEMU_CAPS_DEVICE_PL011);
2174
    DO_TEST("mach-virt-serial+console-native",
2175
            QEMU_CAPS_DEVICE_PL011);
2176
    DO_TEST("mach-virt-serial-compat",
2177
            QEMU_CAPS_DEVICE_PL011);
2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189
    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",
2190
            QEMU_CAPS_DEVICE_PL011);
2191 2192
    DO_TEST("mach-virt-console-virtio",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
2193 2194
    DO_TEST_PARSE_ERROR("mach-virt-serial-invalid-machine", NONE);

2195 2196
    DO_TEST("disk-ide-split", NONE);
    DO_TEST("disk-ide-wwn", QEMU_CAPS_IDE_DRIVE_WWN);
2197

2198
    DO_TEST("disk-geometry", NONE);
2199
    DO_TEST("disk-blockio", QEMU_CAPS_BLOCKIO);
2200

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

2276 2277 2278 2279 2280
    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");

2281 2282
    DO_TEST("virtio-rng-default",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2283
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2284 2285
    DO_TEST("virtio-rng-random",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2286
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2287 2288
    DO_TEST("virtio-rng-egd",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2289
            QEMU_CAPS_OBJECT_RNG_EGD);
H
Han Han 已提交
2290
    DO_TEST_CAPS_LATEST("virtio-rng-builtin");
J
Ján Tomko 已提交
2291 2292
    DO_TEST_CAPS_VER("virtio-rng-egd-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("virtio-rng-egd-unix");
2293 2294 2295 2296
    DO_TEST("virtio-rng-multiple",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2297
    DO_TEST_PARSE_ERROR("virtio-rng-egd-crash",
2298 2299
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD);
2300
    DO_TEST("virtio-rng-ccw",
2301
            QEMU_CAPS_CCW,
2302 2303
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2304
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2305

2306
    DO_TEST("s390-allow-bogus-usb-none",
2307 2308 2309
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2310
    DO_TEST("s390-allow-bogus-usb-controller",
2311 2312 2313
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2314

2315
    DO_TEST("s390-panic-no-address",
2316
            QEMU_CAPS_CCW,
2317
            QEMU_CAPS_VIRTIO_S390);
2318
    DO_TEST_FAILURE("s390-panic-address",
2319
            QEMU_CAPS_CCW,
2320
            QEMU_CAPS_VIRTIO_S390);
2321
    DO_TEST("s390-panic-missing",
2322
            QEMU_CAPS_CCW,
2323
            QEMU_CAPS_VIRTIO_S390);
2324
    DO_TEST_PARSE_ERROR("s390-no-parallel",
2325
            QEMU_CAPS_CCW,
2326
            QEMU_CAPS_VIRTIO_S390);
2327
    DO_TEST("s390-serial",
2328
            QEMU_CAPS_CCW,
2329 2330 2331
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
    DO_TEST("s390-serial-2",
2332
            QEMU_CAPS_CCW,
2333 2334 2335 2336
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE,
            QEMU_CAPS_DEVICE_SCLPLMCONSOLE);
    DO_TEST("s390-serial-console",
2337
            QEMU_CAPS_CCW,
2338 2339
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
2340

2341
    DO_TEST("ppc-dtb",
J
Ján Tomko 已提交
2342
            QEMU_CAPS_KVM);
2343 2344
    DO_TEST("ppce500-serial",
            QEMU_CAPS_KVM);
O
Olivia Yin 已提交
2345

2346 2347
    DO_TEST_CAPS_LATEST("tpm-passthrough");
    DO_TEST_CAPS_LATEST("tpm-passthrough-crb");
2348
    DO_TEST_PARSE_ERROR("tpm-no-backend-invalid",
2349
                        QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
2350
    DO_TEST_CAPS_LATEST("tpm-emulator");
2351
    DO_TEST_CAPS_LATEST("tpm-emulator-tpm2");
2352
    DO_TEST_CAPS_LATEST("tpm-emulator-tpm2-enc");
2353
    DO_TEST_CAPS_LATEST_PPC64("tpm-emulator-spapr");
2354

2355 2356 2357 2358
    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);
2359

2360 2361 2362 2363 2364 2365
    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,
2366
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
2367 2368
    DO_TEST("pci-autoadd-idx",
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2369 2370
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("pci-autofill-addr", QEMU_CAPS_DEVICE_CIRRUS_VGA);
2371
    DO_TEST("pci-many",
2372
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
2373
    DO_TEST("pci-bridge-many-disks",
2374
            QEMU_CAPS_DEVICE_PCI_BRIDGE);
L
Laine Stump 已提交
2375
    DO_TEST("pcie-root",
2376 2377 2378 2379
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL);
2380
    DO_TEST("q35",
2381
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2382
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2383
            QEMU_CAPS_DEVICE_IOH3420,
2384
            QEMU_CAPS_ICH9_AHCI,
2385
            QEMU_CAPS_ICH9_USB_EHCI1,
2386
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2387
            QEMU_CAPS_DEVICE_QXL);
2388 2389 2390 2391 2392 2393 2394 2395
    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);
2396
    DO_TEST("q35-pm-disable",
2397
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2398
            QEMU_CAPS_DEVICE_IOH3420,
2399 2400 2401 2402
            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",
2403
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2404
            QEMU_CAPS_DEVICE_IOH3420,
2405 2406
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4);
2407
    DO_TEST("q35-usb2",
2408
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2409
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2410
            QEMU_CAPS_DEVICE_IOH3420,
2411
            QEMU_CAPS_ICH9_AHCI,
2412
            QEMU_CAPS_ICH9_USB_EHCI1,
2413
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2414
            QEMU_CAPS_DEVICE_QXL);
2415
    DO_TEST("q35-usb2-multi",
2416
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2417
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2418
            QEMU_CAPS_DEVICE_IOH3420,
2419
            QEMU_CAPS_ICH9_AHCI,
2420
            QEMU_CAPS_ICH9_USB_EHCI1,
2421
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2422
            QEMU_CAPS_DEVICE_QXL);
2423
    DO_TEST("q35-usb2-reorder",
2424
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2425
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2426
            QEMU_CAPS_DEVICE_IOH3420,
2427
            QEMU_CAPS_ICH9_AHCI,
2428
            QEMU_CAPS_ICH9_USB_EHCI1,
2429
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2430
            QEMU_CAPS_DEVICE_QXL);
2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448
    /* 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,
2449
            QEMU_CAPS_NEC_USB_XHCI,
2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462
            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,
2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482
            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,
2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496
            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,
2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515
            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,
2516 2517 2518 2519 2520
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
2521 2522 2523 2524 2525 2526 2527 2528
            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,
2529
            QEMU_CAPS_NEC_USB_XHCI,
2530
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2531 2532
    DO_TEST("q35-virt-manager-basic",
            QEMU_CAPS_KVM,
2533
            QEMU_CAPS_MACHINE_VMPORT_OPT,
2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557
            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,
2558
            QEMU_CAPS_DEVICE_ISA_SERIAL,
2559
            QEMU_CAPS_USB_REDIR);
2560 2561

    /* Test automatic and manual setting of pcie-root-port attributes */
2562 2563
    DO_TEST("pcie-root-port",
            QEMU_CAPS_DEVICE_IOH3420,
2564
            QEMU_CAPS_ICH9_AHCI,
2565
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2566
            QEMU_CAPS_DEVICE_QXL);
2567 2568 2569 2570 2571 2572

    /* 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,
2573
            QEMU_CAPS_DEVICE_IOH3420);
2574
    DO_TEST("pcie-root-port-model-ioh3420",
2575
            QEMU_CAPS_DEVICE_IOH3420);
2576
    DO_TEST_CAPS_LATEST("pcie-root-port-nohotplug");
2577

2578 2579 2580 2581 2582 2583 2584
    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,
2585
            QEMU_CAPS_ICH9_USB_EHCI1,
2586
            QEMU_CAPS_NEC_USB_XHCI);
2587 2588 2589 2590 2591 2592 2593
    /* 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);
2594

2595
    DO_TEST_PARSE_ERROR("q35-wrong-root",
2596
            QEMU_CAPS_DEVICE_IOH3420,
2597
            QEMU_CAPS_ICH9_AHCI,
2598
            QEMU_CAPS_ICH9_USB_EHCI1,
2599
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2600
            QEMU_CAPS_DEVICE_QXL);
2601
    DO_TEST_PARSE_ERROR("440fx-wrong-root", NONE);
2602
    DO_TEST_PARSE_ERROR("440fx-ide-address-conflict", NONE);
2603

2604
    DO_TEST_PARSE_ERROR("pcie-root-port-too-many",
2605
            QEMU_CAPS_DEVICE_IOH3420,
2606
            QEMU_CAPS_ICH9_AHCI,
2607
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2608
            QEMU_CAPS_DEVICE_QXL);
2609

2610 2611 2612
    DO_TEST("pcie-switch-upstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
2613
            QEMU_CAPS_ICH9_AHCI,
2614
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2615
            QEMU_CAPS_DEVICE_QXL);
2616 2617 2618 2619
    DO_TEST("pcie-switch-downstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
2620
            QEMU_CAPS_ICH9_AHCI,
2621
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2622
            QEMU_CAPS_DEVICE_QXL);
2623

2624 2625 2626 2627 2628 2629
    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);
2630 2631
    DO_TEST_PARSE_ERROR("pci-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_PXB);
2632

2633 2634 2635 2636 2637 2638 2639 2640 2641 2642
    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);
2643 2644 2645
    DO_TEST_PARSE_ERROR("pcie-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_IOH3420,
                        QEMU_CAPS_DEVICE_PXB_PCIE);
2646

2647
    DO_TEST("hostdev-scsi-lsi",
2648 2649
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2650
    DO_TEST("hostdev-scsi-virtio-scsi",
2651 2652
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2653
    DO_TEST("hostdev-scsi-readonly",
2654 2655
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2656
    DO_TEST("hostdev-scsi-virtio-scsi",
2657 2658
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2659
    DO_TEST("hostdev-scsi-lsi-iscsi",
2660 2661
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2662
    DO_TEST("hostdev-scsi-lsi-iscsi-auth",
2663 2664
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2665
    DO_TEST("hostdev-scsi-virtio-iscsi",
2666 2667
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2668
    DO_TEST("hostdev-scsi-virtio-iscsi-auth",
2669 2670
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2671
    DO_TEST("disk-hostdev-scsi-virtio-iscsi-auth-AES",
2672 2673 2674
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_OBJECT_SECRET,
2675
            QEMU_CAPS_ISCSI_PASSWORD_SECRET);
2676 2677
    DO_TEST("hostdev-scsi-vhost-scsi-ccw",
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_VHOST_SCSI,
2678
            QEMU_CAPS_CCW);
2679
    DO_TEST("hostdev-scsi-vhost-scsi-pci",
2680 2681
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VHOST_SCSI);
2682
    DO_TEST_CAPS_LATEST_PARSE_ERROR("hostdev-scsi-vhost-scsi-pci-boot-fail");
2683 2684 2685 2686 2687
    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);
2688

2689 2690
    DO_TEST_CAPS_VER("mlock-on", "3.0.0");
    DO_TEST_CAPS_VER("mlock-off", "3.0.0");
2691 2692
    DO_TEST_CAPS_LATEST("mlock-on");
    DO_TEST_CAPS_LATEST("mlock-off");
2693

2694 2695 2696 2697
    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);
2698

2699
    DO_TEST("hotplug-base",
2700
            QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_SCSI);
2701

2702
    DO_TEST("pcihole64", QEMU_CAPS_I440FX_PCI_HOLE64_SIZE);
2703
    DO_TEST_PARSE_ERROR("pcihole64-none", NONE);
2704
    DO_TEST("pcihole64-q35",
2705
            QEMU_CAPS_DEVICE_IOH3420,
2706
            QEMU_CAPS_ICH9_AHCI,
2707
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2708
            QEMU_CAPS_DEVICE_QXL,
2709 2710
            QEMU_CAPS_Q35_PCI_HOLE64_SIZE);

J
Ján Tomko 已提交
2711 2712
    DO_TEST("arm-vexpressa9-nodevs", NONE);
    DO_TEST("arm-vexpressa9-basic", NONE);
2713
    DO_TEST("arm-vexpressa9-virtio",
2714
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2715
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2716
    DO_TEST("arm-virt-virtio",
2717
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2718
            QEMU_CAPS_DEVICE_PL011,
2719
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2720

2721
    DO_TEST("aarch64-virt-virtio",
2722
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2723
            QEMU_CAPS_DEVICE_PL011,
2724
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2725 2726 2727 2728 2729 2730

    /* 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",
2731
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
2732 2733 2734
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2735
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2736
            QEMU_CAPS_DEVICE_IOH3420,
2737
            QEMU_CAPS_DEVICE_PL011,
2738
            QEMU_CAPS_VIRTIO_SCSI);
2739
    DO_TEST("aarch64-virt-2.6-virtio-pci-default",
2740
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2741 2742
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2743
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2744
            QEMU_CAPS_DEVICE_PL011,
2745
            QEMU_CAPS_DEVICE_IOH3420);
2746 2747 2748
    /* Example of using virtio-pci with no explicit PCI controller
       but with manual PCI addresses */
    DO_TEST("aarch64-virtio-pci-manual-addresses",
2749
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2750 2751
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2752 2753 2754
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_VIRTIO_SCSI);
2755
    DO_TEST("aarch64-video-virtio-gpu-pci",
2756
            QEMU_CAPS_OBJECT_GPEX,
2757
            QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_IOH3420,
2758
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2759
            QEMU_CAPS_DEVICE_VIRTIO_GPU);
2760
    DO_TEST("aarch64-video-default",
2761
            QEMU_CAPS_OBJECT_GPEX,
2762
            QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_IOH3420,
2763
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2764 2765
            QEMU_CAPS_DEVICE_VIRTIO_GPU, QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_VNC);
2766
    DO_TEST("aarch64-aavmf-virtio-mmio",
2767
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2768
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2769 2770
    DO_TEST("aarch64-virt-default-nic",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
2771
    qemuTestSetHostArch(&driver, VIR_ARCH_AARCH64);
2772
    DO_TEST("aarch64-cpu-passthrough",
2773
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2774
            QEMU_CAPS_KVM);
2775
    DO_TEST_GIC("aarch64-gic-none", GIC_NONE,
2776
            QEMU_CAPS_KVM,
2777
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2778
    DO_TEST_GIC("aarch64-gic-none-v2", GIC_V2,
2779
            QEMU_CAPS_KVM,
2780 2781
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-none-v3", GIC_V3,
2782
            QEMU_CAPS_KVM,
2783
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2784
    DO_TEST_GIC("aarch64-gic-none-both", GIC_BOTH,
2785
            QEMU_CAPS_KVM,
2786
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2787 2788
    DO_TEST_GIC("aarch64-gic-none-tcg", GIC_BOTH,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2789
    DO_TEST_GIC("aarch64-gic-default", GIC_NONE,
2790
            QEMU_CAPS_KVM,
2791
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
A
Andrea Bolognani 已提交
2792
    DO_TEST_GIC("aarch64-gic-default-v2", GIC_V2,
2793
            QEMU_CAPS_KVM,
2794
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
A
Andrea Bolognani 已提交
2795
    DO_TEST_GIC("aarch64-gic-default-v3", GIC_V3,
2796
            QEMU_CAPS_KVM,
2797
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
A
Andrea Bolognani 已提交
2798
    DO_TEST_GIC("aarch64-gic-default-both", GIC_BOTH,
2799
            QEMU_CAPS_KVM,
2800 2801
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v2", GIC_NONE,
2802
            QEMU_CAPS_KVM,
2803 2804
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v2", GIC_V2,
2805
            QEMU_CAPS_KVM,
2806 2807
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v2", GIC_V3,
2808
            QEMU_CAPS_KVM,
2809
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2810
    DO_TEST_GIC("aarch64-gic-v2", GIC_BOTH,
2811
            QEMU_CAPS_KVM,
2812
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2813
    DO_TEST_FAILURE("aarch64-gic-v3",
2814
            QEMU_CAPS_KVM, NONE);
2815
    DO_TEST_GIC("aarch64-gic-v3", GIC_NONE,
2816
            QEMU_CAPS_KVM,
2817 2818
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v3", GIC_V2,
2819
            QEMU_CAPS_KVM,
2820 2821
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v3", GIC_V3,
2822
            QEMU_CAPS_KVM,
2823 2824
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v3", GIC_BOTH,
2825
            QEMU_CAPS_KVM,
2826
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2827
    DO_TEST_FAILURE("aarch64-gic-host",
2828
            QEMU_CAPS_KVM, NONE);
2829
    DO_TEST_GIC("aarch64-gic-host", GIC_NONE,
2830
            QEMU_CAPS_KVM,
2831 2832
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-host", GIC_V2,
2833
            QEMU_CAPS_KVM,
2834 2835
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-host", GIC_V3,
2836
            QEMU_CAPS_KVM,
2837 2838
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-host", GIC_BOTH,
2839
            QEMU_CAPS_KVM,
2840
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2841
    DO_TEST_PARSE_ERROR("aarch64-gic-invalid",
2842
            QEMU_CAPS_KVM,
2843
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2844
    DO_TEST_PARSE_ERROR("aarch64-gic-not-virt",
2845
                        QEMU_CAPS_KVM,
2846 2847
                        QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_PARSE_ERROR("aarch64-gic-not-arm",
2848
                        QEMU_CAPS_KVM,
2849
                        QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2850
    DO_TEST("aarch64-kvm-32-on-64",
2851
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2852
            QEMU_CAPS_DEVICE_PL011,
A
Andrea Bolognani 已提交
2853
            QEMU_CAPS_KVM, QEMU_CAPS_CPU_AARCH64_OFF);
2854
    DO_TEST_FAILURE("aarch64-kvm-32-on-64",
2855
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2856
            QEMU_CAPS_KVM);
2857 2858 2859 2860 2861 2862 2863
    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);
2864 2865 2866 2867
    DO_TEST("aarch64-traditional-pci",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2868
            QEMU_CAPS_DEVICE_PCIE_PCI_BRIDGE,
2869 2870
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_SERIAL);
2871 2872 2873 2874 2875 2876 2877

    /* 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);

2878 2879 2880 2881 2882 2883 2884 2885 2886
    /* 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");

2887 2888
    DO_TEST_CAPS_ARCH_LATEST("clock-timer-armvtimer", "aarch64");

2889
    qemuTestSetHostArch(&driver, VIR_ARCH_NONE);
2890

2891
    DO_TEST("kvm-pit-delay", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2892
    DO_TEST("kvm-pit-discard", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2893

2894 2895 2896 2897
    DO_TEST("panic",
            QEMU_CAPS_DEVICE_PANIC);
    DO_TEST("panic-double",
            QEMU_CAPS_DEVICE_PANIC);
H
Hu Tao 已提交
2898

2899 2900
    DO_TEST("panic-no-address",
            QEMU_CAPS_DEVICE_PANIC);
2901

2902 2903
    DO_TEST("fips-enabled", QEMU_CAPS_ENABLE_FIPS);

J
Ján Tomko 已提交
2904
    DO_TEST("shmem", QEMU_CAPS_DEVICE_IVSHMEM);
2905 2906 2907
    DO_TEST("shmem-plain-doorbell", QEMU_CAPS_DEVICE_IVSHMEM,
            QEMU_CAPS_DEVICE_IVSHMEM_PLAIN,
            QEMU_CAPS_DEVICE_IVSHMEM_DOORBELL);
2908
    DO_TEST_FAILURE("shmem", NONE);
J
Ján Tomko 已提交
2909
    DO_TEST_FAILURE("shmem-invalid-size",
2910
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2911
    DO_TEST_FAILURE("shmem-invalid-address",
2912
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2913
    DO_TEST_FAILURE("shmem-small-size",
2914
                    QEMU_CAPS_DEVICE_IVSHMEM);
2915
    DO_TEST_PARSE_ERROR("shmem-msi-only", NONE);
A
Andrea Bolognani 已提交
2916
    DO_TEST("cpu-host-passthrough-features", QEMU_CAPS_KVM);
2917

2918
    DO_TEST_FAILURE("memory-align-fail", NONE);
2919
    DO_TEST_FAILURE("memory-hotplug-nonuma", QEMU_CAPS_DEVICE_PC_DIMM);
M
Michal Privoznik 已提交
2920
    DO_TEST("memory-hotplug", NONE);
2921
    DO_TEST("memory-hotplug", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA);
2922
    DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2923
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2924
    DO_TEST("memory-hotplug-dimm-addr", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2925
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2926
    DO_TEST("memory-hotplug-ppc64-nonuma", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2927
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2928
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2929 2930 2931
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm");
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-access");
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-label");
2932
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-align");
2933
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-pmem");
2934
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-readonly");
2935
    DO_TEST_CAPS_ARCH_LATEST("memory-hotplug-nvdimm-ppc64", "ppc64");
2936

2937
    DO_TEST("machine-aeskeywrap-on-caps",
2938
            QEMU_CAPS_AES_KEY_WRAP,
2939
            QEMU_CAPS_DEA_KEY_WRAP,
2940
            QEMU_CAPS_VIRTIO_SCSI,
2941
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2942
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps",
2943
                    QEMU_CAPS_VIRTIO_SCSI,
2944
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2945 2946 2947
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps", NONE);

    DO_TEST("machine-aeskeywrap-on-cap",
2948
            QEMU_CAPS_AES_KEY_WRAP,
2949
            QEMU_CAPS_VIRTIO_SCSI,
2950
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2951
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap",
2952
                    QEMU_CAPS_VIRTIO_SCSI,
2953
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2954 2955 2956
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap", NONE);

    DO_TEST("machine-aeskeywrap-off-caps",
2957
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2958
            QEMU_CAPS_VIRTIO_SCSI,
2959
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2960
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps",
2961
                    QEMU_CAPS_VIRTIO_SCSI,
2962
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2963 2964 2965
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", NONE);

    DO_TEST("machine-aeskeywrap-off-cap",
2966
            QEMU_CAPS_AES_KEY_WRAP,
2967
            QEMU_CAPS_VIRTIO_SCSI,
2968
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2969
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap",
2970
                    QEMU_CAPS_VIRTIO_SCSI,
2971
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2972 2973 2974
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap", NONE);

    DO_TEST("machine-deakeywrap-on-caps",
2975
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2976
            QEMU_CAPS_VIRTIO_SCSI,
2977
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2978
    DO_TEST_FAILURE("machine-deakeywrap-on-caps",
2979
                    QEMU_CAPS_VIRTIO_SCSI,
2980
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2981 2982 2983
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", NONE);

    DO_TEST("machine-deakeywrap-on-cap",
2984
            QEMU_CAPS_DEA_KEY_WRAP,
2985
            QEMU_CAPS_VIRTIO_SCSI,
2986
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2987
    DO_TEST_FAILURE("machine-deakeywrap-on-cap",
2988
                    QEMU_CAPS_VIRTIO_SCSI,
2989
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2990 2991 2992
    DO_TEST_FAILURE("machine-deakeywrap-on-cap", NONE);

    DO_TEST("machine-deakeywrap-off-caps",
2993
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2994
            QEMU_CAPS_VIRTIO_SCSI,
2995
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2996
    DO_TEST_FAILURE("machine-deakeywrap-off-caps",
2997
                    QEMU_CAPS_VIRTIO_SCSI,
2998
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2999 3000 3001
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", NONE);

    DO_TEST("machine-deakeywrap-off-cap",
3002
            QEMU_CAPS_DEA_KEY_WRAP,
3003
            QEMU_CAPS_VIRTIO_SCSI,
3004
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
3005
    DO_TEST_FAILURE("machine-deakeywrap-off-cap",
3006
                    QEMU_CAPS_VIRTIO_SCSI,
3007
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
3008 3009 3010
    DO_TEST_FAILURE("machine-deakeywrap-off-cap", NONE);

    DO_TEST("machine-keywrap-none-caps",
3011
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
3012
            QEMU_CAPS_VIRTIO_SCSI,
3013
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
3014
    DO_TEST("machine-keywrap-none",
3015
            QEMU_CAPS_VIRTIO_SCSI,
3016
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
3017

3018
    DO_TEST("machine-loadparm-s390",
3019
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390,
3020
            QEMU_CAPS_LOADPARM);
3021
    DO_TEST("machine-loadparm-net-s390",
3022
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390,
3023
            QEMU_CAPS_LOADPARM);
3024
    DO_TEST("machine-loadparm-multiple-disks-nets-s390",
3025
            QEMU_CAPS_CCW,
3026
            QEMU_CAPS_VIRTIO_S390,
3027 3028
            QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-char-invalid",
3029
                        QEMU_CAPS_CCW,
3030
                        QEMU_CAPS_VIRTIO_S390,
3031 3032
                        QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-len-invalid",
3033
                        QEMU_CAPS_CCW,
3034
                        QEMU_CAPS_VIRTIO_S390,
3035 3036
                        QEMU_CAPS_LOADPARM);

J
Jiri Denemark 已提交
3037 3038 3039 3040 3041 3042 3043
    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);

3044
    DO_TEST("virtio-input", QEMU_CAPS_VIRTIO_KEYBOARD,
3045
            QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET);
3046
    DO_TEST("virtio-input-passthrough", QEMU_CAPS_VIRTIO_INPUT_HOST);
3047

3048
    DO_TEST("ppc64-usb-controller",
3049
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
3050
            QEMU_CAPS_PCI_OHCI);
3051
    DO_TEST("ppc64-usb-controller-legacy",
3052
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
3053
            QEMU_CAPS_PIIX3_USB_UHCI);
3054
    DO_TEST_FULL("ppc64-usb-controller-qemu-xhci",
3055
                 ARG_PARSEFLAGS, VIR_DOMAIN_DEF_PARSE_ABI_UPDATE,
3056
                 ARG_QEMU_CAPS,
3057
                 QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
3058 3059 3060 3061 3062 3063 3064
                 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);
3065

3066 3067 3068 3069
    DO_TEST("aarch64-usb-controller-nec-xhci",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_NEC_USB_XHCI);

3070
    /* VM XML has invalid arch/ostype/virttype combo, but the SKIP flag
3071 3072 3073 3074 3075
     * 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.
     */
3076
    DO_TEST_FULL("missing-machine",
3077
                 ARG_FLAGS, FLAG_EXPECT_FAILURE,
3078 3079
                 ARG_PARSEFLAGS, VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE,
                 ARG_QEMU_CAPS, NONE);
3080

3081 3082 3083
    DO_TEST("name-escape",
            QEMU_CAPS_NAME_DEBUG_THREADS,
            QEMU_CAPS_OBJECT_SECRET,
3084 3085
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_GROUP,
3086 3087 3088 3089
            QEMU_CAPS_VNC,
            QEMU_CAPS_NAME_GUEST,
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_SPICE,
3090
            QEMU_CAPS_SPICE_UNIX,
3091 3092 3093 3094 3095
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_SPICE_GL,
            QEMU_CAPS_SPICE_RENDERNODE,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
3096
            QEMU_CAPS_DEVICE_ISA_SERIAL,
3097
            QEMU_CAPS_CHARDEV_FILE_APPEND,
3098
            QEMU_CAPS_CCID_EMULATED,
3099
            QEMU_CAPS_VIRTIO_SCSI);
M
Marc-André Lureau 已提交
3100 3101
    DO_TEST("debug-threads", QEMU_CAPS_NAME_DEBUG_THREADS);

3102
    DO_TEST("master-key", QEMU_CAPS_OBJECT_SECRET);
3103
    DO_TEST("usb-long-port-path",
J
Ján Tomko 已提交
3104
            QEMU_CAPS_USB_HUB);
3105
    DO_TEST_PARSE_ERROR("usb-too-long-port-path-invalid",
3106
                        QEMU_CAPS_USB_HUB);
3107

3108
    DO_TEST("acpi-table", NONE);
3109 3110 3111 3112 3113 3114

    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");
3115
    DO_TEST_CAPS_LATEST_PARSE_ERROR("intel-iommu-wrong-machine");
3116
    DO_TEST_CAPS_ARCH_LATEST("iommu-smmuv3", "aarch64");
3117

3118
    DO_TEST("cpu-hotplug-startup", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);
3119 3120 3121
    DO_TEST_PARSE_ERROR("cpu-hotplug-granularity",
                        QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);

3122
    DO_TEST_CAPS_LATEST("virtio-options");
3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146
    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");
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 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188
    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);
3189

J
Ján Tomko 已提交
3190
    DO_TEST("fd-memory-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
3191
            QEMU_CAPS_KVM);
J
Ján Tomko 已提交
3192
    DO_TEST("fd-memory-numa-topology2", QEMU_CAPS_OBJECT_MEMORY_FILE,
3193
            QEMU_CAPS_KVM);
J
Ján Tomko 已提交
3194
    DO_TEST("fd-memory-numa-topology3", QEMU_CAPS_OBJECT_MEMORY_FILE,
3195 3196
            QEMU_CAPS_KVM);

J
Ján Tomko 已提交
3197
    DO_TEST("fd-memory-no-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
3198 3199
            QEMU_CAPS_KVM);

M
Marc-André Lureau 已提交
3200
    DO_TEST_CAPS_LATEST("memfd-memory-numa");
3201
    DO_TEST_CAPS_LATEST("memfd-memory-default-hugepage");
M
Marc-André Lureau 已提交
3202

3203 3204 3205 3206 3207 3208 3209 3210
    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);

3211 3212 3213 3214 3215 3216 3217 3218 3219
    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 已提交
3220
    DO_TEST("vmcoreinfo", QEMU_CAPS_DEVICE_VMCOREINFO);
3221

3222 3223 3224
    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,
3225
            QEMU_CAPS_DEVICE_ISA_SERIAL,
3226
            QEMU_CAPS_HDA_DUPLEX,
3227 3228
            QEMU_CAPS_CCID_EMULATED,
            QEMU_CAPS_QCOW2_LUKS, QEMU_CAPS_OBJECT_SECRET);
3229
    DO_TEST("user-aliases2", QEMU_CAPS_DEVICE_IOH3420, QEMU_CAPS_ICH9_AHCI);
3230 3231
    DO_TEST("user-aliases-usb", QEMU_CAPS_KVM,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4,
3232
            QEMU_CAPS_ICH9_USB_EHCI1);
3233

3234
    DO_TEST_CAPS_VER("disk-virtio-scsi-reservations", "2.12.0");
3235
    DO_TEST_CAPS_LATEST("disk-virtio-scsi-reservations");
3236

3237
    DO_TEST_CAPS_LATEST("tseg-explicit-size");
3238 3239 3240
    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");
3241

3242
    DO_TEST("video-virtio-gpu-ccw", QEMU_CAPS_CCW,
3243 3244 3245 3246 3247 3248
            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);

3249
    DO_TEST("input-virtio-ccw", QEMU_CAPS_CCW,
3250 3251 3252 3253 3254 3255 3256
            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);

3257 3258
    DO_TEST_CAPS_LATEST("vhost-vsock");
    DO_TEST_CAPS_LATEST("vhost-vsock-auto");
3259 3260
    DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw", "s390x");
    DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw-auto", "s390x");
3261

3262
    DO_TEST_CAPS_VER("launch-security-sev", "2.12.0");
3263

3264 3265
    DO_TEST_CAPS_LATEST("vhost-user-fs-fd-memory");
    DO_TEST_CAPS_LATEST("vhost-user-fs-hugepages");
3266
    DO_TEST_CAPS_LATEST_PARSE_ERROR("vhost-user-fs-readonly");
3267

L
Lubomir Rintel 已提交
3268 3269
    DO_TEST("riscv64-virt",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
3270 3271
    DO_TEST("riscv64-virt-pci",
            QEMU_CAPS_OBJECT_GPEX);
L
Lubomir Rintel 已提交
3272

3273 3274 3275 3276 3277
    /* 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");
3278
    DO_TEST_CAPS_LATEST_PARSE_ERROR("virtio-transitional-not-supported");
3279

3280 3281 3282 3283 3284 3285 3286 3287
    /* 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");

3288 3289 3290
    /* 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");
3291
    DO_TEST_CAPS_ARCH_LATEST("riscv64-virt-graphics", "riscv64");
3292
    DO_TEST_CAPS_ARCH_LATEST("s390x-ccw-graphics", "s390x");
3293 3294 3295
    DO_TEST_CAPS_ARCH_LATEST("x86_64-pc-graphics", "x86_64");
    DO_TEST_CAPS_ARCH_LATEST("x86_64-q35-graphics", "x86_64");

3296 3297 3298 3299 3300
    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");

3301 3302 3303
    DO_TEST_CAPS_LATEST("vhost-user-vga");
    DO_TEST_CAPS_LATEST("vhost-user-gpu-secondary");

3304 3305 3306
    DO_TEST_CAPS_VER("cpu-Icelake-Server-pconfig", "3.1.0");
    DO_TEST_CAPS_LATEST("cpu-Icelake-Server-pconfig");

3307 3308
    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");
3309 3310 3311 3312 3313 3314
    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");
3315 3316
    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");
3317 3318
    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");
3319 3320 3321 3322
    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");
3323

3324 3325
    DO_TEST_CAPS_LATEST("virtio-9p-multidevs");

3326 3327 3328
    if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL)
        virFileDeleteTree(fakerootdir);

3329
    VIR_FREE(driver.config->nbdTLSx509certdir);
3330
    qemuTestDriverFree(&driver);
3331
    VIR_FREE(fakerootdir);
3332
    virHashFree(capslatest);
3333
    virFileWrapperClearPrefixes();
3334

3335
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
3336 3337
}

3338
VIR_TEST_MAIN_PRELOAD(mymain,
3339
                      VIR_TEST_MOCK("qemuxml2argv"),
M
Michal Privoznik 已提交
3340
                      VIR_TEST_MOCK("domaincaps"),
3341 3342 3343
                      VIR_TEST_MOCK("virrandom"),
                      VIR_TEST_MOCK("qemucpu"),
                      VIR_TEST_MOCK("virpci"))
3344

3345 3346
#else

3347 3348 3349 3350
int main(void)
{
    return EXIT_AM_SKIP;
}
3351 3352

#endif /* WITH_QEMU */