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

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

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

11 12
#include "testutils.h"

13 14
#ifdef WITH_QEMU

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

30
# include "testutilsqemu.h"
31

32 33
# define VIR_FROM_THIS VIR_FROM_QEMU

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

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

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

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

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

75 76 77 78 79 80 81
static virSecretPtr
fakeSecretLookupByUUID(virConnectPtr conn,
                       const unsigned char *uuid)
{
    return virGetSecret(conn, uuid, 0, "");
}

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

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

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

121
 cleanup:
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
    VIR_FREE(xmlpath);
    return ret;
}


static virStorageVolPtr
fakeStorageVolLookupByName(virStoragePoolPtr pool,
                           const char *name)
{
    char **volinfo = NULL;
    virStorageVolPtr ret = NULL;

    if (STREQ(pool->name, "inactive")) {
        virReportError(VIR_ERR_OPERATION_INVALID,
                       "storage pool '%s' is not active", pool->name);
        return NULL;
    }

    if (STREQ(name, "nonexistent")) {
        virReportError(VIR_ERR_NO_STORAGE_VOL,
                       "no storage vol with matching name '%s'", name);
        return NULL;
    }

    if (!strchr(name, '+'))
        goto fallback;

    if (!(volinfo = virStringSplit(name, "+", 2)))
        return NULL;

    if (!volinfo[1])
        goto fallback;

    ret = virGetStorageVol(pool->conn, pool->name, volinfo[1], volinfo[0],
                           NULL, NULL);

158
 cleanup:
159 160 161
    virStringFreeList(volinfo);
    return ret;

162
 fallback:
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 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
    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;

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

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

261
typedef enum {
262 263 264 265
    FLAG_EXPECT_FAILURE     = 1 << 0,
    FLAG_EXPECT_PARSE_ERROR = 1 << 1,
    FLAG_JSON               = 1 << 2,
    FLAG_FIPS               = 1 << 3,
266 267
} virQemuXML2ArgvTestFlags;

268 269 270 271 272 273 274
struct testInfo {
    const char *name;
    virQEMUCapsPtr qemuCaps;
    const char *migrateFrom;
    int migrateFd;
    unsigned int flags;
    unsigned int parseFlags;
275
    bool skipLegacyCPUs;
276 277
};

278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308

static int
testAddCPUModels(virQEMUCapsPtr caps, bool skipLegacy)
{
    const char *newModels[] = {
        "Opteron_G3", "Opteron_G2", "Opteron_G1",
        "Nehalem", "Penryn", "Conroe",
        "Haswell-noTSX", "Haswell",
    };
    const char *legacyModels[] = {
        "n270", "athlon", "pentium3", "pentium2", "pentium",
        "486", "coreduo", "kvm32", "qemu32", "kvm64",
        "core2duo", "phenom", "qemu64",
    };

    if (virQEMUCapsAddCPUDefinitions(caps, newModels,
                                     ARRAY_CARDINALITY(newModels)) < 0)
        return -1;

    if (skipLegacy)
        return 0;

    if (virQEMUCapsAddCPUDefinitions(caps, legacyModels,
                                     ARRAY_CARDINALITY(legacyModels)) < 0)
        return -1;

    return 0;
}


static int
309 310
testInitQEMUCaps(struct testInfo *info,
                 int gic)
311 312 313 314 315 316
{
    int ret = -1;

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

317
    virQEMUCapsSet(info->qemuCaps, QEMU_CAPS_NO_ACPI);
318 319 320 321 322 323 324 325 326 327 328

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

    ret = 0;

 cleanup:
    return ret;
}


329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349
static int
testUpdateQEMUCaps(const struct testInfo *info,
                   virDomainObjPtr vm)
{
    int ret = -1;

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

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


350 351
static int
testCompareXMLToArgv(const void *data)
352
{
353 354 355 356
    const struct testInfo *info = data;
    char *xml = NULL;
    char *args = NULL;
    char *migrateURI = NULL;
357
    char *actualargv = NULL;
358 359
    unsigned int flags = info->flags;
    unsigned int parseFlags = info->parseFlags;
E
Eric Blake 已提交
360
    int ret = -1;
361
    virDomainObjPtr vm = NULL;
362
    virDomainChrSourceDef monitor_chr;
363
    virConnectPtr conn;
J
Jiri Denemark 已提交
364
    char *log = NULL;
E
Eric Blake 已提交
365
    virCommandPtr cmd = NULL;
366
    size_t i;
367
    qemuDomainObjPrivatePtr priv = NULL;
368

369 370
    memset(&monitor_chr, 0, sizeof(monitor_chr));

371
    if (!(conn = virGetConnect()))
372
        goto cleanup;
373

374
    conn->secretDriver = &fakeSecretDriver;
375
    conn->storageDriver = &fakeStorageDriver;
376

377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397
    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;

398
    if (!(vm = virDomainObjNew(driver.xmlopt)))
399
        goto cleanup;
400

401
    parseFlags |= VIR_DOMAIN_DEF_PARSE_INACTIVE;
402
    if (!(vm->def = virDomainDefParseFile(xml, driver.caps, driver.xmlopt,
403
                                          parseFlags))) {
P
Pavel Hrdina 已提交
404
        if (flags & FLAG_EXPECT_PARSE_ERROR)
405
            goto ok;
406
        goto cleanup;
407
    }
408
    priv = vm->privateData;
409

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

413
    if (!virDomainDefCheckABIStability(vm->def, vm->def)) {
414
        VIR_TEST_DEBUG("ABI stability check failed on %s", xml);
415
        goto cleanup;
416 417
    }

418
    vm->def->id = -1;
419

420
    if (qemuProcessPrepareMonitorChr(&monitor_chr, priv->libDir) < 0)
421
        goto cleanup;
422

423 424 425 426
    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)
427
            goto cleanup;
428
    }
429

430 431
    if (testUpdateQEMUCaps(info, vm) < 0)
        goto cleanup;
432

433
    log = virTestLogContentAndReset();
434
    VIR_FREE(log);
435
    virResetLastError();
J
Jiri Denemark 已提交
436

437 438
    for (i = 0; i < vm->def->nhostdevs; i++) {
        virDomainHostdevDefPtr hostdev = vm->def->hostdevs[i];
439 440 441 442 443 444 445 446

        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 已提交
447 448 449
    if (!(cmd = qemuProcessCreatePretendCmd(conn, &driver, vm, migrateURI,
                                            (flags & FLAG_FIPS), false,
                                            VIR_QEMU_PROCESS_START_COLD))) {
P
Pavel Hrdina 已提交
450 451
        if (flags & FLAG_EXPECT_FAILURE)
            goto ok;
452
        goto cleanup;
J
Jiri Denemark 已提交
453 454
    }

E
Eric Blake 已提交
455
    if (!(actualargv = virCommandToString(cmd)))
456
        goto cleanup;
E
Eric Blake 已提交
457

458
    if (virTestCompareToFile(actualargv, args) < 0)
459
        goto cleanup;
460

P
Pavel Hrdina 已提交
461 462
    ret = 0;

463
 ok:
464
    if (ret == 0 && flags & FLAG_EXPECT_FAILURE) {
P
Pavel Hrdina 已提交
465 466
        ret = -1;
        VIR_TEST_DEBUG("Error expected but there wasn't any.\n");
467
        goto cleanup;
P
Pavel Hrdina 已提交
468
    }
469
    if (!virTestOOMActive()) {
470
        if (flags & FLAG_EXPECT_FAILURE) {
471
            if ((log = virTestLogContentAndReset()))
P
Pavel Hrdina 已提交
472 473
                VIR_TEST_DEBUG("Got expected error: \n%s", log);
        }
474
        virResetLastError();
P
Pavel Hrdina 已提交
475
        ret = 0;
476 477
    }

478
 cleanup:
479 480
    VIR_FREE(log);
    VIR_FREE(actualargv);
481
    virDomainChrSourceDefClear(&monitor_chr);
E
Eric Blake 已提交
482
    virCommandFree(cmd);
483
    virObjectUnref(vm);
484
    virObjectUnref(conn);
485
    VIR_FREE(migrateURI);
486 487
    VIR_FREE(xml);
    VIR_FREE(args);
488
    return ret;
489 490 491
}


492
static int
E
Eric Blake 已提交
493
mymain(void)
494 495
{
    int ret = 0;
496
    bool skipLegacyCPUs = false;
497

498 499
    abs_top_srcdir = getenv("abs_top_srcdir");
    if (!abs_top_srcdir)
500
        abs_top_srcdir = abs_srcdir "/..";
501

502 503 504 505 506 507 508 509 510 511
    /* 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;
    }

512
    if (qemuTestDriverInit(&driver) < 0)
513
        return EXIT_FAILURE;
514 515

    driver.privileged = true;
516

517 518 519
    VIR_FREE(driver.config->defaultTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->defaultTLSx509certdir, "/etc/pki/qemu") < 0)
        return EXIT_FAILURE;
520
    VIR_FREE(driver.config->vncTLSx509certdir);
521
    if (VIR_STRDUP_QUIET(driver.config->vncTLSx509certdir, "/etc/pki/libvirt-vnc") < 0)
522 523
        return EXIT_FAILURE;
    VIR_FREE(driver.config->spiceTLSx509certdir);
524
    if (VIR_STRDUP_QUIET(driver.config->spiceTLSx509certdir, "/etc/pki/libvirt-spice") < 0)
525
        return EXIT_FAILURE;
526 527 528
    VIR_FREE(driver.config->chardevTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->chardevTLSx509certdir, "/etc/pki/libvirt-chardev") < 0)
        return EXIT_FAILURE;
529

530
    VIR_FREE(driver.config->stateDir);
531
    if (VIR_STRDUP_QUIET(driver.config->stateDir, "/nowhere") < 0)
532
        return EXIT_FAILURE;
533
    VIR_FREE(driver.config->hugetlbfs);
534
    if (VIR_ALLOC_N(driver.config->hugetlbfs, 2) < 0)
535
        return EXIT_FAILURE;
536 537 538
    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)
539
        return EXIT_FAILURE;
540 541
    driver.config->hugetlbfs[0].size = 2048;
    driver.config->hugetlbfs[0].deflt = true;
542
    driver.config->hugetlbfs[1].size = 1048576;
543
    driver.config->spiceTLS = 1;
544
    if (VIR_STRDUP_QUIET(driver.config->spicePassword, "123456") < 0)
545
        return EXIT_FAILURE;
546

547 548 549 550
# define DO_TEST_FULL(name, migrateFrom, migrateFd, flags,               \
                      parseFlags, gic, ...)                              \
    do {                                                                 \
        static struct testInfo info = {                                  \
551 552
            name, NULL, migrateFrom, migrateFd, (flags), parseFlags,     \
            false                                                        \
553
        };                                                               \
554 555
        info.skipLegacyCPUs = skipLegacyCPUs;                            \
        if (testInitQEMUCaps(&info, gic) < 0)                            \
556
            return EXIT_FAILURE;                                         \
557
        virQEMUCapsSetList(info.qemuCaps, __VA_ARGS__, QEMU_CAPS_LAST);  \
558
        if (virTestRun("QEMU XML-2-ARGV " name,                          \
559
                       testCompareXMLToArgv, &info) < 0)                 \
560
            ret = -1;                                                    \
561
        virObjectUnref(info.qemuCaps);                                   \
562 563
    } while (0)

564
# define DO_TEST(name, ...)                                              \
565
    DO_TEST_FULL(name, NULL, -1, 0, 0, GIC_NONE, __VA_ARGS__)
566

567
# define DO_TEST_GIC(name, gic, ...)                                     \
568 569
    DO_TEST_FULL(name, NULL, -1, 0, 0, gic, __VA_ARGS__)

570 571
# define DO_TEST_FAILURE(name, ...)                                      \
    DO_TEST_FULL(name, NULL, -1, FLAG_EXPECT_FAILURE,                    \
572
                 0, GIC_NONE, __VA_ARGS__)
573

574 575 576
# define DO_TEST_PARSE_ERROR(name, ...)                                  \
    DO_TEST_FULL(name, NULL, -1,                                         \
                 FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE,          \
577
                 0, GIC_NONE, __VA_ARGS__)
578

579 580 581
# define DO_TEST_PARSE_FLAGS_ERROR(name, parseFlags, ...)                \
    DO_TEST_FULL(name, NULL, -1,                                         \
                 FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE,          \
582
                 parseFlags, GIC_NONE, __VA_ARGS__)
583

584
# define DO_TEST_LINUX(name, ...)                                        \
585
    DO_TEST_LINUX_FULL(name, NULL, -1, 0, 0, GIC_NONE, __VA_ARGS__)
586

587 588 589 590 591 592
# 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. */
593
#  define DO_TEST_LINUX_FULL(name, ...)                                  \
594
    DO_TEST_FULL(name, __VA_ARGS__)
595
# else  /* __linux__ */
596 597 598
#  define DO_TEST_LINUX_FULL(name, ...)                                  \
    do {                                                                 \
        const char *tmp ATTRIBUTE_UNUSED = name;                         \
599 600 601
    } while (0)
# endif /* __linux__ */

602
# define NONE QEMU_CAPS_LAST
603

604 605 606
    /* 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 */
607 608 609 610 611 612 613
    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");
614 615
    unsetenv("QEMU_AUDIO_DRV");
    unsetenv("SDL_AUDIODRIVER");
616

617
    DO_TEST("minimal", NONE);
618
    DO_TEST_PARSE_ERROR("minimal-no-memory", NONE);
619
    DO_TEST("minimal-msg-timestamp", QEMU_CAPS_MSG_TIMESTAMP);
620
    DO_TEST("machine-aliases1", NONE);
621
    DO_TEST("machine-aliases2", QEMU_CAPS_KVM);
622 623
    DO_TEST("machine-core-on", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_DUMP_GUEST_CORE);
624
    driver.config->dumpGuestCore = true;
625 626
    DO_TEST("machine-core-off", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_DUMP_GUEST_CORE);
627 628 629
    driver.config->dumpGuestCore = false;
    DO_TEST("machine-core-cfg-off", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_DUMP_GUEST_CORE);
630
    DO_TEST_FAILURE("machine-core-on", NONE);
631
    DO_TEST_FAILURE("machine-core-on", QEMU_CAPS_MACHINE_OPT);
M
Michal Privoznik 已提交
632 633 634 635 636 637 638
    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 已提交
639 640
    DO_TEST("machine-usb-opt", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_USB_OPT);
641 642
    DO_TEST("machine-vmport-opt", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_VMPORT_OPT);
643
    DO_TEST("kvm", QEMU_CAPS_MACHINE_OPT);
644 645
    DO_TEST("default-kvm-host-arch", QEMU_CAPS_MACHINE_OPT);
    DO_TEST("default-qemu-host-arch", QEMU_CAPS_MACHINE_OPT);
646 647 648
    DO_TEST("boot-cdrom", NONE);
    DO_TEST("boot-network", NONE);
    DO_TEST("boot-floppy", NONE);
649
    DO_TEST("boot-floppy-q35",
650
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
651
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
652
            QEMU_CAPS_ICH9_AHCI);
653
    DO_TEST("bootindex-floppy-q35",
654
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
655
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
656
            QEMU_CAPS_ICH9_AHCI, QEMU_CAPS_BOOT_MENU,
657
            QEMU_CAPS_BOOTINDEX);
658 659
    DO_TEST("boot-multi", QEMU_CAPS_BOOT_MENU);
    DO_TEST("boot-menu-enable",
660
            QEMU_CAPS_BOOT_MENU);
661
    DO_TEST("boot-menu-enable-bootindex",
662
            QEMU_CAPS_BOOT_MENU,
663
            QEMU_CAPS_BOOTINDEX);
664
    DO_TEST("boot-menu-enable-with-timeout",
665
            QEMU_CAPS_BOOT_MENU,
666
            QEMU_CAPS_SPLASH_TIMEOUT);
667
    DO_TEST_FAILURE("boot-menu-enable-with-timeout", QEMU_CAPS_BOOT_MENU);
668
    DO_TEST_PARSE_ERROR("boot-menu-enable-with-timeout-invalid", NONE);
669 670
    DO_TEST("boot-menu-disable", QEMU_CAPS_BOOT_MENU);
    DO_TEST("boot-menu-disable-drive",
671
            QEMU_CAPS_BOOT_MENU);
672
    DO_TEST("boot-menu-disable-drive-bootindex",
673
            QEMU_CAPS_BOOT_MENU,
674
            QEMU_CAPS_BOOTINDEX);
675
    DO_TEST_PARSE_ERROR("boot-dev+order",
676
            QEMU_CAPS_BOOTINDEX,
677
            QEMU_CAPS_VIRTIO_BLK_SCSI);
678
    DO_TEST("boot-order",
679
            QEMU_CAPS_BOOTINDEX,
680
            QEMU_CAPS_VIRTIO_BLK_SCSI);
681
    DO_TEST("boot-complex",
682
            QEMU_CAPS_DRIVE_BOOT,
683
            QEMU_CAPS_VIRTIO_BLK_SCSI);
684
    DO_TEST("boot-complex-bootindex",
685
            QEMU_CAPS_DRIVE_BOOT,
686
            QEMU_CAPS_BOOTINDEX,
687
            QEMU_CAPS_VIRTIO_BLK_SCSI);
688
    DO_TEST("boot-strict",
689
            QEMU_CAPS_DRIVE_BOOT,
690
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_BOOT_STRICT,
691
            QEMU_CAPS_VIRTIO_BLK_SCSI);
692 693 694 695 696

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

697
    DO_TEST("bios", QEMU_CAPS_SGA);
J
Ján Tomko 已提交
698
    DO_TEST("bios-nvram", NONE);
M
Michal Privoznik 已提交
699 700 701 702 703 704 705
    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);
706
    DO_TEST("clock-utc", QEMU_CAPS_NODEFCONFIG);
707
    DO_TEST("clock-localtime", NONE);
708
    DO_TEST("clock-localtime-basis-localtime", QEMU_CAPS_RTC);
709 710
    DO_TEST("clock-variable", QEMU_CAPS_RTC);
    DO_TEST("clock-france", QEMU_CAPS_RTC);
711 712
    DO_TEST("clock-hpet-off", QEMU_CAPS_RTC, QEMU_CAPS_NO_HPET,
            QEMU_CAPS_NO_KVM_PIT);
713
    DO_TEST("clock-catchup", QEMU_CAPS_RTC, QEMU_CAPS_NO_KVM_PIT);
714
    DO_TEST("cpu-kvmclock", QEMU_CAPS_ENABLE_KVM);
A
Andrea Bolognani 已提交
715
    DO_TEST("cpu-host-kvmclock", QEMU_CAPS_ENABLE_KVM);
716
    DO_TEST("kvmclock", QEMU_CAPS_KVM);
717
    DO_TEST("clock-timer-hyperv-rtc", QEMU_CAPS_KVM);
718

719 720
    DO_TEST("cpu-eoi-disabled", QEMU_CAPS_ENABLE_KVM);
    DO_TEST("cpu-eoi-enabled", QEMU_CAPS_ENABLE_KVM);
J
Ján Tomko 已提交
721
    DO_TEST("controller-order",
722
            QEMU_CAPS_KVM, QEMU_CAPS_ENABLE_KVM,
723 724 725
            QEMU_CAPS_BOOT_MENU, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_DRIVE_AIO,
            QEMU_CAPS_CCID_PASSTHRU, QEMU_CAPS_CHARDEV,
726 727
            QEMU_CAPS_CHARDEV_SPICEVMC, QEMU_CAPS_SPICE,
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_USB_HUB);
728 729
    DO_TEST("eoi-disabled", NONE);
    DO_TEST("eoi-enabled", NONE);
730 731
    DO_TEST("pv-spinlock-disabled", NONE);
    DO_TEST("pv-spinlock-enabled", NONE);
M
Martin Kletzander 已提交
732
    DO_TEST("kvmclock+eoi-disabled", QEMU_CAPS_ENABLE_KVM);
733

734
    DO_TEST("hyperv", NONE);
735
    DO_TEST("hyperv-off", NONE);
736
    DO_TEST("hyperv-panic", NONE);
737

738 739 740
    DO_TEST("kvm-features", NONE);
    DO_TEST("kvm-features-off", NONE);

741 742 743
    DO_TEST("pmu-feature", NONE);
    DO_TEST("pmu-feature-off", NONE);

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

942 943
    DO_TEST("graphics-vnc", QEMU_CAPS_VNC);
    DO_TEST("graphics-vnc-socket", QEMU_CAPS_VNC);
944
    DO_TEST("graphics-vnc-websocket", QEMU_CAPS_VNC, QEMU_CAPS_VNC_WEBSOCKET);
945
    DO_TEST("graphics-vnc-policy", QEMU_CAPS_VNC, QEMU_CAPS_VNC_SHARE_POLICY);
P
Pavel Hrdina 已提交
946
    DO_TEST("graphics-vnc-no-listen-attr", QEMU_CAPS_VNC);
947 948 949 950
    DO_TEST("graphics-vnc-remove-generated-socket", QEMU_CAPS_VNC);
    driver.config->vncAutoUnixSocket = true;
    DO_TEST("graphics-vnc-auto-socket-cfg", QEMU_CAPS_VNC);
    driver.config->vncAutoUnixSocket = false;
951 952
    DO_TEST("graphics-vnc-socket", QEMU_CAPS_VNC);
    DO_TEST("graphics-vnc-auto-socket", QEMU_CAPS_VNC);
953
    DO_TEST("graphics-vnc-none", QEMU_CAPS_VNC);
954

955 956
    driver.config->vncSASL = 1;
    VIR_FREE(driver.config->vncSASLdir);
957
    ignore_value(VIR_STRDUP(driver.config->vncSASLdir, "/root/.sasl2"));
958
    DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VNC);
