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

#include <unistd.h>
4 5 6 7

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

8 9
#include "testutils.h"

10 11
#ifdef WITH_QEMU

12
# include "internal.h"
13
# include "viralloc.h"
14
# include "qemu/qemu_alias.h"
15 16
# include "qemu/qemu_capabilities.h"
# include "qemu/qemu_command.h"
M
Matthias Bolte 已提交
17
# include "qemu/qemu_domain.h"
18
# include "qemu/qemu_migration.h"
19
# include "qemu/qemu_process.h"
20
# include "qemu/qemu_slirp.h"
21
# include "datatypes.h"
22
# include "conf/storage_conf.h"
23
# include "cpu/cpu_map.h"
24
# include "virstring.h"
25
# include "storage/storage_driver.h"
26
# include "virmock.h"
27 28
# include "virfilewrapper.h"
# include "configmake.h"
29

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

33
# include "testutilsqemu.h"
34

35 36
# define VIR_FROM_THIS VIR_FROM_QEMU

37
static virQEMUDriver driver;
38

39
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
    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)
{
M
Michal Privoznik 已提交
188
    return g_strdup_printf("/some/%s/device/%s", vol->key, vol->name);
189 190 191 192 193
}


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

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

204 205
    xmlpath = g_strdup_printf("%s/%s%s.xml", abs_srcdir, STORAGE_POOL_XML_PATH,
                              pool->name);
206

207
    if (virTestLoadFile(xmlpath, &xmlbuf) < 0) {
208 209 210 211 212 213
        virReportError(VIR_ERR_INTERNAL_ERROR,
                       "failed to load XML file '%s'",
                       xmlpath);
        goto cleanup;
    }

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

254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269

/* 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 已提交
270
fakeNWFilterBindingDelete(virNWFilterBindingPtr binding G_GNUC_UNUSED)
271 272 273 274 275 276 277 278 279 280
{
    return 0;
}


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

281 282 283 284

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

306
    if (ARCH_IS_X86(arch)) {
307
        if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM, x86Models,
308
                                         G_N_ELEMENTS(x86Models),
309
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
310
            virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU, x86Models,
311
                                         G_N_ELEMENTS(x86Models),
312
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
313 314
            return -1;

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

    return 0;
}


353
static int
354
testUpdateQEMUCaps(const struct testQemuInfo *info,
355 356
                   virDomainObjPtr vm,
                   virCapsPtr caps)
357
{
358
    if (!caps)
359
        return -1;
360

361 362
    virQEMUCapsSetArch(info->qemuCaps, vm->def->os.arch);

363 364
    virQEMUCapsInitQMPBasicArch(info->qemuCaps);

365 366
    if (testAddCPUModels(info->qemuCaps,
                         !!(info->flags & FLAG_SKIP_LEGACY_CPUS)) < 0)
367
        return -1;
368

369 370 371 372
    virQEMUCapsInitHostCPUModel(info->qemuCaps, caps->host.arch,
                                VIR_DOMAIN_VIRT_KVM);
    virQEMUCapsInitHostCPUModel(info->qemuCaps, caps->host.arch,
                                VIR_DOMAIN_VIRT_QEMU);
373

374
    return 0;
375 376 377
}


378 379 380 381 382 383
static int
testCheckExclusiveFlags(int flags)
{
    virCheckFlags(FLAG_EXPECT_FAILURE |
                  FLAG_EXPECT_PARSE_ERROR |
                  FLAG_FIPS |
384
                  FLAG_REAL_CAPS |
385
                  FLAG_SKIP_LEGACY_CPUS |
386
                  FLAG_SLIRP_HELPER |
387 388
                  0, -1);

389
    VIR_EXCLUSIVE_FLAGS_RET(FLAG_REAL_CAPS, FLAG_SKIP_LEGACY_CPUS, -1);
390 391 392 393
    return 0;
}


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

411
    if (info->arch != VIR_ARCH_NONE && info->arch != VIR_ARCH_X86_64)
412
        qemuTestSetHostArch(&driver, info->arch);
413

414 415
    memset(&monitor_chr, 0, sizeof(monitor_chr));

416
    if (!(conn = virGetConnect()))
417
        goto cleanup;
418

419
    conn->secretDriver = &fakeSecretDriver;
420
    conn->storageDriver = &fakeStorageDriver;
421
    conn->nwfilterDriver = &fakeNWFilterDriver;
422

423 424 425 426
    virSetConnectInterface(conn);
    virSetConnectNetwork(conn);
    virSetConnectNWFilter(conn);
    virSetConnectNodeDev(conn);
427 428 429
    virSetConnectSecret(conn);
    virSetConnectStorage(conn);

430 431 432
    if (virQEMUCapsGet(info->qemuCaps, QEMU_CAPS_ENABLE_FIPS))
        flags |= FLAG_FIPS;

433 434 435
    if (testCheckExclusiveFlags(info->flags) < 0)
        goto cleanup;

436
    if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0)
437 438 439
        goto cleanup;

    if (info->migrateFrom &&
440 441
        !(migrateURI = qemuMigrationDstGetURI(info->migrateFrom,
                                              info->migrateFd)))
442 443
        goto cleanup;

444
    if (!(vm = virDomainObjNew(driver.xmlopt)))
445
        goto cleanup;
446

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

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

464
    if (!virDomainDefCheckABIStability(vm->def, vm->def, driver.xmlopt)) {
465
        VIR_TEST_DEBUG("ABI stability check failed on %s", info->infile);
466
        goto cleanup;
467 468
    }

469
    vm->def->id = -1;
470

471
    if (qemuProcessPrepareMonitorChr(&monitor_chr, priv->libDir) < 0)
472
        goto cleanup;
473

474 475 476 477 478 479
    if (!(info->flags & FLAG_REAL_CAPS)) {
        if (testUpdateQEMUCaps(info, vm, driver.caps) < 0)
            goto cleanup;
        if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0)
            goto cleanup;
    }
480

481
    log = virTestLogContentAndReset();
482
    VIR_FREE(log);
483
    virResetLastError();
J
Jiri Denemark 已提交
484

485 486
    for (i = 0; i < vm->def->nhostdevs; i++) {
        virDomainHostdevDefPtr hostdev = vm->def->hostdevs[i];
487 488 489 490

        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) {
491
            hostdev->source.subsys.u.pci.backend = VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO;
492 493 494
        }
    }

495 496 497 498 499 500 501 502 503 504 505
    for (i = 0; i < vm->def->nfss; i++) {
        virDomainFSDefPtr fs = vm->def->fss[i];
        char *s;

        if (fs->fsdriver != VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS)
            continue;

        s = g_strdup_printf("/tmp/lib/domain--1-guest/fs%zu.vhost-fs.sock", i);
        QEMU_DOMAIN_FS_PRIVATE(fs)->vhostuser_fs_sock = s;
    }

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

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

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

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

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

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

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

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

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

586
 cleanup:
587 588
    VIR_FREE(log);
    VIR_FREE(actualargv);
589
    virDomainChrSourceDefClear(&monitor_chr);
E
Eric Blake 已提交
590
    virCommandFree(cmd);
591
    virObjectUnref(vm);
592 593
    virSetConnectSecret(NULL);
    virSetConnectStorage(NULL);
594
    virObjectUnref(conn);
595
    VIR_FREE(migrateURI);
596
    if (info->arch != VIR_ARCH_NONE && info->arch != VIR_ARCH_X86_64)
597
        qemuTestSetHostArch(&driver, VIR_ARCH_NONE);
598

599
    return ret;
600 601
}

602
static void
603
testInfoSetPaths(struct testQemuInfo *info,
604 605
                 const char *suffix)
{
606 607 608 609
    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 : "");
610 611
}

612 613
# define FAKEROOTDIRTEMPLATE abs_builddir "/fakerootdir-XXXXXX"

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

621 622 623 624 625 626 627 628 629
    fakerootdir = g_strdup(FAKEROOTDIRTEMPLATE);

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

    g_setenv("LIBVIRT_FAKE_ROOT_DIR", fakerootdir, TRUE);

630 631 632 633 634
    /* Set the timezone because we are mocking the time() function.
     * If we don't do that, then localtime() may return unpredictable
     * results. In order to detect things that just work by a blind
     * chance, we need to set an virtual timezone that no libvirt
     * developer resides in. */
635 636
    if (g_setenv("TZ", "VIR00:30", TRUE) == FALSE) {
        perror("g_setenv");
637 638 639
        return EXIT_FAILURE;
    }

640
    if (qemuTestDriverInit(&driver) < 0)
641
        return EXIT_FAILURE;
