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

3
#include <stdio.h>
4 5
#include <stdlib.h>
#include <unistd.h>
6 7 8 9 10
#include <string.h>

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

11 12
#include "testutils.h"

13 14
#ifdef WITH_QEMU

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

30
# include "testutilsqemu.h"
31

32 33
# define VIR_FROM_THIS VIR_FROM_QEMU

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

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

static virSecretPtr
fakeSecretLookupByUsage(virConnectPtr conn,
                        int usageType ATTRIBUTE_UNUSED,
                        const char *usageID)
{
55
    unsigned char uuid[VIR_UUID_BUFLEN];
56 57
    if (STRNEQ(usageID, "mycluster_myname"))
        return NULL;
58

59 60 61
    if (virUUIDGenerate(uuid) < 0)
        return NULL;

62
    return virGetSecret(conn, uuid, usageType, usageID);
63 64 65
}

static virSecretDriver fakeSecretDriver = {
66 67 68 69 70 71 72 73 74
    .connectNumOfSecrets = NULL,
    .connectListSecrets = NULL,
    .secretLookupByUUID = NULL,
    .secretLookupByUsage = fakeSecretLookupByUsage,
    .secretDefineXML = NULL,
    .secretGetXMLDesc = NULL,
    .secretSetValue = NULL,
    .secretGetValue = fakeSecretGetValue,
    .secretUndefine = NULL,
75 76
};

77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103

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

104
 cleanup:
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
    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);

141
 cleanup:
142 143 144
    virStringFreeList(volinfo);
    return ret;

145
 fallback:
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196
    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;

197
    if (virTestLoadFile(xmlpath, &xmlbuf) < 0) {
198 199 200 201 202 203
        virReportError(VIR_ERR_INTERNAL_ERROR,
                       "failed to load XML file '%s'",
                       xmlpath);
        goto cleanup;
    }

204
 cleanup:
205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221
    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
222
 * qemu command line.
223 224 225
 *
 * There are a few "magic" values to pass to these functions:
 *
226 227
 * 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
228 229 230
 * 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
231
 * pattern VOLUME_TYPE+VOLUME_PATH can be used to simulate a volume in a pool.
232 233 234 235 236 237 238 239 240 241 242 243
 * 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,
};

244
typedef enum {
245 246 247 248
    FLAG_EXPECT_FAILURE     = 1 << 0,
    FLAG_EXPECT_PARSE_ERROR = 1 << 1,
    FLAG_JSON               = 1 << 2,
    FLAG_FIPS               = 1 << 3,
249 250
} virQemuXML2ArgvTestFlags;

251
static int testCompareXMLToArgvFiles(const char *xml,
E
Eric Blake 已提交
252
                                     const char *cmdline,
253
                                     virQEMUCapsPtr extraFlags,
254
                                     const char *migrateURI,
255 256
                                     virQemuXML2ArgvTestFlags flags,
                                     unsigned int parseFlags)
257
{
258
    char *actualargv = NULL;
E
Eric Blake 已提交
259
    int ret = -1;
260
    virDomainObjPtr vm = NULL;
261
    virDomainChrSourceDef monitor_chr;
262
    virConnectPtr conn;
J
Jiri Denemark 已提交
263
    char *log = NULL;
E
Eric Blake 已提交
264
    virCommandPtr cmd = NULL;
265
    size_t i;
266
    qemuDomainObjPrivatePtr priv = NULL;
267 268

    if (!(conn = virGetConnect()))
269
        goto out;
270
    conn->secretDriver = &fakeSecretDriver;
271
    conn->storageDriver = &fakeStorageDriver;
272

273 274 275 276 277 278
    if (!(vm = virDomainObjNew(driver.xmlopt)))
        goto out;

    if (!(vm->def = virDomainDefParseFile(xml, driver.caps, driver.xmlopt,
                                          (VIR_DOMAIN_DEF_PARSE_INACTIVE |
                                           parseFlags)))) {
P
Pavel Hrdina 已提交
279
        if (flags & FLAG_EXPECT_PARSE_ERROR)
280
            goto ok;
281
        goto out;
282
    }
283
    priv = vm->privateData;
284

P
Pavel Hrdina 已提交
285 286 287
    if (virBitmapParse("0-3", '\0', &priv->autoNodeset, 4) < 0)
        goto out;

288
    if (!virDomainDefCheckABIStability(vm->def, vm->def)) {
289
        VIR_TEST_DEBUG("ABI stability check failed on %s", xml);
290 291 292
        goto out;
    }

293
    vm->def->id = -1;
294

295

296
    memset(&monitor_chr, 0, sizeof(monitor_chr));
297
    if (qemuProcessPrepareMonitorChr(&monitor_chr, priv->libDir) < 0)
298
        goto out;
299

300 301 302
    virQEMUCapsSetList(extraFlags,
                       QEMU_CAPS_NO_ACPI,
                       QEMU_CAPS_LAST);
303

304 305 306 307
    if (STREQ(vm->def->os.machine, "pc") &&
        STREQ(vm->def->emulator, "/usr/bin/qemu-system-x86_64")) {
        VIR_FREE(vm->def->os.machine);
        if (VIR_STRDUP(vm->def->os.machine, "pc-0.11") < 0)
308 309
            goto out;
    }
310

311
    virQEMUCapsFilterByMachineType(extraFlags, vm->def->os.machine);
312

313
    log = virTestLogContentAndReset();
314
    VIR_FREE(log);
315
    virResetLastError();
J
Jiri Denemark 已提交
316

317 318
    if (vm->def->os.arch == VIR_ARCH_X86_64 ||
        vm->def->os.arch == VIR_ARCH_I686) {
319
        virQEMUCapsSet(extraFlags, QEMU_CAPS_PCI_MULTIBUS);
320 321
    }

322 323
    for (i = 0; i < vm->def->nhostdevs; i++) {
        virDomainHostdevDefPtr hostdev = vm->def->hostdevs[i];
324 325 326 327 328 329 330 331

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

P
Pavel Hrdina 已提交
332 333 334
    if (!(cmd = qemuProcessCreatePretendCmd(conn, &driver, vm, migrateURI,
                                            (flags & FLAG_FIPS), false,
                                            VIR_QEMU_PROCESS_START_COLD))) {
P
Pavel Hrdina 已提交
335 336
        if (flags & FLAG_EXPECT_FAILURE)
            goto ok;
337
        goto out;
J
Jiri Denemark 已提交
338 339
    }

E
Eric Blake 已提交
340
    if (!(actualargv = virCommandToString(cmd)))
341
        goto out;
E
Eric Blake 已提交
342

343
    if (virTestCompareToFile(actualargv, cmdline) < 0)
344
        goto out;
345

P
Pavel Hrdina 已提交
346 347
    ret = 0;

348
 ok:
349
    if (ret == 0 && flags & FLAG_EXPECT_FAILURE) {
P
Pavel Hrdina 已提交
350 351 352 353
        ret = -1;
        VIR_TEST_DEBUG("Error expected but there wasn't any.\n");
        goto out;
    }
354
    if (!virTestOOMActive()) {
355
        if (flags & FLAG_EXPECT_FAILURE) {
356
            if ((log = virTestLogContentAndReset()))
P
Pavel Hrdina 已提交
357 358
                VIR_TEST_DEBUG("Got expected error: \n%s", log);
        }
359
        virResetLastError();
P
Pavel Hrdina 已提交
360
        ret = 0;
361 362
    }

363
 out:
364 365
    VIR_FREE(log);
    VIR_FREE(actualargv);
E
Eric Blake 已提交
366
    virCommandFree(cmd);
367
    virObjectUnref(vm);
368
    virObjectUnref(conn);
369 370 371 372
    return ret;
}


373 374
struct testInfo {
    const char *name;
375
    virQEMUCapsPtr extraFlags;
376
    const char *migrateFrom;
377
    int migrateFd;
378
    unsigned int flags;
379
    unsigned int parseFlags;
380 381
};

382 383 384 385
static int
testCompareXMLToArgvHelper(const void *data)
{
    int result = -1;
386
    const struct testInfo *info = data;
387 388
    char *xml = NULL;
    char *args = NULL;
389
    unsigned int flags = info->flags;
390 391 392
    char *migrateURI = NULL;

    if (info->migrateFrom &&
393 394
        !(migrateURI = qemuMigrationIncomingURI(info->migrateFrom,
                                                info->migrateFd)))
395
        goto cleanup;
396 397 398 399 400 401 402

    if (virAsprintf(&xml, "%s/qemuxml2argvdata/qemuxml2argv-%s.xml",
                    abs_srcdir, info->name) < 0 ||
        virAsprintf(&args, "%s/qemuxml2argvdata/qemuxml2argv-%s.args",
                    abs_srcdir, info->name) < 0)
        goto cleanup;

403
    if (virQEMUCapsGet(info->extraFlags, QEMU_CAPS_MONITOR_JSON))
404 405
        flags |= FLAG_JSON;

406 407 408
    if (virQEMUCapsGet(info->extraFlags, QEMU_CAPS_ENABLE_FIPS))
        flags |= FLAG_FIPS;

409 410
    if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->name,
                                info->extraFlags) < 0)
P
Pavel Fedin 已提交
411 412
        goto cleanup;

413
    result = testCompareXMLToArgvFiles(xml, args, info->extraFlags,
414
                                       migrateURI, flags, info->parseFlags);
415

416
 cleanup:
417
    VIR_FREE(migrateURI);
418 419
    VIR_FREE(xml);
    VIR_FREE(args);
420
    return result;
421 422 423
}


424
static int
425
testAddCPUModels(virQEMUCapsPtr caps, bool skipLegacy)
426 427 428 429
{
    const char *newModels[] = {
        "Opteron_G3", "Opteron_G2", "Opteron_G1",
        "Nehalem", "Penryn", "Conroe",
430
        "Haswell-noTSX", "Haswell",
431 432 433 434 435 436 437 438
    };
    const char *legacyModels[] = {
        "n270", "athlon", "pentium3", "pentium2", "pentium",
        "486", "coreduo", "kvm32", "qemu32", "kvm64",
        "core2duo", "phenom", "qemu64",
    };
    size_t i;

439
    for (i = 0; i < ARRAY_CARDINALITY(newModels); i++) {
440
        if (virQEMUCapsAddCPUDefinition(caps, newModels[i]) < 0)
441 442 443 444
            return -1;
    }
    if (skipLegacy)
        return 0;
445
    for (i = 0; i < ARRAY_CARDINALITY(legacyModels); i++) {
446
        if (virQEMUCapsAddCPUDefinition(caps, legacyModels[i]) < 0)
447 448 449 450 451
            return -1;
    }
    return 0;
}

452

