qemuxml2argvtest.c 115.9 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
    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 &&
536
                virQEMUCapsGet(info->qemuCaps, QEMU_CAPS_DBUS_VMSTATE)) {
537 538 539 540 541 542 543
                qemuSlirpPtr slirp = qemuSlirpNew();
                slirp->fd[0] = 42;
                QEMU_DOMAIN_NETWORK_PRIVATE(net)->slirp = slirp;
            }
        }
    }

544
    if (!(cmd = qemuProcessCreatePretendCmd(&driver, vm, migrateURI,
P
Pavel Hrdina 已提交
545 546
                                            (flags & FLAG_FIPS), false,
                                            VIR_QEMU_PROCESS_START_COLD))) {
P
Pavel Hrdina 已提交
547 548
        if (flags & FLAG_EXPECT_FAILURE)
            goto ok;
549
        goto cleanup;
J
Jiri Denemark 已提交
550
    }
551 552 553 554
    if (flags & FLAG_EXPECT_FAILURE) {
        VIR_TEST_DEBUG("passed instead of expected failure");
        goto cleanup;
    }
J
Jiri Denemark 已提交
555

556
    if (!(actualargv = virCommandToString(cmd, false)))
557
        goto cleanup;
E
Eric Blake 已提交
558

559
    if (virTestCompareToFile(actualargv, info->outfile) < 0)
560
        goto cleanup;
561

P
Pavel Hrdina 已提交
562 563
    ret = 0;

564
 ok:
565
    if (ret == 0 && flags & FLAG_EXPECT_FAILURE) {
P
Pavel Hrdina 已提交
566
        ret = -1;
567
        VIR_TEST_DEBUG("Error expected but there wasn't any.");
568
        goto cleanup;
P
Pavel Hrdina 已提交
569
    }
570 571 572
    if (flags & FLAG_EXPECT_FAILURE) {
        if ((log = virTestLogContentAndReset()))
            VIR_TEST_DEBUG("Got expected error: \n%s", log);
573
    }
574 575
    virResetLastError();
    ret = 0;
576

577
 cleanup:
578 579
    VIR_FREE(log);
    VIR_FREE(actualargv);
580
    virDomainChrSourceDefClear(&monitor_chr);
E
Eric Blake 已提交
581
    virCommandFree(cmd);
582
    virObjectUnref(vm);
583 584
    virSetConnectSecret(NULL);
    virSetConnectStorage(NULL);
585
    virObjectUnref(conn);
586
    VIR_FREE(migrateURI);
587
    return ret;
588 589
}

