qemuxml2argvtest.c 116.3 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 "datatypes.h"
22
# include "conf/storage_conf.h"
23
# include "cpu/cpu_map.h"
24
# include "virstring.h"
25
# include "storage/storage_driver.h"
26
# include "virmock.h"
27 28
# include "virfilewrapper.h"
# include "configmake.h"
29

30
# define LIBVIRT_QEMU_CAPSPRIV_H_ALLOW
31 32
# include "qemu/qemu_capspriv.h"

33
# include "testutilsqemu.h"
34

35 36
# define VIR_FROM_THIS VIR_FROM_QEMU

37
static virQEMUDriver driver;
38

39 40 41 42 43 44
static unsigned char *
fakeSecretGetValue(virSecretPtr obj ATTRIBUTE_UNUSED,
                   size_t *value_size,
                   unsigned int fakeflags ATTRIBUTE_UNUSED,
                   unsigned int internalFlags ATTRIBUTE_UNUSED)
{
45 46
    char *secret;
    if (VIR_STRDUP(secret, "AQCVn5hO6HzFAhAAq0NCv8jtJcIcE+HOBlMQ1A") < 0)
47
        return NULL;
48 49 50 51 52 53
    *value_size = strlen(secret);
    return (unsigned char *) secret;
}

static virSecretPtr
fakeSecretLookupByUsage(virConnectPtr conn,
54
                        int usageType,
55 56
                        const char *usageID)
{
57
    unsigned char uuid[VIR_UUID_BUFLEN];
58 59 60 61 62 63 64 65 66 67
    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);
68
        return NULL;
69
    }
70

71 72 73
    if (virUUIDGenerate(uuid) < 0)
        return NULL;

74
    return virGetSecret(conn, uuid, usageType, usageID);
75 76
}

77 78 79 80
static virSecretPtr
fakeSecretLookupByUUID(virConnectPtr conn,
                       const unsigned char *uuid)
{
81 82 83
    /* 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, "");
84 85
}

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

98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124

# 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")) {
        if (virAsprintf(&xmlpath, "%s/%s%s.xml",
                        abs_srcdir,
                        STORAGE_POOL_XML_PATH,
                        name) < 0)
            return NULL;

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

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

125
 cleanup:
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 161
    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);

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

166
 fallback:
167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217
    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)
{
    char *ret = NULL;

    ignore_value(virAsprintf(&ret, "/some/%s/device/%s", vol->key, vol->name));

    return ret;
}


static char *
fakeStoragePoolGetXMLDesc(virStoragePoolPtr pool,
                          unsigned int flags_unused ATTRIBUTE_UNUSED)
{
    char *xmlpath = NULL;
    char *xmlbuf = NULL;

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

    if (virAsprintf(&xmlpath, "%s/%s%s.xml",
                    abs_srcdir,
                    STORAGE_POOL_XML_PATH,
                    pool->name) < 0)
        return NULL;

218
    if (virTestLoadFile(xmlpath, &xmlbuf) < 0) {
219 220 221 222 223 224
        virReportError(VIR_ERR_INTERNAL_ERROR,
                       "failed to load XML file '%s'",
                       xmlpath);
        goto cleanup;
    }

225
 cleanup:
226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242
    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
243
 * qemu command line.
244 245 246
 *
 * There are a few "magic" values to pass to these functions:
 *
247 248
 * 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
249 250 251
 * 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
252
 * pattern VOLUME_TYPE+VOLUME_PATH can be used to simulate a volume in a pool.
253 254 255 256 257 258 259 260 261 262 263 264
 * 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,
};

265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291

/* 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
fakeNWFilterBindingDelete(virNWFilterBindingPtr binding ATTRIBUTE_UNUSED)
{
    return 0;
}


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

292 293 294 295

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

317
    if (ARCH_IS_X86(arch)) {
318
        if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM, x86Models,
319 320
                                         ARRAY_CARDINALITY(x86Models),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
321
            virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU, x86Models,
322 323
                                         ARRAY_CARDINALITY(x86Models),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
324 325
            return -1;

326 327 328
        if (!skipLegacy) {
            if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM,
                                             x86LegacyModels,
329 330
                                             ARRAY_CARDINALITY(x86LegacyModels),
                                             VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
331 332
                virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU,
                                             x86LegacyModels,
333 334
                                             ARRAY_CARDINALITY(x86LegacyModels),
                                             VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
335 336
                return -1;
        }
337
    } else if (ARCH_IS_ARM(arch)) {
338
        if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM, armModels,
339 340
                                         ARRAY_CARDINALITY(armModels),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
341
            virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU, armModels,
342 343
                                         ARRAY_CARDINALITY(armModels),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
344 345
            return -1;
    } else if (ARCH_IS_PPC64(arch)) {
346
        if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM, ppc64Models,
347 348
                                         ARRAY_CARDINALITY(ppc64Models),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
349
            virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU, ppc64Models,
350 351
                                         ARRAY_CARDINALITY(ppc64Models),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
352
            return -1;
353 354 355 356 357
    } else if (ARCH_IS_S390(arch)) {
        if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM, s390xModels,
                                         ARRAY_CARDINALITY(s390xModels),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
            return -1;
358
    }
359 360 361 362 363

    return 0;
}


364
static int
365
testUpdateQEMUCaps(const struct testQemuInfo *info,
366 367
                   virDomainObjPtr vm,
                   virCapsPtr caps)
368 369 370
{
    int ret = -1;

371 372 373
    if (!caps)
        goto cleanup;

374 375
    virQEMUCapsSetArch(info->qemuCaps, vm->def->os.arch);

376 377
    virQEMUCapsInitQMPBasicArch(info->qemuCaps);

378 379
    if (testAddCPUModels(info->qemuCaps,
                         !!(info->flags & FLAG_SKIP_LEGACY_CPUS)) < 0)
380 381
        goto cleanup;

382 383 384 385
    virQEMUCapsInitHostCPUModel(info->qemuCaps, caps->host.arch,
                                VIR_DOMAIN_VIRT_KVM);
    virQEMUCapsInitHostCPUModel(info->qemuCaps, caps->host.arch,
                                VIR_DOMAIN_VIRT_QEMU);
386

387 388 389 390 391 392 393
    ret = 0;

 cleanup:
    return ret;
}


394 395 396 397 398 399
static int
testCheckExclusiveFlags(int flags)
{
    virCheckFlags(FLAG_EXPECT_FAILURE |
                  FLAG_EXPECT_PARSE_ERROR |
                  FLAG_FIPS |
400
                  FLAG_REAL_CAPS |
401
                  FLAG_SKIP_LEGACY_CPUS |
402
                  FLAG_SLIRP_HELPER |
403 404
                  0, -1);

405
    VIR_EXCLUSIVE_FLAGS_RET(FLAG_REAL_CAPS, FLAG_SKIP_LEGACY_CPUS, -1);
406 407 408 409
    return 0;
}


410 411 412
static int
testCompareXMLToArgv(const void *data)
{
413
    struct testQemuInfo *info = (void *) data;
414
    char *migrateURI = NULL;
415
    char *actualargv = NULL;
416 417
    unsigned int flags = info->flags;
    unsigned int parseFlags = info->parseFlags;
E
Eric Blake 已提交
418
    int ret = -1;
419
    virDomainObjPtr vm = NULL;
420
    virDomainChrSourceDef monitor_chr;
421
    virConnectPtr conn;
J
Jiri Denemark 已提交
422
    char *log = NULL;
E
Eric Blake 已提交
423
    virCommandPtr cmd = NULL;
424
    size_t i;
425
    qemuDomainObjPrivatePtr priv = NULL;
426

427 428
    memset(&monitor_chr, 0, sizeof(monitor_chr));

429
    if (!(conn = virGetConnect()))
430
        goto cleanup;
431

432
    conn->secretDriver = &fakeSecretDriver;
433
    conn->storageDriver = &fakeStorageDriver;
434
    conn->nwfilterDriver = &fakeNWFilterDriver;
435

436 437 438 439
    virSetConnectInterface(conn);
    virSetConnectNetwork(conn);
    virSetConnectNWFilter(conn);
    virSetConnectNodeDev(conn);
440 441 442
    virSetConnectSecret(conn);
    virSetConnectStorage(conn);

443 444 445
    if (virQEMUCapsGet(info->qemuCaps, QEMU_CAPS_ENABLE_FIPS))
        flags |= FLAG_FIPS;

446 447 448
    if (testCheckExclusiveFlags(info->flags) < 0)
        goto cleanup;

449
    if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0)
450 451 452
        goto cleanup;

    if (info->migrateFrom &&
453 454
        !(migrateURI = qemuMigrationDstGetURI(info->migrateFrom,
                                              info->migrateFd)))
455 456
        goto cleanup;

457
    if (!(vm = virDomainObjNew(driver.xmlopt)))
458
        goto cleanup;
459

460
    parseFlags |= VIR_DOMAIN_DEF_PARSE_INACTIVE;
461 462
    if (!(vm->def = virDomainDefParseFile(info->infile,
                                          driver.caps, driver.xmlopt,
463
                                          NULL, parseFlags))) {
P
Pavel Hrdina 已提交
464
        if (flags & FLAG_EXPECT_PARSE_ERROR)
465
            goto ok;
466
        goto cleanup;
467
    }
468 469 470 471
    if (flags & FLAG_EXPECT_PARSE_ERROR) {
        VIR_TEST_DEBUG("passed instead of expected parse error");
        goto cleanup;
    }
472
    priv = vm->privateData;
473

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

477
    if (!virDomainDefCheckABIStability(vm->def, vm->def, driver.xmlopt)) {
478
        VIR_TEST_DEBUG("ABI stability check failed on %s", info->infile);
479
        goto cleanup;
480 481
    }

482
    vm->def->id = -1;
483

484
    if (qemuProcessPrepareMonitorChr(&monitor_chr, priv->libDir) < 0)
485
        goto cleanup;
486

487 488
    if (!(info->flags & FLAG_REAL_CAPS) &&
        testUpdateQEMUCaps(info, vm, driver.caps) < 0)
489
        goto cleanup;
490

491
    log = virTestLogContentAndReset();
492
    VIR_FREE(log);
493
    virResetLastError();
J
Jiri Denemark 已提交
494

495 496
    for (i = 0; i < vm->def->nhostdevs; i++) {
        virDomainHostdevDefPtr hostdev = vm->def->hostdevs[i];
497 498 499 500

        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) {
501
            hostdev->source.subsys.u.pci.backend = VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO;
502 503 504
        }
    }

505 506 507 508 509 510 511 512 513 514 515
    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;
    }

516 517 518
    if (vm->def->tpm) {
        switch (vm->def->tpm->type) {
        case VIR_DOMAIN_TPM_TYPE_EMULATOR:
519
            VIR_FREE(vm->def->tpm->data.emulator.source.data.file.path);
520 521 522
            if (VIR_STRDUP(vm->def->tpm->data.emulator.source.data.file.path,
                           "/dev/test") < 0)
                goto cleanup;
523
            vm->def->tpm->data.emulator.source.type = VIR_DOMAIN_CHR_TYPE_FILE;
524 525 526 527 528 529 530
            break;
        case VIR_DOMAIN_TPM_TYPE_PASSTHROUGH:
        case VIR_DOMAIN_TPM_TYPE_LAST:
            break;
       }
    }

531 532 533 534 535 536 537 538 539 540
    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;
        }
    }

541 542 543 544 545
    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 &&
546
                virQEMUCapsGet(info->qemuCaps, QEMU_CAPS_DBUS_VMSTATE)) {
547 548 549 550 551 552 553
                qemuSlirpPtr slirp = qemuSlirpNew();
                slirp->fd[0] = 42;
                QEMU_DOMAIN_NETWORK_PRIVATE(net)->slirp = slirp;
            }
        }
    }

554
    if (!(cmd = qemuProcessCreatePretendCmd(&driver, vm, migrateURI,
P
Pavel Hrdina 已提交
555 556
                                            (flags & FLAG_FIPS), false,
                                            VIR_QEMU_PROCESS_START_COLD))) {
P
Pavel Hrdina 已提交
557 558
        if (flags & FLAG_EXPECT_FAILURE)
            goto ok;
559
        goto cleanup;
J
Jiri Denemark 已提交
560
    }
561 562 563 564
    if (flags & FLAG_EXPECT_FAILURE) {
        VIR_TEST_DEBUG("passed instead of expected failure");
        goto cleanup;
    }
J
Jiri Denemark 已提交
565

566
    if (!(actualargv = virCommandToString(cmd, false)))
567
        goto cleanup;
E
Eric Blake 已提交
568

569
    if (virTestCompareToFile(actualargv, info->outfile) < 0)
570
        goto cleanup;
571

P
Pavel Hrdina 已提交
572 573
    ret = 0;

574
 ok:
575
    if (ret == 0 && flags & FLAG_EXPECT_FAILURE) {
P
Pavel Hrdina 已提交
576
        ret = -1;
577
        VIR_TEST_DEBUG("Error expected but there wasn't any.");
578
        goto cleanup;
P
Pavel Hrdina 已提交
579
    }
580 581 582
    if (flags & FLAG_EXPECT_FAILURE) {
        if ((log = virTestLogContentAndReset()))
            VIR_TEST_DEBUG("Got expected error: \n%s", log);
583
    }
584 585
    virResetLastError();
    ret = 0;
586

587
 cleanup:
588 589
    VIR_FREE(log);
    VIR_FREE(actualargv);
590
    virDomainChrSourceDefClear(&monitor_chr);
E
Eric Blake 已提交
591
    virCommandFree(cmd);
592
    virObjectUnref(vm);
593 594
    virSetConnectSecret(NULL);
    virSetConnectStorage(NULL);
595
    virObjectUnref(conn);
596
    VIR_FREE(migrateURI);
597
    return ret;
598 599
}

600
static int
601
testInfoSetPaths(struct testQemuInfo *info,
602 603 604 605 606 607 608 609 610 611 612 613
                 const char *suffix)
{
    if (virAsprintf(&info->infile, "%s/qemuxml2argvdata/%s.xml",
                    abs_srcdir, info->name) < 0 ||
        virAsprintf(&info->outfile, "%s/qemuxml2argvdata/%s%s.args",
                    abs_srcdir, info->name, suffix ? suffix : "") < 0) {
        return -1;
    }

    return 0;
}

A
Andrea Bolognani 已提交
614
# define FAKEROOTDIRTEMPLATE abs_builddir "/fakerootdir-XXXXXX"
615

616
static int
E
Eric Blake 已提交
617
mymain(void)
618
{
C
Cole Robinson 已提交
619
    int ret = 0;
A
Andrea Bolognani 已提交
620
    char *fakerootdir;
621
    virHashTablePtr capslatest = NULL;
622

A
Andrea Bolognani 已提交
623 624 625 626 627 628 629 630 631 632 633 634
    if (VIR_STRDUP_QUIET(fakerootdir, FAKEROOTDIRTEMPLATE) < 0) {
        fprintf(stderr, "Out of memory\n");
        abort();
    }

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

    setenv("LIBVIRT_FAKE_ROOT_DIR", fakerootdir, 1);

635 636 637 638 639 640 641 642 643 644
    /* 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. */
    if (setenv("TZ", "VIR00:30", 1) < 0) {
        perror("setenv");
        return EXIT_FAILURE;
    }

645
    if (qemuTestDriverInit(&driver) < 0)
646
        return EXIT_FAILURE;
647 648

    driver.privileged = true;
649

650 651 652
    VIR_FREE(driver.config->defaultTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->defaultTLSx509certdir, "/etc/pki/qemu") < 0)
        return EXIT_FAILURE;