453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474
static int
testPrepareExtraFlags(struct testInfo *info,
                      bool skipLegacyCPUs,
                      int gic)
{
    int ret = -1;

    if (!(info->extraFlags = virQEMUCapsNew()))
        goto out;

    if (testAddCPUModels(info->extraFlags, skipLegacyCPUs) < 0)
        goto out;

    if (testQemuCapsSetGIC(info->extraFlags, gic) < 0)
        goto out;

    ret = 0;

 out:
    return ret;
}

475
static int
E
Eric Blake 已提交
476
mymain(void)
477 478
{
    int ret = 0;
479
    bool skipLegacyCPUs = false;
480

481 482
    abs_top_srcdir = getenv("abs_top_srcdir");
    if (!abs_top_srcdir)
483
        abs_top_srcdir = abs_srcdir "/..";
484

485 486 487 488 489 490 491 492 493 494
    /* 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;
    }

495
    if (qemuTestDriverInit(&driver) < 0)
496
        return EXIT_FAILURE;
497 498

    driver.privileged = true;
499

500
    VIR_FREE(driver.config->vncTLSx509certdir);
501
    if (VIR_STRDUP_QUIET(driver.config->vncTLSx509certdir, "/etc/pki/libvirt-vnc") < 0)
502 503
        return EXIT_FAILURE;
    VIR_FREE(driver.config->spiceTLSx509certdir);
504
    if (VIR_STRDUP_QUIET(driver.config->spiceTLSx509certdir, "/etc/pki/libvirt-spice") < 0)
505 506
        return EXIT_FAILURE;

507
    VIR_FREE(driver.config->stateDir);
508
    if (VIR_STRDUP_QUIET(driver.config->stateDir, "/nowhere") < 0)
509
        return EXIT_FAILURE;
510
    VIR_FREE(driver.config->hugetlbfs);
511
    if (VIR_ALLOC_N(driver.config->hugetlbfs, 2) < 0)
512
        return EXIT_FAILURE;
513 514 515
    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)
516
        return EXIT_FAILURE;
517 518
    driver.config->hugetlbfs[0].size = 2048;
    driver.config->hugetlbfs[0].deflt = true;
519
    driver.config->hugetlbfs[1].size = 1048576;
520
    driver.config->spiceTLS = 1;
521
    if (VIR_STRDUP_QUIET(driver.config->spicePassword, "123456") < 0)
522
        return EXIT_FAILURE;
523

524 525 526 527 528 529 530 531
# define DO_TEST_FULL(name, migrateFrom, migrateFd, flags,               \
                      parseFlags, gic, ...)                              \
    do {                                                                 \
        static struct testInfo info = {                                  \
            name, NULL, migrateFrom, migrateFd, (flags), parseFlags      \
        };                                                               \
        if (testPrepareExtraFlags(&info, skipLegacyCPUs, gic) < 0)       \
            return EXIT_FAILURE;                                         \
532
        virQEMUCapsSetList(info.extraFlags, __VA_ARGS__, QEMU_CAPS_LAST);\
533 534 535 536
        if (virTestRun("QEMU XML-2-ARGV " name,                          \
                       testCompareXMLToArgvHelper, &info) < 0)           \
            ret = -1;                                                    \
        virObjectUnref(info.extraFlags);                                 \
537 538
    } while (0)

539
# define DO_TEST(name, ...)                                              \
540
    DO_TEST_FULL(name, NULL, -1, 0, 0, GIC_NONE, __VA_ARGS__)
541

542
# define DO_TEST_GIC(name, gic, ...)                                     \
543 544
    DO_TEST_FULL(name, NULL, -1, 0, 0, gic, __VA_ARGS__)

545 546
# define DO_TEST_FAILURE(name, ...)                                      \
    DO_TEST_FULL(name, NULL, -1, FLAG_EXPECT_FAILURE,                    \
547
                 0, GIC_NONE, __VA_ARGS__)
548

549 550 551
# define DO_TEST_PARSE_ERROR(name, ...)                                  \
    DO_TEST_FULL(name, NULL, -1,                                         \
                 FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE,          \
552
                 0, GIC_NONE, __VA_ARGS__)
553

554 555 556
# define DO_TEST_PARSE_FLAGS_ERROR(name, parseFlags, ...)                \
    DO_TEST_FULL(name, NULL, -1,                                         \
                 FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE,          \
557
                 parseFlags, GIC_NONE, __VA_ARGS__)
558

559
# define DO_TEST_LINUX(name, ...)                                        \
560
    DO_TEST_LINUX_FULL(name, NULL, -1, 0, 0, GIC_NONE, __VA_ARGS__)
561

562 563 564 565 566 567
# ifdef __linux__
    /* This is a macro that invokes test only on Linux. It's
     * meant to be called in those cases where qemuxml2argvmock
     * cooperation is expected (e.g. we need a fixed time,
     * predictable NUMA topology and so on). On non-Linux
     * platforms the macro just consume its argument. */
568
#  define DO_TEST_LINUX_FULL(name, ...)                                  \
569
    DO_TEST_FULL(name, __VA_ARGS__)
570
# else  /* __linux__ */
571 572 573
#  define DO_TEST_LINUX_FULL(name, ...)                                  \
    do {                                                                 \
        const char *tmp ATTRIBUTE_UNUSED = name;                         \
574 575 576
    } while (0)
# endif /* __linux__ */

577
# define NONE QEMU_CAPS_LAST
578

579 580 581
    /* 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 */
582 583 584 585 586 587 588
    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");
589 590
    unsetenv("QEMU_AUDIO_DRV");
    unsetenv("SDL_AUDIODRIVER");
591

592
    DO_TEST("minimal", NONE);
593
    DO_TEST_PARSE_ERROR("minimal-no-memory", NONE);
594
    DO_TEST("minimal-msg-timestamp", QEMU_CAPS_MSG_TIMESTAMP);
595
    DO_TEST("machine-aliases1", NONE);
596
    DO_TEST("machine-aliases2", QEMU_CAPS_KVM);
597 598 599 600
    DO_TEST("machine-core-on", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_DUMP_GUEST_CORE);
    DO_TEST("machine-core-off", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_DUMP_GUEST_CORE);
601
    DO_TEST_FAILURE("machine-core-on", NONE);
602
    DO_TEST_FAILURE("machine-core-on", QEMU_CAPS_MACHINE_OPT);
L
Li Zhang 已提交
603 604
    DO_TEST("machine-usb-opt", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_USB_OPT);
605 606
    DO_TEST("machine-vmport-opt", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_VMPORT_OPT);
607
    DO_TEST("kvm", QEMU_CAPS_MACHINE_OPT);
608 609
    DO_TEST("default-kvm-host-arch", QEMU_CAPS_MACHINE_OPT);
    DO_TEST("default-qemu-host-arch", QEMU_CAPS_MACHINE_OPT);
610 611 612
    DO_TEST("boot-cdrom", NONE);
    DO_TEST("boot-network", NONE);
    DO_TEST("boot-floppy", NONE);
613
    DO_TEST("boot-floppy-q35",
614
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
615
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
616
            QEMU_CAPS_ICH9_AHCI);
617
    DO_TEST("bootindex-floppy-q35",
618
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
619
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
620
            QEMU_CAPS_ICH9_AHCI, QEMU_CAPS_BOOT_MENU,
621
            QEMU_CAPS_BOOTINDEX);
622 623
    DO_TEST("boot-multi", QEMU_CAPS_BOOT_MENU);
    DO_TEST("boot-menu-enable",
624
            QEMU_CAPS_BOOT_MENU);
625
    DO_TEST("boot-menu-enable",
626
            QEMU_CAPS_BOOT_MENU,
627
            QEMU_CAPS_BOOTINDEX);
628
    DO_TEST("boot-menu-enable-with-timeout",
629
            QEMU_CAPS_BOOT_MENU,
630
            QEMU_CAPS_SPLASH_TIMEOUT);
631
    DO_TEST_FAILURE("boot-menu-enable-with-timeout", QEMU_CAPS_BOOT_MENU);
632
    DO_TEST_PARSE_ERROR("boot-menu-enable-with-timeout-invalid", NONE);
633 634
    DO_TEST("boot-menu-disable", QEMU_CAPS_BOOT_MENU);
    DO_TEST("boot-menu-disable-drive",
635
            QEMU_CAPS_BOOT_MENU);
636
    DO_TEST("boot-menu-disable-drive-bootindex",
637
            QEMU_CAPS_BOOT_MENU,
638
            QEMU_CAPS_BOOTINDEX);
639
    DO_TEST_PARSE_ERROR("boot-dev+order",
640
            QEMU_CAPS_BOOTINDEX,
641
            QEMU_CAPS_VIRTIO_BLK_SCSI);
642
    DO_TEST("boot-order",
643
            QEMU_CAPS_BOOTINDEX,
644
            QEMU_CAPS_VIRTIO_BLK_SCSI);
645
    DO_TEST("boot-complex",
646
            QEMU_CAPS_DRIVE_BOOT,
647
            QEMU_CAPS_VIRTIO_BLK_SCSI);
648
    DO_TEST("boot-complex-bootindex",
649
            QEMU_CAPS_DRIVE_BOOT,
650
            QEMU_CAPS_BOOTINDEX,
651
            QEMU_CAPS_VIRTIO_BLK_SCSI);
652
    DO_TEST("boot-strict",
653
            QEMU_CAPS_DRIVE_BOOT,
654
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_BOOT_STRICT,
655
            QEMU_CAPS_VIRTIO_BLK_SCSI);
656 657 658 659 660

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

661
    DO_TEST("bios", QEMU_CAPS_SGA);
J
Ján Tomko 已提交
662
    DO_TEST("bios-nvram", NONE);
663
    DO_TEST("clock-utc", QEMU_CAPS_NODEFCONFIG);
664
    DO_TEST("clock-localtime", NONE);
665
    DO_TEST("clock-localtime-basis-localtime", QEMU_CAPS_RTC);
666 667
    DO_TEST("clock-variable", QEMU_CAPS_RTC);
    DO_TEST("clock-france", QEMU_CAPS_RTC);
668 669
    DO_TEST("clock-hpet-off", QEMU_CAPS_RTC, QEMU_CAPS_NO_HPET,
            QEMU_CAPS_NO_KVM_PIT);
670
    DO_TEST("clock-catchup", QEMU_CAPS_RTC, QEMU_CAPS_NO_KVM_PIT);
671
    DO_TEST("cpu-kvmclock", QEMU_CAPS_ENABLE_KVM);
A
Andrea Bolognani 已提交
672
    DO_TEST("cpu-host-kvmclock", QEMU_CAPS_ENABLE_KVM);
673
    DO_TEST("kvmclock", QEMU_CAPS_KVM);
674
    DO_TEST("clock-timer-hyperv-rtc", QEMU_CAPS_KVM);
675

676 677
    DO_TEST("cpu-eoi-disabled", QEMU_CAPS_ENABLE_KVM);
    DO_TEST("cpu-eoi-enabled", QEMU_CAPS_ENABLE_KVM);
J
Ján Tomko 已提交
678
    DO_TEST("controller-order",
679
            QEMU_CAPS_KVM, QEMU_CAPS_ENABLE_KVM,
680 681 682 683
            QEMU_CAPS_BOOT_MENU, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_DRIVE_AIO,
            QEMU_CAPS_CCID_PASSTHRU, QEMU_CAPS_CHARDEV,
            QEMU_CAPS_CHARDEV_SPICEVMC, QEMU_CAPS_SPICE, QEMU_CAPS_HDA_DUPLEX);
684 685
    DO_TEST("eoi-disabled", NONE);
    DO_TEST("eoi-enabled", NONE);
686 687
    DO_TEST("pv-spinlock-disabled", NONE);
    DO_TEST("pv-spinlock-enabled", NONE);
M
Martin Kletzander 已提交
688
    DO_TEST("kvmclock+eoi-disabled", QEMU_CAPS_ENABLE_KVM);
689

690
    DO_TEST("hyperv", NONE);
691
    DO_TEST("hyperv-off", NONE);
692
    DO_TEST("hyperv-panic", NONE);
693

694 695 696
    DO_TEST("kvm-features", NONE);
    DO_TEST("kvm-features-off", NONE);

697 698 699
    DO_TEST("pmu-feature", NONE);
    DO_TEST("pmu-feature-off", NONE);

700
    DO_TEST("hugepages", QEMU_CAPS_MEM_PATH);
701
    DO_TEST("hugepages-numa", QEMU_CAPS_RTC, QEMU_CAPS_NO_KVM_PIT,
702
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4,
703
            QEMU_CAPS_VIRTIO_SCSI,
704 705
            QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC,
706
            QEMU_CAPS_VGA_QXL,
707
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_USB_REDIR,
708
            QEMU_CAPS_DEVICE_PC_DIMM,
709
            QEMU_CAPS_MEM_PATH, QEMU_CAPS_OBJECT_MEMORY_FILE);
710 711 712
    DO_TEST_LINUX("hugepages-pages", QEMU_CAPS_MEM_PATH,
                  QEMU_CAPS_OBJECT_MEMORY_RAM,
                  QEMU_CAPS_OBJECT_MEMORY_FILE);
713 714 715 716
    DO_TEST("hugepages-pages2", QEMU_CAPS_MEM_PATH, QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
    DO_TEST("hugepages-pages3", QEMU_CAPS_MEM_PATH, QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
717 718 719
    DO_TEST_LINUX("hugepages-shared", QEMU_CAPS_MEM_PATH,
                  QEMU_CAPS_OBJECT_MEMORY_RAM,
                  QEMU_CAPS_OBJECT_MEMORY_FILE);
720
    DO_TEST_PARSE_ERROR("hugepages-memaccess-invalid", NONE);
721 722
    DO_TEST_FAILURE("hugepages-pages4", QEMU_CAPS_MEM_PATH,
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
723
    DO_TEST("hugepages-pages5", QEMU_CAPS_MEM_PATH);
724
    DO_TEST("hugepages-pages6", NONE);
725
    DO_TEST("nosharepages", QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_MEM_MERGE);
726
    DO_TEST("disk-cdrom", NONE);
727
    DO_TEST("disk-iscsi", NONE);
728 729 730 731 732
    DO_TEST("disk-cdrom-network-http", QEMU_CAPS_KVM);
    DO_TEST("disk-cdrom-network-https", QEMU_CAPS_KVM);
    DO_TEST("disk-cdrom-network-ftp", QEMU_CAPS_KVM);
    DO_TEST("disk-cdrom-network-ftps", QEMU_CAPS_KVM);
    DO_TEST("disk-cdrom-network-tftp", QEMU_CAPS_KVM);
733
    DO_TEST("disk-cdrom-empty", NONE);
734
    DO_TEST("disk-cdrom-tray",
735
            QEMU_CAPS_VIRTIO_TX_ALG);
736 737
    DO_TEST("disk-cdrom-tray-no-device-cap", NONE);
    DO_TEST("disk-floppy", NONE);
738
    DO_TEST_FAILURE("disk-floppy-pseries", NONE);
739
    DO_TEST("disk-floppy-tray-no-device-cap", NONE);
740
    DO_TEST("disk-floppy-tray", NONE);
741
    DO_TEST("disk-virtio-s390",
742
            QEMU_CAPS_VIRTIO_S390);
743
    DO_TEST("disk-many", NONE);
744 745
    DO_TEST("disk-virtio", QEMU_CAPS_DRIVE_BOOT);
    DO_TEST("disk-virtio-ccw",
746
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
747
    DO_TEST("disk-virtio-ccw-many",
748
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
749
    DO_TEST("disk-virtio-scsi-ccw", QEMU_CAPS_VIRTIO_SCSI,
750
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
751
    DO_TEST("disk-order",
752
            QEMU_CAPS_DRIVE_BOOT, QEMU_CAPS_VIRTIO_BLK_SCSI);
753
    DO_TEST("disk-drive-boot-disk",
754
            QEMU_CAPS_DRIVE_BOOT);
755
    DO_TEST("disk-drive-boot-cdrom",
756
            QEMU_CAPS_DRIVE_BOOT);
757
    DO_TEST("floppy-drive-fat",
758
            QEMU_CAPS_DRIVE_BOOT);
759
    DO_TEST("disk-drive-readonly-disk",
760
            QEMU_CAPS_NODEFCONFIG);
761
    DO_TEST("disk-drive-readonly-no-device",
J
Ján Tomko 已提交
762
            QEMU_CAPS_NODEFCONFIG);
763
    DO_TEST("disk-drive-fmt-qcow",
764
            QEMU_CAPS_DRIVE_BOOT);
765
    DO_TEST("disk-drive-shared",
766
            QEMU_CAPS_DRIVE_SERIAL);
767
    DO_TEST("disk-drive-error-policy-stop",
768
            QEMU_CAPS_MONITOR_JSON);
769
    DO_TEST("disk-drive-error-policy-enospace",
770
            QEMU_CAPS_MONITOR_JSON);
771
    DO_TEST("disk-drive-error-policy-wreport-rignore",
772 773 774 775
            QEMU_CAPS_MONITOR_JSON);
    DO_TEST("disk-drive-cache-v2-wt", NONE);
    DO_TEST("disk-drive-cache-v2-wb", NONE);
    DO_TEST("disk-drive-cache-v2-none", NONE);
776
    DO_TEST("disk-drive-cache-directsync",
777
            QEMU_CAPS_DRIVE_CACHE_DIRECTSYNC);
778
    DO_TEST("disk-drive-cache-unsafe",
779
            QEMU_CAPS_DRIVE_CACHE_UNSAFE);
780
    DO_TEST("disk-drive-copy-on-read",
781 782 783 784 785 786 787 788
            QEMU_CAPS_DRIVE_COPY_ON_READ);
    DO_TEST("disk-drive-network-nbd", NONE);
    DO_TEST("disk-drive-network-nbd-export", NONE);
    DO_TEST("disk-drive-network-nbd-ipv6", NONE);
    DO_TEST("disk-drive-network-nbd-ipv6-export", NONE);
    DO_TEST("disk-drive-network-nbd-unix", NONE);
    DO_TEST("disk-drive-network-iscsi", NONE);
    DO_TEST("disk-drive-network-iscsi-auth", NONE);
789 790
    DO_TEST("disk-drive-network-iscsi-lun",
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_VIRTIO_SCSI,
791
            QEMU_CAPS_SCSI_BLOCK);
792 793 794 795
    DO_TEST("disk-drive-network-gluster", NONE);
    DO_TEST("disk-drive-network-rbd", NONE);
    DO_TEST("disk-drive-network-sheepdog", NONE);
    DO_TEST("disk-drive-network-rbd-auth", NONE);
796
# ifdef HAVE_GNUTLS_CIPHER_ENCRYPT
797 798
    DO_TEST("disk-drive-network-rbd-auth-AES",
            QEMU_CAPS_OBJECT_SECRET);
799
# endif
800 801
    DO_TEST("disk-drive-network-rbd-ipv6", NONE);
    DO_TEST_FAILURE("disk-drive-network-rbd-no-colon", NONE);
802
    DO_TEST("disk-drive-no-boot",
803
            QEMU_CAPS_BOOTINDEX);
804
    DO_TEST_PARSE_ERROR("disk-device-lun-type-invalid",
805 806
                        QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST_FAILURE("disk-usb-nosupport", NONE);
807
    DO_TEST("disk-usb-device",
808
            QEMU_CAPS_DEVICE_USB_STORAGE,
809
            QEMU_CAPS_NODEFCONFIG);
810
    DO_TEST("disk-usb-device-removable",
811
            QEMU_CAPS_DEVICE_USB_STORAGE,
812
            QEMU_CAPS_USB_STORAGE_REMOVABLE, QEMU_CAPS_NODEFCONFIG);
813 814
    DO_TEST_FAILURE("disk-usb-pci",
                    QEMU_CAPS_DEVICE_USB_STORAGE, QEMU_CAPS_NODEFCONFIG);
815
    DO_TEST("disk-scsi-device",
816
            QEMU_CAPS_NODEFCONFIG,
817
            QEMU_CAPS_SCSI_LSI);
818
    DO_TEST("disk-scsi-device-auto",
819
            QEMU_CAPS_NODEFCONFIG,
820
            QEMU_CAPS_SCSI_LSI);
821
    DO_TEST("disk-scsi-disk-split",
822
            QEMU_CAPS_NODEFCONFIG,
823
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI);
824
    DO_TEST("disk-scsi-disk-wwn",
825
            QEMU_CAPS_NODEFCONFIG,
826
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
827 828
            QEMU_CAPS_SCSI_DISK_WWN);
    DO_TEST("disk-scsi-disk-vpd",
829
            QEMU_CAPS_NODEFCONFIG,
830
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
831 832
            QEMU_CAPS_SCSI_DISK_WWN);
    DO_TEST_FAILURE("disk-scsi-disk-vpd-build-error",
833
            QEMU_CAPS_NODEFCONFIG,
834
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
835
            QEMU_CAPS_SCSI_DISK_WWN);
836
    DO_TEST("disk-scsi-vscsi",
837
            QEMU_CAPS_NODEFCONFIG);
838
    DO_TEST("disk-scsi-virtio-scsi",
839
            QEMU_CAPS_NODEFCONFIG,
840
            QEMU_CAPS_VIRTIO_SCSI);
841
    DO_TEST("disk-virtio-scsi-num_queues",
842
            QEMU_CAPS_NODEFCONFIG,
843
            QEMU_CAPS_VIRTIO_SCSI);
844
    DO_TEST("disk-virtio-scsi-cmd_per_lun",
845
            QEMU_CAPS_NODEFCONFIG,
846 847
            QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST("disk-virtio-scsi-max_sectors",
848
            QEMU_CAPS_NODEFCONFIG,
849
            QEMU_CAPS_VIRTIO_SCSI);
850
    DO_TEST("disk-virtio-scsi-ioeventfd",
851
            QEMU_CAPS_NODEFCONFIG,
852
            QEMU_CAPS_VIRTIO_IOEVENTFD, QEMU_CAPS_VIRTIO_SCSI);
853
    DO_TEST("disk-scsi-megasas",
854
            QEMU_CAPS_NODEFCONFIG,
855
            QEMU_CAPS_SCSI_MEGASAS);
856 857 858 859
    DO_TEST("disk-scsi-mptsas1068",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_SCSI_MPTSAS1068,
            QEMU_CAPS_SCSI_DISK_WWN);
860
    DO_TEST("disk-sata-device",
J
Jim Fehlig 已提交
861
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_ICH9_AHCI);
862
    DO_TEST("disk-aio",
863
            QEMU_CAPS_DRIVE_AIO);
864
    DO_TEST("disk-source-pool",
865
            QEMU_CAPS_NODEFCONFIG);
866
    DO_TEST("disk-source-pool-mode",
867
            QEMU_CAPS_NODEFCONFIG);
868
    DO_TEST("disk-ioeventfd",
869
            QEMU_CAPS_VIRTIO_IOEVENTFD,
870
            QEMU_CAPS_VIRTIO_TX_ALG,
871
            QEMU_CAPS_VIRTIO_BLK_SCSI);
872
    DO_TEST("disk-copy_on_read",
873
            QEMU_CAPS_DRIVE_COPY_ON_READ,
874
            QEMU_CAPS_VIRTIO_TX_ALG,
875
            QEMU_CAPS_VIRTIO_BLK_SCSI);
O
Osier Yang 已提交
876
    DO_TEST("disk-drive-discard",
877
            QEMU_CAPS_DRIVE_DISCARD);
878
    DO_TEST("disk-snapshot", NONE);
879 880 881
    DO_TEST_PARSE_ERROR("disk-same-targets",
                        QEMU_CAPS_SCSI_LSI,
                        QEMU_CAPS_DEVICE_USB_STORAGE, QEMU_CAPS_NODEFCONFIG);
882
    DO_TEST("event_idx",
883 884
            QEMU_CAPS_VIRTIO_BLK_EVENT_IDX,
            QEMU_CAPS_VIRTIO_NET_EVENT_IDX,
885
            QEMU_CAPS_VIRTIO_BLK_SCSI);
886
    DO_TEST("virtio-lun",
887
            QEMU_CAPS_VIRTIO_BLK_SCSI);
888
    DO_TEST("disk-scsi-lun-passthrough",
889
            QEMU_CAPS_SCSI_BLOCK,
890
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI);
891 892 893
    DO_TEST("disk-serial",
            QEMU_CAPS_KVM,
            QEMU_CAPS_DRIVE_SERIAL);
894

895 896
    DO_TEST("graphics-vnc", QEMU_CAPS_VNC);
    DO_TEST("graphics-vnc-socket", QEMU_CAPS_VNC);
897
    DO_TEST("graphics-vnc-websocket", QEMU_CAPS_VNC, QEMU_CAPS_VNC_WEBSOCKET);
898
    DO_TEST("graphics-vnc-policy", QEMU_CAPS_VNC, QEMU_CAPS_VNC_SHARE_POLICY);
P
Pavel Hrdina 已提交
899
    DO_TEST("graphics-vnc-no-listen-attr", QEMU_CAPS_VNC);
900 901 902 903
    DO_TEST("graphics-vnc-remove-generated-socket", QEMU_CAPS_VNC);
    driver.config->vncAutoUnixSocket = true;
    DO_TEST("graphics-vnc-auto-socket-cfg", QEMU_CAPS_VNC);
    driver.config->vncAutoUnixSocket = false;
904 905
    DO_TEST("graphics-vnc-socket", QEMU_CAPS_VNC);
    DO_TEST("graphics-vnc-auto-socket", QEMU_CAPS_VNC);
906
    DO_TEST("graphics-vnc-none", QEMU_CAPS_VNC);
907

908 909
    driver.config->vncSASL = 1;
    VIR_FREE(driver.config->vncSASLdir);
910
    ignore_value(VIR_STRDUP(driver.config->vncSASLdir, "/root/.sasl2"));
911
    DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VNC);
912 913
    driver.config->vncTLS = 1;
    driver.config->vncTLSx509verify = 1;
914
    DO_TEST("graphics-vnc-tls", QEMU_CAPS_VNC);
915
    driver.config->vncSASL = driver.config->vncTLSx509verify = driver.config->vncTLS = 0;
916 917
    VIR_FREE(driver.config->vncSASLdir);
    VIR_FREE(driver.config->vncTLSx509certdir);
918

919 920
    DO_TEST("graphics-sdl", QEMU_CAPS_SDL);
    DO_TEST("graphics-sdl-fullscreen", QEMU_CAPS_SDL);
921
    DO_TEST("nographics", NONE);
922
    DO_TEST("nographics-vga",
923
            QEMU_CAPS_VGA_NONE);
924
    DO_TEST("graphics-spice",
925
            QEMU_CAPS_VGA_QXL,
926
            QEMU_CAPS_SPICE,
927 928
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
929 930
    DO_TEST("graphics-spice-no-args",
            QEMU_CAPS_SPICE);
931 932 933
    driver.config->spiceSASL = 1;
    ignore_value(VIR_STRDUP(driver.config->spiceSASLdir, "/root/.sasl2"));
    DO_TEST("graphics-spice-sasl",
934
            QEMU_CAPS_VGA_QXL,
935
            QEMU_CAPS_SPICE,
936 937 938
            QEMU_CAPS_DEVICE_QXL);
    VIR_FREE(driver.config->spiceSASLdir);
    driver.config->spiceSASL = 0;
939
    DO_TEST("graphics-spice-agentmouse",
940
            QEMU_CAPS_VGA_QXL,
941
            QEMU_CAPS_SPICE,
942 943
            QEMU_CAPS_CHARDEV_SPICEVMC,
            QEMU_CAPS_NODEFCONFIG);
944
    DO_TEST("graphics-spice-compression",
945
            QEMU_CAPS_VGA_QXL,
946
            QEMU_CAPS_SPICE,
947
            QEMU_CAPS_DEVICE_QXL);
948
    DO_TEST("graphics-spice-timeout",
949
            QEMU_CAPS_KVM,
950
            QEMU_CAPS_VGA_QXL,
951
            QEMU_CAPS_SPICE,
952
            QEMU_CAPS_DEVICE_QXL_VGA);
953
    DO_TEST("graphics-spice-qxl-vga",
954
            QEMU_CAPS_VGA_QXL,
955
            QEMU_CAPS_SPICE,
956 957
            QEMU_CAPS_DEVICE_QXL_VGA,
            QEMU_CAPS_DEVICE_QXL);
958
    DO_TEST("graphics-spice-usb-redir",
959
            QEMU_CAPS_SPICE,
960
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
961 962 963
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_CHARDEV_SPICEVMC);
964
    DO_TEST("graphics-spice-agent-file-xfer",
965
            QEMU_CAPS_VGA_QXL,
966
            QEMU_CAPS_SPICE,
967 968 969
            QEMU_CAPS_DEVICE_QXL_VGA,
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
970 971 972 973 974 975
    DO_TEST("graphics-spice-socket",
            QEMU_CAPS_SPICE,
            QEMU_CAPS_SPICE_UNIX);
    DO_TEST("graphics-spice-auto-socket",
            QEMU_CAPS_SPICE,
            QEMU_CAPS_SPICE_UNIX);
976 977 978 979 980
    driver.config->spiceAutoUnixSocket = true;
    DO_TEST("graphics-spice-auto-socket-cfg",
            QEMU_CAPS_SPICE,
            QEMU_CAPS_SPICE_UNIX);
    driver.config->spiceAutoUnixSocket = false;
981

982 983 984
    DO_TEST("input-usbmouse", NONE);
    DO_TEST("input-usbtablet", NONE);
    DO_TEST("misc-acpi", NONE);
985 986 987
    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);
988
    DO_TEST_FAILURE("misc-enable-s4", NONE);
989
    DO_TEST("misc-no-reboot", NONE);
990
    DO_TEST("misc-uuid", NONE);
991
    DO_TEST_PARSE_ERROR("vhost_queues-invalid", NONE);
992
    DO_TEST("net-vhostuser", QEMU_CAPS_NETDEV);
993
    DO_TEST("net-vhostuser-multiq",
994 995
            QEMU_CAPS_NETDEV, QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
    DO_TEST_FAILURE("net-vhostuser-multiq", QEMU_CAPS_NETDEV);
996 997 998
    DO_TEST("net-user", NONE);
    DO_TEST("net-virtio", NONE);
    DO_TEST("net-virtio-device",
999
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_VIRTIO_TX_ALG);
1000
    DO_TEST("net-virtio-disable-offloads",
1001
            QEMU_CAPS_NODEFCONFIG);
1002
    DO_TEST("net-virtio-netdev",
1003
            QEMU_CAPS_NETDEV, QEMU_CAPS_NODEFCONFIG);
1004
    DO_TEST("net-virtio-s390",
1005
            QEMU_CAPS_VIRTIO_S390);
1006
    DO_TEST("net-virtio-ccw",
1007
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1008 1009
    DO_TEST("net-eth", NONE);
    DO_TEST("net-eth-ifname", NONE);
1010
    DO_TEST("net-eth-names", NONE);
1011 1012 1013
    DO_TEST("net-client", NONE);
    DO_TEST("net-server", NONE);
    DO_TEST("net-mcast", NONE);
1014
    DO_TEST("net-udp", NONE);
1015
    DO_TEST("net-hostdev",
J
Ján Tomko 已提交
1016
            QEMU_CAPS_NODEFCONFIG);
1017
    DO_TEST("net-hostdev-multidomain",
J
Ján Tomko 已提交
1018
            QEMU_CAPS_NODEFCONFIG,
1019 1020 1021
            QEMU_CAPS_HOST_PCI_MULTIDOMAIN);
    DO_TEST_FAILURE("net-hostdev-multidomain",
                    QEMU_CAPS_NODEFCONFIG);
1022
    DO_TEST("net-hostdev-vfio",
J
Ján Tomko 已提交
1023
            QEMU_CAPS_NODEFCONFIG,
1024
            QEMU_CAPS_DEVICE_VFIO_PCI);
1025
    DO_TEST("net-hostdev-vfio-multidomain",
J
Ján Tomko 已提交
1026
            QEMU_CAPS_NODEFCONFIG,
1027 1028 1029
            QEMU_CAPS_DEVICE_VFIO_PCI, QEMU_CAPS_HOST_PCI_MULTIDOMAIN);
    DO_TEST_FAILURE("net-hostdev-vfio-multidomain",
                    QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VFIO_PCI);
1030

1031 1032 1033 1034
    DO_TEST("serial-vc", NONE);
    DO_TEST("serial-pty", NONE);
    DO_TEST("serial-dev", NONE);
    DO_TEST("serial-file", NONE);
1035 1036
    DO_TEST("serial-file-log", QEMU_CAPS_CHARDEV, QEMU_CAPS_CHARDEV_FILE_APPEND,
            QEMU_CAPS_CHARDEV_LOGFILE);
1037 1038 1039 1040 1041
    DO_TEST("serial-unix", NONE);
    DO_TEST("serial-tcp", NONE);
    DO_TEST("serial-udp", NONE);
    DO_TEST("serial-tcp-telnet", NONE);
    DO_TEST("serial-many", NONE);
1042
    DO_TEST("serial-spiceport",
1043
            QEMU_CAPS_CHARDEV,
1044 1045 1046
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_QXL_VGA,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEPORT);
1047
    DO_TEST("serial-spiceport-nospice", NONE);
1048

1049 1050 1051 1052 1053
    DO_TEST("parallel-tcp", NONE);
    DO_TEST("console-compat", NONE);
    DO_TEST("console-compat-auto", NONE);

    DO_TEST("serial-vc-chardev",
1054
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1055
    DO_TEST("serial-pty-chardev",
1056
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1057
    DO_TEST("serial-dev-chardev",
1058
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1059
    DO_TEST("serial-dev-chardev-iobase",
1060
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1061
    DO_TEST("serial-file-chardev",
1062
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1063
            QEMU_CAPS_CHARDEV_FILE_APPEND);
1064
    DO_TEST("serial-unix-chardev",
1065
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1066
    DO_TEST("serial-tcp-chardev",
1067
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1068
    DO_TEST("serial-udp-chardev",
1069
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1070
    DO_TEST("serial-tcp-telnet-chardev",
1071
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1072
    DO_TEST("serial-many-chardev",
1073
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1074
    DO_TEST("parallel-tcp-chardev",
1075
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1076
    DO_TEST("parallel-parport-chardev",
1077
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1078
    DO_TEST("console-compat-chardev",
1079
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
M
Michal Privoznik 已提交
1080
    DO_TEST("pci-serial-dev-chardev",
1081
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
M
Michal Privoznik 已提交
1082
            QEMU_CAPS_DEVICE_PCI_SERIAL);
1083

1084
    DO_TEST("channel-guestfwd",
1085
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1086
    DO_TEST("channel-virtio",
1087
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1088
    DO_TEST("channel-virtio-state",
1089
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1090
    DO_TEST("channel-virtio-auto",
1091
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1092
    DO_TEST("channel-virtio-autoassign",
1093
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
J
Ján Tomko 已提交
1094
    DO_TEST("channel-virtio-autoadd",
1095
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1096
    DO_TEST("console-virtio",
1097
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1098
    DO_TEST("console-virtio-many",
1099
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1100
    DO_TEST("console-virtio-s390",
1101
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1102
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390);
1103
    DO_TEST("console-virtio-ccw",
1104
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1105
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_CCW,
1106
            QEMU_CAPS_VIRTIO_S390);
1107
    DO_TEST("console-sclp",
1108
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1109
            QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_SCLP_S390);
1110
    DO_TEST("channel-spicevmc",
1111
            QEMU_CAPS_NODEFCONFIG,
1112
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC);
1113
    DO_TEST("channel-spicevmc-old",
1114
            QEMU_CAPS_NODEFCONFIG,
1115
            QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_SPICEVMC);
1116
    DO_TEST("channel-virtio-default",
1117
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1118
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC);
1119
    DO_TEST("channel-virtio-unix",
1120
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1121

1122
    DO_TEST("smartcard-host",
1123
            QEMU_CAPS_CHARDEV,
1124
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);
1125
    DO_TEST("smartcard-host-certificates",
1126
            QEMU_CAPS_CHARDEV,
1127
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);
1128
    DO_TEST("smartcard-passthrough-tcp",
1129
            QEMU_CAPS_CHARDEV,
1130
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_PASSTHRU);
1131
    DO_TEST("smartcard-passthrough-spicevmc",
1132
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1133
            QEMU_CAPS_CCID_PASSTHRU, QEMU_CAPS_CHARDEV_SPICEVMC);
1134
    DO_TEST("smartcard-controller",
1135
            QEMU_CAPS_CHARDEV,
1136 1137
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);

1138
    DO_TEST("usb-controller",
1139
            QEMU_CAPS_CHARDEV,
1140
            QEMU_CAPS_NODEFCONFIG);
1141
    DO_TEST("usb-piix3-controller",
1142
            QEMU_CAPS_CHARDEV, QEMU_CAPS_PIIX3_USB_UHCI,
1143
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_NODEFCONFIG);
1144
    DO_TEST("usb-ich9-ehci-addr",
1145
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1146
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1);
1147
    DO_TEST("input-usbmouse-addr",
1148
            QEMU_CAPS_NODEFCONFIG);
1149
    DO_TEST("usb-ich9-companion",
1150
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1151
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1);
1152
    DO_TEST_PARSE_ERROR("usb-ich9-no-companion",
1153
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1154
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1);
1155
    DO_TEST("usb-hub",
1156
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
M
Marc-André Lureau 已提交
1157
            QEMU_CAPS_NODEFCONFIG);
1158
    DO_TEST("usb-ports",
1159
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
1160
            QEMU_CAPS_NODEFCONFIG);
1161
    DO_TEST("usb-redir",
1162
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1163
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB,
1164 1165
            QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC);
1166
    DO_TEST("usb-redir-boot",
1167
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1168 1169 1170 1171
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC, QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_USB_REDIR_BOOTINDEX);
1172
    DO_TEST("usb-redir-filter",
1173
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1174 1175 1176 1177
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC,
            QEMU_CAPS_USB_REDIR_FILTER);
1178
    DO_TEST("usb-redir-filter-version",
1179
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1180 1181 1182
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC,
            QEMU_CAPS_USB_REDIR_FILTER);
1183
    DO_TEST("usb1-usb2",
1184
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1185 1186
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_USB_HUB, QEMU_CAPS_ICH9_USB_EHCI1);
1187
    DO_TEST("usb-none",
1188
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1189
    DO_TEST_PARSE_ERROR("usb-none-other",
1190
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1191
    DO_TEST_PARSE_ERROR("usb-none-hub",
1192
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1193 1194
            QEMU_CAPS_USB_HUB);
    DO_TEST_PARSE_ERROR("usb-none-usbtablet",
1195
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1196
    DO_TEST("usb-controller-default-q35",
1197
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1198 1199 1200
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_PIIX3_USB_UHCI, QEMU_CAPS_NEC_USB_XHCI);
    DO_TEST_FAILURE("usb-controller-default-unavailable-q35",
1201
                    QEMU_CAPS_DEVICE_PCI_BRIDGE,
1202 1203 1204
                    QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_PCI_OHCI,
                    QEMU_CAPS_NEC_USB_XHCI);
    DO_TEST("usb-controller-explicit-q35",
1205
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1206 1207 1208
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_PIIX3_USB_UHCI, QEMU_CAPS_NEC_USB_XHCI);
    DO_TEST_FAILURE("usb-controller-explicit-unavailable-q35",
1209
                    QEMU_CAPS_DEVICE_PCI_BRIDGE,
1210 1211
                    QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_PCI_OHCI,
                    QEMU_CAPS_PIIX3_USB_UHCI);
1212 1213 1214
    DO_TEST("usb-controller-xhci",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI, QEMU_CAPS_NEC_USB_XHCI_PORTS);
1215

1216
    DO_TEST("smbios", QEMU_CAPS_SMBIOS_TYPE);
1217
    DO_TEST_PARSE_ERROR("smbios-date", QEMU_CAPS_SMBIOS_TYPE);
1218
    DO_TEST_PARSE_ERROR("smbios-uuid-match", QEMU_CAPS_SMBIOS_TYPE);
1219

1220
    DO_TEST("watchdog", NONE);
1221
    DO_TEST("watchdog-device", QEMU_CAPS_NODEFCONFIG);
1222
    DO_TEST("watchdog-dump", NONE);
1223
    DO_TEST("watchdog-injectnmi", NONE);
1224
    DO_TEST("watchdog-diag288",
1225
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1226
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390);
1227 1228
    DO_TEST("balloon-device", QEMU_CAPS_NODEFCONFIG);
    DO_TEST("balloon-device-deflate", QEMU_CAPS_NODEFCONFIG,
1229
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1230
    DO_TEST("balloon-ccw-deflate", QEMU_CAPS_NODEFCONFIG,
1231
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1232
    DO_TEST("balloon-mmio-deflate", QEMU_CAPS_NODEFCONFIG,
1233 1234
            QEMU_CAPS_DTB, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1235
    DO_TEST("balloon-device-deflate-off", QEMU_CAPS_NODEFCONFIG,
1236
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1237
    DO_TEST("balloon-device-auto",
1238 1239
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("balloon-device-period", QEMU_CAPS_NODEFCONFIG);
1240 1241
    DO_TEST("sound", NONE);
    DO_TEST("sound-device",
1242
            QEMU_CAPS_NODEFCONFIG,
1243
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_HDA_MICRO,
1244 1245
            QEMU_CAPS_DEVICE_ICH9_INTEL_HDA,
            QEMU_CAPS_OBJECT_USB_AUDIO);
1246
    DO_TEST("fs9p",
1247
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_FSDEV,
1248
            QEMU_CAPS_FSDEV_WRITEOUT);
1249
    DO_TEST("fs9p-ccw",
1250
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_FSDEV,
1251
            QEMU_CAPS_FSDEV_WRITEOUT,
1252
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1253

1254 1255
    DO_TEST("hostdev-usb-address", NONE);
    DO_TEST("hostdev-usb-address-device",
1256 1257
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("hostdev-usb-address-device-boot",
1258 1259
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_USB_HOST_BOOTINDEX);
J
Ján Tomko 已提交
1260
    DO_TEST("hostdev-pci-address", NONE);
1261
    DO_TEST("hostdev-pci-address-device",
J
Ján Tomko 已提交
1262
            QEMU_CAPS_NODEFCONFIG);
1263
    DO_TEST("hostdev-vfio",
J
Ján Tomko 已提交
1264
            QEMU_CAPS_NODEFCONFIG,
1265
            QEMU_CAPS_DEVICE_VFIO_PCI);
1266
    DO_TEST("hostdev-vfio-multidomain",
J
Ján Tomko 已提交
1267
            QEMU_CAPS_NODEFCONFIG,
1268 1269 1270
            QEMU_CAPS_DEVICE_VFIO_PCI, QEMU_CAPS_HOST_PCI_MULTIDOMAIN);
    DO_TEST_FAILURE("hostdev-vfio-multidomain",
                    QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VFIO_PCI);
1271
    DO_TEST("pci-rom",
J
Ján Tomko 已提交
1272
            QEMU_CAPS_NODEFCONFIG);
1273

1274 1275 1276 1277
    DO_TEST_FULL("restore-v2", "exec:cat", 7, 0, 0, GIC_NONE, NONE);
    DO_TEST_FULL("restore-v2-fd", "stdio", 7, 0, 0, GIC_NONE, NONE);
    DO_TEST_FULL("restore-v2-fd", "fd:7", 7, 0, 0, GIC_NONE, NONE);
    DO_TEST_FULL("migrate", "tcp:10.0.0.1:5000", -1, 0, 0, GIC_NONE, NONE);
1278

1279
    DO_TEST_LINUX_FULL("migrate-numa-unaligned", "stdio", 7, 0, 0, GIC_NONE,
1280
                       QEMU_CAPS_NUMA,
1281 1282
                       QEMU_CAPS_OBJECT_MEMORY_RAM);

1283
    DO_TEST("qemu-ns", NONE);
1284
    DO_TEST("qemu-ns-no-env", NONE);
1285

1286
    DO_TEST("smp", QEMU_CAPS_SMP_TOPOLOGY);
1287

J
John Ferlan 已提交
1288
    DO_TEST("iothreads", QEMU_CAPS_OBJECT_IOTHREAD);
1289 1290
    DO_TEST("iothreads-ids", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-ids-partial", QEMU_CAPS_OBJECT_IOTHREAD);
1291
    DO_TEST_FAILURE("iothreads-nocap", NONE);
1292 1293
    DO_TEST("iothreads-disk", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-disk-virtio-ccw", QEMU_CAPS_OBJECT_IOTHREAD,
1294
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1295 1296 1297 1298 1299 1300
    DO_TEST("iothreads-virtio-scsi-pci", QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_OBJECT_IOTHREAD,
            QEMU_CAPS_VIRTIO_SCSI_IOTHREAD);
    DO_TEST("iothreads-virtio-scsi-ccw", QEMU_CAPS_OBJECT_IOTHREAD,
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI_IOTHREAD,
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
J
John Ferlan 已提交
1301

1302 1303 1304
    DO_TEST("cpu-topology1", QEMU_CAPS_SMP_TOPOLOGY);
    DO_TEST("cpu-topology2", QEMU_CAPS_SMP_TOPOLOGY);
    DO_TEST("cpu-topology3", NONE);
1305 1306 1307 1308 1309 1310 1311 1312
    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);
1313 1314
    DO_TEST("cpu-numa1", NONE);
    DO_TEST("cpu-numa2", QEMU_CAPS_SMP_TOPOLOGY);
1315
    DO_TEST("cpu-numa-no-memory-element", QEMU_CAPS_SMP_TOPOLOGY);
1316
    DO_TEST_PARSE_ERROR("cpu-numa3", NONE);
1317 1318
    DO_TEST_FAILURE("cpu-numa-disjoint", NONE);
    DO_TEST("cpu-numa-disjoint", QEMU_CAPS_NUMA);
1319 1320 1321
    DO_TEST_FAILURE("cpu-numa-memshared", QEMU_CAPS_SMP_TOPOLOGY,
                    QEMU_CAPS_OBJECT_MEMORY_RAM);
    DO_TEST_FAILURE("cpu-numa-memshared", QEMU_CAPS_SMP_TOPOLOGY);
1322
    DO_TEST("cpu-host-model", NONE);
1323
    DO_TEST("cpu-host-model-vendor", NONE);
1324
    skipLegacyCPUs = true;
1325
    DO_TEST("cpu-host-model-fallback", NONE);
1326
    DO_TEST_FAILURE("cpu-host-model-nofallback", NONE);
1327
    skipLegacyCPUs = false;
A
Andrea Bolognani 已提交
1328
    DO_TEST("cpu-host-passthrough", QEMU_CAPS_KVM);
1329
    DO_TEST_FAILURE("cpu-host-passthrough", NONE);
A
Andrea Bolognani 已提交
1330
    DO_TEST_FAILURE("cpu-qemu-host-passthrough", QEMU_CAPS_KVM);
1331

1332 1333 1334 1335 1336 1337 1338
    driver.caps->host.cpu = cpuHaswell;
    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);
    driver.caps->host.cpu = cpuDefault;

1339 1340 1341 1342 1343 1344 1345 1346
    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);
1347
    DO_TEST("cputune-numatune", QEMU_CAPS_SMP_TOPOLOGY,
1348
            QEMU_CAPS_KVM,
1349
            QEMU_CAPS_OBJECT_IOTHREAD,
1350 1351
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1352

1353
    DO_TEST("numatune-memory", NONE);
1354
    DO_TEST_PARSE_ERROR("numatune-memory-invalid-nodeset", NONE);
1355 1356
    DO_TEST_LINUX("numatune-memnode", QEMU_CAPS_NUMA,
                  QEMU_CAPS_OBJECT_MEMORY_RAM);
1357 1358
    DO_TEST_FAILURE("numatune-memnode", NONE);

1359 1360
    DO_TEST_LINUX("numatune-memnode-no-memory", QEMU_CAPS_NUMA,
                  QEMU_CAPS_OBJECT_MEMORY_RAM);
1361 1362
    DO_TEST_FAILURE("numatune-memnode-no-memory", NONE);

1363
    DO_TEST("numatune-auto-nodeset-invalid", NONE);
1364 1365
    DO_TEST("numatune-auto-prefer", QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1366 1367
    DO_TEST_FAILURE("numatune-static-nodeset-exceed-hostnode",
                    QEMU_CAPS_OBJECT_MEMORY_RAM);
1368 1369
    DO_TEST_PARSE_ERROR("numatune-memnode-nocpu", NONE);
    DO_TEST_PARSE_ERROR("numatune-memnodes-problematic", NONE);
1370 1371
    DO_TEST("numad", NONE);
    DO_TEST("numad-auto-vcpu-static-numatune", NONE);
1372
    DO_TEST_PARSE_ERROR("numad-auto-vcpu-static-numatune-no-nodeset", NONE);
1373 1374 1375
    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);
1376
    DO_TEST("blkdeviotune",
1377
            QEMU_CAPS_DRIVE_IOTUNE);
1378
    DO_TEST("blkdeviotune-max",
1379
            QEMU_CAPS_DRIVE_IOTUNE,
1380
            QEMU_CAPS_DRIVE_IOTUNE_MAX);
1381

1382
    DO_TEST("multifunction-pci-device",
1383
            QEMU_CAPS_NODEFCONFIG,
1384
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_SCSI_LSI);
1385

1386
    DO_TEST("monitor-json",
1387
            QEMU_CAPS_CHARDEV, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_NODEFCONFIG);
1388
    DO_TEST("no-shutdown",
1389 1390
            QEMU_CAPS_CHARDEV, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_NO_SHUTDOWN);
1391

1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403
    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);
1404

1405
    DO_TEST("pseries-basic",
1406
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1407
    DO_TEST("pseries-vio",
1408
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1409
    DO_TEST("pseries-usb-default",
1410
            QEMU_CAPS_CHARDEV,
1411 1412
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_PCI_OHCI, QEMU_CAPS_PCI_MULTIFUNCTION);
1413
    DO_TEST("pseries-usb-multi",
1414
            QEMU_CAPS_CHARDEV,
1415 1416
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_PCI_OHCI, QEMU_CAPS_PCI_MULTIFUNCTION);
1417
    DO_TEST("pseries-vio-user-assigned",
1418
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1419
    DO_TEST_PARSE_ERROR("pseries-vio-address-clash",
1420
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1421
    DO_TEST("pseries-nvram", QEMU_CAPS_DEVICE_NVRAM);
1422 1423
    DO_TEST("pseries-usb-kbd", QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_DEVICE_USB_KBD, QEMU_CAPS_CHARDEV,
1424 1425
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("pseries-cpu-exact", QEMU_CAPS_CHARDEV,
1426
            QEMU_CAPS_NODEFCONFIG);
A
Andrea Bolognani 已提交
1427
    DO_TEST("pseries-cpu-compat", QEMU_CAPS_KVM,
1428
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
A
Andrea Bolognani 已提交
1429
    DO_TEST("pseries-cpu-le", QEMU_CAPS_KVM,
1430
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1431
    DO_TEST("pseries-panic-missing",
1432
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1433
    DO_TEST("pseries-panic-no-address",
1434
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1435
    DO_TEST_FAILURE("pseries-panic-address",
1436
                    QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1437
    DO_TEST("disk-ide-drive-split",
1438
            QEMU_CAPS_NODEFCONFIG,
1439
            QEMU_CAPS_IDE_CD);
1440
    DO_TEST("disk-ide-wwn",
1441
            QEMU_CAPS_IDE_CD,
1442
            QEMU_CAPS_DRIVE_SERIAL, QEMU_CAPS_IDE_DRIVE_WWN);
1443

1444
    DO_TEST("disk-geometry", NONE);
V
Viktor Mihajlovski 已提交
1445
    DO_TEST("disk-blockio",
1446
            QEMU_CAPS_NODEFCONFIG,
V
Viktor Mihajlovski 已提交
1447
            QEMU_CAPS_IDE_CD, QEMU_CAPS_BLOCKIO);
1448

1449 1450
    DO_TEST("video-device-pciaddr-default",
            QEMU_CAPS_KVM, QEMU_CAPS_VNC,
1451
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1452 1453
            QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_QXL_VGA,
            QEMU_CAPS_DEVICE_PCI_BRIDGE);
1454
    DO_TEST("video-vga-nodevice", NONE);
1455
    DO_TEST("video-vga-device", QEMU_CAPS_DEVICE_VGA,
1456
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1457
    DO_TEST("video-vga-device-vgamem", QEMU_CAPS_DEVICE_VGA,
1458
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_VGA_VGAMEM);
1459
    DO_TEST("video-qxl-nodevice", QEMU_CAPS_VGA_QXL);
1460
    DO_TEST("video-qxl-device", QEMU_CAPS_DEVICE_QXL_VGA,
1461
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1462
    DO_TEST("video-qxl-device-vgamem",
1463 1464
            QEMU_CAPS_DEVICE_QXL_VGA, QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_QXL_VGA_VGAMEM);
1465
    DO_TEST_FAILURE("video-qxl-sec-nodevice", QEMU_CAPS_VGA_QXL);
1466
    DO_TEST("video-qxl-sec-device", QEMU_CAPS_DEVICE_QXL_VGA,
1467
            QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1468
    DO_TEST("video-qxl-sec-device-vgamem",
1469
            QEMU_CAPS_DEVICE_QXL_VGA, QEMU_CAPS_DEVICE_QXL,
1470 1471
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_QXL_VGA_VGAMEM,
            QEMU_CAPS_QXL_VGAMEM);
1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485
    DO_TEST("video-qxl-heads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA_QXL,
            QEMU_CAPS_DEVICE_QXL_VGA,
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_QXL_MAX_OUTPUTS,
            QEMU_CAPS_QXL_VGA_MAX_OUTPUTS);
    DO_TEST("video-qxl-noheads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA_QXL,
            QEMU_CAPS_DEVICE_QXL_VGA,
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_QXL_MAX_OUTPUTS,
            QEMU_CAPS_QXL_VGA_MAX_OUTPUTS);
M
Marc-André Lureau 已提交
1486
    DO_TEST("video-virtio-gpu-device",
1487
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
M
Marc-André Lureau 已提交
1488
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1489
    DO_TEST("video-virtio-gpu-virgl",
1490
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
1491 1492
            QEMU_CAPS_DEVICE_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1493 1494 1495 1496 1497 1498
    DO_TEST("video-virtio-gpu-spice-gl",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_SPICE,
            QEMU_CAPS_SPICE_GL,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1499
    DO_TEST_PARSE_ERROR("video-invalid", NONE);
1500

1501
    DO_TEST("virtio-rng-default", QEMU_CAPS_DEVICE_VIRTIO_RNG,
1502
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1503
    DO_TEST("virtio-rng-random", QEMU_CAPS_DEVICE_VIRTIO_RNG,
1504
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1505
    DO_TEST("virtio-rng-egd", QEMU_CAPS_DEVICE_VIRTIO_RNG,
1506
            QEMU_CAPS_OBJECT_RNG_EGD);
1507
    DO_TEST("virtio-rng-multiple", QEMU_CAPS_DEVICE_VIRTIO_RNG,
1508
            QEMU_CAPS_OBJECT_RNG_EGD, QEMU_CAPS_OBJECT_RNG_RANDOM);
1509
    DO_TEST_PARSE_ERROR("virtio-rng-egd-crash",
1510
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_EGD);
1511
    DO_TEST("virtio-rng-ccw",
1512
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1513
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_CCW,
1514 1515
            QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1516

1517
    DO_TEST("s390-allow-bogus-usb-none",
1518
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1519
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390,
1520
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
1521
    DO_TEST("s390-allow-bogus-usb-controller",
1522
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1523
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390,
1524 1525
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);

1526 1527 1528 1529 1530 1531 1532 1533 1534 1535
    DO_TEST("s390-panic-no-address",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("s390-panic-address",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST("s390-panic-missing",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);

O
Olivia Yin 已提交
1536
    DO_TEST("ppc-dtb", QEMU_CAPS_KVM, QEMU_CAPS_DTB);
1537
    DO_TEST("ppce500-serial", QEMU_CAPS_KVM, QEMU_CAPS_CHARDEV);
O
Olivia Yin 已提交
1538

1539
    DO_TEST("tpm-passthrough",
1540
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
1541
    DO_TEST_PARSE_ERROR("tpm-no-backend-invalid",
1542
                        QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
1543

1544

1545 1546 1547 1548
    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);
1549

1550 1551
    DO_TEST("pci-autoadd-addr", QEMU_CAPS_DEVICE_PCI_BRIDGE);
    DO_TEST("pci-autoadd-idx", QEMU_CAPS_DEVICE_PCI_BRIDGE);
1552
    DO_TEST("pci-autofill-addr", NONE);
1553
    DO_TEST("pci-many",
1554
            QEMU_CAPS_DEVICE_PCI_BRIDGE);
1555
    DO_TEST("pci-bridge-many-disks",
1556
            QEMU_CAPS_DEVICE_PCI_BRIDGE);
L
Laine Stump 已提交
1557
    DO_TEST("pcie-root",
1558
            QEMU_CAPS_ICH9_AHCI,
1559
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1560 1561
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE);
    DO_TEST("q35",
1562
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1563
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
1564
            QEMU_CAPS_ICH9_AHCI,
1565
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
1566 1567
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
1568
    DO_TEST("q35-pm-disable",
1569
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1570 1571 1572 1573
            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",
1574
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1575 1576
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4);
1577
    DO_TEST("q35-usb2",
1578
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1579 1580 1581 1582 1583 1584
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
    DO_TEST("q35-usb2-multi",
1585
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1586 1587 1588 1589 1590 1591
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
    DO_TEST("q35-usb2-reorder",
1592
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1593 1594 1595 1596 1597
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
1598
    DO_TEST("pcie-root-port",
1599
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1600 1601
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
1602
            QEMU_CAPS_ICH9_AHCI,
1603 1604
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
1605 1606 1607 1608 1609 1610 1611 1612 1613
    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,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_NEC_USB_XHCI);
1614

1615 1616 1617 1618 1619 1620 1621 1622 1623
    DO_TEST_PARSE_ERROR("q35-wrong-root",
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
    DO_TEST_PARSE_ERROR("440fx-wrong-root", NONE);

1624
    DO_TEST_PARSE_ERROR("pcie-root-port-too-many",
1625
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1626 1627
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
1628
            QEMU_CAPS_ICH9_AHCI,
1629 1630
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
1631

1632
    DO_TEST("pcie-switch-upstream-port",
1633
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1634 1635 1636
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
1637
            QEMU_CAPS_ICH9_AHCI,
1638 1639
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
1640
    DO_TEST("pcie-switch-downstream-port",
1641
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1642 1643 1644 1645
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
1646
            QEMU_CAPS_ICH9_AHCI,
1647 1648
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
1649

1650 1651 1652 1653 1654 1655 1656 1657 1658 1659
    DO_TEST("pci-expander-bus",
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PXB);
    DO_TEST_PARSE_ERROR("pci-expander-bus-bad-node",
                        QEMU_CAPS_DEVICE_PCI_BRIDGE,
                        QEMU_CAPS_DEVICE_PXB);
    DO_TEST_PARSE_ERROR("pci-expander-bus-bad-machine",
                        QEMU_CAPS_DEVICE_PCI_BRIDGE,
                        QEMU_CAPS_DEVICE_PXB);

1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674
    DO_TEST("pcie-expander-bus",
            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_DEVICE_PXB_PCIE);
    DO_TEST_PARSE_ERROR("pcie-expander-bus-bad-machine",
                        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_DEVICE_PXB_PCIE);

1675
    DO_TEST("hostdev-scsi-lsi",
1676 1677
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1678
    DO_TEST("hostdev-scsi-virtio-scsi",
1679 1680
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1681
    DO_TEST("hostdev-scsi-readonly",
J
Ján Tomko 已提交
1682
            QEMU_CAPS_VIRTIO_SCSI,
O
Osier Yang 已提交
1683
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_SCSI_GENERIC);
1684
    DO_TEST("hostdev-scsi-virtio-scsi",
1685 1686 1687
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC,
            QEMU_CAPS_DEVICE_SCSI_GENERIC_BOOTINDEX);
1688
    DO_TEST("hostdev-scsi-lsi-iscsi",
J
John Ferlan 已提交
1689 1690
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1691
    DO_TEST("hostdev-scsi-lsi-iscsi-auth",
J
John Ferlan 已提交
1692 1693
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1694
    DO_TEST("hostdev-scsi-virtio-iscsi",
J
John Ferlan 已提交
1695 1696
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1697
    DO_TEST("hostdev-scsi-virtio-iscsi-auth",
J
John Ferlan 已提交
1698 1699
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1700

1701 1702 1703 1704 1705
    DO_TEST("mlock-on", QEMU_CAPS_MLOCK);
    DO_TEST_FAILURE("mlock-on", NONE);
    DO_TEST("mlock-off", QEMU_CAPS_MLOCK);
    DO_TEST("mlock-unsupported", NONE);

1706
    DO_TEST_PARSE_ERROR("pci-bridge-negative-index-invalid",
1707
                        QEMU_CAPS_DEVICE_PCI_BRIDGE);
J
Ján Tomko 已提交
1708
    DO_TEST_PARSE_ERROR("pci-bridge-duplicate-index",
1709
                        QEMU_CAPS_DEVICE_PCI_BRIDGE);
J
Ján Tomko 已提交
1710
    DO_TEST_PARSE_ERROR("pci-root-nonzero-index",
1711
                        QEMU_CAPS_DEVICE_PCI_BRIDGE);
J
Ján Tomko 已提交
1712
    DO_TEST_PARSE_ERROR("pci-root-address",
1713
                        QEMU_CAPS_DEVICE_PCI_BRIDGE);
1714

1715
    DO_TEST("hotplug-base",
1716
            QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_SCSI);
1717

1718 1719
    DO_TEST("pcihole64", QEMU_CAPS_I440FX_PCI_HOLE64_SIZE);
    DO_TEST_FAILURE("pcihole64-none", NONE);
1720
    DO_TEST("pcihole64-q35",
1721
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1722
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
1723
            QEMU_CAPS_ICH9_AHCI,
1724
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1725 1726 1727
            QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_Q35_PCI_HOLE64_SIZE);

1728
    DO_TEST("arm-vexpressa9-nodevs",
1729
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB);
1730
    DO_TEST("arm-vexpressa9-basic",
1731
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB);
1732
    DO_TEST("arm-vexpressa9-virtio",
1733
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
1734
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1735
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
1736
    DO_TEST("arm-virt-virtio",
1737
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
1738
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1739
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
1740

1741
    DO_TEST("aarch64-virt-virtio",
1742
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
1743
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1744
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
1745 1746 1747 1748 1749 1750

    /* 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",
1751
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
1752 1753 1754 1755 1756 1757
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE);
    DO_TEST("aarch64-virt-2.6-virtio-pci-default",
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
1758
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1759 1760 1761
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE);
1762 1763 1764
    /* Example of using virtio-pci with no explicit PCI controller
       but with manual PCI addresses */
    DO_TEST("aarch64-virtio-pci-manual-addresses",
1765
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
1766
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1767 1768 1769
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_VIRTIO_SCSI);
1770
    DO_TEST("aarch64-aavmf-virtio-mmio",
1771
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
1772
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1773
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
1774
    DO_TEST("aarch64-virt-default-nic",
1775
            QEMU_CAPS_NODEFCONFIG,
1776
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
1777
    DO_TEST("aarch64-cpu-passthrough",
1778
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
1779
            QEMU_CAPS_KVM);
1780 1781 1782
    DO_TEST_GIC("aarch64-gic-none", GIC_NONE,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
    DO_TEST_GIC("aarch64-gic-none", GIC_NONE,
A
Andrea Bolognani 已提交
1783
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
1784
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
1785 1786 1787 1788
    DO_TEST_GIC("aarch64-gic-none-v2", GIC_V2,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-none-v3", GIC_V3,
A
Andrea Bolognani 已提交
1789
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
1790
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
1791 1792 1793 1794
    DO_TEST_GIC("aarch64-gic-none-both", GIC_BOTH,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-default", GIC_NONE,
A
Andrea Bolognani 已提交
1795
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
1796 1797 1798 1799
    DO_TEST_GIC("aarch64-gic-default", GIC_NONE,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-default", GIC_V2,
A
Andrea Bolognani 已提交
1800
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
1801
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
1802 1803 1804 1805 1806 1807 1808
    DO_TEST_GIC("aarch64-gic-default", GIC_V3,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-default", GIC_BOTH,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v2", GIC_NONE,
A
Andrea Bolognani 已提交
1809
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
1810 1811 1812 1813 1814 1815 1816
    DO_TEST_GIC("aarch64-gic-v2", GIC_NONE,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v2", GIC_V2,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v2", GIC_V3,
A
Andrea Bolognani 已提交
1817
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
1818
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
1819 1820 1821 1822
    DO_TEST_GIC("aarch64-gic-v2", GIC_BOTH,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_FAILURE("aarch64-gic-v3", GIC_NONE,
A
Andrea Bolognani 已提交
1823
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
1824 1825 1826 1827 1828 1829 1830 1831 1832 1833
    DO_TEST_GIC("aarch64-gic-v3", GIC_NONE,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v3", GIC_V2,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v3", GIC_V3,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v3", GIC_BOTH,
A
Andrea Bolognani 已提交
1834
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
1835
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
1836
    DO_TEST_FAILURE("aarch64-gic-host", GIC_NONE,
A
Andrea Bolognani 已提交
1837
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850
    DO_TEST_GIC("aarch64-gic-host", GIC_NONE,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-host", GIC_V2,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-host", GIC_V3,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-host", GIC_BOTH,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_PARSE_ERROR("aarch64-gic-invalid", GIC_NONE,
A
Andrea Bolognani 已提交
1851
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
1852
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
1853
    DO_TEST_FAILURE("aarch64-gic-not-virt", GIC_NONE,
A
Andrea Bolognani 已提交
1854
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
1855
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
1856
    DO_TEST_FAILURE("aarch64-gic-not-arm", GIC_NONE,
A
Andrea Bolognani 已提交
1857
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
1858
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
1859

1860
    driver.caps->host.cpu->arch = VIR_ARCH_AARCH64;
1861
    DO_TEST("aarch64-kvm-32-on-64",
1862
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
1863
            QEMU_CAPS_KVM, QEMU_CAPS_CPU_AARCH64_OFF);
1864
    DO_TEST_FAILURE("aarch64-kvm-32-on-64",
1865
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
1866
            QEMU_CAPS_KVM);
1867 1868
    driver.caps->host.cpu->arch = cpuDefault->arch;

1869 1870 1871 1872 1873
    DO_TEST("kvm-pit-device", QEMU_CAPS_KVM_PIT_TICK_POLICY);
    DO_TEST("kvm-pit-delay", QEMU_CAPS_NO_KVM_PIT);
    DO_TEST("kvm-pit-device", QEMU_CAPS_NO_KVM_PIT,
            QEMU_CAPS_KVM_PIT_TICK_POLICY);

H
Hu Tao 已提交
1874
    DO_TEST("panic", QEMU_CAPS_DEVICE_PANIC,
1875
            QEMU_CAPS_NODEFCONFIG);
D
Dmitry Andreev 已提交
1876
    DO_TEST("panic-double", QEMU_CAPS_DEVICE_PANIC,
1877
            QEMU_CAPS_NODEFCONFIG);
H
Hu Tao 已提交
1878

1879
    DO_TEST("panic-no-address", QEMU_CAPS_DEVICE_PANIC,
1880
            QEMU_CAPS_NODEFCONFIG);
1881

1882 1883
    DO_TEST("fips-enabled", QEMU_CAPS_ENABLE_FIPS);

J
Ján Tomko 已提交
1884
    DO_TEST("shmem", QEMU_CAPS_DEVICE_IVSHMEM);
1885
    DO_TEST_FAILURE("shmem", NONE);
J
Ján Tomko 已提交
1886
    DO_TEST_FAILURE("shmem-invalid-size",
1887
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
1888
    DO_TEST_FAILURE("shmem-invalid-address",
1889
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
1890
    DO_TEST_FAILURE("shmem-small-size",
1891
                    QEMU_CAPS_DEVICE_IVSHMEM);
1892
    DO_TEST_PARSE_ERROR("shmem-msi-only", NONE);
A
Andrea Bolognani 已提交
1893
    DO_TEST("cpu-host-passthrough-features", QEMU_CAPS_KVM);
1894

1895
    DO_TEST_FAILURE("memory-align-fail", NONE);
1896 1897 1898
    DO_TEST_FAILURE("memory-hotplug-nonuma", QEMU_CAPS_DEVICE_PC_DIMM);
    DO_TEST_FAILURE("memory-hotplug", NONE);
    DO_TEST("memory-hotplug", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA);
1899
    DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
1900
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
1901
    DO_TEST("memory-hotplug-dimm-addr", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
1902
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1903
    DO_TEST("memory-hotplug-ppc64-nonuma", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
1904
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
1905

1906 1907
    DO_TEST("machine-aeskeywrap-on-caps",
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP,
1908
            QEMU_CAPS_DEA_KEY_WRAP,
1909
            QEMU_CAPS_VIRTIO_SCSI,
1910 1911
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps", QEMU_CAPS_MACHINE_OPT,
1912
                    QEMU_CAPS_VIRTIO_SCSI,
1913 1914 1915 1916 1917
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps", NONE);

    DO_TEST("machine-aeskeywrap-on-cap",
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP,
1918
            QEMU_CAPS_VIRTIO_SCSI,
1919 1920
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap", QEMU_CAPS_MACHINE_OPT,
1921
                    QEMU_CAPS_VIRTIO_SCSI,
1922 1923 1924 1925 1926
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap", NONE);

    DO_TEST("machine-aeskeywrap-off-caps",
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
1927
            QEMU_CAPS_VIRTIO_SCSI,
1928 1929
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", QEMU_CAPS_MACHINE_OPT,
1930
                    QEMU_CAPS_VIRTIO_SCSI,
1931 1932 1933 1934
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", NONE);

    DO_TEST("machine-aeskeywrap-off-cap",
1935
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP,
1936
            QEMU_CAPS_VIRTIO_SCSI,
1937 1938
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap", QEMU_CAPS_MACHINE_OPT,
1939
                    QEMU_CAPS_VIRTIO_SCSI,
1940 1941 1942 1943 1944
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap", NONE);

    DO_TEST("machine-deakeywrap-on-caps",
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
1945
            QEMU_CAPS_VIRTIO_SCSI,
1946
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1947
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", QEMU_CAPS_MACHINE_OPT,
1948
                    QEMU_CAPS_VIRTIO_SCSI,
1949 1950 1951 1952
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", NONE);

    DO_TEST("machine-deakeywrap-on-cap",
1953
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_DEA_KEY_WRAP,
1954
            QEMU_CAPS_VIRTIO_SCSI,
1955 1956
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-on-cap", QEMU_CAPS_MACHINE_OPT,
1957
                    QEMU_CAPS_VIRTIO_SCSI,
1958 1959 1960 1961 1962
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-on-cap", NONE);

    DO_TEST("machine-deakeywrap-off-caps",
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
1963
            QEMU_CAPS_VIRTIO_SCSI,
1964 1965
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", QEMU_CAPS_MACHINE_OPT,
1966
                    QEMU_CAPS_VIRTIO_SCSI,
1967 1968 1969 1970
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", NONE);

    DO_TEST("machine-deakeywrap-off-cap",
1971
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_DEA_KEY_WRAP,
1972
            QEMU_CAPS_VIRTIO_SCSI,
1973 1974
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-cap", QEMU_CAPS_MACHINE_OPT,
1975
                    QEMU_CAPS_VIRTIO_SCSI,
1976 1977 1978 1979 1980
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-cap", NONE);

    DO_TEST("machine-keywrap-none-caps",
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
1981
            QEMU_CAPS_VIRTIO_SCSI,
1982 1983
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST("machine-keywrap-none",
1984
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_VIRTIO_SCSI,
1985
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1986

J
Jiri Denemark 已提交
1987 1988 1989 1990 1991 1992 1993
    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);

1994
    DO_TEST("virtio-input", QEMU_CAPS_VIRTIO_KEYBOARD,
1995
            QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET);
1996
    DO_TEST("virtio-input-passthrough", QEMU_CAPS_VIRTIO_INPUT_HOST);
1997

1998
    DO_TEST("ppc64-usb-controller",
1999
            QEMU_CAPS_PCI_OHCI);
2000
    DO_TEST("ppc64-usb-controller-legacy",
2001
            QEMU_CAPS_PIIX3_USB_UHCI);
2002

2003 2004 2005 2006
    DO_TEST_PARSE_FLAGS_ERROR("missing-machine",
                              VIR_DOMAIN_DEF_PARSE_SKIP_OSTYPE_CHECKS,
                              NONE);

2007
    DO_TEST("name-escape", QEMU_CAPS_NAME_DEBUG_THREADS,
2008 2009
            QEMU_CAPS_OBJECT_SECRET, QEMU_CAPS_CHARDEV, QEMU_CAPS_VNC,
            QEMU_CAPS_NAME_GUEST);
M
Marc-André Lureau 已提交
2010 2011
    DO_TEST("debug-threads", QEMU_CAPS_NAME_DEBUG_THREADS);

2012 2013
    DO_TEST("master-key", QEMU_CAPS_OBJECT_SECRET);

2014 2015
    DO_TEST("acpi-table", NONE);

2016
    qemuTestDriverFree(&driver);
2017

2018
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
2019 2020
}

2021 2022
VIRT_TEST_MAIN_PRELOAD(mymain, abs_builddir "/.libs/qemuxml2argvmock.so",
                       abs_builddir "/.libs/virrandommock.so")
2023

2024 2025
#else

2026 2027 2028 2029
int main(void)
{
    return EXIT_AM_SKIP;
}
2030 2031

#endif /* WITH_QEMU */