qemuxml2argvtest.c 116.7 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
static unsigned char *
J
Ján Tomko 已提交
40
fakeSecretGetValue(virSecretPtr obj G_GNUC_UNUSED,
41
                   size_t *value_size,
J
Ján Tomko 已提交
42 43
                   unsigned int fakeflags G_GNUC_UNUSED,
                   unsigned int internalFlags G_GNUC_UNUSED)
44
{
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
    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,
J
Ján Tomko 已提交
202
                          unsigned int flags_unused G_GNUC_UNUSED)
203 204 205 206 207 208 209 210 211 212 213 214 215 216 217
{
    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

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

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


static int
J
Ján Tomko 已提交
281
fakeNWFilterBindingDelete(virNWFilterBindingPtr binding G_GNUC_UNUSED)
282 283 284 285 286 287 288 289 290 291
{
    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
                                         G_N_ELEMENTS(x86Models),
320
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
321
            virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU, x86Models,
322
                                         G_N_ELEMENTS(x86Models),
323
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
324 325
            return -1;

326 327 328
        if (!skipLegacy) {
            if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM,
                                             x86LegacyModels,
329
                                             G_N_ELEMENTS(x86LegacyModels),
330
                                             VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
331 332
                virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU,
                                             x86LegacyModels,
333
                                             G_N_ELEMENTS(x86LegacyModels),
334
                                             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
                                         G_N_ELEMENTS(armModels),
340
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
341
            virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU, armModels,
342
                                         G_N_ELEMENTS(armModels),
343
                                         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
                                         G_N_ELEMENTS(ppc64Models),
348
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
349
            virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU, ppc64Models,
350
                                         G_N_ELEMENTS(ppc64Models),
351
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
352
            return -1;
353 354
    } else if (ARCH_IS_S390(arch)) {
        if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM, s390xModels,
355
                                         G_N_ELEMENTS(s390xModels),
356 357
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
            return -1;
358
    }
359 360 361 362 363

    return 0;
}


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

371 372 373
    if (!caps)
        goto cleanup;

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

376 377
    virQEMUCapsInitQMPBasicArch(info->qemuCaps);

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

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

387 388 389 390 391 392 393
    ret = 0;

 cleanup:
    return ret;
}


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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

505 506 507 508 509 510 511 512 513 514 515
    if (vm->def->vsock) {
        virDomainVsockDefPtr vsock = vm->def->vsock;
        qemuDomainVsockPrivatePtr vsockPriv =
            (qemuDomainVsockPrivatePtr)vsock->privateData;

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

        vsockPriv->vhostfd = 6789;
    }

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

531 532 533 534 535 536 537 538 539 540
    for (i = 0; i < vm->def->nvideos; i++) {
        virDomainVideoDefPtr video = vm->def->videos[i];

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

            vpriv->vhost_user_fd = 1729;
        }
    }

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

            if (net->type == VIR_DOMAIN_NET_TYPE_USER &&
546
                virQEMUCapsGet(info->qemuCaps, QEMU_CAPS_DBUS_VMSTATE)) {
547 548 549 550 551 552 553
                qemuSlirpPtr slirp = qemuSlirpNew();
                slirp->fd[0] = 42;
                QEMU_DOMAIN_NETWORK_PRIVATE(net)->slirp = slirp;
            }
        }
    }

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

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

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

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

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

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

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

    return 0;
}

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

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

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

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

    setenv("LIBVIRT_FAKE_ROOT_DIR", fakerootdir, 1);

635 636 637 638 639 640 641 642 643 644
    /* Set the timezone because we are mocking the time() function.
     * If we don't do that, then localtime() may return unpredictable
     * results. In order to detect things that just work by a blind
     * chance, we need to set an virtual timezone that no libvirt
     * developer resides in. */
    if (setenv("TZ", "VIR00:30", 1) < 0) {
        perror("setenv");
        return EXIT_FAILURE;
    }

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

    driver.privileged = true;
649

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

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

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

