qemuxml2argvtest.c 97.0 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
    virStringListFree(volinfo);
164 165
    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
    const char *s390xModels[] = {
        "z990", "zEC12", "z13",
    };
306

307
    if (ARCH_IS_X86(arch)) {
308
        if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM, x86Models,
309 310
                                         ARRAY_CARDINALITY(x86Models),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
311
            virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU, x86Models,
312 313
                                         ARRAY_CARDINALITY(x86Models),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
314 315
            return -1;

316 317 318
        if (!skipLegacy) {
            if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM,
                                             x86LegacyModels,
319 320
                                             ARRAY_CARDINALITY(x86LegacyModels),
                                             VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
321 322
                virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU,
                                             x86LegacyModels,
323 324
                                             ARRAY_CARDINALITY(x86LegacyModels),
                                             VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
325 326
                return -1;
        }
327
    } else if (ARCH_IS_ARM(arch)) {
328
        if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM, armModels,
329 330
                                         ARRAY_CARDINALITY(armModels),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
331
            virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU, armModels,
332 333
                                         ARRAY_CARDINALITY(armModels),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
334 335
            return -1;
    } else if (ARCH_IS_PPC64(arch)) {
336
        if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM, ppc64Models,
337 338
                                         ARRAY_CARDINALITY(ppc64Models),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
339
            virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU, ppc64Models,
340 341
                                         ARRAY_CARDINALITY(ppc64Models),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
342
            return -1;
343 344 345 346 347
    } else if (ARCH_IS_S390(arch)) {
        if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM, s390xModels,
                                         ARRAY_CARDINALITY(s390xModels),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
            return -1;
348
    }
349 350 351 352 353 354

    return 0;
}


static int
355 356
testInitQEMUCaps(struct testInfo *info,
                 int gic)
357 358 359 360 361 362
{
    int ret = -1;

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

363
    virQEMUCapsSet(info->qemuCaps, QEMU_CAPS_NO_ACPI);
364 365 366 367 368 369 370 371 372 373 374

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

    ret = 0;

 cleanup:
    return ret;
}


375 376
static int
testUpdateQEMUCaps(const struct testInfo *info,
377 378
                   virDomainObjPtr vm,
                   virCapsPtr caps)
379 380 381
{
    int ret = -1;

382 383
    virQEMUCapsSetArch(info->qemuCaps, vm->def->os.arch);

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

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

389 390 391 392 393 394 395 396 397 398 399 400
    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;
}


401 402
static int
testCompareXMLToArgv(const void *data)
403
{
404 405 406 407
    const struct testInfo *info = data;
    char *xml = NULL;
    char *args = NULL;
    char *migrateURI = NULL;
408
    char *actualargv = NULL;
409 410
    unsigned int flags = info->flags;
    unsigned int parseFlags = info->parseFlags;
E
Eric Blake 已提交
411
    int ret = -1;
412
    virDomainObjPtr vm = NULL;
413
    virDomainChrSourceDef monitor_chr;
414
    virConnectPtr conn;
J
Jiri Denemark 已提交
415
    char *log = NULL;
E
Eric Blake 已提交
416
    virCommandPtr cmd = NULL;
417
    size_t i;
418
    qemuDomainObjPrivatePtr priv = NULL;
419

420 421
    memset(&monitor_chr, 0, sizeof(monitor_chr));

422
    if (!(conn = virGetConnect()))
423
        goto cleanup;
424

425
    conn->secretDriver = &fakeSecretDriver;
426
    conn->storageDriver = &fakeStorageDriver;
427

428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448
    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;

449
    if (!(vm = virDomainObjNew(driver.xmlopt)))
450
        goto cleanup;
451

452
    parseFlags |= VIR_DOMAIN_DEF_PARSE_INACTIVE;
453
    if (!(vm->def = virDomainDefParseFile(xml, driver.caps, driver.xmlopt,
454
                                          NULL, parseFlags))) {
P
Pavel Hrdina 已提交
455
        if (flags & FLAG_EXPECT_PARSE_ERROR)
456
            goto ok;
457
        goto cleanup;
458
    }
459
    priv = vm->privateData;
460

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

464
    if (!virDomainDefCheckABIStability(vm->def, vm->def)) {
465
        VIR_TEST_DEBUG("ABI stability check failed on %s", xml);
466
        goto cleanup;
467 468
    }

469
    vm->def->id = -1;
470

471
    if (qemuProcessPrepareMonitorChr(&monitor_chr, priv->libDir) < 0)
472
        goto cleanup;
473

474 475 476 477
    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)
478
            goto cleanup;
479
    }
480

481
    if (testUpdateQEMUCaps(info, vm, driver.caps) < 0)
482
        goto cleanup;
483

484
    log = virTestLogContentAndReset();
485
    VIR_FREE(log);
486
    virResetLastError();
J
Jiri Denemark 已提交
487

488 489
    for (i = 0; i < vm->def->nhostdevs; i++) {
        virDomainHostdevDefPtr hostdev = vm->def->hostdevs[i];
490 491 492 493 494 495 496 497

        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 已提交
498 499 500
    if (!(cmd = qemuProcessCreatePretendCmd(conn, &driver, vm, migrateURI,
                                            (flags & FLAG_FIPS), false,
                                            VIR_QEMU_PROCESS_START_COLD))) {
P
Pavel Hrdina 已提交
501 502
        if (flags & FLAG_EXPECT_FAILURE)
            goto ok;
503
        goto cleanup;
J
Jiri Denemark 已提交
504 505
    }

E
Eric Blake 已提交
506
    if (!(actualargv = virCommandToString(cmd)))
507
        goto cleanup;
E
Eric Blake 已提交
508

509
    if (virTestCompareToFile(actualargv, args) < 0)
510
        goto cleanup;
511

P
Pavel Hrdina 已提交
512 513
    ret = 0;

514
 ok:
515
    if (ret == 0 && flags & FLAG_EXPECT_FAILURE) {
P
Pavel Hrdina 已提交
516 517
        ret = -1;
        VIR_TEST_DEBUG("Error expected but there wasn't any.\n");
518
        goto cleanup;
P
Pavel Hrdina 已提交
519
    }
520
    if (!virTestOOMActive()) {
521
        if (flags & FLAG_EXPECT_FAILURE) {
522
            if ((log = virTestLogContentAndReset()))
P
Pavel Hrdina 已提交
523 524
                VIR_TEST_DEBUG("Got expected error: \n%s", log);
        }
525
        virResetLastError();
P
Pavel Hrdina 已提交
526
        ret = 0;
527 528
    }

529
 cleanup:
530 531
    VIR_FREE(log);
    VIR_FREE(actualargv);
532
    virDomainChrSourceDefClear(&monitor_chr);
E
Eric Blake 已提交
533
    virCommandFree(cmd);
534
    virObjectUnref(vm);
535
    virObjectUnref(conn);
536
    VIR_FREE(migrateURI);
537 538
    VIR_FREE(xml);
    VIR_FREE(args);
539
    return ret;
540 541 542
}