642 643

    driver.privileged = true;
644

645
    VIR_FREE(driver.config->defaultTLSx509certdir);
646
    driver.config->defaultTLSx509certdir = g_strdup("/etc/pki/qemu");
647
    VIR_FREE(driver.config->vncTLSx509certdir);
648
    driver.config->vncTLSx509certdir = g_strdup("/etc/pki/libvirt-vnc");
649
    VIR_FREE(driver.config->spiceTLSx509certdir);
650
    driver.config->spiceTLSx509certdir = g_strdup("/etc/pki/libvirt-spice");
651
    VIR_FREE(driver.config->chardevTLSx509certdir);
652
    driver.config->chardevTLSx509certdir = g_strdup("/etc/pki/libvirt-chardev");
653
    VIR_FREE(driver.config->vxhsTLSx509certdir);
654
    driver.config->vxhsTLSx509certdir = g_strdup("/etc/pki/libvirt-vxhs/dummy,path");
655
    VIR_FREE(driver.config->nbdTLSx509certdir);
656
    driver.config->nbdTLSx509certdir = g_strdup("/etc/pki/libvirt-nbd/dummy,path");
657

658
    VIR_FREE(driver.config->hugetlbfs);
659
    if (VIR_ALLOC_N(driver.config->hugetlbfs, 2) < 0)
660
        return EXIT_FAILURE;
661
    driver.config->nhugetlbfs = 2;
662 663
    driver.config->hugetlbfs[0].mnt_dir = g_strdup("/dev/hugepages2M");
    driver.config->hugetlbfs[1].mnt_dir = g_strdup("/dev/hugepages1G");
664 665
    driver.config->hugetlbfs[0].size = 2048;
    driver.config->hugetlbfs[0].deflt = true;
666
    driver.config->hugetlbfs[1].size = 1048576;
667
    driver.config->spiceTLS = 1;
668
    driver.config->spicePassword = g_strdup("123456");
669
    VIR_FREE(driver.config->memoryBackingDir);
670
    driver.config->memoryBackingDir = g_strdup("/var/lib/libvirt/qemu/ram");
671
    VIR_FREE(driver.config->nvramDir);
672
    driver.config->nvramDir = g_strdup("/var/lib/libvirt/qemu/nvram");
673

C
Cole Robinson 已提交
674
    capslatest = testQemuGetLatestCaps();
675
    if (!capslatest)
676 677
        return EXIT_FAILURE;

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

685 686 687 688 689 690 691 692 693 694
    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");

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

724 725 726 727 728 729
# define DO_TEST_CAPS_INTERNAL(name, arch, ver, ...) \
    DO_TEST_INTERNAL(name, "." arch "-" ver, \
                     ARG_CAPS_ARCH, arch, \
                     ARG_CAPS_VER, ver, \
                     __VA_ARGS__)

730
# define DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, ...) \
731
    DO_TEST_CAPS_INTERNAL(name, arch, "latest", __VA_ARGS__)
732

733 734 735
# define DO_TEST_CAPS_ARCH_VER_FULL(name, arch, ver, ...) \
    DO_TEST_CAPS_INTERNAL(name, arch, ver, __VA_ARGS__)

736
# define DO_TEST_CAPS_ARCH_LATEST(name, arch) \
737
    DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, ARG_END)
738

739
# define DO_TEST_CAPS_ARCH_VER(name, arch, ver) \
740
    DO_TEST_CAPS_ARCH_VER_FULL(name, arch, ver, ARG_END)
741

742
# define DO_TEST_CAPS_LATEST(name) \
743
    DO_TEST_CAPS_ARCH_LATEST(name, "x86_64")
744

745 746 747
# define DO_TEST_CAPS_VER(name, ver) \
    DO_TEST_CAPS_ARCH_VER(name, "x86_64", ver)

748 749 750
# define DO_TEST_CAPS_LATEST_PPC64(name) \
    DO_TEST_CAPS_ARCH_LATEST(name, "ppc64")

751 752
# define DO_TEST_CAPS_ARCH_LATEST_FAILURE(name, arch) \
    DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, \
753
                                  ARG_FLAGS, FLAG_EXPECT_FAILURE)
754

755 756 757 758 759 760 761 762 763 764 765 766
# 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, \
767
                                  ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR)
768

769 770 771 772 773 774 775 776 777 778
# 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)

779 780 781
# define DO_TEST_FULL(name, ...) \
    DO_TEST_INTERNAL(name, "", \
                     __VA_ARGS__, QEMU_CAPS_LAST)
782

783 784 785
/* All the following macros require an explicit QEMU_CAPS_* list
 * at the end of the argument list, or the NONE placeholder.
 * */
786
# define DO_TEST(name, ...) \
787
    DO_TEST_FULL(name, \
788
                 ARG_QEMU_CAPS, __VA_ARGS__)
789

790
# define DO_TEST_GIC(name, gic, ...) \
791
    DO_TEST_FULL(name, \
792
                 ARG_GIC, gic, \
793
                 ARG_QEMU_CAPS, __VA_ARGS__)
794

795
# define DO_TEST_FAILURE(name, ...) \
796 797
    DO_TEST_FULL(name, \
                 ARG_FLAGS, FLAG_EXPECT_FAILURE, \
798
                 ARG_QEMU_CAPS, __VA_ARGS__)
799

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

805
# define NONE QEMU_CAPS_LAST
806

807 808 809
    /* 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 */
810 811 812 813 814 815 816 817 818
    g_setenv("PATH", "/bin", TRUE);
    g_setenv("USER", "test", TRUE);
    g_setenv("LOGNAME", "test", TRUE);
    g_setenv("HOME", "/home/test", TRUE);
    g_unsetenv("TMPDIR");
    g_unsetenv("LD_PRELOAD");
    g_unsetenv("LD_LIBRARY_PATH");
    g_unsetenv("QEMU_AUDIO_DRV");
    g_unsetenv("SDL_AUDIODRIVER");
819

820
    DO_TEST("minimal", NONE);
821 822
    DO_TEST("minimal-sandbox",
            QEMU_CAPS_SECCOMP_BLACKLIST);
823
    DO_TEST_PARSE_ERROR("minimal-no-memory", NONE);
824
    DO_TEST("minimal-msg-timestamp", QEMU_CAPS_MSG_TIMESTAMP);
825 826 827 828

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

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

    DO_TEST("reboot-timeout-disabled", QEMU_CAPS_REBOOT_TIMEOUT);
    DO_TEST("reboot-timeout-enabled", QEMU_CAPS_REBOOT_TIMEOUT);
873
    DO_TEST_PARSE_ERROR("reboot-timeout-enabled", NONE);
874

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

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

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

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

932 933 934 935 936 937
    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");
938
    DO_TEST_CAPS_LATEST("hyperv-stimer-direct");
939

940 941 942
    DO_TEST("kvm-features", NONE);
    DO_TEST("kvm-features-off", NONE);

943 944 945
    DO_TEST("pmu-feature", NONE);
    DO_TEST("pmu-feature-off", NONE);

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

1179 1180
    DO_TEST_CAPS_LATEST("disk-slices");

