qemuxml2argvtest.c 116.5 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 "datatypes.h"
21
# include "conf/storage_conf.h"
22
# include "cpu/cpu_map.h"
23
# include "virstring.h"
24
# include "storage/storage_driver.h"
25
# include "virmock.h"
26

27
# define LIBVIRT_QEMU_CAPSPRIV_H_ALLOW
28 29
# include "qemu/qemu_capspriv.h"

30
# include "testutilsqemu.h"
31

32 33
# define VIR_FROM_THIS VIR_FROM_QEMU

34
static const char *abs_top_srcdir;
35
static virQEMUDriver driver;
36

37 38 39 40 41 42
static unsigned char *
fakeSecretGetValue(virSecretPtr obj ATTRIBUTE_UNUSED,
                   size_t *value_size,
                   unsigned int fakeflags ATTRIBUTE_UNUSED,
                   unsigned int internalFlags ATTRIBUTE_UNUSED)
{
43 44
    char *secret;
    if (VIR_STRDUP(secret, "AQCVn5hO6HzFAhAAq0NCv8jtJcIcE+HOBlMQ1A") < 0)
45
        return NULL;
46 47 48 49 50 51
    *value_size = strlen(secret);
    return (unsigned char *) secret;
}

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

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

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

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

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

96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122

# define STORAGE_POOL_XML_PATH "storagepoolxml2xmlout/"
static const unsigned char fakeUUID[VIR_UUID_BUFLEN] = "fakeuuid";

static virStoragePoolPtr
fakeStoragePoolLookupByName(virConnectPtr conn,
                            const char *name)
{
    char *xmlpath = NULL;
    virStoragePoolPtr ret = NULL;

    if (STRNEQ(name, "inactive")) {
        if (virAsprintf(&xmlpath, "%s/%s%s.xml",
                        abs_srcdir,
                        STORAGE_POOL_XML_PATH,
                        name) < 0)
            return NULL;

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

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

123
 cleanup:
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 158 159
    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);

160
 cleanup:
161
    virStringListFree(volinfo);
162 163
    return ret;

164
 fallback:
165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215
    ret = virGetStorageVol(pool->conn, pool->name, name, "block", NULL, NULL);
    goto cleanup;
}

static int
fakeStorageVolGetInfo(virStorageVolPtr vol,
                      virStorageVolInfoPtr info)
{
    memset(info, 0, sizeof(*info));

    info->type = virStorageVolTypeFromString(vol->key);

    if (info->type < 0) {
        virReportError(VIR_ERR_INTERNAL_ERROR,
                       "Invalid volume type '%s'", vol->key);
        return -1;
    }

    return 0;
}


static char *
fakeStorageVolGetPath(virStorageVolPtr vol)
{
    char *ret = NULL;

    ignore_value(virAsprintf(&ret, "/some/%s/device/%s", vol->key, vol->name));

    return ret;
}


static char *
fakeStoragePoolGetXMLDesc(virStoragePoolPtr pool,
                          unsigned int flags_unused ATTRIBUTE_UNUSED)
{
    char *xmlpath = NULL;
    char *xmlbuf = NULL;

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

    if (virAsprintf(&xmlpath, "%s/%s%s.xml",
                    abs_srcdir,
                    STORAGE_POOL_XML_PATH,
                    pool->name) < 0)
        return NULL;

216
    if (virTestLoadFile(xmlpath, &xmlbuf) < 0) {
217 218 219 220 221 222
        virReportError(VIR_ERR_INTERNAL_ERROR,
                       "failed to load XML file '%s'",
                       xmlpath);
        goto cleanup;
    }

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

263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289

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

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


static int
fakeNWFilterBindingDelete(virNWFilterBindingPtr binding ATTRIBUTE_UNUSED)
{
    return 0;
}


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

290
typedef enum {
291 292
    FLAG_EXPECT_FAILURE     = 1 << 0,
    FLAG_EXPECT_PARSE_ERROR = 1 << 1,
293
    FLAG_FIPS               = 1 << 2,
294
    FLAG_STEAL_VM           = 1 << 3,
295
    FLAG_REAL_CAPS          = 1 << 4,
296
    FLAG_SKIP_LEGACY_CPUS   = 1 << 5,
297 298
} virQemuXML2ArgvTestFlags;

299 300
struct testInfo {
    const char *name;
301
    const char *suffix;
302 303 304 305 306
    virQEMUCapsPtr qemuCaps;
    const char *migrateFrom;
    int migrateFd;
    unsigned int flags;
    unsigned int parseFlags;
307
    virDomainObjPtr vm;
308 309
};

310 311 312 313

static int
testAddCPUModels(virQEMUCapsPtr caps, bool skipLegacy)
{
314 315
    virArch arch = virQEMUCapsGetArch(caps);
    const char *x86Models[] = {
316 317 318 319
        "Opteron_G3", "Opteron_G2", "Opteron_G1",
        "Nehalem", "Penryn", "Conroe",
        "Haswell-noTSX", "Haswell",
    };
320
    const char *x86LegacyModels[] = {
321 322 323 324
        "n270", "athlon", "pentium3", "pentium2", "pentium",
        "486", "coreduo", "kvm32", "qemu32", "kvm64",
        "core2duo", "phenom", "qemu64",
    };
325 326 327 328 329 330
    const char *armModels[] = {
        "cortex-a9", "cortex-a8", "cortex-a57", "cortex-a53",
    };
    const char *ppc64Models[] = {
        "POWER8", "POWER7",
    };
331 332 333
    const char *s390xModels[] = {
        "z990", "zEC12", "z13",
    };
334

335
    if (ARCH_IS_X86(arch)) {
336
        if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM, x86Models,
337 338
                                         ARRAY_CARDINALITY(x86Models),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
339
            virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU, x86Models,
340 341
                                         ARRAY_CARDINALITY(x86Models),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
342 343
            return -1;

344 345 346
        if (!skipLegacy) {
            if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM,
                                             x86LegacyModels,
347 348
                                             ARRAY_CARDINALITY(x86LegacyModels),
                                             VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
349 350
                virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU,
                                             x86LegacyModels,
351 352
                                             ARRAY_CARDINALITY(x86LegacyModels),
                                             VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
353 354
                return -1;
        }
355
    } else if (ARCH_IS_ARM(arch)) {
356
        if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM, armModels,
357 358
                                         ARRAY_CARDINALITY(armModels),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
359
            virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU, armModels,
360 361
                                         ARRAY_CARDINALITY(armModels),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
362 363
            return -1;
    } else if (ARCH_IS_PPC64(arch)) {
364
        if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM, ppc64Models,
365 366
                                         ARRAY_CARDINALITY(ppc64Models),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
367
            virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU, ppc64Models,
368 369
                                         ARRAY_CARDINALITY(ppc64Models),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
370
            return -1;
371 372 373 374 375
    } else if (ARCH_IS_S390(arch)) {
        if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM, s390xModels,
                                         ARRAY_CARDINALITY(s390xModels),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
            return -1;
376
    }
377 378 379 380 381 382

    return 0;
}


static int
383 384
testInitQEMUCaps(struct testInfo *info,
                 int gic)
385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400
{
    int ret = -1;

    if (!(info->qemuCaps = virQEMUCapsNew()))
        goto cleanup;

    if (testQemuCapsSetGIC(info->qemuCaps, gic) < 0)
        goto cleanup;

    ret = 0;

 cleanup:
    return ret;
}


401 402
static int
testUpdateQEMUCaps(const struct testInfo *info,
403 404
                   virDomainObjPtr vm,
                   virCapsPtr caps)
405 406 407
{
    int ret = -1;

408 409 410
    if (!caps)
        goto cleanup;

411 412
    virQEMUCapsSetArch(info->qemuCaps, vm->def->os.arch);

413 414
    virQEMUCapsInitQMPBasicArch(info->qemuCaps);

415 416
    if (testAddCPUModels(info->qemuCaps,
                         !!(info->flags & FLAG_SKIP_LEGACY_CPUS)) < 0)
417 418
        goto cleanup;

419 420 421 422
    virQEMUCapsInitHostCPUModel(info->qemuCaps, caps->host.arch,
                                VIR_DOMAIN_VIRT_KVM);
    virQEMUCapsInitHostCPUModel(info->qemuCaps, caps->host.arch,
                                VIR_DOMAIN_VIRT_QEMU);
423

424 425 426 427 428 429 430
    ret = 0;

 cleanup:
    return ret;
}


431
static int
432
testCompareXMLToStartupXML(const void *data)
433
{
434
    const struct testInfo *info = data;
435 436 437 438 439
    unsigned int format_flags = VIR_DOMAIN_DEF_FORMAT_SECURE;
    char *xml = NULL;
    char *actual = NULL;
    int ret = -1;

440 441 442 443
    if (!info->vm) {
        VIR_TEST_DEBUG("VM object missing. Did the args conversion succeed?");
        return -1;
    }
444

445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460
    if (virAsprintf(&xml, "%s/qemuxml2startupxmloutdata/%s.xml",
                    abs_srcdir, info->name) < 0)
        goto cleanup;

    if (!(actual = virDomainDefFormat(info->vm->def, NULL, format_flags)))
        goto cleanup;

    ret = virTestCompareToFile(actual, xml);

 cleanup:
    VIR_FREE(xml);
    VIR_FREE(actual);
    return ret;
}


461 462 463 464 465 466
static int
testCheckExclusiveFlags(int flags)
{
    virCheckFlags(FLAG_EXPECT_FAILURE |
                  FLAG_EXPECT_PARSE_ERROR |
                  FLAG_FIPS |
467
                  FLAG_STEAL_VM |
468
                  FLAG_REAL_CAPS |
469
                  FLAG_SKIP_LEGACY_CPUS |
470 471
                  0, -1);

472 473
    VIR_EXCLUSIVE_FLAGS_RET(FLAG_STEAL_VM, FLAG_EXPECT_FAILURE, -1);
    VIR_EXCLUSIVE_FLAGS_RET(FLAG_STEAL_VM, FLAG_EXPECT_PARSE_ERROR, -1);
474
    VIR_EXCLUSIVE_FLAGS_RET(FLAG_REAL_CAPS, FLAG_SKIP_LEGACY_CPUS, -1);
475 476 477 478
    return 0;
}


479 480 481 482
static int
testCompareXMLToArgv(const void *data)
{
    struct testInfo *info = (void *) data;
483 484 485
    char *xml = NULL;
    char *args = NULL;
    char *migrateURI = NULL;
486
    char *actualargv = NULL;
487
    const char *suffix = info->suffix;
488 489
    unsigned int flags = info->flags;
    unsigned int parseFlags = info->parseFlags;
E
Eric Blake 已提交
490
    int ret = -1;
491
    virDomainObjPtr vm = NULL;
492
    virDomainChrSourceDef monitor_chr;
493
    virConnectPtr conn;
J
Jiri Denemark 已提交
494
    char *log = NULL;
E
Eric Blake 已提交
495
    virCommandPtr cmd = NULL;
496
    size_t i;
497
    qemuDomainObjPrivatePtr priv = NULL;
498

499 500
    memset(&monitor_chr, 0, sizeof(monitor_chr));

501
    if (!(conn = virGetConnect()))
502
        goto cleanup;
503

504 505 506
    if (!suffix)
        suffix = "";

507
    conn->secretDriver = &fakeSecretDriver;
508
    conn->storageDriver = &fakeStorageDriver;
509
    conn->nwfilterDriver = &fakeNWFilterDriver;
510

511 512 513 514
    virSetConnectInterface(conn);
    virSetConnectNetwork(conn);
    virSetConnectNWFilter(conn);
    virSetConnectNodeDev(conn);
515 516 517
    virSetConnectSecret(conn);
    virSetConnectStorage(conn);

518 519 520
    if (virQEMUCapsGet(info->qemuCaps, QEMU_CAPS_ENABLE_FIPS))
        flags |= FLAG_FIPS;

521 522 523
    if (testCheckExclusiveFlags(info->flags) < 0)
        goto cleanup;

524
    if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0)
525 526
        goto cleanup;

527
    if (virAsprintf(&xml, "%s/qemuxml2argvdata/%s.xml",
528
                    abs_srcdir, info->name) < 0 ||
529 530
        virAsprintf(&args, "%s/qemuxml2argvdata/%s%s.args",
                    abs_srcdir, info->name, suffix) < 0)
531 532 533
        goto cleanup;

    if (info->migrateFrom &&
534 535
        !(migrateURI = qemuMigrationDstGetURI(info->migrateFrom,
                                              info->migrateFd)))
536 537
        goto cleanup;

538
    if (!(vm = virDomainObjNew(driver.xmlopt)))
539
        goto cleanup;
540

541
    parseFlags |= VIR_DOMAIN_DEF_PARSE_INACTIVE;
542
    if (!(vm->def = virDomainDefParseFile(xml, driver.caps, driver.xmlopt,
543
                                          NULL, parseFlags))) {
P
Pavel Hrdina 已提交
544
        if (flags & FLAG_EXPECT_PARSE_ERROR)
545
            goto ok;
546
        goto cleanup;
547
    }
548 549 550 551
    if (flags & FLAG_EXPECT_PARSE_ERROR) {
        VIR_TEST_DEBUG("passed instead of expected parse error");
        goto cleanup;
    }
552
    priv = vm->privateData;
553

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

557
    if (!virDomainDefCheckABIStability(vm->def, vm->def, driver.xmlopt)) {
558
        VIR_TEST_DEBUG("ABI stability check failed on %s", xml);
559
        goto cleanup;
560 561
    }

562
    vm->def->id = -1;
563

564
    if (qemuProcessPrepareMonitorChr(&monitor_chr, priv->libDir) < 0)
565
        goto cleanup;
566

567 568
    if (!(info->flags & FLAG_REAL_CAPS) &&
        testUpdateQEMUCaps(info, vm, driver.caps) < 0)
569
        goto cleanup;
570

571
    log = virTestLogContentAndReset();
572
    VIR_FREE(log);
573
    virResetLastError();
J
Jiri Denemark 已提交
574

575 576
    for (i = 0; i < vm->def->nhostdevs; i++) {
        virDomainHostdevDefPtr hostdev = vm->def->hostdevs[i];
577 578 579 580 581 582 583 584

        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) {
            hostdev->source.subsys.u.pci.backend = VIR_DOMAIN_HOSTDEV_PCI_BACKEND_KVM;
        }
    }

