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

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

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

11 12
#include "testutils.h"

13 14
#ifdef WITH_QEMU

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

30 31 32 33
# define __QEMU_CAPSRIV_H_ALLOW__
# include "qemu/qemu_capspriv.h"
# undef __QEMU_CAPSRIV_H_ALLOW__

34
# include "testutilsqemu.h"
35

36 37
# define VIR_FROM_THIS VIR_FROM_QEMU

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

    if (!volinfo[1])
        goto fallback;

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

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

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

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

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

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

    return 0;
}


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

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

    return ret;
}


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

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

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

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

225
 cleanup:
226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242
    VIR_FREE(xmlpath);

    return xmlbuf;
}

static int
fakeStoragePoolIsActive(virStoragePoolPtr pool)
{
    if (STREQ(pool->name, "inactive"))
        return 0;

    return 1;
}

/* Test storage pool implementation
 *
 * These functions aid testing of storage pool related stuff when creating a
243
 * qemu command line.
244 245 246
 *
 * There are a few "magic" values to pass to these functions:
 *
247 248
 * 1) "inactive" as a pool name to create an inactive pool. All other names are
 * interpreted as file names in storagepoolxml2xmlout/ and are used as the
249 250 251
 * definition for the pool. If the file doesn't exist the pool doesn't exist.
 *
 * 2) "nonexistent" returns an error while looking up a volume. Otherwise
252
 * pattern VOLUME_TYPE+VOLUME_PATH can be used to simulate a volume in a pool.
253 254 255 256 257 258 259 260 261 262 263 264
 * This creates a fake path for this volume. If the '+' sign is omitted, block
 * type is assumed.
 */
static virStorageDriver fakeStorageDriver = {
    .storagePoolLookupByName = fakeStoragePoolLookupByName,
    .storageVolLookupByName = fakeStorageVolLookupByName,
    .storagePoolGetXMLDesc = fakeStoragePoolGetXMLDesc,
    .storageVolGetPath = fakeStorageVolGetPath,
    .storageVolGetInfo = fakeStorageVolGetInfo,
    .storagePoolIsActive = fakeStoragePoolIsActive,
};

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

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

282 283 284 285

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

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

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

    return 0;
}


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

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

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

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

    ret = 0;

 cleanup:
    return ret;
}


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

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

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

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

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

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

    ret = 0;

 cleanup:
    return ret;
}


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

447 448 449 450
    if (STREQ(vm->def->os.machine, "pc") &&
        STREQ(vm->def->emulator, "/usr/bin/qemu-system-x86_64")) {
        VIR_FREE(vm->def->os.machine);
        if (VIR_STRDUP(vm->def->os.machine, "pc-0.11") < 0)
451
            goto cleanup;
452
    }
453

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

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

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

        if (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS &&
            hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI &&
            hostdev->source.subsys.u.pci.backend == VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT) {
            hostdev->source.subsys.u.pci.backend = VIR_DOMAIN_HOSTDEV_PCI_BACKEND_KVM;
        }
    }

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

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

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

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

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

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


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

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

526 527 528 529 530 531 532 533 534 535
    /* Set the timezone because we are mocking the time() function.
     * If we don't do that, then localtime() may return unpredictable
     * results. In order to detect things that just work by a blind
     * chance, we need to set an virtual timezone that no libvirt
     * developer resides in. */
    if (setenv("TZ", "VIR00:30", 1) < 0) {
        perror("setenv");
        return EXIT_FAILURE;
    }

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

    driver.privileged = true;
540

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

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

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

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

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

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

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

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

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

611 612 613 614 615 616
# ifdef __linux__
    /* This is a macro that invokes test only on Linux. It's
     * meant to be called in those cases where qemuxml2argvmock
     * cooperation is expected (e.g. we need a fixed time,
     * predictable NUMA topology and so on). On non-Linux
     * platforms the macro just consume its argument. */
617
#  define DO_TEST_LINUX_FULL(name, ...)                                  \
618
    DO_TEST_FULL(name, __VA_ARGS__)
619
# else  /* __linux__ */
620 621 622
#  define DO_TEST_LINUX_FULL(name, ...)                                  \
    do {                                                                 \
        const char *tmp ATTRIBUTE_UNUSED = name;                         \
623 624 625
    } while (0)
# endif /* __linux__ */

626
# define NONE QEMU_CAPS_LAST
627

628 629 630
    /* Unset or set all envvars here that are copied in qemudBuildCommandLine
     * using ADD_ENV_COPY, otherwise these tests may fail due to unexpected
     * values for these envvars */
631 632 633 634 635 636 637
    setenv("PATH", "/bin", 1);
    setenv("USER", "test", 1);
    setenv("LOGNAME", "test", 1);
    setenv("HOME", "/home/test", 1);
    unsetenv("TMPDIR");
    unsetenv("LD_PRELOAD");
    unsetenv("LD_LIBRARY_PATH");
638 639
    unsetenv("QEMU_AUDIO_DRV");
    unsetenv("SDL_AUDIODRIVER");
640

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

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

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

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

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

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

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

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

966 967
    DO_TEST("graphics-vnc", QEMU_CAPS_VNC);
    DO_TEST("graphics-vnc-socket", QEMU_CAPS_VNC);
968
    DO_TEST("graphics-vnc-websocket", QEMU_CAPS_VNC, QEMU_CAPS_VNC_WEBSOCKET);
969
    DO_TEST("graphics-vnc-policy", QEMU_CAPS_VNC, QEMU_CAPS_VNC_SHARE_POLICY);
P
Pavel Hrdina 已提交
970
    DO_TEST("graphics-vnc-no-listen-attr", QEMU_CAPS_VNC);
971 972 973 974
    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;
975 976
    DO_TEST("graphics-vnc-socket", QEMU_CAPS_VNC);
    DO_TEST("graphics-vnc-auto-socket", QEMU_CAPS_VNC);