693 694 695 696 697 698 699
    virFileWrapperAddPrefix(SYSCONFDIR "/qemu/firmware",
                            abs_srcdir "/qemufirmwaredata/etc/qemu/firmware");
    virFileWrapperAddPrefix(PREFIX "/share/qemu/firmware",
                            abs_srcdir "/qemufirmwaredata/usr/share/qemu/firmware");
    virFileWrapperAddPrefix("/home/user/.config/qemu/firmware",
                            abs_srcdir "/qemufirmwaredata/home/user/.config/qemu/firmware");

700 701 702 703 704 705 706 707 708 709
    virFileWrapperAddPrefix(SYSCONFDIR "/qemu/vhost-user",
                            abs_srcdir "/qemuvhostuserdata/etc/qemu/vhost-user");
    virFileWrapperAddPrefix(PREFIX "/share/qemu/vhost-user",
                            abs_srcdir "/qemuvhostuserdata/usr/share/qemu/vhost-user");
    virFileWrapperAddPrefix("/home/user/.config/qemu/vhost-user",
                            abs_srcdir "/qemuvhostuserdata/home/user/.config/qemu/vhost-user");

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

710 711 712 713 714 715 716 717 718 719 720 721 722 723
/**
 * The following set of macros allows testing of XML -> argv conversion with a
 * real set of capabilities gathered from a real qemu copy. It is desired to use
 * these for positive test cases as it provides combinations of flags which
 * can be met in real life.
 *
 * The capabilities are taken from the real capabilities stored in
 * tests/qemucapabilitiesdata.
 *
 * It is suggested to use the DO_TEST_CAPS_LATEST macro which always takes the
 * most recent capability set. In cases when the new code would change behaviour
 * the test cases should be forked using DO_TEST_CAPS_VER with the appropriate
 * version.
 */
724
# define DO_TEST_INTERNAL(_name, _suffix, ...) \
725
    do { \
726
        static struct testQemuInfo info = { \
727
            .name = _name, \
728
        }; \
729 730
        if (testQemuInfoSetArgs(&info, capslatest, \
                                __VA_ARGS__, ARG_END) < 0) \
731
            return EXIT_FAILURE; \
732 733 734 735
        if (testInfoSetPaths(&info, _suffix) < 0) { \
            VIR_TEST_DEBUG("Failed to generate paths for '%s'", _name); \
            return EXIT_FAILURE; \
        } \
736
        if (virTestRun("QEMU XML-2-ARGV " _name _suffix, \
737 738
                       testCompareXMLToArgv, &info) < 0) \
            ret = -1; \
739
        testQemuInfoClear(&info); \
740 741
    } while (0)

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

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

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

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

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

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

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

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

770 771 772 773 774 775 776 777 778 779 780 781
# define DO_TEST_CAPS_ARCH_VER_FAILURE(name, arch, ver) \
    DO_TEST_CAPS_ARCH_VER_FULL(name, arch, ver, \
                               ARG_FLAGS, FLAG_EXPECT_FAILURE)

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

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

# define DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR(name, arch) \
    DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, \
782
                                  ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR)
783

784 785 786 787 788 789 790 791 792 793
# define DO_TEST_CAPS_ARCH_VER_PARSE_ERROR(name, arch, ver) \
    DO_TEST_CAPS_ARCH_VER_FULL(name, arch, ver, \
                               ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR)

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

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

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

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

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

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

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

820
# define NONE QEMU_CAPS_LAST
821

822 823 824
    /* Unset or set all envvars here that are copied in qemudBuildCommandLine
     * using ADD_ENV_COPY, otherwise these tests may fail due to unexpected
     * values for these envvars */
825 826 827 828 829 830 831
    setenv("PATH", "/bin", 1);
    setenv("USER", "test", 1);
    setenv("LOGNAME", "test", 1);
    setenv("HOME", "/home/test", 1);
    unsetenv("TMPDIR");
    unsetenv("LD_PRELOAD");
    unsetenv("LD_LIBRARY_PATH");
832 833
    unsetenv("QEMU_AUDIO_DRV");
    unsetenv("SDL_AUDIODRIVER");
834

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

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

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

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

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

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

908
    DO_TEST("clock-utc", NONE);
909
    DO_TEST("clock-localtime", NONE);
J
Ján Tomko 已提交
910 911 912 913
    DO_TEST("clock-localtime-basis-localtime", NONE);
    DO_TEST("clock-variable", NONE);
    DO_TEST("clock-france", NONE);
    DO_TEST("clock-hpet-off", NONE);