653
    VIR_FREE(driver.config->vncTLSx509certdir);
654
    if (VIR_STRDUP_QUIET(driver.config->vncTLSx509certdir, "/etc/pki/libvirt-vnc") < 0)
655 656
        return EXIT_FAILURE;
    VIR_FREE(driver.config->spiceTLSx509certdir);
657
    if (VIR_STRDUP_QUIET(driver.config->spiceTLSx509certdir, "/etc/pki/libvirt-spice") < 0)
658
        return EXIT_FAILURE;
659 660 661
    VIR_FREE(driver.config->chardevTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->chardevTLSx509certdir, "/etc/pki/libvirt-chardev") < 0)
        return EXIT_FAILURE;
662
    VIR_FREE(driver.config->vxhsTLSx509certdir);
663
    if (VIR_STRDUP_QUIET(driver.config->vxhsTLSx509certdir, "/etc/pki/libvirt-vxhs/dummy,path") < 0)
664
        return EXIT_FAILURE;
665 666 667
    VIR_FREE(driver.config->nbdTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->nbdTLSx509certdir, "/etc/pki/libvirt-nbd/dummy,path") < 0)
        return EXIT_FAILURE;
668

669
    VIR_FREE(driver.config->hugetlbfs);
670
    if (VIR_ALLOC_N(driver.config->hugetlbfs, 2) < 0)
671
        return EXIT_FAILURE;
672 673 674
    driver.config->nhugetlbfs = 2;
    if (VIR_STRDUP(driver.config->hugetlbfs[0].mnt_dir, "/dev/hugepages2M") < 0 ||
        VIR_STRDUP(driver.config->hugetlbfs[1].mnt_dir, "/dev/hugepages1G") < 0)
675
        return EXIT_FAILURE;
676 677
    driver.config->hugetlbfs[0].size = 2048;
    driver.config->hugetlbfs[0].deflt = true;
678
    driver.config->hugetlbfs[1].size = 1048576;
679
    driver.config->spiceTLS = 1;
680
    if (VIR_STRDUP_QUIET(driver.config->spicePassword, "123456") < 0)
681
        return EXIT_FAILURE;
682 683 684
    VIR_FREE(driver.config->memoryBackingDir);
    if (VIR_STRDUP_QUIET(driver.config->memoryBackingDir, "/var/lib/libvirt/qemu/ram") < 0)
        return EXIT_FAILURE;
685 686 687
    VIR_FREE(driver.config->nvramDir);
    if (VIR_STRDUP(driver.config->nvramDir, "/var/lib/libvirt/qemu/nvram") < 0)
        return EXIT_FAILURE;
688

C
Cole Robinson 已提交
689
    capslatest = testQemuGetLatestCaps();
690
    if (!capslatest)
691 692
        return EXIT_FAILURE;

693 694 695 696 697 698 699
    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");

700 701 702 703 704 705 706 707 708 709
    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");

710 711 712 713 714 715 716 717 718 719 720 721 722 723
/**
 * 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.
 */
724
# define DO_TEST_INTERNAL(_name, _suffix, ...) \
725
    do { \
726
        static struct testQemuInfo info = { \
727
            .name = _name, \
728
        }; \
729 730
        if (testQemuInfoSetArgs(&info, capslatest, \
                                __VA_ARGS__, ARG_END) < 0) \
731
            return EXIT_FAILURE; \
732 733 734 735
        if (testInfoSetPaths(&info, _suffix) < 0) { \
            VIR_TEST_DEBUG("Failed to generate paths for '%s'", _name); \
            return EXIT_FAILURE; \
        } \
736
        if (virTestRun("QEMU XML-2-ARGV " _name _suffix, \
737 738
                       testCompareXMLToArgv, &info) < 0) \
            ret = -1; \
739
        testQemuInfoClear(&info); \
740 741
    } while (0)

742 743 744 745 746 747
# define DO_TEST_CAPS_INTERNAL(name, arch, ver, ...) \
    DO_TEST_INTERNAL(name, "." arch "-" ver, \
                     ARG_CAPS_ARCH, arch, \
                     ARG_CAPS_VER, ver, \
                     __VA_ARGS__)

748
# define DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, ...) \
749
    DO_TEST_CAPS_INTERNAL(name, arch, "latest", __VA_ARGS__)
750

751 752 753
# define DO_TEST_CAPS_ARCH_VER_FULL(name, arch, ver, ...) \
    DO_TEST_CAPS_INTERNAL(name, arch, ver, __VA_ARGS__)

754
# define DO_TEST_CAPS_ARCH_LATEST(name, arch) \
755
    DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, ARG_END)
756

757
# define DO_TEST_CAPS_ARCH_VER(name, arch, ver) \
758
    DO_TEST_CAPS_ARCH_VER_FULL(name, arch, ver, ARG_END)
759

760
# define DO_TEST_CAPS_LATEST(name) \
761
    DO_TEST_CAPS_ARCH_LATEST(name, "x86_64")
762

763 764 765
# define DO_TEST_CAPS_VER(name, ver) \
    DO_TEST_CAPS_ARCH_VER(name, "x86_64", ver)

766 767
# define DO_TEST_CAPS_ARCH_LATEST_FAILURE(name, arch) \
    DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, \
768
                                  ARG_FLAGS, FLAG_EXPECT_FAILURE)
769

770 771 772 773 774 775 776 777 778 779 780 781
# 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, \
782
                                  ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR)
783

784 785 786 787 788 789 790 791 792 793
# 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)

794 795 796
# define DO_TEST_FULL(name, ...) \
    DO_TEST_INTERNAL(name, "", \
                     __VA_ARGS__, QEMU_CAPS_LAST)
797

798 799 800
/* All the following macros require an explicit QEMU_CAPS_* list
 * at the end of the argument list, or the NONE placeholder.
 * */
801
# define DO_TEST(name, ...) \
802
    DO_TEST_FULL(name, \
803
                 ARG_QEMU_CAPS, __VA_ARGS__)
804

805
# define DO_TEST_GIC(name, gic, ...) \
806
    DO_TEST_FULL(name, \
807
                 ARG_GIC, gic, \
808
                 ARG_QEMU_CAPS, __VA_ARGS__)
809

810
# define DO_TEST_FAILURE(name, ...) \
811 812
    DO_TEST_FULL(name, \
                 ARG_FLAGS, FLAG_EXPECT_FAILURE, \
813
                 ARG_QEMU_CAPS, __VA_ARGS__)
814

815
# define DO_TEST_PARSE_ERROR(name, ...) \
816
    DO_TEST_FULL(name, \
817
                 ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE, \
818
                 ARG_QEMU_CAPS, __VA_ARGS__)
819

820
# define NONE QEMU_CAPS_LAST
821

822 823 824
    /* 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 */
825 826 827 828 829 830 831
    setenv("PATH", "/bin", 1);
    setenv("USER", "test", 1);
    setenv("LOGNAME", "test", 1);
    setenv("HOME", "/home/test", 1);
    unsetenv("TMPDIR");
    unsetenv("LD_PRELOAD");
    unsetenv("LD_LIBRARY_PATH");
832 833
    unsetenv("QEMU_AUDIO_DRV");
    unsetenv("SDL_AUDIODRIVER");
834

835
    DO_TEST("minimal", NONE);
836 837
    DO_TEST("minimal-sandbox",
            QEMU_CAPS_SECCOMP_BLACKLIST);
838
    DO_TEST_PARSE_ERROR("minimal-no-memory", NONE);
839
    DO_TEST("minimal-msg-timestamp", QEMU_CAPS_MSG_TIMESTAMP);
840 841 842 843

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

844
    DO_TEST("machine-aliases1", NONE);
845
    DO_TEST("machine-aliases2", QEMU_CAPS_KVM);
846
    DO_TEST("machine-core-on", NONE);
847
    driver.config->dumpGuestCore = true;
848
    DO_TEST("machine-core-off", NONE);
849
    driver.config->dumpGuestCore = false;
M
Michal Privoznik 已提交
850 851 852
    DO_TEST("machine-smm-opt",
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
853
            QEMU_CAPS_DEVICE_IOH3420,
M
Michal Privoznik 已提交
854 855 856
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_MACHINE_SMM_OPT,
            QEMU_CAPS_VIRTIO_SCSI);
857
    DO_TEST("machine-vmport-opt",
858
            QEMU_CAPS_MACHINE_VMPORT_OPT);
859 860 861
    DO_TEST("default-kvm-host-arch", NONE);
    DO_TEST("default-qemu-host-arch", NONE);
    DO_TEST("x86-kvm-32-on-64", NONE);
862 863 864
    DO_TEST("boot-cdrom", NONE);
    DO_TEST("boot-network", NONE);
    DO_TEST("boot-floppy", NONE);
865
    DO_TEST("boot-floppy-q35",
866
            QEMU_CAPS_DEVICE_IOH3420,
867
            QEMU_CAPS_ICH9_AHCI);
J
Ján Tomko 已提交
868 869
    DO_TEST("boot-multi", NONE);
    DO_TEST("boot-menu-enable", NONE);
870
    DO_TEST("boot-menu-enable-with-timeout",
871
            QEMU_CAPS_SPLASH_TIMEOUT);
J
Ján Tomko 已提交
872
    DO_TEST_FAILURE("boot-menu-enable-with-timeout", NONE);
873
    DO_TEST_PARSE_ERROR("boot-menu-enable-with-timeout-invalid", NONE);
J
Ján Tomko 已提交
874 875
    DO_TEST("boot-menu-disable", NONE);
    DO_TEST("boot-menu-disable-drive", NONE);
876
    DO_TEST_PARSE_ERROR("boot-dev+order",
877
            QEMU_CAPS_VIRTIO_BLK_SCSI);
878
    DO_TEST("boot-order",
879
            QEMU_CAPS_VIRTIO_BLK_SCSI);
880
    DO_TEST("boot-complex",
881
            QEMU_CAPS_VIRTIO_BLK_SCSI);
882
    DO_TEST("boot-strict",
883
            QEMU_CAPS_BOOT_STRICT,
884
            QEMU_CAPS_VIRTIO_BLK_SCSI);
885 886 887 888 889

    DO_TEST("reboot-timeout-disabled", QEMU_CAPS_REBOOT_TIMEOUT);
    DO_TEST("reboot-timeout-enabled", QEMU_CAPS_REBOOT_TIMEOUT);
    DO_TEST_FAILURE("reboot-timeout-enabled", NONE);

890
    DO_TEST("bios",
891
            QEMU_CAPS_DEVICE_ISA_SERIAL,
892
            QEMU_CAPS_SGA);
J
Ján Tomko 已提交
893
    DO_TEST("bios-nvram", NONE);
M
Michal Privoznik 已提交
894 895 896
    DO_TEST("bios-nvram-secure",
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
897
            QEMU_CAPS_DEVICE_IOH3420,
M
Michal Privoznik 已提交
898 899 900
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_MACHINE_SMM_OPT,
            QEMU_CAPS_VIRTIO_SCSI);
901 902 903 904 905 906 907

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

908
    DO_TEST("clock-utc", NONE);
909
    DO_TEST("clock-localtime", NONE);
J
Ján Tomko 已提交
910 911 912 913
    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 已提交
914
    DO_TEST("clock-catchup", QEMU_CAPS_KVM_PIT_TICK_POLICY);
915 916
    DO_TEST("cpu-kvmclock", NONE);
    DO_TEST("cpu-host-kvmclock", NONE);
917
    DO_TEST("kvmclock", QEMU_CAPS_KVM);
918
    DO_TEST("clock-timer-hyperv-rtc", QEMU_CAPS_KVM);
919

920 921
    DO_TEST("cpu-eoi-disabled", NONE);
    DO_TEST("cpu-eoi-enabled", NONE);
