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

#include <unistd.h>
4 5 6 7

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

8 9
#include "testutils.h"

10 11
#ifdef WITH_QEMU

12
# include "internal.h"
13
# include "viralloc.h"
14
# include "qemu/qemu_alias.h"
15 16
# include "qemu/qemu_capabilities.h"
# include "qemu/qemu_command.h"
M
Matthias Bolte 已提交
17
# include "qemu/qemu_domain.h"
18
# include "qemu/qemu_migration.h"
19
# include "qemu/qemu_process.h"
20
# include "qemu/qemu_slirp.h"
21
# include "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
    char *secret;
46
    secret = g_strdup("AQCVn5hO6HzFAhAAq0NCv8jtJcIcE+HOBlMQ1A");
47 48 49 50 51 52
    *value_size = strlen(secret);
    return (unsigned char *) secret;
}

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

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

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

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

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

97 98 99 100 101 102 103 104 105 106 107 108

# 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")) {
109 110
        xmlpath = g_strdup_printf("%s/%s%s.xml", abs_srcdir,
                                  STORAGE_POOL_XML_PATH, name);
111 112 113 114 115 116 117 118 119 120

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

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

121
 cleanup:
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
    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);

158
 cleanup:
159
    virStringListFree(volinfo);
160 161
    return ret;

162
 fallback:
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
    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;

190
    ret = g_strdup_printf("/some/%s/device/%s", vol->key, vol->name);
191 192 193 194 195 196 197

    return ret;
}


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

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

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

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

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

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

/* 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 已提交
274
fakeNWFilterBindingDelete(virNWFilterBindingPtr binding G_GNUC_UNUSED)
275 276 277 278 279 280 281 282 283 284
{
    return 0;
}


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

285 286 287 288

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

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

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

    return 0;
}


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

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

367 368
    virQEMUCapsInitQMPBasicArch(info->qemuCaps);

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

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

378
    return 0;
379 380 381
}


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

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


398 399 400
static int
testCompareXMLToArgv(const void *data)
{
401
    struct testQemuInfo *info = (void *) data;
402
    char *migrateURI = NULL;
403
    char *actualargv = NULL;
404 405
    unsigned int flags = info->flags;
    unsigned int parseFlags = info->parseFlags;
E
Eric Blake 已提交
406
    int ret = -1;
407
    virDomainObjPtr vm = NULL;
408
    virDomainChrSourceDef monitor_chr;
409
    virConnectPtr conn;
J
Jiri Denemark 已提交
410
    char *log = NULL;
E
Eric Blake 已提交
411
    virCommandPtr cmd = NULL;
412
    size_t i;
413
    qemuDomainObjPrivatePtr priv = NULL;
414

415
    if (info->arch != VIR_ARCH_NONE && info->arch != VIR_ARCH_X86_64)
416
        qemuTestSetHostArch(&driver, info->arch);
417

418 419
    memset(&monitor_chr, 0, sizeof(monitor_chr));

420
    if (!(conn = virGetConnect()))
421
        goto cleanup;
422

423
    conn->secretDriver = &fakeSecretDriver;
424
    conn->storageDriver = &fakeStorageDriver;
425
    conn->nwfilterDriver = &fakeNWFilterDriver;
426

427 428 429 430
    virSetConnectInterface(conn);
    virSetConnectNetwork(conn);
    virSetConnectNWFilter(conn);
    virSetConnectNodeDev(conn);
431 432 433
    virSetConnectSecret(conn);
    virSetConnectStorage(conn);

434 435 436
    if (virQEMUCapsGet(info->qemuCaps, QEMU_CAPS_ENABLE_FIPS))
        flags |= FLAG_FIPS;

437 438 439
    if (testCheckExclusiveFlags(info->flags) < 0)
        goto cleanup;

440
    if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0)
441 442 443
        goto cleanup;

    if (info->migrateFrom &&
444 445
        !(migrateURI = qemuMigrationDstGetURI(info->migrateFrom,
                                              info->migrateFd)))
446 447
        goto cleanup;

448
    if (!(vm = virDomainObjNew(driver.xmlopt)))
449
        goto cleanup;
450

451
    parseFlags |= VIR_DOMAIN_DEF_PARSE_INACTIVE;
452
    if (!(vm->def = virDomainDefParseFile(info->infile,
453
                                          driver.xmlopt,
454
                                          NULL, parseFlags))) {
P
Pavel Hrdina 已提交
455
        if (flags & FLAG_EXPECT_PARSE_ERROR)
456
            goto ok;
457
        goto cleanup;
458
    }
459 460 461 462
    if (flags & FLAG_EXPECT_PARSE_ERROR) {
        VIR_TEST_DEBUG("passed instead of expected parse error");
        goto cleanup;
    }
463
    priv = vm->privateData;
464

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

468
    if (!virDomainDefCheckABIStability(vm->def, vm->def, driver.xmlopt)) {
469
        VIR_TEST_DEBUG("ABI stability check failed on %s", info->infile);
470
        goto cleanup;
471 472
    }

473
    vm->def->id = -1;
474

475
    if (qemuProcessPrepareMonitorChr(&monitor_chr, priv->libDir) < 0)
476
        goto cleanup;
477

478 479 480 481 482 483
    if (!(info->flags & FLAG_REAL_CAPS)) {
        if (testUpdateQEMUCaps(info, vm, driver.caps) < 0)
            goto cleanup;
        if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0)
            goto cleanup;
    }
484

485
    log = virTestLogContentAndReset();
486
    VIR_FREE(log);
487
    virResetLastError();
J
Jiri Denemark 已提交
488

489 490
    for (i = 0; i < vm->def->nhostdevs; i++) {
        virDomainHostdevDefPtr hostdev = vm->def->hostdevs[i];
491 492 493 494

        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) {
495
            hostdev->source.subsys.u.pci.backend = VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO;
496 497 498
        }
    }

499 500 501 502 503 504 505 506 507 508 509
    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;
    }

510 511 512
    if (vm->def->tpm) {
        switch (vm->def->tpm->type) {
        case VIR_DOMAIN_TPM_TYPE_EMULATOR:
513
            VIR_FREE(vm->def->tpm->data.emulator.source.data.file.path);
514
            vm->def->tpm->data.emulator.source.data.file.path = g_strdup("/dev/test");
515
            vm->def->tpm->data.emulator.source.type = VIR_DOMAIN_CHR_TYPE_FILE;
516 517 518 519 520 521 522
            break;
        case VIR_DOMAIN_TPM_TYPE_PASSTHROUGH:
        case VIR_DOMAIN_TPM_TYPE_LAST:
            break;
       }
    }

523 524 525 526 527 528 529 530 531 532
    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;
        }
    }

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

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

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

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

P
Pavel Hrdina 已提交
564 565
    ret = 0;

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

579
 cleanup:
580 581
    VIR_FREE(log);
    VIR_FREE(actualargv);
582
    virDomainChrSourceDefClear(&monitor_chr);
E
Eric Blake 已提交
583
    virCommandFree(cmd);
584
    virObjectUnref(vm);
585 586
    virSetConnectSecret(NULL);
    virSetConnectStorage(NULL);
587
    virObjectUnref(conn);
588
    VIR_FREE(migrateURI);
589
    if (info->arch != VIR_ARCH_NONE && info->arch != VIR_ARCH_X86_64)
590
        qemuTestSetHostArch(&driver, VIR_ARCH_NONE);
591

592
    return ret;
593 594
}

595
static void
596
testInfoSetPaths(struct testQemuInfo *info,
597 598
                 const char *suffix)
{
599 600 601 602
    info->infile = g_strdup_printf("%s/qemuxml2argvdata/%s.xml",
                                   abs_srcdir, info->name);
    info->outfile = g_strdup_printf("%s/qemuxml2argvdata/%s%s.args",
                                    abs_srcdir, info->name, suffix ? suffix : "");
603 604
}

A
Andrea Bolognani 已提交
605
# define FAKEROOTDIRTEMPLATE abs_builddir "/fakerootdir-XXXXXX"
606

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

614
    fakerootdir = g_strdup(FAKEROOTDIRTEMPLATE);
A
Andrea Bolognani 已提交
615

J
Ján Tomko 已提交
616
    if (!g_mkdtemp(fakerootdir)) {
A
Andrea Bolognani 已提交
617 618 619 620 621 622
        fprintf(stderr, "Cannot create fakerootdir");
        abort();
    }

    setenv("LIBVIRT_FAKE_ROOT_DIR", fakerootdir, 1);

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

633
    if (qemuTestDriverInit(&driver) < 0)
634
        return EXIT_FAILURE;
635 636

    driver.privileged = true;
637

638
    VIR_FREE(driver.config->defaultTLSx509certdir);
639
    driver.config->defaultTLSx509certdir = g_strdup("/etc/pki/qemu");
640
    VIR_FREE(driver.config->vncTLSx509certdir);
641
    driver.config->vncTLSx509certdir = g_strdup("/etc/pki/libvirt-vnc");
642
    VIR_FREE(driver.config->spiceTLSx509certdir);
643
    driver.config->spiceTLSx509certdir = g_strdup("/etc/pki/libvirt-spice");
644
    VIR_FREE(driver.config->chardevTLSx509certdir);
645
    driver.config->chardevTLSx509certdir = g_strdup("/etc/pki/libvirt-chardev");
646
    VIR_FREE(driver.config->vxhsTLSx509certdir);
647
    driver.config->vxhsTLSx509certdir = g_strdup("/etc/pki/libvirt-vxhs/dummy,path");
648
    VIR_FREE(driver.config->nbdTLSx509certdir);
649
    driver.config->nbdTLSx509certdir = g_strdup("/etc/pki/libvirt-nbd/dummy,path");
650

651
    VIR_FREE(driver.config->hugetlbfs);
652
    if (VIR_ALLOC_N(driver.config->hugetlbfs, 2) < 0)
653
        return EXIT_FAILURE;
654
    driver.config->nhugetlbfs = 2;
655 656
    driver.config->hugetlbfs[0].mnt_dir = g_strdup("/dev/hugepages2M");
    driver.config->hugetlbfs[1].mnt_dir = g_strdup("/dev/hugepages1G");
657 658
    driver.config->hugetlbfs[0].size = 2048;
    driver.config->hugetlbfs[0].deflt = true;
659
    driver.config->hugetlbfs[1].size = 1048576;
660
    driver.config->spiceTLS = 1;
661
    driver.config->spicePassword = g_strdup("123456");
662
    VIR_FREE(driver.config->memoryBackingDir);
663
    driver.config->memoryBackingDir = g_strdup("/var/lib/libvirt/qemu/ram");
664
    VIR_FREE(driver.config->nvramDir);
665
    driver.config->nvramDir = g_strdup("/var/lib/libvirt/qemu/nvram");
666

C
Cole Robinson 已提交
667
    capslatest = testQemuGetLatestCaps();
668
    if (!capslatest)
669 670
        return EXIT_FAILURE;

671 672 673 674 675 676 677
    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");

678 679 680 681 682 683 684 685 686 687
    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");

688 689 690 691 692 693 694 695 696 697 698 699 700 701
/**
 * 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.
 */