977
    DO_TEST("graphics-vnc-none", QEMU_CAPS_VNC);
978

979 980
    driver.config->vncSASL = 1;
    VIR_FREE(driver.config->vncSASLdir);
981
    ignore_value(VIR_STRDUP(driver.config->vncSASLdir, "/root/.sasl2"));
982
    DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VNC);
983 984
    driver.config->vncTLS = 1;
    driver.config->vncTLSx509verify = 1;
985
    DO_TEST("graphics-vnc-tls", QEMU_CAPS_VNC);
986
    driver.config->vncSASL = driver.config->vncTLSx509verify = driver.config->vncTLS = 0;
987 988
    VIR_FREE(driver.config->vncSASLdir);
    VIR_FREE(driver.config->vncTLSx509certdir);
989

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

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

1106 1107 1108 1109
    DO_TEST("serial-vc", NONE);
    DO_TEST("serial-pty", NONE);
    DO_TEST("serial-dev", NONE);
    DO_TEST("serial-file", NONE);
1110 1111
    DO_TEST("serial-file-log", QEMU_CAPS_CHARDEV, QEMU_CAPS_CHARDEV_FILE_APPEND,
            QEMU_CAPS_CHARDEV_LOGFILE);
1112 1113 1114 1115 1116
    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);
1117
    DO_TEST("serial-spiceport",
1118
            QEMU_CAPS_CHARDEV,
1119
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1120
            QEMU_CAPS_DEVICE_QXL,
1121
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEPORT);
1122
    DO_TEST("serial-spiceport-nospice", NONE);
1123

