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

#include <unistd.h>
4 5 6 7

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

8 9
#include "testutils.h"

10 11
#ifdef WITH_QEMU

12
# include "internal.h"
13
# include "viralloc.h"
14
# include "qemu/qemu_alias.h"
15 16
# include "qemu/qemu_capabilities.h"
# include "qemu/qemu_command.h"
M
Matthias Bolte 已提交
17
# include "qemu/qemu_domain.h"
18
# include "qemu/qemu_migration.h"
19
# include "qemu/qemu_process.h"
20
# include "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
# include "virfilewrapper.h"
# include "configmake.h"
28

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

32
# include "testutilsqemu.h"
33

34 35
# define VIR_FROM_THIS VIR_FROM_QEMU

36
static virQEMUDriver driver;
37

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

static virSecretPtr
fakeSecretLookupByUsage(virConnectPtr conn,
53
                        int usageType,
54 55
                        const char *usageID)
{
56
    unsigned char uuid[VIR_UUID_BUFLEN];
57 58 59 60 61 62 63 64 65 66
    if (usageType == VIR_SECRET_USAGE_TYPE_VOLUME) {
        if (!STRPREFIX(usageID, "/storage/guest_disks/")) {
            virReportError(VIR_ERR_INTERNAL_ERROR,
                           "test provided invalid volume storage prefix '%s'",
                           usageID);
            return NULL;
        }
    } else if (STRNEQ(usageID, "mycluster_myname")) {
        virReportError(VIR_ERR_INTERNAL_ERROR,
                       "test provided incorrect usage '%s'", usageID);
67
        return NULL;
68
    }
69

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

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

76 77 78 79
static virSecretPtr
fakeSecretLookupByUUID(virConnectPtr conn,
                       const unsigned char *uuid)
{
80 81 82
    /* NB: This mocked value could be "tls" or "volume" depending on
     * which test is being run, we'll leave at NONE (or 0) */
    return virGetSecret(conn, uuid, VIR_SECRET_USAGE_TYPE_NONE, "");
83 84
}

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

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

# 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);

124
 cleanup:
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 160
    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);

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

165
 fallback:
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 216
    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;

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

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

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 290

/* 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,
};

291 292 293 294

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

316
    if (ARCH_IS_X86(arch)) {
317
        if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM, x86Models,
318 319
                                         ARRAY_CARDINALITY(x86Models),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
320
            virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU, x86Models,
321 322
                                         ARRAY_CARDINALITY(x86Models),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
323 324
            return -1;

325 326 327
        if (!skipLegacy) {
            if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM,
                                             x86LegacyModels,
328 329
                                             ARRAY_CARDINALITY(x86LegacyModels),
                                             VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
330 331
                virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU,
                                             x86LegacyModels,
332 333
                                             ARRAY_CARDINALITY(x86LegacyModels),
                                             VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
334 335
                return -1;
        }
336
    } else if (ARCH_IS_ARM(arch)) {
337
        if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM, armModels,
338 339
                                         ARRAY_CARDINALITY(armModels),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
340
            virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU, armModels,
341 342
                                         ARRAY_CARDINALITY(armModels),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
343 344
            return -1;
    } else if (ARCH_IS_PPC64(arch)) {
345
        if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM, ppc64Models,
346 347
                                         ARRAY_CARDINALITY(ppc64Models),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
348
            virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU, ppc64Models,
349 350
                                         ARRAY_CARDINALITY(ppc64Models),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
351
            return -1;
352 353 354 355 356
    } 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;
357
    }
358 359 360 361 362

    return 0;
}


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

370 371 372
    if (!caps)
        goto cleanup;

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

375 376
    virQEMUCapsInitQMPBasicArch(info->qemuCaps);

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

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

386 387 388 389 390 391 392
    ret = 0;

 cleanup:
    return ret;
}


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

403
    VIR_EXCLUSIVE_FLAGS_RET(FLAG_REAL_CAPS, FLAG_SKIP_LEGACY_CPUS, -1);
404 405 406 407
    return 0;
}


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

425 426
    memset(&monitor_chr, 0, sizeof(monitor_chr));

427
    if (!(conn = virGetConnect()))
428
        goto cleanup;
429

430
    conn->secretDriver = &fakeSecretDriver;
431
    conn->storageDriver = &fakeStorageDriver;
432
    conn->nwfilterDriver = &fakeNWFilterDriver;
433

434 435 436 437
    virSetConnectInterface(conn);
    virSetConnectNetwork(conn);
    virSetConnectNWFilter(conn);
    virSetConnectNodeDev(conn);
438 439 440
    virSetConnectSecret(conn);
    virSetConnectStorage(conn);

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

444 445 446
    if (testCheckExclusiveFlags(info->flags) < 0)
        goto cleanup;

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

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

455
    if (!(vm = virDomainObjNew(driver.xmlopt)))
456
        goto cleanup;
457

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

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

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

480
    vm->def->id = -1;
481

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

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

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

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

        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;
        }
    }

503 504 505 506 507 508 509 510 511 512 513
    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;
    }

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

529
    if (!(cmd = qemuProcessCreatePretendCmd(&driver, vm, migrateURI,
P
Pavel Hrdina 已提交
530 531
                                            (flags & FLAG_FIPS), false,
                                            VIR_QEMU_PROCESS_START_COLD))) {
P
Pavel Hrdina 已提交
532 533
        if (flags & FLAG_EXPECT_FAILURE)
            goto ok;
534
        goto cleanup;
J
Jiri Denemark 已提交
535
    }
536 537 538 539
    if (flags & FLAG_EXPECT_FAILURE) {
        VIR_TEST_DEBUG("passed instead of expected failure");
        goto cleanup;
    }
J
Jiri Denemark 已提交
540

541
    if (!(actualargv = virCommandToString(cmd, false)))
542
        goto cleanup;
E
Eric Blake 已提交
543

544
    if (virTestCompareToFile(actualargv, info->outfile) < 0)
545
        goto cleanup;
546

P
Pavel Hrdina 已提交
547 548
    ret = 0;

549
 ok:
550
    if (ret == 0 && flags & FLAG_EXPECT_FAILURE) {
P
Pavel Hrdina 已提交
551 552
        ret = -1;
        VIR_TEST_DEBUG("Error expected but there wasn't any.\n");
553
        goto cleanup;
P
Pavel Hrdina 已提交
554
    }
555
    if (!virTestOOMActive()) {
556
        if (flags & FLAG_EXPECT_FAILURE) {
557
            if ((log = virTestLogContentAndReset()))
P
Pavel Hrdina 已提交
558 559
                VIR_TEST_DEBUG("Got expected error: \n%s", log);
        }
560
        virResetLastError();
P
Pavel Hrdina 已提交
561
        ret = 0;
562 563
    }

564
 cleanup:
565 566
    VIR_FREE(log);
    VIR_FREE(actualargv);
567
    virDomainChrSourceDefClear(&monitor_chr);
E
Eric Blake 已提交
568
    virCommandFree(cmd);
569
    virObjectUnref(vm);
570 571
    virSetConnectSecret(NULL);
    virSetConnectStorage(NULL);
572
    virObjectUnref(conn);
573
    VIR_FREE(migrateURI);
574
    return ret;
575 576
}

577
static int
578
testInfoSetPaths(struct testQemuInfo *info,
579 580 581 582 583 584 585 586 587 588 589 590
                 const char *suffix)
{
    if (virAsprintf(&info->infile, "%s/qemuxml2argvdata/%s.xml",
                    abs_srcdir, info->name) < 0 ||
        virAsprintf(&info->outfile, "%s/qemuxml2argvdata/%s%s.args",
                    abs_srcdir, info->name, suffix ? suffix : "") < 0) {
        return -1;
    }

    return 0;
}

A
Andrea Bolognani 已提交
591
# define FAKEROOTDIRTEMPLATE abs_builddir "/fakerootdir-XXXXXX"
592

593
static int
E
Eric Blake 已提交
594
mymain(void)
595
{
C
Cole Robinson 已提交
596
    int ret = 0;
A
Andrea Bolognani 已提交
597
    char *fakerootdir;
598
    virHashTablePtr capslatest = NULL;
599

A
Andrea Bolognani 已提交
600 601 602 603 604 605 606 607 608 609 610 611
    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);

612 613 614 615 616 617 618 619 620 621
    /* 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;
    }

622
    if (qemuTestDriverInit(&driver) < 0)
623
        return EXIT_FAILURE;
624 625

    driver.privileged = true;
626

627 628 629
    VIR_FREE(driver.config->defaultTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->defaultTLSx509certdir, "/etc/pki/qemu") < 0)
        return EXIT_FAILURE;
630
    VIR_FREE(driver.config->vncTLSx509certdir);
631
    if (VIR_STRDUP_QUIET(driver.config->vncTLSx509certdir, "/etc/pki/libvirt-vnc") < 0)
632 633
        return EXIT_FAILURE;
    VIR_FREE(driver.config->spiceTLSx509certdir);
634
    if (VIR_STRDUP_QUIET(driver.config->spiceTLSx509certdir, "/etc/pki/libvirt-spice") < 0)
635
        return EXIT_FAILURE;
636 637 638
    VIR_FREE(driver.config->chardevTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->chardevTLSx509certdir, "/etc/pki/libvirt-chardev") < 0)
        return EXIT_FAILURE;
639
    VIR_FREE(driver.config->vxhsTLSx509certdir);
640
    if (VIR_STRDUP_QUIET(driver.config->vxhsTLSx509certdir, "/etc/pki/libvirt-vxhs/dummy,path") < 0)
641
        return EXIT_FAILURE;
642 643 644
    VIR_FREE(driver.config->nbdTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->nbdTLSx509certdir, "/etc/pki/libvirt-nbd/dummy,path") < 0)
        return EXIT_FAILURE;
645

646
    VIR_FREE(driver.config->hugetlbfs);
647
    if (VIR_ALLOC_N(driver.config->hugetlbfs, 2) < 0)
648
        return EXIT_FAILURE;
649 650 651
    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)
652
        return EXIT_FAILURE;
653 654
    driver.config->hugetlbfs[0].size = 2048;
    driver.config->hugetlbfs[0].deflt = true;
655
    driver.config->hugetlbfs[1].size = 1048576;
656
    driver.config->spiceTLS = 1;
657
    if (VIR_STRDUP_QUIET(driver.config->spicePassword, "123456") < 0)
658
        return EXIT_FAILURE;
659 660 661
    VIR_FREE(driver.config->memoryBackingDir);
    if (VIR_STRDUP_QUIET(driver.config->memoryBackingDir, "/var/lib/libvirt/qemu/ram") < 0)
        return EXIT_FAILURE;
662 663 664
    VIR_FREE(driver.config->nvramDir);
    if (VIR_STRDUP(driver.config->nvramDir, "/var/lib/libvirt/qemu/nvram") < 0)
        return EXIT_FAILURE;
665

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

670 671 672 673 674 675 676
    virFileWrapperAddPrefix(SYSCONFDIR "/qemu/firmware",
                            abs_srcdir "/qemufirmwaredata/etc/qemu/firmware");
    virFileWrapperAddPrefix(PREFIX "/share/qemu/firmware",
                            abs_srcdir "/qemufirmwaredata/usr/share/qemu/firmware");
    virFileWrapperAddPrefix("/home/user/.config/qemu/firmware",
                            abs_srcdir "/qemufirmwaredata/home/user/.config/qemu/firmware");

677 678 679 680 681 682 683 684 685 686 687 688 689 690
/**
 * 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.
 */
691
# define DO_TEST_INTERNAL(_name, _suffix, ...) \
692
    do { \
693
        static struct testQemuInfo info = { \
694
            .name = _name, \
695
        }; \
696 697
        if (testQemuInfoSetArgs(&info, capslatest, \
                                __VA_ARGS__, ARG_END) < 0) \
698
            return EXIT_FAILURE; \
699 700 701 702
        if (testInfoSetPaths(&info, _suffix) < 0) { \
            VIR_TEST_DEBUG("Failed to generate paths for '%s'", _name); \
            return EXIT_FAILURE; \
        } \
703
        if (virTestRun("QEMU XML-2-ARGV " _name _suffix, \
704 705
                       testCompareXMLToArgv, &info) < 0) \
            ret = -1; \
706
        testQemuInfoClear(&info); \
707 708
    } while (0)

709 710 711 712 713 714
# define DO_TEST_CAPS_INTERNAL(name, arch, ver, ...) \
    DO_TEST_INTERNAL(name, "." arch "-" ver, \
                     ARG_CAPS_ARCH, arch, \
                     ARG_CAPS_VER, ver, \
                     __VA_ARGS__)

715
# define DO_TEST_CAPS_ARCH_VER(name, arch, ver) \
716
    DO_TEST_CAPS_INTERNAL(name, arch, ver, ARG_END)
717 718

# define DO_TEST_CAPS_VER(name, ver) \
719
    DO_TEST_CAPS_ARCH_VER(name, "x86_64", ver)
720

721
# define DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, ...) \
722
    DO_TEST_CAPS_INTERNAL(name, arch, "latest", __VA_ARGS__)