959 960
    driver.config->vncTLS = 1;
    driver.config->vncTLSx509verify = 1;
961
    DO_TEST("graphics-vnc-tls", QEMU_CAPS_VNC);
962
    driver.config->vncSASL = driver.config->vncTLSx509verify = driver.config->vncTLS = 0;
963 964
    VIR_FREE(driver.config->vncSASLdir);
    VIR_FREE(driver.config->vncTLSx509certdir);
965

966 967
    DO_TEST("graphics-sdl", QEMU_CAPS_SDL);
    DO_TEST("graphics-sdl-fullscreen", QEMU_CAPS_SDL);
968
    DO_TEST("nographics", NONE);
P
Paolo Bonzini 已提交
969 970
    DO_TEST("nographics-display",
            QEMU_CAPS_DISPLAY);
971
    DO_TEST("nographics-vga",
972
            QEMU_CAPS_VGA_NONE);
973
    DO_TEST("graphics-spice",
974
            QEMU_CAPS_VGA_QXL,
975
            QEMU_CAPS_SPICE,
976 977
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
978 979
    DO_TEST("graphics-spice-no-args",
            QEMU_CAPS_SPICE);
980 981 982
    driver.config->spiceSASL = 1;
    ignore_value(VIR_STRDUP(driver.config->spiceSASLdir, "/root/.sasl2"));
    DO_TEST("graphics-spice-sasl",
983
            QEMU_CAPS_VGA_QXL,
984
            QEMU_CAPS_SPICE,
985 986 987
            QEMU_CAPS_DEVICE_QXL);
    VIR_FREE(driver.config->spiceSASLdir);
    driver.config->spiceSASL = 0;
988
    DO_TEST("graphics-spice-agentmouse",
989
            QEMU_CAPS_VGA_QXL,
990
            QEMU_CAPS_SPICE,
991 992
            QEMU_CAPS_CHARDEV_SPICEVMC,
            QEMU_CAPS_NODEFCONFIG);
993
    DO_TEST("graphics-spice-compression",
994
            QEMU_CAPS_VGA_QXL,
995
            QEMU_CAPS_SPICE,
996
            QEMU_CAPS_DEVICE_QXL);
997
    DO_TEST("graphics-spice-timeout",
998
            QEMU_CAPS_KVM,
999
            QEMU_CAPS_VGA_QXL,
1000
            QEMU_CAPS_SPICE,
1001
            QEMU_CAPS_DEVICE_QXL_VGA);
1002
    DO_TEST("graphics-spice-qxl-vga",
1003
            QEMU_CAPS_VGA_QXL,
1004
            QEMU_CAPS_SPICE,
1005 1006
            QEMU_CAPS_DEVICE_QXL_VGA,
            QEMU_CAPS_DEVICE_QXL);
1007
    DO_TEST("graphics-spice-usb-redir",
1008
            QEMU_CAPS_SPICE,
1009
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1010 1011 1012
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_CHARDEV_SPICEVMC);
1013
    DO_TEST("graphics-spice-agent-file-xfer",
1014
            QEMU_CAPS_VGA_QXL,
1015
            QEMU_CAPS_SPICE,
1016 1017 1018
            QEMU_CAPS_DEVICE_QXL_VGA,
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
1019 1020 1021 1022 1023 1024
    DO_TEST("graphics-spice-socket",
            QEMU_CAPS_SPICE,
            QEMU_CAPS_SPICE_UNIX);
    DO_TEST("graphics-spice-auto-socket",
            QEMU_CAPS_SPICE,
            QEMU_CAPS_SPICE_UNIX);
1025 1026 1027 1028 1029
    driver.config->spiceAutoUnixSocket = true;
    DO_TEST("graphics-spice-auto-socket-cfg",
            QEMU_CAPS_SPICE,
            QEMU_CAPS_SPICE_UNIX);
    driver.config->spiceAutoUnixSocket = false;
1030

1031 1032 1033
    DO_TEST("input-usbmouse", NONE);
    DO_TEST("input-usbtablet", NONE);
    DO_TEST("misc-acpi", NONE);
1034 1035 1036
    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);
1037
    DO_TEST_FAILURE("misc-enable-s4", NONE);
1038
    DO_TEST("misc-no-reboot", NONE);
1039
    DO_TEST("misc-uuid", NONE);
1040
    DO_TEST_PARSE_ERROR("vhost_queues-invalid", NONE);
1041
    DO_TEST("net-vhostuser", QEMU_CAPS_NETDEV);
1042
    DO_TEST("net-vhostuser-multiq",
1043 1044
            QEMU_CAPS_NETDEV, QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
    DO_TEST_FAILURE("net-vhostuser-multiq", QEMU_CAPS_NETDEV);
1045 1046 1047
    DO_TEST("net-user", NONE);
    DO_TEST("net-virtio", NONE);
    DO_TEST("net-virtio-device",
1048
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_VIRTIO_TX_ALG);
1049
    DO_TEST("net-virtio-disable-offloads",
1050
            QEMU_CAPS_NODEFCONFIG);
1051
    DO_TEST("net-virtio-netdev",
1052
            QEMU_CAPS_NETDEV, QEMU_CAPS_NODEFCONFIG);
1053
    DO_TEST("net-virtio-s390",
1054
            QEMU_CAPS_VIRTIO_S390);
1055
    DO_TEST("net-virtio-ccw",
1056
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1057 1058
    DO_TEST("net-virtio-rxqueuesize",
            QEMU_CAPS_VIRTIO_NET_RX_QUEUE_SIZE);
1059
    DO_TEST_PARSE_ERROR("net-virtio-rxqueuesize-invalid-size", NONE);
1060 1061
    DO_TEST("net-eth", NONE);
    DO_TEST("net-eth-ifname", NONE);
1062
    DO_TEST("net-eth-names", NONE);
1063
    DO_TEST("net-eth-hostip", NONE);
1064 1065 1066
    DO_TEST("net-client", NONE);
    DO_TEST("net-server", NONE);
    DO_TEST("net-mcast", NONE);
1067
    DO_TEST("net-udp", NONE);
1068
    DO_TEST("net-hostdev",
J
Ján Tomko 已提交
1069
            QEMU_CAPS_NODEFCONFIG);
1070
    DO_TEST("net-hostdev-multidomain",
J
Ján Tomko 已提交
1071
            QEMU_CAPS_NODEFCONFIG,
1072 1073 1074
            QEMU_CAPS_HOST_PCI_MULTIDOMAIN);
    DO_TEST_FAILURE("net-hostdev-multidomain",
                    QEMU_CAPS_NODEFCONFIG);
1075
    DO_TEST("net-hostdev-vfio",
J
Ján Tomko 已提交
1076
            QEMU_CAPS_NODEFCONFIG,
1077
            QEMU_CAPS_DEVICE_VFIO_PCI);
1078
    DO_TEST("net-hostdev-vfio-multidomain",
J
Ján Tomko 已提交
1079
            QEMU_CAPS_NODEFCONFIG,
1080 1081 1082
            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);
1083

1084 1085 1086 1087
    DO_TEST("serial-vc", NONE);
    DO_TEST("serial-pty", NONE);
    DO_TEST("serial-dev", NONE);
    DO_TEST("serial-file", NONE);
1088 1089
    DO_TEST("serial-file-log", QEMU_CAPS_CHARDEV, QEMU_CAPS_CHARDEV_FILE_APPEND,
            QEMU_CAPS_CHARDEV_LOGFILE);
1090 1091 1092 1093 1094
    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);
1095
    DO_TEST("serial-spiceport",
1096
            QEMU_CAPS_CHARDEV,
1097 1098 1099
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_QXL_VGA,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEPORT);
1100
    DO_TEST("serial-spiceport-nospice", NONE);
1101

1102 1103 1104 1105 1106
    DO_TEST("parallel-tcp", NONE);
    DO_TEST("console-compat", NONE);
    DO_TEST("console-compat-auto", NONE);

    DO_TEST("serial-vc-chardev",
1107
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1108
    DO_TEST("serial-pty-chardev",
1109
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1110
    DO_TEST("serial-dev-chardev",
1111
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1112
    DO_TEST("serial-dev-chardev-iobase",
1113
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1114
    DO_TEST("serial-file-chardev",
1115
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1116
            QEMU_CAPS_CHARDEV_FILE_APPEND);
1117
    DO_TEST("serial-unix-chardev",
1118
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1119
    DO_TEST("serial-tcp-chardev",
1120
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1121
    DO_TEST("serial-udp-chardev",
1122
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1123
    DO_TEST("serial-tcp-telnet-chardev",
1124
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1125 1126 1127 1128 1129 1130
    driver.config->chardevTLS = 1;
    DO_TEST("serial-tcp-tlsx509-chardev",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
    driver.config->chardevTLS = 0;
    VIR_FREE(driver.config->chardevTLSx509certdir);
1131
    DO_TEST("serial-many-chardev",
1132
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1133
    DO_TEST("parallel-tcp-chardev",
1134
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1135
    DO_TEST("parallel-parport-chardev",
1136
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1137
    DO_TEST("console-compat-chardev",
1138
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
M
Michal Privoznik 已提交
1139
    DO_TEST("pci-serial-dev-chardev",
1140
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
M
Michal Privoznik 已提交
1141
            QEMU_CAPS_DEVICE_PCI_SERIAL);
1142

1143
    DO_TEST("channel-guestfwd",
1144
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1145
    DO_TEST("channel-virtio",
1146
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1147
    DO_TEST("channel-virtio-state",
1148
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1149
    DO_TEST("channel-virtio-auto",
1150
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1151
    DO_TEST("channel-virtio-autoassign",
1152
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
J
Ján Tomko 已提交
1153
    DO_TEST("channel-virtio-autoadd",
1154
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1155
    DO_TEST("console-virtio",
1156
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1157
    DO_TEST("console-virtio-many",
1158
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1159
    DO_TEST("console-virtio-s390",
1160
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1161
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390);
1162
    DO_TEST("console-virtio-ccw",
1163
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1164
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_CCW,
1165
            QEMU_CAPS_VIRTIO_S390);
1166
    DO_TEST("console-sclp",
1167
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1168
            QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_SCLP_S390);
1169
    DO_TEST("channel-spicevmc",
1170
            QEMU_CAPS_NODEFCONFIG,
1171
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC);
1172
    DO_TEST("channel-spicevmc-old",
1173
            QEMU_CAPS_NODEFCONFIG,
1174
            QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_SPICEVMC);
1175
    DO_TEST("channel-virtio-default",
1176
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1177
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC);
1178
    DO_TEST("channel-virtio-unix",
1179
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1180

1181
    DO_TEST("smartcard-host",
1182
            QEMU_CAPS_CHARDEV,
1183
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);
1184
    DO_TEST("smartcard-host-certificates",
1185
            QEMU_CAPS_CHARDEV,
1186
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);
1187
    DO_TEST("smartcard-passthrough-tcp",
1188
            QEMU_CAPS_CHARDEV,
1189
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_PASSTHRU);
1190
    DO_TEST("smartcard-passthrough-spicevmc",
1191
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1192
            QEMU_CAPS_CCID_PASSTHRU, QEMU_CAPS_CHARDEV_SPICEVMC);
1193
    DO_TEST("smartcard-controller",
1194
            QEMU_CAPS_CHARDEV,
1195 1196
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);

1197
    DO_TEST("usb-controller",
1198
            QEMU_CAPS_CHARDEV,
1199
            QEMU_CAPS_NODEFCONFIG);
1200
    DO_TEST("usb-piix3-controller",
1201
            QEMU_CAPS_CHARDEV, QEMU_CAPS_PIIX3_USB_UHCI,
1202
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_NODEFCONFIG);
1203
    DO_TEST("usb-ich9-ehci-addr",
1204
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1205
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1);
1206
    DO_TEST("input-usbmouse-addr",
1207
            QEMU_CAPS_NODEFCONFIG);
1208
    DO_TEST("usb-ich9-companion",
1209
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1210
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1);
1211
    DO_TEST_PARSE_ERROR("usb-ich9-no-companion",
1212
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1213
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1);
1214 1215 1216 1217
    DO_TEST("usb-ich9-autoassign",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_HUB);
1218
    DO_TEST("usb-hub",
1219
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
M
Marc-André Lureau 已提交
1220
            QEMU_CAPS_NODEFCONFIG);
1221 1222 1223
    DO_TEST("usb-hub-autoadd",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
J
Ján Tomko 已提交
1224 1225 1226
    DO_TEST_PARSE_ERROR("usb-hub-conflict",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
1227 1228 1229
    DO_TEST_PARSE_ERROR("usb-hub-nonexistent",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
J
Ján Tomko 已提交
1230 1231 1232
    DO_TEST("usb-port-missing",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
1233
    DO_TEST("usb-ports",
1234
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
1235
            QEMU_CAPS_NODEFCONFIG);
1236 1237 1238
    DO_TEST("usb-port-autoassign",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
1239
    DO_TEST("usb-redir",
1240
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1241
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB,
1242 1243
            QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC);
1244
    DO_TEST("usb-redir-boot",
1245
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1246 1247 1248 1249
            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);
1250
    DO_TEST("usb-redir-filter",
1251
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1252 1253 1254 1255
            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);
1256
    DO_TEST("usb-redir-filter-version",
1257
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1258 1259 1260
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC,
            QEMU_CAPS_USB_REDIR_FILTER);
1261
    DO_TEST("usb1-usb2",
1262
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1263 1264
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_USB_HUB, QEMU_CAPS_ICH9_USB_EHCI1);
1265
    DO_TEST("usb-none",
1266
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1267
    DO_TEST_PARSE_ERROR("usb-none-other",
1268
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1269
    DO_TEST_PARSE_ERROR("usb-none-hub",
1270
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1271 1272
            QEMU_CAPS_USB_HUB);
    DO_TEST_PARSE_ERROR("usb-none-usbtablet",
1273
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1274
    DO_TEST("usb-controller-default-q35",
1275
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1276 1277 1278
            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",
1279
                    QEMU_CAPS_DEVICE_PCI_BRIDGE,
1280 1281 1282
                    QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_PCI_OHCI,
                    QEMU_CAPS_NEC_USB_XHCI);
    DO_TEST("usb-controller-explicit-q35",
1283
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1284 1285 1286
            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",
1287
                    QEMU_CAPS_DEVICE_PCI_BRIDGE,
1288 1289
                    QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_PCI_OHCI,
                    QEMU_CAPS_PIIX3_USB_UHCI);
1290 1291 1292
    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);
1293 1294 1295 1296
    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);
1297

1298
    DO_TEST("smbios", QEMU_CAPS_SMBIOS_TYPE);
1299
    DO_TEST_PARSE_ERROR("smbios-date", QEMU_CAPS_SMBIOS_TYPE);
1300
    DO_TEST_PARSE_ERROR("smbios-uuid-match", QEMU_CAPS_SMBIOS_TYPE);
1301

1302
    DO_TEST("watchdog", NONE);
1303
    DO_TEST("watchdog-device", QEMU_CAPS_NODEFCONFIG);
1304
    DO_TEST("watchdog-dump", NONE);
1305
    DO_TEST("watchdog-injectnmi", NONE);
1306
    DO_TEST("watchdog-diag288",
1307
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1308
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390);
1309 1310
    DO_TEST("balloon-device", QEMU_CAPS_NODEFCONFIG);
    DO_TEST("balloon-device-deflate", QEMU_CAPS_NODEFCONFIG,
1311
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1312
    DO_TEST("balloon-ccw-deflate", QEMU_CAPS_NODEFCONFIG,
1313
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1314
    DO_TEST("balloon-mmio-deflate", QEMU_CAPS_NODEFCONFIG,
1315 1316
            QEMU_CAPS_DTB, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1317
    DO_TEST("balloon-device-deflate-off", QEMU_CAPS_NODEFCONFIG,
1318
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1319
    DO_TEST("balloon-device-auto",
1320 1321
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("balloon-device-period", QEMU_CAPS_NODEFCONFIG);
1322 1323
    DO_TEST("sound", NONE);
    DO_TEST("sound-device",
1324
            QEMU_CAPS_NODEFCONFIG,
1325
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_HDA_MICRO,
1326 1327
            QEMU_CAPS_DEVICE_ICH9_INTEL_HDA,
            QEMU_CAPS_OBJECT_USB_AUDIO);
1328
    DO_TEST("fs9p",
1329
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_FSDEV,
1330
            QEMU_CAPS_FSDEV_WRITEOUT);
1331
    DO_TEST("fs9p-ccw",
1332
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_FSDEV,
1333
            QEMU_CAPS_FSDEV_WRITEOUT,
1334
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1335

1336 1337
    DO_TEST("hostdev-usb-address", NONE);
    DO_TEST("hostdev-usb-address-device",
1338 1339
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("hostdev-usb-address-device-boot",
1340 1341
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_USB_HOST_BOOTINDEX);
J
Ján Tomko 已提交
1342
    DO_TEST("hostdev-pci-address", NONE);
1343
    DO_TEST("hostdev-pci-address-device",
J
Ján Tomko 已提交
1344
            QEMU_CAPS_NODEFCONFIG);
1345
    DO_TEST("hostdev-vfio",
J
Ján Tomko 已提交
1346
            QEMU_CAPS_NODEFCONFIG,
1347
            QEMU_CAPS_DEVICE_VFIO_PCI);
1348
    DO_TEST("hostdev-vfio-multidomain",
J
Ján Tomko 已提交
1349
            QEMU_CAPS_NODEFCONFIG,
1350 1351 1352
            QEMU_CAPS_DEVICE_VFIO_PCI, QEMU_CAPS_HOST_PCI_MULTIDOMAIN);
    DO_TEST_FAILURE("hostdev-vfio-multidomain",
                    QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VFIO_PCI);
1353
    DO_TEST("pci-rom",
J
Ján Tomko 已提交
1354
            QEMU_CAPS_NODEFCONFIG);
1355

1356 1357 1358 1359
    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);
1360

1361
    DO_TEST_LINUX_FULL("migrate-numa-unaligned", "stdio", 7, 0, 0, GIC_NONE,
1362
                       QEMU_CAPS_NUMA,
1363 1364
                       QEMU_CAPS_OBJECT_MEMORY_RAM);

1365
    DO_TEST("qemu-ns", NONE);
1366
    DO_TEST("qemu-ns-no-env", NONE);
1367

1368
    DO_TEST("smp", NONE);
1369

J
John Ferlan 已提交
1370
    DO_TEST("iothreads", QEMU_CAPS_OBJECT_IOTHREAD);
1371 1372
    DO_TEST("iothreads-ids", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-ids-partial", QEMU_CAPS_OBJECT_IOTHREAD);
1373
    DO_TEST_FAILURE("iothreads-nocap", NONE);
1374 1375
    DO_TEST("iothreads-disk", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-disk-virtio-ccw", QEMU_CAPS_OBJECT_IOTHREAD,
1376
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1377 1378 1379 1380 1381 1382
    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 已提交
1383

1384 1385
    DO_TEST("cpu-topology1", NONE);
    DO_TEST("cpu-topology2", NONE);
1386
    DO_TEST("cpu-topology3", NONE);
1387 1388 1389 1390 1391 1392 1393 1394
    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);
1395
    DO_TEST("cpu-numa1", NONE);
1396 1397
    DO_TEST("cpu-numa2", NONE);
    DO_TEST("cpu-numa-no-memory-element", NONE);
1398
    DO_TEST_PARSE_ERROR("cpu-numa3", NONE);
1399 1400
    DO_TEST_FAILURE("cpu-numa-disjoint", NONE);
    DO_TEST("cpu-numa-disjoint", QEMU_CAPS_NUMA);
1401 1402
    DO_TEST_FAILURE("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_RAM);
    DO_TEST_FAILURE("cpu-numa-memshared", NONE);
1403
    DO_TEST("cpu-host-model", NONE);
1404
    DO_TEST("cpu-host-model-vendor", NONE);
1405
    skipLegacyCPUs = true;
1406
    DO_TEST("cpu-host-model-fallback", NONE);
1407
    DO_TEST_FAILURE("cpu-host-model-nofallback", NONE);
1408
    skipLegacyCPUs = false;
A
Andrea Bolognani 已提交
1409
    DO_TEST("cpu-host-passthrough", QEMU_CAPS_KVM);
1410
    DO_TEST_FAILURE("cpu-host-passthrough", NONE);
A
Andrea Bolognani 已提交
1411
    DO_TEST_FAILURE("cpu-qemu-host-passthrough", QEMU_CAPS_KVM);
1412

1413 1414 1415 1416 1417
    driver.caps->host.cpu = cpuHaswell;
    DO_TEST("cpu-Haswell", QEMU_CAPS_KVM);
    DO_TEST("cpu-Haswell2", QEMU_CAPS_KVM);
    DO_TEST("cpu-Haswell3", QEMU_CAPS_KVM);
    DO_TEST("cpu-Haswell-noTSX", QEMU_CAPS_KVM);
1418
    DO_TEST("cpu-host-model-cmt", NONE);
1419 1420
    driver.caps->host.cpu = cpuDefault;

1421
    DO_TEST("encrypted-disk", NONE);
J
John Ferlan 已提交
1422
    DO_TEST("encrypted-disk-usage", NONE);
1423
# ifdef HAVE_GNUTLS_CIPHER_ENCRYPT
1424
    DO_TEST("luks-disks", QEMU_CAPS_OBJECT_SECRET);
1425 1426 1427
# else
    DO_TEST_FAILURE("luks-disks", QEMU_CAPS_OBJECT_SECRET);
# endif
1428

1429 1430 1431 1432 1433 1434 1435 1436
    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);
1437
    DO_TEST("cputune-numatune",
1438
            QEMU_CAPS_KVM,
1439
            QEMU_CAPS_OBJECT_IOTHREAD,
1440 1441
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1442

1443
    DO_TEST("numatune-memory", NONE);
1444
    DO_TEST_PARSE_ERROR("numatune-memory-invalid-nodeset", NONE);
1445 1446
    DO_TEST_LINUX("numatune-memnode", QEMU_CAPS_NUMA,
                  QEMU_CAPS_OBJECT_MEMORY_RAM);
1447 1448
    DO_TEST_FAILURE("numatune-memnode", NONE);

1449 1450
    DO_TEST_LINUX("numatune-memnode-no-memory", QEMU_CAPS_NUMA,
                  QEMU_CAPS_OBJECT_MEMORY_RAM);
1451 1452
    DO_TEST_FAILURE("numatune-memnode-no-memory", NONE);

1453
    DO_TEST("numatune-auto-nodeset-invalid", NONE);
1454 1455
    DO_TEST("numatune-auto-prefer", QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1456 1457
    DO_TEST_FAILURE("numatune-static-nodeset-exceed-hostnode",
                    QEMU_CAPS_OBJECT_MEMORY_RAM);
1458 1459
    DO_TEST_PARSE_ERROR("numatune-memnode-nocpu", NONE);
    DO_TEST_PARSE_ERROR("numatune-memnodes-problematic", NONE);
1460 1461
    DO_TEST("numad", NONE);
    DO_TEST("numad-auto-vcpu-static-numatune", NONE);
1462
    DO_TEST_PARSE_ERROR("numad-auto-vcpu-static-numatune-no-nodeset", NONE);
1463 1464 1465
    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);
1466
    DO_TEST("blkdeviotune",
1467
            QEMU_CAPS_DRIVE_IOTUNE);
1468
    DO_TEST("blkdeviotune-max",
1469
            QEMU_CAPS_DRIVE_IOTUNE,
1470
            QEMU_CAPS_DRIVE_IOTUNE_MAX);
1471

1472
    DO_TEST("multifunction-pci-device",
1473
            QEMU_CAPS_NODEFCONFIG,
1474
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_SCSI_LSI);
1475

1476
    DO_TEST("monitor-json",
1477
            QEMU_CAPS_CHARDEV, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_NODEFCONFIG);
1478
    DO_TEST("no-shutdown",
1479 1480
            QEMU_CAPS_CHARDEV, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_NO_SHUTDOWN);
1481

1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493
    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);
1494

1495
    DO_TEST("pseries-basic",
1496
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1497
    DO_TEST("pseries-vio",
1498
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1499
    DO_TEST("pseries-usb-default",
1500
            QEMU_CAPS_CHARDEV,
1501 1502
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_PCI_OHCI, QEMU_CAPS_PCI_MULTIFUNCTION);
1503
    DO_TEST("pseries-usb-multi",
1504
            QEMU_CAPS_CHARDEV,
1505 1506
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_PCI_OHCI, QEMU_CAPS_PCI_MULTIFUNCTION);
1507
    DO_TEST("pseries-vio-user-assigned",
1508
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1509
    DO_TEST_PARSE_ERROR("pseries-vio-address-clash",
1510
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1511
    DO_TEST("pseries-nvram", QEMU_CAPS_DEVICE_NVRAM);
1512 1513
    DO_TEST("pseries-usb-kbd", QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_DEVICE_USB_KBD, QEMU_CAPS_CHARDEV,
1514 1515
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("pseries-cpu-exact", QEMU_CAPS_CHARDEV,
1516
            QEMU_CAPS_NODEFCONFIG);
A
Andrea Bolognani 已提交
1517
    DO_TEST("pseries-cpu-compat", QEMU_CAPS_KVM,
1518
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
A
Andrea Bolognani 已提交
1519
    DO_TEST("pseries-cpu-le", QEMU_CAPS_KVM,
1520
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1521
    DO_TEST("pseries-panic-missing",
1522
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1523
    DO_TEST("pseries-panic-no-address",
1524
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1525
    DO_TEST_FAILURE("pseries-panic-address",
1526
                    QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1527
    DO_TEST("disk-ide-drive-split",
1528
            QEMU_CAPS_NODEFCONFIG,
1529
            QEMU_CAPS_IDE_CD);
1530
    DO_TEST("disk-ide-wwn",
1531
            QEMU_CAPS_IDE_CD,
1532
            QEMU_CAPS_DRIVE_SERIAL, QEMU_CAPS_IDE_DRIVE_WWN);
1533

1534
    DO_TEST("disk-geometry", NONE);
V
Viktor Mihajlovski 已提交
1535
    DO_TEST("disk-blockio",
1536
            QEMU_CAPS_NODEFCONFIG,
V
Viktor Mihajlovski 已提交
1537
            QEMU_CAPS_IDE_CD, QEMU_CAPS_BLOCKIO);
1538

1539 1540
    DO_TEST("video-device-pciaddr-default",
            QEMU_CAPS_KVM, QEMU_CAPS_VNC,
1541
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1542 1543
            QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_QXL_VGA,
            QEMU_CAPS_DEVICE_PCI_BRIDGE);
1544
    DO_TEST("video-vga-nodevice", NONE);
1545
    DO_TEST("video-vga-device", QEMU_CAPS_DEVICE_VGA,
1546
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1547
    DO_TEST("video-vga-device-vgamem", QEMU_CAPS_DEVICE_VGA,
1548
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_VGA_VGAMEM);
1549
    DO_TEST("video-qxl-nodevice", QEMU_CAPS_VGA_QXL);
1550
    DO_TEST("video-qxl-device", QEMU_CAPS_DEVICE_QXL_VGA,
1551
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1552
    DO_TEST("video-qxl-device-vgamem",
1553 1554
            QEMU_CAPS_DEVICE_QXL_VGA, QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_QXL_VGA_VGAMEM);
1555
    DO_TEST_FAILURE("video-qxl-sec-nodevice", QEMU_CAPS_VGA_QXL);
1556
    DO_TEST("video-qxl-sec-device", QEMU_CAPS_DEVICE_QXL_VGA,
1557
            QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1558
    DO_TEST("video-qxl-sec-device-vgamem",
1559
            QEMU_CAPS_DEVICE_QXL_VGA, QEMU_CAPS_DEVICE_QXL,
1560 1561
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_QXL_VGA_VGAMEM,
            QEMU_CAPS_QXL_VGAMEM);
1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575
    DO_TEST("video-qxl-heads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA_QXL,
            QEMU_CAPS_DEVICE_QXL_VGA,
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_QXL_MAX_OUTPUTS,
            QEMU_CAPS_QXL_VGA_MAX_OUTPUTS);
    DO_TEST("video-qxl-noheads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA_QXL,
            QEMU_CAPS_DEVICE_QXL_VGA,
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_QXL_MAX_OUTPUTS,
            QEMU_CAPS_QXL_VGA_MAX_OUTPUTS);
M
Marc-André Lureau 已提交
1576
    DO_TEST("video-virtio-gpu-device",
1577
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
M
Marc-André Lureau 已提交
1578
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1579
    DO_TEST("video-virtio-gpu-virgl",
1580
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
1581 1582
            QEMU_CAPS_DEVICE_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1583 1584 1585 1586 1587 1588
    DO_TEST("video-virtio-gpu-spice-gl",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_SPICE,
            QEMU_CAPS_SPICE_GL,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1589
    DO_TEST_PARSE_ERROR("video-invalid", NONE);
1590

1591
    DO_TEST("virtio-rng-default", QEMU_CAPS_DEVICE_VIRTIO_RNG,
1592
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1593
    DO_TEST("virtio-rng-random", QEMU_CAPS_DEVICE_VIRTIO_RNG,
1594
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1595
    DO_TEST("virtio-rng-egd", QEMU_CAPS_DEVICE_VIRTIO_RNG,
1596
            QEMU_CAPS_OBJECT_RNG_EGD);
1597
    DO_TEST("virtio-rng-multiple", QEMU_CAPS_DEVICE_VIRTIO_RNG,
1598
            QEMU_CAPS_OBJECT_RNG_EGD, QEMU_CAPS_OBJECT_RNG_RANDOM);
1599
    DO_TEST_PARSE_ERROR("virtio-rng-egd-crash",
1600
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_EGD);
1601
    DO_TEST("virtio-rng-ccw",
1602
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1603
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_CCW,
1604 1605
            QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1606

1607
    DO_TEST("s390-allow-bogus-usb-none",
1608
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1609
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390,
1610
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
1611
    DO_TEST("s390-allow-bogus-usb-controller",
1612
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1613
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390,
1614 1615
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);

1616 1617 1618 1619 1620 1621 1622 1623 1624 1625
    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 已提交
1626
    DO_TEST("ppc-dtb", QEMU_CAPS_KVM, QEMU_CAPS_DTB);
1627
    DO_TEST("ppce500-serial", QEMU_CAPS_KVM, QEMU_CAPS_CHARDEV);
O
Olivia Yin 已提交
1628

1629
    DO_TEST("tpm-passthrough",
1630
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
1631
    DO_TEST_PARSE_ERROR("tpm-no-backend-invalid",
1632
                        QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
1633

1634

1635 1636 1637 1638
    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);
1639

1640 1641
    DO_TEST("pci-autoadd-addr", QEMU_CAPS_DEVICE_PCI_BRIDGE);
    DO_TEST("pci-autoadd-idx", QEMU_CAPS_DEVICE_PCI_BRIDGE);
1642
    DO_TEST("pci-autofill-addr", NONE);
1643
    DO_TEST("pci-many",
1644
            QEMU_CAPS_DEVICE_PCI_BRIDGE);
1645
    DO_TEST("pci-bridge-many-disks",
1646
            QEMU_CAPS_DEVICE_PCI_BRIDGE);
L
Laine Stump 已提交
1647
    DO_TEST("pcie-root",
1648
            QEMU_CAPS_ICH9_AHCI,
1649
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1650 1651
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE);
    DO_TEST("q35",
1652
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1653
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
1654
            QEMU_CAPS_ICH9_AHCI,
1655
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
1656 1657
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
1658 1659 1660 1661 1662 1663 1664 1665
    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);
1666
    DO_TEST("q35-pm-disable",
1667
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1668 1669 1670 1671
            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",
1672
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1673 1674
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4);
1675
    DO_TEST("q35-usb2",
1676
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1677 1678 1679 1680 1681 1682
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
    DO_TEST("q35-usb2-multi",
1683
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1684 1685 1686 1687 1688 1689
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
    DO_TEST("q35-usb2-reorder",
1690
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1691 1692 1693 1694 1695
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
1696
    DO_TEST("pcie-root-port",
1697
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1698 1699
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
1700
            QEMU_CAPS_ICH9_AHCI,
1701 1702
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
1703 1704 1705 1706 1707 1708 1709 1710 1711
    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);
1712

1713 1714 1715 1716 1717 1718 1719 1720 1721
    DO_TEST_PARSE_ERROR("q35-wrong-root",
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
    DO_TEST_PARSE_ERROR("440fx-wrong-root", NONE);

1722
    DO_TEST_PARSE_ERROR("pcie-root-port-too-many",
1723
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1724 1725
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
1726
            QEMU_CAPS_ICH9_AHCI,
1727 1728
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
1729

1730
    DO_TEST("pcie-switch-upstream-port",
1731
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1732 1733 1734
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
1735
            QEMU_CAPS_ICH9_AHCI,
1736 1737
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
1738
    DO_TEST("pcie-switch-downstream-port",
1739
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1740 1741 1742 1743
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
1744
            QEMU_CAPS_ICH9_AHCI,
1745 1746
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
1747

1748 1749 1750 1751 1752 1753 1754 1755 1756
    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);
1757 1758 1759
    DO_TEST_PARSE_ERROR("pci-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_PCI_BRIDGE,
                        QEMU_CAPS_DEVICE_PXB);
1760

1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774
    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);
1775 1776 1777 1778 1779
    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);
1780

1781
    DO_TEST("hostdev-scsi-lsi",
1782 1783
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1784
    DO_TEST("hostdev-scsi-virtio-scsi",
1785 1786
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1787
    DO_TEST("hostdev-scsi-readonly",
J
Ján Tomko 已提交
1788
            QEMU_CAPS_VIRTIO_SCSI,
O
Osier Yang 已提交
1789
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_SCSI_GENERIC);
1790
    DO_TEST("hostdev-scsi-virtio-scsi",
1791 1792 1793
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC,
            QEMU_CAPS_DEVICE_SCSI_GENERIC_BOOTINDEX);
1794
    DO_TEST("hostdev-scsi-lsi-iscsi",
J
John Ferlan 已提交
1795 1796
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1797
    DO_TEST("hostdev-scsi-lsi-iscsi-auth",
J
John Ferlan 已提交
1798 1799
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1800
    DO_TEST("hostdev-scsi-virtio-iscsi",
J
John Ferlan 已提交
1801 1802
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1803
    DO_TEST("hostdev-scsi-virtio-iscsi-auth",
J
John Ferlan 已提交
1804 1805
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1806

1807
    DO_TEST("mlock-on", QEMU_CAPS_REALTIME_MLOCK);
1808
    DO_TEST_FAILURE("mlock-on", NONE);
1809
    DO_TEST("mlock-off", QEMU_CAPS_REALTIME_MLOCK);
1810 1811
    DO_TEST("mlock-unsupported", NONE);

1812
    DO_TEST_PARSE_ERROR("pci-bridge-negative-index-invalid",
1813
                        QEMU_CAPS_DEVICE_PCI_BRIDGE);
J
Ján Tomko 已提交
1814
    DO_TEST_PARSE_ERROR("pci-bridge-duplicate-index",
1815
                        QEMU_CAPS_DEVICE_PCI_BRIDGE);
J
Ján Tomko 已提交
1816
    DO_TEST_PARSE_ERROR("pci-root-nonzero-index",
1817
                        QEMU_CAPS_DEVICE_PCI_BRIDGE);
J
Ján Tomko 已提交
1818
    DO_TEST_PARSE_ERROR("pci-root-address",
1819
                        QEMU_CAPS_DEVICE_PCI_BRIDGE);
1820

1821
    DO_TEST("hotplug-base",
1822
            QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_SCSI);
1823

1824 1825
    DO_TEST("pcihole64", QEMU_CAPS_I440FX_PCI_HOLE64_SIZE);
    DO_TEST_FAILURE("pcihole64-none", NONE);
1826
    DO_TEST("pcihole64-q35",
1827
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1828
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
1829
            QEMU_CAPS_ICH9_AHCI,
1830
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1831 1832 1833
            QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_Q35_PCI_HOLE64_SIZE);

1834
    DO_TEST("arm-vexpressa9-nodevs",
1835
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB);
1836
    DO_TEST("arm-vexpressa9-basic",
1837
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB);
1838
    DO_TEST("arm-vexpressa9-virtio",
1839
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
1840
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1841
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
1842
    DO_TEST("arm-virt-virtio",
1843
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
1844
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1845
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
1846

1847
    DO_TEST("aarch64-virt-virtio",
1848
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
1849
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1850
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
1851 1852 1853 1854 1855 1856

    /* 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",
1857
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
1858 1859 1860 1861 1862 1863
            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,
1864
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1865 1866 1867
            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);
1868 1869 1870
    /* Example of using virtio-pci with no explicit PCI controller
       but with manual PCI addresses */
    DO_TEST("aarch64-virtio-pci-manual-addresses",
1871
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
1872
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1873 1874 1875
            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);
1876 1877 1878 1879 1880
    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);
1881
    DO_TEST("aarch64-aavmf-virtio-mmio",
1882
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
1883
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1884
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
1885
    DO_TEST("aarch64-virt-default-nic",
1886
            QEMU_CAPS_NODEFCONFIG,
1887
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
1888
    DO_TEST("aarch64-cpu-passthrough",
1889
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
1890
            QEMU_CAPS_KVM);
1891 1892 1893
    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 已提交
1894
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
1895
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
1896 1897 1898 1899
    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 已提交
1900
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
1901
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
1902 1903 1904 1905
    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 已提交
1906
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
1907 1908 1909 1910
    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 已提交
1911
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
1912
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
1913 1914 1915 1916 1917 1918 1919
    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 已提交
1920
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
1921 1922 1923 1924 1925 1926 1927
    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 已提交
1928
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
1929
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
1930 1931 1932
    DO_TEST_GIC("aarch64-gic-v2", GIC_BOTH,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
1933
    DO_TEST_FAILURE("aarch64-gic-v3",
A
Andrea Bolognani 已提交
1934
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
1935 1936 1937 1938 1939 1940 1941 1942 1943 1944
    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 已提交
1945
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
1946
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
1947
    DO_TEST_FAILURE("aarch64-gic-host",
A
Andrea Bolognani 已提交
1948
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960
    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);
1961
    DO_TEST_PARSE_ERROR("aarch64-gic-invalid",
A
Andrea Bolognani 已提交
1962
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
1963
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
1964
    DO_TEST_FAILURE("aarch64-gic-not-virt",
A
Andrea Bolognani 已提交
1965
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
1966
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
1967
    DO_TEST_FAILURE("aarch64-gic-not-arm",
A
Andrea Bolognani 已提交
1968
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
1969
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
1970

1971
    driver.caps->host.cpu->arch = VIR_ARCH_AARCH64;
1972
    DO_TEST("aarch64-kvm-32-on-64",
1973
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
1974
            QEMU_CAPS_KVM, QEMU_CAPS_CPU_AARCH64_OFF);
1975
    DO_TEST_FAILURE("aarch64-kvm-32-on-64",
1976
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
1977
            QEMU_CAPS_KVM);
1978 1979
    driver.caps->host.cpu->arch = cpuDefault->arch;

1980 1981 1982 1983 1984
    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 已提交
1985
    DO_TEST("panic", QEMU_CAPS_DEVICE_PANIC,
1986
            QEMU_CAPS_NODEFCONFIG);
D
Dmitry Andreev 已提交
1987
    DO_TEST("panic-double", QEMU_CAPS_DEVICE_PANIC,
1988
            QEMU_CAPS_NODEFCONFIG);
H
Hu Tao 已提交
1989

1990
    DO_TEST("panic-no-address", QEMU_CAPS_DEVICE_PANIC,
1991
            QEMU_CAPS_NODEFCONFIG);
1992

1993 1994
    DO_TEST("fips-enabled", QEMU_CAPS_ENABLE_FIPS);

J
Ján Tomko 已提交
1995
    DO_TEST("shmem", QEMU_CAPS_DEVICE_IVSHMEM);
1996
    DO_TEST_FAILURE("shmem", NONE);
J
Ján Tomko 已提交
1997
    DO_TEST_FAILURE("shmem-invalid-size",
1998
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
1999
    DO_TEST_FAILURE("shmem-invalid-address",
2000
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2001
    DO_TEST_FAILURE("shmem-small-size",
2002
                    QEMU_CAPS_DEVICE_IVSHMEM);
2003
    DO_TEST_PARSE_ERROR("shmem-msi-only", NONE);
A
Andrea Bolognani 已提交
2004
    DO_TEST("cpu-host-passthrough-features", QEMU_CAPS_KVM);
2005

2006
    DO_TEST_FAILURE("memory-align-fail", NONE);
2007 2008 2009
    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);
2010
    DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2011
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2012
    DO_TEST("memory-hotplug-dimm-addr", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2013
            QEMU_CAPS_OBJECT_MEMORY_FILE);
2014
    DO_TEST("memory-hotplug-ppc64-nonuma", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2015
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2016

2017 2018
    DO_TEST("machine-aeskeywrap-on-caps",
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP,
2019
            QEMU_CAPS_DEA_KEY_WRAP,
2020
            QEMU_CAPS_VIRTIO_SCSI,
2021 2022
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps", QEMU_CAPS_MACHINE_OPT,
2023
                    QEMU_CAPS_VIRTIO_SCSI,
2024 2025 2026 2027 2028
                    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,
2029
            QEMU_CAPS_VIRTIO_SCSI,
2030 2031
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap", QEMU_CAPS_MACHINE_OPT,
2032
                    QEMU_CAPS_VIRTIO_SCSI,
2033 2034 2035 2036 2037
                    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,
2038
            QEMU_CAPS_VIRTIO_SCSI,
2039 2040
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", QEMU_CAPS_MACHINE_OPT,
2041
                    QEMU_CAPS_VIRTIO_SCSI,
2042 2043 2044 2045
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", NONE);

    DO_TEST("machine-aeskeywrap-off-cap",
2046
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP,
2047
            QEMU_CAPS_VIRTIO_SCSI,
2048 2049
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap", QEMU_CAPS_MACHINE_OPT,
2050
                    QEMU_CAPS_VIRTIO_SCSI,
2051 2052 2053 2054 2055
                    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,
2056
            QEMU_CAPS_VIRTIO_SCSI,
2057
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2058
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", QEMU_CAPS_MACHINE_OPT,
2059
                    QEMU_CAPS_VIRTIO_SCSI,
2060 2061 2062 2063
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", NONE);

    DO_TEST("machine-deakeywrap-on-cap",
2064
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_DEA_KEY_WRAP,
2065
            QEMU_CAPS_VIRTIO_SCSI,
2066 2067
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-on-cap", QEMU_CAPS_MACHINE_OPT,
2068
                    QEMU_CAPS_VIRTIO_SCSI,
2069 2070 2071 2072 2073
                    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,
2074
            QEMU_CAPS_VIRTIO_SCSI,
2075 2076
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", QEMU_CAPS_MACHINE_OPT,
2077
                    QEMU_CAPS_VIRTIO_SCSI,
2078 2079 2080 2081
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", NONE);

    DO_TEST("machine-deakeywrap-off-cap",
2082
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_DEA_KEY_WRAP,
2083
            QEMU_CAPS_VIRTIO_SCSI,
2084 2085
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-cap", QEMU_CAPS_MACHINE_OPT,
2086
                    QEMU_CAPS_VIRTIO_SCSI,
2087 2088 2089 2090 2091
                    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,
2092
            QEMU_CAPS_VIRTIO_SCSI,
2093 2094
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST("machine-keywrap-none",
2095
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_VIRTIO_SCSI,
2096
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2097

J
Jiri Denemark 已提交
2098 2099 2100 2101 2102 2103 2104
    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);

2105
    DO_TEST("virtio-input", QEMU_CAPS_VIRTIO_KEYBOARD,
2106
            QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET);
2107
    DO_TEST("virtio-input-passthrough", QEMU_CAPS_VIRTIO_INPUT_HOST);
2108

2109
    DO_TEST("ppc64-usb-controller",
2110
            QEMU_CAPS_PCI_OHCI);
2111
    DO_TEST("ppc64-usb-controller-legacy",
2112
            QEMU_CAPS_PIIX3_USB_UHCI);
2113

2114 2115 2116 2117
    DO_TEST_PARSE_FLAGS_ERROR("missing-machine",
                              VIR_DOMAIN_DEF_PARSE_SKIP_OSTYPE_CHECKS,
                              NONE);

2118
    DO_TEST("name-escape", QEMU_CAPS_NAME_DEBUG_THREADS,
2119 2120
            QEMU_CAPS_OBJECT_SECRET, QEMU_CAPS_CHARDEV, QEMU_CAPS_VNC,
            QEMU_CAPS_NAME_GUEST);
M
Marc-André Lureau 已提交
2121 2122
    DO_TEST("debug-threads", QEMU_CAPS_NAME_DEBUG_THREADS);

2123
    DO_TEST("master-key", QEMU_CAPS_OBJECT_SECRET);
J
Ján Tomko 已提交
2124 2125
    DO_TEST("usb-long-port-path", QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_USB_HUB);
2126 2127 2128
    DO_TEST_PARSE_ERROR("usb-too-long-port-path-invalid",
                        QEMU_CAPS_CHARDEV,
                        QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_USB_HUB);
2129

2130
    DO_TEST("acpi-table", NONE);
2131 2132
    DO_TEST("intel-iommu", QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_DEVICE_INTEL_IOMMU);
2133

2134 2135
    DO_TEST("cpu-hotplug-startup", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);

2136
    qemuTestDriverFree(&driver);
2137

2138
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
2139 2140
}

2141 2142
VIRT_TEST_MAIN_PRELOAD(mymain, abs_builddir "/.libs/qemuxml2argvmock.so",
                       abs_builddir "/.libs/virrandommock.so")
2143

2144 2145
#else

2146 2147 2148 2149
int main(void)
{
    return EXIT_AM_SKIP;
}
2150 2151

#endif /* WITH_QEMU */