1124 1125 1126 1127 1128
    DO_TEST("parallel-tcp", NONE);
    DO_TEST("console-compat", NONE);
    DO_TEST("console-compat-auto", NONE);

    DO_TEST("serial-vc-chardev",
1129
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1130
    DO_TEST("serial-pty-chardev",
1131
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1132
    DO_TEST("serial-dev-chardev",
1133
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1134
    DO_TEST("serial-dev-chardev-iobase",
1135
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1136
    DO_TEST("serial-file-chardev",
1137
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1138
            QEMU_CAPS_CHARDEV_FILE_APPEND);
1139
    DO_TEST("serial-unix-chardev",
1140
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1141
    DO_TEST("serial-tcp-chardev",
1142
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1143
    DO_TEST("serial-udp-chardev",
1144
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1145
    DO_TEST("serial-tcp-telnet-chardev",
1146
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1147 1148 1149 1150 1151 1152
    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);
1153
    DO_TEST("serial-many-chardev",
1154
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1155
    DO_TEST("parallel-tcp-chardev",
1156
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1157
    DO_TEST("parallel-parport-chardev",
1158
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1159
    DO_TEST("console-compat-chardev",
1160
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
M
Michal Privoznik 已提交
1161
    DO_TEST("pci-serial-dev-chardev",
1162
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
M
Michal Privoznik 已提交
1163
            QEMU_CAPS_DEVICE_PCI_SERIAL);
1164

1165
    DO_TEST("channel-guestfwd",
1166
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1167
    DO_TEST("channel-virtio",
1168
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1169
    DO_TEST("channel-virtio-state",
1170
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1171
    DO_TEST("channel-virtio-auto",
1172
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1173
    DO_TEST("channel-virtio-autoassign",
1174
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
J
Ján Tomko 已提交
1175
    DO_TEST("channel-virtio-autoadd",
1176
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1177
    DO_TEST("console-virtio",
1178
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1179
    DO_TEST("console-virtio-many",
1180
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1181
    DO_TEST("console-virtio-s390",
1182
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1183
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390);
1184
    DO_TEST("console-virtio-ccw",
1185
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1186
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_CCW,
1187
            QEMU_CAPS_VIRTIO_S390);
1188
    DO_TEST("console-sclp",
1189
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1190
            QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_SCLP_S390);
1191
    DO_TEST("channel-spicevmc",
1192
            QEMU_CAPS_NODEFCONFIG,
1193
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC);
1194
    DO_TEST("channel-spicevmc-old",
1195
            QEMU_CAPS_NODEFCONFIG,
1196
            QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_SPICEVMC);
1197
    DO_TEST("channel-virtio-default",
1198
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1199
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC);
1200
    DO_TEST("channel-virtio-unix",
1201
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1202

1203
    DO_TEST("smartcard-host",
1204
            QEMU_CAPS_CHARDEV,
1205
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);
1206
    DO_TEST("smartcard-host-certificates",
1207
            QEMU_CAPS_CHARDEV,
1208
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);
1209
    DO_TEST("smartcard-passthrough-tcp",
1210
            QEMU_CAPS_CHARDEV,
1211
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_PASSTHRU);
1212
    DO_TEST("smartcard-passthrough-spicevmc",
1213
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1214
            QEMU_CAPS_CCID_PASSTHRU, QEMU_CAPS_CHARDEV_SPICEVMC);
1215
    DO_TEST("smartcard-controller",
1216
            QEMU_CAPS_CHARDEV,
1217 1218
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);

1219
    DO_TEST("usb-controller",
1220
            QEMU_CAPS_CHARDEV,
1221
            QEMU_CAPS_NODEFCONFIG);
1222
    DO_TEST("usb-piix3-controller",
1223
            QEMU_CAPS_CHARDEV, QEMU_CAPS_PIIX3_USB_UHCI,
1224
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_NODEFCONFIG);
1225
    DO_TEST("usb-ich9-ehci-addr",
1226
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1227
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1);
1228
    DO_TEST("input-usbmouse-addr",
1229
            QEMU_CAPS_NODEFCONFIG);
1230
    DO_TEST("usb-ich9-companion",
1231
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1232
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1);
1233
    DO_TEST_PARSE_ERROR("usb-ich9-no-companion",
1234
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1235
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1);
1236 1237 1238 1239
    DO_TEST("usb-ich9-autoassign",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_HUB);
1240
    DO_TEST("usb-hub",
1241
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
M
Marc-André Lureau 已提交
1242
            QEMU_CAPS_NODEFCONFIG);
1243 1244 1245
    DO_TEST("usb-hub-autoadd",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
J
Ján Tomko 已提交
1246 1247 1248
    DO_TEST_PARSE_ERROR("usb-hub-conflict",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
1249 1250 1251
    DO_TEST_PARSE_ERROR("usb-hub-nonexistent",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
J
Ján Tomko 已提交
1252 1253 1254
    DO_TEST("usb-port-missing",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
1255
    DO_TEST("usb-ports",
1256
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
1257
            QEMU_CAPS_NODEFCONFIG);
1258 1259 1260
    DO_TEST("usb-port-autoassign",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
1261
    DO_TEST("usb-redir",
1262
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1263
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB,
1264 1265
            QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC);
1266
    DO_TEST("usb-redir-boot",
1267
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1268 1269 1270 1271
            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);
1272
    DO_TEST("usb-redir-filter",
1273
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1274 1275 1276 1277
            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);
1278
    DO_TEST("usb-redir-filter-version",
1279
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1280 1281 1282
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC,
            QEMU_CAPS_USB_REDIR_FILTER);
1283
    DO_TEST("usb1-usb2",
1284
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1285 1286
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_USB_HUB, QEMU_CAPS_ICH9_USB_EHCI1);
1287
    DO_TEST("usb-none",
1288
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1289
    DO_TEST_PARSE_ERROR("usb-none-other",
1290
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1291
    DO_TEST_PARSE_ERROR("usb-none-hub",
1292
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1293 1294
            QEMU_CAPS_USB_HUB);
    DO_TEST_PARSE_ERROR("usb-none-usbtablet",
1295
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1296
    DO_TEST("usb-controller-default-q35",
1297
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1298 1299 1300
            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",
1301
                    QEMU_CAPS_DEVICE_PCI_BRIDGE,
1302 1303 1304
                    QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_PCI_OHCI,
                    QEMU_CAPS_NEC_USB_XHCI);
    DO_TEST("usb-controller-explicit-q35",
1305
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1306 1307 1308
            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",
1309
                    QEMU_CAPS_DEVICE_PCI_BRIDGE,
1310 1311
                    QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_PCI_OHCI,
                    QEMU_CAPS_PIIX3_USB_UHCI);
1312 1313 1314
    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);
1315 1316 1317 1318
    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);
1319

1320
    DO_TEST("smbios", QEMU_CAPS_SMBIOS_TYPE);
1321
    DO_TEST_PARSE_ERROR("smbios-date", QEMU_CAPS_SMBIOS_TYPE);
1322
    DO_TEST_PARSE_ERROR("smbios-uuid-match", QEMU_CAPS_SMBIOS_TYPE);
1323

1324
    DO_TEST("watchdog", NONE);
1325
    DO_TEST("watchdog-device", QEMU_CAPS_NODEFCONFIG);
1326
    DO_TEST("watchdog-dump", NONE);
1327
    DO_TEST("watchdog-injectnmi", NONE);
1328
    DO_TEST("watchdog-diag288",
1329
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1330
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390);
1331 1332
    DO_TEST("balloon-device", QEMU_CAPS_NODEFCONFIG);
    DO_TEST("balloon-device-deflate", QEMU_CAPS_NODEFCONFIG,
1333
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1334
    DO_TEST("balloon-ccw-deflate", QEMU_CAPS_NODEFCONFIG,
1335
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1336
    DO_TEST("balloon-mmio-deflate", QEMU_CAPS_NODEFCONFIG,
1337 1338
            QEMU_CAPS_DTB, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1339
    DO_TEST("balloon-device-deflate-off", QEMU_CAPS_NODEFCONFIG,
1340
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1341
    DO_TEST("balloon-device-auto",
1342 1343
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("balloon-device-period", QEMU_CAPS_NODEFCONFIG);
1344 1345
    DO_TEST("sound", NONE);
    DO_TEST("sound-device",
1346
            QEMU_CAPS_NODEFCONFIG,
1347
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_HDA_MICRO,
1348 1349
            QEMU_CAPS_DEVICE_ICH9_INTEL_HDA,
            QEMU_CAPS_OBJECT_USB_AUDIO);
1350
    DO_TEST("fs9p",
1351
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_FSDEV,
1352
            QEMU_CAPS_FSDEV_WRITEOUT);
1353
    DO_TEST("fs9p-ccw",
1354
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_FSDEV,
1355
            QEMU_CAPS_FSDEV_WRITEOUT,
1356
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1357

1358 1359
    DO_TEST("hostdev-usb-address", NONE);
    DO_TEST("hostdev-usb-address-device",
1360 1361
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("hostdev-usb-address-device-boot",
1362 1363
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_USB_HOST_BOOTINDEX);
J
Ján Tomko 已提交
1364
    DO_TEST("hostdev-pci-address", NONE);
1365
    DO_TEST("hostdev-pci-address-device",
J
Ján Tomko 已提交
1366
            QEMU_CAPS_NODEFCONFIG);
1367
    DO_TEST("hostdev-vfio",
J
Ján Tomko 已提交
1368
            QEMU_CAPS_NODEFCONFIG,
1369
            QEMU_CAPS_DEVICE_VFIO_PCI);
1370
    DO_TEST("hostdev-vfio-multidomain",
J
Ján Tomko 已提交
1371
            QEMU_CAPS_NODEFCONFIG,
1372 1373 1374
            QEMU_CAPS_DEVICE_VFIO_PCI, QEMU_CAPS_HOST_PCI_MULTIDOMAIN);
    DO_TEST_FAILURE("hostdev-vfio-multidomain",
                    QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VFIO_PCI);
1375
    DO_TEST("pci-rom",
J
Ján Tomko 已提交
1376
            QEMU_CAPS_NODEFCONFIG);
1377

1378 1379 1380 1381
    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);
1382

1383
    DO_TEST_LINUX_FULL("migrate-numa-unaligned", "stdio", 7, 0, 0, GIC_NONE,
1384
                       QEMU_CAPS_NUMA,
1385 1386
                       QEMU_CAPS_OBJECT_MEMORY_RAM);

1387
    DO_TEST("qemu-ns", NONE);
1388
    DO_TEST("qemu-ns-no-env", NONE);
1389

1390
    DO_TEST("smp", NONE);
1391

J
John Ferlan 已提交
1392
    DO_TEST("iothreads", QEMU_CAPS_OBJECT_IOTHREAD);
1393 1394
    DO_TEST("iothreads-ids", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-ids-partial", QEMU_CAPS_OBJECT_IOTHREAD);
1395
    DO_TEST_FAILURE("iothreads-nocap", NONE);
1396 1397
    DO_TEST("iothreads-disk", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-disk-virtio-ccw", QEMU_CAPS_OBJECT_IOTHREAD,
1398
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1399 1400 1401 1402 1403 1404
    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 已提交
1405

1406 1407
    DO_TEST("cpu-topology1", NONE);
    DO_TEST("cpu-topology2", NONE);
1408
    DO_TEST("cpu-topology3", NONE);
1409 1410 1411 1412 1413 1414 1415 1416
    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);
1417
    DO_TEST("cpu-numa1", NONE);
1418 1419
    DO_TEST("cpu-numa2", NONE);
    DO_TEST("cpu-numa-no-memory-element", NONE);
1420
    DO_TEST_PARSE_ERROR("cpu-numa3", NONE);
1421 1422
    DO_TEST_FAILURE("cpu-numa-disjoint", NONE);
    DO_TEST("cpu-numa-disjoint", QEMU_CAPS_NUMA);
1423 1424
    DO_TEST_FAILURE("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_RAM);
    DO_TEST_FAILURE("cpu-numa-memshared", NONE);
1425
    DO_TEST("cpu-host-model", NONE);
1426
    DO_TEST("cpu-host-model-vendor", NONE);
1427
    skipLegacyCPUs = true;
1428
    DO_TEST("cpu-host-model-fallback", NONE);
1429
    DO_TEST_FAILURE("cpu-host-model-nofallback", NONE);
1430
    skipLegacyCPUs = false;
A
Andrea Bolognani 已提交
1431
    DO_TEST("cpu-host-passthrough", QEMU_CAPS_KVM);
1432
    DO_TEST_FAILURE("cpu-host-passthrough", NONE);
A
Andrea Bolognani 已提交
1433
    DO_TEST_FAILURE("cpu-qemu-host-passthrough", QEMU_CAPS_KVM);
1434

1435
    qemuTestSetHostCPU(driver.caps, cpuHaswell);
1436 1437 1438 1439
    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);
1440
    DO_TEST("cpu-host-model-cmt", NONE);
1441
    qemuTestSetHostCPU(driver.caps, NULL);
1442

1443
    DO_TEST("encrypted-disk", NONE);
J
John Ferlan 已提交
1444
    DO_TEST("encrypted-disk-usage", NONE);
1445
# ifdef HAVE_GNUTLS_CIPHER_ENCRYPT
1446
    DO_TEST("luks-disks", QEMU_CAPS_OBJECT_SECRET);
1447 1448 1449
# else
    DO_TEST_FAILURE("luks-disks", QEMU_CAPS_OBJECT_SECRET);
# endif
1450

1451 1452 1453 1454 1455 1456 1457 1458
    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);
1459
    DO_TEST("cputune-numatune",
1460
            QEMU_CAPS_KVM,
1461
            QEMU_CAPS_OBJECT_IOTHREAD,
1462 1463
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1464

1465
    DO_TEST("numatune-memory", NONE);
1466
    DO_TEST_PARSE_ERROR("numatune-memory-invalid-nodeset", NONE);
1467 1468
    DO_TEST_LINUX("numatune-memnode", QEMU_CAPS_NUMA,
                  QEMU_CAPS_OBJECT_MEMORY_RAM);
1469 1470
    DO_TEST_FAILURE("numatune-memnode", NONE);

1471 1472
    DO_TEST_LINUX("numatune-memnode-no-memory", QEMU_CAPS_NUMA,
                  QEMU_CAPS_OBJECT_MEMORY_RAM);
1473 1474
    DO_TEST_FAILURE("numatune-memnode-no-memory", NONE);

1475
    DO_TEST("numatune-auto-nodeset-invalid", NONE);
1476 1477
    DO_TEST("numatune-auto-prefer", QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1478 1479
    DO_TEST_FAILURE("numatune-static-nodeset-exceed-hostnode",
                    QEMU_CAPS_OBJECT_MEMORY_RAM);
1480 1481
    DO_TEST_PARSE_ERROR("numatune-memnode-nocpu", NONE);
    DO_TEST_PARSE_ERROR("numatune-memnodes-problematic", NONE);
1482 1483
    DO_TEST("numad", NONE);
    DO_TEST("numad-auto-vcpu-static-numatune", NONE);
1484
    DO_TEST_PARSE_ERROR("numad-auto-vcpu-static-numatune-no-nodeset", NONE);
1485 1486 1487
    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);
1488
    DO_TEST("blkdeviotune",
1489
            QEMU_CAPS_DRIVE_IOTUNE);
1490
    DO_TEST("blkdeviotune-max",
1491
            QEMU_CAPS_DRIVE_IOTUNE,
1492
            QEMU_CAPS_DRIVE_IOTUNE_MAX);
1493

1494
    DO_TEST("multifunction-pci-device",
1495
            QEMU_CAPS_NODEFCONFIG,
1496
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_SCSI_LSI);
1497

1498
    DO_TEST("monitor-json",
1499
            QEMU_CAPS_CHARDEV, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_NODEFCONFIG);
1500
    DO_TEST("no-shutdown",
1501 1502
            QEMU_CAPS_CHARDEV, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_NO_SHUTDOWN);
1503

1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515
    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);
1516

1517
    DO_TEST("pseries-basic",
1518
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1519
    DO_TEST("pseries-vio",
1520
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1521
    DO_TEST("pseries-usb-default",
1522
            QEMU_CAPS_CHARDEV,
1523 1524
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_PCI_OHCI, QEMU_CAPS_PCI_MULTIFUNCTION);
1525
    DO_TEST("pseries-usb-multi",
1526
            QEMU_CAPS_CHARDEV,
1527 1528
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_PCI_OHCI, QEMU_CAPS_PCI_MULTIFUNCTION);
1529
    DO_TEST("pseries-vio-user-assigned",
1530
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1531
    DO_TEST_PARSE_ERROR("pseries-vio-address-clash",
1532
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1533
    DO_TEST("pseries-nvram", QEMU_CAPS_DEVICE_NVRAM);
1534 1535
    DO_TEST("pseries-usb-kbd", QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_DEVICE_USB_KBD, QEMU_CAPS_CHARDEV,
1536 1537
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("pseries-cpu-exact", QEMU_CAPS_CHARDEV,
1538
            QEMU_CAPS_NODEFCONFIG);
1539 1540

    qemuTestSetHostArch(driver.caps, VIR_ARCH_PPC64);
A
Andrea Bolognani 已提交
1541
    DO_TEST("pseries-cpu-compat", QEMU_CAPS_KVM,
1542
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
A
Andrea Bolognani 已提交
1543
    DO_TEST("pseries-cpu-le", QEMU_CAPS_KVM,
1544
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1545 1546
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);

1547
    DO_TEST("pseries-panic-missing",
1548
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1549
    DO_TEST("pseries-panic-no-address",
1550
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1551
    DO_TEST_FAILURE("pseries-panic-address",
1552
                    QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1553
    DO_TEST("disk-ide-drive-split",
1554
            QEMU_CAPS_NODEFCONFIG,
1555
            QEMU_CAPS_IDE_CD);
1556
    DO_TEST("disk-ide-wwn",
1557
            QEMU_CAPS_IDE_CD,
1558
            QEMU_CAPS_DRIVE_SERIAL, QEMU_CAPS_IDE_DRIVE_WWN);
1559

1560
    DO_TEST("disk-geometry", NONE);
V
Viktor Mihajlovski 已提交
1561
    DO_TEST("disk-blockio",
1562
            QEMU_CAPS_NODEFCONFIG,
V
Viktor Mihajlovski 已提交
1563
            QEMU_CAPS_IDE_CD, QEMU_CAPS_BLOCKIO);
1564

1565 1566
    DO_TEST("video-device-pciaddr-default",
            QEMU_CAPS_KVM, QEMU_CAPS_VNC,
1567
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1568
            QEMU_CAPS_DEVICE_QXL,
1569
            QEMU_CAPS_DEVICE_PCI_BRIDGE);
1570
    DO_TEST("video-vga-nodevice", NONE);
1571
    DO_TEST("video-vga-device", QEMU_CAPS_DEVICE_VGA,
1572
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1573
    DO_TEST("video-vga-device-vgamem", QEMU_CAPS_DEVICE_VGA,
1574
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_VGA_VGAMEM);
1575
    DO_TEST("video-qxl-nodevice", QEMU_CAPS_VGA_QXL);
1576
    DO_TEST("video-qxl-device",
1577
            QEMU_CAPS_DEVICE_QXL,
1578
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1579
    DO_TEST("video-qxl-device-vgamem",
1580
            QEMU_CAPS_DEVICE_QXL,
1581
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1582 1583
            QEMU_CAPS_QXL_VGAMEM);
    DO_TEST("video-qxl-sec-device",
1584
            QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1585
    DO_TEST("video-qxl-sec-device-vgamem",
1586 1587
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1588
            QEMU_CAPS_QXL_VGAMEM);
1589 1590 1591 1592
    DO_TEST("video-qxl-heads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA_QXL,
            QEMU_CAPS_DEVICE_QXL,
1593
            QEMU_CAPS_QXL_MAX_OUTPUTS);
1594 1595 1596 1597
    DO_TEST("video-qxl-noheads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA_QXL,
            QEMU_CAPS_DEVICE_QXL,
1598
            QEMU_CAPS_QXL_MAX_OUTPUTS);
M
Marc-André Lureau 已提交
1599
    DO_TEST("video-virtio-gpu-device",
1600
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
M
Marc-André Lureau 已提交
1601
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1602
    DO_TEST("video-virtio-gpu-virgl",
1603
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
1604 1605
            QEMU_CAPS_DEVICE_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1606 1607 1608 1609 1610 1611
    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);
1612
    DO_TEST_PARSE_ERROR("video-invalid", NONE);
1613

1614
    DO_TEST("virtio-rng-default", QEMU_CAPS_DEVICE_VIRTIO_RNG,
1615
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1616
    DO_TEST("virtio-rng-random", QEMU_CAPS_DEVICE_VIRTIO_RNG,
1617
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1618
    DO_TEST("virtio-rng-egd", QEMU_CAPS_DEVICE_VIRTIO_RNG,
1619
            QEMU_CAPS_OBJECT_RNG_EGD);
1620
    DO_TEST("virtio-rng-multiple", QEMU_CAPS_DEVICE_VIRTIO_RNG,
1621
            QEMU_CAPS_OBJECT_RNG_EGD, QEMU_CAPS_OBJECT_RNG_RANDOM);
1622
    DO_TEST_PARSE_ERROR("virtio-rng-egd-crash",
1623
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_EGD);
1624
    DO_TEST("virtio-rng-ccw",
1625
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1626
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_CCW,
1627 1628
            QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1629

1630
    DO_TEST("s390-allow-bogus-usb-none",
1631
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1632
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390,
1633
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
1634
    DO_TEST("s390-allow-bogus-usb-controller",
1635
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1636
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390,
1637 1638
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);

1639 1640 1641 1642 1643 1644 1645 1646 1647 1648
    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 已提交
1649
    DO_TEST("ppc-dtb", QEMU_CAPS_KVM, QEMU_CAPS_DTB);
1650
    DO_TEST("ppce500-serial", QEMU_CAPS_KVM, QEMU_CAPS_CHARDEV);
O
Olivia Yin 已提交
1651

1652
    DO_TEST("tpm-passthrough",
1653
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
1654
    DO_TEST_PARSE_ERROR("tpm-no-backend-invalid",
1655
                        QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
1656

1657

1658 1659 1660 1661
    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);
1662

1663 1664
    DO_TEST("pci-autoadd-addr", QEMU_CAPS_DEVICE_PCI_BRIDGE);
    DO_TEST("pci-autoadd-idx", QEMU_CAPS_DEVICE_PCI_BRIDGE);
1665
    DO_TEST("pci-autofill-addr", NONE);
1666
    DO_TEST("pci-many",
1667
            QEMU_CAPS_DEVICE_PCI_BRIDGE);
1668
    DO_TEST("pci-bridge-many-disks",
1669
            QEMU_CAPS_DEVICE_PCI_BRIDGE);
L
Laine Stump 已提交
1670
    DO_TEST("pcie-root",
1671
            QEMU_CAPS_ICH9_AHCI,
1672
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1673 1674
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE);
    DO_TEST("q35",
1675
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1676
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
1677
            QEMU_CAPS_ICH9_AHCI,
1678
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
1679
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1680
            QEMU_CAPS_VGA_QXL,
1681
            QEMU_CAPS_DEVICE_QXL);
1682 1683 1684 1685 1686 1687 1688 1689
    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);
1690
    DO_TEST("q35-pm-disable",
1691
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1692 1693 1694 1695
            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",
1696
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1697 1698
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4);
1699
    DO_TEST("q35-usb2",
1700
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1701 1702 1703 1704
            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,
1705
            QEMU_CAPS_VGA_QXL,
1706
            QEMU_CAPS_DEVICE_QXL);
1707
    DO_TEST("q35-usb2-multi",
1708
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1709 1710 1711 1712
            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,
1713
            QEMU_CAPS_VGA_QXL,
1714
            QEMU_CAPS_DEVICE_QXL);
1715
    DO_TEST("q35-usb2-reorder",
1716
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1717 1718 1719 1720
            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,
1721
            QEMU_CAPS_VGA_QXL,
1722
            QEMU_CAPS_DEVICE_QXL);
1723
    DO_TEST("pcie-root-port",
1724
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1725 1726
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
1727
            QEMU_CAPS_ICH9_AHCI,
1728
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1729
            QEMU_CAPS_VGA_QXL,
1730
            QEMU_CAPS_DEVICE_QXL);
1731 1732 1733 1734 1735 1736 1737 1738 1739
    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);
1740

1741 1742 1743 1744 1745 1746
    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,
1747
            QEMU_CAPS_VGA_QXL,
1748
            QEMU_CAPS_DEVICE_QXL);
1749 1750
    DO_TEST_PARSE_ERROR("440fx-wrong-root", NONE);

1751
    DO_TEST_PARSE_ERROR("pcie-root-port-too-many",
1752
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1753 1754
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
1755
            QEMU_CAPS_ICH9_AHCI,
1756
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1757
            QEMU_CAPS_VGA_QXL,
1758
            QEMU_CAPS_DEVICE_QXL);
1759

1760
    DO_TEST("pcie-switch-upstream-port",
1761
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1762 1763 1764
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
1765
            QEMU_CAPS_ICH9_AHCI,
1766
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1767
            QEMU_CAPS_VGA_QXL,
1768
            QEMU_CAPS_DEVICE_QXL);
1769
    DO_TEST("pcie-switch-downstream-port",
1770
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1771 1772 1773 1774
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
1775
            QEMU_CAPS_ICH9_AHCI,
1776
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1777
            QEMU_CAPS_VGA_QXL,
1778
            QEMU_CAPS_DEVICE_QXL);
1779

1780 1781 1782 1783 1784 1785 1786 1787 1788
    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);
1789 1790 1791
    DO_TEST_PARSE_ERROR("pci-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_PCI_BRIDGE,
                        QEMU_CAPS_DEVICE_PXB);
1792

1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806
    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);
1807 1808 1809 1810 1811
    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);
1812

1813
    DO_TEST("hostdev-scsi-lsi",
1814 1815
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1816
    DO_TEST("hostdev-scsi-virtio-scsi",
1817 1818
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1819
    DO_TEST("hostdev-scsi-readonly",
J
Ján Tomko 已提交
1820
            QEMU_CAPS_VIRTIO_SCSI,
O
Osier Yang 已提交
1821
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_SCSI_GENERIC);
1822
    DO_TEST("hostdev-scsi-virtio-scsi",
1823 1824 1825
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC,
            QEMU_CAPS_DEVICE_SCSI_GENERIC_BOOTINDEX);
1826
    DO_TEST("hostdev-scsi-lsi-iscsi",
J
John Ferlan 已提交
1827 1828
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1829
    DO_TEST("hostdev-scsi-lsi-iscsi-auth",
J
John Ferlan 已提交
1830 1831
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1832
    DO_TEST("hostdev-scsi-virtio-iscsi",
J
John Ferlan 已提交
1833 1834
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1835
    DO_TEST("hostdev-scsi-virtio-iscsi-auth",
J
John Ferlan 已提交
1836 1837
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1838

1839
    DO_TEST("mlock-on", QEMU_CAPS_REALTIME_MLOCK);
1840
    DO_TEST_FAILURE("mlock-on", NONE);
1841
    DO_TEST("mlock-off", QEMU_CAPS_REALTIME_MLOCK);
1842 1843
    DO_TEST("mlock-unsupported", NONE);

1844
    DO_TEST_PARSE_ERROR("pci-bridge-negative-index-invalid",
1845
                        QEMU_CAPS_DEVICE_PCI_BRIDGE);
J
Ján Tomko 已提交
1846
    DO_TEST_PARSE_ERROR("pci-bridge-duplicate-index",
1847
                        QEMU_CAPS_DEVICE_PCI_BRIDGE);
J
Ján Tomko 已提交
1848
    DO_TEST_PARSE_ERROR("pci-root-nonzero-index",
1849
                        QEMU_CAPS_DEVICE_PCI_BRIDGE);
J
Ján Tomko 已提交
1850
    DO_TEST_PARSE_ERROR("pci-root-address",
1851
                        QEMU_CAPS_DEVICE_PCI_BRIDGE);
1852

1853
    DO_TEST("hotplug-base",
1854
            QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_SCSI);
1855

1856 1857
    DO_TEST("pcihole64", QEMU_CAPS_I440FX_PCI_HOLE64_SIZE);
    DO_TEST_FAILURE("pcihole64-none", NONE);
1858
    DO_TEST("pcihole64-q35",
1859
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1860
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
1861
            QEMU_CAPS_ICH9_AHCI,
1862
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1863
            QEMU_CAPS_VGA_QXL,
1864
            QEMU_CAPS_DEVICE_QXL,
1865 1866
            QEMU_CAPS_Q35_PCI_HOLE64_SIZE);

1867
    DO_TEST("arm-vexpressa9-nodevs",
1868
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB);
1869
    DO_TEST("arm-vexpressa9-basic",
1870
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB);
1871
    DO_TEST("arm-vexpressa9-virtio",
1872
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
1873
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1874
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
1875
    DO_TEST("arm-virt-virtio",
1876
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
1877
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1878
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
1879

1880
    DO_TEST("aarch64-virt-virtio",
1881
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
1882
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1883
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
1884 1885 1886 1887 1888 1889

    /* 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",
1890
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
1891 1892 1893 1894 1895 1896
            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,
1897
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1898 1899 1900
            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);
1901 1902 1903
    /* Example of using virtio-pci with no explicit PCI controller
       but with manual PCI addresses */
    DO_TEST("aarch64-virtio-pci-manual-addresses",
1904
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
1905
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1906 1907 1908
            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);
1909 1910 1911 1912 1913
    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);
1914
    DO_TEST("aarch64-aavmf-virtio-mmio",
1915
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
1916
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1917
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
1918
    DO_TEST("aarch64-virt-default-nic",
1919
            QEMU_CAPS_NODEFCONFIG,
1920
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
1921
    qemuTestSetHostArch(driver.caps, VIR_ARCH_AARCH64);
1922
    DO_TEST("aarch64-cpu-passthrough",
1923
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
1924
            QEMU_CAPS_KVM);
1925 1926 1927
    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 已提交
1928
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
1929
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
1930 1931 1932 1933
    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 已提交
1934
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
1935
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
1936 1937 1938 1939
    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 已提交
1940
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
1941 1942 1943 1944
    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 已提交
1945
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
1946
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
1947 1948 1949 1950 1951 1952 1953
    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 已提交
1954
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
1955 1956 1957 1958 1959 1960 1961
    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 已提交
1962
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
1963
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
1964 1965 1966
    DO_TEST_GIC("aarch64-gic-v2", GIC_BOTH,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
1967
    DO_TEST_FAILURE("aarch64-gic-v3",
A
Andrea Bolognani 已提交
1968
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
1969 1970 1971 1972 1973 1974 1975 1976 1977 1978
    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 已提交
1979
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
1980
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
1981
    DO_TEST_FAILURE("aarch64-gic-host",
A
Andrea Bolognani 已提交
1982
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994
    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);
1995
    DO_TEST_PARSE_ERROR("aarch64-gic-invalid",
A
Andrea Bolognani 已提交
1996
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
1997
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
1998
    DO_TEST_FAILURE("aarch64-gic-not-virt",
A
Andrea Bolognani 已提交
1999
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2000
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2001
    DO_TEST_FAILURE("aarch64-gic-not-arm",
A
Andrea Bolognani 已提交
2002
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2003
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2004
    DO_TEST("aarch64-kvm-32-on-64",
2005
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2006
            QEMU_CAPS_KVM, QEMU_CAPS_CPU_AARCH64_OFF);
2007
    DO_TEST_FAILURE("aarch64-kvm-32-on-64",
2008
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2009
            QEMU_CAPS_KVM);
2010
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);
2011

2012 2013 2014 2015 2016
    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 已提交
2017
    DO_TEST("panic", QEMU_CAPS_DEVICE_PANIC,
2018
            QEMU_CAPS_NODEFCONFIG);
D
Dmitry Andreev 已提交
2019
    DO_TEST("panic-double", QEMU_CAPS_DEVICE_PANIC,
2020
            QEMU_CAPS_NODEFCONFIG);
H
Hu Tao 已提交
2021

2022
    DO_TEST("panic-no-address", QEMU_CAPS_DEVICE_PANIC,
2023
            QEMU_CAPS_NODEFCONFIG);
2024

2025 2026
    DO_TEST("fips-enabled", QEMU_CAPS_ENABLE_FIPS);

J
Ján Tomko 已提交
2027
    DO_TEST("shmem", QEMU_CAPS_DEVICE_IVSHMEM);
2028
    DO_TEST_FAILURE("shmem", NONE);
J
Ján Tomko 已提交
2029
    DO_TEST_FAILURE("shmem-invalid-size",
2030
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2031
    DO_TEST_FAILURE("shmem-invalid-address",
2032
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2033
    DO_TEST_FAILURE("shmem-small-size",
2034
                    QEMU_CAPS_DEVICE_IVSHMEM);
2035
    DO_TEST_PARSE_ERROR("shmem-msi-only", NONE);
A
Andrea Bolognani 已提交
2036
    DO_TEST("cpu-host-passthrough-features", QEMU_CAPS_KVM);
2037

2038
    DO_TEST_FAILURE("memory-align-fail", NONE);
2039 2040 2041
    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);
2042
    DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2043
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2044
    DO_TEST("memory-hotplug-dimm-addr", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2045
            QEMU_CAPS_OBJECT_MEMORY_FILE);
2046
    DO_TEST("memory-hotplug-ppc64-nonuma", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2047
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2048

2049 2050
    DO_TEST("machine-aeskeywrap-on-caps",
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP,
2051
            QEMU_CAPS_DEA_KEY_WRAP,
2052
            QEMU_CAPS_VIRTIO_SCSI,
2053 2054
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps", QEMU_CAPS_MACHINE_OPT,
2055
                    QEMU_CAPS_VIRTIO_SCSI,
2056 2057 2058 2059 2060
                    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,
2061
            QEMU_CAPS_VIRTIO_SCSI,
2062 2063
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap", QEMU_CAPS_MACHINE_OPT,
2064
                    QEMU_CAPS_VIRTIO_SCSI,
2065 2066 2067 2068 2069
                    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,
2070
            QEMU_CAPS_VIRTIO_SCSI,
2071 2072
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", QEMU_CAPS_MACHINE_OPT,
2073
                    QEMU_CAPS_VIRTIO_SCSI,
2074 2075 2076 2077
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", NONE);

    DO_TEST("machine-aeskeywrap-off-cap",
2078
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP,
2079
            QEMU_CAPS_VIRTIO_SCSI,
2080 2081
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap", QEMU_CAPS_MACHINE_OPT,
2082
                    QEMU_CAPS_VIRTIO_SCSI,
2083 2084 2085 2086 2087
                    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,
2088
            QEMU_CAPS_VIRTIO_SCSI,
2089
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2090
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", QEMU_CAPS_MACHINE_OPT,
2091
                    QEMU_CAPS_VIRTIO_SCSI,
2092 2093 2094 2095
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", NONE);

    DO_TEST("machine-deakeywrap-on-cap",
2096
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_DEA_KEY_WRAP,
2097
            QEMU_CAPS_VIRTIO_SCSI,
2098 2099
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-on-cap", QEMU_CAPS_MACHINE_OPT,
2100
                    QEMU_CAPS_VIRTIO_SCSI,
2101 2102 2103 2104 2105
                    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,
2106
            QEMU_CAPS_VIRTIO_SCSI,
2107 2108
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", QEMU_CAPS_MACHINE_OPT,
2109
                    QEMU_CAPS_VIRTIO_SCSI,
2110 2111 2112 2113
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", NONE);

    DO_TEST("machine-deakeywrap-off-cap",
2114
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_DEA_KEY_WRAP,
2115
            QEMU_CAPS_VIRTIO_SCSI,
2116 2117
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-cap", QEMU_CAPS_MACHINE_OPT,
2118
                    QEMU_CAPS_VIRTIO_SCSI,
2119 2120 2121 2122 2123
                    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,
2124
            QEMU_CAPS_VIRTIO_SCSI,
2125 2126
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST("machine-keywrap-none",
2127
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_VIRTIO_SCSI,
2128
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2129

J
Jiri Denemark 已提交
2130 2131 2132 2133 2134 2135 2136
    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);

2137
    DO_TEST("virtio-input", QEMU_CAPS_VIRTIO_KEYBOARD,
2138
            QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET);
2139
    DO_TEST("virtio-input-passthrough", QEMU_CAPS_VIRTIO_INPUT_HOST);
2140

2141
    DO_TEST("ppc64-usb-controller",
2142
            QEMU_CAPS_PCI_OHCI);
2143
    DO_TEST("ppc64-usb-controller-legacy",
2144
            QEMU_CAPS_PIIX3_USB_UHCI);
2145

2146 2147 2148 2149
    DO_TEST_PARSE_FLAGS_ERROR("missing-machine",
                              VIR_DOMAIN_DEF_PARSE_SKIP_OSTYPE_CHECKS,
                              NONE);

2150
    DO_TEST("name-escape", QEMU_CAPS_NAME_DEBUG_THREADS,
2151 2152
            QEMU_CAPS_OBJECT_SECRET, QEMU_CAPS_CHARDEV, QEMU_CAPS_VNC,
            QEMU_CAPS_NAME_GUEST);
M
Marc-André Lureau 已提交
2153 2154
    DO_TEST("debug-threads", QEMU_CAPS_NAME_DEBUG_THREADS);

2155
    DO_TEST("master-key", QEMU_CAPS_OBJECT_SECRET);
J
Ján Tomko 已提交
2156 2157
    DO_TEST("usb-long-port-path", QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_USB_HUB);
2158 2159 2160
    DO_TEST_PARSE_ERROR("usb-too-long-port-path-invalid",
                        QEMU_CAPS_CHARDEV,
                        QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_USB_HUB);
2161

2162
    DO_TEST("acpi-table", NONE);
2163 2164
    DO_TEST("intel-iommu", QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_DEVICE_INTEL_IOMMU);
2165 2166
    DO_TEST("intel-iommu-machine", QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_MACHINE_IOMMU);
2167

2168 2169
    DO_TEST("cpu-hotplug-startup", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);

2170
    qemuTestDriverFree(&driver);
2171

2172
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
2173 2174
}

2175 2176
VIRT_TEST_MAIN_PRELOAD(mymain, abs_builddir "/.libs/qemuxml2argvmock.so",
                       abs_builddir "/.libs/virrandommock.so")
2177

2178 2179
#else

2180 2181 2182 2183
int main(void)
{
    return EXIT_AM_SKIP;
}
2184 2185

#endif /* WITH_QEMU */