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

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

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

11 12
#include "testutils.h"

13 14
#ifdef WITH_QEMU

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

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

34
# include "testutilsqemu.h"
35

36 37
# define VIR_FROM_THIS VIR_FROM_QEMU

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

    if (!volinfo[1])
        goto fallback;

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

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

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

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

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

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

    return 0;
}


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

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

    return ret;
}


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

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

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

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

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

    return xmlbuf;
}

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

    return 1;
}

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

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

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

282 283 284 285

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

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

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

    return 0;
}


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

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

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

    ret = 0;

 cleanup:
    return ret;
}


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

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

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

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

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

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

1231

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

1245 1246 1247 1248
    DO_TEST("console-compat",
            QEMU_CAPS_DEVICE_ISA_SERIAL);
    DO_TEST("console-compat-auto",
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1249 1250

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

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

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

1392 1393 1394 1395 1396 1397 1398 1399 1400 1401
    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);
1402 1403 1404
    DO_TEST_PARSE_ERROR("chardev-reconnect-generated-path",
                        QEMU_CAPS_NODEFCONFIG,
                        QEMU_CAPS_CHARDEV_RECONNECT);
1405

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

1548
    DO_TEST("smbios", QEMU_CAPS_SMBIOS_TYPE);
1549
    DO_TEST_PARSE_ERROR("smbios-date", QEMU_CAPS_SMBIOS_TYPE);
1550
    DO_TEST_PARSE_ERROR("smbios-uuid-match", QEMU_CAPS_SMBIOS_TYPE);
1551

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

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

1615 1616 1617 1618
    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);
1619

1620
    DO_TEST_LINUX_FULL("migrate-numa-unaligned", "stdio", 7, 0, 0, GIC_NONE,
1621
                       QEMU_CAPS_NUMA,
1622 1623
                       QEMU_CAPS_OBJECT_MEMORY_RAM);

1624
    DO_TEST("qemu-ns", NONE);
1625
    DO_TEST("qemu-ns-no-env", NONE);
1626
    DO_TEST("qemu-ns-alt", NONE);
1627

1628
    DO_TEST("smp", NONE);
1629

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

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

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

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

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

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

1717
    DO_TEST("numatune-memory", NONE);
1718
    DO_TEST_PARSE_ERROR("numatune-memory-invalid-nodeset", NONE);
1719 1720
    DO_TEST_LINUX("numatune-memnode", QEMU_CAPS_NUMA,
                  QEMU_CAPS_OBJECT_MEMORY_RAM);
1721 1722
    DO_TEST_FAILURE("numatune-memnode", NONE);

1723 1724
    DO_TEST_LINUX("numatune-memnode-no-memory", QEMU_CAPS_NUMA,
                  QEMU_CAPS_OBJECT_MEMORY_RAM);
1725 1726
    DO_TEST_FAILURE("numatune-memnode-no-memory", NONE);

1727 1728
    DO_TEST("numatune-distances", QEMU_CAPS_NUMA, QEMU_CAPS_NUMA_DIST);

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

1756
    DO_TEST("multifunction-pci-device",
1757
            QEMU_CAPS_NODEFCONFIG,
1758
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_SCSI_LSI);
1759

1760
    DO_TEST("monitor-json",
1761 1762
            QEMU_CAPS_MONITOR_JSON,
            QEMU_CAPS_NODEFCONFIG);
1763
    DO_TEST("no-shutdown",
1764 1765
            QEMU_CAPS_MONITOR_JSON,
            QEMU_CAPS_NODEFCONFIG,
1766
            QEMU_CAPS_NO_SHUTDOWN);
1767

1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779
    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);
1780

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

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

    qemuTestSetHostCPU(driver.caps, cpuPower9);
    DO_TEST("pseries-cpu-compat-power9",
1826
            QEMU_CAPS_KVM,
1827
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1828
            QEMU_CAPS_NODEFCONFIG);
1829 1830
    qemuTestSetHostCPU(driver.caps, NULL);