702
# define DO_TEST_INTERNAL(_name, _suffix, ...) \
703
    do { \
704
        static struct testQemuInfo info = { \
705
            .name = _name, \
706
        }; \
707 708
        if (testQemuInfoSetArgs(&info, capslatest, \
                                __VA_ARGS__, ARG_END) < 0) \
709
            return EXIT_FAILURE; \
710
        testInfoSetPaths(&info, _suffix); \
711
        if (virTestRun("QEMU XML-2-ARGV " _name _suffix, \
712 713
                       testCompareXMLToArgv, &info) < 0) \
            ret = -1; \
714
        testQemuInfoClear(&info); \
715 716
    } while (0)

717 718 719 720 721 722
# define DO_TEST_CAPS_INTERNAL(name, arch, ver, ...) \
    DO_TEST_INTERNAL(name, "." arch "-" ver, \
                     ARG_CAPS_ARCH, arch, \
                     ARG_CAPS_VER, ver, \
                     __VA_ARGS__)

723
# define DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, ...) \
724
    DO_TEST_CAPS_INTERNAL(name, arch, "latest", __VA_ARGS__)
725

726 727 728
# define DO_TEST_CAPS_ARCH_VER_FULL(name, arch, ver, ...) \
    DO_TEST_CAPS_INTERNAL(name, arch, ver, __VA_ARGS__)

729
# define DO_TEST_CAPS_ARCH_LATEST(name, arch) \
730
    DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, ARG_END)
731

732
# define DO_TEST_CAPS_ARCH_VER(name, arch, ver) \
733
    DO_TEST_CAPS_ARCH_VER_FULL(name, arch, ver, ARG_END)
734

735
# define DO_TEST_CAPS_LATEST(name) \
736
    DO_TEST_CAPS_ARCH_LATEST(name, "x86_64")
737

738 739 740
# define DO_TEST_CAPS_VER(name, ver) \
    DO_TEST_CAPS_ARCH_VER(name, "x86_64", ver)

741 742
# define DO_TEST_CAPS_ARCH_LATEST_FAILURE(name, arch) \
    DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, \
743
                                  ARG_FLAGS, FLAG_EXPECT_FAILURE)
744

745 746 747 748 749 750 751 752 753 754 755 756
# 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, \
757
                                  ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR)
758

759 760 761 762 763 764 765 766 767 768
# 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)

769 770 771
# define DO_TEST_FULL(name, ...) \
    DO_TEST_INTERNAL(name, "", \
                     __VA_ARGS__, QEMU_CAPS_LAST)
772

773 774 775
/* All the following macros require an explicit QEMU_CAPS_* list
 * at the end of the argument list, or the NONE placeholder.
 * */
776
# define DO_TEST(name, ...) \
777
    DO_TEST_FULL(name, \
778
                 ARG_QEMU_CAPS, __VA_ARGS__)
779

780
# define DO_TEST_GIC(name, gic, ...) \
781
    DO_TEST_FULL(name, \
782
                 ARG_GIC, gic, \
783
                 ARG_QEMU_CAPS, __VA_ARGS__)
784

785
# define DO_TEST_FAILURE(name, ...) \
786 787
    DO_TEST_FULL(name, \
                 ARG_FLAGS, FLAG_EXPECT_FAILURE, \
788
                 ARG_QEMU_CAPS, __VA_ARGS__)
789

790
# define DO_TEST_PARSE_ERROR(name, ...) \
791
    DO_TEST_FULL(name, \
792
                 ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE, \
793
                 ARG_QEMU_CAPS, __VA_ARGS__)
794

795
# define NONE QEMU_CAPS_LAST
796

797 798 799
    /* 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 */
800 801 802 803 804 805 806
    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");
807 808
    unsetenv("QEMU_AUDIO_DRV");
    unsetenv("SDL_AUDIODRIVER");
809

810
    DO_TEST("minimal", NONE);
811 812
    DO_TEST("minimal-sandbox",
            QEMU_CAPS_SECCOMP_BLACKLIST);
813
    DO_TEST_PARSE_ERROR("minimal-no-memory", NONE);
814
    DO_TEST("minimal-msg-timestamp", QEMU_CAPS_MSG_TIMESTAMP);
815 816 817 818

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

819
    DO_TEST("machine-aliases1", NONE);
820
    DO_TEST("machine-aliases2", QEMU_CAPS_KVM);
821
    DO_TEST("machine-core-on", NONE);
822
    driver.config->dumpGuestCore = true;
823
    DO_TEST("machine-core-off", NONE);
824
    driver.config->dumpGuestCore = false;
M
Michal Privoznik 已提交
825 826 827
    DO_TEST("machine-smm-opt",
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
828
            QEMU_CAPS_DEVICE_IOH3420,
M
Michal Privoznik 已提交
829 830 831
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_MACHINE_SMM_OPT,
            QEMU_CAPS_VIRTIO_SCSI);
832
    DO_TEST("machine-vmport-opt",
833
            QEMU_CAPS_MACHINE_VMPORT_OPT);
834 835 836
    DO_TEST("default-kvm-host-arch", NONE);
    DO_TEST("default-qemu-host-arch", NONE);
    DO_TEST("x86-kvm-32-on-64", NONE);
837 838 839
    DO_TEST("boot-cdrom", NONE);
    DO_TEST("boot-network", NONE);
    DO_TEST("boot-floppy", NONE);
840
    DO_TEST("boot-floppy-q35",
841
            QEMU_CAPS_DEVICE_IOH3420,
842
            QEMU_CAPS_ICH9_AHCI);
J
Ján Tomko 已提交
843 844
    DO_TEST("boot-multi", NONE);
    DO_TEST("boot-menu-enable", NONE);
845
    DO_TEST("boot-menu-enable-with-timeout",
846
            QEMU_CAPS_SPLASH_TIMEOUT);
847
    DO_TEST_PARSE_ERROR("boot-menu-enable-with-timeout", NONE);
848
    DO_TEST_PARSE_ERROR("boot-menu-enable-with-timeout-invalid", NONE);
J
Ján Tomko 已提交
849 850
    DO_TEST("boot-menu-disable", NONE);
    DO_TEST("boot-menu-disable-drive", NONE);
851
    DO_TEST_PARSE_ERROR("boot-dev+order",
852
            QEMU_CAPS_VIRTIO_BLK_SCSI);
853
    DO_TEST("boot-order",
854
            QEMU_CAPS_VIRTIO_BLK_SCSI);
855
    DO_TEST("boot-complex",
856
            QEMU_CAPS_VIRTIO_BLK_SCSI);
857
    DO_TEST("boot-strict",
858
            QEMU_CAPS_BOOT_STRICT,
859
            QEMU_CAPS_VIRTIO_BLK_SCSI);
860 861 862

    DO_TEST("reboot-timeout-disabled", QEMU_CAPS_REBOOT_TIMEOUT);
    DO_TEST("reboot-timeout-enabled", QEMU_CAPS_REBOOT_TIMEOUT);
863
    DO_TEST_PARSE_ERROR("reboot-timeout-enabled", NONE);
864

865
    DO_TEST("bios",
866
            QEMU_CAPS_DEVICE_ISA_SERIAL,
867
            QEMU_CAPS_SGA);
J
Ján Tomko 已提交
868
    DO_TEST("bios-nvram", NONE);
M
Michal Privoznik 已提交
869 870 871
    DO_TEST("bios-nvram-secure",
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
872
            QEMU_CAPS_DEVICE_IOH3420,
M
Michal Privoznik 已提交
873 874 875
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_MACHINE_SMM_OPT,
            QEMU_CAPS_VIRTIO_SCSI);
876 877 878 879 880 881 882

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

883
    DO_TEST("clock-utc", NONE);
884
    DO_TEST("clock-localtime", NONE);
J
Ján Tomko 已提交
885 886 887 888
    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 已提交
889
    DO_TEST("clock-catchup", QEMU_CAPS_KVM_PIT_TICK_POLICY);