590
static int
591
testInfoSetPaths(struct testQemuInfo *info,
592 593 594 595 596 597 598 599 600 601 602 603
                 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 已提交
604
# define FAKEROOTDIRTEMPLATE abs_builddir "/fakerootdir-XXXXXX"
605

606
static int
E
Eric Blake 已提交
607
mymain(void)
608
{
C
Cole Robinson 已提交
609
    int ret = 0;
A
Andrea Bolognani 已提交
610
    char *fakerootdir;
611
    virHashTablePtr capslatest = NULL;
612

A
Andrea Bolognani 已提交
613 614 615 616 617 618 619 620 621 622 623 624
    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);

625 626 627 628 629 630 631 632 633 634
    /* 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;
    }

635
    if (qemuTestDriverInit(&driver) < 0)
636
        return EXIT_FAILURE;
637 638

    driver.privileged = true;
639

640 641 642
    VIR_FREE(driver.config->defaultTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->defaultTLSx509certdir, "/etc/pki/qemu") < 0)
        return EXIT_FAILURE;
643
    VIR_FREE(driver.config->vncTLSx509certdir);
644
    if (VIR_STRDUP_QUIET(driver.config->vncTLSx509certdir, "/etc/pki/libvirt-vnc") < 0)
645 646
        return EXIT_FAILURE;
    VIR_FREE(driver.config->spiceTLSx509certdir);
647
    if (VIR_STRDUP_QUIET(driver.config->spiceTLSx509certdir, "/etc/pki/libvirt-spice") < 0)
648
        return EXIT_FAILURE;
649 650 651
    VIR_FREE(driver.config->chardevTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->chardevTLSx509certdir, "/etc/pki/libvirt-chardev") < 0)
        return EXIT_FAILURE;
652
    VIR_FREE(driver.config->vxhsTLSx509certdir);
653
    if (VIR_STRDUP_QUIET(driver.config->vxhsTLSx509certdir, "/etc/pki/libvirt-vxhs/dummy,path") < 0)
654
        return EXIT_FAILURE;
655 656 657
    VIR_FREE(driver.config->nbdTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->nbdTLSx509certdir, "/etc/pki/libvirt-nbd/dummy,path") < 0)
        return EXIT_FAILURE;
658

659
    VIR_FREE(driver.config->hugetlbfs);
660
    if (VIR_ALLOC_N(driver.config->hugetlbfs, 2) < 0)
661
        return EXIT_FAILURE;
662 663 664
    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)
665
        return EXIT_FAILURE;
666 667
    driver.config->hugetlbfs[0].size = 2048;
    driver.config->hugetlbfs[0].deflt = true;
668
    driver.config->hugetlbfs[1].size = 1048576;
669
    driver.config->spiceTLS = 1;
670
    if (VIR_STRDUP_QUIET(driver.config->spicePassword, "123456") < 0)
671
        return EXIT_FAILURE;
672 673 674
    VIR_FREE(driver.config->memoryBackingDir);
    if (VIR_STRDUP_QUIET(driver.config->memoryBackingDir, "/var/lib/libvirt/qemu/ram") < 0)
        return EXIT_FAILURE;
675 676 677
    VIR_FREE(driver.config->nvramDir);
    if (VIR_STRDUP(driver.config->nvramDir, "/var/lib/libvirt/qemu/nvram") < 0)
        return EXIT_FAILURE;
678

C
Cole Robinson 已提交
679
    capslatest = testQemuGetLatestCaps();
680
    if (!capslatest)
681 682
        return EXIT_FAILURE;

683 684 685 686 687 688 689
    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");

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

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

732 733 734 735 736 737
# define DO_TEST_CAPS_INTERNAL(name, arch, ver, ...) \
    DO_TEST_INTERNAL(name, "." arch "-" ver, \
                     ARG_CAPS_ARCH, arch, \
                     ARG_CAPS_VER, ver, \
                     __VA_ARGS__)

738
# define DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, ...) \
739
    DO_TEST_CAPS_INTERNAL(name, arch, "latest", __VA_ARGS__)
740

741 742 743
# define DO_TEST_CAPS_ARCH_VER_FULL(name, arch, ver, ...) \
    DO_TEST_CAPS_INTERNAL(name, arch, ver, __VA_ARGS__)

744
# define DO_TEST_CAPS_ARCH_LATEST(name, arch) \
745
    DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, ARG_END)
746

747
# define DO_TEST_CAPS_ARCH_VER(name, arch, ver) \
748
    DO_TEST_CAPS_ARCH_VER_FULL(name, arch, ver, ARG_END)
749

750
# define DO_TEST_CAPS_LATEST(name) \
751
    DO_TEST_CAPS_ARCH_LATEST(name, "x86_64")
752

753 754 755
# define DO_TEST_CAPS_VER(name, ver) \
    DO_TEST_CAPS_ARCH_VER(name, "x86_64", ver)

756 757
# define DO_TEST_CAPS_ARCH_LATEST_FAILURE(name, arch) \
    DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, \
758
                                  ARG_FLAGS, FLAG_EXPECT_FAILURE)
759

760 761 762 763 764 765 766 767 768 769 770 771
# 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, \
772
                                  ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR)
773

774 775 776 777 778 779 780 781 782 783
# 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)

784 785 786
# define DO_TEST_FULL(name, ...) \
    DO_TEST_INTERNAL(name, "", \
                     __VA_ARGS__, QEMU_CAPS_LAST)
787

788 789 790
/* All the following macros require an explicit QEMU_CAPS_* list
 * at the end of the argument list, or the NONE placeholder.
 * */
791
# define DO_TEST(name, ...) \
792
    DO_TEST_FULL(name, \
793
                 ARG_QEMU_CAPS, __VA_ARGS__)
794

795
# define DO_TEST_GIC(name, gic, ...) \
796
    DO_TEST_FULL(name, \
797
                 ARG_GIC, gic, \
798
                 ARG_QEMU_CAPS, __VA_ARGS__)
799

800
# define DO_TEST_FAILURE(name, ...) \
801 802
    DO_TEST_FULL(name, \
                 ARG_FLAGS, FLAG_EXPECT_FAILURE, \
803
                 ARG_QEMU_CAPS, __VA_ARGS__)
804

805
# define DO_TEST_PARSE_ERROR(name, ...) \
806
    DO_TEST_FULL(name, \
807
                 ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE, \
808
                 ARG_QEMU_CAPS, __VA_ARGS__)
809

810
# define NONE QEMU_CAPS_LAST
811

812 813 814
    /* 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 */
815 816 817 818 819 820 821
    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");
822 823
    unsetenv("QEMU_AUDIO_DRV");
    unsetenv("SDL_AUDIODRIVER");
824

825
    DO_TEST("minimal", NONE);
826 827
    DO_TEST("minimal-sandbox",
            QEMU_CAPS_SECCOMP_BLACKLIST);
828
    DO_TEST_PARSE_ERROR("minimal-no-memory", NONE);
829
    DO_TEST("minimal-msg-timestamp", QEMU_CAPS_MSG_TIMESTAMP);
830 831 832 833

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

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

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

880
    DO_TEST("bios",
881
            QEMU_CAPS_DEVICE_ISA_SERIAL,
882
            QEMU_CAPS_SGA);
J
Ján Tomko 已提交
883
    DO_TEST("bios-nvram", NONE);
M
Michal Privoznik 已提交
884 885 886
    DO_TEST("bios-nvram-secure",
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
887
            QEMU_CAPS_DEVICE_IOH3420,
M
Michal Privoznik 已提交
888 889 890
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_MACHINE_SMM_OPT,
            QEMU_CAPS_VIRTIO_SCSI);
891 892 893 894 895 896 897

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

898
    DO_TEST("clock-utc", NONE);
899
    DO_TEST("clock-localtime", NONE);
J
Ján Tomko 已提交
900 901 902 903
    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 已提交
904
    DO_TEST("clock-catchup", QEMU_CAPS_KVM_PIT_TICK_POLICY);
905 906
    DO_TEST("cpu-kvmclock", NONE);
    DO_TEST("cpu-host-kvmclock", NONE);
907
    DO_TEST("kvmclock", QEMU_CAPS_KVM);
908
    DO_TEST("clock-timer-hyperv-rtc", QEMU_CAPS_KVM);
909

910 911
    DO_TEST("cpu-eoi-disabled", NONE);
    DO_TEST("cpu-eoi-enabled", NONE);
J
Ján Tomko 已提交
912
    DO_TEST("controller-order",
913 914 915 916 917 918
            QEMU_CAPS_KVM,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_CCID_PASSTHRU,
            QEMU_CAPS_SPICE,
            QEMU_CAPS_HDA_DUPLEX,
            QEMU_CAPS_USB_HUB,
919
            QEMU_CAPS_DEVICE_ISA_SERIAL,
920
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
921
    DO_TEST_CAPS_VER("eoi-disabled", "2.7.0");
922
    DO_TEST_CAPS_VER("eoi-disabled", "4.0.0");
923 924
    DO_TEST_CAPS_LATEST("eoi-disabled");
    DO_TEST_CAPS_VER("eoi-enabled", "2.7.0");
925
    DO_TEST_CAPS_VER("eoi-enabled", "4.0.0");
926 927
    DO_TEST_CAPS_LATEST("eoi-enabled");
    DO_TEST_CAPS_VER("pv-spinlock-disabled", "2.7.0");
928
    DO_TEST_CAPS_VER("pv-spinlock-disabled", "4.0.0");
929 930
    DO_TEST_CAPS_LATEST("pv-spinlock-disabled");
    DO_TEST_CAPS_VER("pv-spinlock-enabled", "2.7.0");
931
    DO_TEST_CAPS_VER("pv-spinlock-enabled", "4.0.0");
932 933
    DO_TEST_CAPS_LATEST("pv-spinlock-enabled");
    DO_TEST_CAPS_VER("kvmclock+eoi-disabled", "2.7.0");
934
    DO_TEST_CAPS_VER("kvmclock+eoi-disabled", "4.0.0");
935
    DO_TEST_CAPS_LATEST("kvmclock+eoi-disabled");
936

937 938 939 940 941 942
    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");
943
    DO_TEST_CAPS_LATEST("hyperv-stimer-direct");
944

945 946 947
    DO_TEST("kvm-features", NONE);
    DO_TEST("kvm-features-off", NONE);

948 949 950
    DO_TEST("pmu-feature", NONE);
    DO_TEST("pmu-feature-off", NONE);

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

1177 1178 1179
    DO_TEST("graphics-egl-headless",
            QEMU_CAPS_EGL_HEADLESS,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1180 1181
    DO_TEST_CAPS_LATEST("graphics-egl-headless");
    DO_TEST_CAPS_LATEST("graphics-egl-headless-rendernode");
1182

1183 1184
    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);
1185 1186
    DO_TEST("graphics-vnc-websocket",
            QEMU_CAPS_VNC,
1187
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1188
    DO_TEST("graphics-vnc-policy", QEMU_CAPS_VNC,
1189 1190 1191 1192 1193
            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);
1194
    driver.config->vncAutoUnixSocket = true;
1195 1196
    DO_TEST("graphics-vnc-auto-socket-cfg", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1197
    driver.config->vncAutoUnixSocket = false;
1198 1199 1200 1201
    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);
1202 1203
    DO_TEST("graphics-vnc-socket-new-cmdline", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA, QEMU_CAPS_VNC_MULTI_SERVERS);
1204

1205 1206
    driver.config->vncSASL = 1;
    VIR_FREE(driver.config->vncSASLdir);
1207
    ignore_value(VIR_STRDUP(driver.config->vncSASLdir, "/root/.sasl2"));
1208
    DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1209 1210
    driver.config->vncTLS = 1;
    driver.config->vncTLSx509verify = 1;
1211
    DO_TEST("graphics-vnc-tls", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1212 1213
    DO_TEST_CAPS_VER("graphics-vnc-tls", "2.4.0");
    DO_TEST_CAPS_LATEST("graphics-vnc-tls");
1214 1215 1216 1217 1218
    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);
1219
    driver.config->vncSASL = driver.config->vncTLSx509verify = driver.config->vncTLS = 0;
1220 1221
    VIR_FREE(driver.config->vncSASLdir);
    VIR_FREE(driver.config->vncTLSx509certdir);
1222 1223 1224 1225
    DO_TEST("graphics-vnc-egl-headless",
            QEMU_CAPS_VNC,
            QEMU_CAPS_EGL_HEADLESS,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1226

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

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

1345 1346 1347
    DO_TEST("hostdev-pci-multifunction",
            QEMU_CAPS_KVM,
            QEMU_CAPS_DEVICE_VFIO_PCI);
1348

1349 1350
    DO_TEST("serial-file-log",
            QEMU_CAPS_CHARDEV_FILE_APPEND,
1351
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1352
            QEMU_CAPS_CHARDEV_LOGFILE);
1353
    DO_TEST("serial-spiceport",
1354
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1355
            QEMU_CAPS_DEVICE_QXL,
1356
            QEMU_CAPS_SPICE,
1357
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1358
    DO_TEST("serial-spiceport-nospice", NONE);
1359

1360 1361 1362 1363
    DO_TEST("console-compat",
            QEMU_CAPS_DEVICE_ISA_SERIAL);
    DO_TEST("console-compat-auto",
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1364 1365

    DO_TEST("serial-vc-chardev",
1366
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1367
    DO_TEST("serial-pty-chardev",
1368
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1369
    DO_TEST("serial-dev-chardev",
1370
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1371
    DO_TEST("serial-dev-chardev-iobase",
1372
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1373
    DO_TEST("serial-file-chardev",
1374
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1375
            QEMU_CAPS_CHARDEV_FILE_APPEND);
1376
    DO_TEST("serial-unix-chardev",
1377
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1378
    DO_TEST_CAPS_LATEST("serial-unix-chardev");
1379
    DO_TEST_PARSE_ERROR("serial-unix-missing-source", NONE);
1380
    DO_TEST("serial-tcp-chardev",
1381
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1382
    DO_TEST("serial-udp-chardev",
1383
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1384
    DO_TEST("serial-tcp-telnet-chardev",
1385
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1386 1387
    driver.config->chardevTLS = 1;
    DO_TEST("serial-tcp-tlsx509-chardev",
1388
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1389
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1390 1391
    driver.config->chardevTLSx509verify = 1;
    DO_TEST("serial-tcp-tlsx509-chardev-verify",
1392
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1393 1394
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
    driver.config->chardevTLSx509verify = 0;
1395
    DO_TEST("serial-tcp-tlsx509-chardev-notls",
1396
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1397
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1398 1399 1400 1401 1402 1403 1404 1405
    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,
1406
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1407
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1408 1409
    driver.config->chardevTLS = 0;
    VIR_FREE(driver.config->chardevTLSx509certdir);
1410
    DO_TEST("serial-many-chardev",
1411 1412 1413
            QEMU_CAPS_DEVICE_ISA_SERIAL);
    DO_TEST("parallel-tcp-chardev", NONE);
    DO_TEST("parallel-parport-chardev", NONE);
J
Ján Tomko 已提交
1414 1415
    DO_TEST_CAPS_VER("parallel-unix-chardev", "2.5.0");
    DO_TEST_CAPS_LATEST("parallel-unix-chardev");
1416
    DO_TEST("console-compat-chardev",
1417
            QEMU_CAPS_DEVICE_ISA_SERIAL);
M
Michal Privoznik 已提交
1418 1419
    DO_TEST("pci-serial-dev-chardev",
            QEMU_CAPS_DEVICE_PCI_SERIAL);
1420

1421
    DO_TEST("channel-guestfwd", NONE);
J
Ján Tomko 已提交
1422 1423
    DO_TEST_CAPS_VER("channel-unix-guestfwd", "2.5.0");
    DO_TEST_CAPS_LATEST("channel-unix-guestfwd");
1424 1425 1426 1427 1428 1429
    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);
1430
    DO_TEST("console-virtio-many",
1431
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1432
    DO_TEST("console-virtio-s390",
1433
            QEMU_CAPS_VIRTIO_S390);
1434
    DO_TEST("console-virtio-ccw",
1435
            QEMU_CAPS_CCW,
1436
            QEMU_CAPS_VIRTIO_S390);
J
Ján Tomko 已提交
1437 1438
    DO_TEST_CAPS_VER("console-virtio-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("console-virtio-unix");
1439
    DO_TEST("console-sclp",
1440
            QEMU_CAPS_VIRTIO_S390,
1441
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
1442
    DO_TEST("channel-spicevmc",
1443
            QEMU_CAPS_SPICE,
1444
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1445
    DO_TEST("channel-virtio-default",
1446
            QEMU_CAPS_SPICE);
1447
    DO_TEST("channel-virtio-unix", NONE);
1448

1449
    DO_TEST("smartcard-host",
1450
            QEMU_CAPS_CCID_EMULATED);
1451
    DO_TEST("smartcard-host-certificates",
1452
            QEMU_CAPS_CCID_EMULATED);
1453 1454
    DO_TEST("smartcard-host-certificates-database",
            QEMU_CAPS_CCID_EMULATED);
1455
    DO_TEST("smartcard-passthrough-tcp",
1456
            QEMU_CAPS_CCID_PASSTHRU);
1457
    DO_TEST("smartcard-passthrough-spicevmc",
1458
            QEMU_CAPS_CCID_PASSTHRU);
1459
    DO_TEST("smartcard-controller",
1460
            QEMU_CAPS_CCID_EMULATED);
J
Ján Tomko 已提交
1461 1462
    DO_TEST_CAPS_VER("smartcard-passthrough-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("smartcard-passthrough-unix");
1463

1464 1465 1466 1467 1468 1469 1470 1471
    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);
1472 1473
    DO_TEST_PARSE_ERROR("chardev-reconnect-generated-path",
                        QEMU_CAPS_CHARDEV_RECONNECT);
1474

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

1575 1576 1577
    DO_TEST("smbios", NONE);
    DO_TEST_PARSE_ERROR("smbios-date", NONE);
    DO_TEST_PARSE_ERROR("smbios-uuid-match", NONE);
1578

1579
    DO_TEST("watchdog", NONE);
1580
    DO_TEST("watchdog-device", NONE);
1581
    DO_TEST("watchdog-dump", NONE);
1582
    DO_TEST("watchdog-injectnmi", NONE);
1583
    DO_TEST("watchdog-diag288", QEMU_CAPS_VIRTIO_S390);
1584 1585
    DO_TEST("balloon-device", NONE);
    DO_TEST("balloon-device-deflate",
1586
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1587
    DO_TEST("balloon-ccw-deflate",
1588
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1589
    DO_TEST("balloon-mmio-deflate",
J
Ján Tomko 已提交
1590
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1591
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1592
    DO_TEST("balloon-device-deflate-off",
1593
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1594 1595
    DO_TEST("balloon-device-auto", NONE);
    DO_TEST("balloon-device-period", NONE);
1596 1597
    DO_TEST("sound", NONE);
    DO_TEST("sound-device",
1598
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_HDA_MICRO,
1599
            QEMU_CAPS_HDA_OUTPUT,
1600 1601
            QEMU_CAPS_DEVICE_ICH9_INTEL_HDA,
            QEMU_CAPS_OBJECT_USB_AUDIO);
1602
    DO_TEST("fs9p", NONE);
1603
    DO_TEST_CAPS_LATEST("fs9p");
1604
    DO_TEST("fs9p-ccw",
1605
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1606
    DO_TEST_CAPS_ARCH_LATEST("fs9p-ccw", "s390x");
1607

1608
    DO_TEST("hostdev-usb-address", NONE);
1609
    DO_TEST("hostdev-usb-address-device", NONE);
1610
    DO_TEST("hostdev-usb-address-device-boot", NONE);
1611 1612
    DO_TEST("hostdev-pci-address", QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST("hostdev-pci-address-device", QEMU_CAPS_DEVICE_VFIO_PCI);
1613 1614
    DO_TEST("hostdev-vfio",
            QEMU_CAPS_DEVICE_VFIO_PCI);
1615
    DO_TEST("hostdev-vfio-multidomain",
1616
            QEMU_CAPS_DEVICE_VFIO_PCI);
1617 1618 1619 1620 1621 1622
    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);
1623 1624 1625 1626 1627 1628 1629
    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);
1630 1631
    DO_TEST_PARSE_ERROR("hostdev-vfio-zpci-wrong-arch",
                        QEMU_CAPS_DEVICE_VFIO_PCI);
1632 1633 1634
    DO_TEST("hostdev-vfio-zpci",
            QEMU_CAPS_DEVICE_VFIO_PCI,
            QEMU_CAPS_DEVICE_ZPCI);
1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647
    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);
1648
    DO_TEST("pci-rom", QEMU_CAPS_DEVICE_VFIO_PCI);
1649
    DO_TEST("pci-rom-disabled", NONE);
1650
    DO_TEST("pci-rom-disabled-invalid", NONE);
1651

1652 1653 1654 1655
    DO_TEST("hostdev-subsys-mdev-vfio-ccw",
            QEMU_CAPS_CCW,
            QEMU_CAPS_CCW_CSSID_UNRESTRICTED,
            QEMU_CAPS_DEVICE_VFIO_CCW);
1656 1657
    DO_TEST_CAPS_ARCH_LATEST("hostdev-subsys-mdev-vfio-ccw-boot",
                             "s390x");
1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669
    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 已提交
1670 1671
    DO_TEST_CAPS_ARCH_LATEST("hostdev-subsys-mdev-vfio-ap",
                             "s390x");
1672 1673
    DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("hostdev-subsys-mdev-vfio-ap-boot-fail",
                                         "s390x");
B
Boris Fiuczynski 已提交
1674

1675
    DO_TEST_FULL("restore-v2",
1676 1677
                 ARG_MIGRATE_FROM, "exec:cat",
                 ARG_MIGRATE_FD, 7,
1678
                 ARG_QEMU_CAPS, NONE);
1679
    DO_TEST_FULL("restore-v2-fd",
1680 1681
                 ARG_MIGRATE_FROM, "stdio",
                 ARG_MIGRATE_FD, 7,
1682
                 ARG_QEMU_CAPS, NONE);
1683
    DO_TEST_FULL("restore-v2-fd",
1684 1685
                 ARG_MIGRATE_FROM, "fd:7",
                 ARG_MIGRATE_FD, 7,
1686
                 ARG_QEMU_CAPS, NONE);
1687
    DO_TEST_FULL("migrate",
1688
                 ARG_MIGRATE_FROM, "tcp:10.0.0.1:5000",
1689
                 ARG_QEMU_CAPS, NONE);
1690

1691
    DO_TEST_FULL("migrate-numa-unaligned",
1692 1693
                 ARG_MIGRATE_FROM, "stdio",
                 ARG_MIGRATE_FD, 7,
1694
                 ARG_QEMU_CAPS,
A
Andrea Bolognani 已提交
1695 1696
                 QEMU_CAPS_NUMA,
                 QEMU_CAPS_OBJECT_MEMORY_RAM);
1697

1698 1699
    DO_TEST_CAPS_VER("qemu-ns", "4.0.0");
    DO_TEST_CAPS_LATEST("qemu-ns");
1700
    DO_TEST("qemu-ns-no-env", NONE);
1701
    DO_TEST("qemu-ns-alt", NONE);
1702

1703
    DO_TEST("smp", NONE);
1704

J
John Ferlan 已提交
1705
    DO_TEST("iothreads", QEMU_CAPS_OBJECT_IOTHREAD);
1706 1707
    DO_TEST("iothreads-ids", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-ids-partial", QEMU_CAPS_OBJECT_IOTHREAD);
1708
    DO_TEST_FAILURE("iothreads-nocap", NONE);
1709 1710
    DO_TEST("iothreads-disk", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-disk-virtio-ccw", QEMU_CAPS_OBJECT_IOTHREAD,
1711
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1712 1713
    DO_TEST_CAPS_LATEST("iothreads-virtio-scsi-pci");
    DO_TEST_CAPS_ARCH_LATEST("iothreads-virtio-scsi-ccw", "s390x");
J
John Ferlan 已提交
1714

1715 1716
    DO_TEST("cpu-topology1", NONE);
    DO_TEST("cpu-topology2", NONE);
1717
    DO_TEST("cpu-topology3", NONE);
1718 1719 1720 1721 1722 1723 1724 1725
    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);
1726
    DO_TEST("cpu-no-removed-features", QEMU_CAPS_KVM);
1727
    DO_TEST("cpu-numa1", NONE);
1728 1729
    DO_TEST("cpu-numa2", NONE);
    DO_TEST("cpu-numa-no-memory-element", NONE);
1730
    DO_TEST_PARSE_ERROR("cpu-numa3", NONE);
1731 1732
    DO_TEST_FAILURE("cpu-numa-disjoint", NONE);
    DO_TEST("cpu-numa-disjoint", QEMU_CAPS_NUMA);
1733 1734
    DO_TEST_FAILURE("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_RAM);
    DO_TEST_FAILURE("cpu-numa-memshared", NONE);
1735
    DO_TEST("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_FILE);
1736
    DO_TEST("cpu-host-model", NONE);
1737
    DO_TEST("cpu-host-model-vendor", NONE);
1738
    DO_TEST_FULL("cpu-host-model-fallback",
1739
                 ARG_FLAGS, FLAG_SKIP_LEGACY_CPUS,
1740
                 ARG_QEMU_CAPS, NONE);
1741
    DO_TEST_FULL("cpu-host-model-nofallback",
1742
                 ARG_FLAGS, FLAG_SKIP_LEGACY_CPUS | FLAG_EXPECT_FAILURE,
1743
                 ARG_QEMU_CAPS, NONE);
A
Andrea Bolognani 已提交
1744 1745
    DO_TEST("cpu-host-passthrough", QEMU_CAPS_KVM);
    DO_TEST_FAILURE("cpu-qemu-host-passthrough", QEMU_CAPS_KVM);
1746

1747
    qemuTestSetHostArch(driver.caps, VIR_ARCH_S390X);
1748
    DO_TEST("cpu-s390-zEC12", QEMU_CAPS_KVM, QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1749 1750
    DO_TEST("cpu-s390-features", QEMU_CAPS_KVM, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION);
    DO_TEST_FAILURE("cpu-s390-features", QEMU_CAPS_KVM);
1751 1752
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);

1753
    qemuTestSetHostCPU(driver.caps, cpuHaswell);
1754 1755 1756 1757
    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);
1758
    DO_TEST("cpu-host-model-cmt", NONE);
1759
    DO_TEST("cpu-tsc-frequency", QEMU_CAPS_KVM);
1760 1761
    DO_TEST_CAPS_VER("cpu-translation", "4.0.0");
    DO_TEST_CAPS_LATEST("cpu-translation");
1762
    qemuTestSetHostCPU(driver.caps, NULL);
1763

1764 1765
    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);
1766
    DO_TEST("luks-disks", QEMU_CAPS_OBJECT_SECRET);
1767
    DO_TEST("luks-disks-source", QEMU_CAPS_OBJECT_SECRET);
1768 1769
    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);
1770
    DO_TEST_PARSE_ERROR("luks-disk-invalid", NONE);
1771
    DO_TEST_PARSE_ERROR("luks-disks-source-both", QEMU_CAPS_OBJECT_SECRET);
1772

1773 1774 1775 1776 1777 1778 1779 1780
    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);
1781
    DO_TEST("cputune-numatune",
1782
            QEMU_CAPS_KVM,
1783
            QEMU_CAPS_OBJECT_IOTHREAD,
1784 1785
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1786 1787 1788
    DO_TEST("vcpu-placement-static",
            QEMU_CAPS_KVM,
            QEMU_CAPS_OBJECT_IOTHREAD);
1789

1790
    DO_TEST("numatune-memory", NONE);
1791
    DO_TEST_PARSE_ERROR("numatune-memory-invalid-nodeset", NONE);
A
Andrea Bolognani 已提交
1792 1793 1794
    DO_TEST("numatune-memnode",
            QEMU_CAPS_NUMA,
            QEMU_CAPS_OBJECT_MEMORY_RAM);
1795 1796
    DO_TEST_FAILURE("numatune-memnode", NONE);

A
Andrea Bolognani 已提交
1797 1798 1799
    DO_TEST("numatune-memnode-no-memory",
            QEMU_CAPS_NUMA,
            QEMU_CAPS_OBJECT_MEMORY_RAM);
1800 1801
    DO_TEST_FAILURE("numatune-memnode-no-memory", NONE);

1802 1803
    DO_TEST("numatune-distances", QEMU_CAPS_NUMA, QEMU_CAPS_NUMA_DIST);

1804
    DO_TEST("numatune-auto-nodeset-invalid", NONE);
1805 1806
    DO_TEST("numatune-auto-prefer", QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1807 1808
    DO_TEST_FAILURE("numatune-static-nodeset-exceed-hostnode",
                    QEMU_CAPS_OBJECT_MEMORY_RAM);
1809 1810
    DO_TEST_PARSE_ERROR("numatune-memnode-nocpu", NONE);
    DO_TEST_PARSE_ERROR("numatune-memnodes-problematic", NONE);
1811 1812
    DO_TEST("numad", NONE);
    DO_TEST("numad-auto-vcpu-static-numatune", NONE);
1813
    DO_TEST_PARSE_ERROR("numad-auto-vcpu-static-numatune-no-nodeset", NONE);
1814 1815 1816
    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);
1817
    DO_TEST("blkdeviotune-max",
1818
            QEMU_CAPS_DRIVE_IOTUNE_MAX);
1819 1820 1821
    DO_TEST("blkdeviotune-group-num",
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_GROUP);
1822 1823 1824
    DO_TEST("blkdeviotune-max-length",
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_MAX_LENGTH);
1825

1826
    DO_TEST("multifunction-pci-device",
1827
            QEMU_CAPS_SCSI_LSI);
1828

1829
    DO_TEST("monitor-json", NONE);
1830

1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842
    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);
1843

1844
    DO_TEST("pseries-basic",
1845
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1846
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1847
    DO_TEST("pseries-vio",
1848
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1849
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1850
    DO_TEST("pseries-usb-default",
1851
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1852
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1853
            QEMU_CAPS_PIIX3_USB_UHCI,
1854
            QEMU_CAPS_PCI_OHCI);
1855
    DO_TEST("pseries-usb-multi",
1856
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1857
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1858
            QEMU_CAPS_PIIX3_USB_UHCI,
1859
            QEMU_CAPS_PCI_OHCI);
1860
    DO_TEST("pseries-vio-user-assigned",
1861
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1862 1863
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST_PARSE_ERROR("pseries-vio-address-clash", NONE);
1864 1865 1866
    DO_TEST("pseries-nvram",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_DEVICE_NVRAM);
1867
    DO_TEST("pseries-usb-kbd", QEMU_CAPS_PCI_OHCI,
1868
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1869
            QEMU_CAPS_DEVICE_USB_KBD,
1870
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1871
    DO_TEST("pseries-cpu-exact",
1872
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1873 1874
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST_PARSE_ERROR("pseries-no-parallel", NONE);
1875 1876

    qemuTestSetHostArch(driver.caps, VIR_ARCH_PPC64);
A
Andrea Bolognani 已提交
1877
    DO_TEST("pseries-cpu-compat", QEMU_CAPS_KVM,
1878
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1879
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1880 1881 1882
    DO_TEST("pseries-machine-max-cpu-compat",
            QEMU_CAPS_KVM,
            QEMU_CAPS_MACHINE_PSERIES_MAX_CPU_COMPAT,
1883
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
A
Andrea Bolognani 已提交
1884
    DO_TEST("pseries-cpu-le", QEMU_CAPS_KVM,
1885
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1886
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1887 1888 1889
    DO_TEST_FAILURE("pseries-cpu-compat-power9",
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
                    QEMU_CAPS_KVM);
1890 1891 1892

    qemuTestSetHostCPU(driver.caps, cpuPower9);
    DO_TEST("pseries-cpu-compat-power9",
1893
            QEMU_CAPS_KVM,
1894
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1895
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1896 1897
    qemuTestSetHostCPU(driver.caps, NULL);

1898 1899
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);

1900
    DO_TEST("pseries-panic-missing",
1901
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1902
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1903
    DO_TEST("pseries-panic-no-address",
1904
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1905
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1906
    DO_TEST_FAILURE("pseries-panic-address",
1907
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
1908 1909 1910 1911 1912

    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);
1913 1914 1915 1916 1917 1918
    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);
1919 1920 1921
    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);
1922

1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944
    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);

1945
    DO_TEST("pseries-features",
1946
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1947
            QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE,
1948
            QEMU_CAPS_MACHINE_PSERIES_CAP_HTM,
1949
            QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV,
1950
            QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);
1951
    DO_TEST_FAILURE("pseries-features",
1952
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
A
Andrea Bolognani 已提交
1953
    DO_TEST_PARSE_ERROR("pseries-features-invalid-machine", NONE);
1954

1955
    DO_TEST("pseries-serial-native",
1956
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1957 1958
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial+console-native",
1959
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1960 1961
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial-compat",
1962
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1963
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1964
    DO_TEST("pseries-serial-pci",
1965
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1966 1967
            QEMU_CAPS_DEVICE_PCI_SERIAL);
    DO_TEST("pseries-serial-usb",
1968
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1969 1970
            QEMU_CAPS_DEVICE_QEMU_XHCI,
            QEMU_CAPS_DEVICE_USB_SERIAL);
1971
    DO_TEST("pseries-console-native",
1972
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1973 1974
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-console-virtio",
1975
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
1976
    DO_TEST_PARSE_ERROR("pseries-serial-invalid-machine", NONE);
1977
    DO_TEST_PARSE_ERROR("pseries-spaprvio-invalid", "ppc64");
1978

1979
    DO_TEST("mach-virt-serial-native",
1980
            QEMU_CAPS_DEVICE_PL011);
1981
    DO_TEST("mach-virt-serial+console-native",
1982
            QEMU_CAPS_DEVICE_PL011);
1983
    DO_TEST("mach-virt-serial-compat",
1984
            QEMU_CAPS_DEVICE_PL011);
1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996
    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",
1997
            QEMU_CAPS_DEVICE_PL011);
1998 1999
    DO_TEST("mach-virt-console-virtio",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
2000 2001
    DO_TEST_PARSE_ERROR("mach-virt-serial-invalid-machine", NONE);

2002 2003
    DO_TEST("disk-ide-split", NONE);
    DO_TEST("disk-ide-wwn", QEMU_CAPS_IDE_DRIVE_WWN);
2004

2005
    DO_TEST("disk-geometry", NONE);
2006
    DO_TEST("disk-blockio", QEMU_CAPS_BLOCKIO);
2007

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

2077 2078
    DO_TEST("virtio-rng-default",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2079
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2080 2081
    DO_TEST("virtio-rng-random",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2082
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2083 2084
    DO_TEST("virtio-rng-egd",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2085
            QEMU_CAPS_OBJECT_RNG_EGD);
J
Ján Tomko 已提交
2086 2087
    DO_TEST_CAPS_VER("virtio-rng-egd-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("virtio-rng-egd-unix");
2088 2089 2090 2091
    DO_TEST("virtio-rng-multiple",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2092
    DO_TEST_PARSE_ERROR("virtio-rng-egd-crash",
2093 2094
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD);
2095
    DO_TEST("virtio-rng-ccw",
2096
            QEMU_CAPS_CCW,
2097 2098
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2099
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2100

2101
    DO_TEST("s390-allow-bogus-usb-none",
2102 2103 2104
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2105
    DO_TEST("s390-allow-bogus-usb-controller",
2106 2107 2108
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2109

2110
    DO_TEST("s390-panic-no-address",
2111
            QEMU_CAPS_CCW,
2112
            QEMU_CAPS_VIRTIO_S390);
2113
    DO_TEST_FAILURE("s390-panic-address",
2114
            QEMU_CAPS_CCW,
2115
            QEMU_CAPS_VIRTIO_S390);
2116
    DO_TEST("s390-panic-missing",
2117
            QEMU_CAPS_CCW,
2118
            QEMU_CAPS_VIRTIO_S390);
2119
    DO_TEST_PARSE_ERROR("s390-no-parallel",
2120
            QEMU_CAPS_CCW,
2121
            QEMU_CAPS_VIRTIO_S390);
2122
    DO_TEST("s390-serial",
2123
            QEMU_CAPS_CCW,
2124 2125 2126
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
    DO_TEST("s390-serial-2",
2127
            QEMU_CAPS_CCW,
2128 2129 2130 2131
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE,
            QEMU_CAPS_DEVICE_SCLPLMCONSOLE);
    DO_TEST("s390-serial-console",
2132
            QEMU_CAPS_CCW,
2133 2134
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
2135

2136
    DO_TEST("ppc-dtb",
J
Ján Tomko 已提交
2137
            QEMU_CAPS_KVM);
2138 2139
    DO_TEST("ppce500-serial",
            QEMU_CAPS_KVM);
O
Olivia Yin 已提交
2140

2141
    DO_TEST("tpm-passthrough",
2142
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
2143 2144
    DO_TEST("tpm-passthrough-crb",
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_CRB);
2145
    DO_TEST_PARSE_ERROR("tpm-no-backend-invalid",
2146
                        QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
2147
    DO_TEST_CAPS_LATEST("tpm-emulator");
2148
    DO_TEST_CAPS_LATEST("tpm-emulator-tpm2");
2149
    DO_TEST_CAPS_LATEST("tpm-emulator-tpm2-enc");
2150

2151 2152 2153 2154
    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);
2155

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

    /* Test automatic and manual setting of pcie-root-port attributes */
2358 2359
    DO_TEST("pcie-root-port",
            QEMU_CAPS_DEVICE_IOH3420,
2360
            QEMU_CAPS_ICH9_AHCI,
2361
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2362
            QEMU_CAPS_DEVICE_QXL);
2363 2364 2365 2366 2367 2368

    /* 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,
2369
            QEMU_CAPS_DEVICE_IOH3420);
2370
    DO_TEST("pcie-root-port-model-ioh3420",
2371
            QEMU_CAPS_DEVICE_IOH3420);
2372

2373 2374 2375 2376 2377 2378 2379
    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,
2380
            QEMU_CAPS_ICH9_USB_EHCI1,
2381
            QEMU_CAPS_NEC_USB_XHCI);
2382 2383 2384 2385 2386 2387 2388
    /* 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);
2389

2390
    DO_TEST_PARSE_ERROR("q35-wrong-root",
2391
            QEMU_CAPS_DEVICE_IOH3420,
2392
            QEMU_CAPS_ICH9_AHCI,
2393
            QEMU_CAPS_ICH9_USB_EHCI1,
2394
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2395
            QEMU_CAPS_DEVICE_QXL);
2396
    DO_TEST_PARSE_ERROR("440fx-wrong-root", NONE);
2397
    DO_TEST_PARSE_ERROR("440fx-ide-address-conflict", NONE);
2398

2399
    DO_TEST_PARSE_ERROR("pcie-root-port-too-many",
2400
            QEMU_CAPS_DEVICE_IOH3420,
2401
            QEMU_CAPS_ICH9_AHCI,
2402
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2403
            QEMU_CAPS_DEVICE_QXL);
2404

2405 2406 2407
    DO_TEST("pcie-switch-upstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
2408
            QEMU_CAPS_ICH9_AHCI,
2409
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2410
            QEMU_CAPS_DEVICE_QXL);
2411 2412 2413 2414
    DO_TEST("pcie-switch-downstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
2415
            QEMU_CAPS_ICH9_AHCI,
2416
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2417
            QEMU_CAPS_DEVICE_QXL);
2418

2419 2420 2421 2422 2423 2424
    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);
2425 2426
    DO_TEST_PARSE_ERROR("pci-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_PXB);
2427

2428 2429 2430 2431 2432 2433 2434 2435 2436 2437
    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);
2438 2439 2440
    DO_TEST_PARSE_ERROR("pcie-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_IOH3420,
                        QEMU_CAPS_DEVICE_PXB_PCIE);
2441

2442
    DO_TEST("hostdev-scsi-lsi",
2443 2444
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2445
    DO_TEST("hostdev-scsi-virtio-scsi",
2446 2447
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2448
    DO_TEST("hostdev-scsi-readonly",
2449 2450
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2451
    DO_TEST("hostdev-scsi-virtio-scsi",
2452 2453
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2454
    DO_TEST("hostdev-scsi-lsi-iscsi",
2455 2456
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2457
    DO_TEST("hostdev-scsi-lsi-iscsi-auth",
2458 2459
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2460
    DO_TEST("hostdev-scsi-virtio-iscsi",
2461 2462
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2463
    DO_TEST("hostdev-scsi-virtio-iscsi-auth",
2464 2465
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2466
    DO_TEST("disk-hostdev-scsi-virtio-iscsi-auth-AES",
2467 2468 2469
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_OBJECT_SECRET,
2470
            QEMU_CAPS_ISCSI_PASSWORD_SECRET);
2471 2472
    DO_TEST("hostdev-scsi-vhost-scsi-ccw",
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_VHOST_SCSI,
2473
            QEMU_CAPS_CCW);
2474
    DO_TEST("hostdev-scsi-vhost-scsi-pci",
2475 2476
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VHOST_SCSI);
2477
    DO_TEST_CAPS_LATEST_PARSE_ERROR("hostdev-scsi-vhost-scsi-pci-boot-fail");
2478 2479 2480 2481 2482
    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);
2483

2484 2485
    DO_TEST_CAPS_VER("mlock-on", "3.0.0");
    DO_TEST_CAPS_VER("mlock-off", "3.0.0");
2486 2487
    DO_TEST_CAPS_LATEST("mlock-on");
    DO_TEST_CAPS_LATEST("mlock-off");
2488

2489 2490 2491 2492
    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);
2493

2494
    DO_TEST("hotplug-base",
2495
            QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_SCSI);
2496

2497 2498
    DO_TEST("pcihole64", QEMU_CAPS_I440FX_PCI_HOLE64_SIZE);
    DO_TEST_FAILURE("pcihole64-none", NONE);
2499
    DO_TEST("pcihole64-q35",
2500
            QEMU_CAPS_DEVICE_IOH3420,
2501
            QEMU_CAPS_ICH9_AHCI,
2502
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2503
            QEMU_CAPS_DEVICE_QXL,
2504 2505
            QEMU_CAPS_Q35_PCI_HOLE64_SIZE);

J
Ján Tomko 已提交
2506 2507
    DO_TEST("arm-vexpressa9-nodevs", NONE);
    DO_TEST("arm-vexpressa9-basic", NONE);
2508
    DO_TEST("arm-vexpressa9-virtio",
2509
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2510
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2511
    DO_TEST("arm-virt-virtio",
2512
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2513
            QEMU_CAPS_DEVICE_PL011,
2514
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2515

2516
    DO_TEST("aarch64-virt-virtio",
2517
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2518
            QEMU_CAPS_DEVICE_PL011,
2519
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2520 2521 2522 2523 2524 2525

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

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

2673
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);
2674

2675
    DO_TEST("kvm-pit-delay", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2676
    DO_TEST("kvm-pit-discard", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2677

2678 2679 2680 2681
    DO_TEST("panic",
            QEMU_CAPS_DEVICE_PANIC);
    DO_TEST("panic-double",
            QEMU_CAPS_DEVICE_PANIC);
H
Hu Tao 已提交
2682

2683 2684
    DO_TEST("panic-no-address",
            QEMU_CAPS_DEVICE_PANIC);
2685

2686 2687
    DO_TEST("fips-enabled", QEMU_CAPS_ENABLE_FIPS);

J
Ján Tomko 已提交
2688
    DO_TEST("shmem", QEMU_CAPS_DEVICE_IVSHMEM);
2689 2690 2691
    DO_TEST("shmem-plain-doorbell", QEMU_CAPS_DEVICE_IVSHMEM,
            QEMU_CAPS_DEVICE_IVSHMEM_PLAIN,
            QEMU_CAPS_DEVICE_IVSHMEM_DOORBELL);
2692
    DO_TEST_FAILURE("shmem", NONE);
J
Ján Tomko 已提交
2693
    DO_TEST_FAILURE("shmem-invalid-size",
2694
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2695
    DO_TEST_FAILURE("shmem-invalid-address",
2696
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2697
    DO_TEST_FAILURE("shmem-small-size",
2698
                    QEMU_CAPS_DEVICE_IVSHMEM);
2699
    DO_TEST_PARSE_ERROR("shmem-msi-only", NONE);
A
Andrea Bolognani 已提交
2700
    DO_TEST("cpu-host-passthrough-features", QEMU_CAPS_KVM);
2701

2702
    DO_TEST_FAILURE("memory-align-fail", NONE);
2703
    DO_TEST_FAILURE("memory-hotplug-nonuma", QEMU_CAPS_DEVICE_PC_DIMM);
M
Michal Privoznik 已提交
2704
    DO_TEST("memory-hotplug", NONE);
2705
    DO_TEST("memory-hotplug", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA);
2706
    DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2707
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2708
    DO_TEST("memory-hotplug-dimm-addr", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2709
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2710
    DO_TEST("memory-hotplug-ppc64-nonuma", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2711
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2712
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2713 2714 2715
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm");
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-access");
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-label");
2716
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-align");
2717
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-pmem");
2718
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-readonly");
2719

2720
    DO_TEST("machine-aeskeywrap-on-caps",
2721
            QEMU_CAPS_AES_KEY_WRAP,
2722
            QEMU_CAPS_DEA_KEY_WRAP,
2723
            QEMU_CAPS_VIRTIO_SCSI,
2724
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2725
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps",
2726
                    QEMU_CAPS_VIRTIO_SCSI,
2727
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2728 2729 2730
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps", NONE);

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

    DO_TEST("machine-aeskeywrap-off-caps",
2740
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2741
            QEMU_CAPS_VIRTIO_SCSI,
2742
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2743
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps",
2744
                    QEMU_CAPS_VIRTIO_SCSI,
2745
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2746 2747 2748
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", NONE);

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

    DO_TEST("machine-deakeywrap-on-caps",
2758
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2759
            QEMU_CAPS_VIRTIO_SCSI,
2760
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2761
    DO_TEST_FAILURE("machine-deakeywrap-on-caps",
2762
                    QEMU_CAPS_VIRTIO_SCSI,
2763
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2764 2765 2766
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", NONE);

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

    DO_TEST("machine-deakeywrap-off-caps",
2776
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2777
            QEMU_CAPS_VIRTIO_SCSI,
2778
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2779
    DO_TEST_FAILURE("machine-deakeywrap-off-caps",
2780
                    QEMU_CAPS_VIRTIO_SCSI,
2781
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2782 2783 2784
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", NONE);

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

    DO_TEST("machine-keywrap-none-caps",
2794
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2795
            QEMU_CAPS_VIRTIO_SCSI,
2796
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2797
    DO_TEST("machine-keywrap-none",
2798
            QEMU_CAPS_VIRTIO_SCSI,
2799
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2800

2801
    DO_TEST("machine-loadparm-s390",
2802
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390,
2803
            QEMU_CAPS_LOADPARM);
2804
    DO_TEST("machine-loadparm-net-s390",
2805
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390,
2806
            QEMU_CAPS_LOADPARM);
2807
    DO_TEST("machine-loadparm-multiple-disks-nets-s390",
2808
            QEMU_CAPS_CCW,
2809
            QEMU_CAPS_VIRTIO_S390,
2810 2811
            QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-char-invalid",
2812
                        QEMU_CAPS_CCW,
2813
                        QEMU_CAPS_VIRTIO_S390,
2814 2815
                        QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-len-invalid",
2816
                        QEMU_CAPS_CCW,
2817
                        QEMU_CAPS_VIRTIO_S390,
2818 2819
                        QEMU_CAPS_LOADPARM);

J
Jiri Denemark 已提交
2820 2821 2822 2823 2824 2825 2826
    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);

2827
    DO_TEST("virtio-input", QEMU_CAPS_VIRTIO_KEYBOARD,
2828
            QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET);
2829
    DO_TEST("virtio-input-passthrough", QEMU_CAPS_VIRTIO_INPUT_HOST);
2830

2831
    DO_TEST("ppc64-usb-controller",
2832
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2833
            QEMU_CAPS_PCI_OHCI);
2834
    DO_TEST("ppc64-usb-controller-legacy",
2835
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2836
            QEMU_CAPS_PIIX3_USB_UHCI);
2837
    DO_TEST_FULL("ppc64-usb-controller-qemu-xhci",
2838
                 ARG_PARSEFLAGS, VIR_DOMAIN_DEF_PARSE_ABI_UPDATE,
2839
                 ARG_QEMU_CAPS,
2840
                 QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2841 2842 2843 2844 2845 2846 2847
                 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);
2848

2849 2850 2851 2852
    DO_TEST("aarch64-usb-controller-nec-xhci",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_NEC_USB_XHCI);

2853 2854 2855
    /* 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 */
2856 2857 2858 2859
    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);
2860

2861 2862 2863
    DO_TEST("name-escape",
            QEMU_CAPS_NAME_DEBUG_THREADS,
            QEMU_CAPS_OBJECT_SECRET,
2864 2865
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_GROUP,
2866 2867 2868 2869
            QEMU_CAPS_VNC,
            QEMU_CAPS_NAME_GUEST,
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_SPICE,
2870
            QEMU_CAPS_SPICE_UNIX,
2871 2872 2873 2874 2875
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_SPICE_GL,
            QEMU_CAPS_SPICE_RENDERNODE,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2876
            QEMU_CAPS_DEVICE_ISA_SERIAL,
2877
            QEMU_CAPS_CHARDEV_FILE_APPEND,
2878
            QEMU_CAPS_CCID_EMULATED,
2879
            QEMU_CAPS_VIRTIO_SCSI);
M
Marc-André Lureau 已提交
2880 2881
    DO_TEST("debug-threads", QEMU_CAPS_NAME_DEBUG_THREADS);

2882
    DO_TEST("master-key", QEMU_CAPS_OBJECT_SECRET);
2883
    DO_TEST("usb-long-port-path",
J
Ján Tomko 已提交
2884
            QEMU_CAPS_USB_HUB);
2885
    DO_TEST_PARSE_ERROR("usb-too-long-port-path-invalid",
2886
                        QEMU_CAPS_USB_HUB);
2887

2888
    DO_TEST("acpi-table", NONE);
2889 2890 2891 2892 2893 2894

    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");
2895
    DO_TEST_CAPS_LATEST_PARSE_ERROR("intel-iommu-wrong-machine");
2896
    DO_TEST_CAPS_ARCH_LATEST("iommu-smmuv3", "aarch64");
2897

2898
    DO_TEST("cpu-hotplug-startup", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);
2899 2900 2901
    DO_TEST_PARSE_ERROR("cpu-hotplug-granularity",
                        QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);

2902 2903 2904
    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,
2905
            QEMU_CAPS_DEVICE_VHOST_USER_GPU,
2906 2907
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
2908 2909 2910
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_PCI_IOMMU_PLATFORM,
            QEMU_CAPS_VIRTIO_PCI_ATS);
2911

J
Ján Tomko 已提交
2912
    DO_TEST("fd-memory-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
2913
            QEMU_CAPS_KVM);
J
Ján Tomko 已提交
2914
    DO_TEST("fd-memory-numa-topology2", QEMU_CAPS_OBJECT_MEMORY_FILE,
2915
            QEMU_CAPS_KVM);
J
Ján Tomko 已提交
2916
    DO_TEST("fd-memory-numa-topology3", QEMU_CAPS_OBJECT_MEMORY_FILE,
2917 2918
            QEMU_CAPS_KVM);

J
Ján Tomko 已提交
2919
    DO_TEST("fd-memory-no-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
2920 2921
            QEMU_CAPS_KVM);

M
Marc-André Lureau 已提交
2922
    DO_TEST_CAPS_LATEST("memfd-memory-numa");
2923
    DO_TEST_CAPS_LATEST("memfd-memory-default-hugepage");
M
Marc-André Lureau 已提交
2924

2925 2926 2927 2928 2929 2930 2931 2932
    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);

2933 2934 2935 2936 2937 2938 2939 2940 2941
    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 已提交
2942
    DO_TEST("vmcoreinfo", QEMU_CAPS_DEVICE_VMCOREINFO);
2943

2944 2945 2946
    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,
2947
            QEMU_CAPS_DEVICE_ISA_SERIAL,
2948
            QEMU_CAPS_HDA_DUPLEX,
2949 2950
            QEMU_CAPS_CCID_EMULATED,
            QEMU_CAPS_QCOW2_LUKS, QEMU_CAPS_OBJECT_SECRET);
2951
    DO_TEST("user-aliases2", QEMU_CAPS_DEVICE_IOH3420, QEMU_CAPS_ICH9_AHCI);
2952 2953
    DO_TEST("user-aliases-usb", QEMU_CAPS_KVM,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4,
2954
            QEMU_CAPS_ICH9_USB_EHCI1);
2955

2956
    DO_TEST_CAPS_VER("disk-virtio-scsi-reservations", "2.12.0");
2957
    DO_TEST_CAPS_LATEST("disk-virtio-scsi-reservations");
2958

2959
    DO_TEST_CAPS_LATEST("tseg-explicit-size");
2960 2961 2962
    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");
2963

2964
    DO_TEST("video-virtio-gpu-ccw", QEMU_CAPS_CCW,
2965 2966 2967 2968 2969 2970
            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);

2971
    DO_TEST("input-virtio-ccw", QEMU_CAPS_CCW,
2972 2973 2974 2975 2976 2977 2978
            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);

2979 2980
    DO_TEST_CAPS_LATEST("vhost-vsock");
    DO_TEST_CAPS_LATEST("vhost-vsock-auto");
2981 2982
    DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw", "s390x");
    DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw-auto", "s390x");
2983

2984
    DO_TEST_CAPS_VER("launch-security-sev", "2.12.0");
2985

L
Lubomir Rintel 已提交
2986 2987
    DO_TEST("riscv64-virt",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
2988 2989
    DO_TEST("riscv64-virt-pci",
            QEMU_CAPS_OBJECT_GPEX);
L
Lubomir Rintel 已提交
2990

2991 2992 2993 2994 2995
    /* 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");
2996
    DO_TEST_CAPS_LATEST_PARSE_ERROR("virtio-transitional-not-supported");
2997

2998 2999 3000 3001 3002 3003 3004 3005
    /* 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");

3006 3007 3008
    /* 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");
3009
    DO_TEST_CAPS_ARCH_LATEST("riscv64-virt-graphics", "riscv64");
3010
    DO_TEST_CAPS_ARCH_LATEST("s390x-ccw-graphics", "s390x");
3011 3012 3013
    DO_TEST_CAPS_ARCH_LATEST("x86_64-pc-graphics", "x86_64");
    DO_TEST_CAPS_ARCH_LATEST("x86_64-q35-graphics", "x86_64");

3014 3015 3016 3017 3018
    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");

A
Andrea Bolognani 已提交
3019 3020 3021
    if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL)
        virFileDeleteTree(fakerootdir);

3022
    VIR_FREE(driver.config->nbdTLSx509certdir);
3023
    qemuTestDriverFree(&driver);
A
Andrea Bolognani 已提交
3024
    VIR_FREE(fakerootdir);
3025
    virHashFree(capslatest);
3026
    virFileWrapperClearPrefixes();
3027

3028
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
3029 3030
}

3031
VIR_TEST_MAIN_PRELOAD(mymain,
3032 3033 3034 3035
                      VIR_TEST_MOCK("qemuxml2argv"),
                      VIR_TEST_MOCK("virrandom"),
                      VIR_TEST_MOCK("qemucpu"),
                      VIR_TEST_MOCK("virpci"))
3036

3037 3038
#else

3039 3040 3041 3042
int main(void)
{
    return EXIT_AM_SKIP;
}
3043 3044

#endif /* WITH_QEMU */