723

724
# define DO_TEST_CAPS_ARCH_LATEST(name, arch) \
725
    DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, ARG_END)
726

727
# define DO_TEST_CAPS_LATEST(name) \
728
    DO_TEST_CAPS_ARCH_LATEST(name, "x86_64")
729

730
# define DO_TEST_CAPS_LATEST_FAILURE(name) \
731 732
    DO_TEST_CAPS_ARCH_LATEST_FULL(name, "x86_64", \
                                  ARG_FLAGS, FLAG_EXPECT_FAILURE)
733 734

# define DO_TEST_CAPS_LATEST_PARSE_ERROR(name) \
735 736
    DO_TEST_CAPS_ARCH_LATEST_FULL(name, "x86_64", \
                                  ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR)
737

738

739 740 741
# define DO_TEST_FULL(name, ...) \
    DO_TEST_INTERNAL(name, "", \
                     __VA_ARGS__, QEMU_CAPS_LAST)
742

743 744 745
/* All the following macros require an explicit QEMU_CAPS_* list
 * at the end of the argument list, or the NONE placeholder.
 * */
746
# define DO_TEST(name, ...) \
747
    DO_TEST_FULL(name, \
748
                 ARG_QEMU_CAPS, __VA_ARGS__)
749

750
# define DO_TEST_GIC(name, gic, ...) \
751
    DO_TEST_FULL(name, \
752
                 ARG_GIC, gic, \
753
                 ARG_QEMU_CAPS, __VA_ARGS__)
754

755
# define DO_TEST_FAILURE(name, ...) \
756 757
    DO_TEST_FULL(name, \
                 ARG_FLAGS, FLAG_EXPECT_FAILURE, \
758
                 ARG_QEMU_CAPS, __VA_ARGS__)
759

760
# define DO_TEST_PARSE_ERROR(name, ...) \
761
    DO_TEST_FULL(name, \
762
                 ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE, \
763
                 ARG_QEMU_CAPS, __VA_ARGS__)
764

765
# define NONE QEMU_CAPS_LAST
766

767 768 769
    /* 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 */
770 771 772 773 774 775 776
    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");
777 778
    unsetenv("QEMU_AUDIO_DRV");
    unsetenv("SDL_AUDIODRIVER");
779

780
    DO_TEST("minimal", NONE);
781 782
    DO_TEST("minimal-sandbox",
            QEMU_CAPS_SECCOMP_BLACKLIST);
783
    DO_TEST_PARSE_ERROR("minimal-no-memory", NONE);
784
    DO_TEST("minimal-msg-timestamp", QEMU_CAPS_MSG_TIMESTAMP);
785 786 787 788

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

789
    DO_TEST("machine-aliases1", NONE);
790
    DO_TEST("machine-aliases2", QEMU_CAPS_KVM);
791
    DO_TEST("machine-core-on", NONE);
792
    driver.config->dumpGuestCore = true;
793
    DO_TEST("machine-core-off", NONE);
794
    driver.config->dumpGuestCore = false;
M
Michal Privoznik 已提交
795 796 797
    DO_TEST("machine-smm-opt",
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
798
            QEMU_CAPS_DEVICE_IOH3420,
M
Michal Privoznik 已提交
799 800 801
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_MACHINE_SMM_OPT,
            QEMU_CAPS_VIRTIO_SCSI);
802
    DO_TEST("machine-vmport-opt",
803
            QEMU_CAPS_MACHINE_VMPORT_OPT);
804 805 806
    DO_TEST("default-kvm-host-arch", NONE);
    DO_TEST("default-qemu-host-arch", NONE);
    DO_TEST("x86-kvm-32-on-64", NONE);
807 808 809
    DO_TEST("boot-cdrom", NONE);
    DO_TEST("boot-network", NONE);
    DO_TEST("boot-floppy", NONE);
810
    DO_TEST("boot-floppy-q35",
811
            QEMU_CAPS_DEVICE_IOH3420,
812
            QEMU_CAPS_ICH9_AHCI);
J
Ján Tomko 已提交
813 814
    DO_TEST("boot-multi", NONE);
    DO_TEST("boot-menu-enable", NONE);
815
    DO_TEST("boot-menu-enable-with-timeout",
816
            QEMU_CAPS_SPLASH_TIMEOUT);
J
Ján Tomko 已提交
817
    DO_TEST_FAILURE("boot-menu-enable-with-timeout", NONE);
818
    DO_TEST_PARSE_ERROR("boot-menu-enable-with-timeout-invalid", NONE);
J
Ján Tomko 已提交
819 820
    DO_TEST("boot-menu-disable", NONE);
    DO_TEST("boot-menu-disable-drive", NONE);
821
    DO_TEST_PARSE_ERROR("boot-dev+order",
822
            QEMU_CAPS_VIRTIO_BLK_SCSI);
823
    DO_TEST("boot-order",
824
            QEMU_CAPS_VIRTIO_BLK_SCSI);
825
    DO_TEST("boot-complex",
826
            QEMU_CAPS_VIRTIO_BLK_SCSI);
827
    DO_TEST("boot-strict",
828
            QEMU_CAPS_BOOT_STRICT,
829
            QEMU_CAPS_VIRTIO_BLK_SCSI);
830 831 832 833 834

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

835
    DO_TEST("bios",
836
            QEMU_CAPS_DEVICE_ISA_SERIAL,
837
            QEMU_CAPS_SGA);
J
Ján Tomko 已提交
838
    DO_TEST("bios-nvram", NONE);
M
Michal Privoznik 已提交
839 840 841
    DO_TEST("bios-nvram-secure",
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
842
            QEMU_CAPS_DEVICE_IOH3420,
M
Michal Privoznik 已提交
843 844 845
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_MACHINE_SMM_OPT,
            QEMU_CAPS_VIRTIO_SCSI);
846 847 848 849 850 851 852

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

853
    DO_TEST("clock-utc", NONE);
854
    DO_TEST("clock-localtime", NONE);
J
Ján Tomko 已提交
855 856 857 858
    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 已提交
859
    DO_TEST("clock-catchup", QEMU_CAPS_KVM_PIT_TICK_POLICY);
860 861
    DO_TEST("cpu-kvmclock", NONE);
    DO_TEST("cpu-host-kvmclock", NONE);
862
    DO_TEST("kvmclock", QEMU_CAPS_KVM);
863
    DO_TEST("clock-timer-hyperv-rtc", QEMU_CAPS_KVM);
864

865 866
    DO_TEST("cpu-eoi-disabled", NONE);
    DO_TEST("cpu-eoi-enabled", NONE);