J
Ján Tomko 已提交
914
    DO_TEST("clock-catchup", QEMU_CAPS_KVM_PIT_TICK_POLICY);
915 916
    DO_TEST("cpu-kvmclock", NONE);
    DO_TEST("cpu-host-kvmclock", NONE);
917
    DO_TEST("kvmclock", QEMU_CAPS_KVM);
918
    DO_TEST("clock-timer-hyperv-rtc", QEMU_CAPS_KVM);
919

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

947 948 949 950 951 952
    DO_TEST_CAPS_VER("hyperv", "4.0.0");
    DO_TEST_CAPS_LATEST("hyperv");
    DO_TEST_CAPS_VER("hyperv-off", "4.0.0");
    DO_TEST_CAPS_LATEST("hyperv-off");
    DO_TEST_CAPS_VER("hyperv-panic", "4.0.0");
    DO_TEST_CAPS_LATEST("hyperv-panic");
953
    DO_TEST_CAPS_LATEST("hyperv-stimer-direct");
954

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

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

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

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

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

1216 1217
    driver.config->vncSASL = 1;
    VIR_FREE(driver.config->vncSASLdir);
1218
    ignore_value(VIR_STRDUP(driver.config->vncSASLdir, "/root/.sasl2"));
1219
    DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1220 1221
    driver.config->vncTLS = 1;
    driver.config->vncTLSx509verify = 1;
1222
    DO_TEST("graphics-vnc-tls", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1223 1224
    DO_TEST_CAPS_VER("graphics-vnc-tls", "2.4.0");
    DO_TEST_CAPS_LATEST("graphics-vnc-tls");
1225 1226 1227 1228 1229
    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);
1230
    driver.config->vncSASL = driver.config->vncTLSx509verify = driver.config->vncTLS = 0;
1231 1232
    VIR_FREE(driver.config->vncSASLdir);
    VIR_FREE(driver.config->vncTLSx509certdir);
1233 1234 1235 1236
    DO_TEST("graphics-vnc-egl-headless",
            QEMU_CAPS_VNC,
            QEMU_CAPS_EGL_HEADLESS,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1237

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1714
    DO_TEST("smp", NONE);
1715

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

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

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

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

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

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

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

A
Andrea Bolognani 已提交
1810 1811 1812
    DO_TEST("numatune-memnode-no-memory",
            QEMU_CAPS_NUMA,
            QEMU_CAPS_OBJECT_MEMORY_RAM);
1813 1814
    DO_TEST_FAILURE("numatune-memnode-no-memory", NONE);

1815 1816
    DO_TEST("numatune-distances", QEMU_CAPS_NUMA, QEMU_CAPS_NUMA_DIST);

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

1839
    DO_TEST("multifunction-pci-device",
1840
            QEMU_CAPS_SCSI_LSI);
1841

1842
    DO_TEST("monitor-json", NONE);
1843

1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855
    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);
1856

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

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

    qemuTestSetHostCPU(driver.caps, cpuPower9);
    DO_TEST("pseries-cpu-compat-power9",
1906
            QEMU_CAPS_KVM,
1907
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1908
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1909 1910
    qemuTestSetHostCPU(driver.caps, NULL);

1911 1912
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);

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

    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);
1926 1927 1928 1929 1930 1931
    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);
1932 1933 1934
    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);
1935

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

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

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

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

2016 2017
    DO_TEST("disk-ide-split", NONE);
    DO_TEST("disk-ide-wwn", QEMU_CAPS_IDE_DRIVE_WWN);
2018

2019
    DO_TEST("disk-geometry", NONE);
2020
    DO_TEST("disk-blockio", QEMU_CAPS_BLOCKIO);
2021

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