1831 1832
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);

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

    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);
1848 1849 1850 1851 1852 1853
    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);
1854 1855 1856
    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);
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 1886 1887 1888
    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);

1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900
    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);

1901 1902 1903 1904 1905 1906 1907 1908 1909
    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);
1910 1911 1912 1913 1914 1915 1916
    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);
1917 1918 1919 1920 1921 1922 1923
    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);

1924
    DO_TEST("mach-virt-serial-native",
1925
            QEMU_CAPS_DEVICE_PL011,
1926 1927
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("mach-virt-serial+console-native",
1928
            QEMU_CAPS_DEVICE_PL011,
1929 1930
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("mach-virt-serial-compat",
1931
            QEMU_CAPS_DEVICE_PL011,
1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948
            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",
1949
            QEMU_CAPS_DEVICE_PL011,
1950 1951 1952 1953 1954
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("mach-virt-console-virtio",
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST_PARSE_ERROR("mach-virt-serial-invalid-machine", NONE);

1955
    DO_TEST("disk-ide-drive-split",
1956
            QEMU_CAPS_NODEFCONFIG,
1957
            QEMU_CAPS_IDE_CD);
1958
    DO_TEST("disk-ide-wwn",
1959
            QEMU_CAPS_IDE_CD,
1960
            QEMU_CAPS_DRIVE_SERIAL, QEMU_CAPS_IDE_DRIVE_WWN);
1961

1962
    DO_TEST("disk-geometry", NONE);
V
Viktor Mihajlovski 已提交
1963
    DO_TEST("disk-blockio",
1964
            QEMU_CAPS_NODEFCONFIG,
V
Viktor Mihajlovski 已提交
1965
            QEMU_CAPS_IDE_CD, QEMU_CAPS_BLOCKIO);
1966

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

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

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

2063
    DO_TEST("s390-panic-no-address",
2064 2065 2066
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390);
2067
    DO_TEST_FAILURE("s390-panic-address",
2068 2069 2070
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390);
2071
    DO_TEST("s390-panic-missing",
2072 2073 2074
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390);
2075 2076 2077 2078
    DO_TEST_PARSE_ERROR("s390-no-parallel",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390);
2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094
    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);
2095

2096 2097 2098 2099 2100
    DO_TEST("ppc-dtb",
            QEMU_CAPS_KVM,
            QEMU_CAPS_DTB);
    DO_TEST("ppce500-serial",
            QEMU_CAPS_KVM);
O
Olivia Yin 已提交
2101

2102
    DO_TEST("tpm-passthrough",
2103
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
2104
    DO_TEST_PARSE_ERROR("tpm-no-backend-invalid",
2105
                        QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
2106

2107

2108 2109 2110 2111
    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);
2112

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

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

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

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

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

2389
    DO_TEST_PARSE_ERROR("pcie-root-port-too-many",
2390
            QEMU_CAPS_DEVICE_IOH3420,
2391
            QEMU_CAPS_ICH9_AHCI,
2392
            QEMU_CAPS_PCI_MULTIFUNCTION,
2393
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2394
            QEMU_CAPS_DEVICE_QXL);
2395

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

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

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

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

2472
    DO_TEST("mlock-on", QEMU_CAPS_REALTIME_MLOCK);
2473
    DO_TEST_FAILURE("mlock-on", NONE);
2474
    DO_TEST("mlock-off", QEMU_CAPS_REALTIME_MLOCK);
2475 2476
    DO_TEST("mlock-unsupported", NONE);

2477 2478 2479 2480
    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);
2481

2482
    DO_TEST("hotplug-base",
2483
            QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_SCSI);
2484

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

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

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

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

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

2675
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);
2676

2677
    DO_TEST("kvm-pit-delay", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2678
    DO_TEST("kvm-pit-discard", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2679
    DO_TEST("no-kvm-pit-device", NONE);
2680

H
Hu Tao 已提交
2681
    DO_TEST("panic", QEMU_CAPS_DEVICE_PANIC,
2682
            QEMU_CAPS_NODEFCONFIG);
D
Dmitry Andreev 已提交
2683
    DO_TEST("panic-double", QEMU_CAPS_DEVICE_PANIC,
2684
            QEMU_CAPS_NODEFCONFIG);
H
Hu Tao 已提交
2685

2686
    DO_TEST("panic-no-address", QEMU_CAPS_DEVICE_PANIC,
2687
            QEMU_CAPS_NODEFCONFIG);
2688

2689 2690
    DO_TEST("fips-enabled", QEMU_CAPS_ENABLE_FIPS);

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

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

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

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

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

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

2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821
    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 已提交
2822 2823 2824 2825 2826 2827 2828
    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);

2829
    DO_TEST("virtio-input", QEMU_CAPS_VIRTIO_KEYBOARD,
2830
            QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET);
2831
    DO_TEST("virtio-input-passthrough", QEMU_CAPS_VIRTIO_INPUT_HOST);
2832

2833
    DO_TEST("ppc64-usb-controller",
2834
            QEMU_CAPS_PCI_OHCI);
2835
    DO_TEST("ppc64-usb-controller-legacy",
2836
            QEMU_CAPS_PIIX3_USB_UHCI);
2837 2838 2839 2840 2841 2842 2843 2844 2845
    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);
2846

2847 2848 2849 2850
    DO_TEST("aarch64-usb-controller-nec-xhci",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_NEC_USB_XHCI);

2851 2852 2853 2854
    DO_TEST_PARSE_FLAGS_ERROR("missing-machine",
                              VIR_DOMAIN_DEF_PARSE_SKIP_OSTYPE_CHECKS,
                              NONE);

2855 2856 2857 2858 2859 2860 2861 2862
    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 已提交
2863 2864
    DO_TEST("debug-threads", QEMU_CAPS_NAME_DEBUG_THREADS);

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

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

2905
    DO_TEST("cpu-hotplug-startup", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);
2906 2907 2908
    DO_TEST_PARSE_ERROR("cpu-hotplug-granularity",
                        QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);

2909 2910 2911 2912 2913 2914 2915 2916
    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,
2917 2918 2919
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_PCI_IOMMU_PLATFORM,
            QEMU_CAPS_VIRTIO_PCI_ATS);
2920

2921 2922 2923 2924 2925 2926 2927 2928 2929 2930
    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);

