qemuxml2argvtest.c 113.5 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 382
    if (!caps)
        goto cleanup;

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

385 386
    virQEMUCapsInitQMPBasicArch(info->qemuCaps);

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

390 391 392 393
    virQEMUCapsInitHostCPUModel(info->qemuCaps, caps->host.arch,
                                VIR_DOMAIN_VIRT_KVM);
    virQEMUCapsInitHostCPUModel(info->qemuCaps, caps->host.arch,
                                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
    if (virQEMUCapsGet(info->qemuCaps, QEMU_CAPS_MONITOR_JSON))
        flags |= FLAG_JSON;

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

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

440
    if (virAsprintf(&xml, "%s/qemuxml2argvdata/%s.xml",
441 442 443 444 445 446 447 448 449 450
                    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;

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

454
    parseFlags |= VIR_DOMAIN_DEF_PARSE_INACTIVE;
455
    if (!(vm->def = virDomainDefParseFile(xml, driver.caps, driver.xmlopt,
456
                                          NULL, parseFlags))) {
P
Pavel Hrdina 已提交
457
        if (flags & FLAG_EXPECT_PARSE_ERROR)
458
            goto ok;
459
        goto cleanup;
460
    }
461 462 463 464
    if (flags & FLAG_EXPECT_PARSE_ERROR) {
        VIR_TEST_DEBUG("passed instead of expected parse error");
        goto cleanup;
    }
465
    priv = vm->privateData;
466

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

470
    if (!virDomainDefCheckABIStability(vm->def, vm->def, driver.xmlopt)) {
471
        VIR_TEST_DEBUG("ABI stability check failed on %s", xml);
472
        goto cleanup;
473 474
    }

475
    vm->def->id = -1;
476

477
    if (qemuProcessPrepareMonitorChr(&monitor_chr, priv->libDir) < 0)
478
        goto cleanup;
479

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

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

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

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

E
Eric Blake 已提交
509
    if (!(actualargv = virCommandToString(cmd)))
510
        goto cleanup;
E
Eric Blake 已提交
511

512
    if (virTestCompareToFile(actualargv, args) < 0)
513
        goto cleanup;
514

P
Pavel Hrdina 已提交
515 516
    ret = 0;

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

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

A
Andrea Bolognani 已提交
545
# define FAKEROOTDIRTEMPLATE abs_builddir "/fakerootdir-XXXXXX"
546

547
static int
E
Eric Blake 已提交
548
mymain(void)
549 550
{
    int ret = 0;
A
Andrea Bolognani 已提交
551
    char *fakerootdir;
552
    bool skipLegacyCPUs = false;
553

A
Andrea Bolognani 已提交
554 555 556 557 558 559 560 561 562 563 564 565
    if (VIR_STRDUP_QUIET(fakerootdir, FAKEROOTDIRTEMPLATE) < 0) {
        fprintf(stderr, "Out of memory\n");
        abort();
    }

    if (!mkdtemp(fakerootdir)) {
        fprintf(stderr, "Cannot create fakerootdir");
        abort();
    }

    setenv("LIBVIRT_FAKE_ROOT_DIR", fakerootdir, 1);

566 567
    abs_top_srcdir = getenv("abs_top_srcdir");
    if (!abs_top_srcdir)
568
        abs_top_srcdir = abs_srcdir "/..";
569

570 571 572 573 574 575 576 577 578 579
    /* 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;
    }

580
    if (qemuTestDriverInit(&driver) < 0)
581
        return EXIT_FAILURE;
582 583

    driver.privileged = true;
584

585 586 587
    VIR_FREE(driver.config->defaultTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->defaultTLSx509certdir, "/etc/pki/qemu") < 0)
        return EXIT_FAILURE;
588
    VIR_FREE(driver.config->vncTLSx509certdir);
589
    if (VIR_STRDUP_QUIET(driver.config->vncTLSx509certdir, "/etc/pki/libvirt-vnc") < 0)
590 591
        return EXIT_FAILURE;
    VIR_FREE(driver.config->spiceTLSx509certdir);
592
    if (VIR_STRDUP_QUIET(driver.config->spiceTLSx509certdir, "/etc/pki/libvirt-spice") < 0)
593
        return EXIT_FAILURE;
594 595 596
    VIR_FREE(driver.config->chardevTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->chardevTLSx509certdir, "/etc/pki/libvirt-chardev") < 0)
        return EXIT_FAILURE;
597 598 599
    VIR_FREE(driver.config->vxhsTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->vxhsTLSx509certdir, "/etc/pki/libvirt-vxhs") < 0)
        return EXIT_FAILURE;
600

601
    VIR_FREE(driver.config->hugetlbfs);
602
    if (VIR_ALLOC_N(driver.config->hugetlbfs, 2) < 0)
603
        return EXIT_FAILURE;
604 605 606
    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)
607
        return EXIT_FAILURE;
608 609
    driver.config->hugetlbfs[0].size = 2048;
    driver.config->hugetlbfs[0].deflt = true;
610
    driver.config->hugetlbfs[1].size = 1048576;
611
    driver.config->spiceTLS = 1;
612
    if (VIR_STRDUP_QUIET(driver.config->spicePassword, "123456") < 0)
613
        return EXIT_FAILURE;
614 615 616
    VIR_FREE(driver.config->memoryBackingDir);
    if (VIR_STRDUP_QUIET(driver.config->memoryBackingDir, "/var/lib/libvirt/qemu/ram") < 0)
        return EXIT_FAILURE;
617

618 619 620 621 622 623 624 625 626 627 628 629 630 631 632
# define DO_TEST_FULL(name, migrateFrom, migrateFd, flags, \
                      parseFlags, gic, ...) \
    do { \
        static struct testInfo info = { \
            name, NULL, migrateFrom, migrateFd, (flags), parseFlags, \
            false \
        }; \
        info.skipLegacyCPUs = skipLegacyCPUs; \
        if (testInitQEMUCaps(&info, gic) < 0) \
            return EXIT_FAILURE; \
        virQEMUCapsSetList(info.qemuCaps, __VA_ARGS__, QEMU_CAPS_LAST); \
        if (virTestRun("QEMU XML-2-ARGV " name, \
                       testCompareXMLToArgv, &info) < 0) \
            ret = -1; \
        virObjectUnref(info.qemuCaps); \
633 634
    } while (0)

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

638
# define DO_TEST_GIC(name, gic, ...) \
639 640
    DO_TEST_FULL(name, NULL, -1, 0, 0, gic, __VA_ARGS__)

641 642
# define DO_TEST_FAILURE(name, ...) \
    DO_TEST_FULL(name, NULL, -1, FLAG_EXPECT_FAILURE, \
643
                 0, GIC_NONE, __VA_ARGS__)
644

645 646 647
# define DO_TEST_PARSE_ERROR(name, ...) \
    DO_TEST_FULL(name, NULL, -1, \
                 FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE, \
648
                 0, GIC_NONE, __VA_ARGS__)
649

650 651 652
# define DO_TEST_PARSE_FLAGS_ERROR(name, parseFlags, ...) \
    DO_TEST_FULL(name, NULL, -1, \
                 FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE, \
653
                 parseFlags, GIC_NONE, __VA_ARGS__)
654

655
# define DO_TEST_LINUX(name, ...) \
656
    DO_TEST_LINUX_FULL(name, NULL, -1, 0, 0, GIC_NONE, __VA_ARGS__)
657

658 659 660 661 662 663
# 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. */
664
#  define DO_TEST_LINUX_FULL(name, ...) \
665
    DO_TEST_FULL(name, __VA_ARGS__)
666
# else  /* __linux__ */
667 668 669
#  define DO_TEST_LINUX_FULL(name, ...) \
    do { \
        const char *tmp ATTRIBUTE_UNUSED = name; \
670 671 672
    } while (0)
# endif /* __linux__ */

673
# define NONE QEMU_CAPS_LAST
674

675 676 677
    /* 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 */
678 679 680 681 682 683 684
    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");
685 686
    unsetenv("QEMU_AUDIO_DRV");
    unsetenv("SDL_AUDIODRIVER");
687

688
    DO_TEST("minimal", NONE);
689
    DO_TEST_PARSE_ERROR("minimal-no-memory", NONE);
690
    DO_TEST("minimal-msg-timestamp", QEMU_CAPS_MSG_TIMESTAMP);
691
    DO_TEST("machine-aliases1", NONE);
692
    DO_TEST("machine-aliases2", QEMU_CAPS_KVM);
693 694
    DO_TEST("machine-core-on", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_DUMP_GUEST_CORE);
695
    driver.config->dumpGuestCore = true;
696 697
    DO_TEST("machine-core-off", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_DUMP_GUEST_CORE);
698 699 700
    driver.config->dumpGuestCore = false;
    DO_TEST("machine-core-cfg-off", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_DUMP_GUEST_CORE);
701
    DO_TEST_FAILURE("machine-core-on", NONE);
702
    DO_TEST_FAILURE("machine-core-on", QEMU_CAPS_MACHINE_OPT);
M
Michal Privoznik 已提交
703 704 705
    DO_TEST("machine-smm-opt",
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
706
            QEMU_CAPS_DEVICE_IOH3420,
M
Michal Privoznik 已提交
707 708 709 710
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_SMM_OPT,
            QEMU_CAPS_VIRTIO_SCSI);
L
Li Zhang 已提交
711 712
    DO_TEST("machine-usb-opt", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_USB_OPT);
713 714
    DO_TEST("machine-vmport-opt", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_VMPORT_OPT);
715
    DO_TEST("kvm", QEMU_CAPS_MACHINE_OPT);
716 717
    DO_TEST("default-kvm-host-arch", QEMU_CAPS_MACHINE_OPT);
    DO_TEST("default-qemu-host-arch", QEMU_CAPS_MACHINE_OPT);
718
    DO_TEST("x86-kvm-32-on-64", QEMU_CAPS_MACHINE_OPT);
719 720 721
    DO_TEST("boot-cdrom", NONE);
    DO_TEST("boot-network", NONE);
    DO_TEST("boot-floppy", NONE);
722
    DO_TEST("boot-floppy-q35",
723
            QEMU_CAPS_DEVICE_IOH3420,
724
            QEMU_CAPS_ICH9_AHCI);
725
    DO_TEST("bootindex-floppy-q35",
726
            QEMU_CAPS_DEVICE_IOH3420,
727
            QEMU_CAPS_ICH9_AHCI, QEMU_CAPS_BOOT_MENU,
728
            QEMU_CAPS_BOOTINDEX);
729 730
    DO_TEST("boot-multi", QEMU_CAPS_BOOT_MENU);
    DO_TEST("boot-menu-enable",
731
            QEMU_CAPS_BOOT_MENU);
732
    DO_TEST("boot-menu-enable-bootindex",
733
            QEMU_CAPS_BOOT_MENU,
734
            QEMU_CAPS_BOOTINDEX);
735
    DO_TEST("boot-menu-enable-with-timeout",
736
            QEMU_CAPS_BOOT_MENU,
737
            QEMU_CAPS_SPLASH_TIMEOUT);
738
    DO_TEST_FAILURE("boot-menu-enable-with-timeout", QEMU_CAPS_BOOT_MENU);
739
    DO_TEST_PARSE_ERROR("boot-menu-enable-with-timeout-invalid", NONE);
740 741
    DO_TEST("boot-menu-disable", QEMU_CAPS_BOOT_MENU);
    DO_TEST("boot-menu-disable-drive",
742
            QEMU_CAPS_BOOT_MENU);
743
    DO_TEST("boot-menu-disable-drive-bootindex",
744
            QEMU_CAPS_BOOT_MENU,
745
            QEMU_CAPS_BOOTINDEX);
746
    DO_TEST_PARSE_ERROR("boot-dev+order",
747
            QEMU_CAPS_BOOTINDEX,
748
            QEMU_CAPS_VIRTIO_BLK_SCSI);
749
    DO_TEST("boot-order",
750
            QEMU_CAPS_BOOTINDEX,
751
            QEMU_CAPS_VIRTIO_BLK_SCSI);
752
    DO_TEST("boot-complex",
753
            QEMU_CAPS_DRIVE_BOOT,
754
            QEMU_CAPS_VIRTIO_BLK_SCSI);
755
    DO_TEST("boot-complex-bootindex",
756
            QEMU_CAPS_DRIVE_BOOT,
757
            QEMU_CAPS_BOOTINDEX,
758
            QEMU_CAPS_VIRTIO_BLK_SCSI);
759
    DO_TEST("boot-strict",
760
            QEMU_CAPS_DRIVE_BOOT,
761
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_BOOT_STRICT,
762
            QEMU_CAPS_VIRTIO_BLK_SCSI);
763 764 765 766 767

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

768
    DO_TEST("bios",
769
            QEMU_CAPS_DEVICE_ISA_SERIAL,
770
            QEMU_CAPS_SGA);
J
Ján Tomko 已提交
771
    DO_TEST("bios-nvram", NONE);
M
Michal Privoznik 已提交
772 773 774
    DO_TEST("bios-nvram-secure",
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
775
            QEMU_CAPS_DEVICE_IOH3420,
M
Michal Privoznik 已提交
776 777 778 779
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_SMM_OPT,
            QEMU_CAPS_VIRTIO_SCSI);
780 781 782 783 784 785 786

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

787
    DO_TEST("clock-utc", QEMU_CAPS_NODEFCONFIG);
788
    DO_TEST("clock-localtime", NONE);
789
    DO_TEST("clock-localtime-basis-localtime", QEMU_CAPS_RTC);
790 791
    DO_TEST("clock-variable", QEMU_CAPS_RTC);
    DO_TEST("clock-france", QEMU_CAPS_RTC);
792 793
    DO_TEST("clock-hpet-off", QEMU_CAPS_RTC);
    DO_TEST("clock-catchup", QEMU_CAPS_RTC);
794
    DO_TEST("cpu-kvmclock", QEMU_CAPS_ENABLE_KVM);
A
Andrea Bolognani 已提交
795
    DO_TEST("cpu-host-kvmclock", QEMU_CAPS_ENABLE_KVM);
796
    DO_TEST("kvmclock", QEMU_CAPS_KVM);
797
    DO_TEST("clock-timer-hyperv-rtc", QEMU_CAPS_KVM);
798

799 800
    DO_TEST("cpu-eoi-disabled", QEMU_CAPS_ENABLE_KVM);
    DO_TEST("cpu-eoi-enabled", QEMU_CAPS_ENABLE_KVM);
J
Ján Tomko 已提交
801
    DO_TEST("controller-order",
802 803 804 805 806 807 808 809 810 811 812
            QEMU_CAPS_KVM,
            QEMU_CAPS_ENABLE_KVM,
            QEMU_CAPS_BOOT_MENU,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_DRIVE_AIO,
            QEMU_CAPS_CCID_PASSTHRU,
            QEMU_CAPS_CHARDEV_SPICEVMC,
            QEMU_CAPS_SPICE,
            QEMU_CAPS_HDA_DUPLEX,
            QEMU_CAPS_USB_HUB,
813
            QEMU_CAPS_DEVICE_ISA_SERIAL,
814
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
815 816
    DO_TEST("eoi-disabled", NONE);
    DO_TEST("eoi-enabled", NONE);
817 818
    DO_TEST("pv-spinlock-disabled", NONE);
    DO_TEST("pv-spinlock-enabled", NONE);
M
Martin Kletzander 已提交
819
    DO_TEST("kvmclock+eoi-disabled", QEMU_CAPS_ENABLE_KVM);
820

821
    DO_TEST("hyperv", NONE);
822
    DO_TEST("hyperv-off", NONE);
823
    DO_TEST("hyperv-panic", NONE);
824

825 826 827
    DO_TEST("kvm-features", NONE);
    DO_TEST("kvm-features-off", NONE);

828 829 830
    DO_TEST("pmu-feature", NONE);
    DO_TEST("pmu-feature-off", NONE);

831
    DO_TEST("hugepages", QEMU_CAPS_MEM_PATH);
832
    DO_TEST("hugepages-numa", QEMU_CAPS_RTC,
833
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4,
834
            QEMU_CAPS_VIRTIO_SCSI,
835 836
            QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC,
837
            QEMU_CAPS_DEVICE_QXL,
838
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_USB_REDIR,
839
            QEMU_CAPS_DEVICE_PC_DIMM,
840
            QEMU_CAPS_MEM_PATH, QEMU_CAPS_OBJECT_MEMORY_FILE);
841 842 843
    DO_TEST_LINUX("hugepages-pages", QEMU_CAPS_MEM_PATH,
                  QEMU_CAPS_OBJECT_MEMORY_RAM,
                  QEMU_CAPS_OBJECT_MEMORY_FILE);
844 845 846 847
    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);
848 849 850
    DO_TEST_LINUX("hugepages-shared", QEMU_CAPS_MEM_PATH,
                  QEMU_CAPS_OBJECT_MEMORY_RAM,
                  QEMU_CAPS_OBJECT_MEMORY_FILE);
851
    DO_TEST_PARSE_ERROR("hugepages-memaccess-invalid", NONE);
852 853
    DO_TEST_FAILURE("hugepages-pages4", QEMU_CAPS_MEM_PATH,
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
854
    DO_TEST("hugepages-pages5", QEMU_CAPS_MEM_PATH);
855
    DO_TEST("hugepages-pages6", NONE);
856 857
    DO_TEST("hugepages-pages7", QEMU_CAPS_MEM_PATH,
            QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_OBJECT_MEMORY_FILE);
858 859 860
    DO_TEST("hugepages-memaccess", QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_DEVICE_PC_DIMM,
            QEMU_CAPS_NUMA);
861 862 863
    DO_TEST("hugepages-memaccess2", QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_DEVICE_PC_DIMM,
            QEMU_CAPS_NUMA);
864
    DO_TEST("nosharepages", QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_MEM_MERGE);
865
    DO_TEST("disk-cdrom", NONE);
866
    DO_TEST("disk-iscsi", NONE);
867 868 869 870 871
    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);
872
    DO_TEST("disk-cdrom-empty", NONE);
873
    DO_TEST("disk-cdrom-tray",
874
            QEMU_CAPS_VIRTIO_TX_ALG);
875 876
    DO_TEST("disk-cdrom-tray-no-device-cap", NONE);
    DO_TEST("disk-floppy", NONE);
877
    DO_TEST_FAILURE("disk-floppy-pseries", NONE);
878
    DO_TEST("disk-floppy-tray-no-device-cap", NONE);
879
    DO_TEST("disk-floppy-tray", NONE);
880
    DO_TEST("disk-virtio-s390",
881
            QEMU_CAPS_VIRTIO_S390);
882
    DO_TEST("disk-many", NONE);
883 884
    DO_TEST("disk-virtio", QEMU_CAPS_DRIVE_BOOT);
    DO_TEST("disk-virtio-ccw",
885
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
886
    DO_TEST("disk-virtio-ccw-many",
887
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
888
    DO_TEST("disk-virtio-scsi-ccw", QEMU_CAPS_VIRTIO_SCSI,
889
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
890
    DO_TEST("disk-order",
891
            QEMU_CAPS_DRIVE_BOOT, QEMU_CAPS_VIRTIO_BLK_SCSI);
L
Lin Ma 已提交
892 893
    DO_TEST("disk-virtio-drive-queues",
            QEMU_CAPS_VIRTIO_BLK_NUM_QUEUES);
894
    DO_TEST("disk-drive-boot-disk",
895
            QEMU_CAPS_DRIVE_BOOT);
896
    DO_TEST("disk-drive-boot-cdrom",
897
            QEMU_CAPS_DRIVE_BOOT);
898
    DO_TEST("floppy-drive-fat",
899
            QEMU_CAPS_DRIVE_BOOT);
900
    DO_TEST("disk-drive-readonly-disk",
901
            QEMU_CAPS_NODEFCONFIG);
902
    DO_TEST("disk-drive-readonly-no-device",
J
Ján Tomko 已提交
903
            QEMU_CAPS_NODEFCONFIG);
904
    DO_TEST("disk-drive-fmt-qcow",
905
            QEMU_CAPS_DRIVE_BOOT);
906
    DO_TEST("disk-drive-shared",
907
            QEMU_CAPS_DRIVE_SERIAL);
908
    DO_TEST_PARSE_ERROR("disk-drive-shared-qcow", NONE);
909 910
    DO_TEST("disk-drive-shared-locking",
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DISK_SHARE_RW);
911
    DO_TEST("disk-drive-error-policy-stop",
912
            QEMU_CAPS_MONITOR_JSON);
913
    DO_TEST("disk-drive-error-policy-enospace",
914
            QEMU_CAPS_MONITOR_JSON);
915
    DO_TEST("disk-drive-error-policy-wreport-rignore",
916 917 918 919
            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);
920
    DO_TEST("disk-drive-cache-directsync",
921
            QEMU_CAPS_DRIVE_CACHE_DIRECTSYNC);
922
    DO_TEST("disk-drive-cache-unsafe",
923
            QEMU_CAPS_DRIVE_CACHE_UNSAFE);
924
    DO_TEST("disk-drive-copy-on-read",
925 926 927 928 929 930 931 932
            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);
933 934
    DO_TEST_PARSE_ERROR("disk-drive-network-iscsi-auth-secrettype-invalid", NONE);
    DO_TEST_PARSE_ERROR("disk-drive-network-iscsi-auth-wrong-secrettype", NONE);
935
    DO_TEST_PARSE_ERROR("disk-drive-network-source-auth-both", NONE);
936 937
    DO_TEST("disk-drive-network-iscsi-lun",
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_VIRTIO_SCSI,
938
            QEMU_CAPS_SCSI_BLOCK);
939 940
    DO_TEST("disk-drive-network-gluster",
            QEMU_CAPS_GLUSTER_DEBUG_LEVEL);
941 942 943
    DO_TEST("disk-drive-network-rbd", NONE);
    DO_TEST("disk-drive-network-sheepdog", NONE);
    DO_TEST("disk-drive-network-rbd-auth", NONE);
944
    DO_TEST("disk-drive-network-source-auth", NONE);
945
# ifdef HAVE_GNUTLS_CIPHER_ENCRYPT
946
    DO_TEST("disk-drive-network-rbd-auth-AES",
947
            QEMU_CAPS_OBJECT_SECRET, QEMU_CAPS_VIRTIO_SCSI);
948
# endif
949 950
    DO_TEST("disk-drive-network-rbd-ipv6", NONE);
    DO_TEST_FAILURE("disk-drive-network-rbd-no-colon", NONE);
951
    DO_TEST("disk-drive-network-vxhs", QEMU_CAPS_VXHS);
952 953 954 955 956
    driver.config->vxhsTLS = 1;
    DO_TEST("disk-drive-network-tlsx509-vxhs", QEMU_CAPS_VXHS,
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
    driver.config->vxhsTLS = 0;
    VIR_FREE(driver.config->vxhsTLSx509certdir);
957
    DO_TEST("disk-drive-no-boot",
958
            QEMU_CAPS_BOOTINDEX);
959
    DO_TEST_PARSE_ERROR("disk-device-lun-type-invalid",
960 961
                        QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST_FAILURE("disk-usb-nosupport", NONE);
962
    DO_TEST("disk-usb-device",
963
            QEMU_CAPS_DEVICE_USB_STORAGE,
964
            QEMU_CAPS_NODEFCONFIG);
965
    DO_TEST("disk-usb-device-removable",
966
            QEMU_CAPS_DEVICE_USB_STORAGE,
967
            QEMU_CAPS_USB_STORAGE_REMOVABLE, QEMU_CAPS_NODEFCONFIG);
968 969
    DO_TEST_FAILURE("disk-usb-pci",
                    QEMU_CAPS_DEVICE_USB_STORAGE, QEMU_CAPS_NODEFCONFIG);
970
    DO_TEST("disk-scsi-device",
971
            QEMU_CAPS_NODEFCONFIG,
972
            QEMU_CAPS_SCSI_LSI);
973
    DO_TEST("disk-scsi-device-auto",
974
            QEMU_CAPS_NODEFCONFIG,
975
            QEMU_CAPS_SCSI_LSI);
976
    DO_TEST("disk-scsi-disk-split",
977
            QEMU_CAPS_NODEFCONFIG,
978
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI);
979
    DO_TEST("disk-scsi-disk-wwn",
980
            QEMU_CAPS_NODEFCONFIG,
981
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
982 983
            QEMU_CAPS_SCSI_DISK_WWN);
    DO_TEST("disk-scsi-disk-vpd",
984
            QEMU_CAPS_NODEFCONFIG,
985
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
986 987
            QEMU_CAPS_SCSI_DISK_WWN);
    DO_TEST_FAILURE("disk-scsi-disk-vpd-build-error",
988
            QEMU_CAPS_NODEFCONFIG,
989
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
990
            QEMU_CAPS_SCSI_DISK_WWN);
991
    DO_TEST("disk-scsi-vscsi",
992
            QEMU_CAPS_NODEFCONFIG);
993
    DO_TEST("disk-scsi-virtio-scsi",
994
            QEMU_CAPS_NODEFCONFIG,
995
            QEMU_CAPS_VIRTIO_SCSI);
996
    DO_TEST("disk-virtio-scsi-num_queues",
997
            QEMU_CAPS_NODEFCONFIG,
998
            QEMU_CAPS_VIRTIO_SCSI);
999
    DO_TEST("disk-virtio-scsi-cmd_per_lun",
1000
            QEMU_CAPS_NODEFCONFIG,
1001 1002
            QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST("disk-virtio-scsi-max_sectors",
1003
            QEMU_CAPS_NODEFCONFIG,
1004
            QEMU_CAPS_VIRTIO_SCSI);
1005
    DO_TEST("disk-virtio-scsi-ioeventfd",
1006
            QEMU_CAPS_NODEFCONFIG,
1007
            QEMU_CAPS_VIRTIO_IOEVENTFD, QEMU_CAPS_VIRTIO_SCSI);
1008
    DO_TEST("disk-scsi-megasas",
1009
            QEMU_CAPS_NODEFCONFIG,
1010
            QEMU_CAPS_SCSI_MEGASAS);
1011 1012 1013 1014
    DO_TEST("disk-scsi-mptsas1068",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_SCSI_MPTSAS1068,
            QEMU_CAPS_SCSI_DISK_WWN);
1015
    DO_TEST("disk-sata-device",
J
Jim Fehlig 已提交
1016
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_ICH9_AHCI);
1017
    DO_TEST("disk-aio",
1018
            QEMU_CAPS_DRIVE_AIO);
1019
    DO_TEST("disk-source-pool",
1020
            QEMU_CAPS_NODEFCONFIG);
1021
    DO_TEST("disk-source-pool-mode",
1022
            QEMU_CAPS_NODEFCONFIG);
1023
    DO_TEST("disk-ioeventfd",
1024
            QEMU_CAPS_VIRTIO_IOEVENTFD,
1025
            QEMU_CAPS_VIRTIO_TX_ALG,
1026
            QEMU_CAPS_VIRTIO_BLK_SCSI);
1027
    DO_TEST("disk-copy_on_read",
1028
            QEMU_CAPS_DRIVE_COPY_ON_READ,
1029
            QEMU_CAPS_VIRTIO_TX_ALG,
1030
            QEMU_CAPS_VIRTIO_BLK_SCSI);
O
Osier Yang 已提交
1031
    DO_TEST("disk-drive-discard",
1032
            QEMU_CAPS_DRIVE_DISCARD);
1033 1034 1035
    DO_TEST("disk-drive-detect-zeroes",
            QEMU_CAPS_DRIVE_DISCARD,
            QEMU_CAPS_DRIVE_DETECT_ZEROES);
1036
    DO_TEST("disk-snapshot", NONE);
1037 1038 1039
    DO_TEST_PARSE_ERROR("disk-same-targets",
                        QEMU_CAPS_SCSI_LSI,
                        QEMU_CAPS_DEVICE_USB_STORAGE, QEMU_CAPS_NODEFCONFIG);
1040 1041 1042 1043 1044 1045 1046 1047
    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);
1048
    DO_TEST("event_idx",
1049 1050
            QEMU_CAPS_VIRTIO_BLK_EVENT_IDX,
            QEMU_CAPS_VIRTIO_NET_EVENT_IDX,
1051
            QEMU_CAPS_VIRTIO_BLK_SCSI);
1052
    DO_TEST("virtio-lun",
1053
            QEMU_CAPS_VIRTIO_BLK_SCSI);
1054
    DO_TEST("disk-scsi-lun-passthrough",
1055
            QEMU_CAPS_SCSI_BLOCK,
1056
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI);
1057 1058 1059
    DO_TEST("disk-serial",
            QEMU_CAPS_KVM,
            QEMU_CAPS_DRIVE_SERIAL);
1060 1061 1062 1063 1064 1065 1066 1067
    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);
1068

1069 1070 1071 1072 1073 1074 1075 1076 1077 1078
    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);
1079
    driver.config->vncAutoUnixSocket = true;
1080 1081
    DO_TEST("graphics-vnc-auto-socket-cfg", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1082
    driver.config->vncAutoUnixSocket = false;
1083 1084 1085 1086
    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);
1087 1088
    DO_TEST("graphics-vnc-socket-new-cmdline", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA, QEMU_CAPS_VNC_MULTI_SERVERS);
1089

1090 1091
    driver.config->vncSASL = 1;
    VIR_FREE(driver.config->vncSASLdir);
1092
    ignore_value(VIR_STRDUP(driver.config->vncSASLdir, "/root/.sasl2"));
1093
    DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1094 1095
    driver.config->vncTLS = 1;
    driver.config->vncTLSx509verify = 1;
1096
    DO_TEST("graphics-vnc-tls", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1097
    driver.config->vncSASL = driver.config->vncTLSx509verify = driver.config->vncTLS = 0;
1098 1099
    VIR_FREE(driver.config->vncSASLdir);
    VIR_FREE(driver.config->vncTLSx509certdir);
1100

1101 1102 1103
    DO_TEST("graphics-sdl", QEMU_CAPS_SDL, QEMU_CAPS_DEVICE_VGA);
    DO_TEST("graphics-sdl-fullscreen", QEMU_CAPS_SDL,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1104
    DO_TEST("nographics", NONE);
P
Paolo Bonzini 已提交
1105 1106
    DO_TEST("nographics-display",
            QEMU_CAPS_DISPLAY);
1107
    DO_TEST("nographics-vga",
1108
            QEMU_CAPS_VGA_NONE);
1109
    DO_TEST("graphics-spice",
1110
            QEMU_CAPS_SPICE,
1111 1112
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
1113
    DO_TEST("graphics-spice-no-args",
1114
            QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1115 1116 1117
    driver.config->spiceSASL = 1;
    ignore_value(VIR_STRDUP(driver.config->spiceSASLdir, "/root/.sasl2"));
    DO_TEST("graphics-spice-sasl",
1118
            QEMU_CAPS_SPICE,
1119 1120 1121
            QEMU_CAPS_DEVICE_QXL);
    VIR_FREE(driver.config->spiceSASLdir);
    driver.config->spiceSASL = 0;
1122
    DO_TEST("graphics-spice-agentmouse",
1123
            QEMU_CAPS_DEVICE_QXL,
1124
            QEMU_CAPS_SPICE,
1125
            QEMU_CAPS_CHARDEV_SPICEVMC,
1126 1127
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1128
    DO_TEST("graphics-spice-compression",
1129
            QEMU_CAPS_SPICE,
1130
            QEMU_CAPS_DEVICE_QXL);
1131
    DO_TEST("graphics-spice-timeout",
1132
            QEMU_CAPS_KVM,
1133
            QEMU_CAPS_SPICE,
1134 1135
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_DEVICE_VGA);
1136
    DO_TEST("graphics-spice-qxl-vga",
1137
            QEMU_CAPS_SPICE,
1138
            QEMU_CAPS_DEVICE_QXL);
1139
    DO_TEST("graphics-spice-usb-redir",
1140
            QEMU_CAPS_SPICE,
1141 1142 1143 1144 1145 1146 1147
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_CHARDEV_SPICEVMC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1148
    DO_TEST("graphics-spice-agent-file-xfer",
1149
            QEMU_CAPS_SPICE,
1150 1151
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
1152 1153
    DO_TEST("graphics-spice-socket",
            QEMU_CAPS_SPICE,
1154 1155
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1156 1157
    DO_TEST("graphics-spice-auto-socket",
            QEMU_CAPS_SPICE,
1158 1159
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1160 1161 1162
    driver.config->spiceAutoUnixSocket = true;
    DO_TEST("graphics-spice-auto-socket-cfg",
            QEMU_CAPS_SPICE,
1163 1164
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1165
    driver.config->spiceAutoUnixSocket = false;
1166

1167 1168 1169
    DO_TEST("input-usbmouse", NONE);
    DO_TEST("input-usbtablet", NONE);
    DO_TEST("misc-acpi", NONE);
1170 1171 1172
    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);
1173
    DO_TEST_FAILURE("misc-enable-s4", NONE);
1174
    DO_TEST("misc-no-reboot", NONE);
1175
    DO_TEST("misc-uuid", NONE);
1176
    DO_TEST_PARSE_ERROR("vhost_queues-invalid", NONE);
1177
    DO_TEST("net-vhostuser", QEMU_CAPS_NETDEV);
1178
    DO_TEST("net-vhostuser-multiq",
1179 1180
            QEMU_CAPS_NETDEV, QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
    DO_TEST_FAILURE("net-vhostuser-multiq", QEMU_CAPS_NETDEV);
1181 1182 1183
    DO_TEST_FAILURE("net-vhostuser-fail",
                    QEMU_CAPS_NETDEV,
                    QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
1184
    DO_TEST("net-user", NONE);
1185
    DO_TEST("net-user-addr", QEMU_CAPS_NETDEV);
1186 1187
    DO_TEST("net-virtio", NONE);
    DO_TEST("net-virtio-device",
1188
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_VIRTIO_TX_ALG);
1189
    DO_TEST("net-virtio-disable-offloads",
1190
            QEMU_CAPS_NODEFCONFIG);
1191
    DO_TEST("net-virtio-netdev",
1192
            QEMU_CAPS_NETDEV, QEMU_CAPS_NODEFCONFIG);
1193
    DO_TEST("net-virtio-s390",
1194
            QEMU_CAPS_VIRTIO_S390);
1195
    DO_TEST("net-virtio-ccw",
1196
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1197 1198 1199
    DO_TEST("net-virtio-rxtxqueuesize",
            QEMU_CAPS_VIRTIO_NET_RX_QUEUE_SIZE,
            QEMU_CAPS_VIRTIO_NET_TX_QUEUE_SIZE);
1200
    DO_TEST_PARSE_ERROR("net-virtio-rxqueuesize-invalid-size", NONE);
1201 1202
    DO_TEST("net-eth", NONE);
    DO_TEST("net-eth-ifname", NONE);
1203
    DO_TEST("net-eth-names", NONE);
1204
    DO_TEST("net-eth-hostip", NONE);
1205 1206 1207
    DO_TEST("net-client", NONE);
    DO_TEST("net-server", NONE);
    DO_TEST("net-mcast", NONE);
1208
    DO_TEST("net-udp", NONE);
1209
    DO_TEST("net-hostdev",
J
Ján Tomko 已提交
1210
            QEMU_CAPS_NODEFCONFIG);
1211
    DO_TEST("net-hostdev-multidomain",
J
Ján Tomko 已提交
1212
            QEMU_CAPS_NODEFCONFIG,
1213 1214 1215
            QEMU_CAPS_HOST_PCI_MULTIDOMAIN);
    DO_TEST_FAILURE("net-hostdev-multidomain",
                    QEMU_CAPS_NODEFCONFIG);
1216
    DO_TEST("net-hostdev-vfio",
J
Ján Tomko 已提交
1217
            QEMU_CAPS_NODEFCONFIG,
1218
            QEMU_CAPS_DEVICE_VFIO_PCI);
1219
    DO_TEST("net-hostdev-vfio-multidomain",
J
Ján Tomko 已提交
1220
            QEMU_CAPS_NODEFCONFIG,
1221 1222 1223
            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);
1224 1225 1226 1227
    DO_TEST_FAILURE("net-hostdev-fail",
                    QEMU_CAPS_NODEFCONFIG,
                    QEMU_CAPS_DEVICE_VFIO_PCI);

1228

1229 1230
    DO_TEST("serial-file-log",
            QEMU_CAPS_CHARDEV_FILE_APPEND,
1231
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1232
            QEMU_CAPS_CHARDEV_LOGFILE);
1233
    DO_TEST("serial-spiceport",
1234 1235
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1236
            QEMU_CAPS_DEVICE_QXL,
1237
            QEMU_CAPS_SPICE,
1238
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1239
            QEMU_CAPS_CHARDEV_SPICEPORT);
1240
    DO_TEST("serial-spiceport-nospice", NONE);
1241

1242 1243 1244 1245
    DO_TEST("console-compat",
            QEMU_CAPS_DEVICE_ISA_SERIAL);
    DO_TEST("console-compat-auto",
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1246 1247

    DO_TEST("serial-vc-chardev",
1248
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1249
            QEMU_CAPS_NODEFCONFIG);
1250
    DO_TEST("serial-pty-chardev",
1251
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1252
            QEMU_CAPS_NODEFCONFIG);
1253
    DO_TEST("serial-dev-chardev",
1254
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1255
            QEMU_CAPS_NODEFCONFIG);
1256
    DO_TEST("serial-dev-chardev-iobase",
1257
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1258
            QEMU_CAPS_NODEFCONFIG);
1259
    DO_TEST("serial-file-chardev",
1260
            QEMU_CAPS_NODEFCONFIG,
1261
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1262
            QEMU_CAPS_CHARDEV_FILE_APPEND);
1263
    DO_TEST("serial-unix-chardev",
1264
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1265
            QEMU_CAPS_NODEFCONFIG);
1266
    DO_TEST("serial-tcp-chardev",
1267
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1268
            QEMU_CAPS_NODEFCONFIG);
1269
    DO_TEST("serial-udp-chardev",
1270
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1271
            QEMU_CAPS_NODEFCONFIG);
1272
    DO_TEST("serial-tcp-telnet-chardev",
1273
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1274
            QEMU_CAPS_NODEFCONFIG);
1275 1276
    driver.config->chardevTLS = 1;
    DO_TEST("serial-tcp-tlsx509-chardev",
1277
            QEMU_CAPS_NODEFCONFIG,
1278
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1279
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1280 1281
    driver.config->chardevTLSx509verify = 1;
    DO_TEST("serial-tcp-tlsx509-chardev-verify",
1282
            QEMU_CAPS_NODEFCONFIG,
1283
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1284 1285
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
    driver.config->chardevTLSx509verify = 0;
1286
    DO_TEST("serial-tcp-tlsx509-chardev-notls",
1287
            QEMU_CAPS_NODEFCONFIG,
1288
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1289
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1290 1291 1292 1293 1294 1295 1296 1297
    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",
1298
            QEMU_CAPS_NODEFCONFIG,
1299
            QEMU_CAPS_OBJECT_SECRET,
1300
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1301 1302 1303
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
# else
    DO_TEST_FAILURE("serial-tcp-tlsx509-secret-chardev",
1304
                    QEMU_CAPS_NODEFCONFIG,
1305
                    QEMU_CAPS_OBJECT_SECRET,
1306
                    QEMU_CAPS_DEVICE_ISA_SERIAL,
1307 1308
                    QEMU_CAPS_OBJECT_TLS_CREDS_X509);
# endif
1309 1310
    driver.config->chardevTLS = 0;
    VIR_FREE(driver.config->chardevTLSx509certdir);
1311
    DO_TEST("serial-many-chardev",
1312
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1313
            QEMU_CAPS_NODEFCONFIG);
1314
    DO_TEST("parallel-tcp-chardev",
1315
            QEMU_CAPS_NODEFCONFIG);
1316
    DO_TEST("parallel-parport-chardev",
1317
            QEMU_CAPS_NODEFCONFIG);
1318
    DO_TEST("console-compat-chardev",
1319
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1320
            QEMU_CAPS_NODEFCONFIG);
M
Michal Privoznik 已提交
1321
    DO_TEST("pci-serial-dev-chardev",
1322
            QEMU_CAPS_NODEFCONFIG,
M
Michal Privoznik 已提交
1323
            QEMU_CAPS_DEVICE_PCI_SERIAL);
1324

1325
    DO_TEST("channel-guestfwd",
1326
            QEMU_CAPS_NODEFCONFIG);
1327
    DO_TEST("channel-virtio",
1328
            QEMU_CAPS_NODEFCONFIG);
1329
    DO_TEST("channel-virtio-state",
1330
            QEMU_CAPS_NODEFCONFIG);
1331
    DO_TEST("channel-virtio-auto",
1332
            QEMU_CAPS_NODEFCONFIG);
1333
    DO_TEST("channel-virtio-autoassign",
1334
            QEMU_CAPS_NODEFCONFIG);
J
Ján Tomko 已提交
1335
    DO_TEST("channel-virtio-autoadd",
1336
            QEMU_CAPS_NODEFCONFIG);
1337
    DO_TEST("console-virtio",
1338
            QEMU_CAPS_NODEFCONFIG);
1339
    DO_TEST("console-virtio-many",
1340
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1341
            QEMU_CAPS_NODEFCONFIG);
1342
    DO_TEST("console-virtio-s390",
1343 1344 1345
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_VIRTIO_S390);
1346
    DO_TEST("console-virtio-ccw",
1347 1348 1349
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_VIRTIO_CCW,
1350
            QEMU_CAPS_VIRTIO_S390);
1351
    DO_TEST("console-sclp",
1352 1353
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_VIRTIO_S390,
1354
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
1355
    DO_TEST("channel-spicevmc",
1356
            QEMU_CAPS_NODEFCONFIG,
1357 1358
            QEMU_CAPS_SPICE,
            QEMU_CAPS_CHARDEV_SPICEVMC,
1359
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1360
    DO_TEST("channel-spicevmc-old",
1361
            QEMU_CAPS_NODEFCONFIG,
1362 1363
            QEMU_CAPS_SPICE,
            QEMU_CAPS_DEVICE_SPICEVMC,
1364
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1365
    DO_TEST("channel-virtio-default",
1366 1367 1368
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_SPICE,
            QEMU_CAPS_CHARDEV_SPICEVMC);
1369
    DO_TEST("channel-virtio-unix",
1370
            QEMU_CAPS_NODEFCONFIG);
1371

1372
    DO_TEST("smartcard-host",
1373 1374
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_CCID_EMULATED);
1375
    DO_TEST("smartcard-host-certificates",
1376 1377
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_CCID_EMULATED);
1378
    DO_TEST("smartcard-passthrough-tcp",
1379 1380
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_CCID_PASSTHRU);
1381
    DO_TEST("smartcard-passthrough-spicevmc",
1382 1383 1384
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_CCID_PASSTHRU,
            QEMU_CAPS_CHARDEV_SPICEVMC);
1385
    DO_TEST("smartcard-controller",
1386 1387
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_CCID_EMULATED);
1388

1389 1390 1391 1392 1393 1394 1395 1396 1397 1398
    DO_TEST("chardev-reconnect",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_CHARDEV_RECONNECT,
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD,
            QEMU_CAPS_CCID_PASSTHRU);
    DO_TEST_PARSE_ERROR("chardev-reconnect-invalid-timeout",
                        QEMU_CAPS_NODEFCONFIG,
                        QEMU_CAPS_CHARDEV_RECONNECT);
1399 1400 1401
    DO_TEST_PARSE_ERROR("chardev-reconnect-generated-path",
                        QEMU_CAPS_NODEFCONFIG,
                        QEMU_CAPS_CHARDEV_RECONNECT);
1402

1403
    DO_TEST("usb-controller",
1404
            QEMU_CAPS_NODEFCONFIG);
1405
    DO_TEST("usb-piix3-controller",
1406 1407 1408
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_NODEFCONFIG);
1409
    DO_TEST("usb-ich9-ehci-addr",
1410 1411 1412
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1);
1413
    DO_TEST("input-usbmouse-addr",
1414
            QEMU_CAPS_NODEFCONFIG);
1415
    DO_TEST("usb-ich9-companion",
1416 1417 1418
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1);
1419
    DO_TEST_PARSE_ERROR("usb-ich9-no-companion",
1420 1421 1422
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1);
1423
    DO_TEST("usb-ich9-autoassign",
1424 1425 1426
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
1427
            QEMU_CAPS_USB_HUB);
1428
    DO_TEST("usb-hub",
1429
            QEMU_CAPS_USB_HUB,
M
Marc-André Lureau 已提交
1430
            QEMU_CAPS_NODEFCONFIG);
1431
    DO_TEST("usb-hub-autoadd",
1432
            QEMU_CAPS_USB_HUB,
1433
            QEMU_CAPS_NODEFCONFIG);
1434
    DO_TEST("usb-hub-autoadd-deluxe",
1435
            QEMU_CAPS_USB_HUB,
1436
            QEMU_CAPS_NODEFCONFIG);
J
Ján Tomko 已提交
1437
    DO_TEST_PARSE_ERROR("usb-hub-conflict",
1438
            QEMU_CAPS_USB_HUB,
J
Ján Tomko 已提交
1439
            QEMU_CAPS_NODEFCONFIG);
1440
    DO_TEST_PARSE_ERROR("usb-hub-nonexistent",
1441
            QEMU_CAPS_USB_HUB,
1442
            QEMU_CAPS_NODEFCONFIG);
J
Ján Tomko 已提交
1443
    DO_TEST("usb-port-missing",
1444
            QEMU_CAPS_USB_HUB,
J
Ján Tomko 已提交
1445
            QEMU_CAPS_NODEFCONFIG);
1446 1447 1448
    DO_TEST_FAILURE("usb-bus-missing",
                    QEMU_CAPS_USB_HUB,
                    QEMU_CAPS_NODEFCONFIG);
1449
    DO_TEST("usb-ports",
1450
            QEMU_CAPS_USB_HUB,
1451
            QEMU_CAPS_NODEFCONFIG);
1452
    DO_TEST_PARSE_ERROR("usb-ports-out-of-range",
1453
            QEMU_CAPS_USB_HUB,
1454
            QEMU_CAPS_NODEFCONFIG);
1455
    DO_TEST("usb-port-autoassign",
1456
            QEMU_CAPS_USB_HUB,
1457
            QEMU_CAPS_NODEFCONFIG);
1458
    DO_TEST("usb-redir",
1459 1460 1461 1462 1463 1464 1465
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE,
            QEMU_CAPS_CHARDEV_SPICEVMC);
1466
    DO_TEST("usb-redir-boot",
1467 1468 1469 1470 1471 1472 1473 1474
            QEMU_CAPS_NODEFCONFIG,
            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,
1475
            QEMU_CAPS_USB_REDIR_BOOTINDEX);
1476
    DO_TEST("usb-redir-filter",
1477 1478 1479 1480 1481 1482 1483
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE,
            QEMU_CAPS_CHARDEV_SPICEVMC,
1484
            QEMU_CAPS_USB_REDIR_FILTER);
1485
    DO_TEST("usb-redir-filter-version",
1486
            QEMU_CAPS_NODEFCONFIG,
1487
            QEMU_CAPS_USB_REDIR,
1488 1489
            QEMU_CAPS_SPICE,
            QEMU_CAPS_CHARDEV_SPICEVMC,
1490
            QEMU_CAPS_USB_REDIR_FILTER);
1491
    DO_TEST("usb1-usb2",
1492 1493 1494 1495 1496
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1);
1497
    DO_TEST("usb-none",
1498
            QEMU_CAPS_NODEFCONFIG);
1499
    DO_TEST_PARSE_ERROR("usb-none-other",
1500
            QEMU_CAPS_NODEFCONFIG);
1501
    DO_TEST_PARSE_ERROR("usb-none-hub",
1502
            QEMU_CAPS_NODEFCONFIG,
1503 1504
            QEMU_CAPS_USB_HUB);
    DO_TEST_PARSE_ERROR("usb-none-usbtablet",
1505
            QEMU_CAPS_NODEFCONFIG);
1506
    DO_TEST("usb-controller-default-q35",
1507
            QEMU_CAPS_DEVICE_IOH3420,
1508 1509 1510
            QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI);
1511
    DO_TEST_FAILURE("usb-controller-default-unavailable-q35",
1512
                    QEMU_CAPS_DEVICE_IOH3420,
1513
                    QEMU_CAPS_PCI_OHCI,
1514 1515
                    QEMU_CAPS_NEC_USB_XHCI);
    DO_TEST("usb-controller-explicit-q35",
1516
            QEMU_CAPS_DEVICE_IOH3420,
1517 1518 1519
            QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI);
1520
    DO_TEST_FAILURE("usb-controller-explicit-unavailable-q35",
1521
                    QEMU_CAPS_DEVICE_IOH3420,
1522
                    QEMU_CAPS_PCI_OHCI,
1523
                    QEMU_CAPS_PIIX3_USB_UHCI);
1524
    DO_TEST("usb-controller-xhci",
1525 1526 1527 1528
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_NEC_USB_XHCI_PORTS);
1529
    DO_TEST("usb-xhci-autoassign",
1530 1531 1532 1533
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_NEC_USB_XHCI_PORTS,
1534
            QEMU_CAPS_USB_HUB);
1535
    DO_TEST_PARSE_ERROR("usb-controller-xhci-limit",
1536 1537 1538 1539
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_NEC_USB_XHCI_PORTS);
1540 1541 1542 1543
    DO_TEST("usb-controller-qemu-xhci", QEMU_CAPS_DEVICE_QEMU_XHCI);
    DO_TEST_FAILURE("usb-controller-qemu-xhci-unavailable", NONE);
    DO_TEST_PARSE_ERROR("usb-controller-qemu-xhci-limit",
                        QEMU_CAPS_DEVICE_QEMU_XHCI);
1544

1545
    DO_TEST("smbios", QEMU_CAPS_SMBIOS_TYPE);
1546
    DO_TEST_PARSE_ERROR("smbios-date", QEMU_CAPS_SMBIOS_TYPE);
1547
    DO_TEST_PARSE_ERROR("smbios-uuid-match", QEMU_CAPS_SMBIOS_TYPE);
1548

1549
    DO_TEST("watchdog", NONE);
1550
    DO_TEST("watchdog-device", QEMU_CAPS_NODEFCONFIG);
1551
    DO_TEST("watchdog-dump", NONE);
1552
    DO_TEST("watchdog-injectnmi", NONE);
1553
    DO_TEST("watchdog-diag288",
1554
            QEMU_CAPS_NODEFCONFIG,
1555
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390);
1556 1557
    DO_TEST("balloon-device", QEMU_CAPS_NODEFCONFIG);
    DO_TEST("balloon-device-deflate", QEMU_CAPS_NODEFCONFIG,
1558
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1559
    DO_TEST("balloon-ccw-deflate", QEMU_CAPS_NODEFCONFIG,
1560
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1561
    DO_TEST("balloon-mmio-deflate", QEMU_CAPS_NODEFCONFIG,
1562 1563
            QEMU_CAPS_DTB, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1564
    DO_TEST("balloon-device-deflate-off", QEMU_CAPS_NODEFCONFIG,
1565
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1566
    DO_TEST("balloon-device-auto",
1567 1568
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("balloon-device-period", QEMU_CAPS_NODEFCONFIG);
1569 1570
    DO_TEST("sound", NONE);
    DO_TEST("sound-device",
1571
            QEMU_CAPS_NODEFCONFIG,
1572
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_HDA_MICRO,
1573 1574
            QEMU_CAPS_DEVICE_ICH9_INTEL_HDA,
            QEMU_CAPS_OBJECT_USB_AUDIO);
1575
    DO_TEST("fs9p",
1576
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_FSDEV,
1577
            QEMU_CAPS_FSDEV_WRITEOUT);
1578
    DO_TEST("fs9p-ccw",
1579
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_FSDEV,
1580
            QEMU_CAPS_FSDEV_WRITEOUT,
1581
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1582

1583 1584
    DO_TEST("hostdev-usb-address", NONE);
    DO_TEST("hostdev-usb-address-device",
1585 1586
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("hostdev-usb-address-device-boot",
1587 1588
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_USB_HOST_BOOTINDEX);
J
Ján Tomko 已提交
1589
    DO_TEST("hostdev-pci-address", NONE);
1590
    DO_TEST("hostdev-pci-address-device",
J
Ján Tomko 已提交
1591
            QEMU_CAPS_NODEFCONFIG);
1592
    DO_TEST("hostdev-vfio",
J
Ján Tomko 已提交
1593
            QEMU_CAPS_NODEFCONFIG,
1594
            QEMU_CAPS_DEVICE_VFIO_PCI);
1595
    DO_TEST("hostdev-vfio-multidomain",
J
Ján Tomko 已提交
1596
            QEMU_CAPS_NODEFCONFIG,
1597
            QEMU_CAPS_DEVICE_VFIO_PCI, QEMU_CAPS_HOST_PCI_MULTIDOMAIN);
1598 1599 1600 1601 1602 1603 1604 1605 1606
    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);
1607 1608
    DO_TEST_FAILURE("hostdev-vfio-multidomain",
                    QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VFIO_PCI);
1609
    DO_TEST("pci-rom",
J
Ján Tomko 已提交
1610
            QEMU_CAPS_NODEFCONFIG);
1611

1612 1613 1614 1615
    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);
1616

1617
    DO_TEST_LINUX_FULL("migrate-numa-unaligned", "stdio", 7, 0, 0, GIC_NONE,
1618
                       QEMU_CAPS_NUMA,
1619 1620
                       QEMU_CAPS_OBJECT_MEMORY_RAM);

1621
    DO_TEST("qemu-ns", NONE);
1622
    DO_TEST("qemu-ns-no-env", NONE);
1623
    DO_TEST("qemu-ns-alt", NONE);
1624

1625
    DO_TEST("smp", NONE);
1626

J
John Ferlan 已提交
1627
    DO_TEST("iothreads", QEMU_CAPS_OBJECT_IOTHREAD);
1628 1629
    DO_TEST("iothreads-ids", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-ids-partial", QEMU_CAPS_OBJECT_IOTHREAD);
1630
    DO_TEST_FAILURE("iothreads-nocap", NONE);
1631 1632
    DO_TEST("iothreads-disk", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-disk-virtio-ccw", QEMU_CAPS_OBJECT_IOTHREAD,
1633
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1634 1635 1636 1637 1638 1639
    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 已提交
1640

1641 1642
    DO_TEST("cpu-topology1", NONE);
    DO_TEST("cpu-topology2", NONE);
1643
    DO_TEST("cpu-topology3", NONE);
1644 1645 1646 1647 1648 1649 1650 1651
    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);
1652
    DO_TEST("cpu-numa1", NONE);
1653 1654
    DO_TEST("cpu-numa2", NONE);
    DO_TEST("cpu-numa-no-memory-element", NONE);
1655
    DO_TEST_PARSE_ERROR("cpu-numa3", NONE);
1656 1657
    DO_TEST_FAILURE("cpu-numa-disjoint", NONE);
    DO_TEST("cpu-numa-disjoint", QEMU_CAPS_NUMA);
1658 1659
    DO_TEST_FAILURE("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_RAM);
    DO_TEST_FAILURE("cpu-numa-memshared", NONE);
1660
    DO_TEST("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_FILE);
1661
    DO_TEST("cpu-host-model", NONE);
1662
    DO_TEST("cpu-host-model-vendor", NONE);
1663
    skipLegacyCPUs = true;
1664
    DO_TEST("cpu-host-model-fallback", NONE);
1665
    DO_TEST_FAILURE("cpu-host-model-nofallback", NONE);
1666
    skipLegacyCPUs = false;
A
Andrea Bolognani 已提交
1667
    DO_TEST("cpu-host-passthrough", QEMU_CAPS_KVM);
1668
    DO_TEST_FAILURE("cpu-host-passthrough", NONE);
A
Andrea Bolognani 已提交
1669
    DO_TEST_FAILURE("cpu-qemu-host-passthrough", QEMU_CAPS_KVM);
1670

1671 1672
    qemuTestSetHostArch(driver.caps, VIR_ARCH_S390X);
    DO_TEST("cpu-s390-zEC12", QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1673 1674
    DO_TEST("cpu-s390-features", QEMU_CAPS_KVM, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION);
    DO_TEST_FAILURE("cpu-s390-features", QEMU_CAPS_KVM);
1675 1676
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);

1677
    qemuTestSetHostCPU(driver.caps, cpuHaswell);
1678 1679 1680 1681
    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);
1682
    DO_TEST("cpu-host-model-cmt", NONE);
1683
    DO_TEST("cpu-tsc-frequency", QEMU_CAPS_KVM);
1684
    qemuTestSetHostCPU(driver.caps, NULL);
1685

1686
    DO_TEST("encrypted-disk", NONE);
J
John Ferlan 已提交
1687
    DO_TEST("encrypted-disk-usage", NONE);
1688
# ifdef HAVE_GNUTLS_CIPHER_ENCRYPT
1689
    DO_TEST("luks-disks", QEMU_CAPS_OBJECT_SECRET);
1690
    DO_TEST("luks-disks-source", QEMU_CAPS_OBJECT_SECRET);
1691 1692 1693
# else
    DO_TEST_FAILURE("luks-disks", QEMU_CAPS_OBJECT_SECRET);
# endif
1694
    DO_TEST_PARSE_ERROR("luks-disk-invalid", NONE);
1695
    DO_TEST_PARSE_ERROR("luks-disks-source-both", QEMU_CAPS_OBJECT_SECRET);
1696

1697 1698 1699 1700 1701 1702 1703 1704
    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);
1705
    DO_TEST("cputune-numatune",
1706
            QEMU_CAPS_KVM,
1707
            QEMU_CAPS_OBJECT_IOTHREAD,
1708 1709
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1710 1711 1712
    DO_TEST("vcpu-placement-static",
            QEMU_CAPS_KVM,
            QEMU_CAPS_OBJECT_IOTHREAD);
1713

1714
    DO_TEST("numatune-memory", NONE);
1715
    DO_TEST_PARSE_ERROR("numatune-memory-invalid-nodeset", NONE);
1716 1717
    DO_TEST_LINUX("numatune-memnode", QEMU_CAPS_NUMA,
                  QEMU_CAPS_OBJECT_MEMORY_RAM);
1718 1719
    DO_TEST_FAILURE("numatune-memnode", NONE);

1720 1721
    DO_TEST_LINUX("numatune-memnode-no-memory", QEMU_CAPS_NUMA,
                  QEMU_CAPS_OBJECT_MEMORY_RAM);
1722 1723
    DO_TEST_FAILURE("numatune-memnode-no-memory", NONE);

1724 1725
    DO_TEST("numatune-distances", QEMU_CAPS_NUMA, QEMU_CAPS_NUMA_DIST);

1726
    DO_TEST("numatune-auto-nodeset-invalid", NONE);
1727 1728
    DO_TEST("numatune-auto-prefer", QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1729 1730
    DO_TEST_FAILURE("numatune-static-nodeset-exceed-hostnode",
                    QEMU_CAPS_OBJECT_MEMORY_RAM);
1731 1732
    DO_TEST_PARSE_ERROR("numatune-memnode-nocpu", NONE);
    DO_TEST_PARSE_ERROR("numatune-memnodes-problematic", NONE);
1733 1734
    DO_TEST("numad", NONE);
    DO_TEST("numad-auto-vcpu-static-numatune", NONE);
1735
    DO_TEST_PARSE_ERROR("numad-auto-vcpu-static-numatune-no-nodeset", NONE);
1736 1737 1738
    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);
1739
    DO_TEST("blkdeviotune",
1740
            QEMU_CAPS_DRIVE_IOTUNE);
1741
    DO_TEST("blkdeviotune-max",
1742
            QEMU_CAPS_DRIVE_IOTUNE,
1743
            QEMU_CAPS_DRIVE_IOTUNE_MAX);
1744 1745 1746 1747
    DO_TEST("blkdeviotune-group-num",
            QEMU_CAPS_DRIVE_IOTUNE,
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_GROUP);
1748 1749 1750 1751
    DO_TEST("blkdeviotune-max-length",
            QEMU_CAPS_DRIVE_IOTUNE,
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_MAX_LENGTH);
1752

1753
    DO_TEST("multifunction-pci-device",
1754
            QEMU_CAPS_NODEFCONFIG,
1755
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_SCSI_LSI);
1756

1757
    DO_TEST("monitor-json",
1758 1759
            QEMU_CAPS_MONITOR_JSON,
            QEMU_CAPS_NODEFCONFIG);
1760
    DO_TEST("no-shutdown",
1761 1762
            QEMU_CAPS_MONITOR_JSON,
            QEMU_CAPS_NODEFCONFIG,
1763
            QEMU_CAPS_NO_SHUTDOWN);
1764

1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776
    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);
1777

1778
    DO_TEST("pseries-basic",
1779
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1780
            QEMU_CAPS_NODEFCONFIG);
1781
    DO_TEST("pseries-vio",
1782
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1783
            QEMU_CAPS_NODEFCONFIG);
1784
    DO_TEST("pseries-usb-default",
1785
            QEMU_CAPS_NODEFCONFIG,
1786
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1787 1788 1789
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION);
1790
    DO_TEST("pseries-usb-multi",
1791
            QEMU_CAPS_NODEFCONFIG,
1792
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1793 1794 1795
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION);
1796
    DO_TEST("pseries-vio-user-assigned",
1797
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1798
            QEMU_CAPS_NODEFCONFIG);
1799
    DO_TEST_PARSE_ERROR("pseries-vio-address-clash",
1800
            QEMU_CAPS_NODEFCONFIG);
1801
    DO_TEST("pseries-nvram", QEMU_CAPS_DEVICE_NVRAM);
1802
    DO_TEST("pseries-usb-kbd", QEMU_CAPS_PCI_OHCI,
1803
            QEMU_CAPS_DEVICE_USB_KBD,
1804
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1805
            QEMU_CAPS_NODEFCONFIG);
1806
    DO_TEST("pseries-cpu-exact",
1807
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1808
            QEMU_CAPS_NODEFCONFIG);
1809 1810
    DO_TEST_PARSE_ERROR("pseries-no-parallel",
            QEMU_CAPS_NODEFCONFIG);
1811 1812

    qemuTestSetHostArch(driver.caps, VIR_ARCH_PPC64);
A
Andrea Bolognani 已提交
1813
    DO_TEST("pseries-cpu-compat", QEMU_CAPS_KVM,
1814
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1815
            QEMU_CAPS_NODEFCONFIG);
A
Andrea Bolognani 已提交
1816
    DO_TEST("pseries-cpu-le", QEMU_CAPS_KVM,
1817
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1818
            QEMU_CAPS_NODEFCONFIG);
1819 1820 1821 1822
    DO_TEST_FAILURE("pseries-cpu-compat-power9", QEMU_CAPS_KVM);

    qemuTestSetHostCPU(driver.caps, cpuPower9);
    DO_TEST("pseries-cpu-compat-power9",
1823
            QEMU_CAPS_KVM,
1824
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1825
            QEMU_CAPS_NODEFCONFIG);
1826 1827
    qemuTestSetHostCPU(driver.caps, NULL);

1828 1829
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);

1830
    DO_TEST("pseries-panic-missing",
1831
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1832
            QEMU_CAPS_NODEFCONFIG);
1833
    DO_TEST("pseries-panic-no-address",
1834
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1835
            QEMU_CAPS_NODEFCONFIG);
1836
    DO_TEST_FAILURE("pseries-panic-address",
1837
                    QEMU_CAPS_NODEFCONFIG);
1838 1839 1840 1841 1842 1843 1844

    DO_TEST("pseries-phb-simple",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
    DO_TEST("pseries-phb-default-missing",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
1845 1846 1847 1848 1849 1850
    DO_TEST("pseries-phb-numa-node",
            QEMU_CAPS_NUMA,
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_SPAPR_PCI_HOST_BRIDGE_NUMA_NODE);
    DO_TEST_PARSE_ERROR("pseries-default-phb-numa-node", NONE);
1851 1852 1853
    DO_TEST_PARSE_ERROR("pseries-phb-invalid-target-index-1", NONE);
    DO_TEST_PARSE_ERROR("pseries-phb-invalid-target-index-2", NONE);
    DO_TEST_PARSE_ERROR("pseries-phb-invalid-target-index-3", NONE);
1854

1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885
    DO_TEST("pseries-many-devices",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST("pseries-many-buses-1",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST("pseries-many-buses-2",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST("pseries-hostdevs-1",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_HOST_PCI_MULTIDOMAIN,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST("pseries-hostdevs-2",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_HOST_PCI_MULTIDOMAIN,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST("pseries-hostdevs-3",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_HOST_PCI_MULTIDOMAIN,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VFIO_PCI);

1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897
    DO_TEST("pseries-hpt-resizing",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);
    DO_TEST_FAILURE("pseries-hpt-resizing",
                    QEMU_CAPS_NODEFCONFIG,
                    QEMU_CAPS_MACHINE_OPT);
    DO_TEST_PARSE_ERROR("pseries-hpt-resizing-invalid-machine",
                        QEMU_CAPS_NODEFCONFIG,
                        QEMU_CAPS_MACHINE_OPT,
                        QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);

1898 1899 1900 1901 1902 1903 1904 1905 1906
    DO_TEST("pseries-serial-native",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial+console-native",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial-compat",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1907 1908 1909 1910 1911 1912 1913
    DO_TEST("pseries-serial-pci",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_PCI_SERIAL);
    DO_TEST("pseries-serial-usb",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_QEMU_XHCI,
            QEMU_CAPS_DEVICE_USB_SERIAL);
1914 1915 1916 1917 1918 1919 1920
    DO_TEST("pseries-console-native",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-console-virtio",
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST_PARSE_ERROR("pseries-serial-invalid-machine", NONE);

1921
    DO_TEST("mach-virt-serial-native",
1922
            QEMU_CAPS_DEVICE_PL011,
1923 1924
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("mach-virt-serial+console-native",
1925
            QEMU_CAPS_DEVICE_PL011,
1926 1927
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("mach-virt-serial-compat",
1928
            QEMU_CAPS_DEVICE_PL011,
1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("mach-virt-serial-pci",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_SERIAL);
    DO_TEST("mach-virt-serial-usb",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT,
            QEMU_CAPS_DEVICE_QEMU_XHCI,
            QEMU_CAPS_DEVICE_USB_SERIAL);
    DO_TEST("mach-virt-console-native",
1946
            QEMU_CAPS_DEVICE_PL011,
1947 1948 1949 1950 1951
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("mach-virt-console-virtio",
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST_PARSE_ERROR("mach-virt-serial-invalid-machine", NONE);

1952
    DO_TEST("disk-ide-drive-split",
1953
            QEMU_CAPS_NODEFCONFIG,
1954
            QEMU_CAPS_IDE_CD);
1955
    DO_TEST("disk-ide-wwn",
1956
            QEMU_CAPS_IDE_CD,
1957
            QEMU_CAPS_DRIVE_SERIAL, QEMU_CAPS_IDE_DRIVE_WWN);
1958

1959
    DO_TEST("disk-geometry", NONE);
V
Viktor Mihajlovski 已提交
1960
    DO_TEST("disk-blockio",
1961
            QEMU_CAPS_NODEFCONFIG,
V
Viktor Mihajlovski 已提交
1962
            QEMU_CAPS_IDE_CD, QEMU_CAPS_BLOCKIO);
1963

1964
    DO_TEST("video-device-pciaddr-default",
1965 1966
            QEMU_CAPS_KVM,
            QEMU_CAPS_VNC,
1967
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1968
            QEMU_CAPS_DEVICE_QXL);
1969
    DO_TEST("video-vga-nodevice", QEMU_CAPS_DEVICE_VGA);
1970
    DO_TEST("video-vga-device", QEMU_CAPS_DEVICE_VGA,
1971
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1972
    DO_TEST("video-vga-device-vgamem", QEMU_CAPS_DEVICE_VGA,
1973
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_VGA_VGAMEM);
1974
    DO_TEST("video-qxl-nodevice", QEMU_CAPS_DEVICE_QXL);
1975
    DO_TEST("video-qxl-device",
1976
            QEMU_CAPS_DEVICE_QXL,
1977
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1978
    DO_TEST("video-qxl-device-vgamem",
1979
            QEMU_CAPS_DEVICE_QXL,
1980
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1981 1982
            QEMU_CAPS_QXL_VGAMEM);
    DO_TEST("video-qxl-sec-device",
1983
            QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1984
    DO_TEST("video-qxl-sec-device-vgamem",
1985 1986
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1987
            QEMU_CAPS_QXL_VGAMEM);
1988 1989 1990
    DO_TEST("video-qxl-heads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
1991
            QEMU_CAPS_QXL_MAX_OUTPUTS);
1992 1993 1994
    DO_TEST("video-vga-qxl-heads",
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_QXL_MAX_OUTPUTS);
1995 1996 1997
    DO_TEST("video-qxl-noheads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
1998
            QEMU_CAPS_QXL_MAX_OUTPUTS);
M
Marc-André Lureau 已提交
1999
    DO_TEST("video-virtio-gpu-device",
2000
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
M
Marc-André Lureau 已提交
2001
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2002
    DO_TEST("video-virtio-gpu-virgl",
2003
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
2004
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
2005
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2006 2007
    DO_TEST("video-virtio-gpu-spice-gl",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
2008
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
2009 2010
            QEMU_CAPS_SPICE,
            QEMU_CAPS_SPICE_GL,
2011
            QEMU_CAPS_SPICE_RENDERNODE,
2012
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2013 2014 2015
    DO_TEST("video-virtio-gpu-secondary",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2016 2017 2018
    DO_TEST("video-virtio-vga",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIRTIO_VGA,
2019 2020
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_GPU_MAX_OUTPUTS);
2021
    DO_TEST_PARSE_ERROR("video-invalid", NONE);
2022

2023 2024
    DO_TEST("virtio-rng-default",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2025
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2026 2027
    DO_TEST("virtio-rng-random",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2028
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2029 2030
    DO_TEST("virtio-rng-egd",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2031
            QEMU_CAPS_OBJECT_RNG_EGD);
2032 2033 2034 2035
    DO_TEST("virtio-rng-multiple",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2036
    DO_TEST_PARSE_ERROR("virtio-rng-egd-crash",
2037 2038
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD);
2039
    DO_TEST("virtio-rng-ccw",
2040 2041 2042 2043 2044
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2045
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2046

2047
    DO_TEST("s390-allow-bogus-usb-none",
2048 2049 2050 2051 2052
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2053
    DO_TEST("s390-allow-bogus-usb-controller",
2054 2055 2056 2057 2058
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2059

2060
    DO_TEST("s390-panic-no-address",
2061 2062 2063
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390);
2064
    DO_TEST_FAILURE("s390-panic-address",
2065 2066 2067
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390);
2068
    DO_TEST("s390-panic-missing",
2069 2070 2071
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390);
2072 2073 2074 2075
    DO_TEST_PARSE_ERROR("s390-no-parallel",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390);
2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091
    DO_TEST("s390-serial",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
    DO_TEST("s390-serial-2",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE,
            QEMU_CAPS_DEVICE_SCLPLMCONSOLE);
    DO_TEST("s390-serial-console",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
2092

2093 2094 2095 2096 2097
    DO_TEST("ppc-dtb",
            QEMU_CAPS_KVM,
            QEMU_CAPS_DTB);
    DO_TEST("ppce500-serial",
            QEMU_CAPS_KVM);
O
Olivia Yin 已提交
2098

2099
    DO_TEST("tpm-passthrough",
2100
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
2101
    DO_TEST_PARSE_ERROR("tpm-no-backend-invalid",
2102
                        QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
2103

2104

2105 2106 2107 2108
    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);
2109

2110 2111 2112 2113 2114 2115
    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,
2116
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
2117 2118
    DO_TEST("pci-autoadd-idx",
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2119 2120
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("pci-autofill-addr", QEMU_CAPS_DEVICE_CIRRUS_VGA);
2121
    DO_TEST("pci-many",
2122
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
2123
    DO_TEST("pci-bridge-many-disks",
2124
            QEMU_CAPS_DEVICE_PCI_BRIDGE);
L
Laine Stump 已提交
2125
    DO_TEST("pcie-root",
2126 2127 2128 2129
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL);
2130
    DO_TEST("q35",
2131
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2132
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2133
            QEMU_CAPS_DEVICE_IOH3420,
2134
            QEMU_CAPS_ICH9_AHCI,
2135 2136
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
2137
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2138
            QEMU_CAPS_DEVICE_QXL);
2139 2140 2141 2142 2143 2144 2145 2146
    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);
2147
    DO_TEST("q35-pm-disable",
2148
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2149
            QEMU_CAPS_DEVICE_IOH3420,
2150 2151 2152 2153
            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",
2154
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2155
            QEMU_CAPS_DEVICE_IOH3420,
2156 2157
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4);
2158
    DO_TEST("q35-usb2",
2159
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2160
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2161
            QEMU_CAPS_DEVICE_IOH3420,
2162
            QEMU_CAPS_ICH9_AHCI,
2163 2164
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
2165
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2166
            QEMU_CAPS_DEVICE_QXL);
2167
    DO_TEST("q35-usb2-multi",
2168
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2169
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2170
            QEMU_CAPS_DEVICE_IOH3420,
2171
            QEMU_CAPS_ICH9_AHCI,
2172 2173
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
2174
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2175
            QEMU_CAPS_DEVICE_QXL);
2176
    DO_TEST("q35-usb2-reorder",
2177
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2178
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2179
            QEMU_CAPS_DEVICE_IOH3420,
2180
            QEMU_CAPS_ICH9_AHCI,
2181 2182
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
2183
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2184
            QEMU_CAPS_DEVICE_QXL);
2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206
    /* 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,
2207
            QEMU_CAPS_NEC_USB_XHCI,
2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221
            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,
2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245
            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,
2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263
            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,
2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286
            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,
2287 2288 2289 2290 2291
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302
            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,
2303
            QEMU_CAPS_NEC_USB_XHCI,
2304
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336
    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,
2337
            QEMU_CAPS_DEVICE_ISA_SERIAL,
2338
            QEMU_CAPS_USB_REDIR);
2339 2340

    /* Test automatic and manual setting of pcie-root-port attributes */
2341 2342
    DO_TEST("pcie-root-port",
            QEMU_CAPS_DEVICE_IOH3420,
2343
            QEMU_CAPS_ICH9_AHCI,
2344
            QEMU_CAPS_PCI_MULTIFUNCTION,
2345
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2346
            QEMU_CAPS_DEVICE_QXL);
2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358

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

2359 2360 2361 2362 2363 2364 2365
    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,
2366 2367
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
2368
            QEMU_CAPS_NEC_USB_XHCI);
2369 2370 2371 2372 2373 2374 2375
    /* 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);
2376

2377
    DO_TEST_PARSE_ERROR("q35-wrong-root",
2378
            QEMU_CAPS_DEVICE_IOH3420,
2379 2380 2381
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2382
            QEMU_CAPS_DEVICE_QXL);
2383
    DO_TEST_PARSE_ERROR("440fx-wrong-root", NONE);
2384
    DO_TEST_PARSE_ERROR("440fx-ide-address-conflict", NONE);
2385

2386
    DO_TEST_PARSE_ERROR("pcie-root-port-too-many",
2387
            QEMU_CAPS_DEVICE_IOH3420,
2388
            QEMU_CAPS_ICH9_AHCI,
2389
            QEMU_CAPS_PCI_MULTIFUNCTION,
2390
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2391
            QEMU_CAPS_DEVICE_QXL);
2392

2393 2394 2395
    DO_TEST("pcie-switch-upstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
2396
            QEMU_CAPS_ICH9_AHCI,
2397
            QEMU_CAPS_PCI_MULTIFUNCTION,
2398
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2399
            QEMU_CAPS_DEVICE_QXL);
2400 2401 2402 2403
    DO_TEST("pcie-switch-downstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
2404
            QEMU_CAPS_ICH9_AHCI,
2405
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2406
            QEMU_CAPS_DEVICE_QXL);
2407

2408 2409 2410 2411 2412 2413
    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);
2414 2415
    DO_TEST_PARSE_ERROR("pci-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_PXB);
2416

2417 2418 2419 2420 2421 2422 2423 2424 2425 2426
    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);
2427 2428 2429
    DO_TEST_PARSE_ERROR("pcie-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_IOH3420,
                        QEMU_CAPS_DEVICE_PXB_PCIE);
2430

2431
    DO_TEST("hostdev-scsi-lsi",
2432 2433
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2434
    DO_TEST("hostdev-scsi-virtio-scsi",
2435 2436
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2437
    DO_TEST("hostdev-scsi-readonly",
J
Ján Tomko 已提交
2438
            QEMU_CAPS_VIRTIO_SCSI,
O
Osier Yang 已提交
2439
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_SCSI_GENERIC);
2440
    DO_TEST("hostdev-scsi-virtio-scsi",
2441 2442 2443
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC,
            QEMU_CAPS_DEVICE_SCSI_GENERIC_BOOTINDEX);
2444
    DO_TEST("hostdev-scsi-lsi-iscsi",
J
John Ferlan 已提交
2445 2446
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2447
    DO_TEST("hostdev-scsi-lsi-iscsi-auth",
J
John Ferlan 已提交
2448 2449
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2450
    DO_TEST("hostdev-scsi-virtio-iscsi",
J
John Ferlan 已提交
2451 2452
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2453
    DO_TEST("hostdev-scsi-virtio-iscsi-auth",
J
John Ferlan 已提交
2454 2455
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2456 2457 2458 2459 2460 2461
# ifdef HAVE_GNUTLS_CIPHER_ENCRYPT
    DO_TEST("disk-hostdev-scsi-virtio-iscsi-auth-AES",
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC, QEMU_CAPS_OBJECT_SECRET,
            QEMU_CAPS_ISCSI_PASSWORD_SECRET);
# endif
2462 2463 2464 2465 2466 2467
    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);
2468

2469
    DO_TEST("mlock-on", QEMU_CAPS_REALTIME_MLOCK);
2470
    DO_TEST_FAILURE("mlock-on", NONE);
2471
    DO_TEST("mlock-off", QEMU_CAPS_REALTIME_MLOCK);
2472 2473
    DO_TEST("mlock-unsupported", NONE);

2474 2475 2476 2477
    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);
2478

2479
    DO_TEST("hotplug-base",
2480
            QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_SCSI);
2481

2482 2483
    DO_TEST("pcihole64", QEMU_CAPS_I440FX_PCI_HOLE64_SIZE);
    DO_TEST_FAILURE("pcihole64-none", NONE);
2484
    DO_TEST("pcihole64-q35",
2485
            QEMU_CAPS_DEVICE_IOH3420,
2486
            QEMU_CAPS_ICH9_AHCI,
2487
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2488
            QEMU_CAPS_DEVICE_QXL,
2489 2490
            QEMU_CAPS_Q35_PCI_HOLE64_SIZE);

2491
    DO_TEST("arm-vexpressa9-nodevs",
2492
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB);
2493
    DO_TEST("arm-vexpressa9-basic",
2494
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB);
2495
    DO_TEST("arm-vexpressa9-virtio",
2496
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2497
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2498
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2499
    DO_TEST("arm-virt-virtio",
2500
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2501
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2502
            QEMU_CAPS_DEVICE_PL011,
2503
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2504

2505
    DO_TEST("aarch64-virt-virtio",
2506
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2507
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2508
            QEMU_CAPS_DEVICE_PL011,
2509
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2510 2511 2512 2513 2514 2515

    /* 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",
2516
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2517
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
2518 2519 2520
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2521
            QEMU_CAPS_PCI_MULTIFUNCTION,
2522
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2523
            QEMU_CAPS_DEVICE_IOH3420,
2524
            QEMU_CAPS_DEVICE_PL011,
2525
            QEMU_CAPS_VIRTIO_SCSI);
2526 2527
    DO_TEST("aarch64-virt-2.6-virtio-pci-default",
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2528
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2529 2530
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2531
            QEMU_CAPS_PCI_MULTIFUNCTION,
2532
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2533
            QEMU_CAPS_DEVICE_PL011,
2534
            QEMU_CAPS_DEVICE_IOH3420);
2535 2536 2537
    /* Example of using virtio-pci with no explicit PCI controller
       but with manual PCI addresses */
    DO_TEST("aarch64-virtio-pci-manual-addresses",
2538
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2539
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2540 2541
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2542
            QEMU_CAPS_PCI_MULTIFUNCTION,
2543 2544 2545
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_VIRTIO_SCSI);
2546 2547 2548 2549 2550
    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);
2551 2552 2553 2554 2555 2556
    DO_TEST("aarch64-video-default",
            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_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_VNC);
2557
    DO_TEST("aarch64-aavmf-virtio-mmio",
2558
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2559
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2560
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2561
    DO_TEST("aarch64-virt-default-nic",
2562
            QEMU_CAPS_NODEFCONFIG,
2563
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
2564
    qemuTestSetHostArch(driver.caps, VIR_ARCH_AARCH64);
2565
    DO_TEST("aarch64-cpu-passthrough",
2566
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2567
            QEMU_CAPS_KVM);
2568 2569 2570
    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 已提交
2571
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2572
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2573 2574 2575 2576
    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 已提交
2577
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2578
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2579 2580 2581
    DO_TEST_GIC("aarch64-gic-none-both", GIC_BOTH,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2582 2583 2584
    DO_TEST_GIC("aarch64-gic-none-tcg", GIC_BOTH,
            QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2585
    DO_TEST_GIC("aarch64-gic-default", GIC_NONE,
A
Andrea Bolognani 已提交
2586
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
2587 2588 2589 2590
    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 已提交
2591
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2592
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2593 2594 2595 2596 2597 2598 2599
    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 已提交
2600
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
2601 2602 2603 2604 2605 2606 2607
    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 已提交
2608
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2609
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2610 2611 2612
    DO_TEST_GIC("aarch64-gic-v2", GIC_BOTH,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2613
    DO_TEST_FAILURE("aarch64-gic-v3",
A
Andrea Bolognani 已提交
2614
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
2615 2616 2617 2618 2619 2620 2621 2622 2623 2624
    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 已提交
2625
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2626
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2627
    DO_TEST_FAILURE("aarch64-gic-host",
A
Andrea Bolognani 已提交
2628
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640
    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);
2641
    DO_TEST_PARSE_ERROR("aarch64-gic-invalid",
A
Andrea Bolognani 已提交
2642
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2643
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2644
    DO_TEST_FAILURE("aarch64-gic-not-virt",
A
Andrea Bolognani 已提交
2645
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2646
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2647
    DO_TEST_FAILURE("aarch64-gic-not-arm",
A
Andrea Bolognani 已提交
2648
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2649
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2650
    DO_TEST("aarch64-kvm-32-on-64",
2651
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2652
            QEMU_CAPS_DEVICE_PL011,
A
Andrea Bolognani 已提交
2653
            QEMU_CAPS_KVM, QEMU_CAPS_CPU_AARCH64_OFF);
2654
    DO_TEST_FAILURE("aarch64-kvm-32-on-64",
2655
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2656
            QEMU_CAPS_KVM);
2657 2658 2659 2660 2661 2662 2663 2664
    DO_TEST("aarch64-pci-serial",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_PCI_SERIAL,
            QEMU_CAPS_CHARDEV_LOGFILE,
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT);
2665 2666 2667 2668 2669 2670 2671

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

2672
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);
2673

2674
    DO_TEST("kvm-pit-delay", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2675
    DO_TEST("kvm-pit-discard", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2676
    DO_TEST("no-kvm-pit-device", NONE);
2677

H
Hu Tao 已提交
2678
    DO_TEST("panic", QEMU_CAPS_DEVICE_PANIC,
2679
            QEMU_CAPS_NODEFCONFIG);
D
Dmitry Andreev 已提交
2680
    DO_TEST("panic-double", QEMU_CAPS_DEVICE_PANIC,
2681
            QEMU_CAPS_NODEFCONFIG);
H
Hu Tao 已提交
2682

2683
    DO_TEST("panic-no-address", QEMU_CAPS_DEVICE_PANIC,
2684
            QEMU_CAPS_NODEFCONFIG);
2685

2686 2687
    DO_TEST("fips-enabled", QEMU_CAPS_ENABLE_FIPS);

J
Ján Tomko 已提交
2688
    DO_TEST("shmem", QEMU_CAPS_DEVICE_IVSHMEM);
2689 2690 2691
    DO_TEST("shmem-plain-doorbell", QEMU_CAPS_DEVICE_IVSHMEM,
            QEMU_CAPS_DEVICE_IVSHMEM_PLAIN,
            QEMU_CAPS_DEVICE_IVSHMEM_DOORBELL);
2692
    DO_TEST_FAILURE("shmem", NONE);
J
Ján Tomko 已提交
2693
    DO_TEST_FAILURE("shmem-invalid-size",
2694
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2695
    DO_TEST_FAILURE("shmem-invalid-address",
2696
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2697
    DO_TEST_FAILURE("shmem-small-size",
2698
                    QEMU_CAPS_DEVICE_IVSHMEM);
2699
    DO_TEST_PARSE_ERROR("shmem-msi-only", NONE);
A
Andrea Bolognani 已提交
2700
    DO_TEST("cpu-host-passthrough-features", QEMU_CAPS_KVM);
2701

2702
    DO_TEST_FAILURE("memory-align-fail", NONE);
2703
    DO_TEST_FAILURE("memory-hotplug-nonuma", QEMU_CAPS_DEVICE_PC_DIMM);
M
Michal Privoznik 已提交
2704
    DO_TEST("memory-hotplug", NONE);
2705
    DO_TEST("memory-hotplug", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA);
2706
    DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2707
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2708
    DO_TEST("memory-hotplug-dimm-addr", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2709
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2710
    DO_TEST("memory-hotplug-ppc64-nonuma", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2711
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
M
Michal Privoznik 已提交
2712 2713
    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);
2714 2715
    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);
2716 2717
    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);
2718

2719 2720
    DO_TEST("machine-aeskeywrap-on-caps",
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP,
2721
            QEMU_CAPS_DEA_KEY_WRAP,
2722
            QEMU_CAPS_VIRTIO_SCSI,
2723 2724
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps", QEMU_CAPS_MACHINE_OPT,
2725
                    QEMU_CAPS_VIRTIO_SCSI,
2726 2727 2728 2729 2730
                    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,
2731
            QEMU_CAPS_VIRTIO_SCSI,
2732 2733
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap", QEMU_CAPS_MACHINE_OPT,
2734
                    QEMU_CAPS_VIRTIO_SCSI,
2735 2736 2737 2738 2739
                    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,
2740
            QEMU_CAPS_VIRTIO_SCSI,
2741 2742
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", QEMU_CAPS_MACHINE_OPT,
2743
                    QEMU_CAPS_VIRTIO_SCSI,
2744 2745 2746 2747
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", NONE);

    DO_TEST("machine-aeskeywrap-off-cap",
2748
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP,
2749
            QEMU_CAPS_VIRTIO_SCSI,
2750 2751
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap", QEMU_CAPS_MACHINE_OPT,
2752
                    QEMU_CAPS_VIRTIO_SCSI,
2753 2754 2755 2756 2757
                    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,
2758
            QEMU_CAPS_VIRTIO_SCSI,
2759
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2760
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", QEMU_CAPS_MACHINE_OPT,
2761
                    QEMU_CAPS_VIRTIO_SCSI,
2762 2763 2764 2765
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", NONE);

    DO_TEST("machine-deakeywrap-on-cap",
2766
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_DEA_KEY_WRAP,
2767
            QEMU_CAPS_VIRTIO_SCSI,
2768 2769
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-on-cap", QEMU_CAPS_MACHINE_OPT,
2770
                    QEMU_CAPS_VIRTIO_SCSI,
2771 2772 2773 2774 2775
                    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,
2776
            QEMU_CAPS_VIRTIO_SCSI,
2777 2778
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", QEMU_CAPS_MACHINE_OPT,
2779
                    QEMU_CAPS_VIRTIO_SCSI,
2780 2781 2782 2783
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", NONE);

    DO_TEST("machine-deakeywrap-off-cap",
2784
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_DEA_KEY_WRAP,
2785
            QEMU_CAPS_VIRTIO_SCSI,
2786 2787
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-cap", QEMU_CAPS_MACHINE_OPT,
2788
                    QEMU_CAPS_VIRTIO_SCSI,
2789 2790 2791 2792 2793
                    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,
2794
            QEMU_CAPS_VIRTIO_SCSI,
2795 2796
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST("machine-keywrap-none",
2797
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_VIRTIO_SCSI,
2798
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2799

2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818
    DO_TEST("machine-loadparm-s390", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_LOADPARM);
    DO_TEST("machine-loadparm-net-s390", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_LOADPARM);
    DO_TEST("machine-loadparm-multiple-disks-nets-s390",
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-char-invalid",
                        QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_VIRTIO_CCW,
                        QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_BOOTINDEX,
                        QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-len-invalid",
                        QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_VIRTIO_CCW,
                        QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_BOOTINDEX,
                        QEMU_CAPS_LOADPARM);

J
Jiri Denemark 已提交
2819 2820 2821 2822 2823 2824 2825
    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);

2826
    DO_TEST("virtio-input", QEMU_CAPS_VIRTIO_KEYBOARD,
2827
            QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET);
2828
    DO_TEST("virtio-input-passthrough", QEMU_CAPS_VIRTIO_INPUT_HOST);
2829

2830
    DO_TEST("ppc64-usb-controller",
2831
            QEMU_CAPS_PCI_OHCI);
2832
    DO_TEST("ppc64-usb-controller-legacy",
2833
            QEMU_CAPS_PIIX3_USB_UHCI);
2834 2835 2836 2837 2838 2839 2840 2841 2842
    DO_TEST_FULL("ppc64-usb-controller-qemu-xhci", NULL, -1, 0,
                 VIR_DOMAIN_DEF_PARSE_ABI_UPDATE, GIC_NONE,
                 QEMU_CAPS_NEC_USB_XHCI,
                 QEMU_CAPS_DEVICE_QEMU_XHCI);

    DO_TEST("aarch64-usb-controller-qemu-xhci",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_DEVICE_QEMU_XHCI);
2843

2844 2845 2846 2847
    DO_TEST("aarch64-usb-controller-nec-xhci",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_NEC_USB_XHCI);

2848 2849 2850 2851
    DO_TEST_PARSE_FLAGS_ERROR("missing-machine",
                              VIR_DOMAIN_DEF_PARSE_SKIP_OSTYPE_CHECKS,
                              NONE);

2852 2853 2854 2855 2856 2857 2858 2859
    DO_TEST("name-escape",
            QEMU_CAPS_NAME_DEBUG_THREADS,
            QEMU_CAPS_OBJECT_SECRET,
            QEMU_CAPS_VNC,
            QEMU_CAPS_NAME_GUEST,
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_SPICE,
            QEMU_CAPS_SPICE_UNIX);
M
Marc-André Lureau 已提交
2860 2861
    DO_TEST("debug-threads", QEMU_CAPS_NAME_DEBUG_THREADS);

2862
    DO_TEST("master-key", QEMU_CAPS_OBJECT_SECRET);
2863
    DO_TEST("usb-long-port-path", QEMU_CAPS_NODEFCONFIG,
J
Ján Tomko 已提交
2864
            QEMU_CAPS_USB_HUB);
2865 2866
    DO_TEST_PARSE_ERROR("usb-too-long-port-path-invalid",
                        QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_USB_HUB);
2867

2868
    DO_TEST("acpi-table", NONE);
2869
    DO_TEST("intel-iommu",
2870
            QEMU_CAPS_DEVICE_INTEL_IOMMU);
2871 2872 2873
    DO_TEST("intel-iommu-machine",
            QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_IOMMU);
J
Ján Tomko 已提交
2874
    DO_TEST("intel-iommu-caching-mode",
2875 2876 2877
            QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_KERNEL_IRQCHIP,
            QEMU_CAPS_MACHINE_KERNEL_IRQCHIP_SPLIT,
2878 2879 2880 2881 2882 2883 2884 2885 2886
            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_DEVICE_INTEL_IOMMU,
            QEMU_CAPS_INTEL_IOMMU_INTREMAP,
            QEMU_CAPS_INTEL_IOMMU_CACHING_MODE);
2887 2888 2889 2890 2891 2892 2893
    DO_TEST("intel-iommu-eim",
            QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_KERNEL_IRQCHIP,
            QEMU_CAPS_MACHINE_KERNEL_IRQCHIP_SPLIT,
            QEMU_CAPS_INTEL_IOMMU_INTREMAP,
            QEMU_CAPS_INTEL_IOMMU_EIM,
            QEMU_CAPS_DEVICE_INTEL_IOMMU);
2894 2895 2896 2897 2898 2899 2900
    DO_TEST("intel-iommu-device-iotlb",
            QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_KERNEL_IRQCHIP,
            QEMU_CAPS_MACHINE_KERNEL_IRQCHIP_SPLIT,
            QEMU_CAPS_INTEL_IOMMU_INTREMAP,
            QEMU_CAPS_INTEL_IOMMU_DEVICE_IOTLB,
            QEMU_CAPS_DEVICE_INTEL_IOMMU);
2901

2902
    DO_TEST("cpu-hotplug-startup", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);
2903 2904 2905 2906 2907 2908 2909 2910
    DO_TEST("virtio-options", QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_FSDEV, QEMU_CAPS_FSDEV_WRITEOUT,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
2911 2912 2913
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_PCI_IOMMU_PLATFORM,
            QEMU_CAPS_VIRTIO_PCI_ATS);
2914

2915 2916 2917 2918 2919 2920 2921 2922 2923 2924
    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);

2925 2926 2927 2928 2929 2930 2931 2932
    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);

2933 2934 2935 2936 2937 2938 2939 2940 2941
    DO_TEST("cpu-cache-disable", QEMU_CAPS_KVM, QEMU_CAPS_CPU_CACHE);
    DO_TEST("cpu-cache-disable2", QEMU_CAPS_KVM);
    DO_TEST("cpu-cache-disable3", QEMU_CAPS_KVM, QEMU_CAPS_CPU_CACHE);
    DO_TEST("cpu-cache-passthrough", QEMU_CAPS_KVM, QEMU_CAPS_CPU_CACHE);
    DO_TEST("cpu-cache-passthrough2", QEMU_CAPS_KVM);
    DO_TEST("cpu-cache-emulate-l3", QEMU_CAPS_KVM, QEMU_CAPS_CPU_CACHE);
    DO_TEST_PARSE_ERROR("cpu-cache-emulate-l2", QEMU_CAPS_KVM);
    DO_TEST_PARSE_ERROR("cpu-cache-passthrough3", QEMU_CAPS_KVM);
    DO_TEST_PARSE_ERROR("cpu-cache-passthrough-l3", QEMU_CAPS_KVM);
M
Marc-André Lureau 已提交
2942
    DO_TEST("vmcoreinfo", QEMU_CAPS_DEVICE_VMCOREINFO);
2943

2944 2945 2946
    DO_TEST("user-aliases", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_OBJECT_MEMORY_FILE, QEMU_CAPS_PIIX_DISABLE_S3,
            QEMU_CAPS_PIIX_DISABLE_S4, QEMU_CAPS_VNC,
2947
            QEMU_CAPS_DEVICE_ISA_SERIAL,
2948
            QEMU_CAPS_HDA_DUPLEX);
2949
    DO_TEST("user-aliases2", QEMU_CAPS_DEVICE_IOH3420, QEMU_CAPS_ICH9_AHCI);
2950

A
Andrea Bolognani 已提交
2951 2952 2953
    if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL)
        virFileDeleteTree(fakerootdir);

2954
    qemuTestDriverFree(&driver);
A
Andrea Bolognani 已提交
2955
    VIR_FREE(fakerootdir);
2956

2957
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
2958 2959
}

2960
VIR_TEST_MAIN_PRELOAD(mymain,
A
Andrea Bolognani 已提交
2961 2962 2963 2964
                      abs_builddir "/.libs/qemuxml2argvmock.so",
                      abs_builddir "/.libs/virrandommock.so",
                      abs_builddir "/.libs/qemucpumock.so",
                      abs_builddir "/.libs/virpcimock.so")
2965

2966 2967
#else

2968 2969 2970 2971
int main(void)
{
    return EXIT_AM_SKIP;
}
2972 2973

#endif /* WITH_QEMU */