qemuxml2argvtest.c 118.0 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);
J
Ján Tomko 已提交
847
    DO_TEST_FAILURE("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 863 864

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

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
    DO_TEST("hugepages-default", NONE);
948
    DO_TEST("hugepages-default-2M", NONE);
949
    DO_TEST("hugepages-default-system-size", NONE);
950
    DO_TEST_PARSE_ERROR("hugepages-default-1G-nodeset-2M", NONE);
951
    DO_TEST("hugepages-nodeset", NONE);
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_FAILURE("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 1644 1645 1646 1647 1648 1649 1650 1651 1652
    DO_TEST_FAILURE("hostdev-subsys-mdev-vfio-ccw",
            QEMU_CAPS_CCW,
            QEMU_CAPS_CCW_CSSID_UNRESTRICTED);
    DO_TEST_PARSE_ERROR("hostdev-subsys-mdev-vfio-ccw-duplicate-address",
            QEMU_CAPS_CCW,
            QEMU_CAPS_CCW_CSSID_UNRESTRICTED,
            QEMU_CAPS_DEVICE_VFIO_CCW);
    DO_TEST_PARSE_ERROR("hostdev-subsys-mdev-vfio-ccw-invalid-address",
            QEMU_CAPS_CCW,
            QEMU_CAPS_CCW_CSSID_UNRESTRICTED,
            QEMU_CAPS_DEVICE_VFIO_CCW);

B
Boris Fiuczynski 已提交
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 1715
    DO_TEST_FAILURE("cpu-numa-disjoint", NONE);
    DO_TEST("cpu-numa-disjoint", QEMU_CAPS_NUMA);
1716 1717
    DO_TEST_FAILURE("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_RAM);
    DO_TEST_FAILURE("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 1781
    DO_TEST_FAILURE("numatune-memnode", NONE);

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

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
    DO_TEST_FAILURE("pseries-features",
1938
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
A
Andrea Bolognani 已提交
1939
    DO_TEST_PARSE_ERROR("pseries-features-invalid-machine", NONE);
1940

1941
    DO_TEST("pseries-serial-native",
1942
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1943 1944
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial+console-native",
1945
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1946 1947
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial-compat",
1948
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1949
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1950
    DO_TEST("pseries-serial-pci",
1951
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1952 1953
            QEMU_CAPS_DEVICE_PCI_SERIAL);
    DO_TEST("pseries-serial-usb",
1954
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1955 1956
            QEMU_CAPS_DEVICE_QEMU_XHCI,
            QEMU_CAPS_DEVICE_USB_SERIAL);
1957
    DO_TEST("pseries-console-native",
1958
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1959 1960
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-console-virtio",
1961
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
1962
    DO_TEST_PARSE_ERROR("pseries-serial-invalid-machine", NONE);
1963
    DO_TEST_PARSE_ERROR("pseries-spaprvio-invalid", "ppc64");
1964

1965
    DO_TEST("mach-virt-serial-native",
1966
            QEMU_CAPS_DEVICE_PL011);
1967
    DO_TEST("mach-virt-serial+console-native",
1968
            QEMU_CAPS_DEVICE_PL011);
1969
    DO_TEST("mach-virt-serial-compat",
1970
            QEMU_CAPS_DEVICE_PL011);
1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982
    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",
1983
            QEMU_CAPS_DEVICE_PL011);
1984 1985
    DO_TEST("mach-virt-console-virtio",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
1986 1987
    DO_TEST_PARSE_ERROR("mach-virt-serial-invalid-machine", NONE);

1988 1989
    DO_TEST("disk-ide-split", NONE);
    DO_TEST("disk-ide-wwn", QEMU_CAPS_IDE_DRIVE_WWN);
1990

1991
    DO_TEST("disk-geometry", NONE);
1992
    DO_TEST("disk-blockio", QEMU_CAPS_BLOCKIO);
1993

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

2069 2070
    DO_TEST("virtio-rng-default",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2071
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2072 2073
    DO_TEST("virtio-rng-random",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2074
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2075 2076
    DO_TEST("virtio-rng-egd",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2077
            QEMU_CAPS_OBJECT_RNG_EGD);
J
Ján Tomko 已提交
2078 2079
    DO_TEST_CAPS_VER("virtio-rng-egd-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("virtio-rng-egd-unix");
2080 2081 2082 2083
    DO_TEST("virtio-rng-multiple",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2084
    DO_TEST_PARSE_ERROR("virtio-rng-egd-crash",
2085 2086
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD);
2087
    DO_TEST("virtio-rng-ccw",
2088
            QEMU_CAPS_CCW,
2089 2090
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2091
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2092

2093
    DO_TEST("s390-allow-bogus-usb-none",
2094 2095 2096
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2097
    DO_TEST("s390-allow-bogus-usb-controller",
2098 2099 2100
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2101

2102
    DO_TEST("s390-panic-no-address",
2103
            QEMU_CAPS_CCW,
2104
            QEMU_CAPS_VIRTIO_S390);
2105
    DO_TEST_FAILURE("s390-panic-address",
2106
            QEMU_CAPS_CCW,
2107
            QEMU_CAPS_VIRTIO_S390);
2108
    DO_TEST("s390-panic-missing",
2109
            QEMU_CAPS_CCW,
2110
            QEMU_CAPS_VIRTIO_S390);
2111
    DO_TEST_PARSE_ERROR("s390-no-parallel",
2112
            QEMU_CAPS_CCW,
2113
            QEMU_CAPS_VIRTIO_S390);
2114
    DO_TEST("s390-serial",
2115
            QEMU_CAPS_CCW,
2116 2117 2118
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
    DO_TEST("s390-serial-2",
2119
            QEMU_CAPS_CCW,
2120 2121 2122 2123
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE,
            QEMU_CAPS_DEVICE_SCLPLMCONSOLE);
    DO_TEST("s390-serial-console",
2124
            QEMU_CAPS_CCW,
2125 2126
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
2127

2128
    DO_TEST("ppc-dtb",
J
Ján Tomko 已提交
2129
            QEMU_CAPS_KVM);
2130 2131
    DO_TEST("ppce500-serial",
            QEMU_CAPS_KVM);
O
Olivia Yin 已提交
2132

2133
    DO_TEST("tpm-passthrough",
2134
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
2135 2136
    DO_TEST("tpm-passthrough-crb",
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_CRB);
2137
    DO_TEST_PARSE_ERROR("tpm-no-backend-invalid",
2138
                        QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
2139
    DO_TEST_CAPS_LATEST("tpm-emulator");
2140
    DO_TEST_CAPS_LATEST("tpm-emulator-tpm2");
2141
    DO_TEST_CAPS_LATEST("tpm-emulator-tpm2-enc");
2142

2143 2144 2145 2146
    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);
2147

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

    /* Test automatic and manual setting of pcie-root-port attributes */
2350 2351
    DO_TEST("pcie-root-port",
            QEMU_CAPS_DEVICE_IOH3420,
2352
            QEMU_CAPS_ICH9_AHCI,
2353
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2354
            QEMU_CAPS_DEVICE_QXL);
2355 2356 2357 2358 2359 2360

    /* 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,
2361
            QEMU_CAPS_DEVICE_IOH3420);
2362
    DO_TEST("pcie-root-port-model-ioh3420",
2363
            QEMU_CAPS_DEVICE_IOH3420);
2364

2365 2366 2367 2368 2369 2370 2371
    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,
2372
            QEMU_CAPS_ICH9_USB_EHCI1,
2373
            QEMU_CAPS_NEC_USB_XHCI);
2374 2375 2376 2377 2378 2379 2380
    /* 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);
2381

2382
    DO_TEST_PARSE_ERROR("q35-wrong-root",
2383
            QEMU_CAPS_DEVICE_IOH3420,
2384
            QEMU_CAPS_ICH9_AHCI,
2385
            QEMU_CAPS_ICH9_USB_EHCI1,
2386
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2387
            QEMU_CAPS_DEVICE_QXL);
2388
    DO_TEST_PARSE_ERROR("440fx-wrong-root", NONE);
2389
    DO_TEST_PARSE_ERROR("440fx-ide-address-conflict", NONE);
2390

2391
    DO_TEST_PARSE_ERROR("pcie-root-port-too-many",
2392
            QEMU_CAPS_DEVICE_IOH3420,
2393
            QEMU_CAPS_ICH9_AHCI,
2394
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2395
            QEMU_CAPS_DEVICE_QXL);
2396

2397 2398 2399
    DO_TEST("pcie-switch-upstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
2400
            QEMU_CAPS_ICH9_AHCI,
2401
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2402
            QEMU_CAPS_DEVICE_QXL);
2403 2404 2405 2406
    DO_TEST("pcie-switch-downstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
2407
            QEMU_CAPS_ICH9_AHCI,
2408
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2409
            QEMU_CAPS_DEVICE_QXL);
2410

2411 2412 2413 2414 2415 2416
    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);
2417 2418
    DO_TEST_PARSE_ERROR("pci-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_PXB);
2419

2420 2421 2422 2423 2424 2425 2426 2427 2428 2429
    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);
2430 2431 2432
    DO_TEST_PARSE_ERROR("pcie-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_IOH3420,
                        QEMU_CAPS_DEVICE_PXB_PCIE);
2433

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

2476 2477
    DO_TEST_CAPS_VER("mlock-on", "3.0.0");
    DO_TEST_CAPS_VER("mlock-off", "3.0.0");
2478 2479
    DO_TEST_CAPS_LATEST("mlock-on");
    DO_TEST_CAPS_LATEST("mlock-off");
2480

2481 2482 2483 2484
    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);
2485

2486
    DO_TEST("hotplug-base",
2487
            QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_SCSI);
2488

2489 2490
    DO_TEST("pcihole64", QEMU_CAPS_I440FX_PCI_HOLE64_SIZE);
    DO_TEST_FAILURE("pcihole64-none", NONE);
2491
    DO_TEST("pcihole64-q35",
2492
            QEMU_CAPS_DEVICE_IOH3420,
2493
            QEMU_CAPS_ICH9_AHCI,
2494
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2495
            QEMU_CAPS_DEVICE_QXL,
2496 2497
            QEMU_CAPS_Q35_PCI_HOLE64_SIZE);

J
Ján Tomko 已提交
2498 2499
    DO_TEST("arm-vexpressa9-nodevs", NONE);
    DO_TEST("arm-vexpressa9-basic", NONE);
2500
    DO_TEST("arm-vexpressa9-virtio",
2501
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2502
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2503
    DO_TEST("arm-virt-virtio",
2504
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2505
            QEMU_CAPS_DEVICE_PL011,
2506
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2507

2508
    DO_TEST("aarch64-virt-virtio",
2509
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2510
            QEMU_CAPS_DEVICE_PL011,
2511
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2512 2513 2514 2515 2516 2517

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

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

2665 2666 2667 2668 2669 2670 2671 2672 2673
    /* 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");

2674
    qemuTestSetHostArch(&driver, VIR_ARCH_NONE);
2675

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2854
    /* VM XML has invalid arch/ostype/virttype combo, but the SKIP flag
2855 2856 2857 2858 2859
     * 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.
     */
2860
    DO_TEST_FULL("missing-machine",
2861
                 ARG_FLAGS, FLAG_EXPECT_FAILURE,
2862 2863
                 ARG_PARSEFLAGS, VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE,
                 ARG_QEMU_CAPS, NONE);
2864

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

2886
    DO_TEST("master-key", QEMU_CAPS_OBJECT_SECRET);
2887
    DO_TEST("usb-long-port-path",
J
Ján Tomko 已提交
2888
            QEMU_CAPS_USB_HUB);
2889
    DO_TEST_PARSE_ERROR("usb-too-long-port-path-invalid",
2890
                        QEMU_CAPS_USB_HUB);
2891

2892
    DO_TEST("acpi-table", NONE);
2893 2894 2895 2896 2897 2898

    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");
2899
    DO_TEST_CAPS_LATEST_PARSE_ERROR("intel-iommu-wrong-machine");
2900
    DO_TEST_CAPS_ARCH_LATEST("iommu-smmuv3", "aarch64");
2901

2902
    DO_TEST("cpu-hotplug-startup", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);
2903 2904 2905
    DO_TEST_PARSE_ERROR("cpu-hotplug-granularity",
                        QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);

2906 2907 2908
    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,
2909
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
2910
            QEMU_CAPS_DEVICE_VHOST_USER_GPU,
2911 2912
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
2913 2914 2915
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_PCI_IOMMU_PLATFORM,
            QEMU_CAPS_VIRTIO_PCI_ATS);
2916

J
Ján Tomko 已提交
2917
    DO_TEST("fd-memory-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
2918
            QEMU_CAPS_KVM);
J
Ján Tomko 已提交
2919
    DO_TEST("fd-memory-numa-topology2", QEMU_CAPS_OBJECT_MEMORY_FILE,
2920
            QEMU_CAPS_KVM);
J
Ján Tomko 已提交
2921
    DO_TEST("fd-memory-numa-topology3", QEMU_CAPS_OBJECT_MEMORY_FILE,
2922 2923
            QEMU_CAPS_KVM);

J
Ján Tomko 已提交
2924
    DO_TEST("fd-memory-no-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
2925 2926
            QEMU_CAPS_KVM);

M
Marc-André Lureau 已提交
2927
    DO_TEST_CAPS_LATEST("memfd-memory-numa");
2928
    DO_TEST_CAPS_LATEST("memfd-memory-default-hugepage");
M
Marc-André Lureau 已提交
2929

2930 2931 2932 2933 2934 2935 2936 2937
    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);

2938 2939 2940 2941 2942 2943 2944 2945 2946
    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 已提交
2947
    DO_TEST("vmcoreinfo", QEMU_CAPS_DEVICE_VMCOREINFO);
2948

2949 2950 2951
    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,
2952
            QEMU_CAPS_DEVICE_ISA_SERIAL,
2953
            QEMU_CAPS_HDA_DUPLEX,
2954 2955
            QEMU_CAPS_CCID_EMULATED,
            QEMU_CAPS_QCOW2_LUKS, QEMU_CAPS_OBJECT_SECRET);
2956
    DO_TEST("user-aliases2", QEMU_CAPS_DEVICE_IOH3420, QEMU_CAPS_ICH9_AHCI);
2957 2958
    DO_TEST("user-aliases-usb", QEMU_CAPS_KVM,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4,
2959
            QEMU_CAPS_ICH9_USB_EHCI1);
2960

2961
    DO_TEST_CAPS_VER("disk-virtio-scsi-reservations", "2.12.0");
2962
    DO_TEST_CAPS_LATEST("disk-virtio-scsi-reservations");
2963

2964
    DO_TEST_CAPS_LATEST("tseg-explicit-size");
2965 2966 2967
    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");
2968

2969
    DO_TEST("video-virtio-gpu-ccw", QEMU_CAPS_CCW,
2970 2971 2972 2973 2974 2975
            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);

2976
    DO_TEST("input-virtio-ccw", QEMU_CAPS_CCW,
2977 2978 2979 2980 2981 2982 2983
            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);

2984 2985
    DO_TEST_CAPS_LATEST("vhost-vsock");
    DO_TEST_CAPS_LATEST("vhost-vsock-auto");
2986 2987
    DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw", "s390x");
    DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw-auto", "s390x");
2988

2989
    DO_TEST_CAPS_VER("launch-security-sev", "2.12.0");
2990

L
Lubomir Rintel 已提交
2991 2992
    DO_TEST("riscv64-virt",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
2993 2994
    DO_TEST("riscv64-virt-pci",
            QEMU_CAPS_OBJECT_GPEX);
L
Lubomir Rintel 已提交
2995

2996 2997 2998 2999 3000
    /* 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");
3001
    DO_TEST_CAPS_LATEST_PARSE_ERROR("virtio-transitional-not-supported");
3002

3003 3004 3005 3006 3007 3008 3009 3010
    /* 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");

3011 3012 3013
    /* 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");
3014
    DO_TEST_CAPS_ARCH_LATEST("riscv64-virt-graphics", "riscv64");
3015
    DO_TEST_CAPS_ARCH_LATEST("s390x-ccw-graphics", "s390x");
3016 3017 3018
    DO_TEST_CAPS_ARCH_LATEST("x86_64-pc-graphics", "x86_64");
    DO_TEST_CAPS_ARCH_LATEST("x86_64-q35-graphics", "x86_64");

3019 3020 3021 3022 3023
    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");

3024 3025 3026
    DO_TEST_CAPS_LATEST("vhost-user-vga");
    DO_TEST_CAPS_LATEST("vhost-user-gpu-secondary");

3027 3028 3029
    DO_TEST_CAPS_VER("cpu-Icelake-Server-pconfig", "3.1.0");
    DO_TEST_CAPS_LATEST("cpu-Icelake-Server-pconfig");

3030 3031
    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");
3032 3033 3034 3035 3036 3037
    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");
3038 3039
    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");
3040 3041 3042 3043
    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");
3044

A
Andrea Bolognani 已提交
3045 3046 3047
    if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL)
        virFileDeleteTree(fakerootdir);

3048
    VIR_FREE(driver.config->nbdTLSx509certdir);
3049
    qemuTestDriverFree(&driver);
A
Andrea Bolognani 已提交
3050
    VIR_FREE(fakerootdir);
3051
    virHashFree(capslatest);
3052
    virFileWrapperClearPrefixes();
3053

3054
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
3055 3056
}

3057
VIR_TEST_MAIN_PRELOAD(mymain,
3058
                      VIR_TEST_MOCK("qemuxml2argv"),
M
Michal Privoznik 已提交
3059
                      VIR_TEST_MOCK("domaincaps"),
3060 3061 3062
                      VIR_TEST_MOCK("virrandom"),
                      VIR_TEST_MOCK("qemucpu"),
                      VIR_TEST_MOCK("virpci"))
3063

3064 3065
#else

3066 3067 3068 3069
int main(void)
{
    return EXIT_AM_SKIP;
}
3070 3071

#endif /* WITH_QEMU */