585 586 587 588 589 590 591 592 593 594 595
    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;
    }

596 597 598
    if (vm->def->tpm) {
        switch (vm->def->tpm->type) {
        case VIR_DOMAIN_TPM_TYPE_EMULATOR:
599
            VIR_FREE(vm->def->tpm->data.emulator.source.data.file.path);
600 601 602
            if (VIR_STRDUP(vm->def->tpm->data.emulator.source.data.file.path,
                           "/dev/test") < 0)
                goto cleanup;
603
            vm->def->tpm->data.emulator.source.type = VIR_DOMAIN_CHR_TYPE_FILE;
604 605 606 607 608 609 610
            break;
        case VIR_DOMAIN_TPM_TYPE_PASSTHROUGH:
        case VIR_DOMAIN_TPM_TYPE_LAST:
            break;
       }
    }

611
    if (!(cmd = qemuProcessCreatePretendCmd(&driver, vm, migrateURI,
P
Pavel Hrdina 已提交
612 613
                                            (flags & FLAG_FIPS), false,
                                            VIR_QEMU_PROCESS_START_COLD))) {
P
Pavel Hrdina 已提交
614 615
        if (flags & FLAG_EXPECT_FAILURE)
            goto ok;
616
        goto cleanup;
J
Jiri Denemark 已提交
617
    }
618 619 620 621
    if (flags & FLAG_EXPECT_FAILURE) {
        VIR_TEST_DEBUG("passed instead of expected failure");
        goto cleanup;
    }
J
Jiri Denemark 已提交
622

623
    if (!(actualargv = virCommandToString(cmd, false)))
624
        goto cleanup;
E
Eric Blake 已提交
625

626
    if (virTestCompareToFile(actualargv, args) < 0)
627
        goto cleanup;
628

P
Pavel Hrdina 已提交
629 630
    ret = 0;

631
 ok:
632
    if (ret == 0 && flags & FLAG_EXPECT_FAILURE) {
P
Pavel Hrdina 已提交
633 634
        ret = -1;
        VIR_TEST_DEBUG("Error expected but there wasn't any.\n");
635
        goto cleanup;
P
Pavel Hrdina 已提交
636
    }
637
    if (!virTestOOMActive()) {
638
        if (flags & FLAG_EXPECT_FAILURE) {
639
            if ((log = virTestLogContentAndReset()))
P
Pavel Hrdina 已提交
640 641
                VIR_TEST_DEBUG("Got expected error: \n%s", log);
        }
642
        virResetLastError();
P
Pavel Hrdina 已提交
643
        ret = 0;
644 645
    }

646
    if (flags & FLAG_STEAL_VM)
647 648
        VIR_STEAL_PTR(info->vm, vm);

649
 cleanup:
650 651
    VIR_FREE(log);
    VIR_FREE(actualargv);
652
    virDomainChrSourceDefClear(&monitor_chr);
E
Eric Blake 已提交
653
    virCommandFree(cmd);
654
    virObjectUnref(vm);
655 656
    virSetConnectSecret(NULL);
    virSetConnectStorage(NULL);
657
    virObjectUnref(conn);
658
    VIR_FREE(migrateURI);
659 660
    VIR_FREE(xml);
    VIR_FREE(args);
661
    return ret;
662 663
}

A
Andrea Bolognani 已提交
664
# define FAKEROOTDIRTEMPLATE abs_builddir "/fakerootdir-XXXXXX"
665

666
static int
E
Eric Blake 已提交
667
mymain(void)
668
{
669
    int ret = 0, i;
A
Andrea Bolognani 已提交
670
    char *fakerootdir;
671 672 673 674 675 676 677
    const char *archs[] = {
        "aarch64",
        "ppc64",
        "riscv64",
        "s390x",
        "x86_64",
    };
678
    virHashTablePtr capslatest = NULL;
679

A
Andrea Bolognani 已提交
680 681 682 683 684 685 686 687 688 689 690 691
    if (VIR_STRDUP_QUIET(fakerootdir, FAKEROOTDIRTEMPLATE) < 0) {
        fprintf(stderr, "Out of memory\n");
        abort();
    }

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

    setenv("LIBVIRT_FAKE_ROOT_DIR", fakerootdir, 1);

692 693
    abs_top_srcdir = getenv("abs_top_srcdir");
    if (!abs_top_srcdir)
694
        abs_top_srcdir = abs_srcdir "/..";
695

696 697 698 699 700 701 702 703 704 705
    /* Set the timezone because we are mocking the time() function.
     * If we don't do that, then localtime() may return unpredictable
     * results. In order to detect things that just work by a blind
     * chance, we need to set an virtual timezone that no libvirt
     * developer resides in. */
    if (setenv("TZ", "VIR00:30", 1) < 0) {
        perror("setenv");
        return EXIT_FAILURE;
    }

706
    if (qemuTestDriverInit(&driver) < 0)
707
        return EXIT_FAILURE;
708 709

    driver.privileged = true;
710

711 712 713
    VIR_FREE(driver.config->defaultTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->defaultTLSx509certdir, "/etc/pki/qemu") < 0)
        return EXIT_FAILURE;
714
    VIR_FREE(driver.config->vncTLSx509certdir);
715
    if (VIR_STRDUP_QUIET(driver.config->vncTLSx509certdir, "/etc/pki/libvirt-vnc") < 0)
716 717
        return EXIT_FAILURE;
    VIR_FREE(driver.config->spiceTLSx509certdir);
718
    if (VIR_STRDUP_QUIET(driver.config->spiceTLSx509certdir, "/etc/pki/libvirt-spice") < 0)
719
        return EXIT_FAILURE;
720 721 722
    VIR_FREE(driver.config->chardevTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->chardevTLSx509certdir, "/etc/pki/libvirt-chardev") < 0)
        return EXIT_FAILURE;
723
    VIR_FREE(driver.config->vxhsTLSx509certdir);
724
    if (VIR_STRDUP_QUIET(driver.config->vxhsTLSx509certdir, "/etc/pki/libvirt-vxhs/dummy,path") < 0)
725
        return EXIT_FAILURE;
726 727 728
    VIR_FREE(driver.config->nbdTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->nbdTLSx509certdir, "/etc/pki/libvirt-nbd/dummy,path") < 0)
        return EXIT_FAILURE;
729

730
    VIR_FREE(driver.config->hugetlbfs);
731
    if (VIR_ALLOC_N(driver.config->hugetlbfs, 2) < 0)
732
        return EXIT_FAILURE;
733 734 735
    driver.config->nhugetlbfs = 2;
    if (VIR_STRDUP(driver.config->hugetlbfs[0].mnt_dir, "/dev/hugepages2M") < 0 ||
        VIR_STRDUP(driver.config->hugetlbfs[1].mnt_dir, "/dev/hugepages1G") < 0)
736
        return EXIT_FAILURE;
737 738
    driver.config->hugetlbfs[0].size = 2048;
    driver.config->hugetlbfs[0].deflt = true;
739
    driver.config->hugetlbfs[1].size = 1048576;
740
    driver.config->spiceTLS = 1;
741
    if (VIR_STRDUP_QUIET(driver.config->spicePassword, "123456") < 0)
742
        return EXIT_FAILURE;
743 744 745
    VIR_FREE(driver.config->memoryBackingDir);
    if (VIR_STRDUP_QUIET(driver.config->memoryBackingDir, "/var/lib/libvirt/qemu/ram") < 0)
        return EXIT_FAILURE;
746

747 748
    capslatest = virHashCreate(4, virHashValueFree);
    if (!capslatest)
749 750
        return EXIT_FAILURE;

751
    VIR_TEST_VERBOSE("\n");
752

753 754 755 756 757 758 759 760 761 762 763
    for (i = 0; i < ARRAY_CARDINALITY(archs); ++i) {
        char *cap = testQemuGetLatestCapsForArch(abs_srcdir "/qemucapabilitiesdata",
                                                 archs[i], "xml");

        if (!cap || virHashAddEntry(capslatest, archs[i], cap) < 0)
            return EXIT_FAILURE;

        VIR_TEST_VERBOSE("latest caps for %s: %s\n", archs[i], cap);
    }

    VIR_TEST_VERBOSE("\n");
764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779

/**
 * 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.
 */
# define DO_TEST_CAPS_INTERNAL(name, suffix, migrateFrom, flags, parseFlags, \
780
                               arch, capsfile, stripmachinealiases) \
781 782 783
    do { \
        static struct testInfo info = { \
            name, "." suffix, NULL, migrateFrom, migrateFrom ? 7 : -1,\
784
            (flags | FLAG_REAL_CAPS), parseFlags, NULL \
785 786 787 788
        }; \
        if (!(info.qemuCaps = qemuTestParseCapabilitiesArch(virArchFromString(arch), \
                                                            capsfile))) \
            return EXIT_FAILURE; \
789 790
        if (stripmachinealiases) \
            virQEMUCapsStripMachineAliases(info.qemuCaps); \
791 792 793 794 795 796 797 798 799
        if (virTestRun("QEMU XML-2-ARGV " name "." suffix, \
                       testCompareXMLToArgv, &info) < 0) \
            ret = -1; \
        virObjectUnref(info.qemuCaps); \
        virObjectUnref(info.vm); \
    } while (0)

# define TEST_CAPS_PATH abs_srcdir "/qemucapabilitiesdata/caps_"

800 801
# define DO_TEST_CAPS_ARCH_VER_FULL(name, flags, parseFlags, arch, ver) \
    DO_TEST_CAPS_INTERNAL(name, arch "-" ver, NULL, flags, parseFlags, \
802
                          arch, TEST_CAPS_PATH ver "." arch ".xml", false)
803

804 805
# define DO_TEST_CAPS_ARCH_VER(name, arch, ver) \
    DO_TEST_CAPS_ARCH_VER_FULL(name, 0, 0, arch, ver)
806 807

# define DO_TEST_CAPS_VER(name, ver) \
808
    DO_TEST_CAPS_ARCH_VER(name, "x86_64", ver)
809

810 811
# define DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, flags, parseFlags) \
    DO_TEST_CAPS_INTERNAL(name, arch "-latest", NULL, flags, parseFlags, arch, \
812 813
                          virHashLookup(capslatest, arch), true)

814 815 816
# define DO_TEST_CAPS_ARCH_LATEST(name, arch) \
    DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, 0, 0)

817
# define DO_TEST_CAPS_LATEST(name) \
818
    DO_TEST_CAPS_ARCH_LATEST(name, "x86_64")
819

820 821 822 823 824 825
# define DO_TEST_CAPS_LATEST_FAILURE(name) \
    DO_TEST_CAPS_ARCH_LATEST_FULL(name, "x86_64", FLAG_EXPECT_FAILURE, 0)

# define DO_TEST_CAPS_LATEST_PARSE_ERROR(name) \
    DO_TEST_CAPS_ARCH_LATEST_FULL(name, "x86_64", FLAG_EXPECT_PARSE_ERROR, 0)

826 827 828 829 830 831 832 833 834 835
/**
 * The following test macros should be used only in cases when the tests require
 * testing of some non-standard combination of capability flags
 */
# define DO_TEST_CAPS_FULL(name, flags, parseFlags, ver) \
    DO_TEST_CAPS_ARCH(name, NULL, flags, parseFlags, GIC_NONE, "x86_64", ver)

# define DO_TEST_CAPS(name, ver) \
    DO_TEST_CAPS_FULL(name, 0, 0, ver)

836 837 838 839
# define DO_TEST_FULL(name, migrateFrom, migrateFd, flags, \
                      parseFlags, gic, ...) \
    do { \
        static struct testInfo info = { \
840
            name, NULL, NULL, migrateFrom, migrateFd, (flags), parseFlags, \
841
            NULL \
842 843 844 845 846 847 848
        }; \
        if (testInitQEMUCaps(&info, gic) < 0) \
            return EXIT_FAILURE; \
        virQEMUCapsSetList(info.qemuCaps, __VA_ARGS__, QEMU_CAPS_LAST); \
        if (virTestRun("QEMU XML-2-ARGV " name, \
                       testCompareXMLToArgv, &info) < 0) \
            ret = -1; \
849 850
        if (((flags) & FLAG_STEAL_VM) && \
            virTestRun("QEMU XML-2-startup-XML " name, \
J
Ján Tomko 已提交
851
                       testCompareXMLToStartupXML, &info) < 0) \
852
            ret = -1; \
853
        virObjectUnref(info.qemuCaps); \
854
        virObjectUnref(info.vm); \
855 856
    } while (0)

857
# define DO_TEST(name, ...) \
858
    DO_TEST_FULL(name, NULL, -1, 0, 0, GIC_NONE, __VA_ARGS__)
859

860
# define DO_TEST_GIC(name, gic, ...) \
861 862
    DO_TEST_FULL(name, NULL, -1, 0, 0, gic, __VA_ARGS__)