2931 2932 2933 2934 2935 2936 2937 2938
    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);

2939 2940 2941 2942 2943 2944 2945 2946 2947
    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 已提交
2948
    DO_TEST("vmcoreinfo", QEMU_CAPS_DEVICE_VMCOREINFO);
2949

2950 2951 2952
    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,
2953
            QEMU_CAPS_DEVICE_ISA_SERIAL,
2954
            QEMU_CAPS_HDA_DUPLEX);
2955
    DO_TEST("user-aliases2", QEMU_CAPS_DEVICE_IOH3420, QEMU_CAPS_ICH9_AHCI);
2956

A
Andrea Bolognani 已提交
2957 2958 2959
    if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL)
        virFileDeleteTree(fakerootdir);

2960
    qemuTestDriverFree(&driver);
A
Andrea Bolognani 已提交
2961
    VIR_FREE(fakerootdir);
2962

2963
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
2964 2965
}

2966
VIR_TEST_MAIN_PRELOAD(mymain,
A
Andrea Bolognani 已提交
2967 2968 2969 2970
                      abs_builddir "/.libs/qemuxml2argvmock.so",
                      abs_builddir "/.libs/virrandommock.so",
                      abs_builddir "/.libs/qemucpumock.so",
                      abs_builddir "/.libs/virpcimock.so")
2971

2972 2973
#else

2974 2975 2976 2977
int main(void)
{
    return EXIT_AM_SKIP;
}
2978 2979

#endif /* WITH_QEMU */