J
Ján Tomko 已提交
867
    DO_TEST("controller-order",
868 869 870 871 872 873
            QEMU_CAPS_KVM,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_CCID_PASSTHRU,
            QEMU_CAPS_SPICE,
            QEMU_CAPS_HDA_DUPLEX,
            QEMU_CAPS_USB_HUB,
874
            QEMU_CAPS_DEVICE_ISA_SERIAL,
875
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
876 877
    DO_TEST("eoi-disabled", NONE);
    DO_TEST("eoi-enabled", NONE);
878 879
    DO_TEST("pv-spinlock-disabled", NONE);
    DO_TEST("pv-spinlock-enabled", NONE);
880
    DO_TEST("kvmclock+eoi-disabled", NONE);
881

882
    DO_TEST("hyperv", NONE);
883
    DO_TEST("hyperv-off", NONE);
884
    DO_TEST("hyperv-panic", NONE);
885

886 887 888
    DO_TEST("kvm-features", NONE);
    DO_TEST("kvm-features-off", NONE);

889 890 891
    DO_TEST("pmu-feature", NONE);
    DO_TEST("pmu-feature-off", NONE);

892 893 894
    DO_TEST("pages-discard",
            QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
895 896 897 898
    DO_TEST("pages-discard-hugepages",
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
899 900 901 902
    DO_TEST("pages-dimm-discard",
            QEMU_CAPS_DEVICE_PC_DIMM,
            QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
903
    DO_TEST("hugepages-default", NONE);
904
    DO_TEST("hugepages-default-2M", NONE);
905
    DO_TEST("hugepages-default-system-size", NONE);
906
    DO_TEST_PARSE_ERROR("hugepages-default-1G-nodeset-2M", NONE);
907
    DO_TEST("hugepages-nodeset", NONE);
908 909 910 911
    DO_TEST_PARSE_ERROR("hugepages-nodeset-nonexist",
                        QEMU_CAPS_DEVICE_PC_DIMM,
                        QEMU_CAPS_OBJECT_MEMORY_FILE,
                        QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
912
    DO_TEST("hugepages-numa-default",
913
            QEMU_CAPS_OBJECT_MEMORY_FILE);
914 915 916
    DO_TEST("hugepages-numa-default-2M",
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
917
    DO_TEST("hugepages-numa-default-dimm",
918
            QEMU_CAPS_DEVICE_PC_DIMM,
J
Ján Tomko 已提交
919
            QEMU_CAPS_OBJECT_MEMORY_FILE);
920
    DO_TEST("hugepages-numa-nodeset",
A
Andrea Bolognani 已提交
921
            QEMU_CAPS_OBJECT_MEMORY_RAM,
922
            QEMU_CAPS_OBJECT_MEMORY_FILE);
923 924
    DO_TEST("hugepages-numa-nodeset-part",
            QEMU_CAPS_OBJECT_MEMORY_RAM,
925
            QEMU_CAPS_OBJECT_MEMORY_FILE);
926 927 928
    DO_TEST_PARSE_ERROR("hugepages-numa-nodeset-nonexist",
                        QEMU_CAPS_OBJECT_MEMORY_RAM,
                        QEMU_CAPS_OBJECT_MEMORY_FILE);
A
Andrea Bolognani 已提交
929 930 931
    DO_TEST("hugepages-shared",
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
932
    DO_TEST_PARSE_ERROR("hugepages-memaccess-invalid", NONE);
933 934 935
    DO_TEST("hugepages-memaccess", QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_DEVICE_PC_DIMM,
            QEMU_CAPS_NUMA);
936 937 938
    DO_TEST("hugepages-memaccess2", QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_DEVICE_PC_DIMM,
            QEMU_CAPS_NUMA);
939 940 941
    DO_TEST_PARSE_ERROR("hugepages-memaccess3",
                        QEMU_CAPS_OBJECT_MEMORY_RAM,
                        QEMU_CAPS_OBJECT_MEMORY_FILE);
942
    DO_TEST_CAPS_LATEST("hugepages-nvdimm");
943
    DO_TEST("nosharepages", QEMU_CAPS_MEM_MERGE);
944
    DO_TEST("disk-cdrom", NONE);
945
    DO_TEST_CAPS_VER("disk-cdrom", "2.12.0");
946
    DO_TEST_CAPS_LATEST("disk-cdrom");
947
    DO_TEST_CAPS_LATEST("disk-cdrom-bus-other");
948
    DO_TEST("disk-iscsi", NONE);
949
    DO_TEST("disk-cdrom-network", QEMU_CAPS_KVM);
950
    DO_TEST_CAPS_VER("disk-cdrom-network", "2.12.0");
951
    DO_TEST_CAPS_LATEST("disk-cdrom-network");
952
    DO_TEST("disk-cdrom-tray",
953
            QEMU_CAPS_VIRTIO_TX_ALG);
954
    DO_TEST_CAPS_VER("disk-cdrom-tray", "2.12.0");
955
    DO_TEST_CAPS_LATEST("disk-cdrom-tray");
956
    DO_TEST("disk-floppy", NONE);
957
    DO_TEST_CAPS_VER("disk-floppy", "2.12.0");
958
    DO_TEST_CAPS_LATEST("disk-floppy");
959
    DO_TEST_CAPS_VER("disk-floppy-q35-2_9", "2.12.0");
960
    DO_TEST_CAPS_LATEST("disk-floppy-q35-2_9");
961
    DO_TEST_CAPS_VER("disk-floppy-q35-2_11", "2.12.0");
962
    DO_TEST_CAPS_LATEST("disk-floppy-q35-2_11");
963 964
    DO_TEST_FAILURE("disk-floppy-pseries",
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
965
    DO_TEST("disk-floppy-tray", NONE);
966
    DO_TEST("disk-virtio-s390",
967
            QEMU_CAPS_VIRTIO_S390);
968
    DO_TEST("disk-virtio", NONE);
969
    DO_TEST("disk-virtio-ccw",
970
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
971
    DO_TEST("disk-virtio-ccw-many",
972
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
973 974 975 976
    DO_TEST("disk-virtio-s390-zpci",
            QEMU_CAPS_DEVICE_ZPCI,
            QEMU_CAPS_CCW,
            QEMU_CAPS_VIRTIO_S390);
977
    DO_TEST("disk-order", QEMU_CAPS_VIRTIO_BLK_SCSI);
978
    DO_TEST("disk-virtio-queues",
L
Lin Ma 已提交
979
            QEMU_CAPS_VIRTIO_BLK_NUM_QUEUES);
980 981 982
    DO_TEST("disk-boot-disk", NONE);
    DO_TEST("disk-boot-cdrom", NONE);
    DO_TEST("floppy-drive-fat", NONE);
983
    DO_TEST_CAPS_VER("floppy-drive-fat", "2.12.0");
984
    DO_TEST_CAPS_LATEST("floppy-drive-fat");
985
    DO_TEST("disk-readonly-disk", NONE);
986
    DO_TEST_CAPS_VER("disk-readonly-disk", "2.12.0");
987
    DO_TEST_CAPS_LATEST("disk-readonly-disk");
988 989 990 991
    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);
992
    DO_TEST_CAPS_VER("disk-shared", "2.12.0");
993
    DO_TEST_CAPS_LATEST("disk-shared");
994 995
    DO_TEST_PARSE_ERROR("disk-shared-qcow", NONE);
    DO_TEST("disk-error-policy", NONE);
996
    DO_TEST_CAPS_VER("disk-error-policy", "2.12.0");
997
    DO_TEST_CAPS_LATEST("disk-error-policy");
998
    DO_TEST_CAPS_VER("disk-cache", "1.5.3");
999 1000
    DO_TEST_CAPS_VER("disk-cache", "2.6.0");
    DO_TEST_CAPS_VER("disk-cache", "2.7.0");
1001
    DO_TEST_CAPS_VER("disk-cache", "2.12.0");
1002
    DO_TEST_CAPS_LATEST("disk-cache");
1003
    DO_TEST("disk-network-nbd", NONE);
1004
    DO_TEST_CAPS_VER("disk-network-nbd", "2.12.0");
1005
    DO_TEST_CAPS_LATEST("disk-network-nbd");
1006
    DO_TEST("disk-network-iscsi", QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_BLOCK);
1007 1008 1009 1010
    DO_TEST("disk-network-iscsi-modern",
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_BLOCK,
            QEMU_CAPS_ISCSI_PASSWORD_SECRET);
1011
    DO_TEST_CAPS_VER("disk-network-iscsi", "2.12.0");
1012
    DO_TEST_CAPS_LATEST("disk-network-iscsi");
1013 1014 1015 1016
    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",
1017
            QEMU_CAPS_GLUSTER_DEBUG_LEVEL);
1018
    DO_TEST_CAPS_VER("disk-network-gluster", "2.12.0");
1019
    DO_TEST_CAPS_LATEST("disk-network-gluster");
1020
    DO_TEST_CAPS_VER("disk-network-rbd", "2.5.0");
1021
    DO_TEST_CAPS_VER("disk-network-rbd", "2.12.0");
1022 1023
    DO_TEST_CAPS_LATEST("disk-network-rbd");
    DO_TEST_FAILURE("disk-network-rbd-no-colon", NONE);
1024
    DO_TEST("disk-network-sheepdog", NONE);
1025
    DO_TEST_CAPS_VER("disk-network-sheepdog", "2.12.0");
1026
    DO_TEST_CAPS_LATEST("disk-network-sheepdog");
1027
    DO_TEST("disk-network-source-auth", NONE);
1028
    DO_TEST_CAPS_VER("disk-network-source-auth", "2.12.0");
1029
    DO_TEST_CAPS_LATEST("disk-network-source-auth");
1030
    DO_TEST("disk-network-vxhs", QEMU_CAPS_VXHS);
1031
    driver.config->vxhsTLS = 1;
1032
    DO_TEST("disk-network-tlsx509", QEMU_CAPS_VXHS,
1033
            QEMU_CAPS_OBJECT_TLS_CREDS_X509, QEMU_CAPS_NBD_TLS);
1034
    DO_TEST_CAPS_VER("disk-network-tlsx509", "2.12.0");
1035
    DO_TEST_CAPS_LATEST("disk-network-tlsx509");
1036 1037
    driver.config->vxhsTLS = 0;
    VIR_FREE(driver.config->vxhsTLSx509certdir);
1038
    DO_TEST("disk-no-boot", NONE);
1039
    DO_TEST_PARSE_ERROR("disk-device-lun-type-invalid",
1040 1041
                        QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST_FAILURE("disk-usb-nosupport", NONE);
1042
    DO_TEST("disk-usb-device",
1043
            QEMU_CAPS_DEVICE_USB_STORAGE);
1044
    DO_TEST("disk-usb-device-removable",
1045
            QEMU_CAPS_DEVICE_USB_STORAGE,
1046
            QEMU_CAPS_USB_STORAGE_REMOVABLE);
1047
    DO_TEST_FAILURE("disk-usb-pci",
1048
                    QEMU_CAPS_DEVICE_USB_STORAGE);
1049
    DO_TEST_CAPS_LATEST("disk-scsi");
1050 1051
    DO_TEST_CAPS_VER("disk-scsi-device-auto", "1.5.3");
    DO_TEST_CAPS_LATEST("disk-scsi-device-auto");
1052
    DO_TEST("disk-scsi-disk-split",
1053
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI);
1054
    DO_TEST("disk-scsi-disk-wwn",
1055
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_DISK_WWN);
1056
    DO_TEST("disk-scsi-disk-vpd",
1057
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_DISK_WWN);
1058
    DO_TEST_FAILURE("disk-scsi-disk-vpd-build-error",
1059
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_DISK_WWN);
1060
    DO_TEST_CAPS_LATEST("controller-virtio-scsi");
1061
    DO_TEST("disk-sata-device",
1062
            QEMU_CAPS_ICH9_AHCI);
J
Ján Tomko 已提交
1063
    DO_TEST("disk-aio", NONE);
1064
    DO_TEST_CAPS_VER("disk-aio", "2.12.0");
1065
    DO_TEST_CAPS_LATEST("disk-aio");
1066 1067
    DO_TEST("disk-source-pool", NONE);
    DO_TEST("disk-source-pool-mode", NONE);
1068
    DO_TEST("disk-ioeventfd",
1069
            QEMU_CAPS_VIRTIO_IOEVENTFD,
1070
            QEMU_CAPS_VIRTIO_TX_ALG,
1071
            QEMU_CAPS_VIRTIO_BLK_SCSI);
1072
    DO_TEST("disk-copy_on_read",
1073
            QEMU_CAPS_VIRTIO_TX_ALG,
1074
            QEMU_CAPS_VIRTIO_BLK_SCSI);
1075
    DO_TEST_CAPS_VER("disk-copy_on_read", "2.12.0");
1076
    DO_TEST_CAPS_LATEST("disk-copy_on_read");
1077
    DO_TEST("disk-discard",
1078
            QEMU_CAPS_DRIVE_DISCARD);
1079
    DO_TEST("disk-detect-zeroes",
1080 1081
            QEMU_CAPS_DRIVE_DISCARD,
            QEMU_CAPS_DRIVE_DETECT_ZEROES);
1082
    DO_TEST_CAPS_VER("disk-detect-zeroes", "2.12.0");
1083
    DO_TEST_CAPS_LATEST("disk-detect-zeroes");
1084
    DO_TEST("disk-snapshot", NONE);
1085 1086
    DO_TEST_PARSE_ERROR("disk-same-targets",
                        QEMU_CAPS_SCSI_LSI,
1087
                        QEMU_CAPS_DEVICE_USB_STORAGE);
1088
    DO_TEST_PARSE_ERROR("disk-address-conflict",
1089 1090
                        QEMU_CAPS_ICH9_AHCI);
    DO_TEST_PARSE_ERROR("disk-hostdev-scsi-address-conflict",
1091
                        QEMU_CAPS_VIRTIO_SCSI);
1092
    DO_TEST_PARSE_ERROR("hostdevs-drive-address-conflict",
1093
                        QEMU_CAPS_VIRTIO_SCSI);
1094
    DO_TEST("event_idx",
1095 1096
            QEMU_CAPS_VIRTIO_BLK_EVENT_IDX,
            QEMU_CAPS_VIRTIO_NET_EVENT_IDX,
1097
            QEMU_CAPS_VIRTIO_BLK_SCSI);
1098
    DO_TEST("virtio-lun",
1099
            QEMU_CAPS_VIRTIO_BLK_SCSI);
1100
    DO_TEST("disk-scsi-lun-passthrough",
1101
            QEMU_CAPS_SCSI_BLOCK,
1102
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI);
1103
    DO_TEST("disk-serial",
1104
            QEMU_CAPS_KVM);
1105 1106 1107 1108 1109 1110 1111 1112
    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);
1113 1114 1115 1116
    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");
1117

1118 1119 1120
    DO_TEST("graphics-egl-headless",
            QEMU_CAPS_EGL_HEADLESS,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1121 1122
    DO_TEST_CAPS_LATEST("graphics-egl-headless");
    DO_TEST_CAPS_LATEST("graphics-egl-headless-rendernode");
1123

1124 1125
    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);
1126 1127
    DO_TEST("graphics-vnc-websocket",
            QEMU_CAPS_VNC,
1128
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1129
    DO_TEST("graphics-vnc-policy", QEMU_CAPS_VNC,
1130 1131 1132 1133 1134
            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);
1135
    driver.config->vncAutoUnixSocket = true;
1136 1137
    DO_TEST("graphics-vnc-auto-socket-cfg", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1138
    driver.config->vncAutoUnixSocket = false;
1139 1140 1141 1142
    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);
1143 1144
    DO_TEST("graphics-vnc-socket-new-cmdline", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA, QEMU_CAPS_VNC_MULTI_SERVERS);
1145

1146 1147
    driver.config->vncSASL = 1;
    VIR_FREE(driver.config->vncSASLdir);
1148
    ignore_value(VIR_STRDUP(driver.config->vncSASLdir, "/root/.sasl2"));
1149
    DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1150 1151
    driver.config->vncTLS = 1;
    driver.config->vncTLSx509verify = 1;
1152
    DO_TEST("graphics-vnc-tls", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1153 1154
    DO_TEST_CAPS_VER("graphics-vnc-tls", "2.4.0");
    DO_TEST_CAPS_LATEST("graphics-vnc-tls");
1155 1156 1157 1158 1159
    if (VIR_STRDUP_QUIET(driver.config->vncTLSx509secretUUID,
                         "6fd3f62d-9fe7-4a4e-a869-7acd6376d8ea") < 0)
        return EXIT_FAILURE;
    DO_TEST_CAPS_LATEST("graphics-vnc-tls-secret");
    VIR_FREE(driver.config->vncTLSx509secretUUID);
1160
    driver.config->vncSASL = driver.config->vncTLSx509verify = driver.config->vncTLS = 0;
1161 1162
    VIR_FREE(driver.config->vncSASLdir);
    VIR_FREE(driver.config->vncTLSx509certdir);
1163 1164 1165 1166
    DO_TEST("graphics-vnc-egl-headless",
            QEMU_CAPS_VNC,
            QEMU_CAPS_EGL_HEADLESS,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1167

J
Ján Tomko 已提交
1168 1169
    DO_TEST("graphics-sdl",
            QEMU_CAPS_DEVICE_VGA);
1170
    DO_TEST_CAPS_LATEST_PARSE_ERROR("graphics-sdl-egl-headless");
J
Ján Tomko 已提交
1171
    DO_TEST("graphics-sdl-fullscreen",
1172
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1173
    DO_TEST("graphics-spice",
1174
            QEMU_CAPS_SPICE,
1175 1176
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
1177
    DO_TEST("graphics-spice-no-args",
1178
            QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1179 1180 1181
    driver.config->spiceSASL = 1;
    ignore_value(VIR_STRDUP(driver.config->spiceSASLdir, "/root/.sasl2"));
    DO_TEST("graphics-spice-sasl",
1182
            QEMU_CAPS_SPICE,
1183 1184 1185
            QEMU_CAPS_DEVICE_QXL);
    VIR_FREE(driver.config->spiceSASLdir);
    driver.config->spiceSASL = 0;
1186
    DO_TEST("graphics-spice-agentmouse",
1187
            QEMU_CAPS_DEVICE_QXL,
1188
            QEMU_CAPS_SPICE,
1189
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1190
    DO_TEST("graphics-spice-compression",
1191
            QEMU_CAPS_SPICE,
1192
            QEMU_CAPS_DEVICE_QXL);
1193
    DO_TEST("graphics-spice-timeout",
1194
            QEMU_CAPS_KVM,
1195
            QEMU_CAPS_SPICE,
1196 1197
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_DEVICE_VGA);
1198
    DO_TEST("graphics-spice-qxl-vga",
1199
            QEMU_CAPS_SPICE,
1200
            QEMU_CAPS_DEVICE_QXL);
1201
    DO_TEST("graphics-spice-usb-redir",
1202
            QEMU_CAPS_SPICE,
1203 1204 1205 1206
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1207
    DO_TEST("graphics-spice-agent-file-xfer",
1208
            QEMU_CAPS_SPICE,
1209 1210
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
1211 1212
    DO_TEST("graphics-spice-socket",
            QEMU_CAPS_SPICE,
1213 1214
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1215 1216
    DO_TEST("graphics-spice-auto-socket",
            QEMU_CAPS_SPICE,
1217 1218
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1219 1220 1221
    driver.config->spiceAutoUnixSocket = true;
    DO_TEST("graphics-spice-auto-socket-cfg",
            QEMU_CAPS_SPICE,
1222 1223
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1224
    driver.config->spiceAutoUnixSocket = false;
1225 1226 1227 1228
    DO_TEST("graphics-spice-egl-headless",
            QEMU_CAPS_SPICE,
            QEMU_CAPS_EGL_HEADLESS,
            QEMU_CAPS_DEVICE_QXL);
1229
    DO_TEST_CAPS_LATEST_PARSE_ERROR("graphics-spice-invalid-egl-headless");
1230
    DO_TEST_CAPS_LATEST("graphics-spice-gl-auto-rendernode");
1231

1232 1233 1234
    DO_TEST("input-usbmouse", NONE);
    DO_TEST("input-usbtablet", NONE);
    DO_TEST("misc-acpi", NONE);
1235 1236 1237
    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);
1238
    DO_TEST_FAILURE("misc-enable-s4", NONE);
1239
    DO_TEST("misc-no-reboot", NONE);
1240
    DO_TEST("misc-uuid", NONE);
1241
    DO_TEST_PARSE_ERROR("vhost_queues-invalid", NONE);
1242
    DO_TEST("net-vhostuser", QEMU_CAPS_CHARDEV_FD_PASS);
1243 1244
    DO_TEST_CAPS_VER("net-vhostuser", "2.5.0");
    DO_TEST_CAPS_LATEST("net-vhostuser");
1245
    DO_TEST("net-vhostuser-multiq",
J
Ján Tomko 已提交
1246 1247
            QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
    DO_TEST_FAILURE("net-vhostuser-multiq", NONE);
1248 1249
    DO_TEST_FAILURE("net-vhostuser-fail",
                    QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
1250
    DO_TEST("net-user", NONE);
J
Ján Tomko 已提交
1251
    DO_TEST("net-user-addr", NONE);
1252 1253
    DO_TEST("net-virtio", NONE);
    DO_TEST("net-virtio-device",
1254 1255 1256
            QEMU_CAPS_VIRTIO_TX_ALG);
    DO_TEST("net-virtio-disable-offloads", NONE);
    DO_TEST("net-virtio-netdev", NONE);
1257
    DO_TEST("net-virtio-s390",
1258
            QEMU_CAPS_VIRTIO_S390);
1259
    DO_TEST("net-virtio-ccw",
1260
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1261 1262 1263
    DO_TEST("net-virtio-rxtxqueuesize",
            QEMU_CAPS_VIRTIO_NET_RX_QUEUE_SIZE,
            QEMU_CAPS_VIRTIO_NET_TX_QUEUE_SIZE);
1264
    DO_TEST_PARSE_ERROR("net-virtio-rxqueuesize-invalid-size", NONE);
1265 1266
    DO_TEST("net-eth", NONE);
    DO_TEST("net-eth-ifname", NONE);
1267
    DO_TEST("net-eth-names", NONE);
1268
    DO_TEST("net-eth-hostip", NONE);
1269 1270
    DO_TEST("net-client", NONE);
    DO_TEST("net-server", NONE);
1271
    DO_TEST("net-many-models", NONE);
1272
    DO_TEST("net-mcast", NONE);
1273
    DO_TEST("net-udp", NONE);
1274
    DO_TEST("net-hostdev", NONE);
1275
    DO_TEST("net-hostdev-bootorder", NONE);
1276
    DO_TEST("net-hostdev-multidomain", NONE);
1277 1278
    DO_TEST("net-hostdev-vfio",
            QEMU_CAPS_DEVICE_VFIO_PCI);
1279
    DO_TEST("net-hostdev-vfio-multidomain",
1280
            QEMU_CAPS_DEVICE_VFIO_PCI);
1281 1282 1283
    DO_TEST_FAILURE("net-hostdev-fail",
                    QEMU_CAPS_DEVICE_VFIO_PCI);

1284

1285 1286
    DO_TEST("serial-file-log",
            QEMU_CAPS_CHARDEV_FILE_APPEND,
1287
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1288
            QEMU_CAPS_CHARDEV_LOGFILE);
1289
    DO_TEST("serial-spiceport",
1290
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1291
            QEMU_CAPS_DEVICE_QXL,
1292
            QEMU_CAPS_SPICE,
1293
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1294
    DO_TEST("serial-spiceport-nospice", NONE);
1295

1296 1297 1298 1299
    DO_TEST("console-compat",
            QEMU_CAPS_DEVICE_ISA_SERIAL);
    DO_TEST("console-compat-auto",
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1300 1301

    DO_TEST("serial-vc-chardev",
1302
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1303
    DO_TEST("serial-pty-chardev",
1304
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1305
    DO_TEST("serial-dev-chardev",
1306
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1307
    DO_TEST("serial-dev-chardev-iobase",
1308
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1309
    DO_TEST("serial-file-chardev",
1310
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1311
            QEMU_CAPS_CHARDEV_FILE_APPEND);
1312
    DO_TEST("serial-unix-chardev",
1313
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1314
    DO_TEST_CAPS_LATEST("serial-unix-chardev");
1315
    DO_TEST_PARSE_ERROR("serial-unix-missing-source", NONE);
1316
    DO_TEST("serial-tcp-chardev",
1317
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1318
    DO_TEST("serial-udp-chardev",
1319
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1320
    DO_TEST("serial-tcp-telnet-chardev",
1321
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1322 1323
    driver.config->chardevTLS = 1;
    DO_TEST("serial-tcp-tlsx509-chardev",
1324
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1325
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1326 1327
    driver.config->chardevTLSx509verify = 1;
    DO_TEST("serial-tcp-tlsx509-chardev-verify",
1328
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1329 1330
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
    driver.config->chardevTLSx509verify = 0;
1331
    DO_TEST("serial-tcp-tlsx509-chardev-notls",
1332
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1333
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1334 1335 1336 1337 1338 1339 1340 1341
    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,
1342
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1343
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1344 1345
    driver.config->chardevTLS = 0;
    VIR_FREE(driver.config->chardevTLSx509certdir);
1346
    DO_TEST("serial-many-chardev",
1347 1348 1349
            QEMU_CAPS_DEVICE_ISA_SERIAL);
    DO_TEST("parallel-tcp-chardev", NONE);
    DO_TEST("parallel-parport-chardev", NONE);
J
Ján Tomko 已提交
1350 1351
    DO_TEST_CAPS_VER("parallel-unix-chardev", "2.5.0");
    DO_TEST_CAPS_LATEST("parallel-unix-chardev");
1352
    DO_TEST("console-compat-chardev",
1353
            QEMU_CAPS_DEVICE_ISA_SERIAL);
M
Michal Privoznik 已提交
1354 1355
    DO_TEST("pci-serial-dev-chardev",
            QEMU_CAPS_DEVICE_PCI_SERIAL);
1356

1357
    DO_TEST("channel-guestfwd", NONE);
J
Ján Tomko 已提交
1358 1359
    DO_TEST_CAPS_VER("channel-unix-guestfwd", "2.5.0");
    DO_TEST_CAPS_LATEST("channel-unix-guestfwd");
1360 1361 1362 1363 1364 1365
    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);
1366
    DO_TEST("console-virtio-many",
1367
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1368
    DO_TEST("console-virtio-s390",
1369
            QEMU_CAPS_VIRTIO_S390);
1370
    DO_TEST("console-virtio-ccw",
1371
            QEMU_CAPS_CCW,
1372
            QEMU_CAPS_VIRTIO_S390);
J
Ján Tomko 已提交
1373 1374
    DO_TEST_CAPS_VER("console-virtio-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("console-virtio-unix");
1375
    DO_TEST("console-sclp",
1376
            QEMU_CAPS_VIRTIO_S390,
1377
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
1378
    DO_TEST("channel-spicevmc",
1379
            QEMU_CAPS_SPICE,
1380
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1381
    DO_TEST("channel-virtio-default",
1382
            QEMU_CAPS_SPICE);
1383
    DO_TEST("channel-virtio-unix", NONE);
1384

1385
    DO_TEST("smartcard-host",
1386
            QEMU_CAPS_CCID_EMULATED);
1387
    DO_TEST("smartcard-host-certificates",
1388
            QEMU_CAPS_CCID_EMULATED);
1389 1390
    DO_TEST("smartcard-host-certificates-database",
            QEMU_CAPS_CCID_EMULATED);
1391
    DO_TEST("smartcard-passthrough-tcp",
1392
            QEMU_CAPS_CCID_PASSTHRU);
1393
    DO_TEST("smartcard-passthrough-spicevmc",
1394
            QEMU_CAPS_CCID_PASSTHRU);
1395
    DO_TEST("smartcard-controller",
1396
            QEMU_CAPS_CCID_EMULATED);
J
Ján Tomko 已提交
1397 1398
    DO_TEST_CAPS_VER("smartcard-passthrough-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("smartcard-passthrough-unix");
1399

1400 1401 1402 1403 1404 1405 1406 1407
    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);
1408 1409
    DO_TEST_PARSE_ERROR("chardev-reconnect-generated-path",
                        QEMU_CAPS_CHARDEV_RECONNECT);
1410

1411
    DO_TEST("usb-controller", NONE);
1412
    DO_TEST("usb-piix3-controller",
1413
            QEMU_CAPS_PIIX3_USB_UHCI);
1414
    DO_TEST("usb-ich9-ehci-addr",
1415
            QEMU_CAPS_ICH9_USB_EHCI1);
1416
    DO_TEST("input-usbmouse-addr", NONE);
1417
    DO_TEST("usb-ich9-companion",
1418
            QEMU_CAPS_ICH9_USB_EHCI1);
1419
    DO_TEST_PARSE_ERROR("usb-ich9-no-companion",
1420
            QEMU_CAPS_ICH9_USB_EHCI1);
1421
    DO_TEST("usb-ich9-autoassign",
1422
            QEMU_CAPS_ICH9_USB_EHCI1,
1423
            QEMU_CAPS_USB_HUB);
1424
    DO_TEST("usb-hub",
1425
            QEMU_CAPS_USB_HUB);
1426
    DO_TEST("usb-hub-autoadd",
1427
            QEMU_CAPS_USB_HUB);
1428
    DO_TEST("usb-hub-autoadd-deluxe",
1429
            QEMU_CAPS_USB_HUB);
J
Ján Tomko 已提交
1430
    DO_TEST_PARSE_ERROR("usb-hub-conflict",
1431
            QEMU_CAPS_USB_HUB);
1432
    DO_TEST_PARSE_ERROR("usb-hub-nonexistent",
1433
            QEMU_CAPS_USB_HUB);
J
Ján Tomko 已提交
1434
    DO_TEST("usb-port-missing",
1435
            QEMU_CAPS_USB_HUB);
1436
    DO_TEST_FAILURE("usb-bus-missing",
1437
                    QEMU_CAPS_USB_HUB);
1438
    DO_TEST("usb-ports",
1439
            QEMU_CAPS_USB_HUB);
1440
    DO_TEST_PARSE_ERROR("usb-ports-out-of-range",
1441
            QEMU_CAPS_USB_HUB);
1442
    DO_TEST("usb-port-autoassign",
1443
            QEMU_CAPS_USB_HUB);
1444
    DO_TEST("usb-redir",
1445 1446 1447
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
1448
            QEMU_CAPS_SPICE);
1449
    DO_TEST("usb-redir-boot",
1450 1451 1452
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
1453
            QEMU_CAPS_SPICE);
1454
    DO_TEST("usb-redir-filter",
1455 1456 1457 1458
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE,
1459
            QEMU_CAPS_USB_REDIR_FILTER);
1460 1461
    DO_TEST("usb-redir-filter-version",
            QEMU_CAPS_USB_REDIR,
1462
            QEMU_CAPS_SPICE,
1463
            QEMU_CAPS_USB_REDIR_FILTER);
J
Ján Tomko 已提交
1464 1465
    DO_TEST_CAPS_VER("usb-redir-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("usb-redir-unix");
1466
    DO_TEST("usb1-usb2",
1467 1468 1469
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1);
1470 1471
    DO_TEST("usb-none", NONE);
    DO_TEST_PARSE_ERROR("usb-none-other", NONE);
1472 1473
    DO_TEST_PARSE_ERROR("usb-none-hub",
            QEMU_CAPS_USB_HUB);
1474
    DO_TEST_PARSE_ERROR("usb-none-usbtablet", NONE);
1475
    DO_TEST("usb-controller-default-q35",
1476
            QEMU_CAPS_DEVICE_IOH3420,
1477 1478 1479
            QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI);
1480
    DO_TEST_FAILURE("usb-controller-default-unavailable-q35",
1481
                    QEMU_CAPS_DEVICE_IOH3420,
1482
                    QEMU_CAPS_PCI_OHCI,
1483 1484
                    QEMU_CAPS_NEC_USB_XHCI);
    DO_TEST("usb-controller-explicit-q35",
1485
            QEMU_CAPS_DEVICE_IOH3420,
1486 1487 1488
            QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI);
1489
    DO_TEST_FAILURE("usb-controller-explicit-unavailable-q35",
1490
                    QEMU_CAPS_DEVICE_IOH3420,
1491
                    QEMU_CAPS_PCI_OHCI,
1492
                    QEMU_CAPS_PIIX3_USB_UHCI);
1493
    DO_TEST("usb-controller-xhci",
1494 1495 1496
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_NEC_USB_XHCI_PORTS);
1497
    DO_TEST("usb-xhci-autoassign",
1498 1499 1500
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_NEC_USB_XHCI_PORTS,
1501
            QEMU_CAPS_USB_HUB);
1502
    DO_TEST_PARSE_ERROR("usb-controller-xhci-limit",
1503 1504 1505
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_NEC_USB_XHCI_PORTS);
1506 1507 1508 1509
    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);
1510

1511 1512 1513
    DO_TEST("smbios", NONE);
    DO_TEST_PARSE_ERROR("smbios-date", NONE);
    DO_TEST_PARSE_ERROR("smbios-uuid-match", NONE);
1514

1515
    DO_TEST("watchdog", NONE);
1516
    DO_TEST("watchdog-device", NONE);
1517
    DO_TEST("watchdog-dump", NONE);
1518
    DO_TEST("watchdog-injectnmi", NONE);
1519
    DO_TEST("watchdog-diag288", QEMU_CAPS_VIRTIO_S390);
1520 1521
    DO_TEST("balloon-device", NONE);
    DO_TEST("balloon-device-deflate",
1522
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1523
    DO_TEST("balloon-ccw-deflate",
1524
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1525
    DO_TEST("balloon-mmio-deflate",
J
Ján Tomko 已提交
1526
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1527
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1528
    DO_TEST("balloon-device-deflate-off",
1529
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1530 1531
    DO_TEST("balloon-device-auto", NONE);
    DO_TEST("balloon-device-period", NONE);
1532 1533
    DO_TEST("sound", NONE);
    DO_TEST("sound-device",
1534
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_HDA_MICRO,
1535
            QEMU_CAPS_HDA_OUTPUT,
1536 1537
            QEMU_CAPS_DEVICE_ICH9_INTEL_HDA,
            QEMU_CAPS_OBJECT_USB_AUDIO);
1538
    DO_TEST("fs9p", NONE);
1539
    DO_TEST("fs9p-ccw",
1540
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1541

1542
    DO_TEST("hostdev-usb-address", NONE);
1543
    DO_TEST("hostdev-usb-address-device", NONE);
1544
    DO_TEST("hostdev-usb-address-device-boot", NONE);
J
Ján Tomko 已提交
1545
    DO_TEST("hostdev-pci-address", NONE);
1546
    DO_TEST("hostdev-pci-address-device", NONE);
1547 1548
    DO_TEST("hostdev-vfio",
            QEMU_CAPS_DEVICE_VFIO_PCI);
1549
    DO_TEST("hostdev-vfio-multidomain",
1550
            QEMU_CAPS_DEVICE_VFIO_PCI);
1551 1552 1553 1554 1555 1556
    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);
1557 1558 1559 1560 1561 1562 1563
    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);
1564 1565
    DO_TEST_PARSE_ERROR("hostdev-vfio-zpci-wrong-arch",
                        QEMU_CAPS_DEVICE_VFIO_PCI);
1566 1567 1568
    DO_TEST("hostdev-vfio-zpci",
            QEMU_CAPS_DEVICE_VFIO_PCI,
            QEMU_CAPS_DEVICE_ZPCI);
1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581
    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);
1582
    DO_TEST("pci-rom", NONE);
1583
    DO_TEST("pci-rom-disabled", NONE);
1584
    DO_TEST("pci-rom-disabled-invalid", NONE);
1585

1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601
    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);

1602
    DO_TEST_FULL("restore-v2",
1603 1604
                 ARG_MIGRATE_FROM, "exec:cat",
                 ARG_MIGRATE_FD, 7,
1605
                 ARG_QEMU_CAPS, NONE);
1606
    DO_TEST_FULL("restore-v2-fd",
1607 1608
                 ARG_MIGRATE_FROM, "stdio",
                 ARG_MIGRATE_FD, 7,
1609
                 ARG_QEMU_CAPS, NONE);
1610
    DO_TEST_FULL("restore-v2-fd",
1611 1612
                 ARG_MIGRATE_FROM, "fd:7",
                 ARG_MIGRATE_FD, 7,
1613
                 ARG_QEMU_CAPS, NONE);
1614
    DO_TEST_FULL("migrate",
1615
                 ARG_MIGRATE_FROM, "tcp:10.0.0.1:5000",
1616
                 ARG_QEMU_CAPS, NONE);
1617

1618
    DO_TEST_FULL("migrate-numa-unaligned",
1619 1620
                 ARG_MIGRATE_FROM, "stdio",
                 ARG_MIGRATE_FD, 7,
1621
                 ARG_QEMU_CAPS,
A
Andrea Bolognani 已提交
1622 1623
                 QEMU_CAPS_NUMA,
                 QEMU_CAPS_OBJECT_MEMORY_RAM);
1624

1625
    DO_TEST("qemu-ns", NONE);
1626
    DO_TEST("qemu-ns-no-env", NONE);
1627
    DO_TEST("qemu-ns-alt", NONE);
1628

1629
    DO_TEST("smp", NONE);
1630

J
John Ferlan 已提交
1631
    DO_TEST("iothreads", QEMU_CAPS_OBJECT_IOTHREAD);
1632 1633
    DO_TEST("iothreads-ids", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-ids-partial", QEMU_CAPS_OBJECT_IOTHREAD);
1634
    DO_TEST_FAILURE("iothreads-nocap", NONE);
1635 1636
    DO_TEST("iothreads-disk", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-disk-virtio-ccw", QEMU_CAPS_OBJECT_IOTHREAD,
1637
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1638 1639
    DO_TEST_CAPS_LATEST("iothreads-virtio-scsi-pci");
    DO_TEST_CAPS_ARCH_LATEST("iothreads-virtio-scsi-ccw", "s390x");
J
John Ferlan 已提交
1640

1641 1642
    DO_TEST("cpu-topology1", NONE);
    DO_TEST("cpu-topology2", NONE);
1643
    DO_TEST("cpu-topology3", NONE);
1644 1645 1646 1647 1648 1649 1650 1651
    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);
1652
    DO_TEST("cpu-numa1", NONE);
1653 1654
    DO_TEST("cpu-numa2", NONE);
    DO_TEST("cpu-numa-no-memory-element", NONE);
1655
    DO_TEST_PARSE_ERROR("cpu-numa3", NONE);
1656 1657
    DO_TEST_FAILURE("cpu-numa-disjoint", NONE);
    DO_TEST("cpu-numa-disjoint", QEMU_CAPS_NUMA);
1658 1659
    DO_TEST_FAILURE("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_RAM);
    DO_TEST_FAILURE("cpu-numa-memshared", NONE);
1660
    DO_TEST("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_FILE);
1661
    DO_TEST("cpu-host-model", NONE);
1662
    DO_TEST("cpu-host-model-vendor", NONE);
1663
    DO_TEST_FULL("cpu-host-model-fallback",
1664
                 ARG_FLAGS, FLAG_SKIP_LEGACY_CPUS,
1665
                 ARG_QEMU_CAPS, NONE);
1666
    DO_TEST_FULL("cpu-host-model-nofallback",
1667
                 ARG_FLAGS, FLAG_SKIP_LEGACY_CPUS | FLAG_EXPECT_FAILURE,
1668
                 ARG_QEMU_CAPS, NONE);
A
Andrea Bolognani 已提交
1669 1670
    DO_TEST("cpu-host-passthrough", QEMU_CAPS_KVM);
    DO_TEST_FAILURE("cpu-qemu-host-passthrough", QEMU_CAPS_KVM);
1671

1672
    qemuTestSetHostArch(driver.caps, VIR_ARCH_S390X);
1673
    DO_TEST("cpu-s390-zEC12", QEMU_CAPS_KVM, QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1674 1675
    DO_TEST("cpu-s390-features", QEMU_CAPS_KVM, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION);
    DO_TEST_FAILURE("cpu-s390-features", QEMU_CAPS_KVM);
1676 1677
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);

1678
    qemuTestSetHostCPU(driver.caps, cpuHaswell);
1679 1680 1681 1682
    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);
1683
    DO_TEST("cpu-host-model-cmt", NONE);
1684
    DO_TEST("cpu-tsc-frequency", QEMU_CAPS_KVM);
1685
    qemuTestSetHostCPU(driver.caps, NULL);
1686

1687 1688
    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);
1689
    DO_TEST("luks-disks", QEMU_CAPS_OBJECT_SECRET);
1690
    DO_TEST("luks-disks-source", QEMU_CAPS_OBJECT_SECRET);
1691 1692
    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);
1693
    DO_TEST_PARSE_ERROR("luks-disk-invalid", NONE);
1694
    DO_TEST_PARSE_ERROR("luks-disks-source-both", QEMU_CAPS_OBJECT_SECRET);
1695

1696 1697 1698 1699 1700 1701 1702 1703
    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);
1704
    DO_TEST("cputune-numatune",
1705
            QEMU_CAPS_KVM,
1706
            QEMU_CAPS_OBJECT_IOTHREAD,
1707 1708
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1709 1710 1711
    DO_TEST("vcpu-placement-static",
            QEMU_CAPS_KVM,
            QEMU_CAPS_OBJECT_IOTHREAD);
1712

1713
    DO_TEST("numatune-memory", NONE);
1714
    DO_TEST_PARSE_ERROR("numatune-memory-invalid-nodeset", NONE);
A
Andrea Bolognani 已提交
1715 1716 1717
    DO_TEST("numatune-memnode",
            QEMU_CAPS_NUMA,
            QEMU_CAPS_OBJECT_MEMORY_RAM);
1718 1719
    DO_TEST_FAILURE("numatune-memnode", NONE);

A
Andrea Bolognani 已提交
1720 1721 1722
    DO_TEST("numatune-memnode-no-memory",
            QEMU_CAPS_NUMA,
            QEMU_CAPS_OBJECT_MEMORY_RAM);
1723 1724
    DO_TEST_FAILURE("numatune-memnode-no-memory", NONE);

1725 1726
    DO_TEST("numatune-distances", QEMU_CAPS_NUMA, QEMU_CAPS_NUMA_DIST);

1727
    DO_TEST("numatune-auto-nodeset-invalid", NONE);
1728 1729
    DO_TEST("numatune-auto-prefer", QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1730 1731
    DO_TEST_FAILURE("numatune-static-nodeset-exceed-hostnode",
                    QEMU_CAPS_OBJECT_MEMORY_RAM);
1732 1733
    DO_TEST_PARSE_ERROR("numatune-memnode-nocpu", NONE);
    DO_TEST_PARSE_ERROR("numatune-memnodes-problematic", NONE);
1734 1735
    DO_TEST("numad", NONE);
    DO_TEST("numad-auto-vcpu-static-numatune", NONE);
1736
    DO_TEST_PARSE_ERROR("numad-auto-vcpu-static-numatune-no-nodeset", NONE);
1737 1738 1739
    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);
1740
    DO_TEST("blkdeviotune-max",
1741
            QEMU_CAPS_DRIVE_IOTUNE_MAX);
1742 1743 1744
    DO_TEST("blkdeviotune-group-num",
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_GROUP);
1745 1746 1747
    DO_TEST("blkdeviotune-max-length",
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_MAX_LENGTH);
1748

1749
    DO_TEST("multifunction-pci-device",
1750
            QEMU_CAPS_SCSI_LSI);
1751

1752
    DO_TEST("monitor-json", NONE);
1753

1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765
    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);
1766

1767
    DO_TEST("pseries-basic",
1768
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1769
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1770
    DO_TEST("pseries-vio",
1771
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1772
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1773
    DO_TEST("pseries-usb-default",
1774
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1775
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1776
            QEMU_CAPS_PIIX3_USB_UHCI,
1777
            QEMU_CAPS_PCI_OHCI);
1778
    DO_TEST("pseries-usb-multi",
1779
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1780
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1781
            QEMU_CAPS_PIIX3_USB_UHCI,
1782
            QEMU_CAPS_PCI_OHCI);
1783
    DO_TEST("pseries-vio-user-assigned",
1784
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1785 1786
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST_PARSE_ERROR("pseries-vio-address-clash", NONE);
1787 1788 1789
    DO_TEST("pseries-nvram",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_DEVICE_NVRAM);
1790
    DO_TEST("pseries-usb-kbd", QEMU_CAPS_PCI_OHCI,
1791
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1792
            QEMU_CAPS_DEVICE_USB_KBD,
1793
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1794
    DO_TEST("pseries-cpu-exact",
1795
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1796 1797
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST_PARSE_ERROR("pseries-no-parallel", NONE);
1798 1799

    qemuTestSetHostArch(driver.caps, VIR_ARCH_PPC64);
A
Andrea Bolognani 已提交
1800
    DO_TEST("pseries-cpu-compat", QEMU_CAPS_KVM,
1801
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1802
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1803 1804 1805
    DO_TEST("pseries-machine-max-cpu-compat",
            QEMU_CAPS_KVM,
            QEMU_CAPS_MACHINE_PSERIES_MAX_CPU_COMPAT,
1806
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
A
Andrea Bolognani 已提交
1807
    DO_TEST("pseries-cpu-le", QEMU_CAPS_KVM,
1808
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1809
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1810 1811 1812
    DO_TEST_FAILURE("pseries-cpu-compat-power9",
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
                    QEMU_CAPS_KVM);
1813 1814 1815

    qemuTestSetHostCPU(driver.caps, cpuPower9);
    DO_TEST("pseries-cpu-compat-power9",
1816
            QEMU_CAPS_KVM,
1817
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1818
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1819 1820
    qemuTestSetHostCPU(driver.caps, NULL);

1821 1822
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);

1823
    DO_TEST("pseries-panic-missing",
1824
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1825
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1826
    DO_TEST("pseries-panic-no-address",
1827
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1828
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1829
    DO_TEST_FAILURE("pseries-panic-address",
1830
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
1831 1832 1833 1834 1835

    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);
1836 1837 1838 1839 1840 1841
    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);
1842 1843 1844
    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);
1845

1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867
    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);

1868
    DO_TEST("pseries-features",
1869
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1870
            QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE,
1871
            QEMU_CAPS_MACHINE_PSERIES_CAP_HTM,
1872
            QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV,
1873
            QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);
1874
    DO_TEST_FAILURE("pseries-features",
1875
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
A
Andrea Bolognani 已提交
1876
    DO_TEST_PARSE_ERROR("pseries-features-invalid-machine", NONE);
1877

1878
    DO_TEST("pseries-serial-native",
1879
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1880 1881
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial+console-native",
1882
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1883 1884
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial-compat",
1885
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1886
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1887
    DO_TEST("pseries-serial-pci",
1888
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1889 1890
            QEMU_CAPS_DEVICE_PCI_SERIAL);
    DO_TEST("pseries-serial-usb",
1891
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1892 1893
            QEMU_CAPS_DEVICE_QEMU_XHCI,
            QEMU_CAPS_DEVICE_USB_SERIAL);
1894
    DO_TEST("pseries-console-native",
1895
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1896 1897
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-console-virtio",
1898
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
1899 1900
    DO_TEST_PARSE_ERROR("pseries-serial-invalid-machine", NONE);

1901
    DO_TEST("mach-virt-serial-native",
1902
            QEMU_CAPS_DEVICE_PL011);
1903
    DO_TEST("mach-virt-serial+console-native",
1904
            QEMU_CAPS_DEVICE_PL011);
1905
    DO_TEST("mach-virt-serial-compat",
1906
            QEMU_CAPS_DEVICE_PL011);
1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918
    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",
1919
            QEMU_CAPS_DEVICE_PL011);
1920 1921
    DO_TEST("mach-virt-console-virtio",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
1922 1923
    DO_TEST_PARSE_ERROR("mach-virt-serial-invalid-machine", NONE);

1924 1925
    DO_TEST("disk-ide-split", NONE);
    DO_TEST("disk-ide-wwn", QEMU_CAPS_IDE_DRIVE_WWN);
1926

1927
    DO_TEST("disk-geometry", NONE);
1928
    DO_TEST("disk-blockio", QEMU_CAPS_BLOCKIO);
1929

1930
    DO_TEST("video-device-pciaddr-default",
1931 1932
            QEMU_CAPS_KVM,
            QEMU_CAPS_VNC,
1933
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1934
            QEMU_CAPS_DEVICE_QXL);
1935
    DO_TEST("video-vga-nodevice", QEMU_CAPS_DEVICE_VGA);
1936
    DO_TEST("video-vga-device", QEMU_CAPS_DEVICE_VGA,
1937
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1938
    DO_TEST("video-vga-device-vgamem", QEMU_CAPS_DEVICE_VGA,
1939
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_VGA_VGAMEM);
1940
    DO_TEST("video-qxl-nodevice", QEMU_CAPS_DEVICE_QXL);
1941
    DO_TEST("video-qxl-device",
1942
            QEMU_CAPS_DEVICE_QXL,
1943
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1944
    DO_TEST("video-qxl-device-vgamem",
1945
            QEMU_CAPS_DEVICE_QXL,
1946
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1947
            QEMU_CAPS_QXL_VGAMEM);
1948
    DO_TEST_CAPS_LATEST("video-qxl-device-vram64");
1949
    DO_TEST("video-qxl-sec-device",
1950
            QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1951
    DO_TEST("video-qxl-sec-device-vgamem",
1952 1953
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1954
            QEMU_CAPS_QXL_VGAMEM);
1955
    DO_TEST_CAPS_LATEST("video-qxl-sec-device-vram64");
1956 1957 1958
    DO_TEST("video-qxl-heads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
1959
            QEMU_CAPS_QXL_MAX_OUTPUTS);
1960 1961 1962
    DO_TEST("video-vga-qxl-heads",
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_QXL_MAX_OUTPUTS);
1963 1964 1965
    DO_TEST("video-qxl-noheads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
1966
            QEMU_CAPS_QXL_MAX_OUTPUTS);
M
Marc-André Lureau 已提交
1967
    DO_TEST("video-virtio-gpu-device",
1968
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
M
Marc-André Lureau 已提交
1969
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1970
    DO_TEST("video-virtio-gpu-virgl",
1971
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
1972
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
1973
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1974 1975
    DO_TEST("video-virtio-gpu-spice-gl",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
1976
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
1977 1978
            QEMU_CAPS_SPICE,
            QEMU_CAPS_SPICE_GL,
1979
            QEMU_CAPS_SPICE_RENDERNODE,
1980
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1981 1982 1983 1984 1985
    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);
1986 1987 1988
    DO_TEST("video-virtio-gpu-secondary",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1989 1990 1991
    DO_TEST("video-virtio-vga",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIRTIO_VGA,
1992 1993
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_GPU_MAX_OUTPUTS);
1994 1995 1996
    DO_TEST("video-none-device",
            QEMU_CAPS_VNC);
    DO_TEST_PARSE_ERROR("video-invalid-multiple-devices", NONE);
1997

1998 1999
    DO_TEST("virtio-rng-default",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2000
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2001 2002
    DO_TEST("virtio-rng-random",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2003
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2004 2005
    DO_TEST("virtio-rng-egd",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2006
            QEMU_CAPS_OBJECT_RNG_EGD);
J
Ján Tomko 已提交
2007 2008
    DO_TEST_CAPS_VER("virtio-rng-egd-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("virtio-rng-egd-unix");
2009 2010 2011 2012
    DO_TEST("virtio-rng-multiple",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2013
    DO_TEST_PARSE_ERROR("virtio-rng-egd-crash",
2014 2015
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD);
2016
    DO_TEST("virtio-rng-ccw",
2017
            QEMU_CAPS_CCW,
2018 2019
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2020
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2021

2022
    DO_TEST("s390-allow-bogus-usb-none",
2023 2024 2025
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2026
    DO_TEST("s390-allow-bogus-usb-controller",
2027 2028 2029
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2030

2031
    DO_TEST("s390-panic-no-address",
2032
            QEMU_CAPS_CCW,
2033
            QEMU_CAPS_VIRTIO_S390);
2034
    DO_TEST_FAILURE("s390-panic-address",
2035
            QEMU_CAPS_CCW,
2036
            QEMU_CAPS_VIRTIO_S390);
2037
    DO_TEST("s390-panic-missing",
2038
            QEMU_CAPS_CCW,
2039
            QEMU_CAPS_VIRTIO_S390);
2040
    DO_TEST_PARSE_ERROR("s390-no-parallel",
2041
            QEMU_CAPS_CCW,
2042
            QEMU_CAPS_VIRTIO_S390);
2043
    DO_TEST("s390-serial",
2044
            QEMU_CAPS_CCW,
2045 2046 2047
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
    DO_TEST("s390-serial-2",
2048
            QEMU_CAPS_CCW,
2049 2050 2051 2052
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE,
            QEMU_CAPS_DEVICE_SCLPLMCONSOLE);
    DO_TEST("s390-serial-console",
2053
            QEMU_CAPS_CCW,
2054 2055
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
2056

2057
    DO_TEST("ppc-dtb",
J
Ján Tomko 已提交
2058
            QEMU_CAPS_KVM);
2059 2060
    DO_TEST("ppce500-serial",
            QEMU_CAPS_KVM);
O
Olivia Yin 已提交
2061

2062
    DO_TEST("tpm-passthrough",
2063
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
2064 2065
    DO_TEST("tpm-passthrough-crb",
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_CRB);
2066
    DO_TEST_PARSE_ERROR("tpm-no-backend-invalid",
2067
                        QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
2068
    DO_TEST_CAPS_LATEST("tpm-emulator");
2069
    DO_TEST_CAPS_LATEST("tpm-emulator-tpm2");
2070

2071 2072 2073 2074
    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);
2075

2076 2077 2078 2079 2080 2081
    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,
2082
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
2083 2084
    DO_TEST("pci-autoadd-idx",
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2085 2086
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("pci-autofill-addr", QEMU_CAPS_DEVICE_CIRRUS_VGA);
2087
    DO_TEST("pci-many",
2088
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
2089
    DO_TEST("pci-bridge-many-disks",
2090
            QEMU_CAPS_DEVICE_PCI_BRIDGE);
L
Laine Stump 已提交
2091
    DO_TEST("pcie-root",
2092 2093 2094 2095
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL);
2096
    DO_TEST("q35",
2097
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2098
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2099
            QEMU_CAPS_DEVICE_IOH3420,
2100
            QEMU_CAPS_ICH9_AHCI,
2101
            QEMU_CAPS_ICH9_USB_EHCI1,
2102
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2103
            QEMU_CAPS_DEVICE_QXL);
2104 2105 2106 2107 2108 2109 2110 2111
    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);
2112
    DO_TEST("q35-pm-disable",
2113
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2114
            QEMU_CAPS_DEVICE_IOH3420,
2115 2116 2117 2118
            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",
2119
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2120
            QEMU_CAPS_DEVICE_IOH3420,
2121 2122
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4);
2123
    DO_TEST("q35-usb2",
2124
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2125
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2126
            QEMU_CAPS_DEVICE_IOH3420,
2127
            QEMU_CAPS_ICH9_AHCI,
2128
            QEMU_CAPS_ICH9_USB_EHCI1,
2129
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2130
            QEMU_CAPS_DEVICE_QXL);
2131
    DO_TEST("q35-usb2-multi",
2132
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2133
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2134
            QEMU_CAPS_DEVICE_IOH3420,
2135
            QEMU_CAPS_ICH9_AHCI,
2136
            QEMU_CAPS_ICH9_USB_EHCI1,
2137
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2138
            QEMU_CAPS_DEVICE_QXL);
2139
    DO_TEST("q35-usb2-reorder",
2140
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2141
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2142
            QEMU_CAPS_DEVICE_IOH3420,
2143
            QEMU_CAPS_ICH9_AHCI,
2144
            QEMU_CAPS_ICH9_USB_EHCI1,
2145
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2146
            QEMU_CAPS_DEVICE_QXL);
2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164
    /* 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,
2165
            QEMU_CAPS_NEC_USB_XHCI,
2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178
            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,
2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198
            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,
2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212
            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,
2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231
            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,
2232 2233 2234 2235 2236
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
2237 2238 2239 2240 2241 2242 2243 2244
            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,
2245
            QEMU_CAPS_NEC_USB_XHCI,
2246
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2247 2248
    DO_TEST("q35-virt-manager-basic",
            QEMU_CAPS_KVM,
2249
            QEMU_CAPS_MACHINE_VMPORT_OPT,
2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273
            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,
2274
            QEMU_CAPS_DEVICE_ISA_SERIAL,
2275
            QEMU_CAPS_USB_REDIR);
2276 2277

    /* Test automatic and manual setting of pcie-root-port attributes */
2278 2279
    DO_TEST("pcie-root-port",
            QEMU_CAPS_DEVICE_IOH3420,
2280
            QEMU_CAPS_ICH9_AHCI,
2281
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2282
            QEMU_CAPS_DEVICE_QXL);
2283 2284 2285 2286 2287 2288

    /* 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,
2289
            QEMU_CAPS_DEVICE_IOH3420);
2290
    DO_TEST("pcie-root-port-model-ioh3420",
2291
            QEMU_CAPS_DEVICE_IOH3420);
2292

2293 2294 2295 2296 2297 2298 2299
    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,
2300
            QEMU_CAPS_ICH9_USB_EHCI1,
2301
            QEMU_CAPS_NEC_USB_XHCI);
2302 2303 2304 2305 2306 2307 2308
    /* 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);
2309

2310
    DO_TEST_PARSE_ERROR("q35-wrong-root",
2311
            QEMU_CAPS_DEVICE_IOH3420,
2312
            QEMU_CAPS_ICH9_AHCI,
2313
            QEMU_CAPS_ICH9_USB_EHCI1,
2314
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2315
            QEMU_CAPS_DEVICE_QXL);
2316
    DO_TEST_PARSE_ERROR("440fx-wrong-root", NONE);
2317
    DO_TEST_PARSE_ERROR("440fx-ide-address-conflict", NONE);
2318

2319
    DO_TEST_PARSE_ERROR("pcie-root-port-too-many",
2320
            QEMU_CAPS_DEVICE_IOH3420,
2321
            QEMU_CAPS_ICH9_AHCI,
2322
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2323
            QEMU_CAPS_DEVICE_QXL);
2324

2325 2326 2327
    DO_TEST("pcie-switch-upstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
2328
            QEMU_CAPS_ICH9_AHCI,
2329
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2330
            QEMU_CAPS_DEVICE_QXL);
2331 2332 2333 2334
    DO_TEST("pcie-switch-downstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
2335
            QEMU_CAPS_ICH9_AHCI,
2336
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2337
            QEMU_CAPS_DEVICE_QXL);
2338

2339 2340 2341 2342 2343 2344
    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);
2345 2346
    DO_TEST_PARSE_ERROR("pci-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_PXB);
2347

2348 2349 2350 2351 2352 2353 2354 2355 2356 2357
    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);
2358 2359 2360
    DO_TEST_PARSE_ERROR("pcie-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_IOH3420,
                        QEMU_CAPS_DEVICE_PXB_PCIE);
2361

2362
    DO_TEST("hostdev-scsi-lsi",
2363 2364
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2365
    DO_TEST("hostdev-scsi-virtio-scsi",
2366 2367
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2368
    DO_TEST("hostdev-scsi-readonly",
2369 2370
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2371
    DO_TEST("hostdev-scsi-virtio-scsi",
2372 2373
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2374
    DO_TEST("hostdev-scsi-lsi-iscsi",
2375 2376
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2377
    DO_TEST("hostdev-scsi-lsi-iscsi-auth",
2378 2379
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2380
    DO_TEST("hostdev-scsi-virtio-iscsi",
2381 2382
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2383
    DO_TEST("hostdev-scsi-virtio-iscsi-auth",
2384 2385
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2386
    DO_TEST("disk-hostdev-scsi-virtio-iscsi-auth-AES",
2387 2388 2389
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_OBJECT_SECRET,
2390
            QEMU_CAPS_ISCSI_PASSWORD_SECRET);
2391 2392
    DO_TEST("hostdev-scsi-vhost-scsi-ccw",
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_VHOST_SCSI,
2393
            QEMU_CAPS_CCW);
2394
    DO_TEST("hostdev-scsi-vhost-scsi-pci",
2395 2396
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VHOST_SCSI);
2397 2398 2399 2400 2401
    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);
2402

2403 2404
    DO_TEST_CAPS_VER("mlock-on", "3.0.0");
    DO_TEST_CAPS_VER("mlock-off", "3.0.0");
2405 2406
    DO_TEST_CAPS_LATEST("mlock-on");
    DO_TEST_CAPS_LATEST("mlock-off");
2407

2408 2409 2410 2411
    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);
2412

2413
    DO_TEST("hotplug-base",
2414
            QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_SCSI);
2415

2416 2417
    DO_TEST("pcihole64", QEMU_CAPS_I440FX_PCI_HOLE64_SIZE);
    DO_TEST_FAILURE("pcihole64-none", NONE);
2418
    DO_TEST("pcihole64-q35",
2419
            QEMU_CAPS_DEVICE_IOH3420,
2420
            QEMU_CAPS_ICH9_AHCI,
2421
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2422
            QEMU_CAPS_DEVICE_QXL,
2423 2424
            QEMU_CAPS_Q35_PCI_HOLE64_SIZE);

J
Ján Tomko 已提交
2425 2426
    DO_TEST("arm-vexpressa9-nodevs", NONE);
    DO_TEST("arm-vexpressa9-basic", NONE);
2427
    DO_TEST("arm-vexpressa9-virtio",
2428
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2429
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2430
    DO_TEST("arm-virt-virtio",
2431
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2432
            QEMU_CAPS_DEVICE_PL011,
2433
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2434

2435
    DO_TEST("aarch64-virt-virtio",
2436
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2437
            QEMU_CAPS_DEVICE_PL011,
2438
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2439 2440 2441 2442 2443 2444

    /* 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",
2445
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
2446 2447 2448
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2449
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2450
            QEMU_CAPS_DEVICE_IOH3420,
2451
            QEMU_CAPS_DEVICE_PL011,
2452
            QEMU_CAPS_VIRTIO_SCSI);
2453
    DO_TEST("aarch64-virt-2.6-virtio-pci-default",
2454
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2455 2456
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2457
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2458
            QEMU_CAPS_DEVICE_PL011,
2459
            QEMU_CAPS_DEVICE_IOH3420);
2460 2461 2462
    /* Example of using virtio-pci with no explicit PCI controller
       but with manual PCI addresses */
    DO_TEST("aarch64-virtio-pci-manual-addresses",
2463
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2464 2465
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2466 2467 2468
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_VIRTIO_SCSI);
2469
    DO_TEST("aarch64-video-virtio-gpu-pci",
2470
            QEMU_CAPS_OBJECT_GPEX,
2471
            QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_IOH3420,
2472
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2473
            QEMU_CAPS_DEVICE_VIRTIO_GPU);
2474
    DO_TEST("aarch64-video-default",
2475
            QEMU_CAPS_OBJECT_GPEX,
2476
            QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_IOH3420,
2477
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2478 2479
            QEMU_CAPS_DEVICE_VIRTIO_GPU, QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_VNC);
2480
    DO_TEST("aarch64-aavmf-virtio-mmio",
2481
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2482
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2483 2484
    DO_TEST("aarch64-virt-default-nic",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
2485
    qemuTestSetHostArch(driver.caps, VIR_ARCH_AARCH64);
2486
    DO_TEST("aarch64-cpu-passthrough",
2487
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2488
            QEMU_CAPS_KVM);
2489
    DO_TEST_GIC("aarch64-gic-none", GIC_NONE,
2490
            QEMU_CAPS_KVM,
2491
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2492
    DO_TEST_GIC("aarch64-gic-none-v2", GIC_V2,
2493
            QEMU_CAPS_KVM,
2494 2495
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-none-v3", GIC_V3,
2496
            QEMU_CAPS_KVM,
2497
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2498
    DO_TEST_GIC("aarch64-gic-none-both", GIC_BOTH,
2499
            QEMU_CAPS_KVM,
2500
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2501 2502
    DO_TEST_GIC("aarch64-gic-none-tcg", GIC_BOTH,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2503
    DO_TEST_GIC("aarch64-gic-default", GIC_NONE,
2504
            QEMU_CAPS_KVM,
2505
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
A
Andrea Bolognani 已提交
2506
    DO_TEST_GIC("aarch64-gic-default-v2", GIC_V2,
2507
            QEMU_CAPS_KVM,
2508
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
A
Andrea Bolognani 已提交
2509
    DO_TEST_GIC("aarch64-gic-default-v3", GIC_V3,
2510
            QEMU_CAPS_KVM,
2511
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
A
Andrea Bolognani 已提交
2512
    DO_TEST_GIC("aarch64-gic-default-both", GIC_BOTH,
2513
            QEMU_CAPS_KVM,
2514 2515
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v2", GIC_NONE,
2516
            QEMU_CAPS_KVM,
2517 2518
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v2", GIC_V2,
2519
            QEMU_CAPS_KVM,
2520 2521
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v2", GIC_V3,
2522
            QEMU_CAPS_KVM,
2523
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2524
    DO_TEST_GIC("aarch64-gic-v2", GIC_BOTH,
2525
            QEMU_CAPS_KVM,
2526
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2527
    DO_TEST_FAILURE("aarch64-gic-v3",
2528
            QEMU_CAPS_KVM, NONE);
2529
    DO_TEST_GIC("aarch64-gic-v3", GIC_NONE,
2530
            QEMU_CAPS_KVM,
2531 2532
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v3", GIC_V2,
2533
            QEMU_CAPS_KVM,
2534 2535
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v3", GIC_V3,
2536
            QEMU_CAPS_KVM,
2537 2538
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v3", GIC_BOTH,
2539
            QEMU_CAPS_KVM,
2540
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2541
    DO_TEST_FAILURE("aarch64-gic-host",
2542
            QEMU_CAPS_KVM, NONE);
2543
    DO_TEST_GIC("aarch64-gic-host", GIC_NONE,
2544
            QEMU_CAPS_KVM,
2545 2546
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-host", GIC_V2,
2547
            QEMU_CAPS_KVM,
2548 2549
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-host", GIC_V3,
2550
            QEMU_CAPS_KVM,
2551 2552
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-host", GIC_BOTH,
2553
            QEMU_CAPS_KVM,
2554
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2555
    DO_TEST_PARSE_ERROR("aarch64-gic-invalid",
2556
            QEMU_CAPS_KVM,
2557
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2558
    DO_TEST_PARSE_ERROR("aarch64-gic-not-virt",
2559
                        QEMU_CAPS_KVM,
2560 2561
                        QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_PARSE_ERROR("aarch64-gic-not-arm",
2562
                        QEMU_CAPS_KVM,
2563
                        QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2564
    DO_TEST("aarch64-kvm-32-on-64",
2565
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2566
            QEMU_CAPS_DEVICE_PL011,
A
Andrea Bolognani 已提交
2567
            QEMU_CAPS_KVM, QEMU_CAPS_CPU_AARCH64_OFF);
2568
    DO_TEST_FAILURE("aarch64-kvm-32-on-64",
2569
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2570
            QEMU_CAPS_KVM);
2571 2572 2573 2574 2575 2576 2577
    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);
2578 2579 2580 2581
    DO_TEST("aarch64-traditional-pci",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2582
            QEMU_CAPS_DEVICE_PCIE_PCI_BRIDGE,
2583 2584
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_SERIAL);
2585 2586 2587 2588 2589 2590 2591

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

2592
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);
2593

2594
    DO_TEST("kvm-pit-delay", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2595
    DO_TEST("kvm-pit-discard", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2596

2597 2598 2599 2600
    DO_TEST("panic",
            QEMU_CAPS_DEVICE_PANIC);
    DO_TEST("panic-double",
            QEMU_CAPS_DEVICE_PANIC);
H
Hu Tao 已提交
2601

2602 2603
    DO_TEST("panic-no-address",
            QEMU_CAPS_DEVICE_PANIC);
2604

2605 2606
    DO_TEST("fips-enabled", QEMU_CAPS_ENABLE_FIPS);

J
Ján Tomko 已提交
2607
    DO_TEST("shmem", QEMU_CAPS_DEVICE_IVSHMEM);
2608 2609 2610
    DO_TEST("shmem-plain-doorbell", QEMU_CAPS_DEVICE_IVSHMEM,
            QEMU_CAPS_DEVICE_IVSHMEM_PLAIN,
            QEMU_CAPS_DEVICE_IVSHMEM_DOORBELL);
2611
    DO_TEST_FAILURE("shmem", NONE);
J
Ján Tomko 已提交
2612
    DO_TEST_FAILURE("shmem-invalid-size",
2613
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2614
    DO_TEST_FAILURE("shmem-invalid-address",
2615
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2616
    DO_TEST_FAILURE("shmem-small-size",
2617
                    QEMU_CAPS_DEVICE_IVSHMEM);
2618
    DO_TEST_PARSE_ERROR("shmem-msi-only", NONE);
A
Andrea Bolognani 已提交
2619
    DO_TEST("cpu-host-passthrough-features", QEMU_CAPS_KVM);
2620

2621
    DO_TEST_FAILURE("memory-align-fail", NONE);
2622
    DO_TEST_FAILURE("memory-hotplug-nonuma", QEMU_CAPS_DEVICE_PC_DIMM);
M
Michal Privoznik 已提交
2623
    DO_TEST("memory-hotplug", NONE);
2624
    DO_TEST("memory-hotplug", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA);
2625
    DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2626
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2627
    DO_TEST("memory-hotplug-dimm-addr", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2628
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2629
    DO_TEST("memory-hotplug-ppc64-nonuma", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2630
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2631
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2632 2633 2634
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm");
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-access");
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-label");
2635
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-align");
2636
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-pmem");
2637
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-readonly");
2638

2639
    DO_TEST("machine-aeskeywrap-on-caps",
2640
            QEMU_CAPS_AES_KEY_WRAP,
2641
            QEMU_CAPS_DEA_KEY_WRAP,
2642
            QEMU_CAPS_VIRTIO_SCSI,
2643
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2644
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps",
2645
                    QEMU_CAPS_VIRTIO_SCSI,
2646
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2647 2648 2649
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps", NONE);

    DO_TEST("machine-aeskeywrap-on-cap",
2650
            QEMU_CAPS_AES_KEY_WRAP,
2651
            QEMU_CAPS_VIRTIO_SCSI,
2652
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2653
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap",
2654
                    QEMU_CAPS_VIRTIO_SCSI,
2655
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2656 2657 2658
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap", NONE);

    DO_TEST("machine-aeskeywrap-off-caps",
2659
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2660
            QEMU_CAPS_VIRTIO_SCSI,
2661
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2662
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps",
2663
                    QEMU_CAPS_VIRTIO_SCSI,
2664
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2665 2666 2667
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", NONE);

    DO_TEST("machine-aeskeywrap-off-cap",
2668
            QEMU_CAPS_AES_KEY_WRAP,
2669
            QEMU_CAPS_VIRTIO_SCSI,
2670
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2671
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap",
2672
                    QEMU_CAPS_VIRTIO_SCSI,
2673
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2674 2675 2676
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap", NONE);

    DO_TEST("machine-deakeywrap-on-caps",
2677
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2678
            QEMU_CAPS_VIRTIO_SCSI,
2679
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2680
    DO_TEST_FAILURE("machine-deakeywrap-on-caps",
2681
                    QEMU_CAPS_VIRTIO_SCSI,
2682
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2683 2684 2685
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", NONE);

    DO_TEST("machine-deakeywrap-on-cap",
2686
            QEMU_CAPS_DEA_KEY_WRAP,
2687
            QEMU_CAPS_VIRTIO_SCSI,
2688
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2689
    DO_TEST_FAILURE("machine-deakeywrap-on-cap",
2690
                    QEMU_CAPS_VIRTIO_SCSI,
2691
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2692 2693 2694
    DO_TEST_FAILURE("machine-deakeywrap-on-cap", NONE);

    DO_TEST("machine-deakeywrap-off-caps",
2695
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2696
            QEMU_CAPS_VIRTIO_SCSI,
2697
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2698
    DO_TEST_FAILURE("machine-deakeywrap-off-caps",
2699
                    QEMU_CAPS_VIRTIO_SCSI,
2700
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2701 2702 2703
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", NONE);

    DO_TEST("machine-deakeywrap-off-cap",
2704
            QEMU_CAPS_DEA_KEY_WRAP,
2705
            QEMU_CAPS_VIRTIO_SCSI,
2706
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2707
    DO_TEST_FAILURE("machine-deakeywrap-off-cap",
2708
                    QEMU_CAPS_VIRTIO_SCSI,
2709
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2710 2711 2712
    DO_TEST_FAILURE("machine-deakeywrap-off-cap", NONE);

    DO_TEST("machine-keywrap-none-caps",
2713
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2714
            QEMU_CAPS_VIRTIO_SCSI,
2715
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2716
    DO_TEST("machine-keywrap-none",
2717
            QEMU_CAPS_VIRTIO_SCSI,
2718
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2719

2720
    DO_TEST("machine-loadparm-s390",
2721
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390,
2722
            QEMU_CAPS_LOADPARM);
2723
    DO_TEST("machine-loadparm-net-s390",
2724
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390,
2725
            QEMU_CAPS_LOADPARM);
2726
    DO_TEST("machine-loadparm-multiple-disks-nets-s390",
2727
            QEMU_CAPS_CCW,
2728
            QEMU_CAPS_VIRTIO_S390,
2729 2730
            QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-char-invalid",
2731
                        QEMU_CAPS_CCW,
2732
                        QEMU_CAPS_VIRTIO_S390,
2733 2734
                        QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-len-invalid",
2735
                        QEMU_CAPS_CCW,
2736
                        QEMU_CAPS_VIRTIO_S390,
2737 2738
                        QEMU_CAPS_LOADPARM);

J
Jiri Denemark 已提交
2739 2740 2741 2742 2743 2744 2745
    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);

2746
    DO_TEST("virtio-input", QEMU_CAPS_VIRTIO_KEYBOARD,
2747
            QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET);
2748
    DO_TEST("virtio-input-passthrough", QEMU_CAPS_VIRTIO_INPUT_HOST);
2749

2750
    DO_TEST("ppc64-usb-controller",
2751
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2752
            QEMU_CAPS_PCI_OHCI);
2753
    DO_TEST("ppc64-usb-controller-legacy",
2754
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2755
            QEMU_CAPS_PIIX3_USB_UHCI);
2756
    DO_TEST_FULL("ppc64-usb-controller-qemu-xhci",
2757
                 ARG_PARSEFLAGS, VIR_DOMAIN_DEF_PARSE_ABI_UPDATE,
2758
                 ARG_QEMU_CAPS,
2759
                 QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2760 2761 2762 2763 2764 2765 2766
                 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);
2767

2768 2769 2770 2771
    DO_TEST("aarch64-usb-controller-nec-xhci",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_NEC_USB_XHCI);

2772 2773 2774
    /* 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 */
2775 2776 2777 2778
    DO_TEST_FULL("missing-machine",
                 ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE,
                 ARG_PARSEFLAGS, VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE,
                 ARG_QEMU_CAPS, NONE);
2779

2780 2781 2782
    DO_TEST("name-escape",
            QEMU_CAPS_NAME_DEBUG_THREADS,
            QEMU_CAPS_OBJECT_SECRET,
2783 2784
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_GROUP,
2785 2786 2787 2788
            QEMU_CAPS_VNC,
            QEMU_CAPS_NAME_GUEST,
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_SPICE,
2789
            QEMU_CAPS_SPICE_UNIX,
2790 2791 2792 2793 2794
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_SPICE_GL,
            QEMU_CAPS_SPICE_RENDERNODE,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2795
            QEMU_CAPS_DEVICE_ISA_SERIAL,
2796
            QEMU_CAPS_CHARDEV_FILE_APPEND,
2797
            QEMU_CAPS_CCID_EMULATED,
2798
            QEMU_CAPS_VIRTIO_SCSI);
M
Marc-André Lureau 已提交
2799 2800
    DO_TEST("debug-threads", QEMU_CAPS_NAME_DEBUG_THREADS);

2801
    DO_TEST("master-key", QEMU_CAPS_OBJECT_SECRET);
2802
    DO_TEST("usb-long-port-path",
J
Ján Tomko 已提交
2803
            QEMU_CAPS_USB_HUB);
2804
    DO_TEST_PARSE_ERROR("usb-too-long-port-path-invalid",
2805
                        QEMU_CAPS_USB_HUB);
2806

2807
    DO_TEST("acpi-table", NONE);
2808
    DO_TEST("intel-iommu",
2809
            QEMU_CAPS_DEVICE_INTEL_IOMMU);
2810 2811
    DO_TEST("intel-iommu-machine",
            QEMU_CAPS_MACHINE_IOMMU);
J
Ján Tomko 已提交
2812
    DO_TEST("intel-iommu-caching-mode",
2813 2814
            QEMU_CAPS_MACHINE_KERNEL_IRQCHIP,
            QEMU_CAPS_MACHINE_KERNEL_IRQCHIP_SPLIT,
2815 2816 2817 2818 2819 2820 2821 2822
            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);
2823 2824 2825 2826 2827 2828
    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);
2829 2830 2831 2832 2833 2834
    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);
2835

2836
    DO_TEST("cpu-hotplug-startup", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);
2837 2838 2839
    DO_TEST_PARSE_ERROR("cpu-hotplug-granularity",
                        QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);

2840 2841 2842 2843 2844 2845 2846
    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,
2847 2848 2849
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_PCI_IOMMU_PLATFORM,
            QEMU_CAPS_VIRTIO_PCI_ATS);
2850

J
Ján Tomko 已提交
2851
    DO_TEST("fd-memory-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
2852
            QEMU_CAPS_KVM);
J
Ján Tomko 已提交
2853
    DO_TEST("fd-memory-numa-topology2", QEMU_CAPS_OBJECT_MEMORY_FILE,
2854
            QEMU_CAPS_KVM);
J
Ján Tomko 已提交
2855
    DO_TEST("fd-memory-numa-topology3", QEMU_CAPS_OBJECT_MEMORY_FILE,
2856 2857
            QEMU_CAPS_KVM);

J
Ján Tomko 已提交
2858
    DO_TEST("fd-memory-no-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
2859 2860
            QEMU_CAPS_KVM);

M
Marc-André Lureau 已提交
2861
    DO_TEST_CAPS_LATEST("memfd-memory-numa");
2862
    DO_TEST_CAPS_LATEST("memfd-memory-default-hugepage");
M
Marc-André Lureau 已提交
2863

2864 2865 2866 2867 2868 2869 2870 2871
    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);

2872 2873 2874 2875 2876 2877 2878 2879 2880
    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 已提交
2881
    DO_TEST("vmcoreinfo", QEMU_CAPS_DEVICE_VMCOREINFO);
2882

2883 2884 2885
    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,
2886
            QEMU_CAPS_DEVICE_ISA_SERIAL,
2887
            QEMU_CAPS_HDA_DUPLEX,
2888 2889
            QEMU_CAPS_CCID_EMULATED,
            QEMU_CAPS_QCOW2_LUKS, QEMU_CAPS_OBJECT_SECRET);
2890
    DO_TEST("user-aliases2", QEMU_CAPS_DEVICE_IOH3420, QEMU_CAPS_ICH9_AHCI);
2891 2892
    DO_TEST("user-aliases-usb", QEMU_CAPS_KVM,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4,
2893
            QEMU_CAPS_ICH9_USB_EHCI1);
2894

2895
    DO_TEST_CAPS_VER("disk-virtio-scsi-reservations", "2.12.0");
2896
    DO_TEST_CAPS_LATEST("disk-virtio-scsi-reservations");
2897

2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922
    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);

2923
    DO_TEST("video-virtio-gpu-ccw", QEMU_CAPS_CCW,
2924 2925 2926 2927 2928 2929
            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);

2930
    DO_TEST("input-virtio-ccw", QEMU_CAPS_CCW,
2931 2932 2933 2934 2935 2936 2937
            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);

2938 2939
    DO_TEST_CAPS_LATEST("vhost-vsock");
    DO_TEST_CAPS_LATEST("vhost-vsock-auto");
2940 2941
    DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw", "s390x");
    DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw-auto", "s390x");
2942

2943
    DO_TEST_CAPS_VER("launch-security-sev", "2.12.0");
2944

L
Lubomir Rintel 已提交
2945 2946
    DO_TEST("riscv64-virt",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
2947 2948
    DO_TEST("riscv64-virt-pci",
            QEMU_CAPS_OBJECT_GPEX);
L
Lubomir Rintel 已提交
2949

2950 2951 2952 2953 2954
    /* Older version checks disable-legacy usage */
    DO_TEST_CAPS_VER("virtio-transitional", "3.1.0");
    DO_TEST_CAPS_VER("virtio-non-transitional", "3.1.0");
    DO_TEST_CAPS_LATEST("virtio-transitional");
    DO_TEST_CAPS_LATEST("virtio-non-transitional");
2955 2956 2957 2958
    DO_TEST_PARSE_ERROR("virtio-transitional-not-supported",
                        QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
                        QEMU_CAPS_DEVICE_PCI_BRIDGE,
                        QEMU_CAPS_DEVICE_IOH3420);
2959

2960 2961 2962 2963 2964 2965 2966 2967
    /* 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");

2968 2969 2970
    /* Simple guests with graphics for various architectures */
    DO_TEST_CAPS_ARCH_LATEST("aarch64-virt-graphics", "aarch64");
    DO_TEST_CAPS_ARCH_LATEST("ppc64-pseries-graphics", "ppc64");
2971
    DO_TEST_CAPS_ARCH_LATEST("s390x-ccw-graphics", "s390x");
2972 2973 2974
    DO_TEST_CAPS_ARCH_LATEST("x86_64-pc-graphics", "x86_64");
    DO_TEST_CAPS_ARCH_LATEST("x86_64-q35-graphics", "x86_64");

2975 2976 2977 2978 2979
    DO_TEST_CAPS_LATEST("os-firmware-bios");
    DO_TEST_CAPS_LATEST("os-firmware-efi");
    DO_TEST_CAPS_LATEST("os-firmware-efi-secboot");
    DO_TEST_CAPS_ARCH_LATEST("aarch64-os-firmware-efi", "aarch64");

A
Andrea Bolognani 已提交
2980 2981 2982
    if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL)
        virFileDeleteTree(fakerootdir);

2983
    VIR_FREE(driver.config->nbdTLSx509certdir);
2984
    qemuTestDriverFree(&driver);
A
Andrea Bolognani 已提交
2985
    VIR_FREE(fakerootdir);
2986
    virHashFree(capslatest);
2987
    virFileWrapperClearPrefixes();
2988

2989
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
2990 2991
}

2992
VIR_TEST_MAIN_PRELOAD(mymain,
A
Andrea Bolognani 已提交
2993 2994 2995 2996
                      abs_builddir "/.libs/qemuxml2argvmock.so",
                      abs_builddir "/.libs/virrandommock.so",
                      abs_builddir "/.libs/qemucpumock.so",
                      abs_builddir "/.libs/virpcimock.so")
2997

2998 2999
#else

3000 3001 3002 3003
int main(void)
{
    return EXIT_AM_SKIP;
}
3004 3005

#endif /* WITH_QEMU */