2096 2097
    DO_TEST("virtio-rng-default",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2098
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2099 2100
    DO_TEST("virtio-rng-random",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2101
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2102 2103
    DO_TEST("virtio-rng-egd",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2104
            QEMU_CAPS_OBJECT_RNG_EGD);
J
Ján Tomko 已提交
2105 2106
    DO_TEST_CAPS_VER("virtio-rng-egd-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("virtio-rng-egd-unix");
2107 2108 2109 2110
    DO_TEST("virtio-rng-multiple",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2111
    DO_TEST_PARSE_ERROR("virtio-rng-egd-crash",
2112 2113
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD);
2114
    DO_TEST("virtio-rng-ccw",
2115
            QEMU_CAPS_CCW,
2116 2117
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2118
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2119

2120
    DO_TEST("s390-allow-bogus-usb-none",
2121 2122 2123
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2124
    DO_TEST("s390-allow-bogus-usb-controller",
2125 2126 2127
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2128

2129
    DO_TEST("s390-panic-no-address",
2130
            QEMU_CAPS_CCW,
2131
            QEMU_CAPS_VIRTIO_S390);
2132
    DO_TEST_FAILURE("s390-panic-address",
2133
            QEMU_CAPS_CCW,
2134
            QEMU_CAPS_VIRTIO_S390);
2135
    DO_TEST("s390-panic-missing",
2136
            QEMU_CAPS_CCW,
2137
            QEMU_CAPS_VIRTIO_S390);
2138
    DO_TEST_PARSE_ERROR("s390-no-parallel",
2139
            QEMU_CAPS_CCW,
2140
            QEMU_CAPS_VIRTIO_S390);
2141
    DO_TEST("s390-serial",
2142
            QEMU_CAPS_CCW,
2143 2144 2145
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
    DO_TEST("s390-serial-2",
2146
            QEMU_CAPS_CCW,
2147 2148 2149 2150
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE,
            QEMU_CAPS_DEVICE_SCLPLMCONSOLE);
    DO_TEST("s390-serial-console",
2151
            QEMU_CAPS_CCW,
2152 2153
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
2154

2155
    DO_TEST("ppc-dtb",
J
Ján Tomko 已提交
2156
            QEMU_CAPS_KVM);
2157 2158
    DO_TEST("ppce500-serial",
            QEMU_CAPS_KVM);
O
Olivia Yin 已提交
2159

2160
    DO_TEST("tpm-passthrough",
2161
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
2162 2163
    DO_TEST("tpm-passthrough-crb",
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_CRB);
2164
    DO_TEST_PARSE_ERROR("tpm-no-backend-invalid",
2165
                        QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
2166
    DO_TEST_CAPS_LATEST("tpm-emulator");
2167
    DO_TEST_CAPS_LATEST("tpm-emulator-tpm2");
2168
    DO_TEST_CAPS_LATEST("tpm-emulator-tpm2-enc");
2169

2170 2171 2172 2173
    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);
2174

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

    /* Test automatic and manual setting of pcie-root-port attributes */
2377 2378
    DO_TEST("pcie-root-port",
            QEMU_CAPS_DEVICE_IOH3420,
2379
            QEMU_CAPS_ICH9_AHCI,
2380
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2381
            QEMU_CAPS_DEVICE_QXL);
2382 2383 2384 2385 2386 2387

    /* 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,
2388
            QEMU_CAPS_DEVICE_IOH3420);
2389
    DO_TEST("pcie-root-port-model-ioh3420",
2390
            QEMU_CAPS_DEVICE_IOH3420);
2391

2392 2393 2394 2395 2396 2397 2398
    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,
2399
            QEMU_CAPS_ICH9_USB_EHCI1,
2400
            QEMU_CAPS_NEC_USB_XHCI);
2401 2402 2403 2404 2405 2406 2407
    /* 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);
2408

2409
    DO_TEST_PARSE_ERROR("q35-wrong-root",
2410
            QEMU_CAPS_DEVICE_IOH3420,
2411
            QEMU_CAPS_ICH9_AHCI,
2412
            QEMU_CAPS_ICH9_USB_EHCI1,
2413
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2414
            QEMU_CAPS_DEVICE_QXL);
2415
    DO_TEST_PARSE_ERROR("440fx-wrong-root", NONE);
2416
    DO_TEST_PARSE_ERROR("440fx-ide-address-conflict", NONE);
2417

2418
    DO_TEST_PARSE_ERROR("pcie-root-port-too-many",
2419
            QEMU_CAPS_DEVICE_IOH3420,
2420
            QEMU_CAPS_ICH9_AHCI,
2421
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2422
            QEMU_CAPS_DEVICE_QXL);
2423

2424 2425 2426
    DO_TEST("pcie-switch-upstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
2427
            QEMU_CAPS_ICH9_AHCI,
2428
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2429
            QEMU_CAPS_DEVICE_QXL);
2430 2431 2432 2433
    DO_TEST("pcie-switch-downstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
2434
            QEMU_CAPS_ICH9_AHCI,
2435
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2436
            QEMU_CAPS_DEVICE_QXL);
2437

2438 2439 2440 2441 2442 2443
    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);
2444 2445
    DO_TEST_PARSE_ERROR("pci-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_PXB);
2446

2447 2448 2449 2450 2451 2452 2453 2454 2455 2456
    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);
2457 2458 2459
    DO_TEST_PARSE_ERROR("pcie-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_IOH3420,
                        QEMU_CAPS_DEVICE_PXB_PCIE);
2460

2461
    DO_TEST("hostdev-scsi-lsi",
2462 2463
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2464
    DO_TEST("hostdev-scsi-virtio-scsi",
2465 2466
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2467
    DO_TEST("hostdev-scsi-readonly",
2468 2469
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2470
    DO_TEST("hostdev-scsi-virtio-scsi",
2471 2472
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2473
    DO_TEST("hostdev-scsi-lsi-iscsi",
2474 2475
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2476
    DO_TEST("hostdev-scsi-lsi-iscsi-auth",
2477 2478
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2479
    DO_TEST("hostdev-scsi-virtio-iscsi",
2480 2481
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2482
    DO_TEST("hostdev-scsi-virtio-iscsi-auth",
2483 2484
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2485
    DO_TEST("disk-hostdev-scsi-virtio-iscsi-auth-AES",
2486 2487 2488
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_OBJECT_SECRET,
2489
            QEMU_CAPS_ISCSI_PASSWORD_SECRET);
2490 2491
    DO_TEST("hostdev-scsi-vhost-scsi-ccw",
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_VHOST_SCSI,
2492
            QEMU_CAPS_CCW);
2493
    DO_TEST("hostdev-scsi-vhost-scsi-pci",
2494 2495
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VHOST_SCSI);
2496
    DO_TEST_CAPS_LATEST_PARSE_ERROR("hostdev-scsi-vhost-scsi-pci-boot-fail");
2497 2498 2499 2500 2501
    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);
2502

2503 2504
    DO_TEST_CAPS_VER("mlock-on", "3.0.0");
    DO_TEST_CAPS_VER("mlock-off", "3.0.0");
2505 2506
    DO_TEST_CAPS_LATEST("mlock-on");
    DO_TEST_CAPS_LATEST("mlock-off");
2507

2508 2509 2510 2511
    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);
2512

2513
    DO_TEST("hotplug-base",
2514
            QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_SCSI);
2515

2516 2517
    DO_TEST("pcihole64", QEMU_CAPS_I440FX_PCI_HOLE64_SIZE);
    DO_TEST_FAILURE("pcihole64-none", NONE);
2518
    DO_TEST("pcihole64-q35",
2519
            QEMU_CAPS_DEVICE_IOH3420,
2520
            QEMU_CAPS_ICH9_AHCI,
2521
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2522
            QEMU_CAPS_DEVICE_QXL,
2523 2524
            QEMU_CAPS_Q35_PCI_HOLE64_SIZE);

J
Ján Tomko 已提交
2525 2526
    DO_TEST("arm-vexpressa9-nodevs", NONE);
    DO_TEST("arm-vexpressa9-basic", NONE);
2527
    DO_TEST("arm-vexpressa9-virtio",
2528
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2529
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2530
    DO_TEST("arm-virt-virtio",
2531
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2532
            QEMU_CAPS_DEVICE_PL011,
2533
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2534

2535
    DO_TEST("aarch64-virt-virtio",
2536
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2537
            QEMU_CAPS_DEVICE_PL011,
2538
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2539 2540 2541 2542 2543 2544

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

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

2692
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);
2693

2694
    DO_TEST("kvm-pit-delay", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2695
    DO_TEST("kvm-pit-discard", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2696

2697 2698 2699 2700
    DO_TEST("panic",
            QEMU_CAPS_DEVICE_PANIC);
    DO_TEST("panic-double",
            QEMU_CAPS_DEVICE_PANIC);
H
Hu Tao 已提交
2701

2702 2703
    DO_TEST("panic-no-address",
            QEMU_CAPS_DEVICE_PANIC);
2704

2705 2706
    DO_TEST("fips-enabled", QEMU_CAPS_ENABLE_FIPS);

J
Ján Tomko 已提交
2707
    DO_TEST("shmem", QEMU_CAPS_DEVICE_IVSHMEM);
2708 2709 2710
    DO_TEST("shmem-plain-doorbell", QEMU_CAPS_DEVICE_IVSHMEM,
            QEMU_CAPS_DEVICE_IVSHMEM_PLAIN,
            QEMU_CAPS_DEVICE_IVSHMEM_DOORBELL);
2711
    DO_TEST_FAILURE("shmem", NONE);
J
Ján Tomko 已提交
2712
    DO_TEST_FAILURE("shmem-invalid-size",
2713
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2714
    DO_TEST_FAILURE("shmem-invalid-address",
2715
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2716
    DO_TEST_FAILURE("shmem-small-size",
2717
                    QEMU_CAPS_DEVICE_IVSHMEM);
2718
    DO_TEST_PARSE_ERROR("shmem-msi-only", NONE);
A
Andrea Bolognani 已提交
2719
    DO_TEST("cpu-host-passthrough-features", QEMU_CAPS_KVM);
2720

2721
    DO_TEST_FAILURE("memory-align-fail", NONE);
2722
    DO_TEST_FAILURE("memory-hotplug-nonuma", QEMU_CAPS_DEVICE_PC_DIMM);
M
Michal Privoznik 已提交
2723
    DO_TEST("memory-hotplug", NONE);
2724
    DO_TEST("memory-hotplug", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA);
2725
    DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2726
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2727
    DO_TEST("memory-hotplug-dimm-addr", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2728
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2729
    DO_TEST("memory-hotplug-ppc64-nonuma", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2730
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2731
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2732 2733 2734
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm");
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-access");
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-label");
2735
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-align");
2736
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-pmem");
2737
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-readonly");
2738

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

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

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

    DO_TEST("machine-aeskeywrap-off-cap",
2768
            QEMU_CAPS_AES_KEY_WRAP,
2769
            QEMU_CAPS_VIRTIO_SCSI,
2770
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2771
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap",
2772
                    QEMU_CAPS_VIRTIO_SCSI,
2773
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2774 2775 2776
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap", NONE);

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

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

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

    DO_TEST("machine-deakeywrap-off-cap",
2804
            QEMU_CAPS_DEA_KEY_WRAP,
2805
            QEMU_CAPS_VIRTIO_SCSI,
2806
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2807
    DO_TEST_FAILURE("machine-deakeywrap-off-cap",
2808
                    QEMU_CAPS_VIRTIO_SCSI,
2809
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2810 2811 2812
    DO_TEST_FAILURE("machine-deakeywrap-off-cap", NONE);

    DO_TEST("machine-keywrap-none-caps",
2813
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2814
            QEMU_CAPS_VIRTIO_SCSI,
2815
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2816
    DO_TEST("machine-keywrap-none",
2817
            QEMU_CAPS_VIRTIO_SCSI,
2818
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2819

2820
    DO_TEST("machine-loadparm-s390",
2821
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390,
2822
            QEMU_CAPS_LOADPARM);
2823
    DO_TEST("machine-loadparm-net-s390",
2824
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390,
2825
            QEMU_CAPS_LOADPARM);
2826
    DO_TEST("machine-loadparm-multiple-disks-nets-s390",
2827
            QEMU_CAPS_CCW,
2828
            QEMU_CAPS_VIRTIO_S390,
2829 2830
            QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-char-invalid",
2831
                        QEMU_CAPS_CCW,
2832
                        QEMU_CAPS_VIRTIO_S390,
2833 2834
                        QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-len-invalid",
2835
                        QEMU_CAPS_CCW,
2836
                        QEMU_CAPS_VIRTIO_S390,
2837 2838
                        QEMU_CAPS_LOADPARM);

J
Jiri Denemark 已提交
2839 2840 2841 2842 2843 2844 2845
    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);

2846
    DO_TEST("virtio-input", QEMU_CAPS_VIRTIO_KEYBOARD,
2847
            QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET);
2848
    DO_TEST("virtio-input-passthrough", QEMU_CAPS_VIRTIO_INPUT_HOST);
2849

2850
    DO_TEST("ppc64-usb-controller",
2851
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2852
            QEMU_CAPS_PCI_OHCI);
2853
    DO_TEST("ppc64-usb-controller-legacy",
2854
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2855
            QEMU_CAPS_PIIX3_USB_UHCI);
2856
    DO_TEST_FULL("ppc64-usb-controller-qemu-xhci",
2857
                 ARG_PARSEFLAGS, VIR_DOMAIN_DEF_PARSE_ABI_UPDATE,
2858
                 ARG_QEMU_CAPS,
2859
                 QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2860 2861 2862 2863 2864 2865 2866
                 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);
2867

2868 2869 2870 2871
    DO_TEST("aarch64-usb-controller-nec-xhci",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_NEC_USB_XHCI);

2872 2873 2874
    /* 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 */
2875 2876 2877 2878
    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);
2879

2880 2881 2882
    DO_TEST("name-escape",
            QEMU_CAPS_NAME_DEBUG_THREADS,
            QEMU_CAPS_OBJECT_SECRET,
2883 2884
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_GROUP,
2885 2886 2887 2888
            QEMU_CAPS_VNC,
            QEMU_CAPS_NAME_GUEST,
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_SPICE,
2889
            QEMU_CAPS_SPICE_UNIX,
2890 2891 2892 2893 2894
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_SPICE_GL,
            QEMU_CAPS_SPICE_RENDERNODE,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2895
            QEMU_CAPS_DEVICE_ISA_SERIAL,
2896
            QEMU_CAPS_CHARDEV_FILE_APPEND,
2897
            QEMU_CAPS_CCID_EMULATED,
2898
            QEMU_CAPS_VIRTIO_SCSI);
M
Marc-André Lureau 已提交
2899 2900
    DO_TEST("debug-threads", QEMU_CAPS_NAME_DEBUG_THREADS);

2901
    DO_TEST("master-key", QEMU_CAPS_OBJECT_SECRET);
2902
    DO_TEST("usb-long-port-path",
J
Ján Tomko 已提交
2903
            QEMU_CAPS_USB_HUB);
2904
    DO_TEST_PARSE_ERROR("usb-too-long-port-path-invalid",
2905
                        QEMU_CAPS_USB_HUB);
2906

2907
    DO_TEST("acpi-table", NONE);
2908 2909 2910 2911 2912 2913

    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");
2914
    DO_TEST_CAPS_LATEST_PARSE_ERROR("intel-iommu-wrong-machine");
2915
    DO_TEST_CAPS_ARCH_LATEST("iommu-smmuv3", "aarch64");
2916

2917
    DO_TEST("cpu-hotplug-startup", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);
2918 2919 2920
    DO_TEST_PARSE_ERROR("cpu-hotplug-granularity",
                        QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);

2921 2922 2923
    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,
2924
            QEMU_CAPS_DEVICE_VHOST_USER_GPU,
2925 2926
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
2927 2928 2929
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_PCI_IOMMU_PLATFORM,
            QEMU_CAPS_VIRTIO_PCI_ATS);
2930

J
Ján Tomko 已提交
2931
    DO_TEST("fd-memory-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
2932
            QEMU_CAPS_KVM);
J
Ján Tomko 已提交
2933
    DO_TEST("fd-memory-numa-topology2", QEMU_CAPS_OBJECT_MEMORY_FILE,
2934
            QEMU_CAPS_KVM);
J
Ján Tomko 已提交
2935
    DO_TEST("fd-memory-numa-topology3", QEMU_CAPS_OBJECT_MEMORY_FILE,
2936 2937
            QEMU_CAPS_KVM);

J
Ján Tomko 已提交
2938
    DO_TEST("fd-memory-no-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
2939 2940
            QEMU_CAPS_KVM);

M
Marc-André Lureau 已提交
2941
    DO_TEST_CAPS_LATEST("memfd-memory-numa");
2942
    DO_TEST_CAPS_LATEST("memfd-memory-default-hugepage");
M
Marc-André Lureau 已提交
2943

2944 2945 2946 2947 2948 2949 2950 2951
    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);

2952 2953 2954 2955 2956 2957 2958 2959 2960
    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 已提交
2961
    DO_TEST("vmcoreinfo", QEMU_CAPS_DEVICE_VMCOREINFO);
2962

2963 2964 2965
    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,
2966
            QEMU_CAPS_DEVICE_ISA_SERIAL,
2967
            QEMU_CAPS_HDA_DUPLEX,
2968 2969
            QEMU_CAPS_CCID_EMULATED,
            QEMU_CAPS_QCOW2_LUKS, QEMU_CAPS_OBJECT_SECRET);
2970
    DO_TEST("user-aliases2", QEMU_CAPS_DEVICE_IOH3420, QEMU_CAPS_ICH9_AHCI);
2971 2972
    DO_TEST("user-aliases-usb", QEMU_CAPS_KVM,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4,
2973
            QEMU_CAPS_ICH9_USB_EHCI1);
2974

2975
    DO_TEST_CAPS_VER("disk-virtio-scsi-reservations", "2.12.0");
2976
    DO_TEST_CAPS_LATEST("disk-virtio-scsi-reservations");
2977

2978
    DO_TEST_CAPS_LATEST("tseg-explicit-size");
2979 2980 2981
    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");
2982

2983
    DO_TEST("video-virtio-gpu-ccw", QEMU_CAPS_CCW,
2984 2985 2986 2987 2988 2989
            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);

2990
    DO_TEST("input-virtio-ccw", QEMU_CAPS_CCW,
2991 2992 2993 2994 2995 2996 2997
            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);

2998 2999
    DO_TEST_CAPS_LATEST("vhost-vsock");
    DO_TEST_CAPS_LATEST("vhost-vsock-auto");
3000 3001
    DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw", "s390x");
    DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw-auto", "s390x");
3002

3003
    DO_TEST_CAPS_VER("launch-security-sev", "2.12.0");
3004

L
Lubomir Rintel 已提交
3005 3006
    DO_TEST("riscv64-virt",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
3007 3008
    DO_TEST("riscv64-virt-pci",
            QEMU_CAPS_OBJECT_GPEX);
L
Lubomir Rintel 已提交
3009

3010 3011 3012 3013 3014
    /* 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");
3015
    DO_TEST_CAPS_LATEST_PARSE_ERROR("virtio-transitional-not-supported");
3016

3017 3018 3019 3020 3021 3022 3023 3024
    /* 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");

3025 3026 3027
    /* 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");
3028
    DO_TEST_CAPS_ARCH_LATEST("riscv64-virt-graphics", "riscv64");
3029
    DO_TEST_CAPS_ARCH_LATEST("s390x-ccw-graphics", "s390x");
3030 3031 3032
    DO_TEST_CAPS_ARCH_LATEST("x86_64-pc-graphics", "x86_64");
    DO_TEST_CAPS_ARCH_LATEST("x86_64-q35-graphics", "x86_64");

3033 3034 3035 3036 3037
    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");

3038 3039 3040
    DO_TEST_CAPS_LATEST("vhost-user-vga");
    DO_TEST_CAPS_LATEST("vhost-user-gpu-secondary");

A
Andrea Bolognani 已提交
3041 3042 3043
    if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL)
        virFileDeleteTree(fakerootdir);

3044
    VIR_FREE(driver.config->nbdTLSx509certdir);
3045
    qemuTestDriverFree(&driver);
A
Andrea Bolognani 已提交
3046
    VIR_FREE(fakerootdir);
3047
    virHashFree(capslatest);
3048
    virFileWrapperClearPrefixes();
3049

3050
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
3051 3052
}

3053
VIR_TEST_MAIN_PRELOAD(mymain,
3054 3055 3056 3057
                      VIR_TEST_MOCK("qemuxml2argv"),
                      VIR_TEST_MOCK("virrandom"),
                      VIR_TEST_MOCK("qemucpu"),
                      VIR_TEST_MOCK("virpci"))
3058

3059 3060
#else

3061 3062 3063 3064
int main(void)
{
    return EXIT_AM_SKIP;
}
3065 3066

#endif /* WITH_QEMU */