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

34
# include "testutilsqemu.h"
35

36 37
# define VIR_FROM_THIS VIR_FROM_QEMU

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

    if (!volinfo[1])
        goto fallback;

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

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

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

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

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

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

    return 0;
}


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

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

    return ret;
}


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

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

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

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

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

    return xmlbuf;
}

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

    return 1;
}

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

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

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

282 283 284 285

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

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

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

    return 0;
}


static int
355 356
testInitQEMUCaps(struct testInfo *info,
                 int gic)
357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372
{
    int ret = -1;

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

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

    ret = 0;

 cleanup:
    return ret;
}


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

380 381
    virQEMUCapsSetArch(info->qemuCaps, vm->def->os.arch);

382 383
    virQEMUCapsInitQMPBasicArch(info->qemuCaps);

384 385 386 387 388
    /* We need to pretend QEMU 2.0.0 is in use so that pSeries guests
     * will get the correct alias assigned to their buses.
     * See virQEMUCapsHasPCIMultiBus() */
    virQEMUCapsSetVersion(info->qemuCaps, 2000000);

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

392 393
    virQEMUCapsInitHostCPUModel(info->qemuCaps, caps, VIR_DOMAIN_VIRT_KVM);
    virQEMUCapsInitHostCPUModel(info->qemuCaps, caps, VIR_DOMAIN_VIRT_QEMU);
394

395 396 397 398 399 400 401 402 403
    virQEMUCapsFilterByMachineType(info->qemuCaps, vm->def->os.machine);

    ret = 0;

 cleanup:
    return ret;
}


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

423 424
    memset(&monitor_chr, 0, sizeof(monitor_chr));

425
    if (!(conn = virGetConnect()))
426
        goto cleanup;
427

428
    conn->secretDriver = &fakeSecretDriver;
429
    conn->storageDriver = &fakeStorageDriver;
430

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

452
    if (!(vm = virDomainObjNew(driver.xmlopt)))
453
        goto cleanup;
454

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

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

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

472
    vm->def->id = -1;
473

474
    if (qemuProcessPrepareMonitorChr(&monitor_chr, priv->libDir) < 0)
475
        goto cleanup;
476

477
    if (testUpdateQEMUCaps(info, vm, driver.caps) < 0)
478
        goto cleanup;
479

480
    log = virTestLogContentAndReset();
481
    VIR_FREE(log);
482
    virResetLastError();
J
Jiri Denemark 已提交
483

