qemuxml2argvtest.c 95.3 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
    if (ARCH_IS_X86(arch)) {
305
        if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM, x86Models,
306 307
                                         ARRAY_CARDINALITY(x86Models),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
308
            virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU, x86Models,
309 310
                                         ARRAY_CARDINALITY(x86Models),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
311 312
            return -1;

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

    return 0;
}


static int
347 348
testInitQEMUCaps(struct testInfo *info,
                 int gic)
349 350 351 352 353 354
{
    int ret = -1;

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

355
    virQEMUCapsSet(info->qemuCaps, QEMU_CAPS_NO_ACPI);
356 357 358 359 360 361 362 363 364 365 366

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

    ret = 0;

 cleanup:
    return ret;
}


367 368
static int
testUpdateQEMUCaps(const struct testInfo *info,
369 370
                   virDomainObjPtr vm,
                   virCapsPtr caps)
371 372 373
{
    int ret = -1;

374 375
    virQEMUCapsSetArch(info->qemuCaps, vm->def->os.arch);

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

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

381 382 383 384 385 386 387 388 389 390 391 392
    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;
}


393 394
static int
testCompareXMLToArgv(const void *data)
395
{
396 397 398 399
    const struct testInfo *info = data;
    char *xml = NULL;
    char *args = NULL;
    char *migrateURI = NULL;
400
    char *actualargv = NULL;
401 402
    unsigned int flags = info->flags;
    unsigned int parseFlags = info->parseFlags;
E
Eric Blake 已提交
403
    int ret = -1;
404
    virDomainObjPtr vm = NULL;
405
    virDomainChrSourceDef monitor_chr;
406
    virConnectPtr conn;
J
Jiri Denemark 已提交
407
    char *log = NULL;
E
Eric Blake 已提交
408
    virCommandPtr cmd = NULL;
409
    size_t i;
410
    qemuDomainObjPrivatePtr priv = NULL;
411

412 413
    memset(&monitor_chr, 0, sizeof(monitor_chr));

414
    if (!(conn = virGetConnect()))
415
        goto cleanup;
416

417
    conn->secretDriver = &fakeSecretDriver;
418
    conn->storageDriver = &fakeStorageDriver;
419

420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440
    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;

441
    if (!(vm = virDomainObjNew(driver.xmlopt)))
442
        goto cleanup;
443

444
    parseFlags |= VIR_DOMAIN_DEF_PARSE_INACTIVE;
445
    if (!(vm->def = virDomainDefParseFile(xml, driver.caps, driver.xmlopt,
446
                                          NULL, parseFlags))) {
P
Pavel Hrdina 已提交
447
        if (flags & FLAG_EXPECT_PARSE_ERROR)
448
            goto ok;
449
        goto cleanup;
450
    }
451
    priv = vm->privateData;
452

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

456
    if (!virDomainDefCheckABIStability(vm->def, vm->def)) {
457
        VIR_TEST_DEBUG("ABI stability check failed on %s", xml);
458
        goto cleanup;
459 460
    }

461
    vm->def->id = -1;
462

463
    if (qemuProcessPrepareMonitorChr(&monitor_chr, priv->libDir) < 0)
464
        goto cleanup;
465

466 467 468 469
    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)
470
            goto cleanup;
471
    }
472

473
    if (testUpdateQEMUCaps(info, vm, driver.caps) < 0)
474
        goto cleanup;
475

476
    log = virTestLogContentAndReset();
477
    VIR_FREE(log);
478
    virResetLastError();
J
Jiri Denemark 已提交
479

480 481
    for (i = 0; i < vm->def->nhostdevs; i++) {
        virDomainHostdevDefPtr hostdev = vm->def->hostdevs[i];
482 483 484 485 486 487 488 489

        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 已提交
490 491 492
    if (!(cmd = qemuProcessCreatePretendCmd(conn, &driver, vm, migrateURI,
                                            (flags & FLAG_FIPS), false,
                                            VIR_QEMU_PROCESS_START_COLD))) {
P
Pavel Hrdina 已提交
493 494
        if (flags & FLAG_EXPECT_FAILURE)
            goto ok;
495
        goto cleanup;
J
Jiri Denemark 已提交
496 497
    }

E
Eric Blake 已提交
498
    if (!(actualargv = virCommandToString(cmd)))
499
        goto cleanup;
E
Eric Blake 已提交
500

501
    if (virTestCompareToFile(actualargv, args) < 0)
502
        goto cleanup;
503

P
Pavel Hrdina 已提交
504 505
    ret = 0;

506
 ok:
507
    if (ret == 0 && flags & FLAG_EXPECT_FAILURE) {
P
Pavel Hrdina 已提交
508 509
        ret = -1;
        VIR_TEST_DEBUG("Error expected but there wasn't any.\n");
510
        goto cleanup;
P
Pavel Hrdina 已提交
511
    }
512
    if (!virTestOOMActive()) {
513
        if (flags & FLAG_EXPECT_FAILURE) {
514
            if ((log = virTestLogContentAndReset()))
P
Pavel Hrdina 已提交
515 516
                VIR_TEST_DEBUG("Got expected error: \n%s", log);
        }
517
        virResetLastError();
P
Pavel Hrdina 已提交
518
        ret = 0;
519 520
    }

521
 cleanup:
522 523
    VIR_FREE(log);
    VIR_FREE(actualargv);
524
    virDomainChrSourceDefClear(&monitor_chr);
E
Eric Blake 已提交
525
    virCommandFree(cmd);
526
    virObjectUnref(vm);
527
    virObjectUnref(conn);
528
    VIR_FREE(migrateURI);
529 530
    VIR_FREE(xml);
    VIR_FREE(args);
531
    return ret;
532 533 534
}