543
static int
E
Eric Blake 已提交
544
mymain(void)
545 546
{
    int ret = 0;
547
    bool skipLegacyCPUs = false;
548

549 550
    abs_top_srcdir = getenv("abs_top_srcdir");
    if (!abs_top_srcdir)
551
        abs_top_srcdir = abs_srcdir "/..";
552

553 554 555 556 557 558 559 560 561 562
    /* 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;
    }

563
    if (qemuTestDriverInit(&driver) < 0)
564
        return EXIT_FAILURE;
565 566

    driver.privileged = true;
567

568 569 570
    VIR_FREE(driver.config->defaultTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->defaultTLSx509certdir, "/etc/pki/qemu") < 0)
        return EXIT_FAILURE;
571
    VIR_FREE(driver.config->vncTLSx509certdir);
572
    if (VIR_STRDUP_QUIET(driver.config->vncTLSx509certdir, "/etc/pki/libvirt-vnc") < 0)
573 574
        return EXIT_FAILURE;
    VIR_FREE(driver.config->spiceTLSx509certdir);
575
    if (VIR_STRDUP_QUIET(driver.config->spiceTLSx509certdir, "/etc/pki/libvirt-spice") < 0)
576
        return EXIT_FAILURE;
577 578 579
    VIR_FREE(driver.config->chardevTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->chardevTLSx509certdir, "/etc/pki/libvirt-chardev") < 0)
        return EXIT_FAILURE;
580

581
    VIR_FREE(driver.config->stateDir);
582
    if (VIR_STRDUP_QUIET(driver.config->stateDir, "/nowhere") < 0)
583
        return EXIT_FAILURE;
584
    VIR_FREE(driver.config->hugetlbfs);
585
    if (VIR_ALLOC_N(driver.config->hugetlbfs, 2) < 0)
586
        return EXIT_FAILURE;
587 588 589
    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)
590
        return EXIT_FAILURE;
591 592
    driver.config->hugetlbfs[0].size = 2048;
    driver.config->hugetlbfs[0].deflt = true;
593
    driver.config->hugetlbfs[1].size = 1048576;
594
    driver.config->spiceTLS = 1;
595
    if (VIR_STRDUP_QUIET(driver.config->spicePassword, "123456") < 0)
596
        return EXIT_FAILURE;
597

598 599 600 601
# define DO_TEST_FULL(name, migrateFrom, migrateFd, flags,               \
                      parseFlags, gic, ...)                              \
    do {                                                                 \
        static struct testInfo info = {                                  \
602 603
            name, NULL, migrateFrom, migrateFd, (flags), parseFlags,     \
            false                                                        \
604
        };                                                               \
605 606
        info.skipLegacyCPUs = skipLegacyCPUs;                            \
        if (testInitQEMUCaps(&info, gic) < 0)                            \
607
            return EXIT_FAILURE;                                         \
608
        virQEMUCapsSetList(info.qemuCaps, __VA_ARGS__, QEMU_CAPS_LAST);  \
609
        if (virTestRun("QEMU XML-2-ARGV " name,                          \
610
                       testCompareXMLToArgv, &info) < 0)                 \
611
            ret = -1;                                                    \
612
        virObjectUnref(info.qemuCaps);                                   \
613 614
    } while (0)

615
# define DO_TEST(name, ...)                                              \
616
    DO_TEST_FULL(name, NULL, -1, 0, 0, GIC_NONE, __VA_ARGS__)
617

618
# define DO_TEST_GIC(name, gic, ...)                                     \
619 620
    DO_TEST_FULL(name, NULL, -1, 0, 0, gic, __VA_ARGS__)

621 622
# define DO_TEST_FAILURE(name, ...)                                      \
    DO_TEST_FULL(name, NULL, -1, FLAG_EXPECT_FAILURE,                    \
623
                 0, GIC_NONE, __VA_ARGS__)
624

625 626 627
# define DO_TEST_PARSE_ERROR(name, ...)                                  \
    DO_TEST_FULL(name, NULL, -1,                                         \
                 FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE,          \
628
                 0, GIC_NONE, __VA_ARGS__)
629

630 631 632
# define DO_TEST_PARSE_FLAGS_ERROR(name, parseFlags, ...)                \
    DO_TEST_FULL(name, NULL, -1,                                         \
                 FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE,          \
633
                 parseFlags, GIC_NONE, __VA_ARGS__)
634

635
# define DO_TEST_LINUX(name, ...)                                        \
636
    DO_TEST_LINUX_FULL(name, NULL, -1, 0, 0, GIC_NONE, __VA_ARGS__)
637

638 639 640 641 642 643
# 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. */
644
#  define DO_TEST_LINUX_FULL(name, ...)                                  \
645
    DO_TEST_FULL(name, __VA_ARGS__)
646
# else  /* __linux__ */
647 648 649
#  define DO_TEST_LINUX_FULL(name, ...)                                  \
    do {                                                                 \
        const char *tmp ATTRIBUTE_UNUSED = name;                         \
650 651 652
    } while (0)
# endif /* __linux__ */

653
# define NONE QEMU_CAPS_LAST
654

655 656 657
    /* 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 */
658 659 660 661 662 663 664
    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");
665 666
    unsetenv("QEMU_AUDIO_DRV");
    unsetenv("SDL_AUDIODRIVER");
667

668
    DO_TEST("minimal", NONE);
669
    DO_TEST_PARSE_ERROR("minimal-no-memory", NONE);
670
    DO_TEST("minimal-msg-timestamp", QEMU_CAPS_MSG_TIMESTAMP);
671
    DO_TEST("machine-aliases1", NONE);
672
    DO_TEST("machine-aliases2", QEMU_CAPS_KVM);
673 674
    DO_TEST("machine-core-on", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_DUMP_GUEST_CORE);
675
    driver.config->dumpGuestCore = true;
676 677
    DO_TEST("machine-core-off", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_DUMP_GUEST_CORE);
678 679 680
    driver.config->dumpGuestCore = false;
    DO_TEST("machine-core-cfg-off", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_DUMP_GUEST_CORE);
681
    DO_TEST_FAILURE("machine-core-on", NONE);
682
    DO_TEST_FAILURE("machine-core-on", QEMU_CAPS_MACHINE_OPT);
M
Michal Privoznik 已提交
683 684 685
    DO_TEST("machine-smm-opt",
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
686
            QEMU_CAPS_DEVICE_IOH3420,
M
Michal Privoznik 已提交
687 688 689 690
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_SMM_OPT,
            QEMU_CAPS_VIRTIO_SCSI);
L
Li Zhang 已提交
691 692
    DO_TEST("machine-usb-opt", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_USB_OPT);
693 694
    DO_TEST("machine-vmport-opt", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_VMPORT_OPT);
695
    DO_TEST("kvm", QEMU_CAPS_MACHINE_OPT);
696 697
    DO_TEST("default-kvm-host-arch", QEMU_CAPS_MACHINE_OPT);
    DO_TEST("default-qemu-host-arch", QEMU_CAPS_MACHINE_OPT);
698 699 700
    DO_TEST("boot-cdrom", NONE);
    DO_TEST("boot-network", NONE);
    DO_TEST("boot-floppy", NONE);
701
    DO_TEST("boot-floppy-q35",
702
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
703
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
704
            QEMU_CAPS_DEVICE_IOH3420,
705
            QEMU_CAPS_ICH9_AHCI);
706
    DO_TEST("bootindex-floppy-q35",
707
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
708
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
709
            QEMU_CAPS_DEVICE_IOH3420,
710
            QEMU_CAPS_ICH9_AHCI, QEMU_CAPS_BOOT_MENU,
711
            QEMU_CAPS_BOOTINDEX);
712 713
    DO_TEST("boot-multi", QEMU_CAPS_BOOT_MENU);
    DO_TEST("boot-menu-enable",
714
            QEMU_CAPS_BOOT_MENU);
715
    DO_TEST("boot-menu-enable-bootindex",
716
            QEMU_CAPS_BOOT_MENU,
717
            QEMU_CAPS_BOOTINDEX);
718
    DO_TEST("boot-menu-enable-with-timeout",
719
            QEMU_CAPS_BOOT_MENU,
720
            QEMU_CAPS_SPLASH_TIMEOUT);
721
    DO_TEST_FAILURE("boot-menu-enable-with-timeout", QEMU_CAPS_BOOT_MENU);
722
    DO_TEST_PARSE_ERROR("boot-menu-enable-with-timeout-invalid", NONE);
723 724
    DO_TEST("boot-menu-disable", QEMU_CAPS_BOOT_MENU);
    DO_TEST("boot-menu-disable-drive",
725
            QEMU_CAPS_BOOT_MENU);
726
    DO_TEST("boot-menu-disable-drive-bootindex",
727
            QEMU_CAPS_BOOT_MENU,
728
            QEMU_CAPS_BOOTINDEX);
729
    DO_TEST_PARSE_ERROR("boot-dev+order",
730
            QEMU_CAPS_BOOTINDEX,
731
            QEMU_CAPS_VIRTIO_BLK_SCSI);
732
    DO_TEST("boot-order",
733
            QEMU_CAPS_BOOTINDEX,
734
            QEMU_CAPS_VIRTIO_BLK_SCSI);
735
    DO_TEST("boot-complex",
736
            QEMU_CAPS_DRIVE_BOOT,
737
            QEMU_CAPS_VIRTIO_BLK_SCSI);
738
    DO_TEST("boot-complex-bootindex",
739
            QEMU_CAPS_DRIVE_BOOT,
740
            QEMU_CAPS_BOOTINDEX,
741
            QEMU_CAPS_VIRTIO_BLK_SCSI);
742
    DO_TEST("boot-strict",
743
            QEMU_CAPS_DRIVE_BOOT,
744
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_BOOT_STRICT,
745
            QEMU_CAPS_VIRTIO_BLK_SCSI);
746 747 748 749 750

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

751
    DO_TEST("bios", QEMU_CAPS_SGA);
J
Ján Tomko 已提交
752
    DO_TEST("bios-nvram", NONE);
M
Michal Privoznik 已提交
753 754 755
    DO_TEST("bios-nvram-secure",
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
756
            QEMU_CAPS_DEVICE_IOH3420,
M
Michal Privoznik 已提交
757 758 759 760
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_SMM_OPT,
            QEMU_CAPS_VIRTIO_SCSI);
761
    DO_TEST("clock-utc", QEMU_CAPS_NODEFCONFIG);
762
    DO_TEST("clock-localtime", NONE);
763
    DO_TEST("clock-localtime-basis-localtime", QEMU_CAPS_RTC);
764 765
    DO_TEST("clock-variable", QEMU_CAPS_RTC);
    DO_TEST("clock-france", QEMU_CAPS_RTC);
766 767
    DO_TEST("clock-hpet-off", QEMU_CAPS_RTC, QEMU_CAPS_NO_HPET,
            QEMU_CAPS_NO_KVM_PIT);
768
    DO_TEST("clock-catchup", QEMU_CAPS_RTC, QEMU_CAPS_NO_KVM_PIT);
769
    DO_TEST("cpu-kvmclock", QEMU_CAPS_ENABLE_KVM);
A
Andrea Bolognani 已提交
770
    DO_TEST("cpu-host-kvmclock", QEMU_CAPS_ENABLE_KVM);
771
    DO_TEST("kvmclock", QEMU_CAPS_KVM);
772
    DO_TEST("clock-timer-hyperv-rtc", QEMU_CAPS_KVM);
773

774 775
    DO_TEST("cpu-eoi-disabled", QEMU_CAPS_ENABLE_KVM);
    DO_TEST("cpu-eoi-enabled", QEMU_CAPS_ENABLE_KVM);
J
Ján Tomko 已提交
776
    DO_TEST("controller-order",
777
            QEMU_CAPS_KVM, QEMU_CAPS_ENABLE_KVM,
778 779 780
            QEMU_CAPS_BOOT_MENU, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_DRIVE_AIO,
            QEMU_CAPS_CCID_PASSTHRU, QEMU_CAPS_CHARDEV,
781
            QEMU_CAPS_CHARDEV_SPICEVMC, QEMU_CAPS_SPICE,
782 783
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
784 785
    DO_TEST("eoi-disabled", NONE);
    DO_TEST("eoi-enabled", NONE);
786 787
    DO_TEST("pv-spinlock-disabled", NONE);
    DO_TEST("pv-spinlock-enabled", NONE);
M
Martin Kletzander 已提交
788
    DO_TEST("kvmclock+eoi-disabled", QEMU_CAPS_ENABLE_KVM);
789

790
    DO_TEST("hyperv", NONE);
791
    DO_TEST("hyperv-off", NONE);
792
    DO_TEST("hyperv-panic", NONE);
793

794 795 796
    DO_TEST("kvm-features", NONE);
    DO_TEST("kvm-features-off", NONE);

797 798 799
    DO_TEST("pmu-feature", NONE);
    DO_TEST("pmu-feature-off", NONE);

800
    DO_TEST("hugepages", QEMU_CAPS_MEM_PATH);
801
    DO_TEST("hugepages-numa", QEMU_CAPS_RTC, QEMU_CAPS_NO_KVM_PIT,
802
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4,
803
            QEMU_CAPS_VIRTIO_SCSI,
804 805
            QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC,
806
            QEMU_CAPS_DEVICE_QXL,
807
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_USB_REDIR,
808
            QEMU_CAPS_DEVICE_PC_DIMM,
809
            QEMU_CAPS_MEM_PATH, QEMU_CAPS_OBJECT_MEMORY_FILE);
810 811 812
    DO_TEST_LINUX("hugepages-pages", QEMU_CAPS_MEM_PATH,
                  QEMU_CAPS_OBJECT_MEMORY_RAM,
                  QEMU_CAPS_OBJECT_MEMORY_FILE);
813 814 815 816
    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);
817 818 819
    DO_TEST_LINUX("hugepages-shared", QEMU_CAPS_MEM_PATH,
                  QEMU_CAPS_OBJECT_MEMORY_RAM,
                  QEMU_CAPS_OBJECT_MEMORY_FILE);
820
    DO_TEST_PARSE_ERROR("hugepages-memaccess-invalid", NONE);
821 822
    DO_TEST_FAILURE("hugepages-pages4", QEMU_CAPS_MEM_PATH,
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
823
    DO_TEST("hugepages-pages5", QEMU_CAPS_MEM_PATH);
824
    DO_TEST("hugepages-pages6", NONE);
825
    DO_TEST("nosharepages", QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_MEM_MERGE);
826
    DO_TEST("disk-cdrom", NONE);
827
    DO_TEST("disk-iscsi", NONE);
828 829 830 831 832
    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);
833
    DO_TEST("disk-cdrom-empty", NONE);
834
    DO_TEST("disk-cdrom-tray",
835
            QEMU_CAPS_VIRTIO_TX_ALG);
836 837
    DO_TEST("disk-cdrom-tray-no-device-cap", NONE);
    DO_TEST("disk-floppy", NONE);
838
    DO_TEST_FAILURE("disk-floppy-pseries", NONE);
839
    DO_TEST("disk-floppy-tray-no-device-cap", NONE);
840
    DO_TEST("disk-floppy-tray", NONE);
841
    DO_TEST("disk-virtio-s390",
842
            QEMU_CAPS_VIRTIO_S390);
843
    DO_TEST("disk-many", NONE);
844 845
    DO_TEST("disk-virtio", QEMU_CAPS_DRIVE_BOOT);
    DO_TEST("disk-virtio-ccw",
846
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
847
    DO_TEST("disk-virtio-ccw-many",
848
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
849
    DO_TEST("disk-virtio-scsi-ccw", QEMU_CAPS_VIRTIO_SCSI,
850
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
851
    DO_TEST("disk-order",
852
            QEMU_CAPS_DRIVE_BOOT, QEMU_CAPS_VIRTIO_BLK_SCSI);
853
    DO_TEST("disk-drive-boot-disk",
854
            QEMU_CAPS_DRIVE_BOOT);
855
    DO_TEST("disk-drive-boot-cdrom",
856
            QEMU_CAPS_DRIVE_BOOT);
857
    DO_TEST("floppy-drive-fat",
858
            QEMU_CAPS_DRIVE_BOOT);
859
    DO_TEST("disk-drive-readonly-disk",
860
            QEMU_CAPS_NODEFCONFIG);
861
    DO_TEST("disk-drive-readonly-no-device",
J
Ján Tomko 已提交
862
            QEMU_CAPS_NODEFCONFIG);
863
    DO_TEST("disk-drive-fmt-qcow",
864
            QEMU_CAPS_DRIVE_BOOT);
865
    DO_TEST("disk-drive-shared",
866
            QEMU_CAPS_DRIVE_SERIAL);
867
    DO_TEST("disk-drive-error-policy-stop",
868
            QEMU_CAPS_MONITOR_JSON);
869
    DO_TEST("disk-drive-error-policy-enospace",
870
            QEMU_CAPS_MONITOR_JSON);
871
    DO_TEST("disk-drive-error-policy-wreport-rignore",
872 873 874 875
            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);
876
    DO_TEST("disk-drive-cache-directsync",
877
            QEMU_CAPS_DRIVE_CACHE_DIRECTSYNC);
878
    DO_TEST("disk-drive-cache-unsafe",
879
            QEMU_CAPS_DRIVE_CACHE_UNSAFE);
880
    DO_TEST("disk-drive-copy-on-read",
881 882 883 884 885 886 887 888
            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);
889 890
    DO_TEST("disk-drive-network-iscsi-lun",
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_VIRTIO_SCSI,
891
            QEMU_CAPS_SCSI_BLOCK);
892 893
    DO_TEST("disk-drive-network-gluster",
            QEMU_CAPS_GLUSTER_DEBUG_LEVEL);
894 895 896
    DO_TEST("disk-drive-network-rbd", NONE);
    DO_TEST("disk-drive-network-sheepdog", NONE);
    DO_TEST("disk-drive-network-rbd-auth", NONE);
897
# ifdef HAVE_GNUTLS_CIPHER_ENCRYPT
898
    DO_TEST("disk-drive-network-rbd-auth-AES",
899
            QEMU_CAPS_OBJECT_SECRET, QEMU_CAPS_VIRTIO_SCSI);
900
# endif
901 902
    DO_TEST("disk-drive-network-rbd-ipv6", NONE);
    DO_TEST_FAILURE("disk-drive-network-rbd-no-colon", NONE);
903
    DO_TEST("disk-drive-no-boot",
904
            QEMU_CAPS_BOOTINDEX);
905
    DO_TEST_PARSE_ERROR("disk-device-lun-type-invalid",
906 907
                        QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST_FAILURE("disk-usb-nosupport", NONE);
908
    DO_TEST("disk-usb-device",
909
            QEMU_CAPS_DEVICE_USB_STORAGE,
910
            QEMU_CAPS_NODEFCONFIG);
911
    DO_TEST("disk-usb-device-removable",
912
            QEMU_CAPS_DEVICE_USB_STORAGE,
913
            QEMU_CAPS_USB_STORAGE_REMOVABLE, QEMU_CAPS_NODEFCONFIG);
914 915
    DO_TEST_FAILURE("disk-usb-pci",
                    QEMU_CAPS_DEVICE_USB_STORAGE, QEMU_CAPS_NODEFCONFIG);
916
    DO_TEST("disk-scsi-device",
917
            QEMU_CAPS_NODEFCONFIG,
918
            QEMU_CAPS_SCSI_LSI);
919
    DO_TEST("disk-scsi-device-auto",
920
            QEMU_CAPS_NODEFCONFIG,
921
            QEMU_CAPS_SCSI_LSI);
922
    DO_TEST("disk-scsi-disk-split",
923
            QEMU_CAPS_NODEFCONFIG,
924
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI);
925
    DO_TEST("disk-scsi-disk-wwn",
926
            QEMU_CAPS_NODEFCONFIG,
927
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
928 929
            QEMU_CAPS_SCSI_DISK_WWN);
    DO_TEST("disk-scsi-disk-vpd",
930
            QEMU_CAPS_NODEFCONFIG,
931
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
932 933
            QEMU_CAPS_SCSI_DISK_WWN);
    DO_TEST_FAILURE("disk-scsi-disk-vpd-build-error",
934
            QEMU_CAPS_NODEFCONFIG,
935
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
936
            QEMU_CAPS_SCSI_DISK_WWN);
937
    DO_TEST("disk-scsi-vscsi",
938
            QEMU_CAPS_NODEFCONFIG);
939
    DO_TEST("disk-scsi-virtio-scsi",
940
            QEMU_CAPS_NODEFCONFIG,
941
            QEMU_CAPS_VIRTIO_SCSI);
942
    DO_TEST("disk-virtio-scsi-num_queues",
943
            QEMU_CAPS_NODEFCONFIG,
944
            QEMU_CAPS_VIRTIO_SCSI);
945
    DO_TEST("disk-virtio-scsi-cmd_per_lun",
946
            QEMU_CAPS_NODEFCONFIG,
947 948
            QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST("disk-virtio-scsi-max_sectors",
949
            QEMU_CAPS_NODEFCONFIG,
950
            QEMU_CAPS_VIRTIO_SCSI);
951
    DO_TEST("disk-virtio-scsi-ioeventfd",
952
            QEMU_CAPS_NODEFCONFIG,
953
            QEMU_CAPS_VIRTIO_IOEVENTFD, QEMU_CAPS_VIRTIO_SCSI);
954
    DO_TEST("disk-scsi-megasas",
955
            QEMU_CAPS_NODEFCONFIG,
956
            QEMU_CAPS_SCSI_MEGASAS);
957 958 959 960
    DO_TEST("disk-scsi-mptsas1068",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_SCSI_MPTSAS1068,
            QEMU_CAPS_SCSI_DISK_WWN);
961
    DO_TEST("disk-sata-device",
J
Jim Fehlig 已提交
962
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_ICH9_AHCI);
963
    DO_TEST("disk-aio",
964
            QEMU_CAPS_DRIVE_AIO);
965
    DO_TEST("disk-source-pool",
966
            QEMU_CAPS_NODEFCONFIG);
967
    DO_TEST("disk-source-pool-mode",
968
            QEMU_CAPS_NODEFCONFIG);
969
    DO_TEST("disk-ioeventfd",
970
            QEMU_CAPS_VIRTIO_IOEVENTFD,
971
            QEMU_CAPS_VIRTIO_TX_ALG,
972
            QEMU_CAPS_VIRTIO_BLK_SCSI);
973
    DO_TEST("disk-copy_on_read",
974
            QEMU_CAPS_DRIVE_COPY_ON_READ,
975
            QEMU_CAPS_VIRTIO_TX_ALG,
976
            QEMU_CAPS_VIRTIO_BLK_SCSI);
O
Osier Yang 已提交
977
    DO_TEST("disk-drive-discard",
978
            QEMU_CAPS_DRIVE_DISCARD);
979 980 981
    DO_TEST("disk-drive-detect-zeroes",
            QEMU_CAPS_DRIVE_DISCARD,
            QEMU_CAPS_DRIVE_DETECT_ZEROES);
982
    DO_TEST("disk-snapshot", NONE);
983 984 985
    DO_TEST_PARSE_ERROR("disk-same-targets",
                        QEMU_CAPS_SCSI_LSI,
                        QEMU_CAPS_DEVICE_USB_STORAGE, QEMU_CAPS_NODEFCONFIG);
986 987 988 989 990 991 992 993
    DO_TEST_PARSE_ERROR("disk-drive-address-conflict",
                        QEMU_CAPS_ICH9_AHCI);
    DO_TEST_PARSE_ERROR("disk-hostdev-scsi-address-conflict",
                        QEMU_CAPS_VIRTIO_SCSI,
                        QEMU_CAPS_DEVICE_SCSI_GENERIC);
    DO_TEST_PARSE_ERROR("hostdevs-drive-address-conflict",
                        QEMU_CAPS_VIRTIO_SCSI,
                        QEMU_CAPS_DEVICE_SCSI_GENERIC);
994
    DO_TEST("event_idx",
995 996
            QEMU_CAPS_VIRTIO_BLK_EVENT_IDX,
            QEMU_CAPS_VIRTIO_NET_EVENT_IDX,
997
            QEMU_CAPS_VIRTIO_BLK_SCSI);
998
    DO_TEST("virtio-lun",
999
            QEMU_CAPS_VIRTIO_BLK_SCSI);
1000
    DO_TEST("disk-scsi-lun-passthrough",
1001
            QEMU_CAPS_SCSI_BLOCK,
1002
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI);
1003 1004 1005
    DO_TEST("disk-serial",
            QEMU_CAPS_KVM,
            QEMU_CAPS_DRIVE_SERIAL);
1006 1007 1008 1009 1010 1011 1012 1013
    DO_TEST_PARSE_ERROR("disk-fdc-incompatible-address",
                        NONE);
    DO_TEST_PARSE_ERROR("disk-ide-incompatible-address",
                        NONE);
    DO_TEST_PARSE_ERROR("disk-sata-incompatible-address",
                        QEMU_CAPS_ICH9_AHCI);
    DO_TEST_PARSE_ERROR("disk-scsi-incompatible-address",
                        QEMU_CAPS_VIRTIO_SCSI);
1014

1015 1016 1017 1018 1019 1020 1021 1022 1023 1024
    DO_TEST("graphics-vnc", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("graphics-vnc-socket", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("graphics-vnc-websocket", QEMU_CAPS_VNC, QEMU_CAPS_VNC_WEBSOCKET,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("graphics-vnc-policy", QEMU_CAPS_VNC, QEMU_CAPS_VNC_SHARE_POLICY,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("graphics-vnc-no-listen-attr", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("graphics-vnc-remove-generated-socket", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1025
    driver.config->vncAutoUnixSocket = true;
1026 1027
    DO_TEST("graphics-vnc-auto-socket-cfg", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1028
    driver.config->vncAutoUnixSocket = false;
1029 1030 1031 1032
    DO_TEST("graphics-vnc-socket", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("graphics-vnc-auto-socket", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("graphics-vnc-none", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1033

1034 1035
    driver.config->vncSASL = 1;
    VIR_FREE(driver.config->vncSASLdir);
1036
    ignore_value(VIR_STRDUP(driver.config->vncSASLdir, "/root/.sasl2"));
1037
    DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1038 1039
    driver.config->vncTLS = 1;
    driver.config->vncTLSx509verify = 1;
1040
    DO_TEST("graphics-vnc-tls", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1041
    driver.config->vncSASL = driver.config->vncTLSx509verify = driver.config->vncTLS = 0;
1042 1043
    VIR_FREE(driver.config->vncSASLdir);
    VIR_FREE(driver.config->vncTLSx509certdir);
1044

1045 1046 1047
    DO_TEST("graphics-sdl", QEMU_CAPS_SDL, QEMU_CAPS_DEVICE_VGA);
    DO_TEST("graphics-sdl-fullscreen", QEMU_CAPS_SDL,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1048
    DO_TEST("nographics", NONE);
P
Paolo Bonzini 已提交
1049 1050
    DO_TEST("nographics-display",
            QEMU_CAPS_DISPLAY);
1051
    DO_TEST("nographics-vga",
1052
            QEMU_CAPS_VGA_NONE);
1053
    DO_TEST("graphics-spice",
1054
            QEMU_CAPS_SPICE,
1055 1056
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
1057
    DO_TEST("graphics-spice-no-args",
1058
            QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1059 1060 1061
    driver.config->spiceSASL = 1;
    ignore_value(VIR_STRDUP(driver.config->spiceSASLdir, "/root/.sasl2"));
    DO_TEST("graphics-spice-sasl",
1062
            QEMU_CAPS_SPICE,
1063 1064 1065
            QEMU_CAPS_DEVICE_QXL);
    VIR_FREE(driver.config->spiceSASLdir);
    driver.config->spiceSASL = 0;
1066
    DO_TEST("graphics-spice-agentmouse",
1067
            QEMU_CAPS_DEVICE_QXL,
1068
            QEMU_CAPS_SPICE,
1069
            QEMU_CAPS_CHARDEV_SPICEVMC,
1070 1071
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1072
    DO_TEST("graphics-spice-compression",
1073
            QEMU_CAPS_SPICE,
1074
            QEMU_CAPS_DEVICE_QXL);
1075
    DO_TEST("graphics-spice-timeout",
1076
            QEMU_CAPS_KVM,
1077
            QEMU_CAPS_SPICE,
1078 1079
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_DEVICE_VGA);
1080
    DO_TEST("graphics-spice-qxl-vga",
1081
            QEMU_CAPS_SPICE,
1082
            QEMU_CAPS_DEVICE_QXL);
1083
    DO_TEST("graphics-spice-usb-redir",
1084
            QEMU_CAPS_SPICE,
1085
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1086 1087
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_USB_REDIR,
1088
            QEMU_CAPS_CHARDEV_SPICEVMC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1089
    DO_TEST("graphics-spice-agent-file-xfer",
1090
            QEMU_CAPS_SPICE,
1091 1092
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
1093 1094
    DO_TEST("graphics-spice-socket",
            QEMU_CAPS_SPICE,
1095 1096
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1097 1098
    DO_TEST("graphics-spice-auto-socket",
            QEMU_CAPS_SPICE,
1099 1100
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1101 1102 1103
    driver.config->spiceAutoUnixSocket = true;
    DO_TEST("graphics-spice-auto-socket-cfg",
            QEMU_CAPS_SPICE,
1104 1105
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1106
    driver.config->spiceAutoUnixSocket = false;
1107

1108 1109 1110
    DO_TEST("input-usbmouse", NONE);
    DO_TEST("input-usbtablet", NONE);
    DO_TEST("misc-acpi", NONE);
1111 1112 1113
    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);
1114
    DO_TEST_FAILURE("misc-enable-s4", NONE);
1115
    DO_TEST("misc-no-reboot", NONE);
1116
    DO_TEST("misc-uuid", NONE);
1117
    DO_TEST_PARSE_ERROR("vhost_queues-invalid", NONE);
1118
    DO_TEST("net-vhostuser", QEMU_CAPS_NETDEV);
1119
    DO_TEST("net-vhostuser-multiq",
1120 1121
            QEMU_CAPS_NETDEV, QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
    DO_TEST_FAILURE("net-vhostuser-multiq", QEMU_CAPS_NETDEV);
1122 1123 1124
    DO_TEST_FAILURE("net-vhostuser-fail",
                    QEMU_CAPS_NETDEV,
                    QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
1125 1126 1127
    DO_TEST("net-user", NONE);
    DO_TEST("net-virtio", NONE);
    DO_TEST("net-virtio-device",
1128
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_VIRTIO_TX_ALG);
1129
    DO_TEST("net-virtio-disable-offloads",
1130
            QEMU_CAPS_NODEFCONFIG);
1131
    DO_TEST("net-virtio-netdev",
1132
            QEMU_CAPS_NETDEV, QEMU_CAPS_NODEFCONFIG);
1133
    DO_TEST("net-virtio-s390",
1134
            QEMU_CAPS_VIRTIO_S390);
1135
    DO_TEST("net-virtio-ccw",
1136
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1137 1138
    DO_TEST("net-virtio-rxqueuesize",
            QEMU_CAPS_VIRTIO_NET_RX_QUEUE_SIZE);
1139
    DO_TEST_PARSE_ERROR("net-virtio-rxqueuesize-invalid-size", NONE);
1140 1141
    DO_TEST("net-eth", NONE);
    DO_TEST("net-eth-ifname", NONE);
1142
    DO_TEST("net-eth-names", NONE);
1143
    DO_TEST("net-eth-hostip", NONE);
1144 1145 1146
    DO_TEST("net-client", NONE);
    DO_TEST("net-server", NONE);
    DO_TEST("net-mcast", NONE);
1147
    DO_TEST("net-udp", NONE);
1148
    DO_TEST("net-hostdev",
J
Ján Tomko 已提交
1149
            QEMU_CAPS_NODEFCONFIG);
1150
    DO_TEST("net-hostdev-multidomain",
J
Ján Tomko 已提交
1151
            QEMU_CAPS_NODEFCONFIG,
1152 1153 1154
            QEMU_CAPS_HOST_PCI_MULTIDOMAIN);
    DO_TEST_FAILURE("net-hostdev-multidomain",
                    QEMU_CAPS_NODEFCONFIG);
1155
    DO_TEST("net-hostdev-vfio",
J
Ján Tomko 已提交
1156
            QEMU_CAPS_NODEFCONFIG,
1157
            QEMU_CAPS_DEVICE_VFIO_PCI);
1158
    DO_TEST("net-hostdev-vfio-multidomain",
J
Ján Tomko 已提交
1159
            QEMU_CAPS_NODEFCONFIG,
1160 1161 1162
            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);
1163 1164 1165 1166
    DO_TEST_FAILURE("net-hostdev-fail",
                    QEMU_CAPS_NODEFCONFIG,
                    QEMU_CAPS_DEVICE_VFIO_PCI);

1167

1168 1169 1170 1171
    DO_TEST("serial-vc", NONE);
    DO_TEST("serial-pty", NONE);
    DO_TEST("serial-dev", NONE);
    DO_TEST("serial-file", NONE);
1172 1173
    DO_TEST("serial-file-log", QEMU_CAPS_CHARDEV, QEMU_CAPS_CHARDEV_FILE_APPEND,
            QEMU_CAPS_CHARDEV_LOGFILE);
1174 1175 1176 1177 1178
    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);
1179
    DO_TEST("serial-spiceport",
1180
            QEMU_CAPS_CHARDEV,
1181
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1182
            QEMU_CAPS_DEVICE_QXL,
1183
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEPORT);
1184
    DO_TEST("serial-spiceport-nospice", NONE);
1185

1186 1187 1188 1189 1190
    DO_TEST("parallel-tcp", NONE);
    DO_TEST("console-compat", NONE);
    DO_TEST("console-compat-auto", NONE);

    DO_TEST("serial-vc-chardev",
1191
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1192
    DO_TEST("serial-pty-chardev",
1193
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1194
    DO_TEST("serial-dev-chardev",
1195
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1196
    DO_TEST("serial-dev-chardev-iobase",
1197
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1198
    DO_TEST("serial-file-chardev",
1199
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1200
            QEMU_CAPS_CHARDEV_FILE_APPEND);
1201
    DO_TEST("serial-unix-chardev",
1202
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1203
    DO_TEST("serial-tcp-chardev",
1204
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1205
    DO_TEST("serial-udp-chardev",
1206
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1207
    DO_TEST("serial-tcp-telnet-chardev",
1208
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1209 1210 1211 1212
    driver.config->chardevTLS = 1;
    DO_TEST("serial-tcp-tlsx509-chardev",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1213 1214 1215 1216 1217
    driver.config->chardevTLSx509verify = 1;
    DO_TEST("serial-tcp-tlsx509-chardev-verify",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
    driver.config->chardevTLSx509verify = 0;
1218 1219 1220
    DO_TEST("serial-tcp-tlsx509-chardev-notls",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237
    VIR_FREE(driver.config->chardevTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->chardevTLSx509certdir, "/etc/pki/libvirt-chardev") < 0)
        return EXIT_FAILURE;
    if (VIR_STRDUP_QUIET(driver.config->chardevTLSx509secretUUID,
                         "6fd3f62d-9fe7-4a4e-a869-7acd6376d8ea") < 0)
        return EXIT_FAILURE;
# ifdef HAVE_GNUTLS_CIPHER_ENCRYPT
    DO_TEST("serial-tcp-tlsx509-secret-chardev",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_OBJECT_SECRET,
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
# else
    DO_TEST_FAILURE("serial-tcp-tlsx509-secret-chardev",
                    QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
                    QEMU_CAPS_OBJECT_SECRET,
                    QEMU_CAPS_OBJECT_TLS_CREDS_X509);
# endif
1238 1239
    driver.config->chardevTLS = 0;
    VIR_FREE(driver.config->chardevTLSx509certdir);
1240
    DO_TEST("serial-many-chardev",
1241
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1242
    DO_TEST("parallel-tcp-chardev",
1243
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1244
    DO_TEST("parallel-parport-chardev",
1245
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1246
    DO_TEST("console-compat-chardev",
1247
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
M
Michal Privoznik 已提交
1248
    DO_TEST("pci-serial-dev-chardev",
1249
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
M
Michal Privoznik 已提交
1250
            QEMU_CAPS_DEVICE_PCI_SERIAL);
1251

1252
    DO_TEST("channel-guestfwd",
1253
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1254
    DO_TEST("channel-virtio",
1255
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1256
    DO_TEST("channel-virtio-state",
1257
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1258
    DO_TEST("channel-virtio-auto",
1259
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1260
    DO_TEST("channel-virtio-autoassign",
1261
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
J
Ján Tomko 已提交
1262
    DO_TEST("channel-virtio-autoadd",
1263
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1264
    DO_TEST("console-virtio",
1265
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1266
    DO_TEST("console-virtio-many",
1267
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1268
    DO_TEST("console-virtio-s390",
1269
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1270
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390);
1271
    DO_TEST("console-virtio-ccw",
1272
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1273
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_CCW,
1274
            QEMU_CAPS_VIRTIO_S390);
1275
    DO_TEST("console-sclp",
1276
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1277
            QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_SCLP_S390);
1278
    DO_TEST("channel-spicevmc",
1279
            QEMU_CAPS_NODEFCONFIG,
1280 1281
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1282
    DO_TEST("channel-spicevmc-old",
1283
            QEMU_CAPS_NODEFCONFIG,
1284 1285
            QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_SPICEVMC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1286
    DO_TEST("channel-virtio-default",
1287
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1288
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC);
1289
    DO_TEST("channel-virtio-unix",
1290
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1291

1292
    DO_TEST("smartcard-host",
1293
            QEMU_CAPS_CHARDEV,
1294
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);
1295
    DO_TEST("smartcard-host-certificates",
1296
            QEMU_CAPS_CHARDEV,
1297
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);
1298
    DO_TEST("smartcard-passthrough-tcp",
1299
            QEMU_CAPS_CHARDEV,
1300
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_PASSTHRU);
1301
    DO_TEST("smartcard-passthrough-spicevmc",
1302
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1303
            QEMU_CAPS_CCID_PASSTHRU, QEMU_CAPS_CHARDEV_SPICEVMC);
1304
    DO_TEST("smartcard-controller",
1305
            QEMU_CAPS_CHARDEV,
1306 1307
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);

1308
    DO_TEST("usb-controller",
1309
            QEMU_CAPS_CHARDEV,
1310
            QEMU_CAPS_NODEFCONFIG);
1311
    DO_TEST("usb-piix3-controller",
1312
            QEMU_CAPS_CHARDEV, QEMU_CAPS_PIIX3_USB_UHCI,
1313
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_NODEFCONFIG);
1314
    DO_TEST("usb-ich9-ehci-addr",
1315
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1316
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1);
1317
    DO_TEST("input-usbmouse-addr",
1318
            QEMU_CAPS_NODEFCONFIG);
1319
    DO_TEST("usb-ich9-companion",
1320
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1321
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1);
1322
    DO_TEST_PARSE_ERROR("usb-ich9-no-companion",
1323
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1324
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1);
1325 1326 1327 1328
    DO_TEST("usb-ich9-autoassign",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_HUB);
1329
    DO_TEST("usb-hub",
1330
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
M
Marc-André Lureau 已提交
1331
            QEMU_CAPS_NODEFCONFIG);
1332 1333 1334
    DO_TEST("usb-hub-autoadd",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
J
Ján Tomko 已提交
1335 1336 1337
    DO_TEST_PARSE_ERROR("usb-hub-conflict",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
1338 1339 1340
    DO_TEST_PARSE_ERROR("usb-hub-nonexistent",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
J
Ján Tomko 已提交
1341 1342 1343
    DO_TEST("usb-port-missing",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
1344
    DO_TEST("usb-ports",
1345
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
1346
            QEMU_CAPS_NODEFCONFIG);
1347 1348 1349
    DO_TEST_PARSE_ERROR("usb-ports-out-of-range",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
1350 1351 1352
    DO_TEST("usb-port-autoassign",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
1353
    DO_TEST("usb-redir",
1354
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1355
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB,
1356 1357
            QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC);
1358
    DO_TEST("usb-redir-boot",
1359
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1360 1361 1362 1363
            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);
1364
    DO_TEST("usb-redir-filter",
1365
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1366 1367 1368 1369
            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);
1370
    DO_TEST("usb-redir-filter-version",
1371
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1372 1373 1374
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC,
            QEMU_CAPS_USB_REDIR_FILTER);
1375
    DO_TEST("usb1-usb2",
1376
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1377 1378
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_USB_HUB, QEMU_CAPS_ICH9_USB_EHCI1);
1379
    DO_TEST("usb-none",
1380
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1381
    DO_TEST_PARSE_ERROR("usb-none-other",
1382
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1383
    DO_TEST_PARSE_ERROR("usb-none-hub",
1384
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1385 1386
            QEMU_CAPS_USB_HUB);
    DO_TEST_PARSE_ERROR("usb-none-usbtablet",
1387
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1388
    DO_TEST("usb-controller-default-q35",
1389
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1390
            QEMU_CAPS_DEVICE_IOH3420,
1391 1392 1393
            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",
1394
                    QEMU_CAPS_DEVICE_PCI_BRIDGE,
1395
                    QEMU_CAPS_DEVICE_IOH3420,
1396 1397 1398
                    QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_PCI_OHCI,
                    QEMU_CAPS_NEC_USB_XHCI);
    DO_TEST("usb-controller-explicit-q35",
1399
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1400
            QEMU_CAPS_DEVICE_IOH3420,
1401 1402 1403
            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",
1404
                    QEMU_CAPS_DEVICE_PCI_BRIDGE,
1405
                    QEMU_CAPS_DEVICE_IOH3420,
1406 1407
                    QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_PCI_OHCI,
                    QEMU_CAPS_PIIX3_USB_UHCI);
1408 1409 1410
    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);
1411 1412 1413 1414
    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);
1415

1416
    DO_TEST("smbios", QEMU_CAPS_SMBIOS_TYPE);
1417
    DO_TEST_PARSE_ERROR("smbios-date", QEMU_CAPS_SMBIOS_TYPE);
1418
    DO_TEST_PARSE_ERROR("smbios-uuid-match", QEMU_CAPS_SMBIOS_TYPE);
1419

1420
    DO_TEST("watchdog", NONE);
1421
    DO_TEST("watchdog-device", QEMU_CAPS_NODEFCONFIG);
1422
    DO_TEST("watchdog-dump", NONE);
1423
    DO_TEST("watchdog-injectnmi", NONE);
1424
    DO_TEST("watchdog-diag288",
1425
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1426
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390);
1427 1428
    DO_TEST("balloon-device", QEMU_CAPS_NODEFCONFIG);
    DO_TEST("balloon-device-deflate", QEMU_CAPS_NODEFCONFIG,
1429
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1430
    DO_TEST("balloon-ccw-deflate", QEMU_CAPS_NODEFCONFIG,
1431
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1432
    DO_TEST("balloon-mmio-deflate", QEMU_CAPS_NODEFCONFIG,
1433 1434
            QEMU_CAPS_DTB, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1435
    DO_TEST("balloon-device-deflate-off", QEMU_CAPS_NODEFCONFIG,
1436
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1437
    DO_TEST("balloon-device-auto",
1438 1439
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("balloon-device-period", QEMU_CAPS_NODEFCONFIG);
1440 1441
    DO_TEST("sound", NONE);
    DO_TEST("sound-device",
1442
            QEMU_CAPS_NODEFCONFIG,
1443
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_HDA_MICRO,
1444 1445
            QEMU_CAPS_DEVICE_ICH9_INTEL_HDA,
            QEMU_CAPS_OBJECT_USB_AUDIO);
1446
    DO_TEST("fs9p",
1447
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_FSDEV,
1448
            QEMU_CAPS_FSDEV_WRITEOUT);
1449
    DO_TEST("fs9p-ccw",
1450
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_FSDEV,
1451
            QEMU_CAPS_FSDEV_WRITEOUT,
1452
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1453

1454 1455
    DO_TEST("hostdev-usb-address", NONE);
    DO_TEST("hostdev-usb-address-device",
1456 1457
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("hostdev-usb-address-device-boot",
1458 1459
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_USB_HOST_BOOTINDEX);
J
Ján Tomko 已提交
1460
    DO_TEST("hostdev-pci-address", NONE);
1461
    DO_TEST("hostdev-pci-address-device",
J
Ján Tomko 已提交
1462
            QEMU_CAPS_NODEFCONFIG);
1463
    DO_TEST("hostdev-vfio",
J
Ján Tomko 已提交
1464
            QEMU_CAPS_NODEFCONFIG,
1465
            QEMU_CAPS_DEVICE_VFIO_PCI);
1466
    DO_TEST("hostdev-vfio-multidomain",
J
Ján Tomko 已提交
1467
            QEMU_CAPS_NODEFCONFIG,
1468 1469 1470
            QEMU_CAPS_DEVICE_VFIO_PCI, QEMU_CAPS_HOST_PCI_MULTIDOMAIN);
    DO_TEST_FAILURE("hostdev-vfio-multidomain",
                    QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VFIO_PCI);
1471
    DO_TEST("pci-rom",
J
Ján Tomko 已提交
1472
            QEMU_CAPS_NODEFCONFIG);
1473

1474 1475 1476 1477
    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);
1478

1479
    DO_TEST_LINUX_FULL("migrate-numa-unaligned", "stdio", 7, 0, 0, GIC_NONE,
1480
                       QEMU_CAPS_NUMA,
1481 1482
                       QEMU_CAPS_OBJECT_MEMORY_RAM);

1483
    DO_TEST("qemu-ns", NONE);
1484
    DO_TEST("qemu-ns-no-env", NONE);
1485

1486
    DO_TEST("smp", NONE);
1487

J
John Ferlan 已提交
1488
    DO_TEST("iothreads", QEMU_CAPS_OBJECT_IOTHREAD);
1489 1490
    DO_TEST("iothreads-ids", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-ids-partial", QEMU_CAPS_OBJECT_IOTHREAD);
1491
    DO_TEST_FAILURE("iothreads-nocap", NONE);
1492 1493
    DO_TEST("iothreads-disk", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-disk-virtio-ccw", QEMU_CAPS_OBJECT_IOTHREAD,
1494
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1495 1496 1497 1498 1499 1500
    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 已提交
1501

1502 1503
    DO_TEST("cpu-topology1", NONE);
    DO_TEST("cpu-topology2", NONE);
1504
    DO_TEST("cpu-topology3", NONE);
1505 1506 1507 1508 1509 1510 1511 1512
    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);
1513
    DO_TEST("cpu-numa1", NONE);
1514 1515
    DO_TEST("cpu-numa2", NONE);
    DO_TEST("cpu-numa-no-memory-element", NONE);
1516
    DO_TEST_PARSE_ERROR("cpu-numa3", NONE);
1517 1518
    DO_TEST_FAILURE("cpu-numa-disjoint", NONE);
    DO_TEST("cpu-numa-disjoint", QEMU_CAPS_NUMA);
1519 1520
    DO_TEST_FAILURE("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_RAM);
    DO_TEST_FAILURE("cpu-numa-memshared", NONE);
1521
    DO_TEST("cpu-host-model", NONE);
1522
    DO_TEST("cpu-host-model-vendor", NONE);
1523
    skipLegacyCPUs = true;
1524
    DO_TEST("cpu-host-model-fallback", NONE);
1525
    DO_TEST_FAILURE("cpu-host-model-nofallback", NONE);
1526
    skipLegacyCPUs = false;
A
Andrea Bolognani 已提交
1527
    DO_TEST("cpu-host-passthrough", QEMU_CAPS_KVM);
1528
    DO_TEST_FAILURE("cpu-host-passthrough", NONE);
A
Andrea Bolognani 已提交
1529
    DO_TEST_FAILURE("cpu-qemu-host-passthrough", QEMU_CAPS_KVM);
1530

1531 1532
    qemuTestSetHostArch(driver.caps, VIR_ARCH_S390X);
    DO_TEST("cpu-s390-zEC12", QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1533 1534
    DO_TEST("cpu-s390-features", QEMU_CAPS_KVM, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION);
    DO_TEST_FAILURE("cpu-s390-features", QEMU_CAPS_KVM);
1535 1536
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);

1537
    qemuTestSetHostCPU(driver.caps, cpuHaswell);
1538 1539 1540 1541
    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);
1542
    DO_TEST("cpu-host-model-cmt", NONE);
1543
    qemuTestSetHostCPU(driver.caps, NULL);
1544

1545
    DO_TEST("encrypted-disk", NONE);
J
John Ferlan 已提交
1546
    DO_TEST("encrypted-disk-usage", NONE);
1547
# ifdef HAVE_GNUTLS_CIPHER_ENCRYPT
1548
    DO_TEST("luks-disks", QEMU_CAPS_OBJECT_SECRET);
1549 1550 1551
# else
    DO_TEST_FAILURE("luks-disks", QEMU_CAPS_OBJECT_SECRET);
# endif
1552

1553 1554 1555 1556 1557 1558 1559 1560
    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);
1561
    DO_TEST("cputune-numatune",
1562
            QEMU_CAPS_KVM,
1563
            QEMU_CAPS_OBJECT_IOTHREAD,
1564 1565
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1566

1567
    DO_TEST("numatune-memory", NONE);
1568
    DO_TEST_PARSE_ERROR("numatune-memory-invalid-nodeset", NONE);
1569 1570
    DO_TEST_LINUX("numatune-memnode", QEMU_CAPS_NUMA,
                  QEMU_CAPS_OBJECT_MEMORY_RAM);
1571 1572
    DO_TEST_FAILURE("numatune-memnode", NONE);

1573 1574
    DO_TEST_LINUX("numatune-memnode-no-memory", QEMU_CAPS_NUMA,
                  QEMU_CAPS_OBJECT_MEMORY_RAM);
1575 1576
    DO_TEST_FAILURE("numatune-memnode-no-memory", NONE);

1577
    DO_TEST("numatune-auto-nodeset-invalid", NONE);
1578 1579
    DO_TEST("numatune-auto-prefer", QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1580 1581
    DO_TEST_FAILURE("numatune-static-nodeset-exceed-hostnode",
                    QEMU_CAPS_OBJECT_MEMORY_RAM);
1582 1583
    DO_TEST_PARSE_ERROR("numatune-memnode-nocpu", NONE);
    DO_TEST_PARSE_ERROR("numatune-memnodes-problematic", NONE);
1584 1585
    DO_TEST("numad", NONE);
    DO_TEST("numad-auto-vcpu-static-numatune", NONE);
1586
    DO_TEST_PARSE_ERROR("numad-auto-vcpu-static-numatune-no-nodeset", NONE);
1587 1588 1589
    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);
1590
    DO_TEST("blkdeviotune",
1591
            QEMU_CAPS_DRIVE_IOTUNE);
1592
    DO_TEST("blkdeviotune-max",
1593
            QEMU_CAPS_DRIVE_IOTUNE,
1594
            QEMU_CAPS_DRIVE_IOTUNE_MAX);
1595 1596 1597 1598
    DO_TEST("blkdeviotune-group-num",
            QEMU_CAPS_DRIVE_IOTUNE,
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_GROUP);
1599 1600 1601 1602
    DO_TEST("blkdeviotune-max-length",
            QEMU_CAPS_DRIVE_IOTUNE,
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_MAX_LENGTH);
1603

1604
    DO_TEST("multifunction-pci-device",
1605
            QEMU_CAPS_NODEFCONFIG,
1606
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_SCSI_LSI);
1607

1608
    DO_TEST("monitor-json",
1609
            QEMU_CAPS_CHARDEV, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_NODEFCONFIG);
1610
    DO_TEST("no-shutdown",
1611 1612
            QEMU_CAPS_CHARDEV, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_NO_SHUTDOWN);
1613

1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625
    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);
1626

1627
    DO_TEST("pseries-basic",
1628
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1629
    DO_TEST("pseries-vio",
1630
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1631
    DO_TEST("pseries-usb-default",
1632
            QEMU_CAPS_CHARDEV,
1633 1634
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_PCI_OHCI, QEMU_CAPS_PCI_MULTIFUNCTION);
1635
    DO_TEST("pseries-usb-multi",
1636
            QEMU_CAPS_CHARDEV,
1637 1638
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_PCI_OHCI, QEMU_CAPS_PCI_MULTIFUNCTION);
1639
    DO_TEST("pseries-vio-user-assigned",
1640
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1641
    DO_TEST_PARSE_ERROR("pseries-vio-address-clash",
1642
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1643
    DO_TEST("pseries-nvram", QEMU_CAPS_DEVICE_NVRAM);
1644 1645
    DO_TEST("pseries-usb-kbd", QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_DEVICE_USB_KBD, QEMU_CAPS_CHARDEV,
1646 1647
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("pseries-cpu-exact", QEMU_CAPS_CHARDEV,
1648
            QEMU_CAPS_NODEFCONFIG);
1649 1650

    qemuTestSetHostArch(driver.caps, VIR_ARCH_PPC64);
A
Andrea Bolognani 已提交
1651
    DO_TEST("pseries-cpu-compat", QEMU_CAPS_KVM,
1652
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
A
Andrea Bolognani 已提交
1653
    DO_TEST("pseries-cpu-le", QEMU_CAPS_KVM,
1654
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1655 1656
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);

1657
    DO_TEST("pseries-panic-missing",
1658
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1659
    DO_TEST("pseries-panic-no-address",
1660
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1661
    DO_TEST_FAILURE("pseries-panic-address",
1662
                    QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1663
    DO_TEST("disk-ide-drive-split",
1664
            QEMU_CAPS_NODEFCONFIG,
1665
            QEMU_CAPS_IDE_CD);
1666
    DO_TEST("disk-ide-wwn",
1667
            QEMU_CAPS_IDE_CD,
1668
            QEMU_CAPS_DRIVE_SERIAL, QEMU_CAPS_IDE_DRIVE_WWN);
1669

1670
    DO_TEST("disk-geometry", NONE);
V
Viktor Mihajlovski 已提交
1671
    DO_TEST("disk-blockio",
1672
            QEMU_CAPS_NODEFCONFIG,
V
Viktor Mihajlovski 已提交
1673
            QEMU_CAPS_IDE_CD, QEMU_CAPS_BLOCKIO);
1674

1675 1676
    DO_TEST("video-device-pciaddr-default",
            QEMU_CAPS_KVM, QEMU_CAPS_VNC,
1677
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1678
            QEMU_CAPS_DEVICE_QXL,
1679
            QEMU_CAPS_DEVICE_PCI_BRIDGE);
1680
    DO_TEST("video-vga-nodevice", QEMU_CAPS_DEVICE_VGA);
1681
    DO_TEST("video-vga-device", QEMU_CAPS_DEVICE_VGA,
1682
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1683
    DO_TEST("video-vga-device-vgamem", QEMU_CAPS_DEVICE_VGA,
1684
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_VGA_VGAMEM);
1685
    DO_TEST("video-qxl-nodevice", QEMU_CAPS_DEVICE_QXL);
1686
    DO_TEST("video-qxl-device",
1687
            QEMU_CAPS_DEVICE_QXL,
1688
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1689
    DO_TEST("video-qxl-device-vgamem",
1690
            QEMU_CAPS_DEVICE_QXL,
1691
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1692 1693
            QEMU_CAPS_QXL_VGAMEM);
    DO_TEST("video-qxl-sec-device",
1694
            QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1695
    DO_TEST("video-qxl-sec-device-vgamem",
1696 1697
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1698
            QEMU_CAPS_QXL_VGAMEM);
1699 1700 1701
    DO_TEST("video-qxl-heads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
1702
            QEMU_CAPS_QXL_MAX_OUTPUTS);
1703 1704 1705
    DO_TEST("video-qxl-noheads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
1706
            QEMU_CAPS_QXL_MAX_OUTPUTS);
M
Marc-André Lureau 已提交
1707
    DO_TEST("video-virtio-gpu-device",
1708
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
M
Marc-André Lureau 已提交
1709
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1710
    DO_TEST("video-virtio-gpu-virgl",
1711
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
1712
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
1713
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1714 1715
    DO_TEST("video-virtio-gpu-spice-gl",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
1716
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
1717 1718 1719
            QEMU_CAPS_SPICE,
            QEMU_CAPS_SPICE_GL,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1720 1721 1722
    DO_TEST("video-virtio-gpu-secondary",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1723 1724 1725 1726
    DO_TEST("video-virtio-vga",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIRTIO_VGA,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1727
    DO_TEST_PARSE_ERROR("video-invalid", NONE);
1728

1729
    DO_TEST("virtio-rng-default", QEMU_CAPS_DEVICE_VIRTIO_RNG,
1730
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1731
    DO_TEST("virtio-rng-random", QEMU_CAPS_DEVICE_VIRTIO_RNG,
1732
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1733
    DO_TEST("virtio-rng-egd", QEMU_CAPS_DEVICE_VIRTIO_RNG,
1734
            QEMU_CAPS_OBJECT_RNG_EGD);
1735
    DO_TEST("virtio-rng-multiple", QEMU_CAPS_DEVICE_VIRTIO_RNG,
1736
            QEMU_CAPS_OBJECT_RNG_EGD, QEMU_CAPS_OBJECT_RNG_RANDOM);
1737
    DO_TEST_PARSE_ERROR("virtio-rng-egd-crash",
1738
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_EGD);
1739
    DO_TEST("virtio-rng-ccw",
1740
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1741
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_CCW,
1742 1743
            QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1744

1745
    DO_TEST("s390-allow-bogus-usb-none",
1746
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1747
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390,
1748
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
1749
    DO_TEST("s390-allow-bogus-usb-controller",
1750
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1751
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390,
1752 1753
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);

1754 1755 1756 1757 1758 1759 1760 1761 1762 1763
    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 已提交
1764
    DO_TEST("ppc-dtb", QEMU_CAPS_KVM, QEMU_CAPS_DTB);
1765
    DO_TEST("ppce500-serial", QEMU_CAPS_KVM, QEMU_CAPS_CHARDEV);
O
Olivia Yin 已提交
1766

1767
    DO_TEST("tpm-passthrough",
1768
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
1769
    DO_TEST_PARSE_ERROR("tpm-no-backend-invalid",
1770
                        QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
1771

1772

1773 1774 1775 1776
    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);
1777

1778 1779 1780 1781 1782
    DO_TEST("pci-autoadd-addr", QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("pci-autoadd-idx", QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("pci-autofill-addr", QEMU_CAPS_DEVICE_CIRRUS_VGA);
1783
    DO_TEST("pci-many",
1784 1785
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1786
    DO_TEST("pci-bridge-many-disks",
1787
            QEMU_CAPS_DEVICE_PCI_BRIDGE);
L
Laine Stump 已提交
1788
    DO_TEST("pcie-root",
1789
            QEMU_CAPS_ICH9_AHCI,
1790
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1791 1792
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420);
1793
    DO_TEST("q35",
1794
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1795
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
1796
            QEMU_CAPS_DEVICE_IOH3420,
1797
            QEMU_CAPS_ICH9_AHCI,
1798
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
1799
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1800
            QEMU_CAPS_DEVICE_QXL);
1801 1802 1803 1804 1805 1806 1807 1808
    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);
1809
    DO_TEST("q35-pm-disable",
1810
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1811
            QEMU_CAPS_DEVICE_IOH3420,
1812 1813 1814 1815
            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",
1816
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1817
            QEMU_CAPS_DEVICE_IOH3420,
1818 1819
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4);
1820
    DO_TEST("q35-usb2",
1821
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1822
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
1823
            QEMU_CAPS_DEVICE_IOH3420,
1824 1825 1826
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1827
            QEMU_CAPS_DEVICE_QXL);
1828
    DO_TEST("q35-usb2-multi",
1829
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1830
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
1831
            QEMU_CAPS_DEVICE_IOH3420,
1832 1833 1834
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1835
            QEMU_CAPS_DEVICE_QXL);
1836
    DO_TEST("q35-usb2-reorder",
1837
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1838
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
1839
            QEMU_CAPS_DEVICE_IOH3420,
1840 1841 1842
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1843
            QEMU_CAPS_DEVICE_QXL);
1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865
    /* verify that devices with pcie capability are assigned to a pcie slot */
    DO_TEST("q35-pcie",
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_NETDEV,
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_FSDEV,
            QEMU_CAPS_FSDEV_WRITEOUT,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
1866
            QEMU_CAPS_NEC_USB_XHCI,
1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
    /* same XML as q35-pcie, but don't set
     * QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY, so virtio devices should
     * be assigned to legacy pci slots
     */
    DO_TEST("q35-virtio-pci",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_NETDEV,
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_FSDEV,
            QEMU_CAPS_FSDEV_WRITEOUT,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
    /* same as q35-pcie, but all PCI controllers are added automatically */
    DO_TEST("q35-pcie-autoadd",
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_NETDEV,
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_FSDEV,
            QEMU_CAPS_FSDEV_WRITEOUT,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
    DO_TEST("q35-default-devices-only",
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_NETDEV,
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_FSDEV,
            QEMU_CAPS_FSDEV_WRITEOUT,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
1939
            QEMU_CAPS_NEC_USB_XHCI,
1940
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974
    DO_TEST("q35-virt-manager-basic",
            QEMU_CAPS_KVM,
            QEMU_CAPS_RTC,
            QEMU_CAPS_NO_KVM_PIT,
            QEMU_CAPS_ICH9_DISABLE_S3,
            QEMU_CAPS_ICH9_DISABLE_S4,
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_NETDEV,
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_FSDEV,
            QEMU_CAPS_FSDEV_WRITEOUT,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_DEVICE_ICH9_INTEL_HDA,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_SPICE,
            QEMU_CAPS_CHARDEV_SPICEVMC,
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_HDA_DUPLEX,
            QEMU_CAPS_USB_REDIR);
1975
    DO_TEST("pcie-root-port",
1976
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1977 1978
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
1979
            QEMU_CAPS_ICH9_AHCI,
1980
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1981
            QEMU_CAPS_DEVICE_QXL);
1982 1983 1984 1985 1986 1987 1988 1989 1990
    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);
1991 1992 1993 1994 1995 1996 1997
    /* Make sure the user can always override libvirt's default device
     * placement policy by providing an explicit PCI address */
    DO_TEST("q35-pci-force-address",
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_HDA_DUPLEX);
1998

1999 2000 2001
    DO_TEST_PARSE_ERROR("q35-wrong-root",
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2002
            QEMU_CAPS_DEVICE_IOH3420,
2003 2004 2005
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2006
            QEMU_CAPS_DEVICE_QXL);
2007 2008
    DO_TEST_PARSE_ERROR("440fx-wrong-root", NONE);

2009
    DO_TEST_PARSE_ERROR("pcie-root-port-too-many",
2010
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2011 2012
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
2013
            QEMU_CAPS_ICH9_AHCI,
2014
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2015
            QEMU_CAPS_DEVICE_QXL);
2016

2017
    DO_TEST("pcie-switch-upstream-port",
2018
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2019 2020 2021
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
2022
            QEMU_CAPS_ICH9_AHCI,
2023
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2024
            QEMU_CAPS_DEVICE_QXL);
2025
    DO_TEST("pcie-switch-downstream-port",
2026
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2027 2028 2029 2030
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
2031
            QEMU_CAPS_ICH9_AHCI,
2032
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2033
            QEMU_CAPS_DEVICE_QXL);
2034

2035 2036 2037 2038 2039 2040 2041 2042 2043
    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);
2044 2045 2046
    DO_TEST_PARSE_ERROR("pci-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_PCI_BRIDGE,
                        QEMU_CAPS_DEVICE_PXB);
2047

2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061
    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);
2062 2063 2064 2065 2066
    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);
2067

2068
    DO_TEST("hostdev-scsi-lsi",
2069 2070
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2071
    DO_TEST("hostdev-scsi-virtio-scsi",
2072 2073
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2074
    DO_TEST("hostdev-scsi-readonly",
J
Ján Tomko 已提交
2075
            QEMU_CAPS_VIRTIO_SCSI,
O
Osier Yang 已提交
2076
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_SCSI_GENERIC);
2077
    DO_TEST("hostdev-scsi-virtio-scsi",
2078 2079 2080
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC,
            QEMU_CAPS_DEVICE_SCSI_GENERIC_BOOTINDEX);
2081
    DO_TEST("hostdev-scsi-lsi-iscsi",
J
John Ferlan 已提交
2082 2083
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2084
    DO_TEST("hostdev-scsi-lsi-iscsi-auth",
J
John Ferlan 已提交
2085 2086
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2087
    DO_TEST("hostdev-scsi-virtio-iscsi",
J
John Ferlan 已提交
2088 2089
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2090
    DO_TEST("hostdev-scsi-virtio-iscsi-auth",
J
John Ferlan 已提交
2091 2092
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2093 2094 2095 2096 2097 2098
    DO_TEST("hostdev-scsi-vhost-scsi-ccw",
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_VHOST_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC, QEMU_CAPS_VIRTIO_CCW);
    DO_TEST("hostdev-scsi-vhost-scsi-pci",
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_VHOST_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2099

2100
    DO_TEST("mlock-on", QEMU_CAPS_REALTIME_MLOCK);
2101
    DO_TEST_FAILURE("mlock-on", NONE);
2102
    DO_TEST("mlock-off", QEMU_CAPS_REALTIME_MLOCK);
2103 2104
    DO_TEST("mlock-unsupported", NONE);

2105
    DO_TEST_PARSE_ERROR("pci-bridge-negative-index-invalid",
2106
                        QEMU_CAPS_DEVICE_PCI_BRIDGE);
J
Ján Tomko 已提交
2107
    DO_TEST_PARSE_ERROR("pci-bridge-duplicate-index",
2108
                        QEMU_CAPS_DEVICE_PCI_BRIDGE);
J
Ján Tomko 已提交
2109
    DO_TEST_PARSE_ERROR("pci-root-nonzero-index",
2110
                        QEMU_CAPS_DEVICE_PCI_BRIDGE);
J
Ján Tomko 已提交
2111
    DO_TEST_PARSE_ERROR("pci-root-address",
2112
                        QEMU_CAPS_DEVICE_PCI_BRIDGE);
2113

2114
    DO_TEST("hotplug-base",
2115
            QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_SCSI);
2116

2117 2118
    DO_TEST("pcihole64", QEMU_CAPS_I440FX_PCI_HOLE64_SIZE);
    DO_TEST_FAILURE("pcihole64-none", NONE);
2119
    DO_TEST("pcihole64-q35",
2120
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2121
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2122
            QEMU_CAPS_DEVICE_IOH3420,
2123
            QEMU_CAPS_ICH9_AHCI,
2124
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2125
            QEMU_CAPS_DEVICE_QXL,
2126 2127
            QEMU_CAPS_Q35_PCI_HOLE64_SIZE);

2128
    DO_TEST("arm-vexpressa9-nodevs",
2129
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB);
2130
    DO_TEST("arm-vexpressa9-basic",
2131
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB);
2132
    DO_TEST("arm-vexpressa9-virtio",
2133
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2134
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2135
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2136
    DO_TEST("arm-virt-virtio",
2137
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2138
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2139
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2140

2141
    DO_TEST("aarch64-virt-virtio",
2142
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2143
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2144
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2145 2146 2147 2148 2149 2150

    /* 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",
2151
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2152
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
2153 2154 2155
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2156 2157
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420);
2158 2159
    DO_TEST("aarch64-virt-2.6-virtio-pci-default",
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2160
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2161 2162
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2163 2164
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420);
2165 2166 2167
    /* Example of using virtio-pci with no explicit PCI controller
       but with manual PCI addresses */
    DO_TEST("aarch64-virtio-pci-manual-addresses",
2168
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2169
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2170 2171
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2172 2173 2174
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_VIRTIO_SCSI);
2175 2176 2177 2178 2179
    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);
2180
    DO_TEST("aarch64-aavmf-virtio-mmio",
2181
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2182
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2183
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2184
    DO_TEST("aarch64-virt-default-nic",
2185
            QEMU_CAPS_NODEFCONFIG,
2186
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
2187
    qemuTestSetHostArch(driver.caps, VIR_ARCH_AARCH64);
2188
    DO_TEST("aarch64-cpu-passthrough",
2189
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2190
            QEMU_CAPS_KVM);
2191 2192 2193
    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 已提交
2194
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2195
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2196 2197 2198 2199
    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 已提交
2200
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2201
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2202 2203 2204 2205
    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 已提交
2206
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
2207 2208 2209 2210
    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 已提交
2211
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2212
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2213 2214 2215 2216 2217 2218 2219
    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 已提交
2220
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
2221 2222 2223 2224 2225 2226 2227
    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 已提交
2228
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2229
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2230 2231 2232
    DO_TEST_GIC("aarch64-gic-v2", GIC_BOTH,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2233
    DO_TEST_FAILURE("aarch64-gic-v3",
A
Andrea Bolognani 已提交
2234
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
2235 2236 2237 2238 2239 2240 2241 2242 2243 2244
    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 已提交
2245
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2246
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2247
    DO_TEST_FAILURE("aarch64-gic-host",
A
Andrea Bolognani 已提交
2248
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260
    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);
2261
    DO_TEST_PARSE_ERROR("aarch64-gic-invalid",
A
Andrea Bolognani 已提交
2262
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2263
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2264
    DO_TEST_FAILURE("aarch64-gic-not-virt",
A
Andrea Bolognani 已提交
2265
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2266
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2267
    DO_TEST_FAILURE("aarch64-gic-not-arm",
A
Andrea Bolognani 已提交
2268
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2269
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2270
    DO_TEST("aarch64-kvm-32-on-64",
2271
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2272
            QEMU_CAPS_KVM, QEMU_CAPS_CPU_AARCH64_OFF);
2273
    DO_TEST_FAILURE("aarch64-kvm-32-on-64",
2274
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2275
            QEMU_CAPS_KVM);
2276
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);
2277

2278
    DO_TEST("kvm-pit-delay", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2279
    DO_TEST("kvm-pit-discard", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2280
    DO_TEST("no-kvm-pit-device", QEMU_CAPS_NO_KVM_PIT);
2281

H
Hu Tao 已提交
2282
    DO_TEST("panic", QEMU_CAPS_DEVICE_PANIC,
2283
            QEMU_CAPS_NODEFCONFIG);
D
Dmitry Andreev 已提交
2284
    DO_TEST("panic-double", QEMU_CAPS_DEVICE_PANIC,
2285
            QEMU_CAPS_NODEFCONFIG);
H
Hu Tao 已提交
2286

2287
    DO_TEST("panic-no-address", QEMU_CAPS_DEVICE_PANIC,
2288
            QEMU_CAPS_NODEFCONFIG);
2289

2290 2291
    DO_TEST("fips-enabled", QEMU_CAPS_ENABLE_FIPS);

J
Ján Tomko 已提交
2292
    DO_TEST("shmem", QEMU_CAPS_DEVICE_IVSHMEM);
2293 2294 2295
    DO_TEST("shmem-plain-doorbell", QEMU_CAPS_DEVICE_IVSHMEM,
            QEMU_CAPS_DEVICE_IVSHMEM_PLAIN,
            QEMU_CAPS_DEVICE_IVSHMEM_DOORBELL);
2296
    DO_TEST_FAILURE("shmem", NONE);
J
Ján Tomko 已提交
2297
    DO_TEST_FAILURE("shmem-invalid-size",
2298
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2299
    DO_TEST_FAILURE("shmem-invalid-address",
2300
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2301
    DO_TEST_FAILURE("shmem-small-size",
2302
                    QEMU_CAPS_DEVICE_IVSHMEM);
2303
    DO_TEST_PARSE_ERROR("shmem-msi-only", NONE);
A
Andrea Bolognani 已提交
2304
    DO_TEST("cpu-host-passthrough-features", QEMU_CAPS_KVM);
2305

2306
    DO_TEST_FAILURE("memory-align-fail", NONE);
2307 2308 2309
    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);
2310
    DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2311
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2312
    DO_TEST("memory-hotplug-dimm-addr", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2313
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2314
    DO_TEST("memory-hotplug-ppc64-nonuma", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2315
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2316

2317 2318
    DO_TEST("machine-aeskeywrap-on-caps",
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP,
2319
            QEMU_CAPS_DEA_KEY_WRAP,
2320
            QEMU_CAPS_VIRTIO_SCSI,
2321 2322
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps", QEMU_CAPS_MACHINE_OPT,
2323
                    QEMU_CAPS_VIRTIO_SCSI,
2324 2325 2326 2327 2328
                    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,
2329
            QEMU_CAPS_VIRTIO_SCSI,
2330 2331
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap", QEMU_CAPS_MACHINE_OPT,
2332
                    QEMU_CAPS_VIRTIO_SCSI,
2333 2334 2335 2336 2337
                    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,
2338
            QEMU_CAPS_VIRTIO_SCSI,
2339 2340
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", QEMU_CAPS_MACHINE_OPT,
2341
                    QEMU_CAPS_VIRTIO_SCSI,
2342 2343 2344 2345
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", NONE);

    DO_TEST("machine-aeskeywrap-off-cap",
2346
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP,
2347
            QEMU_CAPS_VIRTIO_SCSI,
2348 2349
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap", QEMU_CAPS_MACHINE_OPT,
2350
                    QEMU_CAPS_VIRTIO_SCSI,
2351 2352 2353 2354 2355
                    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,
2356
            QEMU_CAPS_VIRTIO_SCSI,
2357
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2358
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", QEMU_CAPS_MACHINE_OPT,
2359
                    QEMU_CAPS_VIRTIO_SCSI,
2360 2361 2362 2363
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", NONE);

    DO_TEST("machine-deakeywrap-on-cap",
2364
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_DEA_KEY_WRAP,
2365
            QEMU_CAPS_VIRTIO_SCSI,
2366 2367
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-on-cap", QEMU_CAPS_MACHINE_OPT,
2368
                    QEMU_CAPS_VIRTIO_SCSI,
2369 2370 2371 2372 2373
                    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,
2374
            QEMU_CAPS_VIRTIO_SCSI,
2375 2376
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", QEMU_CAPS_MACHINE_OPT,
2377
                    QEMU_CAPS_VIRTIO_SCSI,
2378 2379 2380 2381
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", NONE);

    DO_TEST("machine-deakeywrap-off-cap",
2382
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_DEA_KEY_WRAP,
2383
            QEMU_CAPS_VIRTIO_SCSI,
2384 2385
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-cap", QEMU_CAPS_MACHINE_OPT,
2386
                    QEMU_CAPS_VIRTIO_SCSI,
2387 2388 2389 2390 2391
                    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,
2392
            QEMU_CAPS_VIRTIO_SCSI,
2393 2394
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST("machine-keywrap-none",
2395
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_VIRTIO_SCSI,
2396
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2397

J
Jiri Denemark 已提交
2398 2399 2400 2401 2402 2403 2404
    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);

2405
    DO_TEST("virtio-input", QEMU_CAPS_VIRTIO_KEYBOARD,
2406
            QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET);
2407
    DO_TEST("virtio-input-passthrough", QEMU_CAPS_VIRTIO_INPUT_HOST);
2408

2409
    DO_TEST("ppc64-usb-controller",
2410
            QEMU_CAPS_PCI_OHCI);
2411
    DO_TEST("ppc64-usb-controller-legacy",
2412
            QEMU_CAPS_PIIX3_USB_UHCI);
2413

2414 2415 2416 2417
    DO_TEST_PARSE_FLAGS_ERROR("missing-machine",
                              VIR_DOMAIN_DEF_PARSE_SKIP_OSTYPE_CHECKS,
                              NONE);

2418
    DO_TEST("name-escape", QEMU_CAPS_NAME_DEBUG_THREADS,
2419
            QEMU_CAPS_OBJECT_SECRET, QEMU_CAPS_CHARDEV, QEMU_CAPS_VNC,
2420
            QEMU_CAPS_NAME_GUEST, QEMU_CAPS_DEVICE_CIRRUS_VGA);
M
Marc-André Lureau 已提交
2421 2422
    DO_TEST("debug-threads", QEMU_CAPS_NAME_DEBUG_THREADS);

2423
    DO_TEST("master-key", QEMU_CAPS_OBJECT_SECRET);
J
Ján Tomko 已提交
2424 2425
    DO_TEST("usb-long-port-path", QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_USB_HUB);
2426 2427 2428
    DO_TEST_PARSE_ERROR("usb-too-long-port-path-invalid",
                        QEMU_CAPS_CHARDEV,
                        QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_USB_HUB);
2429

2430
    DO_TEST("acpi-table", NONE);
2431
    DO_TEST("intel-iommu", QEMU_CAPS_DEVICE_PCI_BRIDGE,
2432 2433 2434
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_INTEL_IOMMU);
2435 2436
    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);
2437

2438 2439
    DO_TEST("cpu-hotplug-startup", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);

2440
    qemuTestDriverFree(&driver);
2441

2442
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
2443 2444
}

2445 2446
VIRT_TEST_MAIN_PRELOAD(mymain, abs_builddir "/.libs/qemuxml2argvmock.so",
                       abs_builddir "/.libs/virrandommock.so")
2447

2448 2449
#else

2450 2451 2452 2453
int main(void)
{
    return EXIT_AM_SKIP;
}
2454 2455

#endif /* WITH_QEMU */