863 864 865
# define DO_TEST_WITH_STARTUP(name, ...) \
    DO_TEST_FULL(name, NULL, -1, FLAG_STEAL_VM, 0, GIC_NONE, __VA_ARGS__)

866 867
# define DO_TEST_FAILURE(name, ...) \
    DO_TEST_FULL(name, NULL, -1, FLAG_EXPECT_FAILURE, \
868
                 0, GIC_NONE, __VA_ARGS__)
869

870 871 872
# define DO_TEST_PARSE_ERROR(name, ...) \
    DO_TEST_FULL(name, NULL, -1, \
                 FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE, \
873
                 0, GIC_NONE, __VA_ARGS__)
874

875 876 877
# define DO_TEST_PARSE_FLAGS_ERROR(name, parseFlags, ...) \
    DO_TEST_FULL(name, NULL, -1, \
                 FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE, \
878
                 parseFlags, GIC_NONE, __VA_ARGS__)
879 880

# define NONE QEMU_CAPS_LAST
881

882 883 884
    /* 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 */
885 886 887 888 889 890 891
    setenv("PATH", "/bin", 1);
    setenv("USER", "test", 1);
    setenv("LOGNAME", "test", 1);
    setenv("HOME", "/home/test", 1);
    unsetenv("TMPDIR");
    unsetenv("LD_PRELOAD");
    unsetenv("LD_LIBRARY_PATH");
892 893
    unsetenv("QEMU_AUDIO_DRV");
    unsetenv("SDL_AUDIODRIVER");
894

895
    DO_TEST("minimal", NONE);
896 897
    DO_TEST("minimal-sandbox",
            QEMU_CAPS_SECCOMP_BLACKLIST);
898
    DO_TEST_PARSE_ERROR("minimal-no-memory", NONE);
899
    DO_TEST("minimal-msg-timestamp", QEMU_CAPS_MSG_TIMESTAMP);
900 901 902 903

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

904
    DO_TEST("machine-aliases1", NONE);
905
    DO_TEST("machine-aliases2", QEMU_CAPS_KVM);
906
    DO_TEST("machine-core-on", NONE);
907
    driver.config->dumpGuestCore = true;
908
    DO_TEST("machine-core-off", NONE);
909
    driver.config->dumpGuestCore = false;
M
Michal Privoznik 已提交
910 911 912
    DO_TEST("machine-smm-opt",
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
913
            QEMU_CAPS_DEVICE_IOH3420,
M
Michal Privoznik 已提交
914 915 916
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_MACHINE_SMM_OPT,
            QEMU_CAPS_VIRTIO_SCSI);
917
    DO_TEST("machine-vmport-opt",
918
            QEMU_CAPS_MACHINE_VMPORT_OPT);
919 920 921
    DO_TEST("default-kvm-host-arch", NONE);
    DO_TEST("default-qemu-host-arch", NONE);
    DO_TEST("x86-kvm-32-on-64", NONE);
922 923 924
    DO_TEST("boot-cdrom", NONE);
    DO_TEST("boot-network", NONE);
    DO_TEST("boot-floppy", NONE);
925
    DO_TEST("boot-floppy-q35",
926
            QEMU_CAPS_DEVICE_IOH3420,
927
            QEMU_CAPS_ICH9_AHCI);
J
Ján Tomko 已提交
928 929
    DO_TEST("boot-multi", NONE);
    DO_TEST("boot-menu-enable", NONE);
930
    DO_TEST("boot-menu-enable-with-timeout",
931
            QEMU_CAPS_SPLASH_TIMEOUT);
J
Ján Tomko 已提交
932
    DO_TEST_FAILURE("boot-menu-enable-with-timeout", NONE);
933
    DO_TEST_PARSE_ERROR("boot-menu-enable-with-timeout-invalid", NONE);
J
Ján Tomko 已提交
934 935
    DO_TEST("boot-menu-disable", NONE);
    DO_TEST("boot-menu-disable-drive", NONE);
936
    DO_TEST_PARSE_ERROR("boot-dev+order",
937
            QEMU_CAPS_VIRTIO_BLK_SCSI);
938
    DO_TEST("boot-order",
939
            QEMU_CAPS_VIRTIO_BLK_SCSI);
940
    DO_TEST("boot-complex",
941
            QEMU_CAPS_VIRTIO_BLK_SCSI);
942
    DO_TEST("boot-strict",
943
            QEMU_CAPS_BOOT_STRICT,
944
            QEMU_CAPS_VIRTIO_BLK_SCSI);
945 946 947 948 949

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

950
    DO_TEST("bios",
951
            QEMU_CAPS_DEVICE_ISA_SERIAL,
952
            QEMU_CAPS_SGA);
J
Ján Tomko 已提交
953
    DO_TEST("bios-nvram", NONE);
M
Michal Privoznik 已提交
954 955 956
    DO_TEST("bios-nvram-secure",
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
957
            QEMU_CAPS_DEVICE_IOH3420,
M
Michal Privoznik 已提交
958 959 960
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_MACHINE_SMM_OPT,
            QEMU_CAPS_VIRTIO_SCSI);
961 962 963 964 965 966 967

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

968
    DO_TEST("clock-utc", NONE);
969
    DO_TEST("clock-localtime", NONE);
J
Ján Tomko 已提交
970 971 972 973
    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 已提交
974
    DO_TEST("clock-catchup", QEMU_CAPS_KVM_PIT_TICK_POLICY);
975 976
    DO_TEST("cpu-kvmclock", NONE);
    DO_TEST("cpu-host-kvmclock", NONE);
977
    DO_TEST("kvmclock", QEMU_CAPS_KVM);
978
    DO_TEST("clock-timer-hyperv-rtc", QEMU_CAPS_KVM);
979

980 981
    DO_TEST("cpu-eoi-disabled", NONE);
    DO_TEST("cpu-eoi-enabled", NONE);