890 891
    DO_TEST("cpu-kvmclock", NONE);
    DO_TEST("cpu-host-kvmclock", NONE);
892
    DO_TEST("kvmclock", QEMU_CAPS_KVM);
893
    DO_TEST("clock-timer-hyperv-rtc", QEMU_CAPS_KVM);
894

895 896
    DO_TEST("cpu-eoi-disabled", NONE);
    DO_TEST("cpu-eoi-enabled", NONE);
J
Ján Tomko 已提交
897
    DO_TEST("controller-order",
898 899 900 901 902 903
            QEMU_CAPS_KVM,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_CCID_PASSTHRU,
            QEMU_CAPS_SPICE,
            QEMU_CAPS_HDA_DUPLEX,
            QEMU_CAPS_USB_HUB,
904
            QEMU_CAPS_DEVICE_ISA_SERIAL,
905
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
906
    DO_TEST_CAPS_VER("eoi-disabled", "2.7.0");
907
    DO_TEST_CAPS_VER("eoi-disabled", "4.0.0");
908 909
    DO_TEST_CAPS_LATEST("eoi-disabled");
    DO_TEST_CAPS_VER("eoi-enabled", "2.7.0");
910
    DO_TEST_CAPS_VER("eoi-enabled", "4.0.0");
911 912
    DO_TEST_CAPS_LATEST("eoi-enabled");
    DO_TEST_CAPS_VER("pv-spinlock-disabled", "2.7.0");
913
    DO_TEST_CAPS_VER("pv-spinlock-disabled", "4.0.0");
914 915
    DO_TEST_CAPS_LATEST("pv-spinlock-disabled");
    DO_TEST_CAPS_VER("pv-spinlock-enabled", "2.7.0");
916
    DO_TEST_CAPS_VER("pv-spinlock-enabled", "4.0.0");
917 918
    DO_TEST_CAPS_LATEST("pv-spinlock-enabled");
    DO_TEST_CAPS_VER("kvmclock+eoi-disabled", "2.7.0");
919
    DO_TEST_CAPS_VER("kvmclock+eoi-disabled", "4.0.0");
920
    DO_TEST_CAPS_LATEST("kvmclock+eoi-disabled");
921

922 923 924 925 926 927
    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");
928
    DO_TEST_CAPS_LATEST("hyperv-stimer-direct");
929

930 931 932
    DO_TEST("kvm-features", NONE);
    DO_TEST("kvm-features-off", NONE);

933 934 935
    DO_TEST("pmu-feature", NONE);
    DO_TEST("pmu-feature-off", NONE);

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

1164 1165 1166
    DO_TEST("graphics-egl-headless",
            QEMU_CAPS_EGL_HEADLESS,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1167 1168
    DO_TEST_CAPS_LATEST("graphics-egl-headless");
    DO_TEST_CAPS_LATEST("graphics-egl-headless-rendernode");
1169

1170 1171
    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);
1172 1173
    DO_TEST("graphics-vnc-websocket",
            QEMU_CAPS_VNC,
1174
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1175
    DO_TEST("graphics-vnc-policy", QEMU_CAPS_VNC,
1176 1177 1178 1179 1180
            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);
1181
    driver.config->vncAutoUnixSocket = true;
1182 1183
    DO_TEST("graphics-vnc-auto-socket-cfg", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1184
    driver.config->vncAutoUnixSocket = false;
1185 1186 1187 1188
    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);
1189 1190
    DO_TEST("graphics-vnc-socket-new-cmdline", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA, QEMU_CAPS_VNC_MULTI_SERVERS);
1191

1192 1193
    driver.config->vncSASL = 1;
    VIR_FREE(driver.config->vncSASLdir);
1194
    driver.config->vncSASLdir = g_strdup("/root/.sasl2");
1195
    DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1196 1197
    driver.config->vncTLS = 1;
    driver.config->vncTLSx509verify = 1;
1198
    DO_TEST("graphics-vnc-tls", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1199 1200
    DO_TEST_CAPS_VER("graphics-vnc-tls", "2.4.0");
    DO_TEST_CAPS_LATEST("graphics-vnc-tls");
1201
    driver.config->vncTLSx509secretUUID = g_strdup("6fd3f62d-9fe7-4a4e-a869-7acd6376d8ea");
1202 1203
    DO_TEST_CAPS_LATEST("graphics-vnc-tls-secret");
    VIR_FREE(driver.config->vncTLSx509secretUUID);
1204
    driver.config->vncSASL = driver.config->vncTLSx509verify = driver.config->vncTLS = 0;
1205 1206
    VIR_FREE(driver.config->vncSASLdir);
    VIR_FREE(driver.config->vncTLSx509certdir);
1207 1208 1209 1210
    DO_TEST("graphics-vnc-egl-headless",
            QEMU_CAPS_VNC,
            QEMU_CAPS_EGL_HEADLESS,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1211

J
Ján Tomko 已提交
1212 1213
    DO_TEST("graphics-sdl",
            QEMU_CAPS_DEVICE_VGA);
1214
    DO_TEST_CAPS_LATEST_PARSE_ERROR("graphics-sdl-egl-headless");
J
Ján Tomko 已提交
1215
    DO_TEST("graphics-sdl-fullscreen",
1216
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1217
    DO_TEST("graphics-spice",
1218
            QEMU_CAPS_SPICE,
1219 1220
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
1221
    DO_TEST("graphics-spice-no-args",
1222
            QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1223
    driver.config->spiceSASL = 1;
1224
    driver.config->spiceSASLdir = g_strdup("/root/.sasl2");
1225
    DO_TEST("graphics-spice-sasl",
1226
            QEMU_CAPS_SPICE,
1227 1228 1229
            QEMU_CAPS_DEVICE_QXL);
    VIR_FREE(driver.config->spiceSASLdir);
    driver.config->spiceSASL = 0;
1230
    DO_TEST("graphics-spice-agentmouse",
1231
            QEMU_CAPS_DEVICE_QXL,
1232
            QEMU_CAPS_SPICE,
1233
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1234
    DO_TEST("graphics-spice-compression",
1235
            QEMU_CAPS_SPICE,
1236
            QEMU_CAPS_DEVICE_QXL);
1237
    DO_TEST("graphics-spice-timeout",
1238
            QEMU_CAPS_KVM,
1239
            QEMU_CAPS_SPICE,
1240 1241
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_DEVICE_VGA);
1242
    DO_TEST("graphics-spice-qxl-vga",
1243
            QEMU_CAPS_SPICE,
1244
            QEMU_CAPS_DEVICE_QXL);
1245
    DO_TEST("graphics-spice-usb-redir",
1246
            QEMU_CAPS_SPICE,
1247 1248 1249 1250
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1251
    DO_TEST("graphics-spice-agent-file-xfer",
1252
            QEMU_CAPS_SPICE,
1253 1254
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
1255 1256
    DO_TEST("graphics-spice-socket",
            QEMU_CAPS_SPICE,
1257 1258
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1259 1260
    DO_TEST("graphics-spice-auto-socket",
            QEMU_CAPS_SPICE,
1261 1262
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1263 1264 1265
    driver.config->spiceAutoUnixSocket = true;
    DO_TEST("graphics-spice-auto-socket-cfg",
            QEMU_CAPS_SPICE,
1266 1267
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1268
    driver.config->spiceAutoUnixSocket = false;
1269 1270 1271 1272
    DO_TEST("graphics-spice-egl-headless",
            QEMU_CAPS_SPICE,
            QEMU_CAPS_EGL_HEADLESS,
            QEMU_CAPS_DEVICE_QXL);
1273
    DO_TEST_CAPS_LATEST_PARSE_ERROR("graphics-spice-invalid-egl-headless");
1274
    DO_TEST_CAPS_LATEST("graphics-spice-gl-auto-rendernode");
1275

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

1330 1331 1332
    DO_TEST("hostdev-pci-multifunction",
            QEMU_CAPS_KVM,
            QEMU_CAPS_DEVICE_VFIO_PCI);
1333

1334 1335
    DO_TEST("serial-file-log",
            QEMU_CAPS_CHARDEV_FILE_APPEND,
1336
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1337
            QEMU_CAPS_CHARDEV_LOGFILE);
1338
    DO_TEST("serial-spiceport",
1339
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1340
            QEMU_CAPS_DEVICE_QXL,
1341
            QEMU_CAPS_SPICE,
1342
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1343
    DO_TEST("serial-spiceport-nospice", NONE);
1344

1345 1346 1347 1348
    DO_TEST("console-compat",
            QEMU_CAPS_DEVICE_ISA_SERIAL);
    DO_TEST("console-compat-auto",
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1349 1350

    DO_TEST("serial-vc-chardev",
1351
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1352
    DO_TEST("serial-pty-chardev",
1353
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1354
    DO_TEST("serial-dev-chardev",
1355
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1356
    DO_TEST("serial-dev-chardev-iobase",
1357
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1358
    DO_TEST("serial-file-chardev",
1359
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1360
            QEMU_CAPS_CHARDEV_FILE_APPEND);
1361
    DO_TEST("serial-unix-chardev",
1362
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1363
    DO_TEST_CAPS_LATEST("serial-unix-chardev");
1364
    DO_TEST_PARSE_ERROR("serial-unix-missing-source", NONE);
1365
    DO_TEST("serial-tcp-chardev",
1366
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1367
    DO_TEST("serial-udp-chardev",
1368
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1369
    DO_TEST("serial-tcp-telnet-chardev",
1370
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1371 1372
    driver.config->chardevTLS = 1;
    DO_TEST("serial-tcp-tlsx509-chardev",
1373
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1374
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1375 1376
    driver.config->chardevTLSx509verify = 1;
    DO_TEST("serial-tcp-tlsx509-chardev-verify",
1377
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1378 1379
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
    driver.config->chardevTLSx509verify = 0;
1380
    DO_TEST("serial-tcp-tlsx509-chardev-notls",
1381
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1382
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1383
    VIR_FREE(driver.config->chardevTLSx509certdir);
1384 1385
    driver.config->chardevTLSx509certdir = g_strdup("/etc/pki/libvirt-chardev");
    driver.config->chardevTLSx509secretUUID = g_strdup("6fd3f62d-9fe7-4a4e-a869-7acd6376d8ea");
1386 1387
    DO_TEST("serial-tcp-tlsx509-secret-chardev",
            QEMU_CAPS_OBJECT_SECRET,
1388
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1389
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1390 1391
    driver.config->chardevTLS = 0;
    VIR_FREE(driver.config->chardevTLSx509certdir);
1392
    DO_TEST("serial-many-chardev",
1393 1394 1395
            QEMU_CAPS_DEVICE_ISA_SERIAL);
    DO_TEST("parallel-tcp-chardev", NONE);
    DO_TEST("parallel-parport-chardev", NONE);
J
Ján Tomko 已提交
1396 1397
    DO_TEST_CAPS_VER("parallel-unix-chardev", "2.5.0");
    DO_TEST_CAPS_LATEST("parallel-unix-chardev");
1398
    DO_TEST("console-compat-chardev",
1399
            QEMU_CAPS_DEVICE_ISA_SERIAL);
M
Michal Privoznik 已提交
1400 1401
    DO_TEST("pci-serial-dev-chardev",
            QEMU_CAPS_DEVICE_PCI_SERIAL);
1402

1403
    DO_TEST("channel-guestfwd", NONE);
J
Ján Tomko 已提交
1404 1405
    DO_TEST_CAPS_VER("channel-unix-guestfwd", "2.5.0");
    DO_TEST_CAPS_LATEST("channel-unix-guestfwd");
1406 1407 1408 1409 1410 1411
    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);
1412
    DO_TEST("console-virtio-many",
1413
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1414
    DO_TEST("console-virtio-s390",
1415
            QEMU_CAPS_VIRTIO_S390);
1416
    DO_TEST("console-virtio-ccw",
1417
            QEMU_CAPS_CCW,
1418
            QEMU_CAPS_VIRTIO_S390);
J
Ján Tomko 已提交
1419 1420
    DO_TEST_CAPS_VER("console-virtio-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("console-virtio-unix");
1421
    DO_TEST("console-sclp",
1422
            QEMU_CAPS_VIRTIO_S390,
1423
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
1424
    DO_TEST("channel-spicevmc",
1425
            QEMU_CAPS_SPICE,
1426
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1427
    DO_TEST("channel-virtio-default",
1428
            QEMU_CAPS_SPICE);
1429
    DO_TEST("channel-virtio-unix", NONE);
1430

1431
    DO_TEST("smartcard-host",
1432
            QEMU_CAPS_CCID_EMULATED);
1433
    DO_TEST("smartcard-host-certificates",
1434
            QEMU_CAPS_CCID_EMULATED);
1435 1436
    DO_TEST("smartcard-host-certificates-database",
            QEMU_CAPS_CCID_EMULATED);
1437
    DO_TEST("smartcard-passthrough-tcp",
1438
            QEMU_CAPS_CCID_PASSTHRU);
1439
    DO_TEST("smartcard-passthrough-spicevmc",
1440
            QEMU_CAPS_CCID_PASSTHRU);
1441
    DO_TEST("smartcard-controller",
1442
            QEMU_CAPS_CCID_EMULATED);
J
Ján Tomko 已提交
1443 1444
    DO_TEST_CAPS_VER("smartcard-passthrough-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("smartcard-passthrough-unix");
1445

1446 1447 1448 1449 1450 1451 1452 1453
    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);
1454 1455
    DO_TEST_PARSE_ERROR("chardev-reconnect-generated-path",
                        QEMU_CAPS_CHARDEV_RECONNECT);
1456

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

1557 1558 1559
    DO_TEST("smbios", NONE);
    DO_TEST_PARSE_ERROR("smbios-date", NONE);
    DO_TEST_PARSE_ERROR("smbios-uuid-match", NONE);
1560

1561
    DO_TEST("watchdog", NONE);
1562
    DO_TEST("watchdog-device", NONE);
1563
    DO_TEST("watchdog-dump", NONE);
1564
    DO_TEST("watchdog-injectnmi", NONE);
1565
    DO_TEST("watchdog-diag288", QEMU_CAPS_VIRTIO_S390);
1566 1567
    DO_TEST("balloon-device", NONE);
    DO_TEST("balloon-device-deflate",
1568
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1569
    DO_TEST("balloon-ccw-deflate",
1570
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1571
    DO_TEST("balloon-mmio-deflate",
J
Ján Tomko 已提交
1572
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1573
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1574
    DO_TEST("balloon-device-deflate-off",
1575
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1576 1577
    DO_TEST("balloon-device-auto", NONE);
    DO_TEST("balloon-device-period", NONE);
1578 1579
    DO_TEST("sound", NONE);
    DO_TEST("sound-device",
1580
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_HDA_MICRO,
1581
            QEMU_CAPS_HDA_OUTPUT,
1582 1583
            QEMU_CAPS_DEVICE_ICH9_INTEL_HDA,
            QEMU_CAPS_OBJECT_USB_AUDIO);
1584
    DO_TEST("fs9p", NONE);
1585
    DO_TEST_CAPS_LATEST("fs9p");
1586
    DO_TEST("fs9p-ccw",
1587
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1588
    DO_TEST_CAPS_ARCH_LATEST("fs9p-ccw", "s390x");
1589

1590
    DO_TEST("hostdev-usb-address", NONE);
1591
    DO_TEST("hostdev-usb-address-device", NONE);
1592
    DO_TEST("hostdev-usb-address-device-boot", NONE);
1593 1594
    DO_TEST("hostdev-pci-address", QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST("hostdev-pci-address-device", QEMU_CAPS_DEVICE_VFIO_PCI);
1595 1596
    DO_TEST("hostdev-vfio",
            QEMU_CAPS_DEVICE_VFIO_PCI);
1597
    DO_TEST("hostdev-vfio-multidomain",
1598
            QEMU_CAPS_DEVICE_VFIO_PCI);
1599 1600 1601 1602 1603 1604
    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);
1605 1606 1607 1608 1609 1610 1611
    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);
1612
    DO_TEST_CAPS_LATEST("hostdev-mdev-display-ramfb");
1613 1614
    DO_TEST_PARSE_ERROR("hostdev-vfio-zpci-wrong-arch",
                        QEMU_CAPS_DEVICE_VFIO_PCI);
1615 1616 1617
    DO_TEST("hostdev-vfio-zpci",
            QEMU_CAPS_DEVICE_VFIO_PCI,
            QEMU_CAPS_DEVICE_ZPCI);
1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630
    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);
1631
    DO_TEST("pci-rom", QEMU_CAPS_DEVICE_VFIO_PCI);
1632
    DO_TEST("pci-rom-disabled", NONE);
1633
    DO_TEST("pci-rom-disabled-invalid", NONE);
1634

1635 1636 1637 1638
    DO_TEST("hostdev-subsys-mdev-vfio-ccw",
            QEMU_CAPS_CCW,
            QEMU_CAPS_CCW_CSSID_UNRESTRICTED,
            QEMU_CAPS_DEVICE_VFIO_CCW);
1639 1640
    DO_TEST_CAPS_ARCH_LATEST("hostdev-subsys-mdev-vfio-ccw-boot",
                             "s390x");
1641 1642 1643
    DO_TEST_PARSE_ERROR("hostdev-subsys-mdev-vfio-ccw",
                        QEMU_CAPS_CCW,
                        QEMU_CAPS_CCW_CSSID_UNRESTRICTED);
1644 1645 1646 1647 1648 1649 1650 1651 1652
    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 已提交
1653 1654
    DO_TEST_CAPS_ARCH_LATEST("hostdev-subsys-mdev-vfio-ap",
                             "s390x");
1655 1656
    DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("hostdev-subsys-mdev-vfio-ap-boot-fail",
                                         "s390x");
B
Boris Fiuczynski 已提交
1657

1658
    DO_TEST_FULL("restore-v2",
1659 1660
                 ARG_MIGRATE_FROM, "exec:cat",
                 ARG_MIGRATE_FD, 7,
1661
                 ARG_QEMU_CAPS, NONE);
1662
    DO_TEST_FULL("restore-v2-fd",
1663 1664
                 ARG_MIGRATE_FROM, "stdio",
                 ARG_MIGRATE_FD, 7,
1665
                 ARG_QEMU_CAPS, NONE);
1666
    DO_TEST_FULL("restore-v2-fd",
1667 1668
                 ARG_MIGRATE_FROM, "fd:7",
                 ARG_MIGRATE_FD, 7,
1669
                 ARG_QEMU_CAPS, NONE);
1670
    DO_TEST_FULL("migrate",
1671
                 ARG_MIGRATE_FROM, "tcp:10.0.0.1:5000",
1672
                 ARG_QEMU_CAPS, NONE);
1673

1674
    DO_TEST_FULL("migrate-numa-unaligned",
1675 1676
                 ARG_MIGRATE_FROM, "stdio",
                 ARG_MIGRATE_FD, 7,
1677
                 ARG_QEMU_CAPS,
A
Andrea Bolognani 已提交
1678 1679
                 QEMU_CAPS_NUMA,
                 QEMU_CAPS_OBJECT_MEMORY_RAM);
1680

1681 1682
    DO_TEST_CAPS_VER("qemu-ns", "4.0.0");
    DO_TEST_CAPS_LATEST("qemu-ns");
1683
    DO_TEST("qemu-ns-no-env", NONE);
1684
    DO_TEST("qemu-ns-alt", NONE);
1685

1686
    DO_TEST("smp", NONE);
1687

J
John Ferlan 已提交
1688
    DO_TEST("iothreads", QEMU_CAPS_OBJECT_IOTHREAD);
1689 1690
    DO_TEST("iothreads-ids", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-ids-partial", QEMU_CAPS_OBJECT_IOTHREAD);
1691
    DO_TEST_FAILURE("iothreads-nocap", NONE);
1692 1693
    DO_TEST("iothreads-disk", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-disk-virtio-ccw", QEMU_CAPS_OBJECT_IOTHREAD,
1694
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1695 1696
    DO_TEST_CAPS_LATEST("iothreads-virtio-scsi-pci");
    DO_TEST_CAPS_ARCH_LATEST("iothreads-virtio-scsi-ccw", "s390x");
J
John Ferlan 已提交
1697

1698 1699
    DO_TEST("cpu-topology1", NONE);
    DO_TEST("cpu-topology2", NONE);
1700
    DO_TEST("cpu-topology3", NONE);
1701 1702 1703 1704 1705 1706 1707 1708
    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);
1709
    DO_TEST("cpu-no-removed-features", QEMU_CAPS_KVM);
1710
    DO_TEST("cpu-numa1", NONE);
1711 1712
    DO_TEST("cpu-numa2", NONE);
    DO_TEST("cpu-numa-no-memory-element", NONE);
1713
    DO_TEST_PARSE_ERROR("cpu-numa3", NONE);
1714
    DO_TEST_PARSE_ERROR("cpu-numa-disjoint", NONE);
1715
    DO_TEST("cpu-numa-disjoint", QEMU_CAPS_NUMA);
1716
    DO_TEST_FAILURE("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_RAM);
1717
    DO_TEST_PARSE_ERROR("cpu-numa-memshared", NONE);
1718
    DO_TEST("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_FILE);
1719
    DO_TEST("cpu-host-model", NONE);
1720
    DO_TEST("cpu-host-model-vendor", NONE);
1721
    DO_TEST_FULL("cpu-host-model-fallback",
1722
                 ARG_FLAGS, FLAG_SKIP_LEGACY_CPUS,
1723
                 ARG_QEMU_CAPS, NONE);
1724
    DO_TEST_FULL("cpu-host-model-nofallback",
1725
                 ARG_FLAGS, FLAG_SKIP_LEGACY_CPUS | FLAG_EXPECT_FAILURE,
1726
                 ARG_QEMU_CAPS, NONE);
A
Andrea Bolognani 已提交
1727 1728
    DO_TEST("cpu-host-passthrough", QEMU_CAPS_KVM);
    DO_TEST_FAILURE("cpu-qemu-host-passthrough", QEMU_CAPS_KVM);
1729

1730
    qemuTestSetHostArch(&driver, VIR_ARCH_S390X);
1731
    DO_TEST("cpu-s390-zEC12", QEMU_CAPS_KVM, QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1732 1733
    DO_TEST("cpu-s390-features", QEMU_CAPS_KVM, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION);
    DO_TEST_FAILURE("cpu-s390-features", QEMU_CAPS_KVM);
1734
    qemuTestSetHostArch(&driver, VIR_ARCH_NONE);
1735

1736
    qemuTestSetHostCPU(&driver, driver.hostarch, cpuHaswell);
1737 1738 1739 1740
    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);
1741
    DO_TEST("cpu-host-model-cmt", NONE);
1742
    DO_TEST_CAPS_VER("cpu-host-model-cmt", "4.0.0");
1743
    DO_TEST("cpu-tsc-frequency", QEMU_CAPS_KVM);
1744
    DO_TEST_CAPS_VER("cpu-tsc-frequency", "4.0.0");
1745 1746
    DO_TEST_CAPS_VER("cpu-translation", "4.0.0");
    DO_TEST_CAPS_LATEST("cpu-translation");
1747
    qemuTestSetHostCPU(&driver, driver.hostarch, NULL);
1748

1749 1750
    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);
1751
    DO_TEST("luks-disks", QEMU_CAPS_OBJECT_SECRET);
1752
    DO_TEST("luks-disks-source", QEMU_CAPS_OBJECT_SECRET);
1753 1754
    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);
1755
    DO_TEST_PARSE_ERROR("luks-disk-invalid", NONE);
1756
    DO_TEST_PARSE_ERROR("luks-disks-source-both", QEMU_CAPS_OBJECT_SECRET);
1757

1758 1759 1760 1761 1762 1763 1764 1765
    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);
1766
    DO_TEST("cputune-numatune",
1767
            QEMU_CAPS_KVM,
1768
            QEMU_CAPS_OBJECT_IOTHREAD,
1769 1770
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1771 1772 1773
    DO_TEST("vcpu-placement-static",
            QEMU_CAPS_KVM,
            QEMU_CAPS_OBJECT_IOTHREAD);
1774

1775
    DO_TEST("numatune-memory", NONE);
1776
    DO_TEST_PARSE_ERROR("numatune-memory-invalid-nodeset", NONE);
A
Andrea Bolognani 已提交
1777 1778 1779
    DO_TEST("numatune-memnode",
            QEMU_CAPS_NUMA,
            QEMU_CAPS_OBJECT_MEMORY_RAM);
1780
    DO_TEST_PARSE_ERROR("numatune-memnode", NONE);
1781

A
Andrea Bolognani 已提交
1782 1783 1784
    DO_TEST("numatune-memnode-no-memory",
            QEMU_CAPS_NUMA,
            QEMU_CAPS_OBJECT_MEMORY_RAM);
1785
    DO_TEST_PARSE_ERROR("numatune-memnode-no-memory", NONE);
1786

1787 1788
    DO_TEST("numatune-distances", QEMU_CAPS_NUMA, QEMU_CAPS_NUMA_DIST);

1789
    DO_TEST("numatune-auto-nodeset-invalid", NONE);
1790 1791
    DO_TEST("numatune-auto-prefer", QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1792 1793
    DO_TEST_FAILURE("numatune-static-nodeset-exceed-hostnode",
                    QEMU_CAPS_OBJECT_MEMORY_RAM);
1794 1795
    DO_TEST_PARSE_ERROR("numatune-memnode-nocpu", NONE);
    DO_TEST_PARSE_ERROR("numatune-memnodes-problematic", NONE);
1796 1797
    DO_TEST("numad", NONE);
    DO_TEST("numad-auto-vcpu-static-numatune", NONE);
1798
    DO_TEST_PARSE_ERROR("numad-auto-vcpu-static-numatune-no-nodeset", NONE);
1799 1800 1801
    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);
1802
    DO_TEST("blkdeviotune-max",
1803
            QEMU_CAPS_DRIVE_IOTUNE_MAX);
1804 1805 1806
    DO_TEST("blkdeviotune-group-num",
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_GROUP);
1807 1808 1809
    DO_TEST("blkdeviotune-max-length",
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_MAX_LENGTH);
1810

1811
    DO_TEST("multifunction-pci-device",
1812
            QEMU_CAPS_SCSI_LSI);
1813

1814
    DO_TEST("monitor-json", NONE);
1815

1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827
    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);
1828

1829
    DO_TEST("pseries-basic",
1830
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1831
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1832
    DO_TEST("pseries-vio",
1833
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1834
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1835
    DO_TEST("pseries-usb-default",
1836
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1837
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1838
            QEMU_CAPS_PIIX3_USB_UHCI,
1839
            QEMU_CAPS_PCI_OHCI);
1840
    DO_TEST("pseries-usb-multi",
1841
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1842
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1843
            QEMU_CAPS_PIIX3_USB_UHCI,
1844
            QEMU_CAPS_PCI_OHCI);
1845
    DO_TEST("pseries-vio-user-assigned",
1846
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1847 1848
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST_PARSE_ERROR("pseries-vio-address-clash", NONE);
1849 1850 1851
    DO_TEST("pseries-nvram",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_DEVICE_NVRAM);
1852
    DO_TEST("pseries-usb-kbd", QEMU_CAPS_PCI_OHCI,
1853
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1854
            QEMU_CAPS_DEVICE_USB_KBD,
1855
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1856
    DO_TEST("pseries-cpu-exact",
1857
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1858 1859
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST_PARSE_ERROR("pseries-no-parallel", NONE);
1860

1861
    qemuTestSetHostArch(&driver, VIR_ARCH_PPC64);
A
Andrea Bolognani 已提交
1862
    DO_TEST("pseries-cpu-compat", QEMU_CAPS_KVM,
1863
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1864
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1865 1866 1867
    DO_TEST("pseries-machine-max-cpu-compat",
            QEMU_CAPS_KVM,
            QEMU_CAPS_MACHINE_PSERIES_MAX_CPU_COMPAT,
1868
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
A
Andrea Bolognani 已提交
1869
    DO_TEST("pseries-cpu-le", QEMU_CAPS_KVM,
1870
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1871
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1872 1873 1874
    DO_TEST_FAILURE("pseries-cpu-compat-power9",
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
                    QEMU_CAPS_KVM);
1875

1876
    qemuTestSetHostCPU(&driver, driver.hostarch, cpuPower9);
1877
    DO_TEST("pseries-cpu-compat-power9",
1878
            QEMU_CAPS_KVM,
1879
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1880
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1881
    qemuTestSetHostCPU(&driver, driver.hostarch, NULL);
1882

1883
    qemuTestSetHostArch(&driver, VIR_ARCH_NONE);
1884

1885
    DO_TEST("pseries-panic-missing",
1886
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1887
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1888
    DO_TEST("pseries-panic-no-address",
1889
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1890
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1891
    DO_TEST_FAILURE("pseries-panic-address",
1892
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
1893 1894 1895 1896 1897

    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);
1898 1899 1900 1901 1902 1903
    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);
1904 1905 1906
    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);
1907

1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929
    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);

1930
    DO_TEST("pseries-features",
1931
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1932
            QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE,
1933
            QEMU_CAPS_MACHINE_PSERIES_CAP_HTM,
1934
            QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV,
1935
            QEMU_CAPS_MACHINE_PSERIES_CAP_CCF_ASSIST,
1936
            QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);
1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977

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

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

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

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

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

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

1980
    DO_TEST("pseries-serial-native",
1981
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1982 1983
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial+console-native",
1984
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1985 1986
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial-compat",
1987
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1988
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1989
    DO_TEST("pseries-serial-pci",
1990
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1991 1992
            QEMU_CAPS_DEVICE_PCI_SERIAL);
    DO_TEST("pseries-serial-usb",
1993
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1994 1995
            QEMU_CAPS_DEVICE_QEMU_XHCI,
            QEMU_CAPS_DEVICE_USB_SERIAL);
1996
    DO_TEST("pseries-console-native",
1997
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1998 1999
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-console-virtio",
2000
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
2001
    DO_TEST_PARSE_ERROR("pseries-serial-invalid-machine", NONE);
2002
    DO_TEST_PARSE_ERROR("pseries-spaprvio-invalid", "ppc64");
2003

2004
    DO_TEST("mach-virt-serial-native",
2005
            QEMU_CAPS_DEVICE_PL011);
2006
    DO_TEST("mach-virt-serial+console-native",
2007
            QEMU_CAPS_DEVICE_PL011);
2008
    DO_TEST("mach-virt-serial-compat",
2009
            QEMU_CAPS_DEVICE_PL011);
2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021
    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",
2022
            QEMU_CAPS_DEVICE_PL011);
2023 2024
    DO_TEST("mach-virt-console-virtio",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
2025 2026
    DO_TEST_PARSE_ERROR("mach-virt-serial-invalid-machine", NONE);

2027 2028
    DO_TEST("disk-ide-split", NONE);
    DO_TEST("disk-ide-wwn", QEMU_CAPS_IDE_DRIVE_WWN);
2029

2030
    DO_TEST("disk-geometry", NONE);
2031
    DO_TEST("disk-blockio", QEMU_CAPS_BLOCKIO);
2032

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

2108 2109
    DO_TEST("virtio-rng-default",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2110
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2111 2112
    DO_TEST("virtio-rng-random",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2113
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2114 2115
    DO_TEST("virtio-rng-egd",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2116
            QEMU_CAPS_OBJECT_RNG_EGD);
J
Ján Tomko 已提交
2117 2118
    DO_TEST_CAPS_VER("virtio-rng-egd-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("virtio-rng-egd-unix");
2119 2120 2121 2122
    DO_TEST("virtio-rng-multiple",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2123
    DO_TEST_PARSE_ERROR("virtio-rng-egd-crash",
2124 2125
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD);
2126
    DO_TEST("virtio-rng-ccw",
2127
            QEMU_CAPS_CCW,
2128 2129
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2130
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2131

2132
    DO_TEST("s390-allow-bogus-usb-none",
2133 2134 2135
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2136
    DO_TEST("s390-allow-bogus-usb-controller",
2137 2138 2139
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2140

2141
    DO_TEST("s390-panic-no-address",
2142
            QEMU_CAPS_CCW,
2143
            QEMU_CAPS_VIRTIO_S390);
2144
    DO_TEST_FAILURE("s390-panic-address",
2145
            QEMU_CAPS_CCW,
2146
            QEMU_CAPS_VIRTIO_S390);
2147
    DO_TEST("s390-panic-missing",
2148
            QEMU_CAPS_CCW,
2149
            QEMU_CAPS_VIRTIO_S390);
2150
    DO_TEST_PARSE_ERROR("s390-no-parallel",
2151
            QEMU_CAPS_CCW,
2152
            QEMU_CAPS_VIRTIO_S390);
2153
    DO_TEST("s390-serial",
2154
            QEMU_CAPS_CCW,
2155 2156 2157
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
    DO_TEST("s390-serial-2",
2158
            QEMU_CAPS_CCW,
2159 2160 2161 2162
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE,
            QEMU_CAPS_DEVICE_SCLPLMCONSOLE);
    DO_TEST("s390-serial-console",
2163
            QEMU_CAPS_CCW,
2164 2165
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
2166

2167
    DO_TEST("ppc-dtb",
J
Ján Tomko 已提交
2168
            QEMU_CAPS_KVM);
2169 2170
    DO_TEST("ppce500-serial",
            QEMU_CAPS_KVM);
O
Olivia Yin 已提交
2171

2172
    DO_TEST("tpm-passthrough",
2173
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
2174 2175
    DO_TEST("tpm-passthrough-crb",
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_CRB);
2176
    DO_TEST_PARSE_ERROR("tpm-no-backend-invalid",
2177
                        QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
2178
    DO_TEST_CAPS_LATEST("tpm-emulator");
2179
    DO_TEST_CAPS_LATEST("tpm-emulator-tpm2");
2180
    DO_TEST_CAPS_LATEST("tpm-emulator-tpm2-enc");
2181

2182 2183 2184 2185
    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);
2186

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

    /* Test automatic and manual setting of pcie-root-port attributes */
2389 2390
    DO_TEST("pcie-root-port",
            QEMU_CAPS_DEVICE_IOH3420,
2391
            QEMU_CAPS_ICH9_AHCI,
2392
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2393
            QEMU_CAPS_DEVICE_QXL);
2394 2395 2396 2397 2398 2399

    /* 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,
2400
            QEMU_CAPS_DEVICE_IOH3420);
2401
    DO_TEST("pcie-root-port-model-ioh3420",
2402
            QEMU_CAPS_DEVICE_IOH3420);
2403

2404 2405 2406 2407 2408 2409 2410
    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,
2411
            QEMU_CAPS_ICH9_USB_EHCI1,
2412
            QEMU_CAPS_NEC_USB_XHCI);
2413 2414 2415 2416 2417 2418 2419
    /* 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);
2420

2421
    DO_TEST_PARSE_ERROR("q35-wrong-root",
2422
            QEMU_CAPS_DEVICE_IOH3420,
2423
            QEMU_CAPS_ICH9_AHCI,
2424
            QEMU_CAPS_ICH9_USB_EHCI1,
2425
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2426
            QEMU_CAPS_DEVICE_QXL);
2427
    DO_TEST_PARSE_ERROR("440fx-wrong-root", NONE);
2428
    DO_TEST_PARSE_ERROR("440fx-ide-address-conflict", NONE);
2429

2430
    DO_TEST_PARSE_ERROR("pcie-root-port-too-many",
2431
            QEMU_CAPS_DEVICE_IOH3420,
2432
            QEMU_CAPS_ICH9_AHCI,
2433
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2434
            QEMU_CAPS_DEVICE_QXL);
2435

2436 2437 2438
    DO_TEST("pcie-switch-upstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
2439
            QEMU_CAPS_ICH9_AHCI,
2440
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2441
            QEMU_CAPS_DEVICE_QXL);
2442 2443 2444 2445
    DO_TEST("pcie-switch-downstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
2446
            QEMU_CAPS_ICH9_AHCI,
2447
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2448
            QEMU_CAPS_DEVICE_QXL);
2449

2450 2451 2452 2453 2454 2455
    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);
2456 2457
    DO_TEST_PARSE_ERROR("pci-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_PXB);
2458

2459 2460 2461 2462 2463 2464 2465 2466 2467 2468
    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);
2469 2470 2471
    DO_TEST_PARSE_ERROR("pcie-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_IOH3420,
                        QEMU_CAPS_DEVICE_PXB_PCIE);
2472

2473
    DO_TEST("hostdev-scsi-lsi",
2474 2475
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2476
    DO_TEST("hostdev-scsi-virtio-scsi",
2477 2478
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2479
    DO_TEST("hostdev-scsi-readonly",
2480 2481
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2482
    DO_TEST("hostdev-scsi-virtio-scsi",
2483 2484
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2485
    DO_TEST("hostdev-scsi-lsi-iscsi",
2486 2487
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2488
    DO_TEST("hostdev-scsi-lsi-iscsi-auth",
2489 2490
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2491
    DO_TEST("hostdev-scsi-virtio-iscsi",
2492 2493
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2494
    DO_TEST("hostdev-scsi-virtio-iscsi-auth",
2495 2496
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2497
    DO_TEST("disk-hostdev-scsi-virtio-iscsi-auth-AES",
2498 2499 2500
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_OBJECT_SECRET,
2501
            QEMU_CAPS_ISCSI_PASSWORD_SECRET);
2502 2503
    DO_TEST("hostdev-scsi-vhost-scsi-ccw",
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_VHOST_SCSI,
2504
            QEMU_CAPS_CCW);
2505
    DO_TEST("hostdev-scsi-vhost-scsi-pci",
2506 2507
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VHOST_SCSI);
2508
    DO_TEST_CAPS_LATEST_PARSE_ERROR("hostdev-scsi-vhost-scsi-pci-boot-fail");
2509 2510 2511 2512 2513
    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);
2514

2515 2516
    DO_TEST_CAPS_VER("mlock-on", "3.0.0");
    DO_TEST_CAPS_VER("mlock-off", "3.0.0");
2517 2518
    DO_TEST_CAPS_LATEST("mlock-on");
    DO_TEST_CAPS_LATEST("mlock-off");
2519

2520 2521 2522 2523
    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);
2524

2525
    DO_TEST("hotplug-base",
2526
            QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_SCSI);
2527

2528
    DO_TEST("pcihole64", QEMU_CAPS_I440FX_PCI_HOLE64_SIZE);
2529
    DO_TEST_PARSE_ERROR("pcihole64-none", NONE);
2530
    DO_TEST("pcihole64-q35",
2531
            QEMU_CAPS_DEVICE_IOH3420,
2532
            QEMU_CAPS_ICH9_AHCI,
2533
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2534
            QEMU_CAPS_DEVICE_QXL,
2535 2536
            QEMU_CAPS_Q35_PCI_HOLE64_SIZE);

J
Ján Tomko 已提交
2537 2538
    DO_TEST("arm-vexpressa9-nodevs", NONE);
    DO_TEST("arm-vexpressa9-basic", NONE);
2539
    DO_TEST("arm-vexpressa9-virtio",
2540
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2541
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2542
    DO_TEST("arm-virt-virtio",
2543
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2544
            QEMU_CAPS_DEVICE_PL011,
2545
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2546

2547
    DO_TEST("aarch64-virt-virtio",
2548
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2549
            QEMU_CAPS_DEVICE_PL011,
2550
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2551 2552 2553 2554 2555 2556

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

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

2704 2705 2706 2707 2708 2709 2710 2711 2712
    /* QEMU 4.0.0 didn't have support for aarch64 CPU features */
    DO_TEST_CAPS_ARCH_VER_FAILURE("aarch64-features-sve", "aarch64", "4.0.0");
    /* aarch64 doesn't support the same CPU features as x86 */
    DO_TEST_CAPS_ARCH_LATEST_FAILURE("aarch64-features-wrong", "aarch64");
    /* Can't enable vector lengths when SVE is overall disabled */
    DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("aarch64-features-sve-disabled", "aarch64");
    /* SVE aarch64 CPU features work on modern QEMU */
    DO_TEST_CAPS_ARCH_LATEST("aarch64-features-sve", "aarch64");

2713
    qemuTestSetHostArch(&driver, VIR_ARCH_NONE);
2714

2715
    DO_TEST("kvm-pit-delay", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2716
    DO_TEST("kvm-pit-discard", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2717

2718 2719 2720 2721
    DO_TEST("panic",
            QEMU_CAPS_DEVICE_PANIC);
    DO_TEST("panic-double",
            QEMU_CAPS_DEVICE_PANIC);
H
Hu Tao 已提交
2722

2723 2724
    DO_TEST("panic-no-address",
            QEMU_CAPS_DEVICE_PANIC);
2725

2726 2727
    DO_TEST("fips-enabled", QEMU_CAPS_ENABLE_FIPS);

J
Ján Tomko 已提交
2728
    DO_TEST("shmem", QEMU_CAPS_DEVICE_IVSHMEM);
2729 2730 2731
    DO_TEST("shmem-plain-doorbell", QEMU_CAPS_DEVICE_IVSHMEM,
            QEMU_CAPS_DEVICE_IVSHMEM_PLAIN,
            QEMU_CAPS_DEVICE_IVSHMEM_DOORBELL);
2732
    DO_TEST_FAILURE("shmem", NONE);
J
Ján Tomko 已提交
2733
    DO_TEST_FAILURE("shmem-invalid-size",
2734
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2735
    DO_TEST_FAILURE("shmem-invalid-address",
2736
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2737
    DO_TEST_FAILURE("shmem-small-size",
2738
                    QEMU_CAPS_DEVICE_IVSHMEM);
2739
    DO_TEST_PARSE_ERROR("shmem-msi-only", NONE);
A
Andrea Bolognani 已提交
2740
    DO_TEST("cpu-host-passthrough-features", QEMU_CAPS_KVM);
2741

2742
    DO_TEST_FAILURE("memory-align-fail", NONE);
2743
    DO_TEST_FAILURE("memory-hotplug-nonuma", QEMU_CAPS_DEVICE_PC_DIMM);
M
Michal Privoznik 已提交
2744
    DO_TEST("memory-hotplug", NONE);
2745
    DO_TEST("memory-hotplug", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA);
2746
    DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2747
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2748
    DO_TEST("memory-hotplug-dimm-addr", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2749
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2750
    DO_TEST("memory-hotplug-ppc64-nonuma", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2751
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2752
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2753 2754 2755
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm");
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-access");
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-label");
2756
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-align");
2757
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-pmem");
2758
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-readonly");
2759

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

    DO_TEST("machine-aeskeywrap-on-cap",
2771
            QEMU_CAPS_AES_KEY_WRAP,
2772
            QEMU_CAPS_VIRTIO_SCSI,
2773
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2774
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap",
2775
                    QEMU_CAPS_VIRTIO_SCSI,
2776
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2777 2778 2779
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap", NONE);

    DO_TEST("machine-aeskeywrap-off-caps",
2780
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2781
            QEMU_CAPS_VIRTIO_SCSI,
2782
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2783
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps",
2784
                    QEMU_CAPS_VIRTIO_SCSI,
2785
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2786 2787 2788
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", NONE);

    DO_TEST("machine-aeskeywrap-off-cap",
2789
            QEMU_CAPS_AES_KEY_WRAP,
2790
            QEMU_CAPS_VIRTIO_SCSI,
2791
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2792
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap",
2793
                    QEMU_CAPS_VIRTIO_SCSI,
2794
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2795 2796 2797
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap", NONE);

    DO_TEST("machine-deakeywrap-on-caps",
2798
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2799
            QEMU_CAPS_VIRTIO_SCSI,
2800
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2801
    DO_TEST_FAILURE("machine-deakeywrap-on-caps",
2802
                    QEMU_CAPS_VIRTIO_SCSI,
2803
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2804 2805 2806
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", NONE);

    DO_TEST("machine-deakeywrap-on-cap",
2807
            QEMU_CAPS_DEA_KEY_WRAP,
2808
            QEMU_CAPS_VIRTIO_SCSI,
2809
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2810
    DO_TEST_FAILURE("machine-deakeywrap-on-cap",
2811
                    QEMU_CAPS_VIRTIO_SCSI,
2812
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2813 2814 2815
    DO_TEST_FAILURE("machine-deakeywrap-on-cap", NONE);

    DO_TEST("machine-deakeywrap-off-caps",
2816
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2817
            QEMU_CAPS_VIRTIO_SCSI,
2818
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2819
    DO_TEST_FAILURE("machine-deakeywrap-off-caps",
2820
                    QEMU_CAPS_VIRTIO_SCSI,
2821
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2822 2823 2824
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", NONE);

    DO_TEST("machine-deakeywrap-off-cap",
2825
            QEMU_CAPS_DEA_KEY_WRAP,
2826
            QEMU_CAPS_VIRTIO_SCSI,
2827
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2828
    DO_TEST_FAILURE("machine-deakeywrap-off-cap",
2829
                    QEMU_CAPS_VIRTIO_SCSI,
2830
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2831 2832 2833
    DO_TEST_FAILURE("machine-deakeywrap-off-cap", NONE);

    DO_TEST("machine-keywrap-none-caps",
2834
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2835
            QEMU_CAPS_VIRTIO_SCSI,
2836
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2837
    DO_TEST("machine-keywrap-none",
2838
            QEMU_CAPS_VIRTIO_SCSI,
2839
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2840

2841
    DO_TEST("machine-loadparm-s390",
2842
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390,
2843
            QEMU_CAPS_LOADPARM);
2844
    DO_TEST("machine-loadparm-net-s390",
2845
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390,
2846
            QEMU_CAPS_LOADPARM);
2847
    DO_TEST("machine-loadparm-multiple-disks-nets-s390",
2848
            QEMU_CAPS_CCW,
2849
            QEMU_CAPS_VIRTIO_S390,
2850 2851
            QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-char-invalid",
2852
                        QEMU_CAPS_CCW,
2853
                        QEMU_CAPS_VIRTIO_S390,
2854 2855
                        QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-len-invalid",
2856
                        QEMU_CAPS_CCW,
2857
                        QEMU_CAPS_VIRTIO_S390,
2858 2859
                        QEMU_CAPS_LOADPARM);

J
Jiri Denemark 已提交
2860 2861 2862 2863 2864 2865 2866
    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);

2867
    DO_TEST("virtio-input", QEMU_CAPS_VIRTIO_KEYBOARD,
2868
            QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET);
2869
    DO_TEST("virtio-input-passthrough", QEMU_CAPS_VIRTIO_INPUT_HOST);
2870

2871
    DO_TEST("ppc64-usb-controller",
2872
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2873
            QEMU_CAPS_PCI_OHCI);
2874
    DO_TEST("ppc64-usb-controller-legacy",
2875
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2876
            QEMU_CAPS_PIIX3_USB_UHCI);
2877
    DO_TEST_FULL("ppc64-usb-controller-qemu-xhci",
2878
                 ARG_PARSEFLAGS, VIR_DOMAIN_DEF_PARSE_ABI_UPDATE,
2879
                 ARG_QEMU_CAPS,
2880
                 QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2881 2882 2883 2884 2885 2886 2887
                 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);
2888

2889 2890 2891 2892
    DO_TEST("aarch64-usb-controller-nec-xhci",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_NEC_USB_XHCI);

2893
    /* VM XML has invalid arch/ostype/virttype combo, but the SKIP flag
2894 2895 2896 2897 2898
     * will avoid the error during parse. This will cause us to fill in
     * the missing machine type using the i386 binary, despite it being
     * the wrong binary for the arch. We expect to get a failure about
     * bad arch later when creating the pretend command.
     */
2899
    DO_TEST_FULL("missing-machine",
2900
                 ARG_FLAGS, FLAG_EXPECT_FAILURE,
2901 2902
                 ARG_PARSEFLAGS, VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE,
                 ARG_QEMU_CAPS, NONE);
2903

2904 2905 2906
    DO_TEST("name-escape",
            QEMU_CAPS_NAME_DEBUG_THREADS,
            QEMU_CAPS_OBJECT_SECRET,
2907 2908
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_GROUP,
2909 2910 2911 2912
            QEMU_CAPS_VNC,
            QEMU_CAPS_NAME_GUEST,
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_SPICE,
2913
            QEMU_CAPS_SPICE_UNIX,
2914 2915 2916 2917 2918
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_SPICE_GL,
            QEMU_CAPS_SPICE_RENDERNODE,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2919
            QEMU_CAPS_DEVICE_ISA_SERIAL,
2920
            QEMU_CAPS_CHARDEV_FILE_APPEND,
2921
            QEMU_CAPS_CCID_EMULATED,
2922
            QEMU_CAPS_VIRTIO_SCSI);
M
Marc-André Lureau 已提交
2923 2924
    DO_TEST("debug-threads", QEMU_CAPS_NAME_DEBUG_THREADS);

2925
    DO_TEST("master-key", QEMU_CAPS_OBJECT_SECRET);
2926
    DO_TEST("usb-long-port-path",
J
Ján Tomko 已提交
2927
            QEMU_CAPS_USB_HUB);
2928
    DO_TEST_PARSE_ERROR("usb-too-long-port-path-invalid",
2929
                        QEMU_CAPS_USB_HUB);
2930

2931
    DO_TEST("acpi-table", NONE);
2932 2933 2934 2935 2936 2937

    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");
2938
    DO_TEST_CAPS_LATEST_PARSE_ERROR("intel-iommu-wrong-machine");
2939
    DO_TEST_CAPS_ARCH_LATEST("iommu-smmuv3", "aarch64");
2940

2941
    DO_TEST("cpu-hotplug-startup", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);
2942 2943 2944
    DO_TEST_PARSE_ERROR("cpu-hotplug-granularity",
                        QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);

2945 2946 2947
    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,
2948
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
2949
            QEMU_CAPS_DEVICE_VHOST_USER_GPU,
2950 2951
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
2952 2953 2954
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_PCI_IOMMU_PLATFORM,
            QEMU_CAPS_VIRTIO_PCI_ATS);
2955

J
Ján Tomko 已提交
2956
    DO_TEST("fd-memory-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
2957
            QEMU_CAPS_KVM);
J
Ján Tomko 已提交
2958
    DO_TEST("fd-memory-numa-topology2", QEMU_CAPS_OBJECT_MEMORY_FILE,
2959
            QEMU_CAPS_KVM);
J
Ján Tomko 已提交
2960
    DO_TEST("fd-memory-numa-topology3", QEMU_CAPS_OBJECT_MEMORY_FILE,
2961 2962
            QEMU_CAPS_KVM);

J
Ján Tomko 已提交
2963
    DO_TEST("fd-memory-no-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
2964 2965
            QEMU_CAPS_KVM);

M
Marc-André Lureau 已提交
2966
    DO_TEST_CAPS_LATEST("memfd-memory-numa");
2967
    DO_TEST_CAPS_LATEST("memfd-memory-default-hugepage");
M
Marc-André Lureau 已提交
2968

2969 2970 2971 2972 2973 2974 2975 2976
    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);

2977 2978 2979 2980 2981 2982 2983 2984 2985
    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 已提交
2986
    DO_TEST("vmcoreinfo", QEMU_CAPS_DEVICE_VMCOREINFO);
2987

2988 2989 2990
    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,
2991
            QEMU_CAPS_DEVICE_ISA_SERIAL,
2992
            QEMU_CAPS_HDA_DUPLEX,
2993 2994
            QEMU_CAPS_CCID_EMULATED,
            QEMU_CAPS_QCOW2_LUKS, QEMU_CAPS_OBJECT_SECRET);
2995
    DO_TEST("user-aliases2", QEMU_CAPS_DEVICE_IOH3420, QEMU_CAPS_ICH9_AHCI);
2996 2997
    DO_TEST("user-aliases-usb", QEMU_CAPS_KVM,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4,
2998
            QEMU_CAPS_ICH9_USB_EHCI1);
2999

3000
    DO_TEST_CAPS_VER("disk-virtio-scsi-reservations", "2.12.0");
3001
    DO_TEST_CAPS_LATEST("disk-virtio-scsi-reservations");
3002

3003
    DO_TEST_CAPS_LATEST("tseg-explicit-size");
3004 3005 3006
    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");
3007

3008
    DO_TEST("video-virtio-gpu-ccw", QEMU_CAPS_CCW,
3009 3010 3011 3012 3013 3014
            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);

3015
    DO_TEST("input-virtio-ccw", QEMU_CAPS_CCW,
3016 3017 3018 3019 3020 3021 3022
            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);

3023 3024
    DO_TEST_CAPS_LATEST("vhost-vsock");
    DO_TEST_CAPS_LATEST("vhost-vsock-auto");
3025 3026
    DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw", "s390x");
    DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw-auto", "s390x");
3027

3028
    DO_TEST_CAPS_VER("launch-security-sev", "2.12.0");
3029

L
Lubomir Rintel 已提交
3030 3031
    DO_TEST("riscv64-virt",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
3032 3033
    DO_TEST("riscv64-virt-pci",
            QEMU_CAPS_OBJECT_GPEX);
L
Lubomir Rintel 已提交
3034

3035 3036 3037 3038 3039
    /* 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");
3040
    DO_TEST_CAPS_LATEST_PARSE_ERROR("virtio-transitional-not-supported");
3041

3042 3043 3044 3045 3046 3047 3048 3049
    /* 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");

3050 3051 3052
    /* 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");
3053
    DO_TEST_CAPS_ARCH_LATEST("riscv64-virt-graphics", "riscv64");
3054
    DO_TEST_CAPS_ARCH_LATEST("s390x-ccw-graphics", "s390x");
3055 3056 3057
    DO_TEST_CAPS_ARCH_LATEST("x86_64-pc-graphics", "x86_64");
    DO_TEST_CAPS_ARCH_LATEST("x86_64-q35-graphics", "x86_64");

3058 3059 3060 3061 3062
    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");

3063 3064 3065
    DO_TEST_CAPS_LATEST("vhost-user-vga");
    DO_TEST_CAPS_LATEST("vhost-user-gpu-secondary");

3066 3067 3068
    DO_TEST_CAPS_VER("cpu-Icelake-Server-pconfig", "3.1.0");
    DO_TEST_CAPS_LATEST("cpu-Icelake-Server-pconfig");

3069 3070
    DO_TEST_CAPS_ARCH_LATEST("aarch64-default-cpu-kvm-virt-4.2", "aarch64");
    DO_TEST_CAPS_ARCH_LATEST("aarch64-default-cpu-tcg-virt-4.2", "aarch64");
3071 3072 3073 3074 3075 3076
    DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-kvm-pseries-2.7", "ppc64");
    DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-tcg-pseries-2.7", "ppc64");
    DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-kvm-pseries-3.1", "ppc64");
    DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-tcg-pseries-3.1", "ppc64");
    DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-kvm-pseries-4.2", "ppc64");
    DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-tcg-pseries-4.2", "ppc64");
3077 3078
    DO_TEST_CAPS_ARCH_LATEST("s390-default-cpu-kvm-ccw-virtio-4.2", "s390x");
    DO_TEST_CAPS_ARCH_LATEST("s390-default-cpu-tcg-ccw-virtio-4.2", "s390x");
3079 3080 3081 3082
    DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-kvm-pc-4.2", "x86_64");
    DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-tcg-pc-4.2", "x86_64");
    DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-kvm-q35-4.2", "x86_64");
    DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-tcg-q35-4.2", "x86_64");
3083

A
Andrea Bolognani 已提交
3084 3085 3086
    if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL)
        virFileDeleteTree(fakerootdir);

3087
    VIR_FREE(driver.config->nbdTLSx509certdir);
3088
    qemuTestDriverFree(&driver);
A
Andrea Bolognani 已提交
3089
    VIR_FREE(fakerootdir);
3090
    virHashFree(capslatest);
3091
    virFileWrapperClearPrefixes();
3092

3093
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
3094 3095
}

3096
VIR_TEST_MAIN_PRELOAD(mymain,
3097
                      VIR_TEST_MOCK("qemuxml2argv"),
M
Michal Privoznik 已提交
3098
                      VIR_TEST_MOCK("domaincaps"),
3099 3100 3101
                      VIR_TEST_MOCK("virrandom"),
                      VIR_TEST_MOCK("qemucpu"),
                      VIR_TEST_MOCK("virpci"))
3102

3103 3104
#else

3105 3106 3107 3108
int main(void)
{
    return EXIT_AM_SKIP;
}
3109 3110

#endif /* WITH_QEMU */