535
static int
E
Eric Blake 已提交
536
mymain(void)
537 538
{
    int ret = 0;
539
    bool skipLegacyCPUs = false;
540

541 542
    abs_top_srcdir = getenv("abs_top_srcdir");
    if (!abs_top_srcdir)
543
        abs_top_srcdir = abs_srcdir "/..";
544

545 546 547 548 549 550 551 552 553 554
    /* 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;
    }

555
    if (qemuTestDriverInit(&driver) < 0)
556
        return EXIT_FAILURE;
557 558

    driver.privileged = true;
559

560 561 562
    VIR_FREE(driver.config->defaultTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->defaultTLSx509certdir, "/etc/pki/qemu") < 0)
        return EXIT_FAILURE;
563
    VIR_FREE(driver.config->vncTLSx509certdir);
564
    if (VIR_STRDUP_QUIET(driver.config->vncTLSx509certdir, "/etc/pki/libvirt-vnc") < 0)
565 566
        return EXIT_FAILURE;
    VIR_FREE(driver.config->spiceTLSx509certdir);
567
    if (VIR_STRDUP_QUIET(driver.config->spiceTLSx509certdir, "/etc/pki/libvirt-spice") < 0)
568
        return EXIT_FAILURE;
569 570 571
    VIR_FREE(driver.config->chardevTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->chardevTLSx509certdir, "/etc/pki/libvirt-chardev") < 0)
        return EXIT_FAILURE;
572

573
    VIR_FREE(driver.config->stateDir);
574
    if (VIR_STRDUP_QUIET(driver.config->stateDir, "/nowhere") < 0)
575
        return EXIT_FAILURE;
576
    VIR_FREE(driver.config->hugetlbfs);
577
    if (VIR_ALLOC_N(driver.config->hugetlbfs, 2) < 0)
578
        return EXIT_FAILURE;
579 580 581
    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)
582
        return EXIT_FAILURE;
583 584
    driver.config->hugetlbfs[0].size = 2048;
    driver.config->hugetlbfs[0].deflt = true;
585
    driver.config->hugetlbfs[1].size = 1048576;
586
    driver.config->spiceTLS = 1;
587
    if (VIR_STRDUP_QUIET(driver.config->spicePassword, "123456") < 0)
588
        return EXIT_FAILURE;
589

590 591 592 593
# define DO_TEST_FULL(name, migrateFrom, migrateFd, flags,               \
                      parseFlags, gic, ...)                              \
    do {                                                                 \
        static struct testInfo info = {                                  \
594 595
            name, NULL, migrateFrom, migrateFd, (flags), parseFlags,     \
            false                                                        \
596
        };                                                               \
597 598
        info.skipLegacyCPUs = skipLegacyCPUs;                            \
        if (testInitQEMUCaps(&info, gic) < 0)                            \
599
            return EXIT_FAILURE;                                         \
600
        virQEMUCapsSetList(info.qemuCaps, __VA_ARGS__, QEMU_CAPS_LAST);  \
601
        if (virTestRun("QEMU XML-2-ARGV " name,                          \
602
                       testCompareXMLToArgv, &info) < 0)                 \
603
            ret = -1;                                                    \
604
        virObjectUnref(info.qemuCaps);                                   \
605 606
    } while (0)

607
# define DO_TEST(name, ...)                                              \
608
    DO_TEST_FULL(name, NULL, -1, 0, 0, GIC_NONE, __VA_ARGS__)
609

610
# define DO_TEST_GIC(name, gic, ...)                                     \
611 612
    DO_TEST_FULL(name, NULL, -1, 0, 0, gic, __VA_ARGS__)

613 614
# define DO_TEST_FAILURE(name, ...)                                      \
    DO_TEST_FULL(name, NULL, -1, FLAG_EXPECT_FAILURE,                    \
615
                 0, GIC_NONE, __VA_ARGS__)
616

617 618 619
# define DO_TEST_PARSE_ERROR(name, ...)                                  \
    DO_TEST_FULL(name, NULL, -1,                                         \
                 FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE,          \
620
                 0, GIC_NONE, __VA_ARGS__)
621

622 623 624
# define DO_TEST_PARSE_FLAGS_ERROR(name, parseFlags, ...)                \
    DO_TEST_FULL(name, NULL, -1,                                         \
                 FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE,          \
625
                 parseFlags, GIC_NONE, __VA_ARGS__)
626

627
# define DO_TEST_LINUX(name, ...)                                        \
628
    DO_TEST_LINUX_FULL(name, NULL, -1, 0, 0, GIC_NONE, __VA_ARGS__)
629

630 631 632 633 634 635
# 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. */
636
#  define DO_TEST_LINUX_FULL(name, ...)                                  \
637
    DO_TEST_FULL(name, __VA_ARGS__)
638
# else  /* __linux__ */
639 640 641
#  define DO_TEST_LINUX_FULL(name, ...)                                  \
    do {                                                                 \
        const char *tmp ATTRIBUTE_UNUSED = name;                         \
642 643 644
    } while (0)
# endif /* __linux__ */

645
# define NONE QEMU_CAPS_LAST
646

647 648 649
    /* 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 */
650 651 652 653 654 655 656
    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");
657 658
    unsetenv("QEMU_AUDIO_DRV");
    unsetenv("SDL_AUDIODRIVER");
659

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

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

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

766 767
    DO_TEST("cpu-eoi-disabled", QEMU_CAPS_ENABLE_KVM);
    DO_TEST("cpu-eoi-enabled", QEMU_CAPS_ENABLE_KVM);
J
Ján Tomko 已提交
768
    DO_TEST("controller-order",
769
            QEMU_CAPS_KVM, QEMU_CAPS_ENABLE_KVM,
770 771 772
            QEMU_CAPS_BOOT_MENU, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_DRIVE_AIO,
            QEMU_CAPS_CCID_PASSTHRU, QEMU_CAPS_CHARDEV,
773
            QEMU_CAPS_CHARDEV_SPICEVMC, QEMU_CAPS_SPICE,
774 775
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
776 777
    DO_TEST("eoi-disabled", NONE);
    DO_TEST("eoi-enabled", NONE);
778 779
    DO_TEST("pv-spinlock-disabled", NONE);
    DO_TEST("pv-spinlock-enabled", NONE);
M
Martin Kletzander 已提交
780
    DO_TEST("kvmclock+eoi-disabled", QEMU_CAPS_ENABLE_KVM);
781

782
    DO_TEST("hyperv", NONE);
783
    DO_TEST("hyperv-off", NONE);
784
    DO_TEST("hyperv-panic", NONE);
785

786 787 788
    DO_TEST("kvm-features", NONE);
    DO_TEST("kvm-features-off", NONE);

789 790 791
    DO_TEST("pmu-feature", NONE);
    DO_TEST("pmu-feature-off", NONE);

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

991 992 993 994 995 996 997 998 999 1000
    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);
1001
    driver.config->vncAutoUnixSocket = true;
1002 1003
    DO_TEST("graphics-vnc-auto-socket-cfg", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1004
    driver.config->vncAutoUnixSocket = false;
1005 1006 1007 1008
    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);
1009

1010 1011
    driver.config->vncSASL = 1;
    VIR_FREE(driver.config->vncSASLdir);
1012
    ignore_value(VIR_STRDUP(driver.config->vncSASLdir, "/root/.sasl2"));
1013
    DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1014 1015
    driver.config->vncTLS = 1;
    driver.config->vncTLSx509verify = 1;
1016
    DO_TEST("graphics-vnc-tls", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1017
    driver.config->vncSASL = driver.config->vncTLSx509verify = driver.config->vncTLS = 0;
1018 1019
    VIR_FREE(driver.config->vncSASLdir);
    VIR_FREE(driver.config->vncTLSx509certdir);
1020

1021 1022 1023
    DO_TEST("graphics-sdl", QEMU_CAPS_SDL, QEMU_CAPS_DEVICE_VGA);
    DO_TEST("graphics-sdl-fullscreen", QEMU_CAPS_SDL,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1024
    DO_TEST("nographics", NONE);
P
Paolo Bonzini 已提交
1025 1026
    DO_TEST("nographics-display",
            QEMU_CAPS_DISPLAY);
1027
    DO_TEST("nographics-vga",
1028
            QEMU_CAPS_VGA_NONE);
1029
    DO_TEST("graphics-spice",
1030
            QEMU_CAPS_SPICE,
1031 1032
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
1033
    DO_TEST("graphics-spice-no-args",
1034
            QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1035 1036 1037
    driver.config->spiceSASL = 1;
    ignore_value(VIR_STRDUP(driver.config->spiceSASLdir, "/root/.sasl2"));
    DO_TEST("graphics-spice-sasl",
1038
            QEMU_CAPS_SPICE,
1039 1040 1041
            QEMU_CAPS_DEVICE_QXL);
    VIR_FREE(driver.config->spiceSASLdir);
    driver.config->spiceSASL = 0;
1042
    DO_TEST("graphics-spice-agentmouse",
1043
            QEMU_CAPS_DEVICE_QXL,
1044
            QEMU_CAPS_SPICE,
1045
            QEMU_CAPS_CHARDEV_SPICEVMC,
1046 1047
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1048
    DO_TEST("graphics-spice-compression",
1049
            QEMU_CAPS_SPICE,
1050
            QEMU_CAPS_DEVICE_QXL);
1051
    DO_TEST("graphics-spice-timeout",
1052
            QEMU_CAPS_KVM,
1053
            QEMU_CAPS_SPICE,
1054 1055
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_DEVICE_VGA);
1056
    DO_TEST("graphics-spice-qxl-vga",
1057
            QEMU_CAPS_SPICE,
1058
            QEMU_CAPS_DEVICE_QXL);
1059
    DO_TEST("graphics-spice-usb-redir",
1060
            QEMU_CAPS_SPICE,
1061
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1062 1063
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_USB_REDIR,
1064
            QEMU_CAPS_CHARDEV_SPICEVMC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1065
    DO_TEST("graphics-spice-agent-file-xfer",
1066
            QEMU_CAPS_SPICE,
1067 1068
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
1069 1070
    DO_TEST("graphics-spice-socket",
            QEMU_CAPS_SPICE,
1071 1072
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1073 1074
    DO_TEST("graphics-spice-auto-socket",
            QEMU_CAPS_SPICE,
1075 1076
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1077 1078 1079
    driver.config->spiceAutoUnixSocket = true;
    DO_TEST("graphics-spice-auto-socket-cfg",
            QEMU_CAPS_SPICE,
1080 1081
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1082
    driver.config->spiceAutoUnixSocket = false;
1083

1084 1085 1086
    DO_TEST("input-usbmouse", NONE);
    DO_TEST("input-usbtablet", NONE);
    DO_TEST("misc-acpi", NONE);
1087 1088 1089
    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);
1090
    DO_TEST_FAILURE("misc-enable-s4", NONE);
1091
    DO_TEST("misc-no-reboot", NONE);
1092
    DO_TEST("misc-uuid", NONE);
1093
    DO_TEST_PARSE_ERROR("vhost_queues-invalid", NONE);
1094
    DO_TEST("net-vhostuser", QEMU_CAPS_NETDEV);
1095
    DO_TEST("net-vhostuser-multiq",
1096 1097
            QEMU_CAPS_NETDEV, QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
    DO_TEST_FAILURE("net-vhostuser-multiq", QEMU_CAPS_NETDEV);
1098 1099 1100
    DO_TEST_FAILURE("net-vhostuser-fail",
                    QEMU_CAPS_NETDEV,
                    QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
1101 1102 1103
    DO_TEST("net-user", NONE);
    DO_TEST("net-virtio", NONE);
    DO_TEST("net-virtio-device",
1104
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_VIRTIO_TX_ALG);
1105
    DO_TEST("net-virtio-disable-offloads",
1106
            QEMU_CAPS_NODEFCONFIG);
1107
    DO_TEST("net-virtio-netdev",
1108
            QEMU_CAPS_NETDEV, QEMU_CAPS_NODEFCONFIG);
1109
    DO_TEST("net-virtio-s390",
1110
            QEMU_CAPS_VIRTIO_S390);
1111
    DO_TEST("net-virtio-ccw",
1112
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1113 1114
    DO_TEST("net-virtio-rxqueuesize",
            QEMU_CAPS_VIRTIO_NET_RX_QUEUE_SIZE);
1115
    DO_TEST_PARSE_ERROR("net-virtio-rxqueuesize-invalid-size", NONE);
1116 1117
    DO_TEST("net-eth", NONE);
    DO_TEST("net-eth-ifname", NONE);
1118
    DO_TEST("net-eth-names", NONE);
1119
    DO_TEST("net-eth-hostip", NONE);
1120 1121 1122
    DO_TEST("net-client", NONE);
    DO_TEST("net-server", NONE);
    DO_TEST("net-mcast", NONE);
1123
    DO_TEST("net-udp", NONE);
1124
    DO_TEST("net-hostdev",
J
Ján Tomko 已提交
1125
            QEMU_CAPS_NODEFCONFIG);
1126
    DO_TEST("net-hostdev-multidomain",
J
Ján Tomko 已提交
1127
            QEMU_CAPS_NODEFCONFIG,
1128 1129 1130
            QEMU_CAPS_HOST_PCI_MULTIDOMAIN);
    DO_TEST_FAILURE("net-hostdev-multidomain",
                    QEMU_CAPS_NODEFCONFIG);
1131
    DO_TEST("net-hostdev-vfio",
J
Ján Tomko 已提交
1132
            QEMU_CAPS_NODEFCONFIG,
1133
            QEMU_CAPS_DEVICE_VFIO_PCI);
1134
    DO_TEST("net-hostdev-vfio-multidomain",
J
Ján Tomko 已提交
1135
            QEMU_CAPS_NODEFCONFIG,
1136 1137 1138
            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);
1139 1140 1141 1142
    DO_TEST_FAILURE("net-hostdev-fail",
                    QEMU_CAPS_NODEFCONFIG,
                    QEMU_CAPS_DEVICE_VFIO_PCI);

1143

1144 1145 1146 1147
    DO_TEST("serial-vc", NONE);
    DO_TEST("serial-pty", NONE);
    DO_TEST("serial-dev", NONE);
    DO_TEST("serial-file", NONE);
1148 1149
    DO_TEST("serial-file-log", QEMU_CAPS_CHARDEV, QEMU_CAPS_CHARDEV_FILE_APPEND,
            QEMU_CAPS_CHARDEV_LOGFILE);
1150 1151 1152 1153 1154
    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);
1155
    DO_TEST("serial-spiceport",
1156
            QEMU_CAPS_CHARDEV,
1157
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1158
            QEMU_CAPS_DEVICE_QXL,
1159
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEPORT);
1160
    DO_TEST("serial-spiceport-nospice", NONE);
1161

1162 1163 1164 1165 1166
    DO_TEST("parallel-tcp", NONE);
    DO_TEST("console-compat", NONE);
    DO_TEST("console-compat-auto", NONE);

    DO_TEST("serial-vc-chardev",
1167
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1168
    DO_TEST("serial-pty-chardev",
1169
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1170
    DO_TEST("serial-dev-chardev",
1171
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1172
    DO_TEST("serial-dev-chardev-iobase",
1173
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1174
    DO_TEST("serial-file-chardev",
1175
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1176
            QEMU_CAPS_CHARDEV_FILE_APPEND);
1177
    DO_TEST("serial-unix-chardev",
1178
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1179
    DO_TEST("serial-tcp-chardev",
1180
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1181
    DO_TEST("serial-udp-chardev",
1182
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1183
    DO_TEST("serial-tcp-telnet-chardev",
1184
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1185 1186 1187 1188
    driver.config->chardevTLS = 1;
    DO_TEST("serial-tcp-tlsx509-chardev",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1189 1190 1191 1192 1193
    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;
1194 1195 1196
    DO_TEST("serial-tcp-tlsx509-chardev-notls",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213
    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
1214 1215
    driver.config->chardevTLS = 0;
    VIR_FREE(driver.config->chardevTLSx509certdir);
1216
    DO_TEST("serial-many-chardev",
1217
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1218
    DO_TEST("parallel-tcp-chardev",
1219
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1220
    DO_TEST("parallel-parport-chardev",
1221
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1222
    DO_TEST("console-compat-chardev",
1223
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
M
Michal Privoznik 已提交
1224
    DO_TEST("pci-serial-dev-chardev",
1225
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
M
Michal Privoznik 已提交
1226
            QEMU_CAPS_DEVICE_PCI_SERIAL);
1227

1228
    DO_TEST("channel-guestfwd",
1229
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1230
    DO_TEST("channel-virtio",
1231
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1232
    DO_TEST("channel-virtio-state",
1233
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1234
    DO_TEST("channel-virtio-auto",
1235
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1236
    DO_TEST("channel-virtio-autoassign",
1237
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
J
Ján Tomko 已提交
1238
    DO_TEST("channel-virtio-autoadd",
1239
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1240
    DO_TEST("console-virtio",
1241
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1242
    DO_TEST("console-virtio-many",
1243
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1244
    DO_TEST("console-virtio-s390",
1245
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1246
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390);
1247
    DO_TEST("console-virtio-ccw",
1248
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1249
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_CCW,
1250
            QEMU_CAPS_VIRTIO_S390);
1251
    DO_TEST("console-sclp",
1252
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1253
            QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_SCLP_S390);
1254
    DO_TEST("channel-spicevmc",
1255
            QEMU_CAPS_NODEFCONFIG,
1256 1257
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1258
    DO_TEST("channel-spicevmc-old",
1259
            QEMU_CAPS_NODEFCONFIG,
1260 1261
            QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_SPICEVMC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1262
    DO_TEST("channel-virtio-default",
1263
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1264
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC);
1265
    DO_TEST("channel-virtio-unix",
1266
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1267

1268
    DO_TEST("smartcard-host",
1269
            QEMU_CAPS_CHARDEV,
1270
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);
1271
    DO_TEST("smartcard-host-certificates",
1272
            QEMU_CAPS_CHARDEV,
1273
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);
1274
    DO_TEST("smartcard-passthrough-tcp",
1275
            QEMU_CAPS_CHARDEV,
1276
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_PASSTHRU);
1277
    DO_TEST("smartcard-passthrough-spicevmc",
1278
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1279
            QEMU_CAPS_CCID_PASSTHRU, QEMU_CAPS_CHARDEV_SPICEVMC);
1280
    DO_TEST("smartcard-controller",
1281
            QEMU_CAPS_CHARDEV,
1282 1283
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);

1284
    DO_TEST("usb-controller",
1285
            QEMU_CAPS_CHARDEV,
1286
            QEMU_CAPS_NODEFCONFIG);
1287
    DO_TEST("usb-piix3-controller",
1288
            QEMU_CAPS_CHARDEV, QEMU_CAPS_PIIX3_USB_UHCI,
1289
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_NODEFCONFIG);
1290
    DO_TEST("usb-ich9-ehci-addr",
1291
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1292
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1);
1293
    DO_TEST("input-usbmouse-addr",
1294
            QEMU_CAPS_NODEFCONFIG);
1295
    DO_TEST("usb-ich9-companion",
1296
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1297
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1);
1298
    DO_TEST_PARSE_ERROR("usb-ich9-no-companion",
1299
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1300
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1);
1301 1302 1303 1304
    DO_TEST("usb-ich9-autoassign",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_HUB);
1305
    DO_TEST("usb-hub",
1306
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
M
Marc-André Lureau 已提交
1307
            QEMU_CAPS_NODEFCONFIG);
1308 1309 1310
    DO_TEST("usb-hub-autoadd",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
J
Ján Tomko 已提交
1311 1312 1313
    DO_TEST_PARSE_ERROR("usb-hub-conflict",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
1314 1315 1316
    DO_TEST_PARSE_ERROR("usb-hub-nonexistent",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
J
Ján Tomko 已提交
1317 1318 1319
    DO_TEST("usb-port-missing",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
1320
    DO_TEST("usb-ports",
1321
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
1322
            QEMU_CAPS_NODEFCONFIG);
1323 1324 1325
    DO_TEST_PARSE_ERROR("usb-ports-out-of-range",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
1326 1327 1328
    DO_TEST("usb-port-autoassign",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
1329
    DO_TEST("usb-redir",
1330
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1331
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB,
1332 1333
            QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC);
1334
    DO_TEST("usb-redir-boot",
1335
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1336 1337 1338 1339
            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);
1340
    DO_TEST("usb-redir-filter",
1341
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1342 1343 1344 1345
            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);
1346
    DO_TEST("usb-redir-filter-version",
1347
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1348 1349 1350
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC,
            QEMU_CAPS_USB_REDIR_FILTER);
1351
    DO_TEST("usb1-usb2",
1352
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1353 1354
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_USB_HUB, QEMU_CAPS_ICH9_USB_EHCI1);
1355
    DO_TEST("usb-none",
1356
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1357
    DO_TEST_PARSE_ERROR("usb-none-other",
1358
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1359
    DO_TEST_PARSE_ERROR("usb-none-hub",
1360
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1361 1362
            QEMU_CAPS_USB_HUB);
    DO_TEST_PARSE_ERROR("usb-none-usbtablet",
1363
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1364
    DO_TEST("usb-controller-default-q35",
1365
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1366
            QEMU_CAPS_DEVICE_IOH3420,
1367 1368 1369
            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",
1370
                    QEMU_CAPS_DEVICE_PCI_BRIDGE,
1371
                    QEMU_CAPS_DEVICE_IOH3420,
1372 1373 1374
                    QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_PCI_OHCI,
                    QEMU_CAPS_NEC_USB_XHCI);
    DO_TEST("usb-controller-explicit-q35",
1375
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1376
            QEMU_CAPS_DEVICE_IOH3420,
1377 1378 1379
            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",
1380
                    QEMU_CAPS_DEVICE_PCI_BRIDGE,
1381
                    QEMU_CAPS_DEVICE_IOH3420,
1382 1383
                    QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_PCI_OHCI,
                    QEMU_CAPS_PIIX3_USB_UHCI);
1384 1385 1386
    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);
1387 1388 1389 1390
    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);
1391

1392
    DO_TEST("smbios", QEMU_CAPS_SMBIOS_TYPE);
1393
    DO_TEST_PARSE_ERROR("smbios-date", QEMU_CAPS_SMBIOS_TYPE);
1394
    DO_TEST_PARSE_ERROR("smbios-uuid-match", QEMU_CAPS_SMBIOS_TYPE);
1395

1396
    DO_TEST("watchdog", NONE);
1397
    DO_TEST("watchdog-device", QEMU_CAPS_NODEFCONFIG);
1398
    DO_TEST("watchdog-dump", NONE);
1399
    DO_TEST("watchdog-injectnmi", NONE);
1400
    DO_TEST("watchdog-diag288",
1401
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1402
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390);
1403 1404
    DO_TEST("balloon-device", QEMU_CAPS_NODEFCONFIG);
    DO_TEST("balloon-device-deflate", QEMU_CAPS_NODEFCONFIG,
1405
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1406
    DO_TEST("balloon-ccw-deflate", QEMU_CAPS_NODEFCONFIG,
1407
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1408
    DO_TEST("balloon-mmio-deflate", QEMU_CAPS_NODEFCONFIG,
1409 1410
            QEMU_CAPS_DTB, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1411
    DO_TEST("balloon-device-deflate-off", QEMU_CAPS_NODEFCONFIG,
1412
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1413
    DO_TEST("balloon-device-auto",
1414 1415
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("balloon-device-period", QEMU_CAPS_NODEFCONFIG);
1416 1417
    DO_TEST("sound", NONE);
    DO_TEST("sound-device",
1418
            QEMU_CAPS_NODEFCONFIG,
1419
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_HDA_MICRO,
1420 1421
            QEMU_CAPS_DEVICE_ICH9_INTEL_HDA,
            QEMU_CAPS_OBJECT_USB_AUDIO);
1422
    DO_TEST("fs9p",
1423
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_FSDEV,
1424
            QEMU_CAPS_FSDEV_WRITEOUT);
1425
    DO_TEST("fs9p-ccw",
1426
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_FSDEV,
1427
            QEMU_CAPS_FSDEV_WRITEOUT,
1428
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1429

1430 1431
    DO_TEST("hostdev-usb-address", NONE);
    DO_TEST("hostdev-usb-address-device",
1432 1433
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("hostdev-usb-address-device-boot",
1434 1435
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_USB_HOST_BOOTINDEX);
J
Ján Tomko 已提交
1436
    DO_TEST("hostdev-pci-address", NONE);
1437
    DO_TEST("hostdev-pci-address-device",
J
Ján Tomko 已提交
1438
            QEMU_CAPS_NODEFCONFIG);
1439
    DO_TEST("hostdev-vfio",
J
Ján Tomko 已提交
1440
            QEMU_CAPS_NODEFCONFIG,
1441
            QEMU_CAPS_DEVICE_VFIO_PCI);
1442
    DO_TEST("hostdev-vfio-multidomain",
J
Ján Tomko 已提交
1443
            QEMU_CAPS_NODEFCONFIG,
1444 1445 1446
            QEMU_CAPS_DEVICE_VFIO_PCI, QEMU_CAPS_HOST_PCI_MULTIDOMAIN);
    DO_TEST_FAILURE("hostdev-vfio-multidomain",
                    QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VFIO_PCI);
1447
    DO_TEST("pci-rom",
J
Ján Tomko 已提交
1448
            QEMU_CAPS_NODEFCONFIG);
1449

1450 1451 1452 1453
    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);
1454

1455
    DO_TEST_LINUX_FULL("migrate-numa-unaligned", "stdio", 7, 0, 0, GIC_NONE,
1456
                       QEMU_CAPS_NUMA,
1457 1458
                       QEMU_CAPS_OBJECT_MEMORY_RAM);

1459
    DO_TEST("qemu-ns", NONE);
1460
    DO_TEST("qemu-ns-no-env", NONE);
1461

1462
    DO_TEST("smp", NONE);
1463

J
John Ferlan 已提交
1464
    DO_TEST("iothreads", QEMU_CAPS_OBJECT_IOTHREAD);
1465 1466
    DO_TEST("iothreads-ids", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-ids-partial", QEMU_CAPS_OBJECT_IOTHREAD);
1467
    DO_TEST_FAILURE("iothreads-nocap", NONE);
1468 1469
    DO_TEST("iothreads-disk", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-disk-virtio-ccw", QEMU_CAPS_OBJECT_IOTHREAD,
1470
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1471 1472 1473 1474 1475 1476
    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 已提交
1477

1478 1479
    DO_TEST("cpu-topology1", NONE);
    DO_TEST("cpu-topology2", NONE);
1480
    DO_TEST("cpu-topology3", NONE);
1481 1482 1483 1484 1485 1486 1487 1488
    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);
1489
    DO_TEST("cpu-numa1", NONE);
1490 1491
    DO_TEST("cpu-numa2", NONE);
    DO_TEST("cpu-numa-no-memory-element", NONE);
1492
    DO_TEST_PARSE_ERROR("cpu-numa3", NONE);
1493 1494
    DO_TEST_FAILURE("cpu-numa-disjoint", NONE);
    DO_TEST("cpu-numa-disjoint", QEMU_CAPS_NUMA);
1495 1496
    DO_TEST_FAILURE("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_RAM);
    DO_TEST_FAILURE("cpu-numa-memshared", NONE);
1497
    DO_TEST("cpu-host-model", NONE);
1498
    DO_TEST("cpu-host-model-vendor", NONE);
1499
    skipLegacyCPUs = true;
1500
    DO_TEST("cpu-host-model-fallback", NONE);
1501
    DO_TEST_FAILURE("cpu-host-model-nofallback", NONE);
1502
    skipLegacyCPUs = false;
A
Andrea Bolognani 已提交
1503
    DO_TEST("cpu-host-passthrough", QEMU_CAPS_KVM);
1504
    DO_TEST_FAILURE("cpu-host-passthrough", NONE);
A
Andrea Bolognani 已提交
1505
    DO_TEST_FAILURE("cpu-qemu-host-passthrough", QEMU_CAPS_KVM);
1506

1507
    qemuTestSetHostCPU(driver.caps, cpuHaswell);
1508 1509 1510 1511
    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);
1512
    DO_TEST("cpu-host-model-cmt", NONE);
1513
    qemuTestSetHostCPU(driver.caps, NULL);
1514

1515
    DO_TEST("encrypted-disk", NONE);
J
John Ferlan 已提交
1516
    DO_TEST("encrypted-disk-usage", NONE);
1517
# ifdef HAVE_GNUTLS_CIPHER_ENCRYPT
1518
    DO_TEST("luks-disks", QEMU_CAPS_OBJECT_SECRET);
1519 1520 1521
# else
    DO_TEST_FAILURE("luks-disks", QEMU_CAPS_OBJECT_SECRET);
# endif
1522

1523 1524 1525 1526 1527 1528 1529 1530
    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);
1531
    DO_TEST("cputune-numatune",
1532
            QEMU_CAPS_KVM,
1533
            QEMU_CAPS_OBJECT_IOTHREAD,
1534 1535
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1536

1537
    DO_TEST("numatune-memory", NONE);
1538
    DO_TEST_PARSE_ERROR("numatune-memory-invalid-nodeset", NONE);
1539 1540
    DO_TEST_LINUX("numatune-memnode", QEMU_CAPS_NUMA,
                  QEMU_CAPS_OBJECT_MEMORY_RAM);
1541 1542
    DO_TEST_FAILURE("numatune-memnode", NONE);

1543 1544
    DO_TEST_LINUX("numatune-memnode-no-memory", QEMU_CAPS_NUMA,
                  QEMU_CAPS_OBJECT_MEMORY_RAM);
1545 1546
    DO_TEST_FAILURE("numatune-memnode-no-memory", NONE);

1547
    DO_TEST("numatune-auto-nodeset-invalid", NONE);
1548 1549
    DO_TEST("numatune-auto-prefer", QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1550 1551
    DO_TEST_FAILURE("numatune-static-nodeset-exceed-hostnode",
                    QEMU_CAPS_OBJECT_MEMORY_RAM);
1552 1553
    DO_TEST_PARSE_ERROR("numatune-memnode-nocpu", NONE);
    DO_TEST_PARSE_ERROR("numatune-memnodes-problematic", NONE);
1554 1555
    DO_TEST("numad", NONE);
    DO_TEST("numad-auto-vcpu-static-numatune", NONE);
1556
    DO_TEST_PARSE_ERROR("numad-auto-vcpu-static-numatune-no-nodeset", NONE);
1557 1558 1559
    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);
1560
    DO_TEST("blkdeviotune",
1561
            QEMU_CAPS_DRIVE_IOTUNE);
1562
    DO_TEST("blkdeviotune-max",
1563
            QEMU_CAPS_DRIVE_IOTUNE,
1564
            QEMU_CAPS_DRIVE_IOTUNE_MAX);
1565 1566 1567 1568
    DO_TEST("blkdeviotune-max-length",
            QEMU_CAPS_DRIVE_IOTUNE,
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_MAX_LENGTH);
1569

1570
    DO_TEST("multifunction-pci-device",
1571
            QEMU_CAPS_NODEFCONFIG,
1572
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_SCSI_LSI);
1573

1574
    DO_TEST("monitor-json",
1575
            QEMU_CAPS_CHARDEV, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_NODEFCONFIG);
1576
    DO_TEST("no-shutdown",
1577 1578
            QEMU_CAPS_CHARDEV, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_NO_SHUTDOWN);
1579

1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591
    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);
1592

1593
    DO_TEST("pseries-basic",
1594
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1595
    DO_TEST("pseries-vio",
1596
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1597
    DO_TEST("pseries-usb-default",
1598
            QEMU_CAPS_CHARDEV,
1599 1600
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_PCI_OHCI, QEMU_CAPS_PCI_MULTIFUNCTION);
1601
    DO_TEST("pseries-usb-multi",
1602
            QEMU_CAPS_CHARDEV,
1603 1604
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_PCI_OHCI, QEMU_CAPS_PCI_MULTIFUNCTION);
1605
    DO_TEST("pseries-vio-user-assigned",
1606
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1607
    DO_TEST_PARSE_ERROR("pseries-vio-address-clash",
1608
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1609
    DO_TEST("pseries-nvram", QEMU_CAPS_DEVICE_NVRAM);
1610 1611
    DO_TEST("pseries-usb-kbd", QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_DEVICE_USB_KBD, QEMU_CAPS_CHARDEV,
1612 1613
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("pseries-cpu-exact", QEMU_CAPS_CHARDEV,
1614
            QEMU_CAPS_NODEFCONFIG);
1615 1616

    qemuTestSetHostArch(driver.caps, VIR_ARCH_PPC64);
A
Andrea Bolognani 已提交
1617
    DO_TEST("pseries-cpu-compat", QEMU_CAPS_KVM,
1618
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
A
Andrea Bolognani 已提交
1619
    DO_TEST("pseries-cpu-le", QEMU_CAPS_KVM,
1620
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1621 1622
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);

1623
    DO_TEST("pseries-panic-missing",
1624
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1625
    DO_TEST("pseries-panic-no-address",
1626
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1627
    DO_TEST_FAILURE("pseries-panic-address",
1628
                    QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1629
    DO_TEST("disk-ide-drive-split",
1630
            QEMU_CAPS_NODEFCONFIG,
1631
            QEMU_CAPS_IDE_CD);
1632
    DO_TEST("disk-ide-wwn",
1633
            QEMU_CAPS_IDE_CD,
1634
            QEMU_CAPS_DRIVE_SERIAL, QEMU_CAPS_IDE_DRIVE_WWN);
1635

1636
    DO_TEST("disk-geometry", NONE);
V
Viktor Mihajlovski 已提交
1637
    DO_TEST("disk-blockio",
1638
            QEMU_CAPS_NODEFCONFIG,
V
Viktor Mihajlovski 已提交
1639
            QEMU_CAPS_IDE_CD, QEMU_CAPS_BLOCKIO);
1640

1641 1642
    DO_TEST("video-device-pciaddr-default",
            QEMU_CAPS_KVM, QEMU_CAPS_VNC,
1643
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1644
            QEMU_CAPS_DEVICE_QXL,
1645
            QEMU_CAPS_DEVICE_PCI_BRIDGE);
1646
    DO_TEST("video-vga-nodevice", QEMU_CAPS_DEVICE_VGA);
1647
    DO_TEST("video-vga-device", QEMU_CAPS_DEVICE_VGA,
1648
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1649
    DO_TEST("video-vga-device-vgamem", QEMU_CAPS_DEVICE_VGA,
1650
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_VGA_VGAMEM);
1651
    DO_TEST("video-qxl-nodevice", QEMU_CAPS_DEVICE_QXL);
1652
    DO_TEST("video-qxl-device",
1653
            QEMU_CAPS_DEVICE_QXL,
1654
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1655
    DO_TEST("video-qxl-device-vgamem",
1656
            QEMU_CAPS_DEVICE_QXL,
1657
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1658 1659
            QEMU_CAPS_QXL_VGAMEM);
    DO_TEST("video-qxl-sec-device",
1660
            QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1661
    DO_TEST("video-qxl-sec-device-vgamem",
1662 1663
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1664
            QEMU_CAPS_QXL_VGAMEM);
1665 1666 1667
    DO_TEST("video-qxl-heads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
1668
            QEMU_CAPS_QXL_MAX_OUTPUTS);
1669 1670 1671
    DO_TEST("video-qxl-noheads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
1672
            QEMU_CAPS_QXL_MAX_OUTPUTS);
M
Marc-André Lureau 已提交
1673
    DO_TEST("video-virtio-gpu-device",
1674
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
M
Marc-André Lureau 已提交
1675
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1676
    DO_TEST("video-virtio-gpu-virgl",
1677
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
1678
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
1679
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1680 1681
    DO_TEST("video-virtio-gpu-spice-gl",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
1682
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
1683 1684 1685
            QEMU_CAPS_SPICE,
            QEMU_CAPS_SPICE_GL,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1686 1687 1688
    DO_TEST("video-virtio-gpu-secondary",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1689 1690 1691 1692
    DO_TEST("video-virtio-vga",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIRTIO_VGA,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1693
    DO_TEST_PARSE_ERROR("video-invalid", NONE);
1694

1695
    DO_TEST("virtio-rng-default", QEMU_CAPS_DEVICE_VIRTIO_RNG,
1696
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1697
    DO_TEST("virtio-rng-random", QEMU_CAPS_DEVICE_VIRTIO_RNG,
1698
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1699
    DO_TEST("virtio-rng-egd", QEMU_CAPS_DEVICE_VIRTIO_RNG,
1700
            QEMU_CAPS_OBJECT_RNG_EGD);
1701
    DO_TEST("virtio-rng-multiple", QEMU_CAPS_DEVICE_VIRTIO_RNG,
1702
            QEMU_CAPS_OBJECT_RNG_EGD, QEMU_CAPS_OBJECT_RNG_RANDOM);
1703
    DO_TEST_PARSE_ERROR("virtio-rng-egd-crash",
1704
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_EGD);
1705
    DO_TEST("virtio-rng-ccw",
1706
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1707
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_CCW,
1708 1709
            QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1710

1711
    DO_TEST("s390-allow-bogus-usb-none",
1712
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1713
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390,
1714
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
1715
    DO_TEST("s390-allow-bogus-usb-controller",
1716
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1717
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390,
1718 1719
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);

1720 1721 1722 1723 1724 1725 1726 1727 1728 1729
    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 已提交
1730
    DO_TEST("ppc-dtb", QEMU_CAPS_KVM, QEMU_CAPS_DTB);
1731
    DO_TEST("ppce500-serial", QEMU_CAPS_KVM, QEMU_CAPS_CHARDEV);
O
Olivia Yin 已提交
1732

1733
    DO_TEST("tpm-passthrough",
1734
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
1735
    DO_TEST_PARSE_ERROR("tpm-no-backend-invalid",
1736
                        QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
1737

1738

1739 1740 1741 1742
    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);
1743

1744 1745 1746 1747 1748
    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);
1749
    DO_TEST("pci-many",
1750 1751
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1752
    DO_TEST("pci-bridge-many-disks",
1753
            QEMU_CAPS_DEVICE_PCI_BRIDGE);
L
Laine Stump 已提交
1754
    DO_TEST("pcie-root",
1755
            QEMU_CAPS_ICH9_AHCI,
1756
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1757 1758
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420);
1759
    DO_TEST("q35",
1760
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1761
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
1762
            QEMU_CAPS_DEVICE_IOH3420,
1763
            QEMU_CAPS_ICH9_AHCI,
1764
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
1765
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1766
            QEMU_CAPS_DEVICE_QXL);
1767 1768 1769 1770 1771 1772 1773 1774
    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);
1775
    DO_TEST("q35-pm-disable",
1776
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1777
            QEMU_CAPS_DEVICE_IOH3420,
1778 1779 1780 1781
            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",
1782
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1783
            QEMU_CAPS_DEVICE_IOH3420,
1784 1785
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4);
1786
    DO_TEST("q35-usb2",
1787
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1788
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
1789
            QEMU_CAPS_DEVICE_IOH3420,
1790 1791 1792
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1793
            QEMU_CAPS_DEVICE_QXL);
1794
    DO_TEST("q35-usb2-multi",
1795
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1796
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
1797
            QEMU_CAPS_DEVICE_IOH3420,
1798 1799 1800
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1801
            QEMU_CAPS_DEVICE_QXL);
1802
    DO_TEST("q35-usb2-reorder",
1803
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1804
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
1805
            QEMU_CAPS_DEVICE_IOH3420,
1806 1807 1808
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1809
            QEMU_CAPS_DEVICE_QXL);
1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831
    /* 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,
1832
            QEMU_CAPS_NEC_USB_XHCI,
1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846
            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,
1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870
            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,
1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893
            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,
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,
1905
            QEMU_CAPS_NEC_USB_XHCI,
1906
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940
    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);
1941
    DO_TEST("pcie-root-port",
1942
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1943 1944
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
1945
            QEMU_CAPS_ICH9_AHCI,
1946
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1947
            QEMU_CAPS_DEVICE_QXL);
1948 1949 1950 1951 1952 1953 1954 1955 1956
    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);
1957 1958 1959 1960 1961 1962 1963
    /* 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);
1964

1965 1966 1967
    DO_TEST_PARSE_ERROR("q35-wrong-root",
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
1968
            QEMU_CAPS_DEVICE_IOH3420,
1969 1970 1971
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1972
            QEMU_CAPS_DEVICE_QXL);
1973 1974
    DO_TEST_PARSE_ERROR("440fx-wrong-root", NONE);

1975
    DO_TEST_PARSE_ERROR("pcie-root-port-too-many",
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
    DO_TEST("pcie-switch-upstream-port",
1984
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1985 1986 1987
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
1988
            QEMU_CAPS_ICH9_AHCI,
1989
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1990
            QEMU_CAPS_DEVICE_QXL);
1991
    DO_TEST("pcie-switch-downstream-port",
1992
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1993 1994 1995 1996
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
1997
            QEMU_CAPS_ICH9_AHCI,
1998
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1999
            QEMU_CAPS_DEVICE_QXL);
2000

2001 2002 2003 2004 2005 2006 2007 2008 2009
    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);
2010 2011 2012
    DO_TEST_PARSE_ERROR("pci-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_PCI_BRIDGE,
                        QEMU_CAPS_DEVICE_PXB);
2013

2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027
    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);
2028 2029 2030 2031 2032
    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);
2033

2034
    DO_TEST("hostdev-scsi-lsi",
2035 2036
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2037
    DO_TEST("hostdev-scsi-virtio-scsi",
2038 2039
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2040
    DO_TEST("hostdev-scsi-readonly",
J
Ján Tomko 已提交
2041
            QEMU_CAPS_VIRTIO_SCSI,
O
Osier Yang 已提交
2042
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_SCSI_GENERIC);
2043
    DO_TEST("hostdev-scsi-virtio-scsi",
2044 2045 2046
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC,
            QEMU_CAPS_DEVICE_SCSI_GENERIC_BOOTINDEX);
2047
    DO_TEST("hostdev-scsi-lsi-iscsi",
J
John Ferlan 已提交
2048 2049
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2050
    DO_TEST("hostdev-scsi-lsi-iscsi-auth",
J
John Ferlan 已提交
2051 2052
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2053
    DO_TEST("hostdev-scsi-virtio-iscsi",
J
John Ferlan 已提交
2054 2055
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2056
    DO_TEST("hostdev-scsi-virtio-iscsi-auth",
J
John Ferlan 已提交
2057 2058
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2059 2060 2061 2062 2063 2064
    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);
2065

2066
    DO_TEST("mlock-on", QEMU_CAPS_REALTIME_MLOCK);
2067
    DO_TEST_FAILURE("mlock-on", NONE);
2068
    DO_TEST("mlock-off", QEMU_CAPS_REALTIME_MLOCK);
2069 2070
    DO_TEST("mlock-unsupported", NONE);

2071
    DO_TEST_PARSE_ERROR("pci-bridge-negative-index-invalid",
2072
                        QEMU_CAPS_DEVICE_PCI_BRIDGE);
J
Ján Tomko 已提交
2073
    DO_TEST_PARSE_ERROR("pci-bridge-duplicate-index",
2074
                        QEMU_CAPS_DEVICE_PCI_BRIDGE);
J
Ján Tomko 已提交
2075
    DO_TEST_PARSE_ERROR("pci-root-nonzero-index",
2076
                        QEMU_CAPS_DEVICE_PCI_BRIDGE);
J
Ján Tomko 已提交
2077
    DO_TEST_PARSE_ERROR("pci-root-address",
2078
                        QEMU_CAPS_DEVICE_PCI_BRIDGE);
2079

2080
    DO_TEST("hotplug-base",
2081
            QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_SCSI);
2082

2083 2084
    DO_TEST("pcihole64", QEMU_CAPS_I440FX_PCI_HOLE64_SIZE);
    DO_TEST_FAILURE("pcihole64-none", NONE);
2085
    DO_TEST("pcihole64-q35",
2086
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2087
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2088
            QEMU_CAPS_DEVICE_IOH3420,
2089
            QEMU_CAPS_ICH9_AHCI,
2090
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2091
            QEMU_CAPS_DEVICE_QXL,
2092 2093
            QEMU_CAPS_Q35_PCI_HOLE64_SIZE);

2094
    DO_TEST("arm-vexpressa9-nodevs",
2095
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB);
2096
    DO_TEST("arm-vexpressa9-basic",
2097
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB);
2098
    DO_TEST("arm-vexpressa9-virtio",
2099
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2100
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2101
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2102
    DO_TEST("arm-virt-virtio",
2103
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2104
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2105
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2106

2107
    DO_TEST("aarch64-virt-virtio",
2108
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2109
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2110
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2111 2112 2113 2114 2115 2116

    /* 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",
2117
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2118 2119 2120
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2121 2122
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420);
2123 2124
    DO_TEST("aarch64-virt-2.6-virtio-pci-default",
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2125
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2126 2127
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2128 2129
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420);
2130 2131 2132
    /* Example of using virtio-pci with no explicit PCI controller
       but with manual PCI addresses */
    DO_TEST("aarch64-virtio-pci-manual-addresses",
2133
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2134
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2135 2136
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2137 2138 2139
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_VIRTIO_SCSI);
2140 2141 2142 2143 2144
    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);
2145
    DO_TEST("aarch64-aavmf-virtio-mmio",
2146
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2147
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2148
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2149
    DO_TEST("aarch64-virt-default-nic",
2150
            QEMU_CAPS_NODEFCONFIG,
2151
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
2152
    qemuTestSetHostArch(driver.caps, VIR_ARCH_AARCH64);
2153
    DO_TEST("aarch64-cpu-passthrough",
2154
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2155
            QEMU_CAPS_KVM);
2156 2157 2158
    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 已提交
2159
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2160
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2161 2162 2163 2164
    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 已提交
2165
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2166
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2167 2168 2169 2170
    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 已提交
2171
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
2172 2173 2174 2175
    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 已提交
2176
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2177
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2178 2179 2180 2181 2182 2183 2184
    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 已提交
2185
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
2186 2187 2188 2189 2190 2191 2192
    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 已提交
2193
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2194
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2195 2196 2197
    DO_TEST_GIC("aarch64-gic-v2", GIC_BOTH,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2198
    DO_TEST_FAILURE("aarch64-gic-v3",
A
Andrea Bolognani 已提交
2199
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
2200 2201 2202 2203 2204 2205 2206 2207 2208 2209
    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 已提交
2210
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2211
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2212
    DO_TEST_FAILURE("aarch64-gic-host",
A
Andrea Bolognani 已提交
2213
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225
    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);
2226
    DO_TEST_PARSE_ERROR("aarch64-gic-invalid",
A
Andrea Bolognani 已提交
2227
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2228
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2229
    DO_TEST_FAILURE("aarch64-gic-not-virt",
A
Andrea Bolognani 已提交
2230
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2231
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2232
    DO_TEST_FAILURE("aarch64-gic-not-arm",
A
Andrea Bolognani 已提交
2233
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2234
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2235
    DO_TEST("aarch64-kvm-32-on-64",
2236
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2237
            QEMU_CAPS_KVM, QEMU_CAPS_CPU_AARCH64_OFF);
2238
    DO_TEST_FAILURE("aarch64-kvm-32-on-64",
2239
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2240
            QEMU_CAPS_KVM);
2241
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);
2242

2243 2244 2245 2246 2247
    DO_TEST("kvm-pit-device", QEMU_CAPS_KVM_PIT_TICK_POLICY);
    DO_TEST("kvm-pit-delay", QEMU_CAPS_NO_KVM_PIT);
    DO_TEST("kvm-pit-device", QEMU_CAPS_NO_KVM_PIT,
            QEMU_CAPS_KVM_PIT_TICK_POLICY);

H
Hu Tao 已提交
2248
    DO_TEST("panic", QEMU_CAPS_DEVICE_PANIC,
2249
            QEMU_CAPS_NODEFCONFIG);
D
Dmitry Andreev 已提交
2250
    DO_TEST("panic-double", QEMU_CAPS_DEVICE_PANIC,
2251
            QEMU_CAPS_NODEFCONFIG);
H
Hu Tao 已提交
2252

2253
    DO_TEST("panic-no-address", QEMU_CAPS_DEVICE_PANIC,
2254
            QEMU_CAPS_NODEFCONFIG);
2255

2256 2257
    DO_TEST("fips-enabled", QEMU_CAPS_ENABLE_FIPS);

J
Ján Tomko 已提交
2258
    DO_TEST("shmem", QEMU_CAPS_DEVICE_IVSHMEM);
2259 2260 2261
    DO_TEST("shmem-plain-doorbell", QEMU_CAPS_DEVICE_IVSHMEM,
            QEMU_CAPS_DEVICE_IVSHMEM_PLAIN,
            QEMU_CAPS_DEVICE_IVSHMEM_DOORBELL);
2262
    DO_TEST_FAILURE("shmem", NONE);
J
Ján Tomko 已提交
2263
    DO_TEST_FAILURE("shmem-invalid-size",
2264
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2265
    DO_TEST_FAILURE("shmem-invalid-address",
2266
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2267
    DO_TEST_FAILURE("shmem-small-size",
2268
                    QEMU_CAPS_DEVICE_IVSHMEM);
2269
    DO_TEST_PARSE_ERROR("shmem-msi-only", NONE);
A
Andrea Bolognani 已提交
2270
    DO_TEST("cpu-host-passthrough-features", QEMU_CAPS_KVM);
2271

2272
    DO_TEST_FAILURE("memory-align-fail", NONE);
2273 2274 2275
    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);
2276
    DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2277
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2278
    DO_TEST("memory-hotplug-dimm-addr", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2279
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2280
    DO_TEST("memory-hotplug-ppc64-nonuma", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2281
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2282

2283 2284
    DO_TEST("machine-aeskeywrap-on-caps",
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP,
2285
            QEMU_CAPS_DEA_KEY_WRAP,
2286
            QEMU_CAPS_VIRTIO_SCSI,
2287 2288
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps", QEMU_CAPS_MACHINE_OPT,
2289
                    QEMU_CAPS_VIRTIO_SCSI,
2290 2291 2292 2293 2294
                    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,
2295
            QEMU_CAPS_VIRTIO_SCSI,
2296 2297
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap", QEMU_CAPS_MACHINE_OPT,
2298
                    QEMU_CAPS_VIRTIO_SCSI,
2299 2300 2301 2302 2303
                    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,
2304
            QEMU_CAPS_VIRTIO_SCSI,
2305 2306
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", QEMU_CAPS_MACHINE_OPT,
2307
                    QEMU_CAPS_VIRTIO_SCSI,
2308 2309 2310 2311
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", NONE);

    DO_TEST("machine-aeskeywrap-off-cap",
2312
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP,
2313
            QEMU_CAPS_VIRTIO_SCSI,
2314 2315
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap", QEMU_CAPS_MACHINE_OPT,
2316
                    QEMU_CAPS_VIRTIO_SCSI,
2317 2318 2319 2320 2321
                    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,
2322
            QEMU_CAPS_VIRTIO_SCSI,
2323
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2324
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", QEMU_CAPS_MACHINE_OPT,
2325
                    QEMU_CAPS_VIRTIO_SCSI,
2326 2327 2328 2329
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", NONE);

    DO_TEST("machine-deakeywrap-on-cap",
2330
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_DEA_KEY_WRAP,
2331
            QEMU_CAPS_VIRTIO_SCSI,
2332 2333
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-on-cap", QEMU_CAPS_MACHINE_OPT,
2334
                    QEMU_CAPS_VIRTIO_SCSI,
2335 2336 2337 2338 2339
                    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,
2340
            QEMU_CAPS_VIRTIO_SCSI,
2341 2342
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", QEMU_CAPS_MACHINE_OPT,
2343
                    QEMU_CAPS_VIRTIO_SCSI,
2344 2345 2346 2347
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", NONE);

    DO_TEST("machine-deakeywrap-off-cap",
2348
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_DEA_KEY_WRAP,
2349
            QEMU_CAPS_VIRTIO_SCSI,
2350 2351
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-cap", QEMU_CAPS_MACHINE_OPT,
2352
                    QEMU_CAPS_VIRTIO_SCSI,
2353 2354 2355 2356 2357
                    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,
2358
            QEMU_CAPS_VIRTIO_SCSI,
2359 2360
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST("machine-keywrap-none",
2361
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_VIRTIO_SCSI,
2362
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2363

J
Jiri Denemark 已提交
2364 2365 2366 2367 2368 2369 2370
    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);

2371
    DO_TEST("virtio-input", QEMU_CAPS_VIRTIO_KEYBOARD,
2372
            QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET);
2373
    DO_TEST("virtio-input-passthrough", QEMU_CAPS_VIRTIO_INPUT_HOST);
2374

2375
    DO_TEST("ppc64-usb-controller",
2376
            QEMU_CAPS_PCI_OHCI);
2377
    DO_TEST("ppc64-usb-controller-legacy",
2378
            QEMU_CAPS_PIIX3_USB_UHCI);
2379

2380 2381 2382 2383
    DO_TEST_PARSE_FLAGS_ERROR("missing-machine",
                              VIR_DOMAIN_DEF_PARSE_SKIP_OSTYPE_CHECKS,
                              NONE);

2384
    DO_TEST("name-escape", QEMU_CAPS_NAME_DEBUG_THREADS,
2385
            QEMU_CAPS_OBJECT_SECRET, QEMU_CAPS_CHARDEV, QEMU_CAPS_VNC,
2386
            QEMU_CAPS_NAME_GUEST, QEMU_CAPS_DEVICE_CIRRUS_VGA);
M
Marc-André Lureau 已提交
2387 2388
    DO_TEST("debug-threads", QEMU_CAPS_NAME_DEBUG_THREADS);

2389
    DO_TEST("master-key", QEMU_CAPS_OBJECT_SECRET);
J
Ján Tomko 已提交
2390 2391
    DO_TEST("usb-long-port-path", QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_USB_HUB);
2392 2393 2394
    DO_TEST_PARSE_ERROR("usb-too-long-port-path-invalid",
                        QEMU_CAPS_CHARDEV,
                        QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_USB_HUB);
2395

2396
    DO_TEST("acpi-table", NONE);
2397
    DO_TEST("intel-iommu", QEMU_CAPS_DEVICE_PCI_BRIDGE,
2398 2399 2400
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_INTEL_IOMMU);
2401 2402
    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);
2403

2404 2405
    DO_TEST("cpu-hotplug-startup", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);

2406
    qemuTestDriverFree(&driver);
2407

2408
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
2409 2410
}

2411 2412
VIRT_TEST_MAIN_PRELOAD(mymain, abs_builddir "/.libs/qemuxml2argvmock.so",
                       abs_builddir "/.libs/virrandommock.so")
2413

2414 2415
#else

2416 2417 2418 2419
int main(void)
{
    return EXIT_AM_SKIP;
}
2420 2421

#endif /* WITH_QEMU */