J
Ján Tomko 已提交
922
    DO_TEST("controller-order",
923 924 925 926 927 928
            QEMU_CAPS_KVM,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_CCID_PASSTHRU,
            QEMU_CAPS_SPICE,
            QEMU_CAPS_HDA_DUPLEX,
            QEMU_CAPS_USB_HUB,
929
            QEMU_CAPS_DEVICE_ISA_SERIAL,
930
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
931
    DO_TEST_CAPS_VER("eoi-disabled", "2.7.0");
932
    DO_TEST_CAPS_VER("eoi-disabled", "4.0.0");
933 934
    DO_TEST_CAPS_LATEST("eoi-disabled");
    DO_TEST_CAPS_VER("eoi-enabled", "2.7.0");
935
    DO_TEST_CAPS_VER("eoi-enabled", "4.0.0");
936 937
    DO_TEST_CAPS_LATEST("eoi-enabled");
    DO_TEST_CAPS_VER("pv-spinlock-disabled", "2.7.0");
938
    DO_TEST_CAPS_VER("pv-spinlock-disabled", "4.0.0");
939 940
    DO_TEST_CAPS_LATEST("pv-spinlock-disabled");
    DO_TEST_CAPS_VER("pv-spinlock-enabled", "2.7.0");
941
    DO_TEST_CAPS_VER("pv-spinlock-enabled", "4.0.0");
942 943
    DO_TEST_CAPS_LATEST("pv-spinlock-enabled");
    DO_TEST_CAPS_VER("kvmclock+eoi-disabled", "2.7.0");
944
    DO_TEST_CAPS_VER("kvmclock+eoi-disabled", "4.0.0");
945
    DO_TEST_CAPS_LATEST("kvmclock+eoi-disabled");
946

947 948 949 950 951 952
    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");
953
    DO_TEST_CAPS_LATEST("hyperv-stimer-direct");
954

955 956 957
    DO_TEST("kvm-features", NONE);
    DO_TEST("kvm-features-off", NONE);

958 959 960
    DO_TEST("pmu-feature", NONE);
    DO_TEST("pmu-feature-off", NONE);

961 962 963
    DO_TEST("pages-discard",
            QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
964 965 966 967
    DO_TEST("pages-discard-hugepages",
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
968 969 970 971
    DO_TEST("pages-dimm-discard",
            QEMU_CAPS_DEVICE_PC_DIMM,
            QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
972
    DO_TEST("hugepages-default", NONE);
973
    DO_TEST("hugepages-default-2M", NONE);
974
    DO_TEST("hugepages-default-system-size", NONE);
975
    DO_TEST_PARSE_ERROR("hugepages-default-1G-nodeset-2M", NONE);
976
    DO_TEST("hugepages-nodeset", NONE);
977 978 979 980
    DO_TEST_PARSE_ERROR("hugepages-nodeset-nonexist",
                        QEMU_CAPS_DEVICE_PC_DIMM,
                        QEMU_CAPS_OBJECT_MEMORY_FILE,
                        QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
981
    DO_TEST("hugepages-numa-default",
982
            QEMU_CAPS_OBJECT_MEMORY_FILE);
983 984 985
    DO_TEST("hugepages-numa-default-2M",
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
986
    DO_TEST("hugepages-numa-default-dimm",
987
            QEMU_CAPS_DEVICE_PC_DIMM,
J
Ján Tomko 已提交
988
            QEMU_CAPS_OBJECT_MEMORY_FILE);
989
    DO_TEST("hugepages-numa-nodeset",
A
Andrea Bolognani 已提交
990
            QEMU_CAPS_OBJECT_MEMORY_RAM,
991
            QEMU_CAPS_OBJECT_MEMORY_FILE);
992 993
    DO_TEST("hugepages-numa-nodeset-part",
            QEMU_CAPS_OBJECT_MEMORY_RAM,
994
            QEMU_CAPS_OBJECT_MEMORY_FILE);
995 996 997
    DO_TEST_PARSE_ERROR("hugepages-numa-nodeset-nonexist",
                        QEMU_CAPS_OBJECT_MEMORY_RAM,
                        QEMU_CAPS_OBJECT_MEMORY_FILE);
A
Andrea Bolognani 已提交
998 999 1000
    DO_TEST("hugepages-shared",
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1001
    DO_TEST_PARSE_ERROR("hugepages-memaccess-invalid", NONE);
1002 1003 1004
    DO_TEST("hugepages-memaccess", QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_DEVICE_PC_DIMM,
            QEMU_CAPS_NUMA);
1005 1006 1007
    DO_TEST("hugepages-memaccess2", QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_DEVICE_PC_DIMM,
            QEMU_CAPS_NUMA);
1008 1009 1010
    DO_TEST_PARSE_ERROR("hugepages-memaccess3",
                        QEMU_CAPS_OBJECT_MEMORY_RAM,
                        QEMU_CAPS_OBJECT_MEMORY_FILE);
1011
    DO_TEST_CAPS_LATEST("hugepages-nvdimm");
1012
    DO_TEST("nosharepages", QEMU_CAPS_MEM_MERGE);
1013
    DO_TEST("disk-cdrom", NONE);
1014
    DO_TEST_CAPS_VER("disk-cdrom", "2.12.0");
1015
    DO_TEST_CAPS_LATEST("disk-cdrom");
1016
    DO_TEST_CAPS_LATEST("disk-cdrom-bus-other");
1017
    DO_TEST("disk-iscsi", NONE);
1018
    DO_TEST("disk-cdrom-network", QEMU_CAPS_KVM);
1019
    DO_TEST_CAPS_VER("disk-cdrom-network", "2.12.0");
1020
    DO_TEST_CAPS_LATEST("disk-cdrom-network");
1021
    DO_TEST("disk-cdrom-tray",
1022
            QEMU_CAPS_VIRTIO_TX_ALG);
1023
    DO_TEST_CAPS_VER("disk-cdrom-tray", "2.12.0");
1024
    DO_TEST_CAPS_LATEST("disk-cdrom-tray");
1025
    DO_TEST("disk-floppy", NONE);
1026
    DO_TEST_CAPS_VER("disk-floppy", "2.12.0");
1027
    DO_TEST_CAPS_LATEST("disk-floppy");
1028
    DO_TEST_CAPS_VER("disk-floppy-q35-2_9", "2.12.0");
1029
    DO_TEST_CAPS_LATEST("disk-floppy-q35-2_9");
1030
    DO_TEST_CAPS_VER("disk-floppy-q35-2_11", "2.12.0");
1031
    DO_TEST_CAPS_LATEST("disk-floppy-q35-2_11");
1032 1033
    DO_TEST_FAILURE("disk-floppy-pseries",
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
1034
    DO_TEST("disk-floppy-tray", NONE);
1035
    DO_TEST("disk-virtio-s390",
1036
            QEMU_CAPS_VIRTIO_S390);
1037
    DO_TEST("disk-virtio", NONE);
1038
    DO_TEST("disk-virtio-ccw",
1039
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1040
    DO_TEST("disk-virtio-ccw-many",
1041
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1042 1043 1044 1045
    DO_TEST("disk-virtio-s390-zpci",
            QEMU_CAPS_DEVICE_ZPCI,
            QEMU_CAPS_CCW,
            QEMU_CAPS_VIRTIO_S390);
1046
    DO_TEST("disk-order", QEMU_CAPS_VIRTIO_BLK_SCSI);
1047
    DO_TEST("disk-virtio-queues",
L
Lin Ma 已提交
1048
            QEMU_CAPS_VIRTIO_BLK_NUM_QUEUES);
1049 1050 1051
    DO_TEST("disk-boot-disk", NONE);
    DO_TEST("disk-boot-cdrom", NONE);
    DO_TEST("floppy-drive-fat", NONE);
1052
    DO_TEST_CAPS_VER("floppy-drive-fat", "2.12.0");
1053
    DO_TEST_CAPS_LATEST("floppy-drive-fat");
1054
    DO_TEST("disk-readonly-disk", NONE);
1055
    DO_TEST_CAPS_VER("disk-readonly-disk", "2.12.0");
1056
    DO_TEST_CAPS_LATEST("disk-readonly-disk");
1057 1058 1059 1060
    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);
1061
    DO_TEST_CAPS_VER("disk-shared", "2.12.0");
1062
    DO_TEST_CAPS_LATEST("disk-shared");
1063 1064
    DO_TEST_PARSE_ERROR("disk-shared-qcow", NONE);
    DO_TEST("disk-error-policy", NONE);
1065
    DO_TEST_CAPS_VER("disk-error-policy", "2.12.0");
1066
    DO_TEST_CAPS_LATEST("disk-error-policy");
1067
    DO_TEST_CAPS_VER("disk-cache", "1.5.3");
1068 1069
    DO_TEST_CAPS_VER("disk-cache", "2.6.0");
    DO_TEST_CAPS_VER("disk-cache", "2.7.0");
1070
    DO_TEST_CAPS_VER("disk-cache", "2.12.0");
1071
    DO_TEST_CAPS_LATEST("disk-cache");
1072
    DO_TEST("disk-network-nbd", NONE);
1073
    DO_TEST_CAPS_VER("disk-network-nbd", "2.12.0");
1074
    DO_TEST_CAPS_LATEST("disk-network-nbd");
1075
    DO_TEST("disk-network-iscsi", QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_BLOCK);
1076 1077 1078 1079
    DO_TEST("disk-network-iscsi-modern",
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_BLOCK,
            QEMU_CAPS_ISCSI_PASSWORD_SECRET);
1080
    DO_TEST_CAPS_VER("disk-network-iscsi", "2.12.0");
1081
    DO_TEST_CAPS_LATEST("disk-network-iscsi");
1082 1083 1084 1085
    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",
1086
            QEMU_CAPS_GLUSTER_DEBUG_LEVEL);
1087
    DO_TEST_CAPS_VER("disk-network-gluster", "2.12.0");
1088
    DO_TEST_CAPS_LATEST("disk-network-gluster");
1089
    DO_TEST_CAPS_VER("disk-network-rbd", "2.5.0");
1090
    DO_TEST_CAPS_VER("disk-network-rbd", "2.12.0");
1091 1092
    DO_TEST_CAPS_LATEST("disk-network-rbd");
    DO_TEST_FAILURE("disk-network-rbd-no-colon", NONE);
1093
    DO_TEST("disk-network-sheepdog", NONE);
1094
    DO_TEST_CAPS_VER("disk-network-sheepdog", "2.12.0");
1095
    DO_TEST_CAPS_LATEST("disk-network-sheepdog");
1096
    DO_TEST("disk-network-source-auth", NONE);
1097
    DO_TEST_CAPS_VER("disk-network-source-auth", "2.12.0");
1098
    DO_TEST_CAPS_LATEST("disk-network-source-auth");
1099
    DO_TEST("disk-network-vxhs", QEMU_CAPS_VXHS);
1100
    driver.config->vxhsTLS = 1;
1101
    DO_TEST("disk-network-tlsx509", QEMU_CAPS_VXHS,
1102
            QEMU_CAPS_OBJECT_TLS_CREDS_X509, QEMU_CAPS_NBD_TLS);
1103
    DO_TEST_CAPS_VER("disk-network-tlsx509", "2.12.0");
1104
    DO_TEST_CAPS_LATEST("disk-network-tlsx509");
1105 1106
    driver.config->vxhsTLS = 0;
    VIR_FREE(driver.config->vxhsTLSx509certdir);
1107
    DO_TEST("disk-no-boot", NONE);
1108
    DO_TEST_PARSE_ERROR("disk-device-lun-type-invalid",
1109 1110
                        QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST_FAILURE("disk-usb-nosupport", NONE);
1111
    DO_TEST("disk-usb-device",
1112
            QEMU_CAPS_DEVICE_USB_STORAGE);
1113
    DO_TEST("disk-usb-device-removable",
1114
            QEMU_CAPS_DEVICE_USB_STORAGE,
1115
            QEMU_CAPS_USB_STORAGE_REMOVABLE);
1116
    DO_TEST_FAILURE("disk-usb-pci",
1117
                    QEMU_CAPS_DEVICE_USB_STORAGE);
1118
    DO_TEST_CAPS_LATEST("disk-scsi");
1119 1120
    DO_TEST_CAPS_VER("disk-scsi-device-auto", "1.5.3");
    DO_TEST_CAPS_LATEST("disk-scsi-device-auto");
1121
    DO_TEST("disk-scsi-disk-split",
1122
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI);
1123
    DO_TEST("disk-scsi-disk-wwn",
1124
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_DISK_WWN);
1125
    DO_TEST("disk-scsi-disk-vpd",
1126
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_DISK_WWN);
1127
    DO_TEST_FAILURE("disk-scsi-disk-vpd-build-error",
1128
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_DISK_WWN);
1129
    DO_TEST_CAPS_LATEST("controller-virtio-scsi");
1130
    DO_TEST("disk-sata-device",
1131
            QEMU_CAPS_ICH9_AHCI);
J
Ján Tomko 已提交
1132
    DO_TEST("disk-aio", NONE);
1133
    DO_TEST_CAPS_VER("disk-aio", "2.12.0");
1134
    DO_TEST_CAPS_LATEST("disk-aio");
1135 1136
    DO_TEST("disk-source-pool", NONE);
    DO_TEST("disk-source-pool-mode", NONE);
1137
    DO_TEST("disk-ioeventfd",
1138
            QEMU_CAPS_VIRTIO_IOEVENTFD,
1139
            QEMU_CAPS_VIRTIO_TX_ALG,
1140
            QEMU_CAPS_VIRTIO_BLK_SCSI);
1141
    DO_TEST("disk-copy_on_read",
1142
            QEMU_CAPS_VIRTIO_TX_ALG,
1143
            QEMU_CAPS_VIRTIO_BLK_SCSI);
1144
    DO_TEST_CAPS_VER("disk-copy_on_read", "2.12.0");
1145
    DO_TEST_CAPS_LATEST("disk-copy_on_read");
1146
    DO_TEST("disk-discard",
1147
            QEMU_CAPS_DRIVE_DISCARD);
1148
    DO_TEST("disk-detect-zeroes",
1149 1150
            QEMU_CAPS_DRIVE_DISCARD,
            QEMU_CAPS_DRIVE_DETECT_ZEROES);
1151
    DO_TEST_CAPS_VER("disk-detect-zeroes", "2.12.0");
1152
    DO_TEST_CAPS_LATEST("disk-detect-zeroes");
1153
    DO_TEST("disk-snapshot", NONE);
1154 1155
    DO_TEST_PARSE_ERROR("disk-same-targets",
                        QEMU_CAPS_SCSI_LSI,
1156
                        QEMU_CAPS_DEVICE_USB_STORAGE);
1157
    DO_TEST_PARSE_ERROR("disk-address-conflict",
1158 1159
                        QEMU_CAPS_ICH9_AHCI);
    DO_TEST_PARSE_ERROR("disk-hostdev-scsi-address-conflict",
1160
                        QEMU_CAPS_VIRTIO_SCSI);
1161
    DO_TEST_PARSE_ERROR("hostdevs-drive-address-conflict",
1162
                        QEMU_CAPS_VIRTIO_SCSI);
1163
    DO_TEST("event_idx",
1164 1165
            QEMU_CAPS_VIRTIO_BLK_EVENT_IDX,
            QEMU_CAPS_VIRTIO_NET_EVENT_IDX,
1166
            QEMU_CAPS_VIRTIO_BLK_SCSI);
1167
    DO_TEST("virtio-lun",
1168
            QEMU_CAPS_VIRTIO_BLK_SCSI);
1169
    DO_TEST("disk-scsi-lun-passthrough",
1170
            QEMU_CAPS_SCSI_BLOCK,
1171
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI);
1172
    DO_TEST("disk-serial",
1173
            QEMU_CAPS_KVM);
1174 1175 1176 1177 1178 1179 1180 1181
    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);
1182 1183 1184 1185
    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");
1186

1187 1188 1189
    DO_TEST("graphics-egl-headless",
            QEMU_CAPS_EGL_HEADLESS,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1190 1191
    DO_TEST_CAPS_LATEST("graphics-egl-headless");
    DO_TEST_CAPS_LATEST("graphics-egl-headless-rendernode");
1192

1193 1194
    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);
1195 1196
    DO_TEST("graphics-vnc-websocket",
            QEMU_CAPS_VNC,
1197
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1198
    DO_TEST("graphics-vnc-policy", QEMU_CAPS_VNC,
1199 1200 1201 1202 1203
            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);
1204
    driver.config->vncAutoUnixSocket = true;
1205 1206
    DO_TEST("graphics-vnc-auto-socket-cfg", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1207
    driver.config->vncAutoUnixSocket = false;
1208 1209 1210 1211
    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);
1212 1213
    DO_TEST("graphics-vnc-socket-new-cmdline", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA, QEMU_CAPS_VNC_MULTI_SERVERS);
1214

1215 1216
    driver.config->vncSASL = 1;
    VIR_FREE(driver.config->vncSASLdir);
1217
    ignore_value(VIR_STRDUP(driver.config->vncSASLdir, "/root/.sasl2"));
1218
    DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1219 1220
    driver.config->vncTLS = 1;
    driver.config->vncTLSx509verify = 1;
1221
    DO_TEST("graphics-vnc-tls", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1222 1223
    DO_TEST_CAPS_VER("graphics-vnc-tls", "2.4.0");
    DO_TEST_CAPS_LATEST("graphics-vnc-tls");
1224 1225 1226 1227 1228
    if (VIR_STRDUP_QUIET(driver.config->vncTLSx509secretUUID,
                         "6fd3f62d-9fe7-4a4e-a869-7acd6376d8ea") < 0)
        return EXIT_FAILURE;
    DO_TEST_CAPS_LATEST("graphics-vnc-tls-secret");
    VIR_FREE(driver.config->vncTLSx509secretUUID);
1229
    driver.config->vncSASL = driver.config->vncTLSx509verify = driver.config->vncTLS = 0;
1230 1231
    VIR_FREE(driver.config->vncSASLdir);
    VIR_FREE(driver.config->vncTLSx509certdir);
1232 1233 1234 1235
    DO_TEST("graphics-vnc-egl-headless",
            QEMU_CAPS_VNC,
            QEMU_CAPS_EGL_HEADLESS,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1236

J
Ján Tomko 已提交
1237 1238
    DO_TEST("graphics-sdl",
            QEMU_CAPS_DEVICE_VGA);
1239
    DO_TEST_CAPS_LATEST_PARSE_ERROR("graphics-sdl-egl-headless");
J
Ján Tomko 已提交
1240
    DO_TEST("graphics-sdl-fullscreen",
1241
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1242
    DO_TEST("graphics-spice",
1243
            QEMU_CAPS_SPICE,
1244 1245
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
1246
    DO_TEST("graphics-spice-no-args",
1247
            QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1248 1249 1250
    driver.config->spiceSASL = 1;
    ignore_value(VIR_STRDUP(driver.config->spiceSASLdir, "/root/.sasl2"));
    DO_TEST("graphics-spice-sasl",
1251
            QEMU_CAPS_SPICE,
1252 1253 1254
            QEMU_CAPS_DEVICE_QXL);
    VIR_FREE(driver.config->spiceSASLdir);
    driver.config->spiceSASL = 0;
1255
    DO_TEST("graphics-spice-agentmouse",
1256
            QEMU_CAPS_DEVICE_QXL,
1257
            QEMU_CAPS_SPICE,
1258
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1259
    DO_TEST("graphics-spice-compression",
1260
            QEMU_CAPS_SPICE,
1261
            QEMU_CAPS_DEVICE_QXL);
1262
    DO_TEST("graphics-spice-timeout",
1263
            QEMU_CAPS_KVM,
1264
            QEMU_CAPS_SPICE,
1265 1266
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_DEVICE_VGA);
1267
    DO_TEST("graphics-spice-qxl-vga",
1268
            QEMU_CAPS_SPICE,
1269
            QEMU_CAPS_DEVICE_QXL);
1270
    DO_TEST("graphics-spice-usb-redir",
1271
            QEMU_CAPS_SPICE,
1272 1273 1274 1275
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1276
    DO_TEST("graphics-spice-agent-file-xfer",
1277
            QEMU_CAPS_SPICE,
1278 1279
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
1280 1281
    DO_TEST("graphics-spice-socket",
            QEMU_CAPS_SPICE,
1282 1283
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1284 1285
    DO_TEST("graphics-spice-auto-socket",
            QEMU_CAPS_SPICE,
1286 1287
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1288 1289 1290
    driver.config->spiceAutoUnixSocket = true;
    DO_TEST("graphics-spice-auto-socket-cfg",
            QEMU_CAPS_SPICE,
1291 1292
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1293
    driver.config->spiceAutoUnixSocket = false;
1294 1295 1296 1297
    DO_TEST("graphics-spice-egl-headless",
            QEMU_CAPS_SPICE,
            QEMU_CAPS_EGL_HEADLESS,
            QEMU_CAPS_DEVICE_QXL);
1298
    DO_TEST_CAPS_LATEST_PARSE_ERROR("graphics-spice-invalid-egl-headless");
1299
    DO_TEST_CAPS_LATEST("graphics-spice-gl-auto-rendernode");
1300

1301 1302 1303
    DO_TEST("input-usbmouse", NONE);
    DO_TEST("input-usbtablet", NONE);
    DO_TEST("misc-acpi", NONE);
1304 1305 1306
    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);
1307
    DO_TEST_FAILURE("misc-enable-s4", NONE);
1308
    DO_TEST("misc-no-reboot", NONE);
1309
    DO_TEST("misc-uuid", NONE);
1310
    DO_TEST_PARSE_ERROR("vhost_queues-invalid", NONE);
1311
    DO_TEST("net-vhostuser", QEMU_CAPS_CHARDEV_FD_PASS);
1312 1313
    DO_TEST_CAPS_VER("net-vhostuser", "2.5.0");
    DO_TEST_CAPS_LATEST("net-vhostuser");
1314
    DO_TEST("net-vhostuser-multiq",
J
Ján Tomko 已提交
1315 1316
            QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
    DO_TEST_FAILURE("net-vhostuser-multiq", NONE);
1317 1318
    DO_TEST_FAILURE("net-vhostuser-fail",
                    QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
1319
    DO_TEST("net-user", NONE);
1320
    DO_TEST_CAPS_ARCH_VER_FULL("net-user", "x86_64", "4.0.0", ARG_FLAGS, FLAG_SLIRP_HELPER);
J
Ján Tomko 已提交
1321
    DO_TEST("net-user-addr", NONE);
1322 1323
    DO_TEST("net-virtio", NONE);
    DO_TEST("net-virtio-device",
1324 1325 1326
            QEMU_CAPS_VIRTIO_TX_ALG);
    DO_TEST("net-virtio-disable-offloads", NONE);
    DO_TEST("net-virtio-netdev", NONE);
1327
    DO_TEST("net-virtio-s390",
1328
            QEMU_CAPS_VIRTIO_S390);
1329
    DO_TEST("net-virtio-ccw",
1330
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1331 1332 1333
    DO_TEST("net-virtio-rxtxqueuesize",
            QEMU_CAPS_VIRTIO_NET_RX_QUEUE_SIZE,
            QEMU_CAPS_VIRTIO_NET_TX_QUEUE_SIZE);
1334
    DO_TEST_PARSE_ERROR("net-virtio-rxqueuesize-invalid-size", NONE);
1335 1336
    DO_TEST("net-eth", NONE);
    DO_TEST("net-eth-ifname", NONE);
1337
    DO_TEST("net-eth-names", NONE);
1338
    DO_TEST("net-eth-hostip", NONE);
1339
    DO_TEST("net-eth-unmanaged-tap", NONE);
1340 1341
    DO_TEST("net-client", NONE);
    DO_TEST("net-server", NONE);
1342
    DO_TEST("net-many-models", NONE);
1343
    DO_TEST("net-mcast", NONE);
1344
    DO_TEST("net-udp", NONE);
1345 1346 1347
    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);
1348 1349
    DO_TEST("net-hostdev-vfio",
            QEMU_CAPS_DEVICE_VFIO_PCI);
1350
    DO_TEST("net-hostdev-vfio-multidomain",
1351
            QEMU_CAPS_DEVICE_VFIO_PCI);
1352 1353 1354
    DO_TEST_FAILURE("net-hostdev-fail",
                    QEMU_CAPS_DEVICE_VFIO_PCI);

1355 1356 1357
    DO_TEST("hostdev-pci-multifunction",
            QEMU_CAPS_KVM,
            QEMU_CAPS_DEVICE_VFIO_PCI);
1358

1359 1360
    DO_TEST("serial-file-log",
            QEMU_CAPS_CHARDEV_FILE_APPEND,
1361
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1362
            QEMU_CAPS_CHARDEV_LOGFILE);
1363
    DO_TEST("serial-spiceport",
1364
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1365
            QEMU_CAPS_DEVICE_QXL,
1366
            QEMU_CAPS_SPICE,
1367
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1368
    DO_TEST("serial-spiceport-nospice", NONE);
1369

1370 1371 1372 1373
    DO_TEST("console-compat",
            QEMU_CAPS_DEVICE_ISA_SERIAL);
    DO_TEST("console-compat-auto",
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1374 1375

    DO_TEST("serial-vc-chardev",
1376
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1377
    DO_TEST("serial-pty-chardev",
1378
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1379
    DO_TEST("serial-dev-chardev",
1380
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1381
    DO_TEST("serial-dev-chardev-iobase",
1382
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1383
    DO_TEST("serial-file-chardev",
1384
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1385
            QEMU_CAPS_CHARDEV_FILE_APPEND);
1386
    DO_TEST("serial-unix-chardev",
1387
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1388
    DO_TEST_CAPS_LATEST("serial-unix-chardev");
1389
    DO_TEST_PARSE_ERROR("serial-unix-missing-source", NONE);
1390
    DO_TEST("serial-tcp-chardev",
1391
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1392
    DO_TEST("serial-udp-chardev",
1393
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1394
    DO_TEST("serial-tcp-telnet-chardev",
1395
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1396 1397
    driver.config->chardevTLS = 1;
    DO_TEST("serial-tcp-tlsx509-chardev",
1398
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1399
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1400 1401
    driver.config->chardevTLSx509verify = 1;
    DO_TEST("serial-tcp-tlsx509-chardev-verify",
1402
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1403 1404
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
    driver.config->chardevTLSx509verify = 0;
1405
    DO_TEST("serial-tcp-tlsx509-chardev-notls",
1406
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1407
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1408 1409 1410 1411 1412 1413 1414 1415
    VIR_FREE(driver.config->chardevTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->chardevTLSx509certdir, "/etc/pki/libvirt-chardev") < 0)
        return EXIT_FAILURE;
    if (VIR_STRDUP_QUIET(driver.config->chardevTLSx509secretUUID,
                         "6fd3f62d-9fe7-4a4e-a869-7acd6376d8ea") < 0)
        return EXIT_FAILURE;
    DO_TEST("serial-tcp-tlsx509-secret-chardev",
            QEMU_CAPS_OBJECT_SECRET,
1416
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1417
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1418 1419
    driver.config->chardevTLS = 0;
    VIR_FREE(driver.config->chardevTLSx509certdir);
1420
    DO_TEST("serial-many-chardev",
1421 1422 1423
            QEMU_CAPS_DEVICE_ISA_SERIAL);
    DO_TEST("parallel-tcp-chardev", NONE);
    DO_TEST("parallel-parport-chardev", NONE);
J
Ján Tomko 已提交
1424 1425
    DO_TEST_CAPS_VER("parallel-unix-chardev", "2.5.0");
    DO_TEST_CAPS_LATEST("parallel-unix-chardev");
1426
    DO_TEST("console-compat-chardev",
1427
            QEMU_CAPS_DEVICE_ISA_SERIAL);
M
Michal Privoznik 已提交
1428 1429
    DO_TEST("pci-serial-dev-chardev",
            QEMU_CAPS_DEVICE_PCI_SERIAL);
1430

1431
    DO_TEST("channel-guestfwd", NONE);
J
Ján Tomko 已提交
1432 1433
    DO_TEST_CAPS_VER("channel-unix-guestfwd", "2.5.0");
    DO_TEST_CAPS_LATEST("channel-unix-guestfwd");
1434 1435 1436 1437 1438 1439
    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);
1440
    DO_TEST("console-virtio-many",
1441
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1442
    DO_TEST("console-virtio-s390",
1443
            QEMU_CAPS_VIRTIO_S390);
1444
    DO_TEST("console-virtio-ccw",
1445
            QEMU_CAPS_CCW,
1446
            QEMU_CAPS_VIRTIO_S390);
J
Ján Tomko 已提交
1447 1448
    DO_TEST_CAPS_VER("console-virtio-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("console-virtio-unix");
1449
    DO_TEST("console-sclp",
1450
            QEMU_CAPS_VIRTIO_S390,
1451
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
1452
    DO_TEST("channel-spicevmc",
1453
            QEMU_CAPS_SPICE,
1454
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1455
    DO_TEST("channel-virtio-default",
1456
            QEMU_CAPS_SPICE);
1457
    DO_TEST("channel-virtio-unix", NONE);
1458

1459
    DO_TEST("smartcard-host",
1460
            QEMU_CAPS_CCID_EMULATED);
1461
    DO_TEST("smartcard-host-certificates",
1462
            QEMU_CAPS_CCID_EMULATED);
1463 1464
    DO_TEST("smartcard-host-certificates-database",
            QEMU_CAPS_CCID_EMULATED);
1465
    DO_TEST("smartcard-passthrough-tcp",
1466
            QEMU_CAPS_CCID_PASSTHRU);
1467
    DO_TEST("smartcard-passthrough-spicevmc",
1468
            QEMU_CAPS_CCID_PASSTHRU);
1469
    DO_TEST("smartcard-controller",
1470
            QEMU_CAPS_CCID_EMULATED);
J
Ján Tomko 已提交
1471 1472
    DO_TEST_CAPS_VER("smartcard-passthrough-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("smartcard-passthrough-unix");
1473

1474 1475 1476 1477 1478 1479 1480 1481
    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);
1482 1483
    DO_TEST_PARSE_ERROR("chardev-reconnect-generated-path",
                        QEMU_CAPS_CHARDEV_RECONNECT);
1484

1485
    DO_TEST("usb-controller", NONE);
1486
    DO_TEST("usb-piix3-controller",
1487
            QEMU_CAPS_PIIX3_USB_UHCI);
1488
    DO_TEST("usb-ich9-ehci-addr",
1489
            QEMU_CAPS_ICH9_USB_EHCI1);
1490
    DO_TEST("input-usbmouse-addr", NONE);
1491
    DO_TEST("usb-ich9-companion",
1492
            QEMU_CAPS_ICH9_USB_EHCI1);
1493
    DO_TEST_PARSE_ERROR("usb-ich9-no-companion",
1494
            QEMU_CAPS_ICH9_USB_EHCI1);
1495
    DO_TEST("usb-ich9-autoassign",
1496
            QEMU_CAPS_ICH9_USB_EHCI1,
1497
            QEMU_CAPS_USB_HUB);
1498
    DO_TEST("usb-hub",
1499
            QEMU_CAPS_USB_HUB);
1500
    DO_TEST("usb-hub-autoadd",
1501
            QEMU_CAPS_USB_HUB);
1502
    DO_TEST("usb-hub-autoadd-deluxe",
1503
            QEMU_CAPS_USB_HUB);
J
Ján Tomko 已提交
1504
    DO_TEST_PARSE_ERROR("usb-hub-conflict",
1505
            QEMU_CAPS_USB_HUB);
1506
    DO_TEST_PARSE_ERROR("usb-hub-nonexistent",
1507
            QEMU_CAPS_USB_HUB);
J
Ján Tomko 已提交
1508
    DO_TEST("usb-port-missing",
1509
            QEMU_CAPS_USB_HUB);
1510
    DO_TEST_FAILURE("usb-bus-missing",
1511
                    QEMU_CAPS_USB_HUB);
1512
    DO_TEST("usb-ports",
1513
            QEMU_CAPS_USB_HUB);
1514
    DO_TEST_PARSE_ERROR("usb-ports-out-of-range",
1515
            QEMU_CAPS_USB_HUB);
1516
    DO_TEST("usb-port-autoassign",
1517
            QEMU_CAPS_USB_HUB);
1518
    DO_TEST("usb-redir",
1519 1520 1521
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
1522
            QEMU_CAPS_SPICE);
1523
    DO_TEST("usb-redir-boot",
1524 1525 1526
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
1527
            QEMU_CAPS_SPICE);
1528
    DO_TEST("usb-redir-filter",
1529 1530 1531 1532
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE,
1533
            QEMU_CAPS_USB_REDIR_FILTER);
1534 1535
    DO_TEST("usb-redir-filter-version",
            QEMU_CAPS_USB_REDIR,
1536
            QEMU_CAPS_SPICE,
1537
            QEMU_CAPS_USB_REDIR_FILTER);
J
Ján Tomko 已提交
1538 1539
    DO_TEST_CAPS_VER("usb-redir-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("usb-redir-unix");
1540
    DO_TEST("usb1-usb2",
1541 1542 1543
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1);
1544 1545
    DO_TEST("usb-none", NONE);
    DO_TEST_PARSE_ERROR("usb-none-other", NONE);
1546 1547
    DO_TEST_PARSE_ERROR("usb-none-hub",
            QEMU_CAPS_USB_HUB);
1548
    DO_TEST_PARSE_ERROR("usb-none-usbtablet", NONE);
1549
    DO_TEST("usb-controller-default-q35",
1550
            QEMU_CAPS_DEVICE_IOH3420,
1551 1552 1553
            QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI);
1554
    DO_TEST_FAILURE("usb-controller-default-unavailable-q35",
1555
                    QEMU_CAPS_DEVICE_IOH3420,
1556
                    QEMU_CAPS_PCI_OHCI,
1557 1558
                    QEMU_CAPS_NEC_USB_XHCI);
    DO_TEST("usb-controller-explicit-q35",
1559
            QEMU_CAPS_DEVICE_IOH3420,
1560 1561 1562
            QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI);
1563
    DO_TEST_FAILURE("usb-controller-explicit-unavailable-q35",
1564
                    QEMU_CAPS_DEVICE_IOH3420,
1565
                    QEMU_CAPS_PCI_OHCI,
1566
                    QEMU_CAPS_PIIX3_USB_UHCI);
1567
    DO_TEST("usb-controller-xhci",
1568 1569 1570
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_NEC_USB_XHCI_PORTS);
1571
    DO_TEST("usb-xhci-autoassign",
1572 1573 1574
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_NEC_USB_XHCI_PORTS,
1575
            QEMU_CAPS_USB_HUB);
1576
    DO_TEST_PARSE_ERROR("usb-controller-xhci-limit",
1577 1578 1579
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_NEC_USB_XHCI_PORTS);
1580 1581 1582 1583
    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);
1584

1585 1586 1587
    DO_TEST("smbios", NONE);
    DO_TEST_PARSE_ERROR("smbios-date", NONE);
    DO_TEST_PARSE_ERROR("smbios-uuid-match", NONE);
1588

1589
    DO_TEST("watchdog", NONE);
1590
    DO_TEST("watchdog-device", NONE);
1591
    DO_TEST("watchdog-dump", NONE);
1592
    DO_TEST("watchdog-injectnmi", NONE);
1593
    DO_TEST("watchdog-diag288", QEMU_CAPS_VIRTIO_S390);
1594 1595
    DO_TEST("balloon-device", NONE);
    DO_TEST("balloon-device-deflate",
1596
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1597
    DO_TEST("balloon-ccw-deflate",
1598
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1599
    DO_TEST("balloon-mmio-deflate",
J
Ján Tomko 已提交
1600
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1601
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1602
    DO_TEST("balloon-device-deflate-off",
1603
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1604 1605
    DO_TEST("balloon-device-auto", NONE);
    DO_TEST("balloon-device-period", NONE);
1606 1607
    DO_TEST("sound", NONE);
    DO_TEST("sound-device",
1608
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_HDA_MICRO,
1609
            QEMU_CAPS_HDA_OUTPUT,
1610 1611
            QEMU_CAPS_DEVICE_ICH9_INTEL_HDA,
            QEMU_CAPS_OBJECT_USB_AUDIO);
1612
    DO_TEST("fs9p", NONE);
1613
    DO_TEST_CAPS_LATEST("fs9p");
1614
    DO_TEST("fs9p-ccw",
1615
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1616
    DO_TEST_CAPS_ARCH_LATEST("fs9p-ccw", "s390x");
1617

1618
    DO_TEST("hostdev-usb-address", NONE);
1619
    DO_TEST("hostdev-usb-address-device", NONE);
1620
    DO_TEST("hostdev-usb-address-device-boot", NONE);
1621 1622
    DO_TEST("hostdev-pci-address", QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST("hostdev-pci-address-device", QEMU_CAPS_DEVICE_VFIO_PCI);
1623 1624
    DO_TEST("hostdev-vfio",
            QEMU_CAPS_DEVICE_VFIO_PCI);
1625
    DO_TEST("hostdev-vfio-multidomain",
1626
            QEMU_CAPS_DEVICE_VFIO_PCI);
1627 1628 1629 1630 1631 1632
    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);
1633 1634 1635 1636 1637 1638 1639
    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);
1640 1641
    DO_TEST_PARSE_ERROR("hostdev-vfio-zpci-wrong-arch",
                        QEMU_CAPS_DEVICE_VFIO_PCI);
1642 1643 1644
    DO_TEST("hostdev-vfio-zpci",
            QEMU_CAPS_DEVICE_VFIO_PCI,
            QEMU_CAPS_DEVICE_ZPCI);
1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657
    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);
1658
    DO_TEST("pci-rom", QEMU_CAPS_DEVICE_VFIO_PCI);
1659
    DO_TEST("pci-rom-disabled", NONE);
1660
    DO_TEST("pci-rom-disabled-invalid", NONE);
1661

1662 1663 1664 1665
    DO_TEST("hostdev-subsys-mdev-vfio-ccw",
            QEMU_CAPS_CCW,
            QEMU_CAPS_CCW_CSSID_UNRESTRICTED,
            QEMU_CAPS_DEVICE_VFIO_CCW);
1666 1667
    DO_TEST_CAPS_ARCH_LATEST("hostdev-subsys-mdev-vfio-ccw-boot",
                             "s390x");
1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679
    DO_TEST_FAILURE("hostdev-subsys-mdev-vfio-ccw",
            QEMU_CAPS_CCW,
            QEMU_CAPS_CCW_CSSID_UNRESTRICTED);
    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 已提交
1680 1681
    DO_TEST_CAPS_ARCH_LATEST("hostdev-subsys-mdev-vfio-ap",
                             "s390x");
1682 1683
    DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("hostdev-subsys-mdev-vfio-ap-boot-fail",
                                         "s390x");
B
Boris Fiuczynski 已提交
1684

1685
    DO_TEST_FULL("restore-v2",
1686 1687
                 ARG_MIGRATE_FROM, "exec:cat",
                 ARG_MIGRATE_FD, 7,
1688
                 ARG_QEMU_CAPS, NONE);
1689
    DO_TEST_FULL("restore-v2-fd",
1690 1691
                 ARG_MIGRATE_FROM, "stdio",
                 ARG_MIGRATE_FD, 7,
1692
                 ARG_QEMU_CAPS, NONE);
1693
    DO_TEST_FULL("restore-v2-fd",
1694 1695
                 ARG_MIGRATE_FROM, "fd:7",
                 ARG_MIGRATE_FD, 7,
1696
                 ARG_QEMU_CAPS, NONE);
1697
    DO_TEST_FULL("migrate",
1698
                 ARG_MIGRATE_FROM, "tcp:10.0.0.1:5000",
1699
                 ARG_QEMU_CAPS, NONE);
1700

1701
    DO_TEST_FULL("migrate-numa-unaligned",
1702 1703
                 ARG_MIGRATE_FROM, "stdio",
                 ARG_MIGRATE_FD, 7,
1704
                 ARG_QEMU_CAPS,
A
Andrea Bolognani 已提交
1705 1706
                 QEMU_CAPS_NUMA,
                 QEMU_CAPS_OBJECT_MEMORY_RAM);
1707

1708 1709
    DO_TEST_CAPS_VER("qemu-ns", "4.0.0");
    DO_TEST_CAPS_LATEST("qemu-ns");
1710
    DO_TEST("qemu-ns-no-env", NONE);
1711
    DO_TEST("qemu-ns-alt", NONE);
1712

1713
    DO_TEST("smp", NONE);
1714

J
John Ferlan 已提交
1715
    DO_TEST("iothreads", QEMU_CAPS_OBJECT_IOTHREAD);
1716 1717
    DO_TEST("iothreads-ids", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-ids-partial", QEMU_CAPS_OBJECT_IOTHREAD);
1718
    DO_TEST_FAILURE("iothreads-nocap", NONE);
1719 1720
    DO_TEST("iothreads-disk", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-disk-virtio-ccw", QEMU_CAPS_OBJECT_IOTHREAD,
1721
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1722 1723
    DO_TEST_CAPS_LATEST("iothreads-virtio-scsi-pci");
    DO_TEST_CAPS_ARCH_LATEST("iothreads-virtio-scsi-ccw", "s390x");
J
John Ferlan 已提交
1724

1725 1726
    DO_TEST("cpu-topology1", NONE);
    DO_TEST("cpu-topology2", NONE);
1727
    DO_TEST("cpu-topology3", NONE);
1728 1729 1730 1731 1732 1733 1734 1735
    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);
1736
    DO_TEST("cpu-no-removed-features", QEMU_CAPS_KVM);
1737
    DO_TEST("cpu-numa1", NONE);
1738 1739
    DO_TEST("cpu-numa2", NONE);
    DO_TEST("cpu-numa-no-memory-element", NONE);
1740
    DO_TEST_PARSE_ERROR("cpu-numa3", NONE);
1741 1742
    DO_TEST_FAILURE("cpu-numa-disjoint", NONE);
    DO_TEST("cpu-numa-disjoint", QEMU_CAPS_NUMA);
1743 1744
    DO_TEST_FAILURE("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_RAM);
    DO_TEST_FAILURE("cpu-numa-memshared", NONE);
1745
    DO_TEST("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_FILE);
1746
    DO_TEST("cpu-host-model", NONE);
1747
    DO_TEST("cpu-host-model-vendor", NONE);
1748
    DO_TEST_FULL("cpu-host-model-fallback",
1749
                 ARG_FLAGS, FLAG_SKIP_LEGACY_CPUS,
1750
                 ARG_QEMU_CAPS, NONE);
1751
    DO_TEST_FULL("cpu-host-model-nofallback",
1752
                 ARG_FLAGS, FLAG_SKIP_LEGACY_CPUS | FLAG_EXPECT_FAILURE,
1753
                 ARG_QEMU_CAPS, NONE);
A
Andrea Bolognani 已提交
1754 1755
    DO_TEST("cpu-host-passthrough", QEMU_CAPS_KVM);
    DO_TEST_FAILURE("cpu-qemu-host-passthrough", QEMU_CAPS_KVM);
1756

1757
    qemuTestSetHostArch(driver.caps, VIR_ARCH_S390X);
1758
    DO_TEST("cpu-s390-zEC12", QEMU_CAPS_KVM, QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1759 1760
    DO_TEST("cpu-s390-features", QEMU_CAPS_KVM, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION);
    DO_TEST_FAILURE("cpu-s390-features", QEMU_CAPS_KVM);
1761 1762
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);

1763
    qemuTestSetHostCPU(driver.caps, cpuHaswell);
1764 1765 1766 1767
    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);
1768
    DO_TEST("cpu-host-model-cmt", NONE);
1769
    DO_TEST("cpu-tsc-frequency", QEMU_CAPS_KVM);
1770 1771
    DO_TEST_CAPS_VER("cpu-translation", "4.0.0");
    DO_TEST_CAPS_LATEST("cpu-translation");
1772
    qemuTestSetHostCPU(driver.caps, NULL);
1773

1774 1775
    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);
1776
    DO_TEST("luks-disks", QEMU_CAPS_OBJECT_SECRET);
1777
    DO_TEST("luks-disks-source", QEMU_CAPS_OBJECT_SECRET);
1778 1779
    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);
1780
    DO_TEST_PARSE_ERROR("luks-disk-invalid", NONE);
1781
    DO_TEST_PARSE_ERROR("luks-disks-source-both", QEMU_CAPS_OBJECT_SECRET);
1782

1783 1784 1785 1786 1787 1788 1789 1790
    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);
1791
    DO_TEST("cputune-numatune",
1792
            QEMU_CAPS_KVM,
1793
            QEMU_CAPS_OBJECT_IOTHREAD,
1794 1795
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1796 1797 1798
    DO_TEST("vcpu-placement-static",
            QEMU_CAPS_KVM,
            QEMU_CAPS_OBJECT_IOTHREAD);
1799

1800
    DO_TEST("numatune-memory", NONE);
1801
    DO_TEST_PARSE_ERROR("numatune-memory-invalid-nodeset", NONE);
A
Andrea Bolognani 已提交
1802 1803 1804
    DO_TEST("numatune-memnode",
            QEMU_CAPS_NUMA,
            QEMU_CAPS_OBJECT_MEMORY_RAM);
1805 1806
    DO_TEST_FAILURE("numatune-memnode", NONE);

A
Andrea Bolognani 已提交
1807 1808 1809
    DO_TEST("numatune-memnode-no-memory",
            QEMU_CAPS_NUMA,
            QEMU_CAPS_OBJECT_MEMORY_RAM);
1810 1811
    DO_TEST_FAILURE("numatune-memnode-no-memory", NONE);

1812 1813
    DO_TEST("numatune-distances", QEMU_CAPS_NUMA, QEMU_CAPS_NUMA_DIST);

1814
    DO_TEST("numatune-auto-nodeset-invalid", NONE);
1815 1816
    DO_TEST("numatune-auto-prefer", QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1817 1818
    DO_TEST_FAILURE("numatune-static-nodeset-exceed-hostnode",
                    QEMU_CAPS_OBJECT_MEMORY_RAM);
1819 1820
    DO_TEST_PARSE_ERROR("numatune-memnode-nocpu", NONE);
    DO_TEST_PARSE_ERROR("numatune-memnodes-problematic", NONE);
1821 1822
    DO_TEST("numad", NONE);
    DO_TEST("numad-auto-vcpu-static-numatune", NONE);
1823
    DO_TEST_PARSE_ERROR("numad-auto-vcpu-static-numatune-no-nodeset", NONE);
1824 1825 1826
    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);
1827
    DO_TEST("blkdeviotune-max",
1828
            QEMU_CAPS_DRIVE_IOTUNE_MAX);
1829 1830 1831
    DO_TEST("blkdeviotune-group-num",
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_GROUP);
1832 1833 1834
    DO_TEST("blkdeviotune-max-length",
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_MAX_LENGTH);
1835

1836
    DO_TEST("multifunction-pci-device",
1837
            QEMU_CAPS_SCSI_LSI);
1838

1839
    DO_TEST("monitor-json", NONE);
1840

1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852
    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);
1853

1854
    DO_TEST("pseries-basic",
1855
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1856
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1857
    DO_TEST("pseries-vio",
1858
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1859
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1860
    DO_TEST("pseries-usb-default",
1861
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1862
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1863
            QEMU_CAPS_PIIX3_USB_UHCI,
1864
            QEMU_CAPS_PCI_OHCI);
1865
    DO_TEST("pseries-usb-multi",
1866
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1867
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1868
            QEMU_CAPS_PIIX3_USB_UHCI,
1869
            QEMU_CAPS_PCI_OHCI);
1870
    DO_TEST("pseries-vio-user-assigned",
1871
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1872 1873
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST_PARSE_ERROR("pseries-vio-address-clash", NONE);
1874 1875 1876
    DO_TEST("pseries-nvram",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_DEVICE_NVRAM);
1877
    DO_TEST("pseries-usb-kbd", QEMU_CAPS_PCI_OHCI,
1878
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1879
            QEMU_CAPS_DEVICE_USB_KBD,
1880
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1881
    DO_TEST("pseries-cpu-exact",
1882
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1883 1884
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST_PARSE_ERROR("pseries-no-parallel", NONE);
1885 1886

    qemuTestSetHostArch(driver.caps, VIR_ARCH_PPC64);
A
Andrea Bolognani 已提交
1887
    DO_TEST("pseries-cpu-compat", QEMU_CAPS_KVM,
1888
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1889
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1890 1891 1892
    DO_TEST("pseries-machine-max-cpu-compat",
            QEMU_CAPS_KVM,
            QEMU_CAPS_MACHINE_PSERIES_MAX_CPU_COMPAT,
1893
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
A
Andrea Bolognani 已提交
1894
    DO_TEST("pseries-cpu-le", QEMU_CAPS_KVM,
1895
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1896
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1897 1898 1899
    DO_TEST_FAILURE("pseries-cpu-compat-power9",
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
                    QEMU_CAPS_KVM);
1900 1901 1902

    qemuTestSetHostCPU(driver.caps, cpuPower9);
    DO_TEST("pseries-cpu-compat-power9",
1903
            QEMU_CAPS_KVM,
1904
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1905
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1906 1907
    qemuTestSetHostCPU(driver.caps, NULL);

1908 1909
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);

1910
    DO_TEST("pseries-panic-missing",
1911
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1912
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1913
    DO_TEST("pseries-panic-no-address",
1914
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1915
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1916
    DO_TEST_FAILURE("pseries-panic-address",
1917
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
1918 1919 1920 1921 1922

    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);
1923 1924 1925 1926 1927 1928
    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);
1929 1930 1931
    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);
1932

1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954
    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);

1955
    DO_TEST("pseries-features",
1956
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1957
            QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE,
1958
            QEMU_CAPS_MACHINE_PSERIES_CAP_HTM,
1959
            QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV,
1960
            QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);
1961
    DO_TEST_FAILURE("pseries-features",
1962
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
A
Andrea Bolognani 已提交
1963
    DO_TEST_PARSE_ERROR("pseries-features-invalid-machine", NONE);
1964

1965
    DO_TEST("pseries-serial-native",
1966
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1967 1968
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial+console-native",
1969
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1970 1971
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial-compat",
1972
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1973
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1974
    DO_TEST("pseries-serial-pci",
1975
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1976 1977
            QEMU_CAPS_DEVICE_PCI_SERIAL);
    DO_TEST("pseries-serial-usb",
1978
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1979 1980
            QEMU_CAPS_DEVICE_QEMU_XHCI,
            QEMU_CAPS_DEVICE_USB_SERIAL);
1981
    DO_TEST("pseries-console-native",
1982
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1983 1984
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-console-virtio",
1985
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
1986
    DO_TEST_PARSE_ERROR("pseries-serial-invalid-machine", NONE);
1987
    DO_TEST_PARSE_ERROR("pseries-spaprvio-invalid", "ppc64");
1988

1989
    DO_TEST("mach-virt-serial-native",
1990
            QEMU_CAPS_DEVICE_PL011);
1991
    DO_TEST("mach-virt-serial+console-native",
1992
            QEMU_CAPS_DEVICE_PL011);
1993
    DO_TEST("mach-virt-serial-compat",
1994
            QEMU_CAPS_DEVICE_PL011);
1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006
    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",
2007
            QEMU_CAPS_DEVICE_PL011);
2008 2009
    DO_TEST("mach-virt-console-virtio",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
2010 2011
    DO_TEST_PARSE_ERROR("mach-virt-serial-invalid-machine", NONE);

2012 2013
    DO_TEST("disk-ide-split", NONE);
    DO_TEST("disk-ide-wwn", QEMU_CAPS_IDE_DRIVE_WWN);
2014

2015
    DO_TEST("disk-geometry", NONE);
2016
    DO_TEST("disk-blockio", QEMU_CAPS_BLOCKIO);
2017

2018
    DO_TEST("video-device-pciaddr-default",
2019 2020
            QEMU_CAPS_KVM,
            QEMU_CAPS_VNC,
2021
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2022
            QEMU_CAPS_DEVICE_QXL);
2023
    DO_TEST("video-vga-nodevice", QEMU_CAPS_DEVICE_VGA);
2024
    DO_TEST("video-vga-device", QEMU_CAPS_DEVICE_VGA,
2025
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2026
    DO_TEST("video-vga-device-vgamem", QEMU_CAPS_DEVICE_VGA,
2027
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_VGA_VGAMEM);
2028
    DO_TEST("video-qxl-nodevice", QEMU_CAPS_DEVICE_QXL);
2029
    DO_TEST("video-qxl-device",
2030
            QEMU_CAPS_DEVICE_QXL,
2031
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2032
    DO_TEST("video-qxl-device-vgamem",
2033
            QEMU_CAPS_DEVICE_QXL,
2034
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2035
            QEMU_CAPS_QXL_VGAMEM);
2036
    DO_TEST_CAPS_LATEST("video-qxl-device-vram64");
2037
    DO_TEST("video-qxl-sec-device",
2038
            QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2039
    DO_TEST("video-qxl-sec-device-vgamem",
2040 2041
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2042
            QEMU_CAPS_QXL_VGAMEM);
2043
    DO_TEST_CAPS_LATEST("video-qxl-sec-device-vram64");
2044 2045 2046
    DO_TEST("video-qxl-heads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
2047
            QEMU_CAPS_QXL_MAX_OUTPUTS);
2048 2049 2050
    DO_TEST("video-vga-qxl-heads",
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_QXL_MAX_OUTPUTS);
2051 2052 2053
    DO_TEST("video-qxl-noheads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
2054
            QEMU_CAPS_QXL_MAX_OUTPUTS);
M
Marc-André Lureau 已提交
2055
    DO_TEST("video-virtio-gpu-device",
2056
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
M
Marc-André Lureau 已提交
2057
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2058
    DO_TEST("video-virtio-gpu-virgl",
2059
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
2060
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
2061
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2062 2063
    DO_TEST("video-virtio-gpu-spice-gl",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
2064
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
2065 2066
            QEMU_CAPS_SPICE,
            QEMU_CAPS_SPICE_GL,
2067
            QEMU_CAPS_SPICE_RENDERNODE,
2068
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2069 2070 2071 2072 2073
    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);
2074 2075 2076
    DO_TEST("video-virtio-gpu-secondary",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2077 2078 2079
    DO_TEST("video-virtio-vga",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIRTIO_VGA,
2080 2081
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_GPU_MAX_OUTPUTS);
2082
    DO_TEST_CAPS_LATEST("video-bochs-display-device");
2083 2084 2085
    DO_TEST("video-none-device",
            QEMU_CAPS_VNC);
    DO_TEST_PARSE_ERROR("video-invalid-multiple-devices", NONE);
2086

2087 2088
    DO_TEST("virtio-rng-default",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2089
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2090 2091
    DO_TEST("virtio-rng-random",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2092
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2093 2094
    DO_TEST("virtio-rng-egd",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2095
            QEMU_CAPS_OBJECT_RNG_EGD);
J
Ján Tomko 已提交
2096 2097
    DO_TEST_CAPS_VER("virtio-rng-egd-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("virtio-rng-egd-unix");
2098 2099 2100 2101
    DO_TEST("virtio-rng-multiple",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2102
    DO_TEST_PARSE_ERROR("virtio-rng-egd-crash",
2103 2104
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD);
2105
    DO_TEST("virtio-rng-ccw",
2106
            QEMU_CAPS_CCW,
2107 2108
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2109
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2110

2111
    DO_TEST("s390-allow-bogus-usb-none",
2112 2113 2114
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2115
    DO_TEST("s390-allow-bogus-usb-controller",
2116 2117 2118
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2119

2120
    DO_TEST("s390-panic-no-address",
2121
            QEMU_CAPS_CCW,
2122
            QEMU_CAPS_VIRTIO_S390);
2123
    DO_TEST_FAILURE("s390-panic-address",
2124
            QEMU_CAPS_CCW,
2125
            QEMU_CAPS_VIRTIO_S390);
2126
    DO_TEST("s390-panic-missing",
2127
            QEMU_CAPS_CCW,
2128
            QEMU_CAPS_VIRTIO_S390);
2129
    DO_TEST_PARSE_ERROR("s390-no-parallel",
2130
            QEMU_CAPS_CCW,
2131
            QEMU_CAPS_VIRTIO_S390);
2132
    DO_TEST("s390-serial",
2133
            QEMU_CAPS_CCW,
2134 2135 2136
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
    DO_TEST("s390-serial-2",
2137
            QEMU_CAPS_CCW,
2138 2139 2140 2141
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE,
            QEMU_CAPS_DEVICE_SCLPLMCONSOLE);
    DO_TEST("s390-serial-console",
2142
            QEMU_CAPS_CCW,
2143 2144
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
2145

2146
    DO_TEST("ppc-dtb",
J
Ján Tomko 已提交
2147
            QEMU_CAPS_KVM);
2148 2149
    DO_TEST("ppce500-serial",
            QEMU_CAPS_KVM);
O
Olivia Yin 已提交
2150

2151
    DO_TEST("tpm-passthrough",
2152
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
2153 2154
    DO_TEST("tpm-passthrough-crb",
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_CRB);
2155
    DO_TEST_PARSE_ERROR("tpm-no-backend-invalid",
2156
                        QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
2157
    DO_TEST_CAPS_LATEST("tpm-emulator");
2158
    DO_TEST_CAPS_LATEST("tpm-emulator-tpm2");
2159
    DO_TEST_CAPS_LATEST("tpm-emulator-tpm2-enc");
2160

2161 2162 2163 2164
    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);
2165

2166 2167 2168 2169 2170 2171
    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,
2172
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
2173 2174
    DO_TEST("pci-autoadd-idx",
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2175 2176
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("pci-autofill-addr", QEMU_CAPS_DEVICE_CIRRUS_VGA);
2177
    DO_TEST("pci-many",
2178
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
2179
    DO_TEST("pci-bridge-many-disks",
2180
            QEMU_CAPS_DEVICE_PCI_BRIDGE);
L
Laine Stump 已提交
2181
    DO_TEST("pcie-root",
2182 2183 2184 2185
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL);
2186
    DO_TEST("q35",
2187
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2188
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2189
            QEMU_CAPS_DEVICE_IOH3420,
2190
            QEMU_CAPS_ICH9_AHCI,
2191
            QEMU_CAPS_ICH9_USB_EHCI1,
2192
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2193
            QEMU_CAPS_DEVICE_QXL);
2194 2195 2196 2197 2198 2199 2200 2201
    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);
2202
    DO_TEST("q35-pm-disable",
2203
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2204
            QEMU_CAPS_DEVICE_IOH3420,
2205 2206 2207 2208
            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",
2209
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2210
            QEMU_CAPS_DEVICE_IOH3420,
2211 2212
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4);
2213
    DO_TEST("q35-usb2",
2214
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2215
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2216
            QEMU_CAPS_DEVICE_IOH3420,
2217
            QEMU_CAPS_ICH9_AHCI,
2218
            QEMU_CAPS_ICH9_USB_EHCI1,
2219
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2220
            QEMU_CAPS_DEVICE_QXL);
2221
    DO_TEST("q35-usb2-multi",
2222
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2223
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2224
            QEMU_CAPS_DEVICE_IOH3420,
2225
            QEMU_CAPS_ICH9_AHCI,
2226
            QEMU_CAPS_ICH9_USB_EHCI1,
2227
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2228
            QEMU_CAPS_DEVICE_QXL);
2229
    DO_TEST("q35-usb2-reorder",
2230
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2231
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2232
            QEMU_CAPS_DEVICE_IOH3420,
2233
            QEMU_CAPS_ICH9_AHCI,
2234
            QEMU_CAPS_ICH9_USB_EHCI1,
2235
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2236
            QEMU_CAPS_DEVICE_QXL);
2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254
    /* 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,
2255
            QEMU_CAPS_NEC_USB_XHCI,
2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268
            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,
2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288
            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,
2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302
            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,
2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321
            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,
2322 2323 2324 2325 2326
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
2327 2328 2329 2330 2331 2332 2333 2334
            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,
2335
            QEMU_CAPS_NEC_USB_XHCI,
2336
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2337 2338
    DO_TEST("q35-virt-manager-basic",
            QEMU_CAPS_KVM,
2339
            QEMU_CAPS_MACHINE_VMPORT_OPT,
2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363
            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,
2364
            QEMU_CAPS_DEVICE_ISA_SERIAL,
2365
            QEMU_CAPS_USB_REDIR);
2366 2367

    /* Test automatic and manual setting of pcie-root-port attributes */
2368 2369
    DO_TEST("pcie-root-port",
            QEMU_CAPS_DEVICE_IOH3420,
2370
            QEMU_CAPS_ICH9_AHCI,
2371
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2372
            QEMU_CAPS_DEVICE_QXL);
2373 2374 2375 2376 2377 2378

    /* 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,
2379
            QEMU_CAPS_DEVICE_IOH3420);
2380
    DO_TEST("pcie-root-port-model-ioh3420",
2381
            QEMU_CAPS_DEVICE_IOH3420);
2382

2383 2384 2385 2386 2387 2388 2389
    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,
2390
            QEMU_CAPS_ICH9_USB_EHCI1,
2391
            QEMU_CAPS_NEC_USB_XHCI);
2392 2393 2394 2395 2396 2397 2398
    /* 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);
2399

2400
    DO_TEST_PARSE_ERROR("q35-wrong-root",
2401
            QEMU_CAPS_DEVICE_IOH3420,
2402
            QEMU_CAPS_ICH9_AHCI,
2403
            QEMU_CAPS_ICH9_USB_EHCI1,
2404
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2405
            QEMU_CAPS_DEVICE_QXL);
2406
    DO_TEST_PARSE_ERROR("440fx-wrong-root", NONE);
2407
    DO_TEST_PARSE_ERROR("440fx-ide-address-conflict", NONE);
2408

2409
    DO_TEST_PARSE_ERROR("pcie-root-port-too-many",
2410
            QEMU_CAPS_DEVICE_IOH3420,
2411
            QEMU_CAPS_ICH9_AHCI,
2412
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2413
            QEMU_CAPS_DEVICE_QXL);
2414

2415 2416 2417
    DO_TEST("pcie-switch-upstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
2418
            QEMU_CAPS_ICH9_AHCI,
2419
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2420
            QEMU_CAPS_DEVICE_QXL);
2421 2422 2423 2424
    DO_TEST("pcie-switch-downstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
2425
            QEMU_CAPS_ICH9_AHCI,
2426
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2427
            QEMU_CAPS_DEVICE_QXL);
2428

2429 2430 2431 2432 2433 2434
    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);
2435 2436
    DO_TEST_PARSE_ERROR("pci-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_PXB);
2437

2438 2439 2440 2441 2442 2443 2444 2445 2446 2447
    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);
2448 2449 2450
    DO_TEST_PARSE_ERROR("pcie-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_IOH3420,
                        QEMU_CAPS_DEVICE_PXB_PCIE);
2451

2452
    DO_TEST("hostdev-scsi-lsi",
2453 2454
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2455
    DO_TEST("hostdev-scsi-virtio-scsi",
2456 2457
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2458
    DO_TEST("hostdev-scsi-readonly",
2459 2460
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2461
    DO_TEST("hostdev-scsi-virtio-scsi",
2462 2463
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2464
    DO_TEST("hostdev-scsi-lsi-iscsi",
2465 2466
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2467
    DO_TEST("hostdev-scsi-lsi-iscsi-auth",
2468 2469
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2470
    DO_TEST("hostdev-scsi-virtio-iscsi",
2471 2472
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2473
    DO_TEST("hostdev-scsi-virtio-iscsi-auth",
2474 2475
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2476
    DO_TEST("disk-hostdev-scsi-virtio-iscsi-auth-AES",
2477 2478 2479
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_OBJECT_SECRET,
2480
            QEMU_CAPS_ISCSI_PASSWORD_SECRET);
2481 2482
    DO_TEST("hostdev-scsi-vhost-scsi-ccw",
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_VHOST_SCSI,
2483
            QEMU_CAPS_CCW);
2484
    DO_TEST("hostdev-scsi-vhost-scsi-pci",
2485 2486
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VHOST_SCSI);
2487
    DO_TEST_CAPS_LATEST_PARSE_ERROR("hostdev-scsi-vhost-scsi-pci-boot-fail");
2488 2489 2490 2491 2492
    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);
2493

2494 2495
    DO_TEST_CAPS_VER("mlock-on", "3.0.0");
    DO_TEST_CAPS_VER("mlock-off", "3.0.0");
2496 2497
    DO_TEST_CAPS_LATEST("mlock-on");
    DO_TEST_CAPS_LATEST("mlock-off");
2498

2499 2500 2501 2502
    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);
2503

2504
    DO_TEST("hotplug-base",
2505
            QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_SCSI);
2506

2507 2508
    DO_TEST("pcihole64", QEMU_CAPS_I440FX_PCI_HOLE64_SIZE);
    DO_TEST_FAILURE("pcihole64-none", NONE);
2509
    DO_TEST("pcihole64-q35",
2510
            QEMU_CAPS_DEVICE_IOH3420,
2511
            QEMU_CAPS_ICH9_AHCI,
2512
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2513
            QEMU_CAPS_DEVICE_QXL,
2514 2515
            QEMU_CAPS_Q35_PCI_HOLE64_SIZE);

J
Ján Tomko 已提交
2516 2517
    DO_TEST("arm-vexpressa9-nodevs", NONE);
    DO_TEST("arm-vexpressa9-basic", NONE);
2518
    DO_TEST("arm-vexpressa9-virtio",
2519
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2520
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2521
    DO_TEST("arm-virt-virtio",
2522
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2523
            QEMU_CAPS_DEVICE_PL011,
2524
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2525

2526
    DO_TEST("aarch64-virt-virtio",
2527
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2528
            QEMU_CAPS_DEVICE_PL011,
2529
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2530 2531 2532 2533 2534 2535

    /* 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",
2536
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
2537 2538 2539
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2540
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2541
            QEMU_CAPS_DEVICE_IOH3420,
2542
            QEMU_CAPS_DEVICE_PL011,
2543
            QEMU_CAPS_VIRTIO_SCSI);
2544
    DO_TEST("aarch64-virt-2.6-virtio-pci-default",
2545
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2546 2547
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2548
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2549
            QEMU_CAPS_DEVICE_PL011,
2550
            QEMU_CAPS_DEVICE_IOH3420);
2551 2552 2553
    /* Example of using virtio-pci with no explicit PCI controller
       but with manual PCI addresses */
    DO_TEST("aarch64-virtio-pci-manual-addresses",
2554
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2555 2556
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2557 2558 2559
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_VIRTIO_SCSI);
2560
    DO_TEST("aarch64-video-virtio-gpu-pci",
2561
            QEMU_CAPS_OBJECT_GPEX,
2562
            QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_IOH3420,
2563
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2564
            QEMU_CAPS_DEVICE_VIRTIO_GPU);
2565
    DO_TEST("aarch64-video-default",
2566
            QEMU_CAPS_OBJECT_GPEX,
2567
            QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_IOH3420,
2568
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2569 2570
            QEMU_CAPS_DEVICE_VIRTIO_GPU, QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_VNC);
2571
    DO_TEST("aarch64-aavmf-virtio-mmio",
2572
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2573
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2574 2575
    DO_TEST("aarch64-virt-default-nic",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
2576
    qemuTestSetHostArch(driver.caps, VIR_ARCH_AARCH64);
2577
    DO_TEST("aarch64-cpu-passthrough",
2578
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2579
            QEMU_CAPS_KVM);
2580
    DO_TEST_GIC("aarch64-gic-none", GIC_NONE,
2581
            QEMU_CAPS_KVM,
2582
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2583
    DO_TEST_GIC("aarch64-gic-none-v2", GIC_V2,
2584
            QEMU_CAPS_KVM,
2585 2586
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-none-v3", GIC_V3,
2587
            QEMU_CAPS_KVM,
2588
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2589
    DO_TEST_GIC("aarch64-gic-none-both", GIC_BOTH,
2590
            QEMU_CAPS_KVM,
2591
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2592 2593
    DO_TEST_GIC("aarch64-gic-none-tcg", GIC_BOTH,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2594
    DO_TEST_GIC("aarch64-gic-default", GIC_NONE,
2595
            QEMU_CAPS_KVM,
2596
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
A
Andrea Bolognani 已提交
2597
    DO_TEST_GIC("aarch64-gic-default-v2", GIC_V2,
2598
            QEMU_CAPS_KVM,
2599
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
A
Andrea Bolognani 已提交
2600
    DO_TEST_GIC("aarch64-gic-default-v3", GIC_V3,
2601
            QEMU_CAPS_KVM,
2602
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
A
Andrea Bolognani 已提交
2603
    DO_TEST_GIC("aarch64-gic-default-both", GIC_BOTH,
2604
            QEMU_CAPS_KVM,
2605 2606
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v2", GIC_NONE,
2607
            QEMU_CAPS_KVM,
2608 2609
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v2", GIC_V2,
2610
            QEMU_CAPS_KVM,
2611 2612
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v2", GIC_V3,
2613
            QEMU_CAPS_KVM,
2614
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2615
    DO_TEST_GIC("aarch64-gic-v2", GIC_BOTH,
2616
            QEMU_CAPS_KVM,
2617
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2618
    DO_TEST_FAILURE("aarch64-gic-v3",
2619
            QEMU_CAPS_KVM, NONE);
2620
    DO_TEST_GIC("aarch64-gic-v3", GIC_NONE,
2621
            QEMU_CAPS_KVM,
2622 2623
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v3", GIC_V2,
2624
            QEMU_CAPS_KVM,
2625 2626
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v3", GIC_V3,
2627
            QEMU_CAPS_KVM,
2628 2629
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v3", GIC_BOTH,
2630
            QEMU_CAPS_KVM,
2631
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2632
    DO_TEST_FAILURE("aarch64-gic-host",
2633
            QEMU_CAPS_KVM, NONE);
2634
    DO_TEST_GIC("aarch64-gic-host", GIC_NONE,
2635
            QEMU_CAPS_KVM,
2636 2637
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-host", GIC_V2,
2638
            QEMU_CAPS_KVM,
2639 2640
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-host", GIC_V3,
2641
            QEMU_CAPS_KVM,
2642 2643
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-host", GIC_BOTH,
2644
            QEMU_CAPS_KVM,
2645
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2646
    DO_TEST_PARSE_ERROR("aarch64-gic-invalid",
2647
            QEMU_CAPS_KVM,
2648
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2649
    DO_TEST_PARSE_ERROR("aarch64-gic-not-virt",
2650
                        QEMU_CAPS_KVM,
2651 2652
                        QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_PARSE_ERROR("aarch64-gic-not-arm",
2653
                        QEMU_CAPS_KVM,
2654
                        QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2655
    DO_TEST("aarch64-kvm-32-on-64",
2656
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2657
            QEMU_CAPS_DEVICE_PL011,
A
Andrea Bolognani 已提交
2658
            QEMU_CAPS_KVM, QEMU_CAPS_CPU_AARCH64_OFF);
2659
    DO_TEST_FAILURE("aarch64-kvm-32-on-64",
2660
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2661
            QEMU_CAPS_KVM);
2662 2663 2664 2665 2666 2667 2668
    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);
2669 2670 2671 2672
    DO_TEST("aarch64-traditional-pci",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2673
            QEMU_CAPS_DEVICE_PCIE_PCI_BRIDGE,
2674 2675
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_SERIAL);
2676 2677 2678 2679 2680 2681 2682

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

2683
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);
2684

2685
    DO_TEST("kvm-pit-delay", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2686
    DO_TEST("kvm-pit-discard", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2687

2688 2689 2690 2691
    DO_TEST("panic",
            QEMU_CAPS_DEVICE_PANIC);
    DO_TEST("panic-double",
            QEMU_CAPS_DEVICE_PANIC);
H
Hu Tao 已提交
2692

2693 2694
    DO_TEST("panic-no-address",
            QEMU_CAPS_DEVICE_PANIC);
2695

2696 2697
    DO_TEST("fips-enabled", QEMU_CAPS_ENABLE_FIPS);

J
Ján Tomko 已提交
2698
    DO_TEST("shmem", QEMU_CAPS_DEVICE_IVSHMEM);
2699 2700 2701
    DO_TEST("shmem-plain-doorbell", QEMU_CAPS_DEVICE_IVSHMEM,
            QEMU_CAPS_DEVICE_IVSHMEM_PLAIN,
            QEMU_CAPS_DEVICE_IVSHMEM_DOORBELL);
2702
    DO_TEST_FAILURE("shmem", NONE);
J
Ján Tomko 已提交
2703
    DO_TEST_FAILURE("shmem-invalid-size",
2704
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2705
    DO_TEST_FAILURE("shmem-invalid-address",
2706
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2707
    DO_TEST_FAILURE("shmem-small-size",
2708
                    QEMU_CAPS_DEVICE_IVSHMEM);
2709
    DO_TEST_PARSE_ERROR("shmem-msi-only", NONE);
A
Andrea Bolognani 已提交
2710
    DO_TEST("cpu-host-passthrough-features", QEMU_CAPS_KVM);
2711

2712
    DO_TEST_FAILURE("memory-align-fail", NONE);
2713
    DO_TEST_FAILURE("memory-hotplug-nonuma", QEMU_CAPS_DEVICE_PC_DIMM);
M
Michal Privoznik 已提交
2714
    DO_TEST("memory-hotplug", NONE);
2715
    DO_TEST("memory-hotplug", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA);
2716
    DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2717
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2718
    DO_TEST("memory-hotplug-dimm-addr", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2719
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2720
    DO_TEST("memory-hotplug-ppc64-nonuma", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2721
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2722
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2723 2724 2725
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm");
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-access");
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-label");
2726
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-align");
2727
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-pmem");
2728
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-readonly");
2729

2730
    DO_TEST("machine-aeskeywrap-on-caps",
2731
            QEMU_CAPS_AES_KEY_WRAP,
2732
            QEMU_CAPS_DEA_KEY_WRAP,
2733
            QEMU_CAPS_VIRTIO_SCSI,
2734
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2735
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps",
2736
                    QEMU_CAPS_VIRTIO_SCSI,
2737
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2738 2739 2740
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps", NONE);

    DO_TEST("machine-aeskeywrap-on-cap",
2741
            QEMU_CAPS_AES_KEY_WRAP,
2742
            QEMU_CAPS_VIRTIO_SCSI,
2743
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2744
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap",
2745
                    QEMU_CAPS_VIRTIO_SCSI,
2746
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2747 2748 2749
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap", NONE);

    DO_TEST("machine-aeskeywrap-off-caps",
2750
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2751
            QEMU_CAPS_VIRTIO_SCSI,
2752
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2753
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps",
2754
                    QEMU_CAPS_VIRTIO_SCSI,
2755
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2756 2757 2758
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", NONE);

    DO_TEST("machine-aeskeywrap-off-cap",
2759
            QEMU_CAPS_AES_KEY_WRAP,
2760
            QEMU_CAPS_VIRTIO_SCSI,
2761
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2762
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap",
2763
                    QEMU_CAPS_VIRTIO_SCSI,
2764
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2765 2766 2767
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap", NONE);

    DO_TEST("machine-deakeywrap-on-caps",
2768
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2769
            QEMU_CAPS_VIRTIO_SCSI,
2770
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2771
    DO_TEST_FAILURE("machine-deakeywrap-on-caps",
2772
                    QEMU_CAPS_VIRTIO_SCSI,
2773
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2774 2775 2776
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", NONE);

    DO_TEST("machine-deakeywrap-on-cap",
2777
            QEMU_CAPS_DEA_KEY_WRAP,
2778
            QEMU_CAPS_VIRTIO_SCSI,
2779
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2780
    DO_TEST_FAILURE("machine-deakeywrap-on-cap",
2781
                    QEMU_CAPS_VIRTIO_SCSI,
2782
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2783 2784 2785
    DO_TEST_FAILURE("machine-deakeywrap-on-cap", NONE);

    DO_TEST("machine-deakeywrap-off-caps",
2786
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2787
            QEMU_CAPS_VIRTIO_SCSI,
2788
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2789
    DO_TEST_FAILURE("machine-deakeywrap-off-caps",
2790
                    QEMU_CAPS_VIRTIO_SCSI,
2791
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2792 2793 2794
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", NONE);

    DO_TEST("machine-deakeywrap-off-cap",
2795
            QEMU_CAPS_DEA_KEY_WRAP,
2796
            QEMU_CAPS_VIRTIO_SCSI,
2797
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2798
    DO_TEST_FAILURE("machine-deakeywrap-off-cap",
2799
                    QEMU_CAPS_VIRTIO_SCSI,
2800
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2801 2802 2803
    DO_TEST_FAILURE("machine-deakeywrap-off-cap", NONE);

    DO_TEST("machine-keywrap-none-caps",
2804
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2805
            QEMU_CAPS_VIRTIO_SCSI,
2806
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2807
    DO_TEST("machine-keywrap-none",
2808
            QEMU_CAPS_VIRTIO_SCSI,
2809
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2810

2811
    DO_TEST("machine-loadparm-s390",
2812
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390,
2813
            QEMU_CAPS_LOADPARM);
2814
    DO_TEST("machine-loadparm-net-s390",
2815
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390,
2816
            QEMU_CAPS_LOADPARM);
2817
    DO_TEST("machine-loadparm-multiple-disks-nets-s390",
2818
            QEMU_CAPS_CCW,
2819
            QEMU_CAPS_VIRTIO_S390,
2820 2821
            QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-char-invalid",
2822
                        QEMU_CAPS_CCW,
2823
                        QEMU_CAPS_VIRTIO_S390,
2824 2825
                        QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-len-invalid",
2826
                        QEMU_CAPS_CCW,
2827
                        QEMU_CAPS_VIRTIO_S390,
2828 2829
                        QEMU_CAPS_LOADPARM);

J
Jiri Denemark 已提交
2830 2831 2832 2833 2834 2835 2836
    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);

2837
    DO_TEST("virtio-input", QEMU_CAPS_VIRTIO_KEYBOARD,
2838
            QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET);
2839
    DO_TEST("virtio-input-passthrough", QEMU_CAPS_VIRTIO_INPUT_HOST);
2840

2841
    DO_TEST("ppc64-usb-controller",
2842
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2843
            QEMU_CAPS_PCI_OHCI);
2844
    DO_TEST("ppc64-usb-controller-legacy",
2845
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2846
            QEMU_CAPS_PIIX3_USB_UHCI);
2847
    DO_TEST_FULL("ppc64-usb-controller-qemu-xhci",
2848
                 ARG_PARSEFLAGS, VIR_DOMAIN_DEF_PARSE_ABI_UPDATE,
2849
                 ARG_QEMU_CAPS,
2850
                 QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2851 2852 2853 2854 2855 2856 2857
                 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);
2858

2859 2860 2861 2862
    DO_TEST("aarch64-usb-controller-nec-xhci",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_NEC_USB_XHCI);

2863 2864 2865
    /* VM XML has invalid arch/ostype/virttype combo, but the SKIP flag
     * will avoid the error. Still, we expect qemu driver to complain about
     * missing machine error, and not crash */
2866 2867 2868 2869
    DO_TEST_FULL("missing-machine",
                 ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE,
                 ARG_PARSEFLAGS, VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE,
                 ARG_QEMU_CAPS, NONE);
2870

2871 2872 2873
    DO_TEST("name-escape",
            QEMU_CAPS_NAME_DEBUG_THREADS,
            QEMU_CAPS_OBJECT_SECRET,
2874 2875
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_GROUP,
2876 2877 2878 2879
            QEMU_CAPS_VNC,
            QEMU_CAPS_NAME_GUEST,
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_SPICE,
2880
            QEMU_CAPS_SPICE_UNIX,
2881 2882 2883 2884 2885
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_SPICE_GL,
            QEMU_CAPS_SPICE_RENDERNODE,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2886
            QEMU_CAPS_DEVICE_ISA_SERIAL,
2887
            QEMU_CAPS_CHARDEV_FILE_APPEND,
2888
            QEMU_CAPS_CCID_EMULATED,
2889
            QEMU_CAPS_VIRTIO_SCSI);
M
Marc-André Lureau 已提交
2890 2891
    DO_TEST("debug-threads", QEMU_CAPS_NAME_DEBUG_THREADS);

2892
    DO_TEST("master-key", QEMU_CAPS_OBJECT_SECRET);
2893
    DO_TEST("usb-long-port-path",
J
Ján Tomko 已提交
2894
            QEMU_CAPS_USB_HUB);
2895
    DO_TEST_PARSE_ERROR("usb-too-long-port-path-invalid",
2896
                        QEMU_CAPS_USB_HUB);
2897

2898
    DO_TEST("acpi-table", NONE);
2899 2900 2901 2902 2903 2904

    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");
2905
    DO_TEST_CAPS_LATEST_PARSE_ERROR("intel-iommu-wrong-machine");
2906
    DO_TEST_CAPS_ARCH_LATEST("iommu-smmuv3", "aarch64");
2907

2908
    DO_TEST("cpu-hotplug-startup", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);
2909 2910 2911
    DO_TEST_PARSE_ERROR("cpu-hotplug-granularity",
                        QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);

2912 2913 2914
    DO_TEST("virtio-options", QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
2915
            QEMU_CAPS_DEVICE_VHOST_USER_GPU,
2916 2917
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
2918 2919 2920
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_PCI_IOMMU_PLATFORM,
            QEMU_CAPS_VIRTIO_PCI_ATS);
2921

J
Ján Tomko 已提交
2922
    DO_TEST("fd-memory-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
2923
            QEMU_CAPS_KVM);
J
Ján Tomko 已提交
2924
    DO_TEST("fd-memory-numa-topology2", QEMU_CAPS_OBJECT_MEMORY_FILE,
2925
            QEMU_CAPS_KVM);
J
Ján Tomko 已提交
2926
    DO_TEST("fd-memory-numa-topology3", QEMU_CAPS_OBJECT_MEMORY_FILE,
2927 2928
            QEMU_CAPS_KVM);

J
Ján Tomko 已提交
2929
    DO_TEST("fd-memory-no-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
2930 2931
            QEMU_CAPS_KVM);

M
Marc-André Lureau 已提交
2932
    DO_TEST_CAPS_LATEST("memfd-memory-numa");
2933
    DO_TEST_CAPS_LATEST("memfd-memory-default-hugepage");
M
Marc-André Lureau 已提交
2934

2935 2936 2937 2938 2939 2940 2941 2942
    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);

2943 2944 2945 2946 2947 2948 2949 2950 2951
    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 已提交
2952
    DO_TEST("vmcoreinfo", QEMU_CAPS_DEVICE_VMCOREINFO);
2953

2954 2955 2956
    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,
2957
            QEMU_CAPS_DEVICE_ISA_SERIAL,
2958
            QEMU_CAPS_HDA_DUPLEX,
2959 2960
            QEMU_CAPS_CCID_EMULATED,
            QEMU_CAPS_QCOW2_LUKS, QEMU_CAPS_OBJECT_SECRET);
2961
    DO_TEST("user-aliases2", QEMU_CAPS_DEVICE_IOH3420, QEMU_CAPS_ICH9_AHCI);
2962 2963
    DO_TEST("user-aliases-usb", QEMU_CAPS_KVM,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4,
2964
            QEMU_CAPS_ICH9_USB_EHCI1);
2965

2966
    DO_TEST_CAPS_VER("disk-virtio-scsi-reservations", "2.12.0");
2967
    DO_TEST_CAPS_LATEST("disk-virtio-scsi-reservations");
2968

2969
    DO_TEST_CAPS_LATEST("tseg-explicit-size");
2970 2971 2972
    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");
2973

2974
    DO_TEST("video-virtio-gpu-ccw", QEMU_CAPS_CCW,
2975 2976 2977 2978 2979 2980
            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);

2981
    DO_TEST("input-virtio-ccw", QEMU_CAPS_CCW,
2982 2983 2984 2985 2986 2987 2988
            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);

2989 2990
    DO_TEST_CAPS_LATEST("vhost-vsock");
    DO_TEST_CAPS_LATEST("vhost-vsock-auto");
2991 2992
    DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw", "s390x");
    DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw-auto", "s390x");
2993

2994
    DO_TEST_CAPS_VER("launch-security-sev", "2.12.0");
2995

L
Lubomir Rintel 已提交
2996 2997
    DO_TEST("riscv64-virt",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
2998 2999
    DO_TEST("riscv64-virt-pci",
            QEMU_CAPS_OBJECT_GPEX);
L
Lubomir Rintel 已提交
3000

3001 3002 3003 3004 3005
    /* 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");
3006
    DO_TEST_CAPS_LATEST_PARSE_ERROR("virtio-transitional-not-supported");
3007

3008 3009 3010 3011 3012 3013 3014 3015
    /* 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");

3016 3017 3018
    /* 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");
3019
    DO_TEST_CAPS_ARCH_LATEST("riscv64-virt-graphics", "riscv64");
3020
    DO_TEST_CAPS_ARCH_LATEST("s390x-ccw-graphics", "s390x");
3021 3022 3023
    DO_TEST_CAPS_ARCH_LATEST("x86_64-pc-graphics", "x86_64");
    DO_TEST_CAPS_ARCH_LATEST("x86_64-q35-graphics", "x86_64");

3024 3025 3026 3027 3028
    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");

3029 3030 3031
    DO_TEST_CAPS_LATEST("vhost-user-vga");
    DO_TEST_CAPS_LATEST("vhost-user-gpu-secondary");

A
Andrea Bolognani 已提交
3032 3033 3034
    if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL)
        virFileDeleteTree(fakerootdir);

3035
    VIR_FREE(driver.config->nbdTLSx509certdir);
3036
    qemuTestDriverFree(&driver);
A
Andrea Bolognani 已提交
3037
    VIR_FREE(fakerootdir);
3038
    virHashFree(capslatest);
3039
    virFileWrapperClearPrefixes();
3040

3041
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
3042 3043
}

3044
VIR_TEST_MAIN_PRELOAD(mymain,
3045 3046 3047 3048
                      VIR_TEST_MOCK("qemuxml2argv"),
                      VIR_TEST_MOCK("virrandom"),
                      VIR_TEST_MOCK("qemucpu"),
                      VIR_TEST_MOCK("virpci"))
3049

3050 3051
#else

3052 3053 3054 3055
int main(void)
{
    return EXIT_AM_SKIP;
}
3056 3057

#endif /* WITH_QEMU */