484 485
    for (i = 0; i < vm->def->nhostdevs; i++) {
        virDomainHostdevDefPtr hostdev = vm->def->hostdevs[i];
486 487 488 489 490 491 492 493

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

E
Eric Blake 已提交
502
    if (!(actualargv = virCommandToString(cmd)))
503
        goto cleanup;
E
Eric Blake 已提交
504

505
    if (virTestCompareToFile(actualargv, args) < 0)
506
        goto cleanup;
507

P
Pavel Hrdina 已提交
508 509
    ret = 0;

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

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


539
static int
E
Eric Blake 已提交
540
mymain(void)
541 542
{
    int ret = 0;
543
    bool skipLegacyCPUs = false;
544

545 546
    abs_top_srcdir = getenv("abs_top_srcdir");
    if (!abs_top_srcdir)
547
        abs_top_srcdir = abs_srcdir "/..";
548

549 550 551 552 553 554 555 556 557 558
    /* 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;
    }

559
    if (qemuTestDriverInit(&driver) < 0)
560
        return EXIT_FAILURE;
561 562

    driver.privileged = true;
563

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

577
    VIR_FREE(driver.config->hugetlbfs);
578
    if (VIR_ALLOC_N(driver.config->hugetlbfs, 2) < 0)
579
        return EXIT_FAILURE;
580 581 582
    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)
583
        return EXIT_FAILURE;
584 585
    driver.config->hugetlbfs[0].size = 2048;
    driver.config->hugetlbfs[0].deflt = true;
586
    driver.config->hugetlbfs[1].size = 1048576;
587
    driver.config->spiceTLS = 1;
588
    if (VIR_STRDUP_QUIET(driver.config->spicePassword, "123456") < 0)
589
        return EXIT_FAILURE;
590 591 592
    VIR_FREE(driver.config->memoryBackingDir);
    if (VIR_STRDUP_QUIET(driver.config->memoryBackingDir, "/var/lib/libvirt/qemu/ram") < 0)
        return EXIT_FAILURE;
593

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

611
# define DO_TEST(name, ...)                                              \
612
    DO_TEST_FULL(name, NULL, -1, 0, 0, GIC_NONE, __VA_ARGS__)
613

614
# define DO_TEST_GIC(name, gic, ...)                                     \
615 616
    DO_TEST_FULL(name, NULL, -1, 0, 0, gic, __VA_ARGS__)

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

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

626 627 628
# define DO_TEST_PARSE_FLAGS_ERROR(name, parseFlags, ...)                \
    DO_TEST_FULL(name, NULL, -1,                                         \
                 FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE,          \
629
                 parseFlags, GIC_NONE, __VA_ARGS__)
630

631
# define DO_TEST_LINUX(name, ...)                                        \
632
    DO_TEST_LINUX_FULL(name, NULL, -1, 0, 0, GIC_NONE, __VA_ARGS__)
633

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

649
# define NONE QEMU_CAPS_LAST
650

651 652 653
    /* 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 */
654 655 656 657 658 659 660
    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");
661 662
    unsetenv("QEMU_AUDIO_DRV");
    unsetenv("SDL_AUDIODRIVER");
663

664
    DO_TEST("minimal", NONE);
665
    DO_TEST_PARSE_ERROR("minimal-no-memory", NONE);
666
    DO_TEST("minimal-msg-timestamp", QEMU_CAPS_MSG_TIMESTAMP);
667
    DO_TEST("machine-aliases1", NONE);
668
    DO_TEST("machine-aliases2", QEMU_CAPS_KVM);
669 670
    DO_TEST("machine-core-on", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_DUMP_GUEST_CORE);
671
    driver.config->dumpGuestCore = true;
672 673
    DO_TEST("machine-core-off", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_DUMP_GUEST_CORE);
674 675 676
    driver.config->dumpGuestCore = false;
    DO_TEST("machine-core-cfg-off", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_DUMP_GUEST_CORE);
677
    DO_TEST_FAILURE("machine-core-on", NONE);
678
    DO_TEST_FAILURE("machine-core-on", QEMU_CAPS_MACHINE_OPT);
M
Michal Privoznik 已提交
679 680 681
    DO_TEST("machine-smm-opt",
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
682
            QEMU_CAPS_DEVICE_IOH3420,
M
Michal Privoznik 已提交
683 684 685 686
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_SMM_OPT,
            QEMU_CAPS_VIRTIO_SCSI);
L
Li Zhang 已提交
687 688
    DO_TEST("machine-usb-opt", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_USB_OPT);
689 690
    DO_TEST("machine-vmport-opt", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_VMPORT_OPT);
691
    DO_TEST("kvm", QEMU_CAPS_MACHINE_OPT);
692 693
    DO_TEST("default-kvm-host-arch", QEMU_CAPS_MACHINE_OPT);
    DO_TEST("default-qemu-host-arch", QEMU_CAPS_MACHINE_OPT);
694 695 696
    DO_TEST("boot-cdrom", NONE);
    DO_TEST("boot-network", NONE);
    DO_TEST("boot-floppy", NONE);
697
    DO_TEST("boot-floppy-q35",
698
            QEMU_CAPS_DEVICE_IOH3420,
699
            QEMU_CAPS_ICH9_AHCI);
700
    DO_TEST("bootindex-floppy-q35",
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 754 755 756 757 758 759

    /* Make sure all combinations of ACPI and UEFI behave as expected */
    DO_TEST("q35-acpi-uefi", NONE);
    DO_TEST_PARSE_ERROR("q35-noacpi-uefi", NONE);
    DO_TEST("q35-noacpi-nouefi", NONE);
    DO_TEST("q35-acpi-nouefi", NONE);

760
    DO_TEST("clock-utc", QEMU_CAPS_NODEFCONFIG);
761
    DO_TEST("clock-localtime", NONE);
762
    DO_TEST("clock-localtime-basis-localtime", QEMU_CAPS_RTC);
763 764
    DO_TEST("clock-variable", QEMU_CAPS_RTC);
    DO_TEST("clock-france", QEMU_CAPS_RTC);
765 766
    DO_TEST("clock-hpet-off", QEMU_CAPS_RTC);
    DO_TEST("clock-catchup", QEMU_CAPS_RTC);
767
    DO_TEST("cpu-kvmclock", QEMU_CAPS_ENABLE_KVM);
A
Andrea Bolognani 已提交
768
    DO_TEST("cpu-host-kvmclock", QEMU_CAPS_ENABLE_KVM);
769
    DO_TEST("kvmclock", QEMU_CAPS_KVM);
770
    DO_TEST("clock-timer-hyperv-rtc", QEMU_CAPS_KVM);
771

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

788
    DO_TEST("hyperv", NONE);
789
    DO_TEST("hyperv-off", NONE);
790
    DO_TEST("hyperv-panic", NONE);
791

792 793 794
    DO_TEST("kvm-features", NONE);
    DO_TEST("kvm-features-off", NONE);

795 796 797
    DO_TEST("pmu-feature", NONE);
    DO_TEST("pmu-feature-off", NONE);

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

1013 1014 1015 1016 1017 1018 1019 1020 1021 1022
    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);
1023
    driver.config->vncAutoUnixSocket = true;
1024 1025
    DO_TEST("graphics-vnc-auto-socket-cfg", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1026
    driver.config->vncAutoUnixSocket = false;
1027 1028 1029 1030
    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);
1031

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

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

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

1165

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

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

    DO_TEST("serial-vc-chardev",
1189
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1190
    DO_TEST("serial-pty-chardev",
1191
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1192
    DO_TEST("serial-dev-chardev",
1193
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1194
    DO_TEST("serial-dev-chardev-iobase",
1195
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1196
    DO_TEST("serial-file-chardev",
1197
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1198
            QEMU_CAPS_CHARDEV_FILE_APPEND);
1199
    DO_TEST("serial-unix-chardev",
1200
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1201
    DO_TEST("serial-tcp-chardev",
1202
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1203
    DO_TEST("serial-udp-chardev",
1204
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1205
    DO_TEST("serial-tcp-telnet-chardev",
1206
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1207 1208 1209 1210
    driver.config->chardevTLS = 1;
    DO_TEST("serial-tcp-tlsx509-chardev",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1211 1212 1213 1214 1215
    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;
1216 1217 1218
    DO_TEST("serial-tcp-tlsx509-chardev-notls",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235
    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
1236 1237
    driver.config->chardevTLS = 0;
    VIR_FREE(driver.config->chardevTLSx509certdir);
1238
    DO_TEST("serial-many-chardev",
1239
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1240
    DO_TEST("parallel-tcp-chardev",
1241
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1242
    DO_TEST("parallel-parport-chardev",
1243
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1244
    DO_TEST("console-compat-chardev",
1245
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
M
Michal Privoznik 已提交
1246
    DO_TEST("pci-serial-dev-chardev",
1247
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
M
Michal Privoznik 已提交
1248
            QEMU_CAPS_DEVICE_PCI_SERIAL);
1249

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

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

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

1418
    DO_TEST("smbios", QEMU_CAPS_SMBIOS_TYPE);
1419
    DO_TEST_PARSE_ERROR("smbios-date", QEMU_CAPS_SMBIOS_TYPE);
1420
    DO_TEST_PARSE_ERROR("smbios-uuid-match", QEMU_CAPS_SMBIOS_TYPE);
1421

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

1456 1457
    DO_TEST("hostdev-usb-address", NONE);
    DO_TEST("hostdev-usb-address-device",
1458 1459
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("hostdev-usb-address-device-boot",
1460 1461
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_USB_HOST_BOOTINDEX);
J
Ján Tomko 已提交
1462
    DO_TEST("hostdev-pci-address", NONE);
1463
    DO_TEST("hostdev-pci-address-device",
J
Ján Tomko 已提交
1464
            QEMU_CAPS_NODEFCONFIG);
1465
    DO_TEST("hostdev-vfio",
J
Ján Tomko 已提交
1466
            QEMU_CAPS_NODEFCONFIG,
1467
            QEMU_CAPS_DEVICE_VFIO_PCI);
1468
    DO_TEST("hostdev-vfio-multidomain",
J
Ján Tomko 已提交
1469
            QEMU_CAPS_NODEFCONFIG,
1470
            QEMU_CAPS_DEVICE_VFIO_PCI, QEMU_CAPS_HOST_PCI_MULTIDOMAIN);
1471 1472 1473 1474 1475 1476 1477 1478 1479
    DO_TEST("hostdev-mdev-precreated",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST_PARSE_ERROR("hostdev-mdev-src-address-invalid",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST_PARSE_ERROR("hostdev-mdev-invalid-target-address",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_VFIO_PCI);
1480 1481
    DO_TEST_FAILURE("hostdev-vfio-multidomain",
                    QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VFIO_PCI);
1482
    DO_TEST("pci-rom",
J
Ján Tomko 已提交
1483
            QEMU_CAPS_NODEFCONFIG);
1484

1485 1486 1487 1488
    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);
1489

1490
    DO_TEST_LINUX_FULL("migrate-numa-unaligned", "stdio", 7, 0, 0, GIC_NONE,
1491
                       QEMU_CAPS_NUMA,
1492 1493
                       QEMU_CAPS_OBJECT_MEMORY_RAM);

1494
    DO_TEST("qemu-ns", NONE);
1495
    DO_TEST("qemu-ns-no-env", NONE);
1496

1497
    DO_TEST("smp", NONE);
1498

J
John Ferlan 已提交
1499
    DO_TEST("iothreads", QEMU_CAPS_OBJECT_IOTHREAD);
1500 1501
    DO_TEST("iothreads-ids", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-ids-partial", QEMU_CAPS_OBJECT_IOTHREAD);
1502
    DO_TEST_FAILURE("iothreads-nocap", NONE);
1503 1504
    DO_TEST("iothreads-disk", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-disk-virtio-ccw", QEMU_CAPS_OBJECT_IOTHREAD,
1505
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1506 1507 1508 1509 1510 1511
    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 已提交
1512

1513 1514
    DO_TEST("cpu-topology1", NONE);
    DO_TEST("cpu-topology2", NONE);
1515
    DO_TEST("cpu-topology3", NONE);
1516 1517 1518 1519 1520 1521 1522 1523
    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);
1524
    DO_TEST("cpu-numa1", NONE);
1525 1526
    DO_TEST("cpu-numa2", NONE);
    DO_TEST("cpu-numa-no-memory-element", NONE);
1527
    DO_TEST_PARSE_ERROR("cpu-numa3", NONE);
1528 1529
    DO_TEST_FAILURE("cpu-numa-disjoint", NONE);
    DO_TEST("cpu-numa-disjoint", QEMU_CAPS_NUMA);
1530 1531
    DO_TEST_FAILURE("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_RAM);
    DO_TEST_FAILURE("cpu-numa-memshared", NONE);
1532
    DO_TEST("cpu-host-model", NONE);
1533
    DO_TEST("cpu-host-model-vendor", NONE);
1534
    skipLegacyCPUs = true;
1535
    DO_TEST("cpu-host-model-fallback", NONE);
1536
    DO_TEST_FAILURE("cpu-host-model-nofallback", NONE);
1537
    skipLegacyCPUs = false;
A
Andrea Bolognani 已提交
1538
    DO_TEST("cpu-host-passthrough", QEMU_CAPS_KVM);
1539
    DO_TEST_FAILURE("cpu-host-passthrough", NONE);
A
Andrea Bolognani 已提交
1540
    DO_TEST_FAILURE("cpu-qemu-host-passthrough", QEMU_CAPS_KVM);
1541

1542 1543
    qemuTestSetHostArch(driver.caps, VIR_ARCH_S390X);
    DO_TEST("cpu-s390-zEC12", QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1544 1545
    DO_TEST("cpu-s390-features", QEMU_CAPS_KVM, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION);
    DO_TEST_FAILURE("cpu-s390-features", QEMU_CAPS_KVM);
1546 1547
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);

1548
    qemuTestSetHostCPU(driver.caps, cpuHaswell);
1549 1550 1551 1552
    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);
1553
    DO_TEST("cpu-host-model-cmt", NONE);
1554
    DO_TEST("cpu-tsc-frequency", QEMU_CAPS_KVM);
1555
    qemuTestSetHostCPU(driver.caps, NULL);
1556

1557
    DO_TEST("encrypted-disk", NONE);
J
John Ferlan 已提交
1558
    DO_TEST("encrypted-disk-usage", NONE);
1559
# ifdef HAVE_GNUTLS_CIPHER_ENCRYPT
1560
    DO_TEST("luks-disks", QEMU_CAPS_OBJECT_SECRET);
1561 1562 1563
# else
    DO_TEST_FAILURE("luks-disks", QEMU_CAPS_OBJECT_SECRET);
# endif
1564

1565 1566 1567 1568 1569 1570 1571 1572
    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);
1573
    DO_TEST("cputune-numatune",
1574
            QEMU_CAPS_KVM,
1575
            QEMU_CAPS_OBJECT_IOTHREAD,
1576 1577
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1578 1579 1580
    DO_TEST("vcpu-placement-static",
            QEMU_CAPS_KVM,
            QEMU_CAPS_OBJECT_IOTHREAD);
1581

1582
    DO_TEST("numatune-memory", NONE);
1583
    DO_TEST_PARSE_ERROR("numatune-memory-invalid-nodeset", NONE);
1584 1585
    DO_TEST_LINUX("numatune-memnode", QEMU_CAPS_NUMA,
                  QEMU_CAPS_OBJECT_MEMORY_RAM);
1586 1587
    DO_TEST_FAILURE("numatune-memnode", NONE);

1588 1589
    DO_TEST_LINUX("numatune-memnode-no-memory", QEMU_CAPS_NUMA,
                  QEMU_CAPS_OBJECT_MEMORY_RAM);
1590 1591
    DO_TEST_FAILURE("numatune-memnode-no-memory", NONE);

1592
    DO_TEST("numatune-auto-nodeset-invalid", NONE);
1593 1594
    DO_TEST("numatune-auto-prefer", QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1595 1596
    DO_TEST_FAILURE("numatune-static-nodeset-exceed-hostnode",
                    QEMU_CAPS_OBJECT_MEMORY_RAM);
1597 1598
    DO_TEST_PARSE_ERROR("numatune-memnode-nocpu", NONE);
    DO_TEST_PARSE_ERROR("numatune-memnodes-problematic", NONE);
1599 1600
    DO_TEST("numad", NONE);
    DO_TEST("numad-auto-vcpu-static-numatune", NONE);
1601
    DO_TEST_PARSE_ERROR("numad-auto-vcpu-static-numatune-no-nodeset", NONE);
1602 1603 1604
    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);
1605
    DO_TEST("blkdeviotune",
1606
            QEMU_CAPS_DRIVE_IOTUNE);
1607
    DO_TEST("blkdeviotune-max",
1608
            QEMU_CAPS_DRIVE_IOTUNE,
1609
            QEMU_CAPS_DRIVE_IOTUNE_MAX);
1610 1611 1612 1613
    DO_TEST("blkdeviotune-group-num",
            QEMU_CAPS_DRIVE_IOTUNE,
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_GROUP);
1614 1615 1616 1617
    DO_TEST("blkdeviotune-max-length",
            QEMU_CAPS_DRIVE_IOTUNE,
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_MAX_LENGTH);
1618

1619
    DO_TEST("multifunction-pci-device",
1620
            QEMU_CAPS_NODEFCONFIG,
1621
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_SCSI_LSI);
1622

1623
    DO_TEST("monitor-json",
1624
            QEMU_CAPS_CHARDEV, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_NODEFCONFIG);
1625
    DO_TEST("no-shutdown",
1626 1627
            QEMU_CAPS_CHARDEV, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_NO_SHUTDOWN);
1628

1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640
    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);
1641

1642
    DO_TEST("pseries-basic",
1643
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1644
    DO_TEST("pseries-vio",
1645
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1646
    DO_TEST("pseries-usb-default",
1647
            QEMU_CAPS_CHARDEV,
1648 1649
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_PCI_OHCI, QEMU_CAPS_PCI_MULTIFUNCTION);
1650
    DO_TEST("pseries-usb-multi",
1651
            QEMU_CAPS_CHARDEV,
1652 1653
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_PCI_OHCI, QEMU_CAPS_PCI_MULTIFUNCTION);
1654
    DO_TEST("pseries-vio-user-assigned",
1655
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1656
    DO_TEST_PARSE_ERROR("pseries-vio-address-clash",
1657
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1658
    DO_TEST("pseries-nvram", QEMU_CAPS_DEVICE_NVRAM);
1659 1660
    DO_TEST("pseries-usb-kbd", QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_DEVICE_USB_KBD, QEMU_CAPS_CHARDEV,
1661 1662
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("pseries-cpu-exact", QEMU_CAPS_CHARDEV,
1663
            QEMU_CAPS_NODEFCONFIG);
1664 1665

    qemuTestSetHostArch(driver.caps, VIR_ARCH_PPC64);
A
Andrea Bolognani 已提交
1666
    DO_TEST("pseries-cpu-compat", QEMU_CAPS_KVM,
1667
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
A
Andrea Bolognani 已提交
1668
    DO_TEST("pseries-cpu-le", QEMU_CAPS_KVM,
1669
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1670 1671
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);

1672
    DO_TEST("pseries-panic-missing",
1673
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1674
    DO_TEST("pseries-panic-no-address",
1675
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1676
    DO_TEST_FAILURE("pseries-panic-address",
1677
                    QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1678
    DO_TEST("disk-ide-drive-split",
1679
            QEMU_CAPS_NODEFCONFIG,
1680
            QEMU_CAPS_IDE_CD);
1681
    DO_TEST("disk-ide-wwn",
1682
            QEMU_CAPS_IDE_CD,
1683
            QEMU_CAPS_DRIVE_SERIAL, QEMU_CAPS_IDE_DRIVE_WWN);
1684

1685
    DO_TEST("disk-geometry", NONE);
V
Viktor Mihajlovski 已提交
1686
    DO_TEST("disk-blockio",
1687
            QEMU_CAPS_NODEFCONFIG,
V
Viktor Mihajlovski 已提交
1688
            QEMU_CAPS_IDE_CD, QEMU_CAPS_BLOCKIO);
1689

1690
    DO_TEST("video-device-pciaddr-default",
1691 1692
            QEMU_CAPS_KVM,
            QEMU_CAPS_VNC,
1693
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1694
            QEMU_CAPS_DEVICE_QXL);
1695
    DO_TEST("video-vga-nodevice", QEMU_CAPS_DEVICE_VGA);
1696
    DO_TEST("video-vga-device", QEMU_CAPS_DEVICE_VGA,
1697
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1698
    DO_TEST("video-vga-device-vgamem", QEMU_CAPS_DEVICE_VGA,
1699
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_VGA_VGAMEM);
1700
    DO_TEST("video-qxl-nodevice", QEMU_CAPS_DEVICE_QXL);
1701
    DO_TEST("video-qxl-device",
1702
            QEMU_CAPS_DEVICE_QXL,
1703
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1704
    DO_TEST("video-qxl-device-vgamem",
1705
            QEMU_CAPS_DEVICE_QXL,
1706
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1707 1708
            QEMU_CAPS_QXL_VGAMEM);
    DO_TEST("video-qxl-sec-device",
1709
            QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1710
    DO_TEST("video-qxl-sec-device-vgamem",
1711 1712
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1713
            QEMU_CAPS_QXL_VGAMEM);
1714 1715 1716
    DO_TEST("video-qxl-heads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
1717
            QEMU_CAPS_QXL_MAX_OUTPUTS);
1718 1719 1720
    DO_TEST("video-qxl-noheads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
1721
            QEMU_CAPS_QXL_MAX_OUTPUTS);
M
Marc-André Lureau 已提交
1722
    DO_TEST("video-virtio-gpu-device",
1723
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
M
Marc-André Lureau 已提交
1724
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1725
    DO_TEST("video-virtio-gpu-virgl",
1726
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
1727
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
1728
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1729 1730
    DO_TEST("video-virtio-gpu-spice-gl",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
1731
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
1732 1733
            QEMU_CAPS_SPICE,
            QEMU_CAPS_SPICE_GL,
1734
            QEMU_CAPS_SPICE_RENDERNODE,
1735
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1736 1737 1738
    DO_TEST("video-virtio-gpu-secondary",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1739 1740 1741 1742
    DO_TEST("video-virtio-vga",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIRTIO_VGA,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1743
    DO_TEST_PARSE_ERROR("video-invalid", NONE);
1744

1745
    DO_TEST("virtio-rng-default", QEMU_CAPS_DEVICE_VIRTIO_RNG,
1746
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1747
    DO_TEST("virtio-rng-random", QEMU_CAPS_DEVICE_VIRTIO_RNG,
1748
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1749
    DO_TEST("virtio-rng-egd", QEMU_CAPS_DEVICE_VIRTIO_RNG,
1750
            QEMU_CAPS_OBJECT_RNG_EGD);
1751
    DO_TEST("virtio-rng-multiple", QEMU_CAPS_DEVICE_VIRTIO_RNG,
1752
            QEMU_CAPS_OBJECT_RNG_EGD, QEMU_CAPS_OBJECT_RNG_RANDOM);
1753
    DO_TEST_PARSE_ERROR("virtio-rng-egd-crash",
1754
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_EGD);
1755
    DO_TEST("virtio-rng-ccw",
1756
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1757
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_CCW,
1758 1759
            QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1760

1761
    DO_TEST("s390-allow-bogus-usb-none",
1762
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1763
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390,
1764
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
1765
    DO_TEST("s390-allow-bogus-usb-controller",
1766
            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1767
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390,
1768 1769
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);

1770 1771 1772 1773 1774 1775 1776 1777 1778 1779
    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 已提交
1780
    DO_TEST("ppc-dtb", QEMU_CAPS_KVM, QEMU_CAPS_DTB);
1781
    DO_TEST("ppce500-serial", QEMU_CAPS_KVM, QEMU_CAPS_CHARDEV);
O
Olivia Yin 已提交
1782

1783
    DO_TEST("tpm-passthrough",
1784
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
1785
    DO_TEST_PARSE_ERROR("tpm-no-backend-invalid",
1786
                        QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
1787

1788

1789 1790 1791 1792
    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);
1793

1794 1795 1796 1797 1798 1799
    DO_TEST("pci-bridge",
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("pci-autoadd-addr",
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1800
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1801 1802
    DO_TEST("pci-autoadd-idx",
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1803 1804
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("pci-autofill-addr", QEMU_CAPS_DEVICE_CIRRUS_VGA);
1805
    DO_TEST("pci-many",
1806
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1807
    DO_TEST("pci-bridge-many-disks",
1808
            QEMU_CAPS_DEVICE_PCI_BRIDGE);
L
Laine Stump 已提交
1809
    DO_TEST("pcie-root",
1810 1811 1812 1813
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL);
1814
    DO_TEST("q35",
1815
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1816
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
1817
            QEMU_CAPS_DEVICE_IOH3420,
1818
            QEMU_CAPS_ICH9_AHCI,
1819 1820
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
1821
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1822
            QEMU_CAPS_DEVICE_QXL);
1823 1824 1825 1826 1827 1828 1829 1830
    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);
1831
    DO_TEST("q35-pm-disable",
1832
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1833
            QEMU_CAPS_DEVICE_IOH3420,
1834 1835 1836 1837
            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",
1838
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1839
            QEMU_CAPS_DEVICE_IOH3420,
1840 1841
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4);
1842
    DO_TEST("q35-usb2",
1843
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1844
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
1845
            QEMU_CAPS_DEVICE_IOH3420,
1846
            QEMU_CAPS_ICH9_AHCI,
1847 1848
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
1849
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1850
            QEMU_CAPS_DEVICE_QXL);
1851
    DO_TEST("q35-usb2-multi",
1852
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1853
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
1854
            QEMU_CAPS_DEVICE_IOH3420,
1855
            QEMU_CAPS_ICH9_AHCI,
1856 1857
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
1858
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1859
            QEMU_CAPS_DEVICE_QXL);
1860
    DO_TEST("q35-usb2-reorder",
1861
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
1862
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
1863
            QEMU_CAPS_DEVICE_IOH3420,
1864
            QEMU_CAPS_ICH9_AHCI,
1865 1866
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
1867
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1868
            QEMU_CAPS_DEVICE_QXL);
1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890
    /* 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,
1891
            QEMU_CAPS_NEC_USB_XHCI,
1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905
            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,
1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929
            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,
1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947
            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,
1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970
            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_VIDEO_PRIMARY);
    DO_TEST("q35-multifunction",
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_NETDEV,
1971 1972 1973 1974 1975
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986
            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,
1987
            QEMU_CAPS_NEC_USB_XHCI,
1988
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021
    DO_TEST("q35-virt-manager-basic",
            QEMU_CAPS_KVM,
            QEMU_CAPS_RTC,
            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);
2022 2023

    /* Test automatic and manual setting of pcie-root-port attributes */
2024 2025
    DO_TEST("pcie-root-port",
            QEMU_CAPS_DEVICE_IOH3420,
2026
            QEMU_CAPS_ICH9_AHCI,
2027
            QEMU_CAPS_PCI_MULTIFUNCTION,
2028
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2029
            QEMU_CAPS_DEVICE_QXL);
2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041

    /* Make sure the default model for PCIe Root Ports is picked correctly
     * based on QEMU binary capabilities. We use x86/q35 for the test, but
     * any PCIe machine type (such as aarch64/virt) will behave the same */
    DO_TEST("pcie-root-port-model-generic",
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_PCI_MULTIFUNCTION);
    DO_TEST("pcie-root-port-model-ioh3420",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_PCI_MULTIFUNCTION);

2042 2043 2044 2045 2046 2047 2048
    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,
2049 2050
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
2051
            QEMU_CAPS_NEC_USB_XHCI);
2052 2053 2054 2055 2056 2057 2058
    /* 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);
2059

2060
    DO_TEST_PARSE_ERROR("q35-wrong-root",
2061
            QEMU_CAPS_DEVICE_IOH3420,
2062 2063 2064
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2065
            QEMU_CAPS_DEVICE_QXL);
2066 2067
    DO_TEST_PARSE_ERROR("440fx-wrong-root", NONE);

2068
    DO_TEST_PARSE_ERROR("pcie-root-port-too-many",
2069
            QEMU_CAPS_DEVICE_IOH3420,
2070
            QEMU_CAPS_ICH9_AHCI,
2071
            QEMU_CAPS_PCI_MULTIFUNCTION,
2072
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2073
            QEMU_CAPS_DEVICE_QXL);
2074

2075 2076 2077
    DO_TEST("pcie-switch-upstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
2078
            QEMU_CAPS_ICH9_AHCI,
2079
            QEMU_CAPS_PCI_MULTIFUNCTION,
2080
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2081
            QEMU_CAPS_DEVICE_QXL);
2082 2083 2084 2085
    DO_TEST("pcie-switch-downstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
2086
            QEMU_CAPS_ICH9_AHCI,
2087
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2088
            QEMU_CAPS_DEVICE_QXL);
2089

2090 2091 2092 2093 2094 2095
    DO_TEST("pci-expander-bus",
            QEMU_CAPS_DEVICE_PXB);
    DO_TEST_PARSE_ERROR("pci-expander-bus-bad-node",
                        QEMU_CAPS_DEVICE_PXB);
    DO_TEST_PARSE_ERROR("pci-expander-bus-bad-machine",
                        QEMU_CAPS_DEVICE_PXB);
2096 2097
    DO_TEST_PARSE_ERROR("pci-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_PXB);
2098

2099 2100 2101 2102 2103 2104 2105 2106 2107 2108
    DO_TEST("pcie-expander-bus",
            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_IOH3420,
                        QEMU_CAPS_DEVICE_X3130_UPSTREAM,
                        QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
                        QEMU_CAPS_DEVICE_PXB_PCIE);
2109 2110 2111
    DO_TEST_PARSE_ERROR("pcie-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_IOH3420,
                        QEMU_CAPS_DEVICE_PXB_PCIE);
2112

2113
    DO_TEST("hostdev-scsi-lsi",
2114 2115
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2116
    DO_TEST("hostdev-scsi-virtio-scsi",
2117 2118
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2119
    DO_TEST("hostdev-scsi-readonly",
J
Ján Tomko 已提交
2120
            QEMU_CAPS_VIRTIO_SCSI,
O
Osier Yang 已提交
2121
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_SCSI_GENERIC);
2122
    DO_TEST("hostdev-scsi-virtio-scsi",
2123 2124 2125
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC,
            QEMU_CAPS_DEVICE_SCSI_GENERIC_BOOTINDEX);
2126
    DO_TEST("hostdev-scsi-lsi-iscsi",
J
John Ferlan 已提交
2127 2128
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2129
    DO_TEST("hostdev-scsi-lsi-iscsi-auth",
J
John Ferlan 已提交
2130 2131
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2132
    DO_TEST("hostdev-scsi-virtio-iscsi",
J
John Ferlan 已提交
2133 2134
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2135
    DO_TEST("hostdev-scsi-virtio-iscsi-auth",
J
John Ferlan 已提交
2136 2137
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2138 2139 2140 2141 2142 2143
    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);
2144

2145
    DO_TEST("mlock-on", QEMU_CAPS_REALTIME_MLOCK);
2146
    DO_TEST_FAILURE("mlock-on", NONE);
2147
    DO_TEST("mlock-off", QEMU_CAPS_REALTIME_MLOCK);
2148 2149
    DO_TEST("mlock-unsupported", NONE);

2150 2151 2152 2153
    DO_TEST_PARSE_ERROR("pci-bridge-negative-index-invalid", NONE);
    DO_TEST_PARSE_ERROR("pci-bridge-duplicate-index", NONE);
    DO_TEST_PARSE_ERROR("pci-root-nonzero-index", NONE);
    DO_TEST_PARSE_ERROR("pci-root-address", NONE);
2154

2155
    DO_TEST("hotplug-base",
2156
            QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_SCSI);
2157

2158 2159
    DO_TEST("pcihole64", QEMU_CAPS_I440FX_PCI_HOLE64_SIZE);
    DO_TEST_FAILURE("pcihole64-none", NONE);
2160
    DO_TEST("pcihole64-q35",
2161
            QEMU_CAPS_DEVICE_IOH3420,
2162
            QEMU_CAPS_ICH9_AHCI,
2163
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2164
            QEMU_CAPS_DEVICE_QXL,
2165 2166
            QEMU_CAPS_Q35_PCI_HOLE64_SIZE);

2167
    DO_TEST("arm-vexpressa9-nodevs",
2168
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB);
2169
    DO_TEST("arm-vexpressa9-basic",
2170
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB);
2171
    DO_TEST("arm-vexpressa9-virtio",
2172
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2173
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2174
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2175
    DO_TEST("arm-virt-virtio",
2176
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2177
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2178
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2179

2180
    DO_TEST("aarch64-virt-virtio",
2181
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2182
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2183
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2184 2185 2186 2187 2188 2189

    /* 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",
2190
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2191
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
2192 2193 2194
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2195
            QEMU_CAPS_PCI_MULTIFUNCTION,
2196
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2197 2198
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_VIRTIO_SCSI);
2199 2200
    DO_TEST("aarch64-virt-2.6-virtio-pci-default",
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2201
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2202 2203
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2204
            QEMU_CAPS_PCI_MULTIFUNCTION,
2205 2206
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420);
2207 2208 2209
    /* Example of using virtio-pci with no explicit PCI controller
       but with manual PCI addresses */
    DO_TEST("aarch64-virtio-pci-manual-addresses",
2210
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2211
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2212 2213
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2214
            QEMU_CAPS_PCI_MULTIFUNCTION,
2215 2216 2217
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_VIRTIO_SCSI);
2218 2219 2220 2221 2222
    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);
2223
    DO_TEST("aarch64-aavmf-virtio-mmio",
2224
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2225
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2226
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2227
    DO_TEST("aarch64-virt-default-nic",
2228
            QEMU_CAPS_NODEFCONFIG,
2229
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
2230
    qemuTestSetHostArch(driver.caps, VIR_ARCH_AARCH64);
2231
    DO_TEST("aarch64-cpu-passthrough",
2232
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2233
            QEMU_CAPS_KVM);
2234 2235 2236
    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 已提交
2237
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2238
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2239 2240 2241 2242
    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 已提交
2243
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2244
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2245 2246 2247 2248
    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 已提交
2249
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
2250 2251 2252 2253
    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 已提交
2254
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2255
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2256 2257 2258 2259 2260 2261 2262
    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 已提交
2263
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
2264 2265 2266 2267 2268 2269 2270
    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 已提交
2271
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2272
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2273 2274 2275
    DO_TEST_GIC("aarch64-gic-v2", GIC_BOTH,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2276
    DO_TEST_FAILURE("aarch64-gic-v3",
A
Andrea Bolognani 已提交
2277
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
2278 2279 2280 2281 2282 2283 2284 2285 2286 2287
    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 已提交
2288
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2289
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2290
    DO_TEST_FAILURE("aarch64-gic-host",
A
Andrea Bolognani 已提交
2291
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303
    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);
2304
    DO_TEST_PARSE_ERROR("aarch64-gic-invalid",
A
Andrea Bolognani 已提交
2305
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2306
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2307
    DO_TEST_FAILURE("aarch64-gic-not-virt",
A
Andrea Bolognani 已提交
2308
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2309
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2310
    DO_TEST_FAILURE("aarch64-gic-not-arm",
A
Andrea Bolognani 已提交
2311
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2312
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2313
    DO_TEST("aarch64-kvm-32-on-64",
2314
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2315
            QEMU_CAPS_KVM, QEMU_CAPS_CPU_AARCH64_OFF);
2316
    DO_TEST_FAILURE("aarch64-kvm-32-on-64",
2317
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2318
            QEMU_CAPS_KVM);
2319 2320 2321 2322 2323 2324 2325

    /* Make sure all combinations of ACPI and UEFI behave as expected */
    DO_TEST("aarch64-acpi-uefi", NONE);
    DO_TEST("aarch64-noacpi-uefi", NONE);
    DO_TEST("aarch64-noacpi-nouefi", NONE);
    DO_TEST_PARSE_ERROR("aarch64-acpi-nouefi", NONE);

2326
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);
2327

2328
    DO_TEST("kvm-pit-delay", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2329
    DO_TEST("kvm-pit-discard", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2330
    DO_TEST("no-kvm-pit-device", NONE);
2331

H
Hu Tao 已提交
2332
    DO_TEST("panic", QEMU_CAPS_DEVICE_PANIC,
2333
            QEMU_CAPS_NODEFCONFIG);
D
Dmitry Andreev 已提交
2334
    DO_TEST("panic-double", QEMU_CAPS_DEVICE_PANIC,
2335
            QEMU_CAPS_NODEFCONFIG);
H
Hu Tao 已提交
2336

2337
    DO_TEST("panic-no-address", QEMU_CAPS_DEVICE_PANIC,
2338
            QEMU_CAPS_NODEFCONFIG);
2339

2340 2341
    DO_TEST("fips-enabled", QEMU_CAPS_ENABLE_FIPS);

J
Ján Tomko 已提交
2342
    DO_TEST("shmem", QEMU_CAPS_DEVICE_IVSHMEM);
2343 2344 2345
    DO_TEST("shmem-plain-doorbell", QEMU_CAPS_DEVICE_IVSHMEM,
            QEMU_CAPS_DEVICE_IVSHMEM_PLAIN,
            QEMU_CAPS_DEVICE_IVSHMEM_DOORBELL);
2346
    DO_TEST_FAILURE("shmem", NONE);
J
Ján Tomko 已提交
2347
    DO_TEST_FAILURE("shmem-invalid-size",
2348
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2349
    DO_TEST_FAILURE("shmem-invalid-address",
2350
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2351
    DO_TEST_FAILURE("shmem-small-size",
2352
                    QEMU_CAPS_DEVICE_IVSHMEM);
2353
    DO_TEST_PARSE_ERROR("shmem-msi-only", NONE);
A
Andrea Bolognani 已提交
2354
    DO_TEST("cpu-host-passthrough-features", QEMU_CAPS_KVM);
2355

2356
    DO_TEST_FAILURE("memory-align-fail", NONE);
2357
    DO_TEST_FAILURE("memory-hotplug-nonuma", QEMU_CAPS_DEVICE_PC_DIMM);
M
Michal Privoznik 已提交
2358
    DO_TEST("memory-hotplug", NONE);
2359
    DO_TEST("memory-hotplug", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA);
2360
    DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2361
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2362
    DO_TEST("memory-hotplug-dimm-addr", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2363
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2364
    DO_TEST("memory-hotplug-ppc64-nonuma", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2365
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
M
Michal Privoznik 已提交
2366 2367
    DO_TEST("memory-hotplug-nvdimm", QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_DEVICE_NVDIMM,
            QEMU_CAPS_NUMA, QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2368 2369
    DO_TEST("memory-hotplug-nvdimm-access", QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_DEVICE_NVDIMM,
            QEMU_CAPS_NUMA, QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2370 2371
    DO_TEST("memory-hotplug-nvdimm-label", QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_DEVICE_NVDIMM,
            QEMU_CAPS_NUMA, QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2372

2373 2374
    DO_TEST("machine-aeskeywrap-on-caps",
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP,
2375
            QEMU_CAPS_DEA_KEY_WRAP,
2376
            QEMU_CAPS_VIRTIO_SCSI,
2377 2378
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps", QEMU_CAPS_MACHINE_OPT,
2379
                    QEMU_CAPS_VIRTIO_SCSI,
2380 2381 2382 2383 2384
                    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,
2385
            QEMU_CAPS_VIRTIO_SCSI,
2386 2387
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap", QEMU_CAPS_MACHINE_OPT,
2388
                    QEMU_CAPS_VIRTIO_SCSI,
2389 2390 2391 2392 2393
                    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,
2394
            QEMU_CAPS_VIRTIO_SCSI,
2395 2396
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", QEMU_CAPS_MACHINE_OPT,
2397
                    QEMU_CAPS_VIRTIO_SCSI,
2398 2399 2400 2401
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", NONE);

    DO_TEST("machine-aeskeywrap-off-cap",
2402
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP,
2403
            QEMU_CAPS_VIRTIO_SCSI,
2404 2405
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap", QEMU_CAPS_MACHINE_OPT,
2406
                    QEMU_CAPS_VIRTIO_SCSI,
2407 2408 2409 2410 2411
                    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,
2412
            QEMU_CAPS_VIRTIO_SCSI,
2413
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2414
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", QEMU_CAPS_MACHINE_OPT,
2415
                    QEMU_CAPS_VIRTIO_SCSI,
2416 2417 2418 2419
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", NONE);

    DO_TEST("machine-deakeywrap-on-cap",
2420
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_DEA_KEY_WRAP,
2421
            QEMU_CAPS_VIRTIO_SCSI,
2422 2423
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-on-cap", QEMU_CAPS_MACHINE_OPT,
2424
                    QEMU_CAPS_VIRTIO_SCSI,
2425 2426 2427 2428 2429
                    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,
2430
            QEMU_CAPS_VIRTIO_SCSI,
2431 2432
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", QEMU_CAPS_MACHINE_OPT,
2433
                    QEMU_CAPS_VIRTIO_SCSI,
2434 2435 2436 2437
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", NONE);

    DO_TEST("machine-deakeywrap-off-cap",
2438
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_DEA_KEY_WRAP,
2439
            QEMU_CAPS_VIRTIO_SCSI,
2440 2441
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-cap", QEMU_CAPS_MACHINE_OPT,
2442
                    QEMU_CAPS_VIRTIO_SCSI,
2443 2444 2445 2446 2447
                    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,
2448
            QEMU_CAPS_VIRTIO_SCSI,
2449 2450
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST("machine-keywrap-none",
2451
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_VIRTIO_SCSI,
2452
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2453

J
Jiri Denemark 已提交
2454 2455 2456 2457 2458 2459 2460
    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);

2461
    DO_TEST("virtio-input", QEMU_CAPS_VIRTIO_KEYBOARD,
2462
            QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET);
2463
    DO_TEST("virtio-input-passthrough", QEMU_CAPS_VIRTIO_INPUT_HOST);
2464

2465
    DO_TEST("ppc64-usb-controller",
2466
            QEMU_CAPS_PCI_OHCI);
2467
    DO_TEST("ppc64-usb-controller-legacy",
2468
            QEMU_CAPS_PIIX3_USB_UHCI);
2469

2470 2471 2472 2473
    DO_TEST_PARSE_FLAGS_ERROR("missing-machine",
                              VIR_DOMAIN_DEF_PARSE_SKIP_OSTYPE_CHECKS,
                              NONE);

2474
    DO_TEST("name-escape", QEMU_CAPS_NAME_DEBUG_THREADS,
2475
            QEMU_CAPS_OBJECT_SECRET, QEMU_CAPS_CHARDEV, QEMU_CAPS_VNC,
2476 2477
            QEMU_CAPS_NAME_GUEST, QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_SPICE, QEMU_CAPS_SPICE_UNIX);
M
Marc-André Lureau 已提交
2478 2479
    DO_TEST("debug-threads", QEMU_CAPS_NAME_DEBUG_THREADS);

2480
    DO_TEST("master-key", QEMU_CAPS_OBJECT_SECRET);
J
Ján Tomko 已提交
2481 2482
    DO_TEST("usb-long-port-path", QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_USB_HUB);
2483 2484 2485
    DO_TEST_PARSE_ERROR("usb-too-long-port-path-invalid",
                        QEMU_CAPS_CHARDEV,
                        QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_USB_HUB);
2486

2487
    DO_TEST("acpi-table", NONE);
2488
    DO_TEST("intel-iommu",
2489
            QEMU_CAPS_DEVICE_INTEL_IOMMU);
2490 2491 2492
    DO_TEST("intel-iommu-machine",
            QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_IOMMU);
2493

2494 2495
    DO_TEST("cpu-hotplug-startup", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);

2496 2497 2498 2499 2500 2501 2502 2503 2504 2505
    DO_TEST("fd-memory-numa-topology", QEMU_CAPS_MEM_PATH, QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_KVM);
    DO_TEST("fd-memory-numa-topology2", QEMU_CAPS_MEM_PATH, QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_KVM);
    DO_TEST("fd-memory-numa-topology3", QEMU_CAPS_MEM_PATH, QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_KVM);

    DO_TEST("fd-memory-no-numa-topology", QEMU_CAPS_MEM_PATH, QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_KVM);

2506 2507 2508 2509 2510 2511 2512 2513
    DO_TEST("cpu-check-none", QEMU_CAPS_KVM);
    DO_TEST("cpu-check-partial", QEMU_CAPS_KVM);
    DO_TEST("cpu-check-full", QEMU_CAPS_KVM);
    DO_TEST("cpu-check-default-none", QEMU_CAPS_KVM);
    DO_TEST("cpu-check-default-none2", NONE);
    DO_TEST("cpu-check-default-partial", QEMU_CAPS_KVM);
    DO_TEST("cpu-check-default-partial2", QEMU_CAPS_KVM);

2514
    qemuTestDriverFree(&driver);
2515

2516
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
2517 2518
}

2519
VIR_TEST_MAIN_PRELOAD(mymain,
2520 2521 2522
                       abs_builddir "/.libs/qemuxml2argvmock.so",
                       abs_builddir "/.libs/virrandommock.so",
                       abs_builddir "/.libs/qemucpumock.so")
2523

2524 2525
#else

2526 2527 2528 2529
int main(void)
{
    return EXIT_AM_SKIP;
}
2530 2531

#endif /* WITH_QEMU */