J
Ján Tomko 已提交
982
    DO_TEST("controller-order",
983 984 985 986 987 988
            QEMU_CAPS_KVM,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_CCID_PASSTHRU,
            QEMU_CAPS_SPICE,
            QEMU_CAPS_HDA_DUPLEX,
            QEMU_CAPS_USB_HUB,
989
            QEMU_CAPS_DEVICE_ISA_SERIAL,
990
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
991 992
    DO_TEST("eoi-disabled", NONE);
    DO_TEST("eoi-enabled", NONE);
993 994
    DO_TEST("pv-spinlock-disabled", NONE);
    DO_TEST("pv-spinlock-enabled", NONE);
995
    DO_TEST("kvmclock+eoi-disabled", NONE);
996

997
    DO_TEST("hyperv", NONE);
998
    DO_TEST("hyperv-off", NONE);
999
    DO_TEST("hyperv-panic", NONE);
1000

1001 1002 1003
    DO_TEST("kvm-features", NONE);
    DO_TEST("kvm-features-off", NONE);

1004 1005 1006
    DO_TEST("pmu-feature", NONE);
    DO_TEST("pmu-feature-off", NONE);

1007 1008 1009
    DO_TEST("pages-discard",
            QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
1010 1011 1012 1013
    DO_TEST("pages-discard-hugepages",
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
1014 1015 1016 1017
    DO_TEST("pages-dimm-discard",
            QEMU_CAPS_DEVICE_PC_DIMM,
            QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
1018
    DO_TEST("hugepages-default", NONE);
1019
    DO_TEST("hugepages-default-2M", NONE);
1020
    DO_TEST("hugepages-default-system-size", NONE);
1021
    DO_TEST_PARSE_ERROR("hugepages-default-1G-nodeset-2M", NONE);
1022
    DO_TEST("hugepages-nodeset", NONE);
1023 1024 1025 1026
    DO_TEST_PARSE_ERROR("hugepages-nodeset-nonexist",
                        QEMU_CAPS_DEVICE_PC_DIMM,
                        QEMU_CAPS_OBJECT_MEMORY_FILE,
                        QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
1027
    DO_TEST("hugepages-numa-default",
1028
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1029 1030 1031
    DO_TEST("hugepages-numa-default-2M",
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1032
    DO_TEST("hugepages-numa-default-dimm",
1033
            QEMU_CAPS_DEVICE_PC_DIMM,
J
Ján Tomko 已提交
1034
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1035
    DO_TEST("hugepages-numa-nodeset",
A
Andrea Bolognani 已提交
1036
            QEMU_CAPS_OBJECT_MEMORY_RAM,
1037
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1038 1039
    DO_TEST("hugepages-numa-nodeset-part",
            QEMU_CAPS_OBJECT_MEMORY_RAM,
1040
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1041 1042 1043
    DO_TEST_PARSE_ERROR("hugepages-numa-nodeset-nonexist",
                        QEMU_CAPS_OBJECT_MEMORY_RAM,
                        QEMU_CAPS_OBJECT_MEMORY_FILE);
A
Andrea Bolognani 已提交
1044 1045 1046
    DO_TEST("hugepages-shared",
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1047
    DO_TEST_PARSE_ERROR("hugepages-memaccess-invalid", NONE);
1048 1049 1050
    DO_TEST("hugepages-memaccess", QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_DEVICE_PC_DIMM,
            QEMU_CAPS_NUMA);
1051 1052 1053
    DO_TEST("hugepages-memaccess2", QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_DEVICE_PC_DIMM,
            QEMU_CAPS_NUMA);
1054 1055 1056
    DO_TEST_PARSE_ERROR("hugepages-memaccess3",
                        QEMU_CAPS_OBJECT_MEMORY_RAM,
                        QEMU_CAPS_OBJECT_MEMORY_FILE);
1057
    DO_TEST_CAPS_LATEST("hugepages-nvdimm");
1058
    DO_TEST("nosharepages", QEMU_CAPS_MEM_MERGE);
1059
    DO_TEST("disk-cdrom", NONE);
1060
    DO_TEST_CAPS_VER("disk-cdrom", "2.12.0");
1061
    DO_TEST_CAPS_LATEST("disk-cdrom");
1062
    DO_TEST("disk-iscsi", NONE);
1063
    DO_TEST("disk-cdrom-network", QEMU_CAPS_KVM);
1064
    DO_TEST_CAPS_VER("disk-cdrom-network", "2.12.0");
1065
    DO_TEST_CAPS_LATEST("disk-cdrom-network");
1066
    DO_TEST("disk-cdrom-tray",
1067
            QEMU_CAPS_VIRTIO_TX_ALG);
1068
    DO_TEST_CAPS_VER("disk-cdrom-tray", "2.12.0");
1069
    DO_TEST_CAPS_LATEST("disk-cdrom-tray");
1070
    DO_TEST("disk-floppy", NONE);
1071
    DO_TEST_CAPS_VER("disk-floppy", "2.12.0");
1072
    DO_TEST_CAPS_LATEST("disk-floppy");
1073
    DO_TEST_CAPS_VER("disk-floppy-q35-2_9", "2.12.0");
1074
    DO_TEST_CAPS_LATEST("disk-floppy-q35-2_9");
1075
    DO_TEST_CAPS_VER("disk-floppy-q35-2_11", "2.12.0");
1076
    DO_TEST_CAPS_LATEST("disk-floppy-q35-2_11");
1077 1078
    DO_TEST_FAILURE("disk-floppy-pseries",
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
1079
    DO_TEST("disk-floppy-tray", NONE);
1080
    DO_TEST("disk-virtio-s390",
1081
            QEMU_CAPS_VIRTIO_S390);
1082
    DO_TEST("disk-virtio", NONE);
1083
    DO_TEST("disk-virtio-ccw",
1084
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1085
    DO_TEST("disk-virtio-ccw-many",
1086
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1087
    DO_TEST("disk-virtio-scsi-ccw", QEMU_CAPS_VIRTIO_SCSI,
1088
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1089 1090 1091 1092
    DO_TEST("disk-virtio-s390-zpci",
            QEMU_CAPS_DEVICE_ZPCI,
            QEMU_CAPS_CCW,
            QEMU_CAPS_VIRTIO_S390);
1093
    DO_TEST("disk-order", QEMU_CAPS_VIRTIO_BLK_SCSI);
1094
    DO_TEST("disk-virtio-queues",
L
Lin Ma 已提交
1095
            QEMU_CAPS_VIRTIO_BLK_NUM_QUEUES);
1096 1097 1098
    DO_TEST("disk-boot-disk", NONE);
    DO_TEST("disk-boot-cdrom", NONE);
    DO_TEST("floppy-drive-fat", NONE);
1099
    DO_TEST_CAPS_VER("floppy-drive-fat", "2.12.0");
1100
    DO_TEST_CAPS_LATEST("floppy-drive-fat");
1101
    DO_TEST("disk-readonly-disk", NONE);
1102
    DO_TEST_CAPS_VER("disk-readonly-disk", "2.12.0");
1103
    DO_TEST_CAPS_LATEST("disk-readonly-disk");
1104 1105 1106 1107
    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);
1108
    DO_TEST_WITH_STARTUP("disk-shared", NONE);
1109
    DO_TEST_CAPS_VER("disk-shared", "2.12.0");
1110
    DO_TEST_CAPS_LATEST("disk-shared");
1111 1112
    DO_TEST_PARSE_ERROR("disk-shared-qcow", NONE);
    DO_TEST("disk-shared-locking",
1113
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DISK_SHARE_RW);
1114
    DO_TEST("disk-error-policy", NONE);
1115
    DO_TEST_CAPS_VER("disk-error-policy", "2.12.0");
1116
    DO_TEST_CAPS_LATEST("disk-error-policy");
1117
    DO_TEST("disk-cache", QEMU_CAPS_SCSI_LSI, QEMU_CAPS_DEVICE_USB_STORAGE);
1118 1119
    DO_TEST_CAPS_VER("disk-cache", "2.6.0");
    DO_TEST_CAPS_VER("disk-cache", "2.7.0");
1120
    DO_TEST_CAPS_VER("disk-cache", "2.12.0");
1121
    DO_TEST_CAPS_LATEST("disk-cache");
1122
    DO_TEST("disk-network-nbd", NONE);
1123
    DO_TEST_CAPS_VER("disk-network-nbd", "2.12.0");
1124
    DO_TEST_CAPS_LATEST("disk-network-nbd");
1125
    DO_TEST("disk-network-iscsi", QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_BLOCK);
1126 1127 1128 1129
    DO_TEST("disk-network-iscsi-modern",
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_BLOCK,
            QEMU_CAPS_ISCSI_PASSWORD_SECRET);
1130
    DO_TEST_CAPS_VER("disk-network-iscsi", "2.12.0");
1131
    DO_TEST_CAPS_LATEST("disk-network-iscsi");
1132 1133 1134 1135
    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",
1136
            QEMU_CAPS_GLUSTER_DEBUG_LEVEL);
1137
    DO_TEST_CAPS_VER("disk-network-gluster", "2.12.0");
1138
    DO_TEST_CAPS_LATEST("disk-network-gluster");
1139
    DO_TEST_CAPS_VER("disk-network-rbd", "2.5.0");
1140
    DO_TEST_CAPS_VER("disk-network-rbd", "2.12.0");
1141 1142
    DO_TEST_CAPS_LATEST("disk-network-rbd");
    DO_TEST_FAILURE("disk-network-rbd-no-colon", NONE);
1143
    DO_TEST("disk-network-sheepdog", NONE);
1144
    DO_TEST_CAPS_VER("disk-network-sheepdog", "2.12.0");
1145
    DO_TEST_CAPS_LATEST("disk-network-sheepdog");
1146
    DO_TEST("disk-network-source-auth", NONE);
1147
    DO_TEST_CAPS_VER("disk-network-source-auth", "2.12.0");
1148
    DO_TEST_CAPS_LATEST("disk-network-source-auth");
1149
    DO_TEST("disk-network-vxhs", QEMU_CAPS_VXHS);
1150
    driver.config->vxhsTLS = 1;
1151
    DO_TEST("disk-network-tlsx509", QEMU_CAPS_VXHS,
1152
            QEMU_CAPS_OBJECT_TLS_CREDS_X509, QEMU_CAPS_NBD_TLS);
1153
    DO_TEST_CAPS_VER("disk-network-tlsx509", "2.12.0");
1154
    DO_TEST_CAPS_LATEST("disk-network-tlsx509");
1155 1156
    driver.config->vxhsTLS = 0;
    VIR_FREE(driver.config->vxhsTLSx509certdir);
1157
    DO_TEST("disk-no-boot", NONE);
1158
    DO_TEST_PARSE_ERROR("disk-device-lun-type-invalid",
1159 1160
                        QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST_FAILURE("disk-usb-nosupport", NONE);
1161
    DO_TEST("disk-usb-device",
1162
            QEMU_CAPS_DEVICE_USB_STORAGE);
1163
    DO_TEST("disk-usb-device-removable",
1164
            QEMU_CAPS_DEVICE_USB_STORAGE,
1165
            QEMU_CAPS_USB_STORAGE_REMOVABLE);
1166
    DO_TEST_FAILURE("disk-usb-pci",
1167
                    QEMU_CAPS_DEVICE_USB_STORAGE);
1168
    DO_TEST("disk-scsi-device",
1169
            QEMU_CAPS_SCSI_LSI);
1170
    DO_TEST("disk-scsi-device-auto",
1171
            QEMU_CAPS_SCSI_LSI);
1172
    DO_TEST("disk-scsi-disk-split",
1173
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI);
1174
    DO_TEST("disk-scsi-disk-wwn",
1175
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
1176 1177
            QEMU_CAPS_SCSI_DISK_WWN);
    DO_TEST("disk-scsi-disk-vpd",
1178
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
1179 1180
            QEMU_CAPS_SCSI_DISK_WWN);
    DO_TEST_FAILURE("disk-scsi-disk-vpd-build-error",
1181
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
1182
            QEMU_CAPS_SCSI_DISK_WWN);
1183
    DO_TEST("disk-scsi-vscsi", NONE);
1184
    DO_TEST("disk-scsi-virtio-scsi",
1185
            QEMU_CAPS_VIRTIO_SCSI);
1186 1187
    DO_TEST("disk-virtio-scsi-num_queues",
            QEMU_CAPS_VIRTIO_SCSI);
1188 1189 1190 1191
    DO_TEST("disk-virtio-scsi-cmd_per_lun",
            QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST("disk-virtio-scsi-max_sectors",
            QEMU_CAPS_VIRTIO_SCSI);
1192 1193
    DO_TEST("disk-virtio-scsi-ioeventfd",
            QEMU_CAPS_VIRTIO_IOEVENTFD, QEMU_CAPS_VIRTIO_SCSI);
1194 1195
    DO_TEST("disk-scsi-megasas",
            QEMU_CAPS_SCSI_MEGASAS);
1196 1197 1198
    DO_TEST("disk-scsi-mptsas1068",
            QEMU_CAPS_SCSI_MPTSAS1068,
            QEMU_CAPS_SCSI_DISK_WWN);
1199
    DO_TEST("disk-sata-device",
1200
            QEMU_CAPS_ICH9_AHCI);
J
Ján Tomko 已提交
1201
    DO_TEST("disk-aio", NONE);
1202
    DO_TEST_CAPS_VER("disk-aio", "2.12.0");
1203
    DO_TEST_CAPS_LATEST("disk-aio");
1204 1205
    DO_TEST("disk-source-pool", NONE);
    DO_TEST("disk-source-pool-mode", NONE);
1206
    DO_TEST("disk-ioeventfd",
1207
            QEMU_CAPS_VIRTIO_IOEVENTFD,
1208
            QEMU_CAPS_VIRTIO_TX_ALG,
1209
            QEMU_CAPS_VIRTIO_BLK_SCSI);
1210
    DO_TEST("disk-copy_on_read",
1211
            QEMU_CAPS_VIRTIO_TX_ALG,
1212
            QEMU_CAPS_VIRTIO_BLK_SCSI);
1213
    DO_TEST_CAPS_VER("disk-copy_on_read", "2.12.0");
1214
    DO_TEST_CAPS_LATEST("disk-copy_on_read");
1215
    DO_TEST("disk-discard",
1216
            QEMU_CAPS_DRIVE_DISCARD);
1217
    DO_TEST("disk-detect-zeroes",
1218 1219
            QEMU_CAPS_DRIVE_DISCARD,
            QEMU_CAPS_DRIVE_DETECT_ZEROES);
1220
    DO_TEST_CAPS_VER("disk-detect-zeroes", "2.12.0");
1221
    DO_TEST_CAPS_LATEST("disk-detect-zeroes");
1222
    DO_TEST("disk-snapshot", NONE);
1223 1224
    DO_TEST_PARSE_ERROR("disk-same-targets",
                        QEMU_CAPS_SCSI_LSI,
1225
                        QEMU_CAPS_DEVICE_USB_STORAGE);
1226
    DO_TEST_PARSE_ERROR("disk-address-conflict",
1227 1228
                        QEMU_CAPS_ICH9_AHCI);
    DO_TEST_PARSE_ERROR("disk-hostdev-scsi-address-conflict",
1229
                        QEMU_CAPS_VIRTIO_SCSI);
1230
    DO_TEST_PARSE_ERROR("hostdevs-drive-address-conflict",
1231
                        QEMU_CAPS_VIRTIO_SCSI);
1232
    DO_TEST("event_idx",
1233 1234
            QEMU_CAPS_VIRTIO_BLK_EVENT_IDX,
            QEMU_CAPS_VIRTIO_NET_EVENT_IDX,
1235
            QEMU_CAPS_VIRTIO_BLK_SCSI);
1236
    DO_TEST("virtio-lun",
1237
            QEMU_CAPS_VIRTIO_BLK_SCSI);
1238
    DO_TEST("disk-scsi-lun-passthrough",
1239
            QEMU_CAPS_SCSI_BLOCK,
1240
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI);
1241
    DO_TEST("disk-serial",
1242
            QEMU_CAPS_KVM);
1243 1244 1245 1246 1247 1248 1249 1250
    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);
1251 1252 1253 1254
    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");
1255

1256 1257 1258
    DO_TEST("graphics-egl-headless",
            QEMU_CAPS_EGL_HEADLESS,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1259 1260
    DO_TEST_CAPS_LATEST("graphics-egl-headless");
    DO_TEST_CAPS_LATEST("graphics-egl-headless-rendernode");
1261

1262 1263
    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);
1264 1265
    DO_TEST("graphics-vnc-websocket",
            QEMU_CAPS_VNC,
1266
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1267
    DO_TEST("graphics-vnc-policy", QEMU_CAPS_VNC,
1268 1269 1270 1271 1272
            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);
1273
    driver.config->vncAutoUnixSocket = true;
1274 1275
    DO_TEST("graphics-vnc-auto-socket-cfg", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1276
    driver.config->vncAutoUnixSocket = false;
1277 1278 1279 1280
    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);
1281 1282
    DO_TEST("graphics-vnc-socket-new-cmdline", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA, QEMU_CAPS_VNC_MULTI_SERVERS);
1283

1284 1285
    driver.config->vncSASL = 1;
    VIR_FREE(driver.config->vncSASLdir);
1286
    ignore_value(VIR_STRDUP(driver.config->vncSASLdir, "/root/.sasl2"));
1287
    DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1288 1289
    driver.config->vncTLS = 1;
    driver.config->vncTLSx509verify = 1;
1290
    DO_TEST("graphics-vnc-tls", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1291 1292
    DO_TEST_CAPS_VER("graphics-vnc-tls", "2.4.0");
    DO_TEST_CAPS_LATEST("graphics-vnc-tls");
1293
    driver.config->vncSASL = driver.config->vncTLSx509verify = driver.config->vncTLS = 0;
1294 1295
    VIR_FREE(driver.config->vncSASLdir);
    VIR_FREE(driver.config->vncTLSx509certdir);
1296 1297 1298 1299
    DO_TEST("graphics-vnc-egl-headless",
            QEMU_CAPS_VNC,
            QEMU_CAPS_EGL_HEADLESS,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1300

J
Ján Tomko 已提交
1301 1302
    DO_TEST("graphics-sdl",
            QEMU_CAPS_DEVICE_VGA);
1303
    DO_TEST_CAPS_LATEST_PARSE_ERROR("graphics-sdl-egl-headless");
J
Ján Tomko 已提交
1304
    DO_TEST("graphics-sdl-fullscreen",
1305
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1306
    DO_TEST("graphics-spice",
1307
            QEMU_CAPS_SPICE,
1308 1309
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
1310
    DO_TEST("graphics-spice-no-args",
1311
            QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1312 1313 1314
    driver.config->spiceSASL = 1;
    ignore_value(VIR_STRDUP(driver.config->spiceSASLdir, "/root/.sasl2"));
    DO_TEST("graphics-spice-sasl",
1315
            QEMU_CAPS_SPICE,
1316 1317 1318
            QEMU_CAPS_DEVICE_QXL);
    VIR_FREE(driver.config->spiceSASLdir);
    driver.config->spiceSASL = 0;
1319
    DO_TEST("graphics-spice-agentmouse",
1320
            QEMU_CAPS_DEVICE_QXL,
1321
            QEMU_CAPS_SPICE,
1322
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1323
    DO_TEST("graphics-spice-compression",
1324
            QEMU_CAPS_SPICE,
1325
            QEMU_CAPS_DEVICE_QXL);
1326
    DO_TEST("graphics-spice-timeout",
1327
            QEMU_CAPS_KVM,
1328
            QEMU_CAPS_SPICE,
1329 1330
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_DEVICE_VGA);
1331
    DO_TEST("graphics-spice-qxl-vga",
1332
            QEMU_CAPS_SPICE,
1333
            QEMU_CAPS_DEVICE_QXL);
1334
    DO_TEST("graphics-spice-usb-redir",
1335
            QEMU_CAPS_SPICE,
1336 1337 1338 1339
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1340
    DO_TEST("graphics-spice-agent-file-xfer",
1341
            QEMU_CAPS_SPICE,
1342 1343
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
1344 1345
    DO_TEST("graphics-spice-socket",
            QEMU_CAPS_SPICE,
1346 1347
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1348 1349
    DO_TEST("graphics-spice-auto-socket",
            QEMU_CAPS_SPICE,
1350 1351
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1352 1353 1354
    driver.config->spiceAutoUnixSocket = true;
    DO_TEST("graphics-spice-auto-socket-cfg",
            QEMU_CAPS_SPICE,
1355 1356
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1357
    driver.config->spiceAutoUnixSocket = false;
1358 1359 1360 1361
    DO_TEST("graphics-spice-egl-headless",
            QEMU_CAPS_SPICE,
            QEMU_CAPS_EGL_HEADLESS,
            QEMU_CAPS_DEVICE_QXL);
1362
    DO_TEST_CAPS_LATEST_PARSE_ERROR("graphics-spice-invalid-egl-headless");
1363
    DO_TEST_CAPS_LATEST("graphics-spice-gl-auto-rendernode");
1364

1365 1366 1367
    DO_TEST("input-usbmouse", NONE);
    DO_TEST("input-usbtablet", NONE);
    DO_TEST("misc-acpi", NONE);
1368 1369 1370
    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);
1371
    DO_TEST_FAILURE("misc-enable-s4", NONE);
1372
    DO_TEST("misc-no-reboot", NONE);
1373
    DO_TEST("misc-uuid", NONE);
1374
    DO_TEST_PARSE_ERROR("vhost_queues-invalid", NONE);
1375
    DO_TEST("net-vhostuser", QEMU_CAPS_CHARDEV_FD_PASS);
1376 1377
    DO_TEST_CAPS_VER("net-vhostuser", "2.5.0");
    DO_TEST_CAPS_LATEST("net-vhostuser");
1378
    DO_TEST("net-vhostuser-multiq",
J
Ján Tomko 已提交
1379 1380
            QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
    DO_TEST_FAILURE("net-vhostuser-multiq", NONE);
1381 1382
    DO_TEST_FAILURE("net-vhostuser-fail",
                    QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
1383
    DO_TEST("net-user", NONE);
J
Ján Tomko 已提交
1384
    DO_TEST("net-user-addr", NONE);
1385 1386
    DO_TEST("net-virtio", NONE);
    DO_TEST("net-virtio-device",
1387 1388 1389
            QEMU_CAPS_VIRTIO_TX_ALG);
    DO_TEST("net-virtio-disable-offloads", NONE);
    DO_TEST("net-virtio-netdev", NONE);
1390
    DO_TEST("net-virtio-s390",
1391
            QEMU_CAPS_VIRTIO_S390);
1392
    DO_TEST("net-virtio-ccw",
1393
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1394 1395 1396
    DO_TEST("net-virtio-rxtxqueuesize",
            QEMU_CAPS_VIRTIO_NET_RX_QUEUE_SIZE,
            QEMU_CAPS_VIRTIO_NET_TX_QUEUE_SIZE);
1397
    DO_TEST_PARSE_ERROR("net-virtio-rxqueuesize-invalid-size", NONE);
1398 1399
    DO_TEST("net-eth", NONE);
    DO_TEST("net-eth-ifname", NONE);
1400
    DO_TEST("net-eth-names", NONE);
1401
    DO_TEST("net-eth-hostip", NONE);
1402 1403 1404
    DO_TEST("net-client", NONE);
    DO_TEST("net-server", NONE);
    DO_TEST("net-mcast", NONE);
1405
    DO_TEST("net-udp", NONE);
1406
    DO_TEST("net-hostdev", NONE);
1407
    DO_TEST("net-hostdev-bootorder", NONE);
1408
    DO_TEST("net-hostdev-multidomain", NONE);
1409 1410
    DO_TEST("net-hostdev-vfio",
            QEMU_CAPS_DEVICE_VFIO_PCI);
1411
    DO_TEST("net-hostdev-vfio-multidomain",
1412
            QEMU_CAPS_DEVICE_VFIO_PCI);
1413 1414 1415
    DO_TEST_FAILURE("net-hostdev-fail",
                    QEMU_CAPS_DEVICE_VFIO_PCI);

1416

1417 1418
    DO_TEST("serial-file-log",
            QEMU_CAPS_CHARDEV_FILE_APPEND,
1419
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1420
            QEMU_CAPS_CHARDEV_LOGFILE);
1421
    DO_TEST("serial-spiceport",
1422
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1423
            QEMU_CAPS_DEVICE_QXL,
1424
            QEMU_CAPS_SPICE,
1425
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1426
    DO_TEST("serial-spiceport-nospice", NONE);
1427

1428 1429 1430 1431
    DO_TEST("console-compat",
            QEMU_CAPS_DEVICE_ISA_SERIAL);
    DO_TEST("console-compat-auto",
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1432 1433

    DO_TEST("serial-vc-chardev",
1434
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1435
    DO_TEST("serial-pty-chardev",
1436
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1437
    DO_TEST("serial-dev-chardev",
1438
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1439
    DO_TEST("serial-dev-chardev-iobase",
1440
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1441
    DO_TEST("serial-file-chardev",
1442
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1443
            QEMU_CAPS_CHARDEV_FILE_APPEND);
1444
    DO_TEST("serial-unix-chardev",
1445
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1446
    DO_TEST_CAPS_LATEST("serial-unix-chardev");
1447
    DO_TEST_PARSE_ERROR("serial-unix-missing-source", NONE);
1448
    DO_TEST("serial-tcp-chardev",
1449
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1450
    DO_TEST("serial-udp-chardev",
1451
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1452
    DO_TEST("serial-tcp-telnet-chardev",
1453
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1454 1455
    driver.config->chardevTLS = 1;
    DO_TEST("serial-tcp-tlsx509-chardev",
1456
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1457
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1458 1459
    driver.config->chardevTLSx509verify = 1;
    DO_TEST("serial-tcp-tlsx509-chardev-verify",
1460
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1461 1462
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
    driver.config->chardevTLSx509verify = 0;
1463
    DO_TEST("serial-tcp-tlsx509-chardev-notls",
1464
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1465
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1466 1467 1468 1469 1470 1471 1472 1473
    VIR_FREE(driver.config->chardevTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->chardevTLSx509certdir, "/etc/pki/libvirt-chardev") < 0)
        return EXIT_FAILURE;
    if (VIR_STRDUP_QUIET(driver.config->chardevTLSx509secretUUID,
                         "6fd3f62d-9fe7-4a4e-a869-7acd6376d8ea") < 0)
        return EXIT_FAILURE;
    DO_TEST("serial-tcp-tlsx509-secret-chardev",
            QEMU_CAPS_OBJECT_SECRET,
1474
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1475
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1476 1477
    driver.config->chardevTLS = 0;
    VIR_FREE(driver.config->chardevTLSx509certdir);
1478
    DO_TEST("serial-many-chardev",
1479 1480 1481
            QEMU_CAPS_DEVICE_ISA_SERIAL);
    DO_TEST("parallel-tcp-chardev", NONE);
    DO_TEST("parallel-parport-chardev", NONE);
J
Ján Tomko 已提交
1482 1483
    DO_TEST_CAPS_VER("parallel-unix-chardev", "2.5.0");
    DO_TEST_CAPS_LATEST("parallel-unix-chardev");
1484
    DO_TEST("console-compat-chardev",
1485
            QEMU_CAPS_DEVICE_ISA_SERIAL);
M
Michal Privoznik 已提交
1486 1487
    DO_TEST("pci-serial-dev-chardev",
            QEMU_CAPS_DEVICE_PCI_SERIAL);
1488

1489
    DO_TEST("channel-guestfwd", NONE);
J
Ján Tomko 已提交
1490 1491
    DO_TEST_CAPS_VER("channel-unix-guestfwd", "2.5.0");
    DO_TEST_CAPS_LATEST("channel-unix-guestfwd");
1492 1493 1494 1495 1496 1497
    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);
1498
    DO_TEST("console-virtio-many",
1499
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1500
    DO_TEST("console-virtio-s390",
1501
            QEMU_CAPS_VIRTIO_S390);
1502
    DO_TEST("console-virtio-ccw",
1503
            QEMU_CAPS_CCW,
1504
            QEMU_CAPS_VIRTIO_S390);
J
Ján Tomko 已提交
1505 1506
    DO_TEST_CAPS_VER("console-virtio-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("console-virtio-unix");
1507
    DO_TEST("console-sclp",
1508
            QEMU_CAPS_VIRTIO_S390,
1509
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
1510
    DO_TEST("channel-spicevmc",
1511
            QEMU_CAPS_SPICE,
1512
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1513
    DO_TEST("channel-virtio-default",
1514
            QEMU_CAPS_SPICE);
1515
    DO_TEST("channel-virtio-unix", NONE);
1516

1517
    DO_TEST("smartcard-host",
1518
            QEMU_CAPS_CCID_EMULATED);
1519
    DO_TEST("smartcard-host-certificates",
1520
            QEMU_CAPS_CCID_EMULATED);
1521 1522
    DO_TEST("smartcard-host-certificates-database",
            QEMU_CAPS_CCID_EMULATED);
1523
    DO_TEST("smartcard-passthrough-tcp",
1524
            QEMU_CAPS_CCID_PASSTHRU);
1525
    DO_TEST("smartcard-passthrough-spicevmc",
1526
            QEMU_CAPS_CCID_PASSTHRU);
1527
    DO_TEST("smartcard-controller",
1528
            QEMU_CAPS_CCID_EMULATED);
J
Ján Tomko 已提交
1529 1530
    DO_TEST_CAPS_VER("smartcard-passthrough-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("smartcard-passthrough-unix");
1531

1532 1533 1534 1535 1536 1537 1538 1539
    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);
1540 1541
    DO_TEST_PARSE_ERROR("chardev-reconnect-generated-path",
                        QEMU_CAPS_CHARDEV_RECONNECT);
1542

1543
    DO_TEST("usb-controller", NONE);
1544
    DO_TEST("usb-piix3-controller",
1545
            QEMU_CAPS_PIIX3_USB_UHCI);
1546
    DO_TEST("usb-ich9-ehci-addr",
1547
            QEMU_CAPS_ICH9_USB_EHCI1);
1548
    DO_TEST("input-usbmouse-addr", NONE);
1549
    DO_TEST("usb-ich9-companion",
1550
            QEMU_CAPS_ICH9_USB_EHCI1);
1551
    DO_TEST_PARSE_ERROR("usb-ich9-no-companion",
1552
            QEMU_CAPS_ICH9_USB_EHCI1);
1553
    DO_TEST("usb-ich9-autoassign",
1554
            QEMU_CAPS_ICH9_USB_EHCI1,
1555
            QEMU_CAPS_USB_HUB);
1556
    DO_TEST("usb-hub",
1557
            QEMU_CAPS_USB_HUB);
1558
    DO_TEST("usb-hub-autoadd",
1559
            QEMU_CAPS_USB_HUB);
1560
    DO_TEST("usb-hub-autoadd-deluxe",
1561
            QEMU_CAPS_USB_HUB);
J
Ján Tomko 已提交
1562
    DO_TEST_PARSE_ERROR("usb-hub-conflict",
1563
            QEMU_CAPS_USB_HUB);
1564
    DO_TEST_PARSE_ERROR("usb-hub-nonexistent",
1565
            QEMU_CAPS_USB_HUB);
J
Ján Tomko 已提交
1566
    DO_TEST("usb-port-missing",
1567
            QEMU_CAPS_USB_HUB);
1568
    DO_TEST_FAILURE("usb-bus-missing",
1569
                    QEMU_CAPS_USB_HUB);
1570
    DO_TEST("usb-ports",
1571
            QEMU_CAPS_USB_HUB);
1572
    DO_TEST_PARSE_ERROR("usb-ports-out-of-range",
1573
            QEMU_CAPS_USB_HUB);
1574
    DO_TEST("usb-port-autoassign",
1575
            QEMU_CAPS_USB_HUB);
1576
    DO_TEST("usb-redir",
1577 1578 1579
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
1580
            QEMU_CAPS_SPICE);
1581
    DO_TEST("usb-redir-boot",
1582 1583 1584
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
1585
            QEMU_CAPS_SPICE);
1586
    DO_TEST("usb-redir-filter",
1587 1588 1589 1590
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE,
1591
            QEMU_CAPS_USB_REDIR_FILTER);
1592 1593
    DO_TEST("usb-redir-filter-version",
            QEMU_CAPS_USB_REDIR,
1594
            QEMU_CAPS_SPICE,
1595
            QEMU_CAPS_USB_REDIR_FILTER);
J
Ján Tomko 已提交
1596 1597
    DO_TEST_CAPS_VER("usb-redir-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("usb-redir-unix");
1598
    DO_TEST("usb1-usb2",
1599 1600 1601
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1);
1602 1603
    DO_TEST("usb-none", NONE);
    DO_TEST_PARSE_ERROR("usb-none-other", NONE);
1604 1605
    DO_TEST_PARSE_ERROR("usb-none-hub",
            QEMU_CAPS_USB_HUB);
1606
    DO_TEST_PARSE_ERROR("usb-none-usbtablet", NONE);
1607
    DO_TEST("usb-controller-default-q35",
1608
            QEMU_CAPS_DEVICE_IOH3420,
1609 1610 1611
            QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI);
1612
    DO_TEST_FAILURE("usb-controller-default-unavailable-q35",
1613
                    QEMU_CAPS_DEVICE_IOH3420,
1614
                    QEMU_CAPS_PCI_OHCI,
1615 1616
                    QEMU_CAPS_NEC_USB_XHCI);
    DO_TEST("usb-controller-explicit-q35",
1617
            QEMU_CAPS_DEVICE_IOH3420,
1618 1619 1620
            QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI);
1621
    DO_TEST_FAILURE("usb-controller-explicit-unavailable-q35",
1622
                    QEMU_CAPS_DEVICE_IOH3420,
1623
                    QEMU_CAPS_PCI_OHCI,
1624
                    QEMU_CAPS_PIIX3_USB_UHCI);
1625
    DO_TEST("usb-controller-xhci",
1626 1627 1628
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_NEC_USB_XHCI_PORTS);
1629
    DO_TEST("usb-xhci-autoassign",
1630 1631 1632
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_NEC_USB_XHCI_PORTS,
1633
            QEMU_CAPS_USB_HUB);
1634
    DO_TEST_PARSE_ERROR("usb-controller-xhci-limit",
1635 1636 1637
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_NEC_USB_XHCI_PORTS);
1638 1639 1640 1641
    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);
1642

1643 1644 1645
    DO_TEST("smbios", NONE);
    DO_TEST_PARSE_ERROR("smbios-date", NONE);
    DO_TEST_PARSE_ERROR("smbios-uuid-match", NONE);
1646

1647
    DO_TEST("watchdog", NONE);
1648
    DO_TEST("watchdog-device", NONE);
1649
    DO_TEST("watchdog-dump", NONE);
1650
    DO_TEST("watchdog-injectnmi", NONE);
1651
    DO_TEST("watchdog-diag288", QEMU_CAPS_VIRTIO_S390);
1652 1653
    DO_TEST("balloon-device", NONE);
    DO_TEST("balloon-device-deflate",
1654
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1655
    DO_TEST("balloon-ccw-deflate",
1656
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1657
    DO_TEST("balloon-mmio-deflate",
J
Ján Tomko 已提交
1658
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1659
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1660
    DO_TEST("balloon-device-deflate-off",
1661
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1662 1663
    DO_TEST("balloon-device-auto", NONE);
    DO_TEST("balloon-device-period", NONE);
1664 1665
    DO_TEST("sound", NONE);
    DO_TEST("sound-device",
1666
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_HDA_MICRO,
1667
            QEMU_CAPS_HDA_OUTPUT,
1668 1669
            QEMU_CAPS_DEVICE_ICH9_INTEL_HDA,
            QEMU_CAPS_OBJECT_USB_AUDIO);
1670
    DO_TEST("fs9p", NONE);
1671
    DO_TEST("fs9p-ccw",
1672
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1673

1674
    DO_TEST("hostdev-usb-address", NONE);
1675
    DO_TEST("hostdev-usb-address-device", NONE);
1676
    DO_TEST("hostdev-usb-address-device-boot", NONE);
J
Ján Tomko 已提交
1677
    DO_TEST("hostdev-pci-address", NONE);
1678
    DO_TEST("hostdev-pci-address-device", NONE);
1679 1680
    DO_TEST("hostdev-vfio",
            QEMU_CAPS_DEVICE_VFIO_PCI);
1681
    DO_TEST("hostdev-vfio-multidomain",
1682
            QEMU_CAPS_DEVICE_VFIO_PCI);
1683 1684 1685 1686 1687 1688
    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);
1689 1690 1691 1692 1693 1694 1695
    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);
1696 1697
    DO_TEST_PARSE_ERROR("hostdev-vfio-zpci-wrong-arch",
                        QEMU_CAPS_DEVICE_VFIO_PCI);
1698 1699 1700
    DO_TEST("hostdev-vfio-zpci",
            QEMU_CAPS_DEVICE_VFIO_PCI,
            QEMU_CAPS_DEVICE_ZPCI);
1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713
    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);
1714
    DO_TEST("pci-rom", NONE);
1715
    DO_TEST("pci-rom-disabled", NONE);
1716
    DO_TEST("pci-rom-disabled-invalid", NONE);
1717

1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733
    DO_TEST("hostdev-subsys-mdev-vfio-ccw",
            QEMU_CAPS_CCW,
            QEMU_CAPS_CCW_CSSID_UNRESTRICTED,
            QEMU_CAPS_DEVICE_VFIO_CCW);
    DO_TEST_FAILURE("hostdev-subsys-mdev-vfio-ccw",
            QEMU_CAPS_CCW,
            QEMU_CAPS_CCW_CSSID_UNRESTRICTED);
    DO_TEST_PARSE_ERROR("hostdev-subsys-mdev-vfio-ccw-duplicate-address",
            QEMU_CAPS_CCW,
            QEMU_CAPS_CCW_CSSID_UNRESTRICTED,
            QEMU_CAPS_DEVICE_VFIO_CCW);
    DO_TEST_PARSE_ERROR("hostdev-subsys-mdev-vfio-ccw-invalid-address",
            QEMU_CAPS_CCW,
            QEMU_CAPS_CCW_CSSID_UNRESTRICTED,
            QEMU_CAPS_DEVICE_VFIO_CCW);

1734 1735 1736 1737
    DO_TEST_FULL("restore-v2", "exec:cat", 7, 0, 0, GIC_NONE, NONE);
    DO_TEST_FULL("restore-v2-fd", "stdio", 7, 0, 0, GIC_NONE, NONE);
    DO_TEST_FULL("restore-v2-fd", "fd:7", 7, 0, 0, GIC_NONE, NONE);
    DO_TEST_FULL("migrate", "tcp:10.0.0.1:5000", -1, 0, 0, GIC_NONE, NONE);
1738

A
Andrea Bolognani 已提交
1739 1740 1741
    DO_TEST_FULL("migrate-numa-unaligned", "stdio", 7, 0, 0, GIC_NONE,
                 QEMU_CAPS_NUMA,
                 QEMU_CAPS_OBJECT_MEMORY_RAM);
1742

1743
    DO_TEST("qemu-ns", NONE);
1744
    DO_TEST("qemu-ns-no-env", NONE);
1745
    DO_TEST("qemu-ns-alt", NONE);
1746

1747
    DO_TEST("smp", NONE);
1748

J
John Ferlan 已提交
1749
    DO_TEST("iothreads", QEMU_CAPS_OBJECT_IOTHREAD);
1750 1751
    DO_TEST("iothreads-ids", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-ids-partial", QEMU_CAPS_OBJECT_IOTHREAD);
1752
    DO_TEST_FAILURE("iothreads-nocap", NONE);
1753 1754
    DO_TEST("iothreads-disk", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-disk-virtio-ccw", QEMU_CAPS_OBJECT_IOTHREAD,
1755
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1756 1757 1758 1759 1760
    DO_TEST("iothreads-virtio-scsi-pci", QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_OBJECT_IOTHREAD,
            QEMU_CAPS_VIRTIO_SCSI_IOTHREAD);
    DO_TEST("iothreads-virtio-scsi-ccw", QEMU_CAPS_OBJECT_IOTHREAD,
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI_IOTHREAD,
1761
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
J
John Ferlan 已提交
1762

1763 1764
    DO_TEST("cpu-topology1", NONE);
    DO_TEST("cpu-topology2", NONE);
1765
    DO_TEST("cpu-topology3", NONE);
1766 1767 1768 1769 1770 1771 1772 1773
    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);
1774
    DO_TEST("cpu-numa1", NONE);
1775 1776
    DO_TEST("cpu-numa2", NONE);
    DO_TEST("cpu-numa-no-memory-element", NONE);
1777
    DO_TEST_PARSE_ERROR("cpu-numa3", NONE);
1778 1779
    DO_TEST_FAILURE("cpu-numa-disjoint", NONE);
    DO_TEST("cpu-numa-disjoint", QEMU_CAPS_NUMA);
1780 1781
    DO_TEST_FAILURE("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_RAM);
    DO_TEST_FAILURE("cpu-numa-memshared", NONE);
1782
    DO_TEST("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_FILE);
1783
    DO_TEST("cpu-host-model", NONE);
1784
    DO_TEST("cpu-host-model-vendor", NONE);
1785 1786 1787 1788 1789 1790
    DO_TEST_FULL("cpu-host-model-fallback", NULL, -1,
                 FLAG_SKIP_LEGACY_CPUS, 0,
                 GIC_NONE, NONE);
    DO_TEST_FULL("cpu-host-model-nofallback", NULL, -1,
                 FLAG_SKIP_LEGACY_CPUS | FLAG_EXPECT_FAILURE,
                 0, GIC_NONE, NONE);
A
Andrea Bolognani 已提交
1791 1792
    DO_TEST("cpu-host-passthrough", QEMU_CAPS_KVM);
    DO_TEST_FAILURE("cpu-qemu-host-passthrough", QEMU_CAPS_KVM);
1793

1794
    qemuTestSetHostArch(driver.caps, VIR_ARCH_S390X);
1795
    DO_TEST("cpu-s390-zEC12", QEMU_CAPS_KVM, QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1796 1797
    DO_TEST("cpu-s390-features", QEMU_CAPS_KVM, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION);
    DO_TEST_FAILURE("cpu-s390-features", QEMU_CAPS_KVM);
1798 1799
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);

1800
    qemuTestSetHostCPU(driver.caps, cpuHaswell);
1801 1802 1803 1804
    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);
1805
    DO_TEST("cpu-host-model-cmt", NONE);
1806
    DO_TEST("cpu-tsc-frequency", QEMU_CAPS_KVM);
1807
    qemuTestSetHostCPU(driver.caps, NULL);
1808

1809 1810
    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);
1811
    DO_TEST("luks-disks", QEMU_CAPS_OBJECT_SECRET);
1812
    DO_TEST("luks-disks-source", QEMU_CAPS_OBJECT_SECRET);
1813 1814
    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);
1815
    DO_TEST_PARSE_ERROR("luks-disk-invalid", NONE);
1816
    DO_TEST_PARSE_ERROR("luks-disks-source-both", QEMU_CAPS_OBJECT_SECRET);
1817

1818 1819 1820 1821 1822 1823 1824 1825
    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);
1826
    DO_TEST("cputune-numatune",
1827
            QEMU_CAPS_KVM,
1828
            QEMU_CAPS_OBJECT_IOTHREAD,
1829 1830
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1831 1832 1833
    DO_TEST("vcpu-placement-static",
            QEMU_CAPS_KVM,
            QEMU_CAPS_OBJECT_IOTHREAD);
1834

1835
    DO_TEST("numatune-memory", NONE);
1836
    DO_TEST_PARSE_ERROR("numatune-memory-invalid-nodeset", NONE);
A
Andrea Bolognani 已提交
1837 1838 1839
    DO_TEST("numatune-memnode",
            QEMU_CAPS_NUMA,
            QEMU_CAPS_OBJECT_MEMORY_RAM);
1840 1841
    DO_TEST_FAILURE("numatune-memnode", NONE);

A
Andrea Bolognani 已提交
1842 1843 1844
    DO_TEST("numatune-memnode-no-memory",
            QEMU_CAPS_NUMA,
            QEMU_CAPS_OBJECT_MEMORY_RAM);
1845 1846
    DO_TEST_FAILURE("numatune-memnode-no-memory", NONE);

1847 1848
    DO_TEST("numatune-distances", QEMU_CAPS_NUMA, QEMU_CAPS_NUMA_DIST);

1849
    DO_TEST("numatune-auto-nodeset-invalid", NONE);
1850 1851
    DO_TEST("numatune-auto-prefer", QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1852 1853
    DO_TEST_FAILURE("numatune-static-nodeset-exceed-hostnode",
                    QEMU_CAPS_OBJECT_MEMORY_RAM);
1854 1855
    DO_TEST_PARSE_ERROR("numatune-memnode-nocpu", NONE);
    DO_TEST_PARSE_ERROR("numatune-memnodes-problematic", NONE);
1856 1857
    DO_TEST("numad", NONE);
    DO_TEST("numad-auto-vcpu-static-numatune", NONE);
1858
    DO_TEST_PARSE_ERROR("numad-auto-vcpu-static-numatune-no-nodeset", NONE);
1859 1860 1861
    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);
1862
    DO_TEST("blkdeviotune-max",
1863
            QEMU_CAPS_DRIVE_IOTUNE_MAX);
1864 1865 1866
    DO_TEST("blkdeviotune-group-num",
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_GROUP);
1867 1868 1869
    DO_TEST("blkdeviotune-max-length",
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_MAX_LENGTH);
1870

1871
    DO_TEST("multifunction-pci-device",
1872
            QEMU_CAPS_SCSI_LSI);
1873

1874
    DO_TEST("monitor-json", NONE);
1875

1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887
    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);
1888

1889
    DO_TEST("pseries-basic",
1890
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1891
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1892
    DO_TEST("pseries-vio",
1893
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1894
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1895
    DO_TEST("pseries-usb-default",
1896
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1897
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1898
            QEMU_CAPS_PIIX3_USB_UHCI,
1899
            QEMU_CAPS_PCI_OHCI);
1900
    DO_TEST("pseries-usb-multi",
1901
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1902
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1903
            QEMU_CAPS_PIIX3_USB_UHCI,
1904
            QEMU_CAPS_PCI_OHCI);
1905
    DO_TEST("pseries-vio-user-assigned",
1906
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1907 1908
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST_PARSE_ERROR("pseries-vio-address-clash", NONE);
1909 1910 1911
    DO_TEST("pseries-nvram",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_DEVICE_NVRAM);
1912
    DO_TEST("pseries-usb-kbd", QEMU_CAPS_PCI_OHCI,
1913
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1914
            QEMU_CAPS_DEVICE_USB_KBD,
1915
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1916
    DO_TEST("pseries-cpu-exact",
1917
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1918 1919
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST_PARSE_ERROR("pseries-no-parallel", NONE);
1920 1921

    qemuTestSetHostArch(driver.caps, VIR_ARCH_PPC64);
A
Andrea Bolognani 已提交
1922
    DO_TEST("pseries-cpu-compat", QEMU_CAPS_KVM,
1923
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1924
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1925 1926 1927
    DO_TEST("pseries-machine-max-cpu-compat",
            QEMU_CAPS_KVM,
            QEMU_CAPS_MACHINE_PSERIES_MAX_CPU_COMPAT,
1928
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
A
Andrea Bolognani 已提交
1929
    DO_TEST("pseries-cpu-le", QEMU_CAPS_KVM,
1930
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1931
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1932 1933 1934
    DO_TEST_FAILURE("pseries-cpu-compat-power9",
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
                    QEMU_CAPS_KVM);
1935 1936 1937

    qemuTestSetHostCPU(driver.caps, cpuPower9);
    DO_TEST("pseries-cpu-compat-power9",
1938
            QEMU_CAPS_KVM,
1939
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1940
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1941 1942
    qemuTestSetHostCPU(driver.caps, NULL);

1943 1944
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);

1945
    DO_TEST("pseries-panic-missing",
1946
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1947
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1948
    DO_TEST("pseries-panic-no-address",
1949
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1950
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1951
    DO_TEST_FAILURE("pseries-panic-address",
1952
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
1953 1954 1955 1956 1957

    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);
1958 1959 1960 1961 1962 1963
    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);
1964 1965 1966
    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);
1967

1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989
    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);

1990
    DO_TEST("pseries-features",
1991
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1992
            QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE,
1993
            QEMU_CAPS_MACHINE_PSERIES_CAP_HTM,
1994
            QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV,
1995
            QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);
1996
    DO_TEST_FAILURE("pseries-features",
1997
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
A
Andrea Bolognani 已提交
1998
    DO_TEST_PARSE_ERROR("pseries-features-invalid-machine", NONE);
1999

2000
    DO_TEST("pseries-serial-native",
2001
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2002 2003
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial+console-native",
2004
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2005 2006
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial-compat",
2007
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2008
            QEMU_CAPS_DEVICE_SPAPR_VTY);
2009
    DO_TEST("pseries-serial-pci",
2010
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2011 2012
            QEMU_CAPS_DEVICE_PCI_SERIAL);
    DO_TEST("pseries-serial-usb",
2013
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2014 2015
            QEMU_CAPS_DEVICE_QEMU_XHCI,
            QEMU_CAPS_DEVICE_USB_SERIAL);
2016
    DO_TEST("pseries-console-native",
2017
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2018 2019
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-console-virtio",
2020
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
2021 2022
    DO_TEST_PARSE_ERROR("pseries-serial-invalid-machine", NONE);

2023
    DO_TEST("mach-virt-serial-native",
2024
            QEMU_CAPS_DEVICE_PL011);
2025
    DO_TEST("mach-virt-serial+console-native",
2026
            QEMU_CAPS_DEVICE_PL011);
2027
    DO_TEST("mach-virt-serial-compat",
2028
            QEMU_CAPS_DEVICE_PL011);
2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040
    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",
2041
            QEMU_CAPS_DEVICE_PL011);
2042 2043
    DO_TEST("mach-virt-console-virtio",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
2044 2045
    DO_TEST_PARSE_ERROR("mach-virt-serial-invalid-machine", NONE);

2046
    DO_TEST("disk-ide-split",
2047
            QEMU_CAPS_IDE_CD);
2048
    DO_TEST("disk-ide-wwn",
2049
            QEMU_CAPS_IDE_CD,
2050
            QEMU_CAPS_IDE_DRIVE_WWN);
2051

2052
    DO_TEST("disk-geometry", NONE);
V
Viktor Mihajlovski 已提交
2053 2054
    DO_TEST("disk-blockio",
            QEMU_CAPS_IDE_CD, QEMU_CAPS_BLOCKIO);
2055

2056
    DO_TEST("video-device-pciaddr-default",
2057 2058
            QEMU_CAPS_KVM,
            QEMU_CAPS_VNC,
2059
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2060
            QEMU_CAPS_DEVICE_QXL);
2061
    DO_TEST("video-vga-nodevice", QEMU_CAPS_DEVICE_VGA);
2062
    DO_TEST("video-vga-device", QEMU_CAPS_DEVICE_VGA,
2063
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2064
    DO_TEST("video-vga-device-vgamem", QEMU_CAPS_DEVICE_VGA,
2065
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_VGA_VGAMEM);
2066
    DO_TEST("video-qxl-nodevice", QEMU_CAPS_DEVICE_QXL);
2067
    DO_TEST("video-qxl-device",
2068
            QEMU_CAPS_DEVICE_QXL,
2069
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2070
    DO_TEST("video-qxl-device-vgamem",
2071
            QEMU_CAPS_DEVICE_QXL,
2072
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2073
            QEMU_CAPS_QXL_VGAMEM);
2074
    DO_TEST_CAPS_LATEST("video-qxl-device-vram64");
2075
    DO_TEST("video-qxl-sec-device",
2076
            QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2077
    DO_TEST("video-qxl-sec-device-vgamem",
2078 2079
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2080
            QEMU_CAPS_QXL_VGAMEM);
2081
    DO_TEST_CAPS_LATEST("video-qxl-sec-device-vram64");
2082 2083 2084
    DO_TEST("video-qxl-heads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
2085
            QEMU_CAPS_QXL_MAX_OUTPUTS);
2086 2087 2088
    DO_TEST("video-vga-qxl-heads",
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_QXL_MAX_OUTPUTS);
2089 2090 2091
    DO_TEST("video-qxl-noheads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
2092
            QEMU_CAPS_QXL_MAX_OUTPUTS);
M
Marc-André Lureau 已提交
2093
    DO_TEST("video-virtio-gpu-device",
2094
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
M
Marc-André Lureau 已提交
2095
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2096
    DO_TEST("video-virtio-gpu-virgl",
2097
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
2098
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
2099
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2100 2101
    DO_TEST("video-virtio-gpu-spice-gl",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
2102
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
2103 2104
            QEMU_CAPS_SPICE,
            QEMU_CAPS_SPICE_GL,
2105
            QEMU_CAPS_SPICE_RENDERNODE,
2106
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2107 2108 2109 2110 2111
    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);
2112 2113 2114
    DO_TEST("video-virtio-gpu-secondary",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2115 2116 2117
    DO_TEST("video-virtio-vga",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIRTIO_VGA,
2118 2119
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_GPU_MAX_OUTPUTS);
2120 2121 2122
    DO_TEST("video-none-device",
            QEMU_CAPS_VNC);
    DO_TEST_PARSE_ERROR("video-invalid-multiple-devices", NONE);
2123

2124 2125
    DO_TEST("virtio-rng-default",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2126
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2127 2128
    DO_TEST("virtio-rng-random",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2129
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2130 2131
    DO_TEST("virtio-rng-egd",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2132
            QEMU_CAPS_OBJECT_RNG_EGD);
J
Ján Tomko 已提交
2133 2134
    DO_TEST_CAPS_VER("virtio-rng-egd-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("virtio-rng-egd-unix");
2135 2136 2137 2138
    DO_TEST("virtio-rng-multiple",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2139
    DO_TEST_PARSE_ERROR("virtio-rng-egd-crash",
2140 2141
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD);
2142
    DO_TEST("virtio-rng-ccw",
2143
            QEMU_CAPS_CCW,
2144 2145
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2146
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2147

2148
    DO_TEST("s390-allow-bogus-usb-none",
2149 2150 2151
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2152
    DO_TEST("s390-allow-bogus-usb-controller",
2153 2154 2155
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2156

2157
    DO_TEST("s390-panic-no-address",
2158
            QEMU_CAPS_CCW,
2159
            QEMU_CAPS_VIRTIO_S390);
2160
    DO_TEST_FAILURE("s390-panic-address",
2161
            QEMU_CAPS_CCW,
2162
            QEMU_CAPS_VIRTIO_S390);
2163
    DO_TEST("s390-panic-missing",
2164
            QEMU_CAPS_CCW,
2165
            QEMU_CAPS_VIRTIO_S390);
2166
    DO_TEST_PARSE_ERROR("s390-no-parallel",
2167
            QEMU_CAPS_CCW,
2168
            QEMU_CAPS_VIRTIO_S390);
2169
    DO_TEST("s390-serial",
2170
            QEMU_CAPS_CCW,
2171 2172 2173
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
    DO_TEST("s390-serial-2",
2174
            QEMU_CAPS_CCW,
2175 2176 2177 2178
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE,
            QEMU_CAPS_DEVICE_SCLPLMCONSOLE);
    DO_TEST("s390-serial-console",
2179
            QEMU_CAPS_CCW,
2180 2181
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
2182

2183
    DO_TEST("ppc-dtb",
J
Ján Tomko 已提交
2184
            QEMU_CAPS_KVM);
2185 2186
    DO_TEST("ppce500-serial",
            QEMU_CAPS_KVM);
O
Olivia Yin 已提交
2187

2188
    DO_TEST("tpm-passthrough",
2189
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
2190 2191
    DO_TEST("tpm-passthrough-crb",
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_CRB);
2192
    DO_TEST_PARSE_ERROR("tpm-no-backend-invalid",
2193
                        QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
2194
    DO_TEST_CAPS_LATEST("tpm-emulator");
2195
    DO_TEST_CAPS_LATEST("tpm-emulator-tpm2");
2196

2197 2198 2199 2200
    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);
2201

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

    /* Test automatic and manual setting of pcie-root-port attributes */
2404 2405
    DO_TEST("pcie-root-port",
            QEMU_CAPS_DEVICE_IOH3420,
2406
            QEMU_CAPS_ICH9_AHCI,
2407
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2408
            QEMU_CAPS_DEVICE_QXL);
2409 2410 2411 2412 2413 2414

    /* 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,
2415
            QEMU_CAPS_DEVICE_IOH3420);
2416
    DO_TEST("pcie-root-port-model-ioh3420",
2417
            QEMU_CAPS_DEVICE_IOH3420);
2418

2419 2420 2421 2422 2423 2424 2425
    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,
2426
            QEMU_CAPS_ICH9_USB_EHCI1,
2427
            QEMU_CAPS_NEC_USB_XHCI);
2428 2429 2430 2431 2432 2433 2434
    /* 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);
2435

2436
    DO_TEST_PARSE_ERROR("q35-wrong-root",
2437
            QEMU_CAPS_DEVICE_IOH3420,
2438
            QEMU_CAPS_ICH9_AHCI,
2439
            QEMU_CAPS_ICH9_USB_EHCI1,
2440
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2441
            QEMU_CAPS_DEVICE_QXL);
2442
    DO_TEST_PARSE_ERROR("440fx-wrong-root", NONE);
2443
    DO_TEST_PARSE_ERROR("440fx-ide-address-conflict", NONE);
2444

2445
    DO_TEST_PARSE_ERROR("pcie-root-port-too-many",
2446
            QEMU_CAPS_DEVICE_IOH3420,
2447
            QEMU_CAPS_ICH9_AHCI,
2448
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2449
            QEMU_CAPS_DEVICE_QXL);
2450

2451 2452 2453
    DO_TEST("pcie-switch-upstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
2454
            QEMU_CAPS_ICH9_AHCI,
2455
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2456
            QEMU_CAPS_DEVICE_QXL);
2457 2458 2459 2460
    DO_TEST("pcie-switch-downstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
2461
            QEMU_CAPS_ICH9_AHCI,
2462
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2463
            QEMU_CAPS_DEVICE_QXL);
2464

2465 2466 2467 2468 2469 2470
    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);
2471 2472
    DO_TEST_PARSE_ERROR("pci-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_PXB);
2473

2474 2475 2476 2477 2478 2479 2480 2481 2482 2483
    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);
2484 2485 2486
    DO_TEST_PARSE_ERROR("pcie-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_IOH3420,
                        QEMU_CAPS_DEVICE_PXB_PCIE);
2487

2488
    DO_TEST("hostdev-scsi-lsi",
2489 2490
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2491
    DO_TEST("hostdev-scsi-virtio-scsi",
2492 2493
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2494
    DO_TEST("hostdev-scsi-readonly",
2495 2496
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2497
    DO_TEST("hostdev-scsi-virtio-scsi",
2498 2499
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2500
    DO_TEST("hostdev-scsi-lsi-iscsi",
2501 2502
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2503
    DO_TEST("hostdev-scsi-lsi-iscsi-auth",
2504 2505
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2506
    DO_TEST("hostdev-scsi-virtio-iscsi",
2507 2508
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2509
    DO_TEST("hostdev-scsi-virtio-iscsi-auth",
2510 2511
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2512
    DO_TEST("disk-hostdev-scsi-virtio-iscsi-auth-AES",
2513 2514 2515
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_OBJECT_SECRET,
2516
            QEMU_CAPS_ISCSI_PASSWORD_SECRET);
2517 2518
    DO_TEST("hostdev-scsi-vhost-scsi-ccw",
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_VHOST_SCSI,
2519
            QEMU_CAPS_CCW);
2520
    DO_TEST("hostdev-scsi-vhost-scsi-pci",
2521 2522
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VHOST_SCSI);
2523 2524 2525 2526 2527
    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);
2528

2529
    DO_TEST("mlock-on", QEMU_CAPS_REALTIME_MLOCK);
2530
    DO_TEST_FAILURE("mlock-on", NONE);
2531
    DO_TEST("mlock-off", QEMU_CAPS_REALTIME_MLOCK);
2532 2533
    DO_TEST("mlock-unsupported", NONE);

2534 2535 2536 2537
    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);
2538

2539
    DO_TEST("hotplug-base",
2540
            QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_SCSI);
2541

2542 2543
    DO_TEST("pcihole64", QEMU_CAPS_I440FX_PCI_HOLE64_SIZE);
    DO_TEST_FAILURE("pcihole64-none", NONE);
2544
    DO_TEST("pcihole64-q35",
2545
            QEMU_CAPS_DEVICE_IOH3420,
2546
            QEMU_CAPS_ICH9_AHCI,
2547
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2548
            QEMU_CAPS_DEVICE_QXL,
2549 2550
            QEMU_CAPS_Q35_PCI_HOLE64_SIZE);

J
Ján Tomko 已提交
2551 2552
    DO_TEST("arm-vexpressa9-nodevs", NONE);
    DO_TEST("arm-vexpressa9-basic", NONE);
2553
    DO_TEST("arm-vexpressa9-virtio",
2554
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2555
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2556
    DO_TEST("arm-virt-virtio",
2557
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2558
            QEMU_CAPS_DEVICE_PL011,
2559
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2560

2561
    DO_TEST("aarch64-virt-virtio",
2562
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2563
            QEMU_CAPS_DEVICE_PL011,
2564
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2565 2566 2567 2568 2569 2570

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

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

2718
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);
2719

2720
    DO_TEST("kvm-pit-delay", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2721
    DO_TEST("kvm-pit-discard", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2722

2723 2724 2725 2726
    DO_TEST("panic",
            QEMU_CAPS_DEVICE_PANIC);
    DO_TEST("panic-double",
            QEMU_CAPS_DEVICE_PANIC);
H
Hu Tao 已提交
2727

2728 2729
    DO_TEST("panic-no-address",
            QEMU_CAPS_DEVICE_PANIC);
2730

2731 2732
    DO_TEST("fips-enabled", QEMU_CAPS_ENABLE_FIPS);

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

2747
    DO_TEST_FAILURE("memory-align-fail", NONE);
2748
    DO_TEST_FAILURE("memory-hotplug-nonuma", QEMU_CAPS_DEVICE_PC_DIMM);
M
Michal Privoznik 已提交
2749
    DO_TEST("memory-hotplug", NONE);
2750
    DO_TEST("memory-hotplug", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA);
2751
    DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2752
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2753
    DO_TEST("memory-hotplug-dimm-addr", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2754
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2755
    DO_TEST("memory-hotplug-ppc64-nonuma", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2756
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2757
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2758 2759
    DO_TEST("memory-hotplug-nvdimm",
            QEMU_CAPS_DEVICE_NVDIMM,
M
Michal Privoznik 已提交
2760
            QEMU_CAPS_NUMA, QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2761 2762
    DO_TEST("memory-hotplug-nvdimm-access",
            QEMU_CAPS_DEVICE_NVDIMM,
2763
            QEMU_CAPS_NUMA, QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2764 2765
    DO_TEST("memory-hotplug-nvdimm-label",
            QEMU_CAPS_DEVICE_NVDIMM,
2766
            QEMU_CAPS_NUMA, QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2767

2768
    DO_TEST("machine-aeskeywrap-on-caps",
2769
            QEMU_CAPS_AES_KEY_WRAP,
2770
            QEMU_CAPS_DEA_KEY_WRAP,
2771
            QEMU_CAPS_VIRTIO_SCSI,
2772
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2773
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps",
2774
                    QEMU_CAPS_VIRTIO_SCSI,
2775
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2776 2777 2778
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps", NONE);

    DO_TEST("machine-aeskeywrap-on-cap",
2779
            QEMU_CAPS_AES_KEY_WRAP,
2780
            QEMU_CAPS_VIRTIO_SCSI,
2781
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2782
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap",
2783
                    QEMU_CAPS_VIRTIO_SCSI,
2784
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2785 2786 2787
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap", NONE);

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

    DO_TEST("machine-aeskeywrap-off-cap",
2797
            QEMU_CAPS_AES_KEY_WRAP,
2798
            QEMU_CAPS_VIRTIO_SCSI,
2799
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2800
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap",
2801
                    QEMU_CAPS_VIRTIO_SCSI,
2802
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2803 2804 2805
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap", NONE);

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

    DO_TEST("machine-deakeywrap-on-cap",
2815
            QEMU_CAPS_DEA_KEY_WRAP,
2816
            QEMU_CAPS_VIRTIO_SCSI,
2817
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2818
    DO_TEST_FAILURE("machine-deakeywrap-on-cap",
2819
                    QEMU_CAPS_VIRTIO_SCSI,
2820
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2821 2822 2823
    DO_TEST_FAILURE("machine-deakeywrap-on-cap", NONE);

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

    DO_TEST("machine-deakeywrap-off-cap",
2833
            QEMU_CAPS_DEA_KEY_WRAP,
2834
            QEMU_CAPS_VIRTIO_SCSI,
2835
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2836
    DO_TEST_FAILURE("machine-deakeywrap-off-cap",
2837
                    QEMU_CAPS_VIRTIO_SCSI,
2838
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2839 2840 2841
    DO_TEST_FAILURE("machine-deakeywrap-off-cap", NONE);

    DO_TEST("machine-keywrap-none-caps",
2842
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2843
            QEMU_CAPS_VIRTIO_SCSI,
2844
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2845
    DO_TEST("machine-keywrap-none",
2846
            QEMU_CAPS_VIRTIO_SCSI,
2847
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2848

2849
    DO_TEST("machine-loadparm-s390",
2850
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390,
2851
            QEMU_CAPS_LOADPARM);
2852
    DO_TEST("machine-loadparm-net-s390",
2853
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390,
2854
            QEMU_CAPS_LOADPARM);
2855
    DO_TEST("machine-loadparm-multiple-disks-nets-s390",
2856
            QEMU_CAPS_CCW,
2857
            QEMU_CAPS_VIRTIO_S390,
2858 2859
            QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-char-invalid",
2860
                        QEMU_CAPS_CCW,
2861
                        QEMU_CAPS_VIRTIO_S390,
2862 2863
                        QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-len-invalid",
2864
                        QEMU_CAPS_CCW,
2865
                        QEMU_CAPS_VIRTIO_S390,
2866 2867
                        QEMU_CAPS_LOADPARM);

J
Jiri Denemark 已提交
2868 2869 2870 2871 2872 2873 2874
    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);

2875
    DO_TEST("virtio-input", QEMU_CAPS_VIRTIO_KEYBOARD,
2876
            QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET);
2877
    DO_TEST("virtio-input-passthrough", QEMU_CAPS_VIRTIO_INPUT_HOST);
2878

2879
    DO_TEST("ppc64-usb-controller",
2880
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2881
            QEMU_CAPS_PCI_OHCI);
2882
    DO_TEST("ppc64-usb-controller-legacy",
2883
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2884
            QEMU_CAPS_PIIX3_USB_UHCI);
2885 2886
    DO_TEST_FULL("ppc64-usb-controller-qemu-xhci", NULL, -1, 0,
                 VIR_DOMAIN_DEF_PARSE_ABI_UPDATE, GIC_NONE,
2887
                 QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2888 2889 2890 2891 2892 2893 2894
                 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);
2895

2896 2897 2898 2899
    DO_TEST("aarch64-usb-controller-nec-xhci",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_NEC_USB_XHCI);

2900 2901 2902
    /* VM XML has invalid arch/ostype/virttype combo, but the SKIP flag
     * will avoid the error. Still, we expect qemu driver to complain about
     * missing machine error, and not crash */
2903
    DO_TEST_PARSE_FLAGS_ERROR("missing-machine",
2904
                              VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE,
2905 2906
                              NONE);

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

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

2934
    DO_TEST("acpi-table", NONE);
2935
    DO_TEST("intel-iommu",
2936
            QEMU_CAPS_DEVICE_INTEL_IOMMU);
2937 2938
    DO_TEST("intel-iommu-machine",
            QEMU_CAPS_MACHINE_IOMMU);
J
Ján Tomko 已提交
2939
    DO_TEST("intel-iommu-caching-mode",
2940 2941
            QEMU_CAPS_MACHINE_KERNEL_IRQCHIP,
            QEMU_CAPS_MACHINE_KERNEL_IRQCHIP_SPLIT,
2942 2943 2944 2945 2946 2947 2948 2949
            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_DEVICE_INTEL_IOMMU,
            QEMU_CAPS_INTEL_IOMMU_INTREMAP,
            QEMU_CAPS_INTEL_IOMMU_CACHING_MODE);
2950 2951 2952 2953 2954 2955
    DO_TEST("intel-iommu-eim",
            QEMU_CAPS_MACHINE_KERNEL_IRQCHIP,
            QEMU_CAPS_MACHINE_KERNEL_IRQCHIP_SPLIT,
            QEMU_CAPS_INTEL_IOMMU_INTREMAP,
            QEMU_CAPS_INTEL_IOMMU_EIM,
            QEMU_CAPS_DEVICE_INTEL_IOMMU);
2956 2957 2958 2959 2960 2961
    DO_TEST("intel-iommu-device-iotlb",
            QEMU_CAPS_MACHINE_KERNEL_IRQCHIP,
            QEMU_CAPS_MACHINE_KERNEL_IRQCHIP_SPLIT,
            QEMU_CAPS_INTEL_IOMMU_INTREMAP,
            QEMU_CAPS_INTEL_IOMMU_DEVICE_IOTLB,
            QEMU_CAPS_DEVICE_INTEL_IOMMU);
2962

2963
    DO_TEST("cpu-hotplug-startup", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);
2964 2965 2966
    DO_TEST_PARSE_ERROR("cpu-hotplug-granularity",
                        QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);

2967 2968 2969 2970 2971 2972 2973
    DO_TEST("virtio-options", QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
2974 2975 2976
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_PCI_IOMMU_PLATFORM,
            QEMU_CAPS_VIRTIO_PCI_ATS);
2977

J
Ján Tomko 已提交
2978
    DO_TEST("fd-memory-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
2979
            QEMU_CAPS_KVM);
J
Ján Tomko 已提交
2980
    DO_TEST("fd-memory-numa-topology2", QEMU_CAPS_OBJECT_MEMORY_FILE,
2981
            QEMU_CAPS_KVM);
J
Ján Tomko 已提交
2982
    DO_TEST("fd-memory-numa-topology3", QEMU_CAPS_OBJECT_MEMORY_FILE,
2983 2984
            QEMU_CAPS_KVM);

J
Ján Tomko 已提交
2985
    DO_TEST("fd-memory-no-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
2986 2987
            QEMU_CAPS_KVM);

M
Marc-André Lureau 已提交
2988 2989
    DO_TEST_CAPS_LATEST("memfd-memory-numa");

2990 2991 2992 2993 2994 2995 2996 2997
    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);

2998 2999 3000 3001 3002 3003 3004 3005 3006
    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 已提交
3007
    DO_TEST("vmcoreinfo", QEMU_CAPS_DEVICE_VMCOREINFO);
3008

3009 3010 3011
    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,
3012
            QEMU_CAPS_DEVICE_ISA_SERIAL,
3013
            QEMU_CAPS_HDA_DUPLEX,
3014 3015
            QEMU_CAPS_CCID_EMULATED,
            QEMU_CAPS_QCOW2_LUKS, QEMU_CAPS_OBJECT_SECRET);
3016
    DO_TEST("user-aliases2", QEMU_CAPS_DEVICE_IOH3420, QEMU_CAPS_ICH9_AHCI);
3017 3018
    DO_TEST("user-aliases-usb", QEMU_CAPS_KVM,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4,
3019
            QEMU_CAPS_ICH9_USB_EHCI1);
3020

3021
    DO_TEST_CAPS_VER("disk-virtio-scsi-reservations", "2.12.0");
3022
    DO_TEST_CAPS_LATEST("disk-virtio-scsi-reservations");
3023

3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048
    DO_TEST_CAPS_LATEST("tseg-explicit-size");
    DO_TEST_PARSE_ERROR("tseg-i440fx",
                        QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
                        QEMU_CAPS_DEVICE_PCI_BRIDGE,
                        QEMU_CAPS_DEVICE_IOH3420,
                        QEMU_CAPS_ICH9_AHCI,
                        QEMU_CAPS_MACHINE_SMM_OPT,
                        QEMU_CAPS_VIRTIO_SCSI,
                        QEMU_CAPS_MCH_EXTENDED_TSEG_MBYTES);
    DO_TEST_PARSE_ERROR("tseg-explicit-size",
                        QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
                        QEMU_CAPS_DEVICE_PCI_BRIDGE,
                        QEMU_CAPS_DEVICE_IOH3420,
                        QEMU_CAPS_ICH9_AHCI,
                        QEMU_CAPS_MACHINE_SMM_OPT,
                        QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST_PARSE_ERROR("tseg-invalid-size",
                        QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
                        QEMU_CAPS_DEVICE_PCI_BRIDGE,
                        QEMU_CAPS_DEVICE_IOH3420,
                        QEMU_CAPS_ICH9_AHCI,
                        QEMU_CAPS_MACHINE_SMM_OPT,
                        QEMU_CAPS_VIRTIO_SCSI,
                        QEMU_CAPS_MCH_EXTENDED_TSEG_MBYTES);

3049
    DO_TEST("video-virtio-gpu-ccw", QEMU_CAPS_CCW,
3050 3051 3052 3053 3054 3055
            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);

3056
    DO_TEST("input-virtio-ccw", QEMU_CAPS_CCW,
3057 3058 3059 3060 3061 3062 3063
            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);

3064 3065
    DO_TEST_CAPS_LATEST("vhost-vsock");
    DO_TEST_CAPS_LATEST("vhost-vsock-auto");
3066 3067
    DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw", "s390x");
    DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw-auto", "s390x");
3068

3069
    DO_TEST_CAPS_VER("launch-security-sev", "2.12.0");
3070

L
Lubomir Rintel 已提交
3071 3072 3073
    DO_TEST("riscv64-virt",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);

3074 3075 3076 3077 3078 3079 3080 3081
    /* 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");

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

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

3090
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
3091 3092
}

3093
VIR_TEST_MAIN_PRELOAD(mymain,
A
Andrea Bolognani 已提交
3094 3095 3096 3097
                      abs_builddir "/.libs/qemuxml2argvmock.so",
                      abs_builddir "/.libs/virrandommock.so",
                      abs_builddir "/.libs/qemucpumock.so",
                      abs_builddir "/.libs/virpcimock.so")
3098

3099 3100
#else

3101 3102 3103 3104
int main(void)
{
    return EXIT_AM_SKIP;
}
3105 3106

#endif /* WITH_QEMU */