1181 1182 1183
    DO_TEST("graphics-egl-headless",
            QEMU_CAPS_EGL_HEADLESS,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1184 1185
    DO_TEST_CAPS_LATEST("graphics-egl-headless");
    DO_TEST_CAPS_LATEST("graphics-egl-headless-rendernode");
1186

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

1209 1210
    driver.config->vncSASL = 1;
    VIR_FREE(driver.config->vncSASLdir);
1211
    driver.config->vncSASLdir = g_strdup("/root/.sasl2");
1212
    DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1213 1214
    driver.config->vncTLS = 1;
    driver.config->vncTLSx509verify = 1;
1215
    DO_TEST("graphics-vnc-tls", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1216 1217
    DO_TEST_CAPS_VER("graphics-vnc-tls", "2.4.0");
    DO_TEST_CAPS_LATEST("graphics-vnc-tls");
1218
    driver.config->vncTLSx509secretUUID = g_strdup("6fd3f62d-9fe7-4a4e-a869-7acd6376d8ea");
1219 1220
    DO_TEST_CAPS_LATEST("graphics-vnc-tls-secret");
    VIR_FREE(driver.config->vncTLSx509secretUUID);
1221
    driver.config->vncSASL = driver.config->vncTLSx509verify = driver.config->vncTLS = 0;
1222 1223
    VIR_FREE(driver.config->vncSASLdir);
    VIR_FREE(driver.config->vncTLSx509certdir);
1224 1225 1226 1227
    DO_TEST("graphics-vnc-egl-headless",
            QEMU_CAPS_VNC,
            QEMU_CAPS_EGL_HEADLESS,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1228

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

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

1351 1352 1353
    DO_TEST("hostdev-pci-multifunction",
            QEMU_CAPS_KVM,
            QEMU_CAPS_DEVICE_VFIO_PCI);
1354

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

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

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

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

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

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

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

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

1582 1583 1584
    DO_TEST("smbios", NONE);
    DO_TEST_PARSE_ERROR("smbios-date", NONE);
    DO_TEST_PARSE_ERROR("smbios-uuid-match", NONE);
1585

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

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

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

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

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

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

1711
    DO_TEST("smp", NONE);
1712
    DO_TEST("smp-dies", QEMU_CAPS_SMP_DIES);
1713

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

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

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

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

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

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

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

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

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

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

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

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

1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852
    DO_TEST("seclabel-dynamic", NONE);
    DO_TEST("seclabel-dynamic-baselabel", NONE);
    DO_TEST("seclabel-dynamic-override", NONE);
    DO_TEST("seclabel-dynamic-labelskip", NONE);
    DO_TEST("seclabel-dynamic-relabel", NONE);
    DO_TEST("seclabel-static", NONE);
    DO_TEST("seclabel-static-relabel", NONE);
    DO_TEST("seclabel-static-labelskip", NONE);
    DO_TEST("seclabel-none", NONE);
    DO_TEST("seclabel-dac-none", NONE);
    DO_TEST_PARSE_ERROR("seclabel-multiple", NONE);
    DO_TEST_PARSE_ERROR("seclabel-device-duplicates", NONE);
1853

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

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

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

1908
    qemuTestSetHostArch(&driver, VIR_ARCH_NONE);
1909

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

    DO_TEST("pseries-phb-simple",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
    DO_TEST("pseries-phb-default-missing",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
1923 1924 1925 1926 1927 1928
    DO_TEST("pseries-phb-numa-node",
            QEMU_CAPS_NUMA,
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_SPAPR_PCI_HOST_BRIDGE_NUMA_NODE);
    DO_TEST_PARSE_ERROR("pseries-default-phb-numa-node", NONE);
1929 1930 1931
    DO_TEST_PARSE_ERROR("pseries-phb-invalid-target-index-1", NONE);
    DO_TEST_PARSE_ERROR("pseries-phb-invalid-target-index-2", NONE);
    DO_TEST_PARSE_ERROR("pseries-phb-invalid-target-index-3", NONE);
1932

1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954
    DO_TEST("pseries-many-devices",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST("pseries-many-buses-1",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST("pseries-many-buses-2",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST("pseries-hostdevs-1",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST("pseries-hostdevs-2",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST("pseries-hostdevs-3",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VFIO_PCI);

1955
    DO_TEST("pseries-features",
1956
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1957
            QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE,
1958
            QEMU_CAPS_MACHINE_PSERIES_CAP_HTM,
1959
            QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV,
1960
            QEMU_CAPS_MACHINE_PSERIES_CAP_CCF_ASSIST,
1961
            QEMU_CAPS_MACHINE_PSERIES_CAP_CFPC,
1962
            QEMU_CAPS_MACHINE_PSERIES_CAP_SBBC,
1963
            QEMU_CAPS_MACHINE_PSERIES_CAP_IBS,
1964
            QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);
1965 1966 1967 1968 1969 1970 1971

    /* parse error: no QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT */
    DO_TEST_PARSE_ERROR("pseries-features",
                        QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_HTM,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV,
1972
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CCF_ASSIST,
1973
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CFPC,
1974 1975
                        QEMU_CAPS_MACHINE_PSERIES_CAP_SBBC,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_IBS);
1976 1977 1978 1979 1980 1981 1982

    /* parse error: no QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE */
    DO_TEST_PARSE_ERROR("pseries-features",
                        QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_HTM,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CCF_ASSIST,
1983
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CFPC,
1984
                        QEMU_CAPS_MACHINE_PSERIES_CAP_SBBC,
1985
                        QEMU_CAPS_MACHINE_PSERIES_CAP_IBS,
1986 1987 1988 1989 1990 1991 1992 1993
                        QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);

    /* parse error: no QEMU_CAPS_MACHINE_PSERIES_CAP_HTM */
    DO_TEST_PARSE_ERROR("pseries-features",
                        QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CCF_ASSIST,
1994
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CFPC,
1995
                        QEMU_CAPS_MACHINE_PSERIES_CAP_SBBC,
1996
                        QEMU_CAPS_MACHINE_PSERIES_CAP_IBS,
1997 1998 1999 2000 2001 2002 2003 2004
                        QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);

    /* parse error: no QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV */
    DO_TEST_PARSE_ERROR("pseries-features",
                        QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_HTM,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CCF_ASSIST,
2005
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CFPC,
2006
                        QEMU_CAPS_MACHINE_PSERIES_CAP_SBBC,
2007
                        QEMU_CAPS_MACHINE_PSERIES_CAP_IBS,
2008 2009 2010 2011 2012 2013 2014 2015
                        QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);

    /* parse error: no QEMU_CAPS_MACHINE_PSERIES_CAP_CCF_ASSIST */
    DO_TEST_PARSE_ERROR("pseries-features",
                        QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_HTM,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV,
2016
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CFPC,
2017
                        QEMU_CAPS_MACHINE_PSERIES_CAP_SBBC,
2018
                        QEMU_CAPS_MACHINE_PSERIES_CAP_IBS,
2019 2020
                        QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);

2021 2022 2023 2024 2025 2026 2027
    /* parse error: no QEMU_CAPS_MACHINE_PSERIES_CFPC */
    DO_TEST_PARSE_ERROR("pseries-features",
                        QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
                        QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_HTM,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV,
2028
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CCF_ASSIST,
2029 2030
                        QEMU_CAPS_MACHINE_PSERIES_CAP_SBBC,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_IBS);
2031 2032 2033 2034 2035 2036 2037 2038 2039

    /* parse error: no QEMU_CAPS_MACHINE_PSERIES_SBBC */
    DO_TEST_PARSE_ERROR("pseries-features",
                        QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
                        QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_HTM,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CCF_ASSIST,
2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052
                        QEMU_CAPS_MACHINE_PSERIES_CAP_CFPC,
                        QEMU_CAPS_MACHINE_PSERIES_CAP_IBS);

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

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

2056
    DO_TEST("pseries-serial-native",
2057
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2058 2059
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial+console-native",
2060
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2061 2062
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial-compat",
2063
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2064
            QEMU_CAPS_DEVICE_SPAPR_VTY);
2065
    DO_TEST("pseries-serial-pci",
2066
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2067 2068
            QEMU_CAPS_DEVICE_PCI_SERIAL);
    DO_TEST("pseries-serial-usb",
2069
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2070 2071
            QEMU_CAPS_DEVICE_QEMU_XHCI,
            QEMU_CAPS_DEVICE_USB_SERIAL);
2072
    DO_TEST("pseries-console-native",
2073
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2074 2075
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-console-virtio",
2076
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
2077
    DO_TEST_PARSE_ERROR("pseries-serial-invalid-machine", NONE);
2078
    DO_TEST_PARSE_ERROR("pseries-spaprvio-invalid", "ppc64");
2079

2080
    DO_TEST("mach-virt-serial-native",
2081
            QEMU_CAPS_DEVICE_PL011);
2082
    DO_TEST("mach-virt-serial+console-native",
2083
            QEMU_CAPS_DEVICE_PL011);
2084
    DO_TEST("mach-virt-serial-compat",
2085
            QEMU_CAPS_DEVICE_PL011);
2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097
    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",
2098
            QEMU_CAPS_DEVICE_PL011);
2099 2100
    DO_TEST("mach-virt-console-virtio",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
2101 2102
    DO_TEST_PARSE_ERROR("mach-virt-serial-invalid-machine", NONE);

2103 2104
    DO_TEST("disk-ide-split", NONE);
    DO_TEST("disk-ide-wwn", QEMU_CAPS_IDE_DRIVE_WWN);
2105

2106
    DO_TEST("disk-geometry", NONE);
2107
    DO_TEST("disk-blockio", QEMU_CAPS_BLOCKIO);
2108

2109
    DO_TEST("video-device-pciaddr-default",
2110 2111
            QEMU_CAPS_KVM,
            QEMU_CAPS_VNC,
2112
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2113
            QEMU_CAPS_DEVICE_QXL);
2114
    DO_TEST("video-vga-nodevice", QEMU_CAPS_DEVICE_VGA);
2115
    DO_TEST("video-vga-device", QEMU_CAPS_DEVICE_VGA,
2116
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2117
    DO_TEST("video-vga-device-vgamem", QEMU_CAPS_DEVICE_VGA,
2118
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_VGA_VGAMEM);
2119
    DO_TEST("video-qxl-nodevice", QEMU_CAPS_DEVICE_QXL);
2120
    DO_TEST("video-qxl-device",
2121
            QEMU_CAPS_DEVICE_QXL,
2122
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2123
    DO_TEST("video-qxl-device-vgamem",
2124
            QEMU_CAPS_DEVICE_QXL,
2125
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2126
            QEMU_CAPS_QXL_VGAMEM);
2127
    DO_TEST_CAPS_LATEST("video-qxl-device-vram64");
2128
    DO_TEST("video-qxl-sec-device",
2129
            QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2130
    DO_TEST("video-qxl-sec-device-vgamem",
2131 2132
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2133
            QEMU_CAPS_QXL_VGAMEM);
2134
    DO_TEST_CAPS_LATEST("video-qxl-sec-device-vram64");
2135 2136 2137
    DO_TEST("video-qxl-heads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
2138
            QEMU_CAPS_QXL_MAX_OUTPUTS);
2139 2140 2141
    DO_TEST("video-vga-qxl-heads",
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_QXL_MAX_OUTPUTS);
2142 2143 2144
    DO_TEST("video-qxl-noheads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
2145
            QEMU_CAPS_QXL_MAX_OUTPUTS);
2146 2147 2148 2149
    DO_TEST("video-qxl-resolution",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_QXL_VGAMEM);
M
Marc-André Lureau 已提交
2150
    DO_TEST("video-virtio-gpu-device",
2151
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
M
Marc-André Lureau 已提交
2152
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2153
    DO_TEST("video-virtio-gpu-virgl",
2154
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
2155
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
2156
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2157 2158
    DO_TEST("video-virtio-gpu-spice-gl",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
2159
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
2160 2161
            QEMU_CAPS_SPICE,
            QEMU_CAPS_SPICE_GL,
2162
            QEMU_CAPS_SPICE_RENDERNODE,
2163
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2164 2165 2166 2167 2168
    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);
2169 2170 2171
    DO_TEST("video-virtio-gpu-secondary",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2172 2173 2174
    DO_TEST("video-virtio-vga",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIRTIO_VGA,
2175 2176
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_GPU_MAX_OUTPUTS);
2177
    DO_TEST_CAPS_LATEST("video-bochs-display-device");
2178
    DO_TEST_CAPS_LATEST("video-ramfb-display-device");
2179 2180 2181
    DO_TEST("video-none-device",
            QEMU_CAPS_VNC);
    DO_TEST_PARSE_ERROR("video-invalid-multiple-devices", NONE);
2182
    DO_TEST_PARSE_ERROR("default-video-type-x86_64-caps-test-0", NONE);
2183

2184 2185 2186 2187 2188
    DO_TEST_CAPS_ARCH_LATEST("default-video-type-aarch64", "aarch64");
    DO_TEST_CAPS_ARCH_LATEST("default-video-type-ppc64", "ppc64");
    DO_TEST_CAPS_ARCH_LATEST("default-video-type-riscv64", "riscv64");
    DO_TEST_CAPS_ARCH_LATEST("default-video-type-s390x", "s390x");

2189 2190
    DO_TEST("virtio-rng-default",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2191
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2192 2193
    DO_TEST("virtio-rng-random",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2194
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2195 2196
    DO_TEST("virtio-rng-egd",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2197
            QEMU_CAPS_OBJECT_RNG_EGD);
H
Han Han 已提交
2198
    DO_TEST_CAPS_LATEST("virtio-rng-builtin");
J
Ján Tomko 已提交
2199 2200
    DO_TEST_CAPS_VER("virtio-rng-egd-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("virtio-rng-egd-unix");
2201 2202 2203 2204
    DO_TEST("virtio-rng-multiple",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2205
    DO_TEST_PARSE_ERROR("virtio-rng-egd-crash",
2206 2207
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD);
2208
    DO_TEST("virtio-rng-ccw",
2209
            QEMU_CAPS_CCW,
2210 2211
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2212
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2213

2214
    DO_TEST("s390-allow-bogus-usb-none",
2215 2216 2217
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2218
    DO_TEST("s390-allow-bogus-usb-controller",
2219 2220 2221
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2222

2223
    DO_TEST("s390-panic-no-address",
2224
            QEMU_CAPS_CCW,
2225
            QEMU_CAPS_VIRTIO_S390);
2226
    DO_TEST_FAILURE("s390-panic-address",
2227
            QEMU_CAPS_CCW,
2228
            QEMU_CAPS_VIRTIO_S390);
2229
    DO_TEST("s390-panic-missing",
2230
            QEMU_CAPS_CCW,
2231
            QEMU_CAPS_VIRTIO_S390);
2232
    DO_TEST_PARSE_ERROR("s390-no-parallel",
2233
            QEMU_CAPS_CCW,
2234
            QEMU_CAPS_VIRTIO_S390);
2235
    DO_TEST("s390-serial",
2236
            QEMU_CAPS_CCW,
2237 2238 2239
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
    DO_TEST("s390-serial-2",
2240
            QEMU_CAPS_CCW,
2241 2242 2243 2244
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE,
            QEMU_CAPS_DEVICE_SCLPLMCONSOLE);
    DO_TEST("s390-serial-console",
2245
            QEMU_CAPS_CCW,
2246 2247
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
2248

2249
    DO_TEST("ppc-dtb",
J
Ján Tomko 已提交
2250
            QEMU_CAPS_KVM);
2251 2252
    DO_TEST("ppce500-serial",
            QEMU_CAPS_KVM);
O
Olivia Yin 已提交
2253

2254 2255
    DO_TEST_CAPS_LATEST("tpm-passthrough");
    DO_TEST_CAPS_LATEST("tpm-passthrough-crb");
2256
    DO_TEST_PARSE_ERROR("tpm-no-backend-invalid",
2257
                        QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
2258
    DO_TEST_CAPS_LATEST("tpm-emulator");
2259
    DO_TEST_CAPS_LATEST("tpm-emulator-tpm2");
2260
    DO_TEST_CAPS_LATEST("tpm-emulator-tpm2-enc");
2261
    DO_TEST_CAPS_LATEST_PPC64("tpm-emulator-spapr");
2262

2263 2264 2265 2266
    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);
2267

2268 2269 2270 2271 2272 2273
    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,
2274
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
2275 2276
    DO_TEST("pci-autoadd-idx",
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2277 2278
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("pci-autofill-addr", QEMU_CAPS_DEVICE_CIRRUS_VGA);
2279
    DO_TEST("pci-many",
2280
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
2281
    DO_TEST("pci-bridge-many-disks",
2282
            QEMU_CAPS_DEVICE_PCI_BRIDGE);
L
Laine Stump 已提交
2283
    DO_TEST("pcie-root",
2284 2285 2286 2287
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL);
2288
    DO_TEST("q35",
2289
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2290
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2291
            QEMU_CAPS_DEVICE_IOH3420,
2292
            QEMU_CAPS_ICH9_AHCI,
2293
            QEMU_CAPS_ICH9_USB_EHCI1,
2294
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2295
            QEMU_CAPS_DEVICE_QXL);
2296 2297 2298 2299 2300 2301 2302 2303
    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);
2304
    DO_TEST("q35-pm-disable",
2305
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2306
            QEMU_CAPS_DEVICE_IOH3420,
2307 2308 2309 2310
            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",
2311
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2312
            QEMU_CAPS_DEVICE_IOH3420,
2313 2314
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4);
2315
    DO_TEST("q35-usb2",
2316
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2317
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2318
            QEMU_CAPS_DEVICE_IOH3420,
2319
            QEMU_CAPS_ICH9_AHCI,
2320
            QEMU_CAPS_ICH9_USB_EHCI1,
2321
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2322
            QEMU_CAPS_DEVICE_QXL);
2323
    DO_TEST("q35-usb2-multi",
2324
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2325
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2326
            QEMU_CAPS_DEVICE_IOH3420,
2327
            QEMU_CAPS_ICH9_AHCI,
2328
            QEMU_CAPS_ICH9_USB_EHCI1,
2329
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2330
            QEMU_CAPS_DEVICE_QXL);
2331
    DO_TEST("q35-usb2-reorder",
2332
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2333
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2334
            QEMU_CAPS_DEVICE_IOH3420,
2335
            QEMU_CAPS_ICH9_AHCI,
2336
            QEMU_CAPS_ICH9_USB_EHCI1,
2337
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2338
            QEMU_CAPS_DEVICE_QXL);
2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356
    /* 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,
2357
            QEMU_CAPS_NEC_USB_XHCI,
2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370
            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,
2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390
            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,
2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404
            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,
2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423
            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,
2424 2425 2426 2427 2428
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
2429 2430 2431 2432 2433 2434 2435 2436
            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,
2437
            QEMU_CAPS_NEC_USB_XHCI,
2438
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2439 2440
    DO_TEST("q35-virt-manager-basic",
            QEMU_CAPS_KVM,
2441
            QEMU_CAPS_MACHINE_VMPORT_OPT,
2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465
            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,
2466
            QEMU_CAPS_DEVICE_ISA_SERIAL,
2467
            QEMU_CAPS_USB_REDIR);
2468 2469

    /* Test automatic and manual setting of pcie-root-port attributes */
2470 2471
    DO_TEST("pcie-root-port",
            QEMU_CAPS_DEVICE_IOH3420,
2472
            QEMU_CAPS_ICH9_AHCI,
2473
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2474
            QEMU_CAPS_DEVICE_QXL);
2475 2476 2477 2478 2479 2480

    /* 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,
2481
            QEMU_CAPS_DEVICE_IOH3420);
2482
    DO_TEST("pcie-root-port-model-ioh3420",
2483
            QEMU_CAPS_DEVICE_IOH3420);
2484
    DO_TEST_CAPS_LATEST("pcie-root-port-nohotplug");
2485

2486 2487 2488 2489 2490 2491 2492
    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,
2493
            QEMU_CAPS_ICH9_USB_EHCI1,
2494
            QEMU_CAPS_NEC_USB_XHCI);
2495 2496 2497 2498 2499 2500 2501
    /* 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);
2502

2503
    DO_TEST_PARSE_ERROR("q35-wrong-root",
2504
            QEMU_CAPS_DEVICE_IOH3420,
2505
            QEMU_CAPS_ICH9_AHCI,
2506
            QEMU_CAPS_ICH9_USB_EHCI1,
2507
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2508
            QEMU_CAPS_DEVICE_QXL);
2509
    DO_TEST_PARSE_ERROR("440fx-wrong-root", NONE);
2510
    DO_TEST_PARSE_ERROR("440fx-ide-address-conflict", NONE);
2511

2512
    DO_TEST_PARSE_ERROR("pcie-root-port-too-many",
2513
            QEMU_CAPS_DEVICE_IOH3420,
2514
            QEMU_CAPS_ICH9_AHCI,
2515
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2516
            QEMU_CAPS_DEVICE_QXL);
2517

2518 2519 2520
    DO_TEST("pcie-switch-upstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
2521
            QEMU_CAPS_ICH9_AHCI,
2522
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2523
            QEMU_CAPS_DEVICE_QXL);
2524 2525 2526 2527
    DO_TEST("pcie-switch-downstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
2528
            QEMU_CAPS_ICH9_AHCI,
2529
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2530
            QEMU_CAPS_DEVICE_QXL);
2531

2532 2533 2534 2535 2536 2537
    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);
2538 2539
    DO_TEST_PARSE_ERROR("pci-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_PXB);
2540

2541 2542 2543 2544 2545 2546 2547 2548 2549 2550
    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);
2551 2552 2553
    DO_TEST_PARSE_ERROR("pcie-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_IOH3420,
                        QEMU_CAPS_DEVICE_PXB_PCIE);
2554

2555
    DO_TEST("hostdev-scsi-lsi",
2556 2557
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2558
    DO_TEST("hostdev-scsi-virtio-scsi",
2559 2560
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2561
    DO_TEST("hostdev-scsi-readonly",
2562 2563
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2564
    DO_TEST("hostdev-scsi-virtio-scsi",
2565 2566
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2567
    DO_TEST("hostdev-scsi-lsi-iscsi",
2568 2569
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2570
    DO_TEST("hostdev-scsi-lsi-iscsi-auth",
2571 2572
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2573
    DO_TEST("hostdev-scsi-virtio-iscsi",
2574 2575
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2576
    DO_TEST("hostdev-scsi-virtio-iscsi-auth",
2577 2578
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2579
    DO_TEST("disk-hostdev-scsi-virtio-iscsi-auth-AES",
2580 2581 2582
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_OBJECT_SECRET,
2583
            QEMU_CAPS_ISCSI_PASSWORD_SECRET);
2584 2585
    DO_TEST("hostdev-scsi-vhost-scsi-ccw",
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_VHOST_SCSI,
2586
            QEMU_CAPS_CCW);
2587
    DO_TEST("hostdev-scsi-vhost-scsi-pci",
2588 2589
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VHOST_SCSI);
2590
    DO_TEST_CAPS_LATEST_PARSE_ERROR("hostdev-scsi-vhost-scsi-pci-boot-fail");
2591 2592 2593 2594 2595
    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);
2596

2597 2598
    DO_TEST_CAPS_VER("mlock-on", "3.0.0");
    DO_TEST_CAPS_VER("mlock-off", "3.0.0");
2599 2600
    DO_TEST_CAPS_LATEST("mlock-on");
    DO_TEST_CAPS_LATEST("mlock-off");
2601

2602 2603 2604 2605
    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);
2606

2607
    DO_TEST("hotplug-base",
2608
            QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_SCSI);
2609

2610
    DO_TEST("pcihole64", QEMU_CAPS_I440FX_PCI_HOLE64_SIZE);
2611
    DO_TEST_PARSE_ERROR("pcihole64-none", NONE);
2612
    DO_TEST("pcihole64-q35",
2613
            QEMU_CAPS_DEVICE_IOH3420,
2614
            QEMU_CAPS_ICH9_AHCI,
2615
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2616
            QEMU_CAPS_DEVICE_QXL,
2617 2618
            QEMU_CAPS_Q35_PCI_HOLE64_SIZE);

J
Ján Tomko 已提交
2619 2620
    DO_TEST("arm-vexpressa9-nodevs", NONE);
    DO_TEST("arm-vexpressa9-basic", NONE);
2621
    DO_TEST("arm-vexpressa9-virtio",
2622
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2623
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2624
    DO_TEST("arm-virt-virtio",
2625
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2626
            QEMU_CAPS_DEVICE_PL011,
2627
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2628

2629
    DO_TEST("aarch64-virt-virtio",
2630
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2631
            QEMU_CAPS_DEVICE_PL011,
2632
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2633 2634 2635 2636 2637 2638

    /* 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",
2639
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
2640 2641 2642
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2643
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2644
            QEMU_CAPS_DEVICE_IOH3420,
2645
            QEMU_CAPS_DEVICE_PL011,
2646
            QEMU_CAPS_VIRTIO_SCSI);
2647
    DO_TEST("aarch64-virt-2.6-virtio-pci-default",
2648
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2649 2650
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2651
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2652
            QEMU_CAPS_DEVICE_PL011,
2653
            QEMU_CAPS_DEVICE_IOH3420);
2654 2655 2656
    /* Example of using virtio-pci with no explicit PCI controller
       but with manual PCI addresses */
    DO_TEST("aarch64-virtio-pci-manual-addresses",
2657
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2658 2659
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2660 2661 2662
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_VIRTIO_SCSI);
2663
    DO_TEST("aarch64-video-virtio-gpu-pci",
2664
            QEMU_CAPS_OBJECT_GPEX,
2665
            QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_IOH3420,
2666
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2667
            QEMU_CAPS_DEVICE_VIRTIO_GPU);
2668
    DO_TEST("aarch64-video-default",
2669
            QEMU_CAPS_OBJECT_GPEX,
2670
            QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_IOH3420,
2671
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2672 2673
            QEMU_CAPS_DEVICE_VIRTIO_GPU, QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_VNC);
2674
    DO_TEST("aarch64-aavmf-virtio-mmio",
2675
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2676
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2677 2678
    DO_TEST("aarch64-virt-default-nic",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
2679
    qemuTestSetHostArch(&driver, VIR_ARCH_AARCH64);
2680
    DO_TEST("aarch64-cpu-passthrough",
2681
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2682
            QEMU_CAPS_KVM);
2683
    DO_TEST_GIC("aarch64-gic-none", GIC_NONE,
2684
            QEMU_CAPS_KVM,
2685
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2686
    DO_TEST_GIC("aarch64-gic-none-v2", GIC_V2,
2687
            QEMU_CAPS_KVM,
2688 2689
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-none-v3", GIC_V3,
2690
            QEMU_CAPS_KVM,
2691
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2692
    DO_TEST_GIC("aarch64-gic-none-both", GIC_BOTH,
2693
            QEMU_CAPS_KVM,
2694
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2695 2696
    DO_TEST_GIC("aarch64-gic-none-tcg", GIC_BOTH,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2697
    DO_TEST_GIC("aarch64-gic-default", GIC_NONE,
2698
            QEMU_CAPS_KVM,
2699
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
A
Andrea Bolognani 已提交
2700
    DO_TEST_GIC("aarch64-gic-default-v2", GIC_V2,
2701
            QEMU_CAPS_KVM,
2702
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
A
Andrea Bolognani 已提交
2703
    DO_TEST_GIC("aarch64-gic-default-v3", GIC_V3,
2704
            QEMU_CAPS_KVM,
2705
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
A
Andrea Bolognani 已提交
2706
    DO_TEST_GIC("aarch64-gic-default-both", GIC_BOTH,
2707
            QEMU_CAPS_KVM,
2708 2709
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v2", GIC_NONE,
2710
            QEMU_CAPS_KVM,
2711 2712
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v2", GIC_V2,
2713
            QEMU_CAPS_KVM,
2714 2715
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v2", GIC_V3,
2716
            QEMU_CAPS_KVM,
2717
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2718
    DO_TEST_GIC("aarch64-gic-v2", GIC_BOTH,
2719
            QEMU_CAPS_KVM,
2720
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2721
    DO_TEST_FAILURE("aarch64-gic-v3",
2722
            QEMU_CAPS_KVM, NONE);
2723
    DO_TEST_GIC("aarch64-gic-v3", GIC_NONE,
2724
            QEMU_CAPS_KVM,
2725 2726
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v3", GIC_V2,
2727
            QEMU_CAPS_KVM,
2728 2729
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v3", GIC_V3,
2730
            QEMU_CAPS_KVM,
2731 2732
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v3", GIC_BOTH,
2733
            QEMU_CAPS_KVM,
2734
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2735
    DO_TEST_FAILURE("aarch64-gic-host",
2736
            QEMU_CAPS_KVM, NONE);
2737
    DO_TEST_GIC("aarch64-gic-host", GIC_NONE,
2738
            QEMU_CAPS_KVM,
2739 2740
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-host", GIC_V2,
2741
            QEMU_CAPS_KVM,
2742 2743
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-host", GIC_V3,
2744
            QEMU_CAPS_KVM,
2745 2746
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-host", GIC_BOTH,
2747
            QEMU_CAPS_KVM,
2748
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2749
    DO_TEST_PARSE_ERROR("aarch64-gic-invalid",
2750
            QEMU_CAPS_KVM,
2751
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2752
    DO_TEST_PARSE_ERROR("aarch64-gic-not-virt",
2753
                        QEMU_CAPS_KVM,
2754 2755
                        QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_PARSE_ERROR("aarch64-gic-not-arm",
2756
                        QEMU_CAPS_KVM,
2757
                        QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2758
    DO_TEST("aarch64-kvm-32-on-64",
2759
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2760
            QEMU_CAPS_DEVICE_PL011,
A
Andrea Bolognani 已提交
2761
            QEMU_CAPS_KVM, QEMU_CAPS_CPU_AARCH64_OFF);
2762
    DO_TEST_FAILURE("aarch64-kvm-32-on-64",
2763
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2764
            QEMU_CAPS_KVM);
2765 2766 2767 2768 2769 2770 2771
    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);
2772 2773 2774 2775
    DO_TEST("aarch64-traditional-pci",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2776
            QEMU_CAPS_DEVICE_PCIE_PCI_BRIDGE,
2777 2778
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_SERIAL);
2779 2780 2781 2782 2783 2784 2785

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

2786 2787 2788 2789 2790 2791 2792 2793 2794
    /* 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");

2795 2796
    DO_TEST_CAPS_ARCH_LATEST("clock-timer-armvtimer", "aarch64");

2797
    qemuTestSetHostArch(&driver, VIR_ARCH_NONE);
2798

2799
    DO_TEST("kvm-pit-delay", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2800
    DO_TEST("kvm-pit-discard", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2801

2802 2803 2804 2805
    DO_TEST("panic",
            QEMU_CAPS_DEVICE_PANIC);
    DO_TEST("panic-double",
            QEMU_CAPS_DEVICE_PANIC);
H
Hu Tao 已提交
2806

2807 2808
    DO_TEST("panic-no-address",
            QEMU_CAPS_DEVICE_PANIC);
2809

2810 2811
    DO_TEST("fips-enabled", QEMU_CAPS_ENABLE_FIPS);

J
Ján Tomko 已提交
2812
    DO_TEST("shmem", QEMU_CAPS_DEVICE_IVSHMEM);
2813 2814 2815
    DO_TEST("shmem-plain-doorbell", QEMU_CAPS_DEVICE_IVSHMEM,
            QEMU_CAPS_DEVICE_IVSHMEM_PLAIN,
            QEMU_CAPS_DEVICE_IVSHMEM_DOORBELL);
2816
    DO_TEST_FAILURE("shmem", NONE);
J
Ján Tomko 已提交
2817
    DO_TEST_FAILURE("shmem-invalid-size",
2818
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2819
    DO_TEST_FAILURE("shmem-invalid-address",
2820
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2821
    DO_TEST_FAILURE("shmem-small-size",
2822
                    QEMU_CAPS_DEVICE_IVSHMEM);
2823
    DO_TEST_PARSE_ERROR("shmem-msi-only", NONE);
A
Andrea Bolognani 已提交
2824
    DO_TEST("cpu-host-passthrough-features", QEMU_CAPS_KVM);
2825

2826
    DO_TEST_FAILURE("memory-align-fail", NONE);
2827
    DO_TEST_FAILURE("memory-hotplug-nonuma", QEMU_CAPS_DEVICE_PC_DIMM);
M
Michal Privoznik 已提交
2828
    DO_TEST("memory-hotplug", NONE);
2829
    DO_TEST("memory-hotplug", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA);
2830
    DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2831
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2832
    DO_TEST("memory-hotplug-dimm-addr", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2833
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2834
    DO_TEST("memory-hotplug-ppc64-nonuma", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2835
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2836
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2837 2838 2839
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm");
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-access");
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-label");
2840
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-align");
2841
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-pmem");
2842
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-readonly");
2843
    DO_TEST_CAPS_ARCH_LATEST("memory-hotplug-nvdimm-ppc64", "ppc64");
2844

2845
    DO_TEST("machine-aeskeywrap-on-caps",
2846
            QEMU_CAPS_AES_KEY_WRAP,
2847
            QEMU_CAPS_DEA_KEY_WRAP,
2848
            QEMU_CAPS_VIRTIO_SCSI,
2849
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2850
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps",
2851
                    QEMU_CAPS_VIRTIO_SCSI,
2852
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2853 2854 2855
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps", NONE);

    DO_TEST("machine-aeskeywrap-on-cap",
2856
            QEMU_CAPS_AES_KEY_WRAP,
2857
            QEMU_CAPS_VIRTIO_SCSI,
2858
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2859
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap",
2860
                    QEMU_CAPS_VIRTIO_SCSI,
2861
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2862 2863 2864
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap", NONE);

    DO_TEST("machine-aeskeywrap-off-caps",
2865
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2866
            QEMU_CAPS_VIRTIO_SCSI,
2867
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2868
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps",
2869
                    QEMU_CAPS_VIRTIO_SCSI,
2870
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2871 2872 2873
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", NONE);

    DO_TEST("machine-aeskeywrap-off-cap",
2874
            QEMU_CAPS_AES_KEY_WRAP,
2875
            QEMU_CAPS_VIRTIO_SCSI,
2876
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2877
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap",
2878
                    QEMU_CAPS_VIRTIO_SCSI,
2879
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2880 2881 2882
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap", NONE);

    DO_TEST("machine-deakeywrap-on-caps",
2883
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2884
            QEMU_CAPS_VIRTIO_SCSI,
2885
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2886
    DO_TEST_FAILURE("machine-deakeywrap-on-caps",
2887
                    QEMU_CAPS_VIRTIO_SCSI,
2888
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2889 2890 2891
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", NONE);

    DO_TEST("machine-deakeywrap-on-cap",
2892
            QEMU_CAPS_DEA_KEY_WRAP,
2893
            QEMU_CAPS_VIRTIO_SCSI,
2894
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2895
    DO_TEST_FAILURE("machine-deakeywrap-on-cap",
2896
                    QEMU_CAPS_VIRTIO_SCSI,
2897
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2898 2899 2900
    DO_TEST_FAILURE("machine-deakeywrap-on-cap", NONE);

    DO_TEST("machine-deakeywrap-off-caps",
2901
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2902
            QEMU_CAPS_VIRTIO_SCSI,
2903
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2904
    DO_TEST_FAILURE("machine-deakeywrap-off-caps",
2905
                    QEMU_CAPS_VIRTIO_SCSI,
2906
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2907 2908 2909
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", NONE);

    DO_TEST("machine-deakeywrap-off-cap",
2910
            QEMU_CAPS_DEA_KEY_WRAP,
2911
            QEMU_CAPS_VIRTIO_SCSI,
2912
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2913
    DO_TEST_FAILURE("machine-deakeywrap-off-cap",
2914
                    QEMU_CAPS_VIRTIO_SCSI,
2915
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2916 2917 2918
    DO_TEST_FAILURE("machine-deakeywrap-off-cap", NONE);

    DO_TEST("machine-keywrap-none-caps",
2919
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2920
            QEMU_CAPS_VIRTIO_SCSI,
2921
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2922
    DO_TEST("machine-keywrap-none",
2923
            QEMU_CAPS_VIRTIO_SCSI,
2924
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2925

2926
    DO_TEST("machine-loadparm-s390",
2927
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390,
2928
            QEMU_CAPS_LOADPARM);
2929
    DO_TEST("machine-loadparm-net-s390",
2930
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390,
2931
            QEMU_CAPS_LOADPARM);
2932
    DO_TEST("machine-loadparm-multiple-disks-nets-s390",
2933
            QEMU_CAPS_CCW,
2934
            QEMU_CAPS_VIRTIO_S390,
2935 2936
            QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-char-invalid",
2937
                        QEMU_CAPS_CCW,
2938
                        QEMU_CAPS_VIRTIO_S390,
2939 2940
                        QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-len-invalid",
2941
                        QEMU_CAPS_CCW,
2942
                        QEMU_CAPS_VIRTIO_S390,
2943 2944
                        QEMU_CAPS_LOADPARM);

J
Jiri Denemark 已提交
2945 2946 2947 2948 2949 2950 2951
    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);

2952
    DO_TEST("virtio-input", QEMU_CAPS_VIRTIO_KEYBOARD,
2953
            QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET);
2954
    DO_TEST("virtio-input-passthrough", QEMU_CAPS_VIRTIO_INPUT_HOST);
2955

2956
    DO_TEST("ppc64-usb-controller",
2957
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2958
            QEMU_CAPS_PCI_OHCI);
2959
    DO_TEST("ppc64-usb-controller-legacy",
2960
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2961
            QEMU_CAPS_PIIX3_USB_UHCI);
2962
    DO_TEST_FULL("ppc64-usb-controller-qemu-xhci",
2963
                 ARG_PARSEFLAGS, VIR_DOMAIN_DEF_PARSE_ABI_UPDATE,
2964
                 ARG_QEMU_CAPS,
2965
                 QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2966 2967 2968 2969 2970 2971 2972
                 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);
2973

2974 2975 2976 2977
    DO_TEST("aarch64-usb-controller-nec-xhci",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_NEC_USB_XHCI);

2978
    /* VM XML has invalid arch/ostype/virttype combo, but the SKIP flag
2979 2980 2981 2982 2983
     * 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.
     */
2984
    DO_TEST_FULL("missing-machine",
2985
                 ARG_FLAGS, FLAG_EXPECT_FAILURE,
2986 2987
                 ARG_PARSEFLAGS, VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE,
                 ARG_QEMU_CAPS, NONE);
2988

2989 2990 2991
    DO_TEST("name-escape",
            QEMU_CAPS_NAME_DEBUG_THREADS,
            QEMU_CAPS_OBJECT_SECRET,
2992 2993
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_GROUP,
2994 2995 2996 2997
            QEMU_CAPS_VNC,
            QEMU_CAPS_NAME_GUEST,
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_SPICE,
2998
            QEMU_CAPS_SPICE_UNIX,
2999 3000 3001 3002 3003
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_SPICE_GL,
            QEMU_CAPS_SPICE_RENDERNODE,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
3004
            QEMU_CAPS_DEVICE_ISA_SERIAL,
3005
            QEMU_CAPS_CHARDEV_FILE_APPEND,
3006
            QEMU_CAPS_CCID_EMULATED,
3007
            QEMU_CAPS_VIRTIO_SCSI);
M
Marc-André Lureau 已提交
3008 3009
    DO_TEST("debug-threads", QEMU_CAPS_NAME_DEBUG_THREADS);

3010
    DO_TEST("master-key", QEMU_CAPS_OBJECT_SECRET);
3011
    DO_TEST("usb-long-port-path",
J
Ján Tomko 已提交
3012
            QEMU_CAPS_USB_HUB);
3013
    DO_TEST_PARSE_ERROR("usb-too-long-port-path-invalid",
3014
                        QEMU_CAPS_USB_HUB);
3015

3016
    DO_TEST("acpi-table", NONE);
3017 3018 3019 3020 3021 3022

    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");
3023
    DO_TEST_CAPS_LATEST_PARSE_ERROR("intel-iommu-wrong-machine");
3024
    DO_TEST_CAPS_ARCH_LATEST("iommu-smmuv3", "aarch64");
3025

3026
    DO_TEST("cpu-hotplug-startup", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);
3027 3028 3029
    DO_TEST_PARSE_ERROR("cpu-hotplug-granularity",
                        QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);

3030
    DO_TEST_CAPS_LATEST("virtio-options");
3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054
    DO_TEST_CAPS_LATEST("virtio-options-controller-iommu");
    DO_TEST_CAPS_LATEST("virtio-options-disk-iommu");
    DO_TEST_CAPS_LATEST("virtio-options-fs-iommu");
    DO_TEST_CAPS_LATEST("virtio-options-input-iommu");
    DO_TEST_CAPS_LATEST("virtio-options-memballoon-iommu");
    DO_TEST_CAPS_LATEST("virtio-options-net-iommu");
    DO_TEST_CAPS_LATEST("virtio-options-rng-iommu");
    DO_TEST_CAPS_LATEST("virtio-options-video-iommu");
    DO_TEST_CAPS_LATEST("virtio-options-controller-ats");
    DO_TEST_CAPS_LATEST("virtio-options-disk-ats");
    DO_TEST_CAPS_LATEST("virtio-options-fs-ats");
    DO_TEST_CAPS_LATEST("virtio-options-input-ats");
    DO_TEST_CAPS_LATEST("virtio-options-memballoon-ats");
    DO_TEST_CAPS_LATEST("virtio-options-net-ats");
    DO_TEST_CAPS_LATEST("virtio-options-rng-ats");
    DO_TEST_CAPS_LATEST("virtio-options-video-ats");
    DO_TEST_CAPS_LATEST("virtio-options-controller-packed");
    DO_TEST_CAPS_LATEST("virtio-options-disk-packed");
    DO_TEST_CAPS_LATEST("virtio-options-fs-packed");
    DO_TEST_CAPS_LATEST("virtio-options-input-packed");
    DO_TEST_CAPS_LATEST("virtio-options-memballoon-packed");
    DO_TEST_CAPS_LATEST("virtio-options-net-packed");
    DO_TEST_CAPS_LATEST("virtio-options-rng-packed");
    DO_TEST_CAPS_LATEST("virtio-options-video-packed");
3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096
    DO_TEST_PARSE_ERROR("virtio-options-controller-iommu", QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST_PARSE_ERROR("virtio-options-disk-iommu", NONE);
    DO_TEST_PARSE_ERROR("virtio-options-fs-iommu", NONE);
    DO_TEST_PARSE_ERROR("virtio-options-input-iommu", QEMU_CAPS_VIRTIO_MOUSE,
                        QEMU_CAPS_VIRTIO_KEYBOARD);
    DO_TEST_PARSE_ERROR("virtio-options-net-iommu", NONE);
    DO_TEST_PARSE_ERROR("virtio-options-memballoon-iommu", NONE);
    DO_TEST_PARSE_ERROR("virtio-options-rng-iommu", QEMU_CAPS_DEVICE_VIRTIO_RNG,
                        QEMU_CAPS_OBJECT_RNG_RANDOM);
    DO_TEST_PARSE_ERROR("virtio-options-video-iommu", QEMU_CAPS_DEVICE_VIRTIO_GPU,
                        QEMU_CAPS_DEVICE_VIRTIO_GPU,
                        QEMU_CAPS_VIRTIO_GPU_VIRGL,
                        QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
                        QEMU_CAPS_DEVICE_VHOST_USER_GPU);
    DO_TEST_PARSE_ERROR("virtio-options-controller-ats", QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST_PARSE_ERROR("virtio-options-disk-ats", NONE);
    DO_TEST_PARSE_ERROR("virtio-options-fs-ats", NONE);
    DO_TEST_PARSE_ERROR("virtio-options-input-ats", QEMU_CAPS_VIRTIO_MOUSE,
                        QEMU_CAPS_VIRTIO_KEYBOARD);
    DO_TEST_PARSE_ERROR("virtio-options-memballoon-ats", NONE);
    DO_TEST_PARSE_ERROR("virtio-options-net-ats", NONE);
    DO_TEST_PARSE_ERROR("virtio-options-rng-ats", QEMU_CAPS_DEVICE_VIRTIO_RNG,
                        QEMU_CAPS_OBJECT_RNG_RANDOM);
    DO_TEST_PARSE_ERROR("virtio-options-video-ats", QEMU_CAPS_DEVICE_VIRTIO_GPU,
                        QEMU_CAPS_DEVICE_VIRTIO_GPU,
                        QEMU_CAPS_VIRTIO_GPU_VIRGL,
                        QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
                        QEMU_CAPS_DEVICE_VHOST_USER_GPU);
    DO_TEST_PARSE_ERROR("virtio-options-controller-packed", QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST_PARSE_ERROR("virtio-options-disk-packed", NONE);
    DO_TEST_PARSE_ERROR("virtio-options-fs-packed", NONE);
    DO_TEST_PARSE_ERROR("virtio-options-input-packed", QEMU_CAPS_VIRTIO_MOUSE,
                        QEMU_CAPS_VIRTIO_KEYBOARD);
    DO_TEST_PARSE_ERROR("virtio-options-memballoon-packed", NONE);
    DO_TEST_PARSE_ERROR("virtio-options-net-packed", NONE);
    DO_TEST_PARSE_ERROR("virtio-options-rng-packed", QEMU_CAPS_DEVICE_VIRTIO_RNG,
                        QEMU_CAPS_OBJECT_RNG_RANDOM);
    DO_TEST_PARSE_ERROR("virtio-options-video-packed", QEMU_CAPS_DEVICE_VIRTIO_GPU,
                        QEMU_CAPS_DEVICE_VIRTIO_GPU,
                        QEMU_CAPS_VIRTIO_GPU_VIRGL,
                        QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
                        QEMU_CAPS_DEVICE_VHOST_USER_GPU);
3097

J
Ján Tomko 已提交
3098
    DO_TEST("fd-memory-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
3099
            QEMU_CAPS_KVM);
J
Ján Tomko 已提交
3100
    DO_TEST("fd-memory-numa-topology2", QEMU_CAPS_OBJECT_MEMORY_FILE,
3101
            QEMU_CAPS_KVM);
J
Ján Tomko 已提交
3102
    DO_TEST("fd-memory-numa-topology3", QEMU_CAPS_OBJECT_MEMORY_FILE,
3103 3104
            QEMU_CAPS_KVM);

J
Ján Tomko 已提交
3105
    DO_TEST("fd-memory-no-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
3106 3107
            QEMU_CAPS_KVM);

M
Marc-André Lureau 已提交
3108
    DO_TEST_CAPS_LATEST("memfd-memory-numa");
3109
    DO_TEST_CAPS_LATEST("memfd-memory-default-hugepage");
M
Marc-André Lureau 已提交
3110

3111 3112 3113 3114 3115 3116 3117 3118
    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);

3119 3120 3121 3122 3123 3124 3125 3126 3127
    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 已提交
3128
    DO_TEST("vmcoreinfo", QEMU_CAPS_DEVICE_VMCOREINFO);
3129

3130 3131 3132
    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,
3133
            QEMU_CAPS_DEVICE_ISA_SERIAL,
3134
            QEMU_CAPS_HDA_DUPLEX,
3135 3136
            QEMU_CAPS_CCID_EMULATED,
            QEMU_CAPS_QCOW2_LUKS, QEMU_CAPS_OBJECT_SECRET);
3137
    DO_TEST("user-aliases2", QEMU_CAPS_DEVICE_IOH3420, QEMU_CAPS_ICH9_AHCI);
3138 3139
    DO_TEST("user-aliases-usb", QEMU_CAPS_KVM,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4,
3140
            QEMU_CAPS_ICH9_USB_EHCI1);
3141

3142
    DO_TEST_CAPS_VER("disk-virtio-scsi-reservations", "2.12.0");
3143
    DO_TEST_CAPS_LATEST("disk-virtio-scsi-reservations");
3144

3145
    DO_TEST_CAPS_LATEST("tseg-explicit-size");
3146 3147 3148
    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");
3149

3150
    DO_TEST("video-virtio-gpu-ccw", QEMU_CAPS_CCW,
3151 3152 3153 3154 3155 3156
            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);

3157
    DO_TEST("input-virtio-ccw", QEMU_CAPS_CCW,
3158 3159 3160 3161 3162 3163 3164
            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);

3165 3166
    DO_TEST_CAPS_LATEST("vhost-vsock");
    DO_TEST_CAPS_LATEST("vhost-vsock-auto");
3167 3168
    DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw", "s390x");
    DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw-auto", "s390x");
3169

3170
    DO_TEST_CAPS_VER("launch-security-sev", "2.12.0");
3171

3172 3173 3174
    DO_TEST_CAPS_LATEST("vhost-user-fs-fd-memory");
    DO_TEST_CAPS_LATEST("vhost-user-fs-hugepages");

L
Lubomir Rintel 已提交
3175 3176
    DO_TEST("riscv64-virt",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
3177 3178
    DO_TEST("riscv64-virt-pci",
            QEMU_CAPS_OBJECT_GPEX);
L
Lubomir Rintel 已提交
3179

3180 3181 3182 3183 3184
    /* 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");
3185
    DO_TEST_CAPS_LATEST_PARSE_ERROR("virtio-transitional-not-supported");
3186

3187 3188 3189 3190 3191 3192 3193 3194
    /* 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");

3195 3196 3197
    /* 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");
3198
    DO_TEST_CAPS_ARCH_LATEST("riscv64-virt-graphics", "riscv64");
3199
    DO_TEST_CAPS_ARCH_LATEST("s390x-ccw-graphics", "s390x");
3200 3201 3202
    DO_TEST_CAPS_ARCH_LATEST("x86_64-pc-graphics", "x86_64");
    DO_TEST_CAPS_ARCH_LATEST("x86_64-q35-graphics", "x86_64");

3203 3204 3205 3206 3207
    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");

3208 3209 3210
    DO_TEST_CAPS_LATEST("vhost-user-vga");
    DO_TEST_CAPS_LATEST("vhost-user-gpu-secondary");

3211 3212 3213
    DO_TEST_CAPS_VER("cpu-Icelake-Server-pconfig", "3.1.0");
    DO_TEST_CAPS_LATEST("cpu-Icelake-Server-pconfig");

3214 3215
    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");
3216 3217 3218 3219 3220 3221
    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");
3222 3223
    DO_TEST_CAPS_ARCH_LATEST("s390-default-cpu-kvm-ccw-virtio-2.7", "s390x");
    DO_TEST_CAPS_ARCH_LATEST("s390-default-cpu-tcg-ccw-virtio-2.7", "s390x");
3224 3225
    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");
3226 3227 3228 3229
    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");
3230

3231 3232
    DO_TEST_CAPS_LATEST("virtio-9p-multidevs");

3233 3234 3235
    if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL)
        virFileDeleteTree(fakerootdir);

3236
    VIR_FREE(driver.config->nbdTLSx509certdir);
3237
    qemuTestDriverFree(&driver);
3238
    VIR_FREE(fakerootdir);
3239
    virHashFree(capslatest);
3240
    virFileWrapperClearPrefixes();
3241

3242
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
3243 3244
}

3245
VIR_TEST_MAIN_PRELOAD(mymain,
3246
                      VIR_TEST_MOCK("qemuxml2argv"),
M
Michal Privoznik 已提交
3247
                      VIR_TEST_MOCK("domaincaps"),
3248 3249 3250
                      VIR_TEST_MOCK("virrandom"),
                      VIR_TEST_MOCK("qemucpu"),
                      VIR_TEST_MOCK("virpci"))
3251

3252 3253
#else

3254 3255 3256 3257
int main(void)
{
    return EXIT_AM_SKIP;
}
3258 3259

#endif /* WITH_QEMU */