qemuxml2argvtest.c 91.4 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 31 32 33
# define __QEMU_CAPSRIV_H_ALLOW__
# include "qemu/qemu_capspriv.h"
# undef __QEMU_CAPSRIV_H_ALLOW__

34
# include "testutilsqemu.h"
35

36 37
# define VIR_FROM_THIS VIR_FROM_QEMU

38
static const char *abs_top_srcdir;
39
static virQEMUDriver driver;
40

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

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

73 74 75
    if (virUUIDGenerate(uuid) < 0)
        return NULL;

76
    return virGetSecret(conn, uuid, usageType, usageID);
77 78
}

79 80 81 82 83 84 85
static virSecretPtr
fakeSecretLookupByUUID(virConnectPtr conn,
                       const unsigned char *uuid)
{
    return virGetSecret(conn, uuid, 0, "");
}

86
static virSecretDriver fakeSecretDriver = {
87 88
    .connectNumOfSecrets = NULL,
    .connectListSecrets = NULL,
89
    .secretLookupByUUID = fakeSecretLookupByUUID,
90 91 92 93 94 95
    .secretLookupByUsage = fakeSecretLookupByUsage,
    .secretDefineXML = NULL,
    .secretGetXMLDesc = NULL,
    .secretSetValue = NULL,
    .secretGetValue = fakeSecretGetValue,
    .secretUndefine = NULL,
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 124

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

125
 cleanup:
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 161
    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);

162
 cleanup:
163 164 165
    virStringFreeList(volinfo);
    return ret;

166
 fallback:
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 217
    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;

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

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

265
typedef enum {
266 267 268 269
    FLAG_EXPECT_FAILURE     = 1 << 0,
    FLAG_EXPECT_PARSE_ERROR = 1 << 1,
    FLAG_JSON               = 1 << 2,
    FLAG_FIPS               = 1 << 3,
270 271
} virQemuXML2ArgvTestFlags;

272 273 274 275 276 277 278
struct testInfo {
    const char *name;
    virQEMUCapsPtr qemuCaps;
    const char *migrateFrom;
    int migrateFd;
    unsigned int flags;
    unsigned int parseFlags;
279
    bool skipLegacyCPUs;
280 281
};

282 283 284 285

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

304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321
    if (ARCH_IS_X86(arch)) {
        if (virQEMUCapsAddCPUDefinitions(caps, x86Models,
                                         ARRAY_CARDINALITY(x86Models)) < 0)
            return -1;

        if (!skipLegacy &&
            virQEMUCapsAddCPUDefinitions(caps, x86LegacyModels,
                                         ARRAY_CARDINALITY(x86LegacyModels)) < 0)
            return -1;
    } else if (ARCH_IS_ARM(arch)) {
        if (virQEMUCapsAddCPUDefinitions(caps, armModels,
                                         ARRAY_CARDINALITY(armModels)) < 0)
            return -1;
    } else if (ARCH_IS_PPC64(arch)) {
        if (virQEMUCapsAddCPUDefinitions(caps, ppc64Models,
                                         ARRAY_CARDINALITY(ppc64Models)) < 0)
            return -1;
    }
322 323 324 325 326 327

    return 0;
}


static int
328 329
testInitQEMUCaps(struct testInfo *info,
                 int gic)
330 331 332 333 334 335
{
    int ret = -1;

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

336
    virQEMUCapsSet(info->qemuCaps, QEMU_CAPS_NO_ACPI);
337 338 339 340 341 342 343 344 345 346 347

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

    ret = 0;

 cleanup:
    return ret;
}


348 349
static int
testUpdateQEMUCaps(const struct testInfo *info,
350 351
                   virDomainObjPtr vm,
                   virCapsPtr caps)
352 353 354
{
    int ret = -1;

355 356
    virQEMUCapsSetArch(info->qemuCaps, vm->def->os.arch);

357 358 359
    if (testAddCPUModels(info->qemuCaps, info->skipLegacyCPUs) < 0)
        goto cleanup;

J
Jiri Denemark 已提交
360
    virQEMUCapsInitHostCPUModel(info->qemuCaps, caps);
361

362 363 364 365 366 367 368 369 370 371 372 373
    virQEMUCapsFilterByMachineType(info->qemuCaps, vm->def->os.machine);

    if (ARCH_IS_X86(vm->def->os.arch))
        virQEMUCapsSet(info->qemuCaps, QEMU_CAPS_PCI_MULTIBUS);

    ret = 0;

 cleanup:
    return ret;
}


374 375
static int
testCompareXMLToArgv(const void *data)
376
{
377 378 379 380
    const struct testInfo *info = data;
    char *xml = NULL;
    char *args = NULL;
    char *migrateURI = NULL;
381
    char *actualargv = NULL;
382 383
    unsigned int flags = info->flags;
    unsigned int parseFlags = info->parseFlags;
E
Eric Blake 已提交
384
    int ret = -1;
385
    virDomainObjPtr vm = NULL;
386
    virDomainChrSourceDef monitor_chr;
387
    virConnectPtr conn;
J
Jiri Denemark 已提交
388
    char *log = NULL;
E
Eric Blake 已提交
389
    virCommandPtr cmd = NULL;
390
    size_t i;
391
    qemuDomainObjPrivatePtr priv = NULL;
392

393 394
    memset(&monitor_chr, 0, sizeof(monitor_chr));

395
    if (!(conn = virGetConnect()))
396
        goto cleanup;
397

398
    conn->secretDriver = &fakeSecretDriver;
399
    conn->storageDriver = &fakeStorageDriver;
400

401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421
    if (virQEMUCapsGet(info->qemuCaps, QEMU_CAPS_MONITOR_JSON))
        flags |= FLAG_JSON;

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

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

    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;

    if (info->migrateFrom &&
        !(migrateURI = qemuMigrationIncomingURI(info->migrateFrom,
                                                info->migrateFd)))
        goto cleanup;

422
    if (!(vm = virDomainObjNew(driver.xmlopt)))
423
        goto cleanup;
424

425
    parseFlags |= VIR_DOMAIN_DEF_PARSE_INACTIVE;
426
    if (!(vm->def = virDomainDefParseFile(xml, driver.caps, driver.xmlopt,
427
                                          NULL, parseFlags))) {
P
Pavel Hrdina 已提交
428
        if (flags & FLAG_EXPECT_PARSE_ERROR)
429
            goto ok;
430
        goto cleanup;
431
    }
432
    priv = vm->privateData;
433

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

437
    if (!virDomainDefCheckABIStability(vm->def, vm->def)) {
438
        VIR_TEST_DEBUG("ABI stability check failed on %s", xml);
439
        goto cleanup;
440 441
    }

442
    vm->def->id = -1;
443

444
    if (qemuProcessPrepareMonitorChr(&monitor_chr, priv->libDir) < 0)
445
        goto cleanup;
446

447 448 449 450
    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)
451
            goto cleanup;
452
    }
453

454
    if (testUpdateQEMUCaps(info, vm, driver.caps) < 0)
455
        goto cleanup;
456

457
    log = virTestLogContentAndReset();
458
    VIR_FREE(log);
459
    virResetLastError();
J
Jiri Denemark 已提交
460

461 462
    for (i = 0; i < vm->def->nhostdevs; i++) {
        virDomainHostdevDefPtr hostdev = vm->def->hostdevs[i];
463 464 465 466 467 468 469 470

        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 已提交
471 472 473
    if (!(cmd = qemuProcessCreatePretendCmd(conn, &driver, vm, migrateURI,
                                            (flags & FLAG_FIPS), false,
                                            VIR_QEMU_PROCESS_START_COLD))) {
P
Pavel Hrdina 已提交
474 475
        if (flags & FLAG_EXPECT_FAILURE)
            goto ok;
476
        goto cleanup;
J
Jiri Denemark 已提交
477 478
    }

E
Eric Blake 已提交
479
    if (!(actualargv = virCommandToString(cmd)))
480
        goto cleanup;
E
Eric Blake 已提交
481

482
    if (virTestCompareToFile(actualargv, args) < 0)
483
        goto cleanup;
484

P
Pavel Hrdina 已提交
485 486
    ret = 0;

487
 ok:
488
    if (ret == 0 && flags & FLAG_EXPECT_FAILURE) {
P
Pavel Hrdina 已提交
489 490
        ret = -1;
        VIR_TEST_DEBUG("Error expected but there wasn't any.\n");
491
        goto cleanup;
P
Pavel Hrdina 已提交
492
    }
493
    if (!virTestOOMActive()) {
494
        if (flags & FLAG_EXPECT_FAILURE) {
495
            if ((log = virTestLogContentAndReset()))
P
Pavel Hrdina 已提交
496 497
                VIR_TEST_DEBUG("Got expected error: \n%s", log);
        }
498
        virResetLastError();
P
Pavel Hrdina 已提交
499
        ret = 0;
500 501
    }

502
 cleanup:
503 504
    VIR_FREE(log);
    VIR_FREE(actualargv);
505
    virDomainChrSourceDefClear(&monitor_chr);
E
Eric Blake 已提交
506
    virCommandFree(cmd);
507
    virObjectUnref(vm);
508
    virObjectUnref(conn);
509
    VIR_FREE(migrateURI);
510 511
    VIR_FREE(xml);
    VIR_FREE(args);
512
    return ret;
513 514 515
}


516
static int
E
Eric Blake 已提交
517
mymain(void)
518 519
{
    int ret = 0;
520
    bool skipLegacyCPUs = false;
521

522 523
    abs_top_srcdir = getenv("abs_top_srcdir");
    if (!abs_top_srcdir)
524
        abs_top_srcdir = abs_srcdir "/..";
525

526 527 528 529 530 531 532 533 534 535
    /* 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;
    }

536
    if (qemuTestDriverInit(&driver) < 0)
537
        return EXIT_FAILURE;
538 539

    driver.privileged = true;
540

541 542 543
    VIR_FREE(driver.config->defaultTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->defaultTLSx509certdir, "/etc/pki/qemu") < 0)
        return EXIT_FAILURE;
544
    VIR_FREE(driver.config->vncTLSx509certdir);
545
    if (VIR_STRDUP_QUIET(driver.config->vncTLSx509certdir, "/etc/pki/libvirt-vnc") < 0)
546 547
        return EXIT_FAILURE;
    VIR_FREE(driver.config->spiceTLSx509certdir);
548
    if (VIR_STRDUP_QUIET(driver.config->spiceTLSx509certdir, "/etc/pki/libvirt-spice") < 0)
549
        return EXIT_FAILURE;
550 551 552
    VIR_FREE(driver.config->chardevTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->chardevTLSx509certdir, "/etc/pki/libvirt-chardev") < 0)
        return EXIT_FAILURE;
553

554
    VIR_FREE(driver.config->stateDir);
555
    if (VIR_STRDUP_QUIET(driver.config->stateDir, "/nowhere") < 0)
556
        return EXIT_FAILURE;
557
    VIR_FREE(driver.config->hugetlbfs);
558
    if (VIR_ALLOC_N(driver.config->hugetlbfs, 2) < 0)
559
        return EXIT_FAILURE;
560 561 562
    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)
563
        return EXIT_FAILURE;
564 565
    driver.config->hugetlbfs[0].size = 2048;
    driver.config->hugetlbfs[0].deflt = true;
566
    driver.config->hugetlbfs[1].size = 1048576;
567
    driver.config->spiceTLS = 1;
568
    if (VIR_STRDUP_QUIET(driver.config->spicePassword, "123456") < 0)
569
        return EXIT_FAILURE;
570

571 572 573 574
# define DO_TEST_FULL(name, migrateFrom, migrateFd, flags,               \
                      parseFlags, gic, ...)                              \
    do {                                                                 \
        static struct testInfo info = {                                  \
575 576
            name, NULL, migrateFrom, migrateFd, (flags), parseFlags,     \
            false                                                        \
577
        };                                                               \
578 579
        info.skipLegacyCPUs = skipLegacyCPUs;                            \
        if (testInitQEMUCaps(&info, gic) < 0)                            \
580
            return EXIT_FAILURE;                                         \
581
        virQEMUCapsSetList(info.qemuCaps, __VA_ARGS__, QEMU_CAPS_LAST);  \
582
        if (virTestRun("QEMU XML-2-ARGV " name,                          \
583
                       testCompareXMLToArgv, &info) < 0)                 \
584
            ret = -1;                                                    \
585
        virObjectUnref(info.qemuCaps);                                   \
586 587
    } while (0)

588
# define DO_TEST(name, ...)                                              \
589
    DO_TEST_FULL(name, NULL, -1, 0, 0, GIC_NONE, __VA_ARGS__)
590

591
# define DO_TEST_GIC(name, gic, ...)                                     \
592 593
    DO_TEST_FULL(name, NULL, -1, 0, 0, gic, __VA_ARGS__)

594 595
# define DO_TEST_FAILURE(name, ...)                                      \
    DO_TEST_FULL(name, NULL, -1, FLAG_EXPECT_FAILURE,                    \
596
                 0, GIC_NONE, __VA_ARGS__)
597

598 599 600
# define DO_TEST_PARSE_ERROR(name, ...)                                  \
    DO_TEST_FULL(name, NULL, -1,                                         \
                 FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE,          \
601
                 0, GIC_NONE, __VA_ARGS__)
602

603 604 605
# define DO_TEST_PARSE_FLAGS_ERROR(name, parseFlags, ...)                \
    DO_TEST_FULL(name, NULL, -1,                                         \
                 FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE,          \
606
                 parseFlags, GIC_NONE, __VA_ARGS__)
607

608
# define DO_TEST_LINUX(name, ...)                                        \
609
    DO_TEST_LINUX_FULL(name, NULL, -1, 0, 0, GIC_NONE, __VA_ARGS__)
610

611 612 613 614 615 616
# 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. */
617
#  define DO_TEST_LINUX_FULL(name, ...)                                  \
618
    DO_TEST_FULL(name, __VA_ARGS__)
619
# else  /* __linux__ */
620 621 622
#  define DO_TEST_LINUX_FULL(name, ...)                                  \
    do {                                                                 \
        const char *tmp ATTRIBUTE_UNUSED = name;                         \
623 624 625
    } while (0)
# endif /* __linux__ */

626
# define NONE QEMU_CAPS_LAST
627

628 629 630
    /* 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 */
631 632 633 634 635 636 637
    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");
638 639
    unsetenv("QEMU_AUDIO_DRV");
    unsetenv("SDL_AUDIODRIVER");
640

641
    DO_TEST("minimal", NONE);
642
    DO_TEST_PARSE_ERROR("minimal-no-memory", NONE);
643
    DO_TEST("minimal-msg-timestamp", QEMU_CAPS_MSG_TIMESTAMP);
644
    DO_TEST("machine-aliases1", NONE);
645
    DO_TEST("machine-aliases2", QEMU_CAPS_KVM);
646 647
    DO_TEST("machine-core-on", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_DUMP_GUEST_CORE);
648
    driver.config->dumpGuestCore = true;
649 650
    DO_TEST("machine-core-off", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_DUMP_GUEST_CORE);
651 652 653
    driver.config->dumpGuestCore = false;
    DO_TEST("machine-core-cfg-off", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_DUMP_GUEST_CORE);
654
    DO_TEST_FAILURE("machine-core-on", NONE);
655
    DO_TEST_FAILURE("machine-core-on", QEMU_CAPS_MACHINE_OPT);
M
Michal Privoznik 已提交
656 657 658 659 660 661 662
    DO_TEST("machine-smm-opt",
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_SMM_OPT,
            QEMU_CAPS_VIRTIO_SCSI);
L
Li Zhang 已提交
663 664
    DO_TEST("machine-usb-opt", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_USB_OPT);
665 666
    DO_TEST("machine-vmport-opt", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_VMPORT_OPT);
667
    DO_TEST("kvm", QEMU_CAPS_MACHINE_OPT);
668 669
    DO_TEST("default-kvm-host-arch", QEMU_CAPS_MACHINE_OPT);
    DO_TEST("default-qemu-host-arch", QEMU_CAPS_MACHINE_OPT);
670 671 672
    DO_TEST("boot-cdrom", NONE);
    DO_TEST("boot-network", NONE);
    DO_TEST("boot-floppy", NONE);
673
    DO_TEST("boot-floppy-q35",
674
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
675
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
676
            QEMU_CAPS_ICH9_AHCI);
677
    DO_TEST("bootindex-floppy-q35",
678
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
679
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
680
            QEMU_CAPS_ICH9_AHCI, QEMU_CAPS_BOOT_MENU,
681
            QEMU_CAPS_BOOTINDEX);
682 683
    DO_TEST("boot-multi", QEMU_CAPS_BOOT_MENU);
    DO_TEST("boot-menu-enable",
684
            QEMU_CAPS_BOOT_MENU);
685
    DO_TEST("boot-menu-enable-bootindex",
686
            QEMU_CAPS_BOOT_MENU,
687
            QEMU_CAPS_BOOTINDEX);
688
    DO_TEST("boot-menu-enable-with-timeout",
689
            QEMU_CAPS_BOOT_MENU,
690
            QEMU_CAPS_SPLASH_TIMEOUT);
691
    DO_TEST_FAILURE("boot-menu-enable-with-timeout", QEMU_CAPS_BOOT_MENU);
692
    DO_TEST_PARSE_ERROR("boot-menu-enable-with-timeout-invalid", NONE);
693 694
    DO_TEST("boot-menu-disable", QEMU_CAPS_BOOT_MENU);
    DO_TEST("boot-menu-disable-drive",
695
            QEMU_CAPS_BOOT_MENU);
696
    DO_TEST("boot-menu-disable-drive-bootindex",
697
            QEMU_CAPS_BOOT_MENU,
698
            QEMU_CAPS_BOOTINDEX);
699
    DO_TEST_PARSE_ERROR("boot-dev+order",
700
            QEMU_CAPS_BOOTINDEX,
701
            QEMU_CAPS_VIRTIO_BLK_SCSI);
702
    DO_TEST("boot-order",
703
            QEMU_CAPS_BOOTINDEX,
704
            QEMU_CAPS_VIRTIO_BLK_SCSI);
705
    DO_TEST("boot-complex",
706
            QEMU_CAPS_DRIVE_BOOT,
707
            QEMU_CAPS_VIRTIO_BLK_SCSI);
708
    DO_TEST("boot-complex-bootindex",
709
            QEMU_CAPS_DRIVE_BOOT,
710
            QEMU_CAPS_BOOTINDEX,
711
            QEMU_CAPS_VIRTIO_BLK_SCSI);
712
    DO_TEST("boot-strict",
713
            QEMU_CAPS_DRIVE_BOOT,
714
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_BOOT_STRICT,
715
            QEMU_CAPS_VIRTIO_BLK_SCSI);
716 717 718 719 720

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

721
    DO_TEST("bios", QEMU_CAPS_SGA);
J
Ján Tomko 已提交
722
    DO_TEST("bios-nvram", NONE);
M
Michal Privoznik 已提交
723 724 725 726 727 728 729
    DO_TEST("bios-nvram-secure",
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_SMM_OPT,
            QEMU_CAPS_VIRTIO_SCSI);
730
    DO_TEST("clock-utc", QEMU_CAPS_NODEFCONFIG);
731
    DO_TEST("clock-localtime", NONE);
732
    DO_TEST("clock-localtime-basis-localtime", QEMU_CAPS_RTC);
733 734
    DO_TEST("clock-variable", QEMU_CAPS_RTC);
    DO_TEST("clock-france", QEMU_CAPS_RTC);
735 736
    DO_TEST("clock-hpet-off", QEMU_CAPS_RTC, QEMU_CAPS_NO_HPET,
            QEMU_CAPS_NO_KVM_PIT);
737
    DO_TEST("clock-catchup", QEMU_CAPS_RTC, QEMU_CAPS_NO_KVM_PIT);
738
    DO_TEST("cpu-kvmclock", QEMU_CAPS_ENABLE_KVM);
A
Andrea Bolognani 已提交
739
    DO_TEST("cpu-host-kvmclock", QEMU_CAPS_ENABLE_KVM);
740
    DO_TEST("kvmclock", QEMU_CAPS_KVM);
741
    DO_TEST("clock-timer-hyperv-rtc", QEMU_CAPS_KVM);
742

743 744
    DO_TEST("cpu-eoi-disabled", QEMU_CAPS_ENABLE_KVM);
    DO_TEST("cpu-eoi-enabled", QEMU_CAPS_ENABLE_KVM);
J
Ján Tomko 已提交
745
    DO_TEST("controller-order",
746
            QEMU_CAPS_KVM, QEMU_CAPS_ENABLE_KVM,
747 748 749
            QEMU_CAPS_BOOT_MENU, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_DRIVE_AIO,
            QEMU_CAPS_CCID_PASSTHRU, QEMU_CAPS_CHARDEV,
750
            QEMU_CAPS_CHARDEV_SPICEVMC, QEMU_CAPS_SPICE,
751 752
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
753 754
    DO_TEST("eoi-disabled", NONE);
    DO_TEST("eoi-enabled", NONE);
755 756
    DO_TEST("pv-spinlock-disabled", NONE);
    DO_TEST("pv-spinlock-enabled", NONE);
M
Martin Kletzander 已提交
757
    DO_TEST("kvmclock+eoi-disabled", QEMU_CAPS_ENABLE_KVM);
758

759
    DO_TEST("hyperv", NONE);
760
    DO_TEST("hyperv-off", NONE);
761
    DO_TEST("hyperv-panic", NONE);
762

763 764 765
    DO_TEST("kvm-features", NONE);
    DO_TEST("kvm-features-off", NONE);

766 767 768
    DO_TEST("pmu-feature", NONE);
    DO_TEST("pmu-feature-off", NONE);

769
    DO_TEST("hugepages", QEMU_CAPS_MEM_PATH);
770
    DO_TEST("hugepages-numa", QEMU_CAPS_RTC, QEMU_CAPS_NO_KVM_PIT,
771
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4,
772
            QEMU_CAPS_VIRTIO_SCSI,
773 774
            QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC,
775
            QEMU_CAPS_DEVICE_QXL,
776
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_USB_REDIR,
777
            QEMU_CAPS_DEVICE_PC_DIMM,
778
            QEMU_CAPS_MEM_PATH, QEMU_CAPS_OBJECT_MEMORY_FILE);
779 780 781
    DO_TEST_LINUX("hugepages-pages", QEMU_CAPS_MEM_PATH,
                  QEMU_CAPS_OBJECT_MEMORY_RAM,
                  QEMU_CAPS_OBJECT_MEMORY_FILE);
782 783 784 785
    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);
786 787 788
    DO_TEST_LINUX("hugepages-shared", QEMU_CAPS_MEM_PATH,
                  QEMU_CAPS_OBJECT_MEMORY_RAM,
                  QEMU_CAPS_OBJECT_MEMORY_FILE);
789
    DO_TEST_PARSE_ERROR("hugepages-memaccess-invalid", NONE);
790 791
    DO_TEST_FAILURE("hugepages-pages4", QEMU_CAPS_MEM_PATH,
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
792
    DO_TEST("hugepages-pages5", QEMU_CAPS_MEM_PATH);
793
    DO_TEST("hugepages-pages6", NONE);
794
    DO_TEST("nosharepages", QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_MEM_MERGE);
795
    DO_TEST("disk-cdrom", NONE);
796
    DO_TEST("disk-iscsi", NONE);
797 798 799 800 801
    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);
802
    DO_TEST("disk-cdrom-empty", NONE);
803
    DO_TEST("disk-cdrom-tray",
804
            QEMU_CAPS_VIRTIO_TX_ALG);
805 806
    DO_TEST("disk-cdrom-tray-no-device-cap", NONE);
    DO_TEST("disk-floppy", NONE);
807
    DO_TEST_FAILURE("disk-floppy-pseries", NONE);
808
    DO_TEST("disk-floppy-tray-no-device-cap", NONE);
809
    DO_TEST("disk-floppy-tray", NONE);
810
    DO_TEST("disk-virtio-s390",
811
            QEMU_CAPS_VIRTIO_S390);
812
    DO_TEST("disk-many", NONE);
813 814
    DO_TEST("disk-virtio", QEMU_CAPS_DRIVE_BOOT);
    DO_TEST("disk-virtio-ccw",
815
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
816
    DO_TEST("disk-virtio-ccw-many",
817
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
818
    DO_TEST("disk-virtio-scsi-ccw", QEMU_CAPS_VIRTIO_SCSI,
819
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
820
    DO_TEST("disk-order",
821
            QEMU_CAPS_DRIVE_BOOT, QEMU_CAPS_VIRTIO_BLK_SCSI);
822
    DO_TEST("disk-drive-boot-disk",
823
            QEMU_CAPS_DRIVE_BOOT);
824
    DO_TEST("disk-drive-boot-cdrom",
825
            QEMU_CAPS_DRIVE_BOOT);
826
    DO_TEST("floppy-drive-fat",
827
            QEMU_CAPS_DRIVE_BOOT);
828
    DO_TEST("disk-drive-readonly-disk",
829
            QEMU_CAPS_NODEFCONFIG);
830
    DO_TEST("disk-drive-readonly-no-device",
J
Ján Tomko 已提交
831
            QEMU_CAPS_NODEFCONFIG);
832
    DO_TEST("disk-drive-fmt-qcow",
833
            QEMU_CAPS_DRIVE_BOOT);
834
    DO_TEST("disk-drive-shared",
835
            QEMU_CAPS_DRIVE_SERIAL);
836
    DO_TEST("disk-drive-error-policy-stop",
837
            QEMU_CAPS_MONITOR_JSON);
838
    DO_TEST("disk-drive-error-policy-enospace",
839
            QEMU_CAPS_MONITOR_JSON);
840
    DO_TEST("disk-drive-error-policy-wreport-rignore",
841 842 843 844
            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);
845
    DO_TEST("disk-drive-cache-directsync",
846
            QEMU_CAPS_DRIVE_CACHE_DIRECTSYNC);
847
    DO_TEST("disk-drive-cache-unsafe",
848
            QEMU_CAPS_DRIVE_CACHE_UNSAFE);
849
    DO_TEST("disk-drive-copy-on-read",
850 851 852 853 854 855 856 857
            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);
858 859
    DO_TEST("disk-drive-network-iscsi-lun",
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_VIRTIO_SCSI,
860
            QEMU_CAPS_SCSI_BLOCK);
861 862
    DO_TEST("disk-drive-network-gluster",
            QEMU_CAPS_GLUSTER_DEBUG_LEVEL);
863 864 865
    DO_TEST("disk-drive-network-rbd", NONE);
    DO_TEST("disk-drive-network-sheepdog", NONE);
    DO_TEST("disk-drive-network-rbd-auth", NONE);
866
# ifdef HAVE_GNUTLS_CIPHER_ENCRYPT
867
    DO_TEST("disk-drive-network-rbd-auth-AES",
868
            QEMU_CAPS_OBJECT_SECRET, QEMU_CAPS_VIRTIO_SCSI);
869
# endif
870 871
    DO_TEST("disk-drive-network-rbd-ipv6", NONE);
    DO_TEST_FAILURE("disk-drive-network-rbd-no-colon", NONE);
872
    DO_TEST("disk-drive-no-boot",
873
            QEMU_CAPS_BOOTINDEX);
874
    DO_TEST_PARSE_ERROR("disk-device-lun-type-invalid",
875 876
                        QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST_FAILURE("disk-usb-nosupport", NONE);
877
    DO_TEST("disk-usb-device",
878
            QEMU_CAPS_DEVICE_USB_STORAGE,
879
            QEMU_CAPS_NODEFCONFIG);
880
    DO_TEST("disk-usb-device-removable",
881
            QEMU_CAPS_DEVICE_USB_STORAGE,
882
            QEMU_CAPS_USB_STORAGE_REMOVABLE, QEMU_CAPS_NODEFCONFIG);
883 884
    DO_TEST_FAILURE("disk-usb-pci",
                    QEMU_CAPS_DEVICE_USB_STORAGE, QEMU_CAPS_NODEFCONFIG);
885
    DO_TEST("disk-scsi-device",
886
            QEMU_CAPS_NODEFCONFIG,
887
            QEMU_CAPS_SCSI_LSI);
888
    DO_TEST("disk-scsi-device-auto",
889
            QEMU_CAPS_NODEFCONFIG,
890
            QEMU_CAPS_SCSI_LSI);
891
    DO_TEST("disk-scsi-disk-split",
892
            QEMU_CAPS_NODEFCONFIG,
893
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI);
894
    DO_TEST("disk-scsi-disk-wwn",
895
            QEMU_CAPS_NODEFCONFIG,
896
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
897 898
            QEMU_CAPS_SCSI_DISK_WWN);
    DO_TEST("disk-scsi-disk-vpd",
899
            QEMU_CAPS_NODEFCONFIG,
900
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
901 902
            QEMU_CAPS_SCSI_DISK_WWN);
    DO_TEST_FAILURE("disk-scsi-disk-vpd-build-error",
903
            QEMU_CAPS_NODEFCONFIG,
904
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
905
            QEMU_CAPS_SCSI_DISK_WWN);
906
    DO_TEST("disk-scsi-vscsi",
907
            QEMU_CAPS_NODEFCONFIG);
908
    DO_TEST("disk-scsi-virtio-scsi",
909
            QEMU_CAPS_NODEFCONFIG,
910
            QEMU_CAPS_VIRTIO_SCSI);
911
    DO_TEST("disk-virtio-scsi-num_queues",
912
            QEMU_CAPS_NODEFCONFIG,
913
            QEMU_CAPS_VIRTIO_SCSI);
914
    DO_TEST("disk-virtio-scsi-cmd_per_lun",
915
            QEMU_CAPS_NODEFCONFIG,
916 917
            QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST("disk-virtio-scsi-max_sectors",
918
            QEMU_CAPS_NODEFCONFIG,
919
            QEMU_CAPS_VIRTIO_SCSI);
920
    DO_TEST("disk-virtio-scsi-ioeventfd",
921
            QEMU_CAPS_NODEFCONFIG,
922
            QEMU_CAPS_VIRTIO_IOEVENTFD, QEMU_CAPS_VIRTIO_SCSI);
923
    DO_TEST("disk-scsi-megasas",
924
            QEMU_CAPS_NODEFCONFIG,
925
            QEMU_CAPS_SCSI_MEGASAS);
926 927 928 929
    DO_TEST("disk-scsi-mptsas1068",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_SCSI_MPTSAS1068,
            QEMU_CAPS_SCSI_DISK_WWN);
930
    DO_TEST("disk-sata-device",
J
Jim Fehlig 已提交
931
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_ICH9_AHCI);
932
    DO_TEST("disk-aio",
933
            QEMU_CAPS_DRIVE_AIO);
934
    DO_TEST("disk-source-pool",
935
            QEMU_CAPS_NODEFCONFIG);
936
    DO_TEST("disk-source-pool-mode",
937
            QEMU_CAPS_NODEFCONFIG);
938
    DO_TEST("disk-ioeventfd",
939
            QEMU_CAPS_VIRTIO_IOEVENTFD,
940
            QEMU_CAPS_VIRTIO_TX_ALG,
941
            QEMU_CAPS_VIRTIO_BLK_SCSI);
942
    DO_TEST("disk-copy_on_read",
943
            QEMU_CAPS_DRIVE_COPY_ON_READ,
944
            QEMU_CAPS_VIRTIO_TX_ALG,
945
            QEMU_CAPS_VIRTIO_BLK_SCSI);
O
Osier Yang 已提交
946
    DO_TEST("disk-drive-discard",
947
            QEMU_CAPS_DRIVE_DISCARD);
948 949 950
    DO_TEST("disk-drive-detect-zeroes",
            QEMU_CAPS_DRIVE_DISCARD,
            QEMU_CAPS_DRIVE_DETECT_ZEROES);
951
    DO_TEST("disk-snapshot", NONE);
952 953 954
    DO_TEST_PARSE_ERROR("disk-same-targets",
                        QEMU_CAPS_SCSI_LSI,
                        QEMU_CAPS_DEVICE_USB_STORAGE, QEMU_CAPS_NODEFCONFIG);
955
    DO_TEST("event_idx",
956 957
            QEMU_CAPS_VIRTIO_BLK_EVENT_IDX,
            QEMU_CAPS_VIRTIO_NET_EVENT_IDX,
958
            QEMU_CAPS_VIRTIO_BLK_SCSI);
959
    DO_TEST("virtio-lun",
960
            QEMU_CAPS_VIRTIO_BLK_SCSI);
961
    DO_TEST("disk-scsi-lun-passthrough",
962
            QEMU_CAPS_SCSI_BLOCK,
963
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI);
964 965 966
    DO_TEST("disk-serial",
            QEMU_CAPS_KVM,
            QEMU_CAPS_DRIVE_SERIAL);
967

968 969 970 971 972 973 974 975 976 977
    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);
    DO_TEST("graphics-vnc-websocket", QEMU_CAPS_VNC, QEMU_CAPS_VNC_WEBSOCKET,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("graphics-vnc-policy", QEMU_CAPS_VNC, QEMU_CAPS_VNC_SHARE_POLICY,
            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);
978
    driver.config->vncAutoUnixSocket = true;
979 980
    DO_TEST("graphics-vnc-auto-socket-cfg", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
981
    driver.config->vncAutoUnixSocket = false;
982 983 984 985
    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);
986

987 988
    driver.config->vncSASL = 1;
    VIR_FREE(driver.config->vncSASLdir);
989
    ignore_value(VIR_STRDUP(driver.config->vncSASLdir, "/root/.sasl2"));
990
    DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
991 992
    driver.config->vncTLS = 1;
    driver.config->vncTLSx509verify = 1;
993
    DO_TEST("graphics-vnc-tls", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
994
    driver.config->vncSASL = driver.config->vncTLSx509verify = driver.config->vncTLS = 0;
995 996
    VIR_FREE(driver.config->vncSASLdir);
    VIR_FREE(driver.config->vncTLSx509certdir);
997

998 999 1000
    DO_TEST("graphics-sdl", QEMU_CAPS_SDL, QEMU_CAPS_DEVICE_VGA);
    DO_TEST("graphics-sdl-fullscreen", QEMU_CAPS_SDL,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1001
    DO_TEST("nographics", NONE);
P
Paolo Bonzini 已提交
1002 1003
    DO_TEST("nographics-display",
            QEMU_CAPS_DISPLAY);
1004
    DO_TEST("nographics-vga",
1005
            QEMU_CAPS_VGA_NONE);
1006
    DO_TEST("graphics-spice",
1007
            QEMU_CAPS_SPICE,
1008 1009
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
1010
    DO_TEST("graphics-spice-no-args",
1011
            QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1012 1013 1014
    driver.config->spiceSASL = 1;
    ignore_value(VIR_STRDUP(driver.config->spiceSASLdir, "/root/.sasl2"));
    DO_TEST("graphics-spice-sasl",
1015
            QEMU_CAPS_SPICE,
1016 1017 1018
            QEMU_CAPS_DEVICE_QXL);
    VIR_FREE(driver.config->spiceSASLdir);
    driver.config->spiceSASL = 0;
1019
    DO_TEST("graphics-spice-agentmouse",
1020
            QEMU_CAPS_DEVICE_QXL,
1021
            QEMU_CAPS_SPICE,
1022
            QEMU_CAPS_CHARDEV_SPICEVMC,
1023 1024
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1025
    DO_TEST("graphics-spice-compression",
1026
            QEMU_CAPS_SPICE,
1027
            QEMU_CAPS_DEVICE_QXL);
1028
    DO_TEST("graphics-spice-timeout",
1029
            QEMU_CAPS_KVM,
1030
            QEMU_CAPS_SPICE,
1031 1032
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_DEVICE_VGA);
1033
    DO_TEST("graphics-spice-qxl-vga",
1034
            QEMU_CAPS_SPICE,
1035
            QEMU_CAPS_DEVICE_QXL);
1036
    DO_TEST("graphics-spice-usb-redir",
1037
            QEMU_CAPS_SPICE,
1038
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1039 1040
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_USB_REDIR,
1041
            QEMU_CAPS_CHARDEV_SPICEVMC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1042
    DO_TEST("graphics-spice-agent-file-xfer",
1043
            QEMU_CAPS_SPICE,
1044 1045
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
1046 1047
    DO_TEST("graphics-spice-socket",
            QEMU_CAPS_SPICE,
1048 1049
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1050 1051
    DO_TEST("graphics-spice-auto-socket",
            QEMU_CAPS_SPICE,
1052 1053
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1054 1055 1056
    driver.config->spiceAutoUnixSocket = true;
    DO_TEST("graphics-spice-auto-socket-cfg",
            QEMU_CAPS_SPICE,
1057 1058
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1059
    driver.config->spiceAutoUnixSocket = false;
1060

1061 1062 1063
    DO_TEST("input-usbmouse", NONE);
    DO_TEST("input-usbtablet", NONE);
    DO_TEST("misc-acpi", NONE);
1064 1065 1066
    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);
1067
    DO_TEST_FAILURE("misc-enable-s4", NONE);
1068
    DO_TEST("misc-no-reboot", NONE);
1069
    DO_TEST("misc-uuid", NONE);
1070
    DO_TEST_PARSE_ERROR("vhost_queues-invalid", NONE);
1071
    DO_TEST("net-vhostuser", QEMU_CAPS_NETDEV);
1072
    DO_TEST("net-vhostuser-multiq",
1073 1074
            QEMU_CAPS_NETDEV, QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
    DO_TEST_FAILURE("net-vhostuser-multiq", QEMU_CAPS_NETDEV);
1075 1076 1077
    DO_TEST_FAILURE("net-vhostuser-fail",
                    QEMU_CAPS_NETDEV,
                    QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
1078 1079 1080
    DO_TEST("net-user", NONE);
    DO_TEST("net-virtio", NONE);
    DO_TEST("net-virtio-device",
1081
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_VIRTIO_TX_ALG);
1082
    DO_TEST("net-virtio-disable-offloads",
1083
            QEMU_CAPS_NODEFCONFIG);
1084
    DO_TEST("net-virtio-netdev",
1085
            QEMU_CAPS_NETDEV, QEMU_CAPS_NODEFCONFIG);
1086
    DO_TEST("net-virtio-s390",
1087
            QEMU_CAPS_VIRTIO_S390);
1088
    DO_TEST("net-virtio-ccw",
1089
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1090 1091
    DO_TEST("net-virtio-rxqueuesize",
            QEMU_CAPS_VIRTIO_NET_RX_QUEUE_SIZE);
1092
    DO_TEST_PARSE_ERROR("net-virtio-rxqueuesize-invalid-size", NONE);
1093 1094
    DO_TEST("net-eth", NONE);
    DO_TEST("net-eth-ifname", NONE);
1095
    DO_TEST("net-eth-names", NONE);
1096
    DO_TEST("net-eth-hostip", NONE);
1097 1098 1099
    DO_TEST("net-client", NONE);
    DO_TEST("net-server", NONE);
    DO_TEST("net-mcast", NONE);
1100
    DO_TEST("net-udp", NONE);
1101
    DO_TEST("net-hostdev",
J
Ján Tomko 已提交
1102
            QEMU_CAPS_NODEFCONFIG);
1103
    DO_TEST("net-hostdev-multidomain",
J
Ján Tomko 已提交
1104
            QEMU_CAPS_NODEFCONFIG,
1105 1106 1107
            QEMU_CAPS_HOST_PCI_MULTIDOMAIN);
    DO_TEST_FAILURE("net-hostdev-multidomain",
                    QEMU_CAPS_NODEFCONFIG);
1108
    DO_TEST("net-hostdev-vfio",
J
Ján Tomko 已提交
1109
            QEMU_CAPS_NODEFCONFIG,
1110
            QEMU_CAPS_DEVICE_VFIO_PCI);
1111
    DO_TEST("net-hostdev-vfio-multidomain",
J
Ján Tomko 已提交
1112
            QEMU_CAPS_NODEFCONFIG,
1113 1114 1115
            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);
1116 1117 1118 1119
    DO_TEST_FAILURE("net-hostdev-fail",
                    QEMU_CAPS_NODEFCONFIG,
                    QEMU_CAPS_DEVICE_VFIO_PCI);

1120

1121 1122 1123 1124
    DO_TEST("serial-vc", NONE);
    DO_TEST("serial-pty", NONE);
    DO_TEST("serial-dev", NONE);
    DO_TEST("serial-file", NONE);
1125 1126
    DO_TEST("serial-file-log", QEMU_CAPS_CHARDEV, QEMU_CAPS_CHARDEV_FILE_APPEND,
            QEMU_CAPS_CHARDEV_LOGFILE);
1127 1128 1129 1130 1131
    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);
1132
    DO_TEST("serial-spiceport",
1133
            QEMU_CAPS_CHARDEV,
1134
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1135
            QEMU_CAPS_DEVICE_QXL,
1136
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEPORT);
1137
    DO_TEST("serial-spiceport-nospice", NONE);
1138

1139 1140 1141 1142 1143
    DO_TEST("parallel-tcp", NONE);
    DO_TEST("console-compat", NONE);
    DO_TEST("console-compat-auto", NONE);

    DO_TEST("serial-vc-chardev",
1144
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1145
    DO_TEST("serial-pty-chardev",
1146
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1147
    DO_TEST("serial-dev-chardev",
1148
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1149
    DO_TEST("serial-dev-chardev-iobase",
1150
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1151
    DO_TEST("serial-file-chardev",
1152
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1153
            QEMU_CAPS_CHARDEV_FILE_APPEND);
1154
    DO_TEST("serial-unix-chardev",
1155
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1156
    DO_TEST("serial-tcp-chardev",
1157
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1158
    DO_TEST("serial-udp-chardev",
1159
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1160
    DO_TEST("serial-tcp-telnet-chardev",
1161
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1162 1163 1164 1165
    driver.config->chardevTLS = 1;
    DO_TEST("serial-tcp-tlsx509-chardev",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1166 1167 1168 1169 1170
    driver.config->chardevTLSx509verify = 1;
    DO_TEST("serial-tcp-tlsx509-chardev-verify",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
    driver.config->chardevTLSx509verify = 0;
1171 1172 1173
    DO_TEST("serial-tcp-tlsx509-chardev-notls",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190
    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;
# ifdef HAVE_GNUTLS_CIPHER_ENCRYPT
    DO_TEST("serial-tcp-tlsx509-secret-chardev",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_OBJECT_SECRET,
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
# else
    DO_TEST_FAILURE("serial-tcp-tlsx509-secret-chardev",
                    QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
                    QEMU_CAPS_OBJECT_SECRET,
                    QEMU_CAPS_OBJECT_TLS_CREDS_X509);
# endif
1191 1192
    driver.config->chardevTLS = 0;
    VIR_FREE(driver.config->chardevTLSx509certdir);
1193
    DO_TEST("serial-many-chardev",
1194
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1195
    DO_TEST("parallel-tcp-chardev",
1196
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1197
    DO_TEST("parallel-parport-chardev",
1198
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1199
    DO_TEST("console-compat-chardev",
1200
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
M
Michal Privoznik 已提交
1201
    DO_TEST("pci-serial-dev-chardev",
1202
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
M
Michal Privoznik 已提交
1203
            QEMU_CAPS_DEVICE_PCI_SERIAL);
1204

1205
    DO_TEST("channel-guestfwd",
1206
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1207
    DO_TEST("channel-virtio",
1208
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1209
    DO_TEST("channel-virtio-state",
1210
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1211
    DO_TEST("channel-virtio-auto",
1212
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1213
    DO_TEST("channel-virtio-autoassign",
1214
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
J
Ján Tomko 已提交
1215
    DO_TEST("channel-virtio-autoadd",
1216
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1217
    DO_TEST("console-virtio",
1218
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1219
    DO_TEST("console-virtio-many",
1220
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1221
    DO_TEST("console-virtio-s390",
1222
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1223
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390);
1224
    DO_TEST("console-virtio-ccw",
1225
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1226
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_CCW,
1227
            QEMU_CAPS_VIRTIO_S390);
1228
    DO_TEST("console-sclp",
1229
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1230
            QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_SCLP_S390);
1231
    DO_TEST("channel-spicevmc",
1232
            QEMU_CAPS_NODEFCONFIG,
1233 1234
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1235
    DO_TEST("channel-spicevmc-old",
1236
            QEMU_CAPS_NODEFCONFIG,
1237 1238
            QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_SPICEVMC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1239
    DO_TEST("channel-virtio-default",
1240
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1241
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC);
1242
    DO_TEST("channel-virtio-unix",
1243
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1244

1245
    DO_TEST("smartcard-host",
1246
            QEMU_CAPS_CHARDEV,
1247
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);
1248
    DO_TEST("smartcard-host-certificates",
1249
            QEMU_CAPS_CHARDEV,
1250
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);
1251
    DO_TEST("smartcard-passthrough-tcp",
1252
            QEMU_CAPS_CHARDEV,
1253
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_PASSTHRU);
1254
    DO_TEST("smartcard-passthrough-spicevmc",
1255
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1256
            QEMU_CAPS_CCID_PASSTHRU, QEMU_CAPS_CHARDEV_SPICEVMC);
1257
    DO_TEST("smartcard-controller",
1258
            QEMU_CAPS_CHARDEV,
1259 1260
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);

1261
    DO_TEST("usb-controller",
1262
            QEMU_CAPS_CHARDEV,
1263
            QEMU_CAPS_NODEFCONFIG);
1264
    DO_TEST("usb-piix3-controller",
1265
            QEMU_CAPS_CHARDEV, QEMU_CAPS_PIIX3_USB_UHCI,
1266
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_NODEFCONFIG);
1267
    DO_TEST("usb-ich9-ehci-addr",
1268
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1269
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1);
1270
    DO_TEST("input-usbmouse-addr",
1271
            QEMU_CAPS_NODEFCONFIG);
1272
    DO_TEST("usb-ich9-companion",
1273
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1274
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1);
1275
    DO_TEST_PARSE_ERROR("usb-ich9-no-companion",
1276
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1277
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1);
1278 1279 1280 1281
    DO_TEST("usb-ich9-autoassign",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_HUB);
1282
    DO_TEST("usb-hub",
1283
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
M
Marc-André Lureau 已提交
1284
            QEMU_CAPS_NODEFCONFIG);
1285 1286 1287
    DO_TEST("usb-hub-autoadd",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
J
Ján Tomko 已提交
1288 1289 1290
    DO_TEST_PARSE_ERROR("usb-hub-conflict",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
1291 1292 1293
    DO_TEST_PARSE_ERROR("usb-hub-nonexistent",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
J
Ján Tomko 已提交
1294 1295 1296
    DO_TEST("usb-port-missing",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
1297
    DO_TEST("usb-ports",
1298
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
1299
            QEMU_CAPS_NODEFCONFIG);
1300 1301 1302
    DO_TEST("usb-port-autoassign",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
1303
    DO_TEST("usb-redir",
1304
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1305
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB,
1306 1307
            QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC);
1308
    DO_TEST("usb-redir-boot",
1309
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1310 1311 1312 1313
            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);
1314
    DO_TEST("usb-redir-filter",
1315
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1316 1317 1318 1319
            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);
1320
    DO_TEST("usb-redir-filter-version",
1321
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1322 1323 1324
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC,
            QEMU_CAPS_USB_REDIR_FILTER);
1325
    DO_TEST("usb1-usb2",
1326
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1327 1328
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_USB_HUB, QEMU_CAPS_ICH9_USB_EHCI1);
1329
    DO_TEST("usb-none",
1330
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1331
    DO_TEST_PARSE_ERROR("usb-none-other",
1332
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1333
    DO_TEST_PARSE_ERROR("usb-none-hub",
1334
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1335 1336
            QEMU_CAPS_USB_HUB);
    DO_TEST_PARSE_ERROR("usb-none-usbtablet",
1337
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1338
    DO_TEST("usb-controller-default-q35",
1339
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1340 1341 1342
            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",
1343
                    QEMU_CAPS_DEVICE_PCI_BRIDGE,
1344 1345 1346
                    QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_PCI_OHCI,
                    QEMU_CAPS_NEC_USB_XHCI);
    DO_TEST("usb-controller-explicit-q35",
1347
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1348 1349 1350
            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",
1351
                    QEMU_CAPS_DEVICE_PCI_BRIDGE,
1352 1353
                    QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_PCI_OHCI,
                    QEMU_CAPS_PIIX3_USB_UHCI);
1354 1355 1356
    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);
1357 1358 1359 1360
    DO_TEST("usb-xhci-autoassign",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI, QEMU_CAPS_NEC_USB_XHCI_PORTS,
            QEMU_CAPS_USB_HUB);
1361

1362
    DO_TEST("smbios", QEMU_CAPS_SMBIOS_TYPE);
1363
    DO_TEST_PARSE_ERROR("smbios-date", QEMU_CAPS_SMBIOS_TYPE);
1364
    DO_TEST_PARSE_ERROR("smbios-uuid-match", QEMU_CAPS_SMBIOS_TYPE);
1365

1366
    DO_TEST("watchdog", NONE);
1367
    DO_TEST("watchdog-device", QEMU_CAPS_NODEFCONFIG);
1368
    DO_TEST("watchdog-dump", NONE);
1369
    DO_TEST("watchdog-injectnmi", NONE);
1370
    DO_TEST("watchdog-diag288",
1371
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1372
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390);
1373 1374
    DO_TEST("balloon-device", QEMU_CAPS_NODEFCONFIG);
    DO_TEST("balloon-device-deflate", QEMU_CAPS_NODEFCONFIG,
1375
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1376
    DO_TEST("balloon-ccw-deflate", QEMU_CAPS_NODEFCONFIG,
1377
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1378
    DO_TEST("balloon-mmio-deflate", QEMU_CAPS_NODEFCONFIG,
1379 1380
            QEMU_CAPS_DTB, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1381
    DO_TEST("balloon-device-deflate-off", QEMU_CAPS_NODEFCONFIG,
1382
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1383
    DO_TEST("balloon-device-auto",
1384 1385
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("balloon-device-period", QEMU_CAPS_NODEFCONFIG);
1386 1387
    DO_TEST("sound", NONE);
    DO_TEST("sound-device",
1388
            QEMU_CAPS_NODEFCONFIG,
1389
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_HDA_MICRO,
1390 1391
            QEMU_CAPS_DEVICE_ICH9_INTEL_HDA,
            QEMU_CAPS_OBJECT_USB_AUDIO);
1392
    DO_TEST("fs9p",
1393
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_FSDEV,
1394
            QEMU_CAPS_FSDEV_WRITEOUT);
1395
    DO_TEST("fs9p-ccw",
1396
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_FSDEV,
1397
            QEMU_CAPS_FSDEV_WRITEOUT,
1398
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1399

1400 1401
    DO_TEST("hostdev-usb-address", NONE);
    DO_TEST("hostdev-usb-address-device",
1402 1403
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("hostdev-usb-address-device-boot",
1404 1405
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_USB_HOST_BOOTINDEX);
J
Ján Tomko 已提交
1406
    DO_TEST("hostdev-pci-address", NONE);
1407
    DO_TEST("hostdev-pci-address-device",
J
Ján Tomko 已提交
1408
            QEMU_CAPS_NODEFCONFIG);
1409
    DO_TEST("hostdev-vfio",
J
Ján Tomko 已提交
1410
            QEMU_CAPS_NODEFCONFIG,
1411
            QEMU_CAPS_DEVICE_VFIO_PCI);
1412
    DO_TEST("hostdev-vfio-multidomain",
J
Ján Tomko 已提交
1413
            QEMU_CAPS_NODEFCONFIG,
1414 1415 1416
            QEMU_CAPS_DEVICE_VFIO_PCI, QEMU_CAPS_HOST_PCI_MULTIDOMAIN);
    DO_TEST_FAILURE("hostdev-vfio-multidomain",
                    QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VFIO_PCI);
1417
    DO_TEST("pci-rom",
J
Ján Tomko 已提交
1418
            QEMU_CAPS_NODEFCONFIG);
1419

1420 1421 1422 1423
    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);
1424

1425
    DO_TEST_LINUX_FULL("migrate-numa-unaligned", "stdio", 7, 0, 0, GIC_NONE,
1426
                       QEMU_CAPS_NUMA,
1427 1428
                       QEMU_CAPS_OBJECT_MEMORY_RAM);

1429
    DO_TEST("qemu-ns", NONE);
1430
    DO_TEST("qemu-ns-no-env", NONE);
1431

1432
    DO_TEST("smp", NONE);
1433

J
John Ferlan 已提交
1434
    DO_TEST("iothreads", QEMU_CAPS_OBJECT_IOTHREAD);
1435 1436
    DO_TEST("iothreads-ids", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-ids-partial", QEMU_CAPS_OBJECT_IOTHREAD);
1437
    DO_TEST_FAILURE("iothreads-nocap", NONE);
1438 1439
    DO_TEST("iothreads-disk", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-disk-virtio-ccw", QEMU_CAPS_OBJECT_IOTHREAD,
1440
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1441 1442 1443 1444 1445 1446
    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 已提交
1447

1448 1449
    DO_TEST("cpu-topology1", NONE);
    DO_TEST("cpu-topology2", NONE);
1450
    DO_TEST("cpu-topology3", NONE);
1451 1452 1453 1454 1455 1456 1457 1458
    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);
1459
    DO_TEST("cpu-numa1", NONE);
1460 1461
    DO_TEST("cpu-numa2", NONE);
    DO_TEST("cpu-numa-no-memory-element", NONE);
1462
    DO_TEST_PARSE_ERROR("cpu-numa3", NONE);
1463 1464
    DO_TEST_FAILURE("cpu-numa-disjoint", NONE);
    DO_TEST("cpu-numa-disjoint", QEMU_CAPS_NUMA);
1465 1466
    DO_TEST_FAILURE("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_RAM);
    DO_TEST_FAILURE("cpu-numa-memshared", NONE);
1467
    DO_TEST("cpu-host-model", NONE);
1468
    DO_TEST("cpu-host-model-vendor", NONE);
1469
    skipLegacyCPUs = true;
1470
    DO_TEST("cpu-host-model-fallback", NONE);
1471
    DO_TEST_FAILURE("cpu-host-model-nofallback", NONE);
1472
    skipLegacyCPUs = false;
A
Andrea Bolognani 已提交
1473
    DO_TEST("cpu-host-passthrough", QEMU_CAPS_KVM);
1474
    DO_TEST_FAILURE("cpu-host-passthrough", NONE);
A
Andrea Bolognani 已提交
1475
    DO_TEST_FAILURE("cpu-qemu-host-passthrough", QEMU_CAPS_KVM);
1476

1477
    qemuTestSetHostCPU(driver.caps, cpuHaswell);
1478 1479 1480 1481
    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);
1482
    DO_TEST("cpu-host-model-cmt", NONE);
1483
    qemuTestSetHostCPU(driver.caps, NULL);
1484

1485
    DO_TEST("encrypted-disk", NONE);
J
John Ferlan 已提交
1486
    DO_TEST("encrypted-disk-usage", NONE);
1487
# ifdef HAVE_GNUTLS_CIPHER_ENCRYPT
1488
    DO_TEST("luks-disks", QEMU_CAPS_OBJECT_SECRET);
1489 1490 1491
# else
    DO_TEST_FAILURE("luks-disks", QEMU_CAPS_OBJECT_SECRET);
# endif
1492

1493 1494 1495 1496 1497 1498 1499 1500
    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);
1501
    DO_TEST("cputune-numatune",
1502
            QEMU_CAPS_KVM,
1503
            QEMU_CAPS_OBJECT_IOTHREAD,
1504 1505
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1506

1507
    DO_TEST("numatune-memory", NONE);
1508
    DO_TEST_PARSE_ERROR("numatune-memory-invalid-nodeset", NONE);
1509 1510
    DO_TEST_LINUX("numatune-memnode", QEMU_CAPS_NUMA,
                  QEMU_CAPS_OBJECT_MEMORY_RAM);
1511 1512
    DO_TEST_FAILURE("numatune-memnode", NONE);

1513 1514
    DO_TEST_LINUX("numatune-memnode-no-memory", QEMU_CAPS_NUMA,
                  QEMU_CAPS_OBJECT_MEMORY_RAM);
1515 1516
    DO_TEST_FAILURE("numatune-memnode-no-memory", NONE);

1517
    DO_TEST("numatune-auto-nodeset-invalid", NONE);
1518 1519
    DO_TEST("numatune-auto-prefer", QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1520 1521
    DO_TEST_FAILURE("numatune-static-nodeset-exceed-hostnode",
                    QEMU_CAPS_OBJECT_MEMORY_RAM);
1522 1523
    DO_TEST_PARSE_ERROR("numatune-memnode-nocpu", NONE);
    DO_TEST_PARSE_ERROR("numatune-memnodes-problematic", NONE);
1524 1525
    DO_TEST("numad", NONE);
    DO_TEST("numad-auto-vcpu-static-numatune", NONE);
1526
    DO_TEST_PARSE_ERROR("numad-auto-vcpu-static-numatune-no-nodeset", NONE);
1527 1528 1529
    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);
1530
    DO_TEST("blkdeviotune",
1531
            QEMU_CAPS_DRIVE_IOTUNE);
1532
    DO_TEST("blkdeviotune-max",
1533
            QEMU_CAPS_DRIVE_IOTUNE,
1534
            QEMU_CAPS_DRIVE_IOTUNE_MAX);
1535 1536 1537 1538
    DO_TEST("blkdeviotune-max-length",
            QEMU_CAPS_DRIVE_IOTUNE,
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_MAX_LENGTH);
1539

1540
    DO_TEST("multifunction-pci-device",
1541
            QEMU_CAPS_NODEFCONFIG,
1542
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_SCSI_LSI);
1543

1544
    DO_TEST("monitor-json",
1545
            QEMU_CAPS_CHARDEV, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_NODEFCONFIG);
1546
    DO_TEST("no-shutdown",
1547 1548
            QEMU_CAPS_CHARDEV, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_NO_SHUTDOWN);
1549

1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561
    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);
1562

1563
    DO_TEST("pseries-basic",
1564
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1565
    DO_TEST("pseries-vio",
1566
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1567
    DO_TEST("pseries-usb-default",
1568
            QEMU_CAPS_CHARDEV,
1569 1570
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_PCI_OHCI, QEMU_CAPS_PCI_MULTIFUNCTION);
1571
    DO_TEST("pseries-usb-multi",
1572
            QEMU_CAPS_CHARDEV,
1573 1574
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_PCI_OHCI, QEMU_CAPS_PCI_MULTIFUNCTION);
1575
    DO_TEST("pseries-vio-user-assigned",
1576
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1577
    DO_TEST_PARSE_ERROR("pseries-vio-address-clash",
1578
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1579
    DO_TEST("pseries-nvram", QEMU_CAPS_DEVICE_NVRAM);
1580 1581
    DO_TEST("pseries-usb-kbd", QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_DEVICE_USB_KBD, QEMU_CAPS_CHARDEV,
1582 1583
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("pseries-cpu-exact", QEMU_CAPS_CHARDEV,
1584
            QEMU_CAPS_NODEFCONFIG);
1585 1586

    qemuTestSetHostArch(driver.caps, VIR_ARCH_PPC64);
A
Andrea Bolognani 已提交
1587
    DO_TEST("pseries-cpu-compat", QEMU_CAPS_KVM,
1588
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
A
Andrea Bolognani 已提交
1589
    DO_TEST("pseries-cpu-le", QEMU_CAPS_KVM,
1590
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1591 1592
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);

1593
    DO_TEST("pseries-panic-missing",
1594
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1595
    DO_TEST("pseries-panic-no-address",
1596
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1597
    DO_TEST_FAILURE("pseries-panic-address",
1598
                    QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1599
    DO_TEST("disk-ide-drive-split",
1600
            QEMU_CAPS_NODEFCONFIG,
1601
            QEMU_CAPS_IDE_CD);
1602
    DO_TEST("disk-ide-wwn",
1603
            QEMU_CAPS_IDE_CD,
1604
            QEMU_CAPS_DRIVE_SERIAL, QEMU_CAPS_IDE_DRIVE_WWN);
1605

1606
    DO_TEST("disk-geometry", NONE);
V
Viktor Mihajlovski 已提交
1607
    DO_TEST("disk-blockio",
1608
            QEMU_CAPS_NODEFCONFIG,
V
Viktor Mihajlovski 已提交
1609
            QEMU_CAPS_IDE_CD, QEMU_CAPS_BLOCKIO);
1610

1611 1612
    DO_TEST("video-device-pciaddr-default",
            QEMU_CAPS_KVM, QEMU_CAPS_VNC,
1613
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1614
            QEMU_CAPS_DEVICE_QXL,
1615
            QEMU_CAPS_DEVICE_PCI_BRIDGE);
1616
    DO_TEST("video-vga-nodevice", QEMU_CAPS_DEVICE_VGA);
1617
    DO_TEST("video-vga-device", QEMU_CAPS_DEVICE_VGA,
1618
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1619
    DO_TEST("video-vga-device-vgamem", QEMU_CAPS_DEVICE_VGA,
1620
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_VGA_VGAMEM);
1621
    DO_TEST("video-qxl-nodevice", QEMU_CAPS_DEVICE_QXL);
1622
    DO_TEST("video-qxl-device",
1623
            QEMU_CAPS_DEVICE_QXL,
1624
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1625
    DO_TEST("video-qxl-device-vgamem",
1626
            QEMU_CAPS_DEVICE_QXL,
1627
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1628 1629
            QEMU_CAPS_QXL_VGAMEM);
    DO_TEST("video-qxl-sec-device",
1630
            QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1631
    DO_TEST("video-qxl-sec-device-vgamem",
1632 1633
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1634
            QEMU_CAPS_QXL_VGAMEM);
1635 1636 1637
    DO_TEST("video-qxl-heads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
1638
            QEMU_CAPS_QXL_MAX_OUTPUTS);
1639 1640 1641
    DO_TEST("video-qxl-noheads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
1642
            QEMU_CAPS_QXL_MAX_OUTPUTS);
M
Marc-André Lureau 已提交
1643
    DO_TEST("video-virtio-gpu-device",
1644
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
M
Marc-André Lureau 已提交
1645
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1646
    DO_TEST("video-virtio-gpu-virgl",
1647
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
1648
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
1649
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1650 1651
    DO_TEST("video-virtio-gpu-spice-gl",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
1652
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
1653 1654 1655
            QEMU_CAPS_SPICE,
            QEMU_CAPS_SPICE_GL,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1656 1657 1658
    DO_TEST("video-virtio-gpu-secondary",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1659 1660 1661 1662
    DO_TEST("video-virtio-vga",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIRTIO_VGA,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1663
    DO_TEST_PARSE_ERROR("video-invalid", NONE);
1664

1665
    DO_TEST("virtio-rng-default", QEMU_CAPS_DEVICE_VIRTIO_RNG,
1666
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1667
    DO_TEST("virtio-rng-random", QEMU_CAPS_DEVICE_VIRTIO_RNG,
1668
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1669
    DO_TEST("virtio-rng-egd", QEMU_CAPS_DEVICE_VIRTIO_RNG,
1670
            QEMU_CAPS_OBJECT_RNG_EGD);
1671
    DO_TEST("virtio-rng-multiple", QEMU_CAPS_DEVICE_VIRTIO_RNG,
1672
            QEMU_CAPS_OBJECT_RNG_EGD, QEMU_CAPS_OBJECT_RNG_RANDOM);
1673
    DO_TEST_PARSE_ERROR("virtio-rng-egd-crash",
1674
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_EGD);
1675
    DO_TEST("virtio-rng-ccw",
1676
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1677
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_CCW,
1678 1679
            QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1680

1681
    DO_TEST("s390-allow-bogus-usb-none",
1682
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1683
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390,
1684
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
1685
    DO_TEST("s390-allow-bogus-usb-controller",
1686
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1687
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390,
1688 1689
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);

1690 1691 1692 1693 1694 1695 1696 1697 1698 1699
    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 已提交
1700
    DO_TEST("ppc-dtb", QEMU_CAPS_KVM, QEMU_CAPS_DTB);
1701
    DO_TEST("ppce500-serial", QEMU_CAPS_KVM, QEMU_CAPS_CHARDEV);
O
Olivia Yin 已提交
1702

1703
    DO_TEST("tpm-passthrough",
1704
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
1705
    DO_TEST_PARSE_ERROR("tpm-no-backend-invalid",
1706
                        QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
1707

1708

1709 1710 1711 1712
    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);
1713

1714 1715 1716 1717 1718
    DO_TEST("pci-autoadd-addr", QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("pci-autoadd-idx", QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("pci-autofill-addr", QEMU_CAPS_DEVICE_CIRRUS_VGA);
1719
    DO_TEST("pci-many",
1720 1721
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1722
    DO_TEST("pci-bridge-many-disks",
1723
            QEMU_CAPS_DEVICE_PCI_BRIDGE);
L
Laine Stump 已提交
1724
    DO_TEST("pcie-root",
1725
            QEMU_CAPS_ICH9_AHCI,
1726
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1727 1728
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE);
    DO_TEST("q35",
1729
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1730
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
1731
            QEMU_CAPS_ICH9_AHCI,
1732
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
1733
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1734
            QEMU_CAPS_DEVICE_QXL);
1735 1736 1737 1738 1739 1740 1741 1742
    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);
1743
    DO_TEST("q35-pm-disable",
1744
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1745 1746 1747 1748
            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",
1749
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1750 1751
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4);
1752
    DO_TEST("q35-usb2",
1753
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1754 1755 1756 1757
            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,
1758
            QEMU_CAPS_DEVICE_QXL);
1759
    DO_TEST("q35-usb2-multi",
1760
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1761 1762 1763 1764
            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,
1765
            QEMU_CAPS_DEVICE_QXL);
1766
    DO_TEST("q35-usb2-reorder",
1767
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1768 1769 1770 1771
            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,
1772
            QEMU_CAPS_DEVICE_QXL);
1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794
    /* 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_NETDEV,
            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_FSDEV,
            QEMU_CAPS_FSDEV_WRITEOUT,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
1795
            QEMU_CAPS_NEC_USB_XHCI,
1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809
            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_NETDEV,
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_FSDEV,
            QEMU_CAPS_FSDEV_WRITEOUT,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION,
            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_NETDEV,
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_FSDEV,
            QEMU_CAPS_FSDEV_WRITEOUT,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION,
            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,
            QEMU_CAPS_NETDEV,
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_FSDEV,
            QEMU_CAPS_FSDEV_WRITEOUT,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
1868
            QEMU_CAPS_NEC_USB_XHCI,
1869
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1870
    DO_TEST("pcie-root-port",
1871
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1872 1873
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
1874
            QEMU_CAPS_ICH9_AHCI,
1875
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1876
            QEMU_CAPS_DEVICE_QXL);
1877 1878 1879 1880 1881 1882 1883 1884 1885
    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);
1886 1887 1888 1889 1890 1891 1892
    /* 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);
1893

1894 1895 1896 1897 1898 1899
    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,
1900
            QEMU_CAPS_DEVICE_QXL);
1901 1902
    DO_TEST_PARSE_ERROR("440fx-wrong-root", NONE);

1903
    DO_TEST_PARSE_ERROR("pcie-root-port-too-many",
1904
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1905 1906
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
1907
            QEMU_CAPS_ICH9_AHCI,
1908
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1909
            QEMU_CAPS_DEVICE_QXL);
1910

1911
    DO_TEST("pcie-switch-upstream-port",
1912
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1913 1914 1915
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
1916
            QEMU_CAPS_ICH9_AHCI,
1917
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1918
            QEMU_CAPS_DEVICE_QXL);
1919
    DO_TEST("pcie-switch-downstream-port",
1920
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1921 1922 1923 1924
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
1925
            QEMU_CAPS_ICH9_AHCI,
1926
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1927
            QEMU_CAPS_DEVICE_QXL);
1928

1929 1930 1931 1932 1933 1934 1935 1936 1937
    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);
1938 1939 1940
    DO_TEST_PARSE_ERROR("pci-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_PCI_BRIDGE,
                        QEMU_CAPS_DEVICE_PXB);
1941

1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955
    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);
1956 1957 1958 1959 1960
    DO_TEST_PARSE_ERROR("pcie-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_PCI_BRIDGE,
                        QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
                        QEMU_CAPS_DEVICE_IOH3420,
                        QEMU_CAPS_DEVICE_PXB_PCIE);
1961

1962
    DO_TEST("hostdev-scsi-lsi",
1963 1964
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1965
    DO_TEST("hostdev-scsi-virtio-scsi",
1966 1967
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1968
    DO_TEST("hostdev-scsi-readonly",
J
Ján Tomko 已提交
1969
            QEMU_CAPS_VIRTIO_SCSI,
O
Osier Yang 已提交
1970
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_SCSI_GENERIC);
1971
    DO_TEST("hostdev-scsi-virtio-scsi",
1972 1973 1974
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC,
            QEMU_CAPS_DEVICE_SCSI_GENERIC_BOOTINDEX);
1975
    DO_TEST("hostdev-scsi-lsi-iscsi",
J
John Ferlan 已提交
1976 1977
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1978
    DO_TEST("hostdev-scsi-lsi-iscsi-auth",
J
John Ferlan 已提交
1979 1980
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1981
    DO_TEST("hostdev-scsi-virtio-iscsi",
J
John Ferlan 已提交
1982 1983
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1984
    DO_TEST("hostdev-scsi-virtio-iscsi-auth",
J
John Ferlan 已提交
1985 1986
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1987

1988
    DO_TEST("mlock-on", QEMU_CAPS_REALTIME_MLOCK);
1989
    DO_TEST_FAILURE("mlock-on", NONE);
1990
    DO_TEST("mlock-off", QEMU_CAPS_REALTIME_MLOCK);
1991 1992
    DO_TEST("mlock-unsupported", NONE);

1993
    DO_TEST_PARSE_ERROR("pci-bridge-negative-index-invalid",
1994
                        QEMU_CAPS_DEVICE_PCI_BRIDGE);
J
Ján Tomko 已提交
1995
    DO_TEST_PARSE_ERROR("pci-bridge-duplicate-index",
1996
                        QEMU_CAPS_DEVICE_PCI_BRIDGE);
J
Ján Tomko 已提交
1997
    DO_TEST_PARSE_ERROR("pci-root-nonzero-index",
1998
                        QEMU_CAPS_DEVICE_PCI_BRIDGE);
J
Ján Tomko 已提交
1999
    DO_TEST_PARSE_ERROR("pci-root-address",
2000
                        QEMU_CAPS_DEVICE_PCI_BRIDGE);
2001

2002
    DO_TEST("hotplug-base",
2003
            QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_SCSI);
2004

2005 2006
    DO_TEST("pcihole64", QEMU_CAPS_I440FX_PCI_HOLE64_SIZE);
    DO_TEST_FAILURE("pcihole64-none", NONE);
2007
    DO_TEST("pcihole64-q35",
2008
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2009
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2010
            QEMU_CAPS_ICH9_AHCI,
2011
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2012
            QEMU_CAPS_DEVICE_QXL,
2013 2014
            QEMU_CAPS_Q35_PCI_HOLE64_SIZE);

2015
    DO_TEST("arm-vexpressa9-nodevs",
2016
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB);
2017
    DO_TEST("arm-vexpressa9-basic",
2018
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB);
2019
    DO_TEST("arm-vexpressa9-virtio",
2020
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2021
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2022
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2023
    DO_TEST("arm-virt-virtio",
2024
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2025
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2026
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2027

2028
    DO_TEST("aarch64-virt-virtio",
2029
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2030
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2031
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2032 2033 2034 2035 2036 2037

    /* 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",
2038
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2039 2040 2041 2042 2043 2044
            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,
2045
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2046 2047 2048
            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);
2049 2050 2051
    /* Example of using virtio-pci with no explicit PCI controller
       but with manual PCI addresses */
    DO_TEST("aarch64-virtio-pci-manual-addresses",
2052
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2053
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2054 2055 2056
            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);
2057 2058 2059 2060 2061
    DO_TEST("aarch64-video-virtio-gpu-pci",
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_VIRTIO_GPU, QEMU_CAPS_BOOTINDEX);
2062
    DO_TEST("aarch64-aavmf-virtio-mmio",
2063
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2064
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2065
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2066
    DO_TEST("aarch64-virt-default-nic",
2067
            QEMU_CAPS_NODEFCONFIG,
2068
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
2069
    qemuTestSetHostArch(driver.caps, VIR_ARCH_AARCH64);
2070
    DO_TEST("aarch64-cpu-passthrough",
2071
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2072
            QEMU_CAPS_KVM);
2073 2074 2075
    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 已提交
2076
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2077
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2078 2079 2080 2081
    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 已提交
2082
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2083
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2084 2085 2086 2087
    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 已提交
2088
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
2089 2090 2091 2092
    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 已提交
2093
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2094
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2095 2096 2097 2098 2099 2100 2101
    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 已提交
2102
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
2103 2104 2105 2106 2107 2108 2109
    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 已提交
2110
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2111
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2112 2113 2114
    DO_TEST_GIC("aarch64-gic-v2", GIC_BOTH,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2115
    DO_TEST_FAILURE("aarch64-gic-v3",
A
Andrea Bolognani 已提交
2116
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
2117 2118 2119 2120 2121 2122 2123 2124 2125 2126
    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 已提交
2127
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2128
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2129
    DO_TEST_FAILURE("aarch64-gic-host",
A
Andrea Bolognani 已提交
2130
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142
    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);
2143
    DO_TEST_PARSE_ERROR("aarch64-gic-invalid",
A
Andrea Bolognani 已提交
2144
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2145
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2146
    DO_TEST_FAILURE("aarch64-gic-not-virt",
A
Andrea Bolognani 已提交
2147
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2148
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2149
    DO_TEST_FAILURE("aarch64-gic-not-arm",
A
Andrea Bolognani 已提交
2150
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2151
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2152
    DO_TEST("aarch64-kvm-32-on-64",
2153
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2154
            QEMU_CAPS_KVM, QEMU_CAPS_CPU_AARCH64_OFF);
2155
    DO_TEST_FAILURE("aarch64-kvm-32-on-64",
2156
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2157
            QEMU_CAPS_KVM);
2158
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);
2159

2160 2161 2162 2163 2164
    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 已提交
2165
    DO_TEST("panic", QEMU_CAPS_DEVICE_PANIC,
2166
            QEMU_CAPS_NODEFCONFIG);
D
Dmitry Andreev 已提交
2167
    DO_TEST("panic-double", QEMU_CAPS_DEVICE_PANIC,
2168
            QEMU_CAPS_NODEFCONFIG);
H
Hu Tao 已提交
2169

2170
    DO_TEST("panic-no-address", QEMU_CAPS_DEVICE_PANIC,
2171
            QEMU_CAPS_NODEFCONFIG);
2172

2173 2174
    DO_TEST("fips-enabled", QEMU_CAPS_ENABLE_FIPS);

J
Ján Tomko 已提交
2175
    DO_TEST("shmem", QEMU_CAPS_DEVICE_IVSHMEM);
2176 2177 2178
    DO_TEST("shmem-plain-doorbell", QEMU_CAPS_DEVICE_IVSHMEM,
            QEMU_CAPS_DEVICE_IVSHMEM_PLAIN,
            QEMU_CAPS_DEVICE_IVSHMEM_DOORBELL);
2179
    DO_TEST_FAILURE("shmem", NONE);
J
Ján Tomko 已提交
2180
    DO_TEST_FAILURE("shmem-invalid-size",
2181
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2182
    DO_TEST_FAILURE("shmem-invalid-address",
2183
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2184
    DO_TEST_FAILURE("shmem-small-size",
2185
                    QEMU_CAPS_DEVICE_IVSHMEM);
2186
    DO_TEST_PARSE_ERROR("shmem-msi-only", NONE);
A
Andrea Bolognani 已提交
2187
    DO_TEST("cpu-host-passthrough-features", QEMU_CAPS_KVM);
2188

2189
    DO_TEST_FAILURE("memory-align-fail", NONE);
2190 2191 2192
    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);
2193
    DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2194
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2195
    DO_TEST("memory-hotplug-dimm-addr", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2196
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2197
    DO_TEST("memory-hotplug-ppc64-nonuma", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2198
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2199

2200 2201
    DO_TEST("machine-aeskeywrap-on-caps",
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP,
2202
            QEMU_CAPS_DEA_KEY_WRAP,
2203
            QEMU_CAPS_VIRTIO_SCSI,
2204 2205
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps", QEMU_CAPS_MACHINE_OPT,
2206
                    QEMU_CAPS_VIRTIO_SCSI,
2207 2208 2209 2210 2211
                    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,
2212
            QEMU_CAPS_VIRTIO_SCSI,
2213 2214
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap", QEMU_CAPS_MACHINE_OPT,
2215
                    QEMU_CAPS_VIRTIO_SCSI,
2216 2217 2218 2219 2220
                    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,
2221
            QEMU_CAPS_VIRTIO_SCSI,
2222 2223
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", QEMU_CAPS_MACHINE_OPT,
2224
                    QEMU_CAPS_VIRTIO_SCSI,
2225 2226 2227 2228
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", NONE);

    DO_TEST("machine-aeskeywrap-off-cap",
2229
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP,
2230
            QEMU_CAPS_VIRTIO_SCSI,
2231 2232
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap", QEMU_CAPS_MACHINE_OPT,
2233
                    QEMU_CAPS_VIRTIO_SCSI,
2234 2235 2236 2237 2238
                    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,
2239
            QEMU_CAPS_VIRTIO_SCSI,
2240
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2241
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", QEMU_CAPS_MACHINE_OPT,
2242
                    QEMU_CAPS_VIRTIO_SCSI,
2243 2244 2245 2246
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", NONE);

    DO_TEST("machine-deakeywrap-on-cap",
2247
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_DEA_KEY_WRAP,
2248
            QEMU_CAPS_VIRTIO_SCSI,
2249 2250
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-on-cap", QEMU_CAPS_MACHINE_OPT,
2251
                    QEMU_CAPS_VIRTIO_SCSI,
2252 2253 2254 2255 2256
                    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,
2257
            QEMU_CAPS_VIRTIO_SCSI,
2258 2259
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", QEMU_CAPS_MACHINE_OPT,
2260
                    QEMU_CAPS_VIRTIO_SCSI,
2261 2262 2263 2264
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", NONE);

    DO_TEST("machine-deakeywrap-off-cap",
2265
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_DEA_KEY_WRAP,
2266
            QEMU_CAPS_VIRTIO_SCSI,
2267 2268
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-cap", QEMU_CAPS_MACHINE_OPT,
2269
                    QEMU_CAPS_VIRTIO_SCSI,
2270 2271 2272 2273 2274
                    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,
2275
            QEMU_CAPS_VIRTIO_SCSI,
2276 2277
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST("machine-keywrap-none",
2278
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_VIRTIO_SCSI,
2279
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2280

J
Jiri Denemark 已提交
2281 2282 2283 2284 2285 2286 2287
    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);

2288
    DO_TEST("virtio-input", QEMU_CAPS_VIRTIO_KEYBOARD,
2289
            QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET);
2290
    DO_TEST("virtio-input-passthrough", QEMU_CAPS_VIRTIO_INPUT_HOST);
2291

2292
    DO_TEST("ppc64-usb-controller",
2293
            QEMU_CAPS_PCI_OHCI);
2294
    DO_TEST("ppc64-usb-controller-legacy",
2295
            QEMU_CAPS_PIIX3_USB_UHCI);
2296

2297 2298 2299 2300
    DO_TEST_PARSE_FLAGS_ERROR("missing-machine",
                              VIR_DOMAIN_DEF_PARSE_SKIP_OSTYPE_CHECKS,
                              NONE);

2301
    DO_TEST("name-escape", QEMU_CAPS_NAME_DEBUG_THREADS,
2302
            QEMU_CAPS_OBJECT_SECRET, QEMU_CAPS_CHARDEV, QEMU_CAPS_VNC,
2303
            QEMU_CAPS_NAME_GUEST, QEMU_CAPS_DEVICE_CIRRUS_VGA);
M
Marc-André Lureau 已提交
2304 2305
    DO_TEST("debug-threads", QEMU_CAPS_NAME_DEBUG_THREADS);

2306
    DO_TEST("master-key", QEMU_CAPS_OBJECT_SECRET);
J
Ján Tomko 已提交
2307 2308
    DO_TEST("usb-long-port-path", QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_USB_HUB);
2309 2310 2311
    DO_TEST_PARSE_ERROR("usb-too-long-port-path-invalid",
                        QEMU_CAPS_CHARDEV,
                        QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_USB_HUB);
2312

2313
    DO_TEST("acpi-table", NONE);
2314 2315
    DO_TEST("intel-iommu", QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_DEVICE_INTEL_IOMMU);
2316 2317
    DO_TEST("intel-iommu-machine", QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_MACHINE_IOMMU);
2318

2319 2320
    DO_TEST("cpu-hotplug-startup", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);

2321
    qemuTestDriverFree(&driver);
2322

2323
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
2324 2325
}

2326 2327
VIRT_TEST_MAIN_PRELOAD(mymain, abs_builddir "/.libs/qemuxml2argvmock.so",
                       abs_builddir "/.libs/virrandommock.so")
2328

2329 2330
#else

2331 2332 2333 2334
int main(void)
{
    return EXIT_AM_SKIP;
}
2335 2336

#endif /* WITH_QEMU */