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

#include <unistd.h>
4 5 6 7

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

8 9
#include "testutils.h"

10 11
#ifdef WITH_QEMU

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

29
# define LIBVIRT_QEMU_CAPSPRIV_H_ALLOW
30 31
# include "qemu/qemu_capspriv.h"

32
# include "testutilsqemu.h"
33

34 35
# define VIR_FROM_THIS VIR_FROM_QEMU

36
static const char *abs_top_srcdir;
37
static virQEMUDriver driver;
38

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

static virSecretPtr
fakeSecretLookupByUsage(virConnectPtr conn,
54
                        int usageType,
55 56
                        const char *usageID)
{
57
    unsigned char uuid[VIR_UUID_BUFLEN];
58 59 60 61 62 63 64 65 66 67
    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);
68
        return NULL;
69
    }
70

71 72 73
    if (virUUIDGenerate(uuid) < 0)
        return NULL;

74
    return virGetSecret(conn, uuid, usageType, usageID);
75 76
}

77 78 79 80
static virSecretPtr
fakeSecretLookupByUUID(virConnectPtr conn,
                       const unsigned char *uuid)
{
81 82 83
    /* NB: This mocked value could be "tls" or "volume" depending on
     * which test is being run, we'll leave at NONE (or 0) */
    return virGetSecret(conn, uuid, VIR_SECRET_USAGE_TYPE_NONE, "");
84 85
}

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 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291

/* virNetDevOpenvswitchGetVhostuserIfname mocks a portdev name - handle that */
static virNWFilterBindingPtr
fakeNWFilterBindingLookupByPortDev(virConnectPtr conn,
                                   const char *portdev)
{
    if (STREQ(portdev, "vhost-user0"))
        return virGetNWFilterBinding(conn, "fake_vnet0", "fakeFilterName");

    virReportError(VIR_ERR_NO_NWFILTER_BINDING,
                   "no nwfilter binding for port dev '%s'", portdev);
    return NULL;
}


static int
fakeNWFilterBindingDelete(virNWFilterBindingPtr binding ATTRIBUTE_UNUSED)
{
    return 0;
}


static virNWFilterDriver fakeNWFilterDriver = {
    .nwfilterBindingLookupByPortDev = fakeNWFilterBindingLookupByPortDev,
    .nwfilterBindingDelete = fakeNWFilterBindingDelete,
};

292
typedef enum {
293 294
    FLAG_EXPECT_FAILURE     = 1 << 0,
    FLAG_EXPECT_PARSE_ERROR = 1 << 1,
295
    FLAG_FIPS               = 1 << 2,
296 297
    FLAG_REAL_CAPS          = 1 << 3,
    FLAG_SKIP_LEGACY_CPUS   = 1 << 4,
298 299
} virQemuXML2ArgvTestFlags;

300 301
struct testInfo {
    const char *name;
302
    const char *suffix;
303 304 305 306 307 308 309
    virQEMUCapsPtr qemuCaps;
    const char *migrateFrom;
    int migrateFd;
    unsigned int flags;
    unsigned int parseFlags;
};

310 311 312 313

static int
testAddCPUModels(virQEMUCapsPtr caps, bool skipLegacy)
{
314 315
    virArch arch = virQEMUCapsGetArch(caps);
    const char *x86Models[] = {
316 317 318 319
        "Opteron_G3", "Opteron_G2", "Opteron_G1",
        "Nehalem", "Penryn", "Conroe",
        "Haswell-noTSX", "Haswell",
    };
320
    const char *x86LegacyModels[] = {
321 322 323 324
        "n270", "athlon", "pentium3", "pentium2", "pentium",
        "486", "coreduo", "kvm32", "qemu32", "kvm64",
        "core2duo", "phenom", "qemu64",
    };
325 326 327 328 329 330
    const char *armModels[] = {
        "cortex-a9", "cortex-a8", "cortex-a57", "cortex-a53",
    };
    const char *ppc64Models[] = {
        "POWER8", "POWER7",
    };
331 332 333
    const char *s390xModels[] = {
        "z990", "zEC12", "z13",
    };
334

335
    if (ARCH_IS_X86(arch)) {
336
        if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM, x86Models,
337 338
                                         ARRAY_CARDINALITY(x86Models),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
339
            virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU, x86Models,
340 341
                                         ARRAY_CARDINALITY(x86Models),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
342 343
            return -1;

344 345 346
        if (!skipLegacy) {
            if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM,
                                             x86LegacyModels,
347 348
                                             ARRAY_CARDINALITY(x86LegacyModels),
                                             VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
349 350
                virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU,
                                             x86LegacyModels,
351 352
                                             ARRAY_CARDINALITY(x86LegacyModels),
                                             VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
353 354
                return -1;
        }
355
    } else if (ARCH_IS_ARM(arch)) {
356
        if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM, armModels,
357 358
                                         ARRAY_CARDINALITY(armModels),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
359
            virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU, armModels,
360 361
                                         ARRAY_CARDINALITY(armModels),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
362 363
            return -1;
    } else if (ARCH_IS_PPC64(arch)) {
364
        if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM, ppc64Models,
365 366
                                         ARRAY_CARDINALITY(ppc64Models),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
367
            virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU, ppc64Models,
368 369
                                         ARRAY_CARDINALITY(ppc64Models),
                                         VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
370
            return -1;
371 372 373 374 375
    } 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;
376
    }
377 378 379 380 381 382

    return 0;
}


static int
383 384
testInitQEMUCaps(struct testInfo *info,
                 int gic)
385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400
{
    int ret = -1;

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

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

    ret = 0;

 cleanup:
    return ret;
}


401 402
static int
testUpdateQEMUCaps(const struct testInfo *info,
403 404
                   virDomainObjPtr vm,
                   virCapsPtr caps)
405 406 407
{
    int ret = -1;

408 409 410
    if (!caps)
        goto cleanup;

411 412
    virQEMUCapsSetArch(info->qemuCaps, vm->def->os.arch);

413 414
    virQEMUCapsInitQMPBasicArch(info->qemuCaps);

415 416
    if (testAddCPUModels(info->qemuCaps,
                         !!(info->flags & FLAG_SKIP_LEGACY_CPUS)) < 0)
417 418
        goto cleanup;

419 420 421 422
    virQEMUCapsInitHostCPUModel(info->qemuCaps, caps->host.arch,
                                VIR_DOMAIN_VIRT_KVM);
    virQEMUCapsInitHostCPUModel(info->qemuCaps, caps->host.arch,
                                VIR_DOMAIN_VIRT_QEMU);
423

424 425 426 427 428 429 430
    ret = 0;

 cleanup:
    return ret;
}


431 432 433 434 435 436
static int
testCheckExclusiveFlags(int flags)
{
    virCheckFlags(FLAG_EXPECT_FAILURE |
                  FLAG_EXPECT_PARSE_ERROR |
                  FLAG_FIPS |
437
                  FLAG_REAL_CAPS |
438
                  FLAG_SKIP_LEGACY_CPUS |
439 440
                  0, -1);

441
    VIR_EXCLUSIVE_FLAGS_RET(FLAG_REAL_CAPS, FLAG_SKIP_LEGACY_CPUS, -1);
442 443 444 445
    return 0;
}


446 447 448 449
static int
testCompareXMLToArgv(const void *data)
{
    struct testInfo *info = (void *) data;
450 451 452
    char *xml = NULL;
    char *args = NULL;
    char *migrateURI = NULL;
453
    char *actualargv = NULL;
454
    const char *suffix = info->suffix;
455 456
    unsigned int flags = info->flags;
    unsigned int parseFlags = info->parseFlags;
E
Eric Blake 已提交
457
    int ret = -1;
458
    virDomainObjPtr vm = NULL;
459
    virDomainChrSourceDef monitor_chr;
460
    virConnectPtr conn;
J
Jiri Denemark 已提交
461
    char *log = NULL;
E
Eric Blake 已提交
462
    virCommandPtr cmd = NULL;
463
    size_t i;
464
    qemuDomainObjPrivatePtr priv = NULL;
465

466 467
    memset(&monitor_chr, 0, sizeof(monitor_chr));

468
    if (!(conn = virGetConnect()))
469
        goto cleanup;
470

471 472 473
    if (!suffix)
        suffix = "";

474
    conn->secretDriver = &fakeSecretDriver;
475
    conn->storageDriver = &fakeStorageDriver;
476
    conn->nwfilterDriver = &fakeNWFilterDriver;
477

478 479 480 481
    virSetConnectInterface(conn);
    virSetConnectNetwork(conn);
    virSetConnectNWFilter(conn);
    virSetConnectNodeDev(conn);
482 483 484
    virSetConnectSecret(conn);
    virSetConnectStorage(conn);

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

488 489 490
    if (testCheckExclusiveFlags(info->flags) < 0)
        goto cleanup;

491
    if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0)
492 493
        goto cleanup;

494
    if (virAsprintf(&xml, "%s/qemuxml2argvdata/%s.xml",
495
                    abs_srcdir, info->name) < 0 ||
496 497
        virAsprintf(&args, "%s/qemuxml2argvdata/%s%s.args",
                    abs_srcdir, info->name, suffix) < 0)
498 499 500
        goto cleanup;

    if (info->migrateFrom &&
501 502
        !(migrateURI = qemuMigrationDstGetURI(info->migrateFrom,
                                              info->migrateFd)))
503 504
        goto cleanup;

505
    if (!(vm = virDomainObjNew(driver.xmlopt)))
506
        goto cleanup;
507

508
    parseFlags |= VIR_DOMAIN_DEF_PARSE_INACTIVE;
509
    if (!(vm->def = virDomainDefParseFile(xml, driver.caps, driver.xmlopt,
510
                                          NULL, parseFlags))) {
P
Pavel Hrdina 已提交
511
        if (flags & FLAG_EXPECT_PARSE_ERROR)
512
            goto ok;
513
        goto cleanup;
514
    }
515 516 517 518
    if (flags & FLAG_EXPECT_PARSE_ERROR) {
        VIR_TEST_DEBUG("passed instead of expected parse error");
        goto cleanup;
    }
519
    priv = vm->privateData;
520

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

524
    if (!virDomainDefCheckABIStability(vm->def, vm->def, driver.xmlopt)) {
525
        VIR_TEST_DEBUG("ABI stability check failed on %s", xml);
526
        goto cleanup;
527 528
    }

529
    vm->def->id = -1;
530

531
    if (qemuProcessPrepareMonitorChr(&monitor_chr, priv->libDir) < 0)
532
        goto cleanup;
533

534 535
    if (!(info->flags & FLAG_REAL_CAPS) &&
        testUpdateQEMUCaps(info, vm, driver.caps) < 0)
536
        goto cleanup;
537

538
    log = virTestLogContentAndReset();
539
    VIR_FREE(log);
540
    virResetLastError();
J
Jiri Denemark 已提交
541

542 543
    for (i = 0; i < vm->def->nhostdevs; i++) {
        virDomainHostdevDefPtr hostdev = vm->def->hostdevs[i];
544 545 546 547 548 549 550 551

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

552 553 554 555 556 557 558 559 560 561 562
    if (vm->def->vsock) {
        virDomainVsockDefPtr vsock = vm->def->vsock;
        qemuDomainVsockPrivatePtr vsockPriv =
            (qemuDomainVsockPrivatePtr)vsock->privateData;

        if (vsock->auto_cid == VIR_TRISTATE_BOOL_YES)
            vsock->guest_cid = 42;

        vsockPriv->vhostfd = 6789;
    }

563 564 565
    if (vm->def->tpm) {
        switch (vm->def->tpm->type) {
        case VIR_DOMAIN_TPM_TYPE_EMULATOR:
566
            VIR_FREE(vm->def->tpm->data.emulator.source.data.file.path);
567 568 569
            if (VIR_STRDUP(vm->def->tpm->data.emulator.source.data.file.path,
                           "/dev/test") < 0)
                goto cleanup;
570
            vm->def->tpm->data.emulator.source.type = VIR_DOMAIN_CHR_TYPE_FILE;
571 572 573 574 575 576 577
            break;
        case VIR_DOMAIN_TPM_TYPE_PASSTHROUGH:
        case VIR_DOMAIN_TPM_TYPE_LAST:
            break;
       }
    }

578
    if (!(cmd = qemuProcessCreatePretendCmd(&driver, vm, migrateURI,
P
Pavel Hrdina 已提交
579 580
                                            (flags & FLAG_FIPS), false,
                                            VIR_QEMU_PROCESS_START_COLD))) {
P
Pavel Hrdina 已提交
581 582
        if (flags & FLAG_EXPECT_FAILURE)
            goto ok;
583
        goto cleanup;
J
Jiri Denemark 已提交
584
    }
585 586 587 588
    if (flags & FLAG_EXPECT_FAILURE) {
        VIR_TEST_DEBUG("passed instead of expected failure");
        goto cleanup;
    }
J
Jiri Denemark 已提交
589

590
    if (!(actualargv = virCommandToString(cmd, false)))
591
        goto cleanup;
E
Eric Blake 已提交
592

593
    if (virTestCompareToFile(actualargv, args) < 0)
594
        goto cleanup;
595

P
Pavel Hrdina 已提交
596 597
    ret = 0;

598
 ok:
599
    if (ret == 0 && flags & FLAG_EXPECT_FAILURE) {
P
Pavel Hrdina 已提交
600 601
        ret = -1;
        VIR_TEST_DEBUG("Error expected but there wasn't any.\n");
602
        goto cleanup;
P
Pavel Hrdina 已提交
603
    }
604
    if (!virTestOOMActive()) {
605
        if (flags & FLAG_EXPECT_FAILURE) {
606
            if ((log = virTestLogContentAndReset()))
P
Pavel Hrdina 已提交
607 608
                VIR_TEST_DEBUG("Got expected error: \n%s", log);
        }
609
        virResetLastError();
P
Pavel Hrdina 已提交
610
        ret = 0;
611 612
    }

613
 cleanup:
614 615
    VIR_FREE(log);
    VIR_FREE(actualargv);
616
    virDomainChrSourceDefClear(&monitor_chr);
E
Eric Blake 已提交
617
    virCommandFree(cmd);
618
    virObjectUnref(vm);
619 620
    virSetConnectSecret(NULL);
    virSetConnectStorage(NULL);
621
    virObjectUnref(conn);
622
    VIR_FREE(migrateURI);
623 624
    VIR_FREE(xml);
    VIR_FREE(args);
625
    return ret;
626 627
}

A
Andrea Bolognani 已提交
628
# define FAKEROOTDIRTEMPLATE abs_builddir "/fakerootdir-XXXXXX"
629

630
static int
E
Eric Blake 已提交
631
mymain(void)
632
{
633
    int ret = 0, i;
A
Andrea Bolognani 已提交
634
    char *fakerootdir;
635 636 637 638 639 640 641
    const char *archs[] = {
        "aarch64",
        "ppc64",
        "riscv64",
        "s390x",
        "x86_64",
    };
642
    virHashTablePtr capslatest = NULL;
643

A
Andrea Bolognani 已提交
644 645 646 647 648 649 650 651 652 653 654 655
    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);

656 657
    abs_top_srcdir = getenv("abs_top_srcdir");
    if (!abs_top_srcdir)
658
        abs_top_srcdir = abs_srcdir "/..";
659

660 661 662 663 664 665 666 667 668 669
    /* 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;
    }

670
    if (qemuTestDriverInit(&driver) < 0)
671
        return EXIT_FAILURE;
672 673

    driver.privileged = true;
674

675 676 677
    VIR_FREE(driver.config->defaultTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->defaultTLSx509certdir, "/etc/pki/qemu") < 0)
        return EXIT_FAILURE;
678
    VIR_FREE(driver.config->vncTLSx509certdir);
679
    if (VIR_STRDUP_QUIET(driver.config->vncTLSx509certdir, "/etc/pki/libvirt-vnc") < 0)
680 681
        return EXIT_FAILURE;
    VIR_FREE(driver.config->spiceTLSx509certdir);
682
    if (VIR_STRDUP_QUIET(driver.config->spiceTLSx509certdir, "/etc/pki/libvirt-spice") < 0)
683
        return EXIT_FAILURE;
684 685 686
    VIR_FREE(driver.config->chardevTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->chardevTLSx509certdir, "/etc/pki/libvirt-chardev") < 0)
        return EXIT_FAILURE;
687
    VIR_FREE(driver.config->vxhsTLSx509certdir);
688
    if (VIR_STRDUP_QUIET(driver.config->vxhsTLSx509certdir, "/etc/pki/libvirt-vxhs/dummy,path") < 0)
689
        return EXIT_FAILURE;
690 691 692
    VIR_FREE(driver.config->nbdTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->nbdTLSx509certdir, "/etc/pki/libvirt-nbd/dummy,path") < 0)
        return EXIT_FAILURE;
693

694
    VIR_FREE(driver.config->hugetlbfs);
695
    if (VIR_ALLOC_N(driver.config->hugetlbfs, 2) < 0)
696
        return EXIT_FAILURE;
697 698 699
    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)
700
        return EXIT_FAILURE;
701 702
    driver.config->hugetlbfs[0].size = 2048;
    driver.config->hugetlbfs[0].deflt = true;
703
    driver.config->hugetlbfs[1].size = 1048576;
704
    driver.config->spiceTLS = 1;
705
    if (VIR_STRDUP_QUIET(driver.config->spicePassword, "123456") < 0)
706
        return EXIT_FAILURE;
707 708 709
    VIR_FREE(driver.config->memoryBackingDir);
    if (VIR_STRDUP_QUIET(driver.config->memoryBackingDir, "/var/lib/libvirt/qemu/ram") < 0)
        return EXIT_FAILURE;
710 711 712
    VIR_FREE(driver.config->nvramDir);
    if (VIR_STRDUP(driver.config->nvramDir, "/var/lib/libvirt/qemu/nvram") < 0)
        return EXIT_FAILURE;
713

714 715
    capslatest = virHashCreate(4, virHashValueFree);
    if (!capslatest)
716 717
        return EXIT_FAILURE;

718
    VIR_TEST_VERBOSE("\n");
719

720 721 722 723 724 725 726 727 728 729 730
    for (i = 0; i < ARRAY_CARDINALITY(archs); ++i) {
        char *cap = testQemuGetLatestCapsForArch(abs_srcdir "/qemucapabilitiesdata",
                                                 archs[i], "xml");

        if (!cap || virHashAddEntry(capslatest, archs[i], cap) < 0)
            return EXIT_FAILURE;

        VIR_TEST_VERBOSE("latest caps for %s: %s\n", archs[i], cap);
    }

    VIR_TEST_VERBOSE("\n");
731

732 733 734 735 736 737 738
    virFileWrapperAddPrefix(SYSCONFDIR "/qemu/firmware",
                            abs_srcdir "/qemufirmwaredata/etc/qemu/firmware");
    virFileWrapperAddPrefix(PREFIX "/share/qemu/firmware",
                            abs_srcdir "/qemufirmwaredata/usr/share/qemu/firmware");
    virFileWrapperAddPrefix("/home/user/.config/qemu/firmware",
                            abs_srcdir "/qemufirmwaredata/home/user/.config/qemu/firmware");

739 740 741 742 743 744 745 746 747 748 749 750 751 752 753
/**
 * The following set of macros allows testing of XML -> argv conversion with a
 * real set of capabilities gathered from a real qemu copy. It is desired to use
 * these for positive test cases as it provides combinations of flags which
 * can be met in real life.
 *
 * The capabilities are taken from the real capabilities stored in
 * tests/qemucapabilitiesdata.
 *
 * It is suggested to use the DO_TEST_CAPS_LATEST macro which always takes the
 * most recent capability set. In cases when the new code would change behaviour
 * the test cases should be forked using DO_TEST_CAPS_VER with the appropriate
 * version.
 */
# define DO_TEST_CAPS_INTERNAL(name, suffix, migrateFrom, flags, parseFlags, \
754
                               arch, capsfile, stripmachinealiases) \
755 756 757
    do { \
        static struct testInfo info = { \
            name, "." suffix, NULL, migrateFrom, migrateFrom ? 7 : -1,\
758
            (flags | FLAG_REAL_CAPS), parseFlags, \
759 760 761 762
        }; \
        if (!(info.qemuCaps = qemuTestParseCapabilitiesArch(virArchFromString(arch), \
                                                            capsfile))) \
            return EXIT_FAILURE; \
763 764
        if (stripmachinealiases) \
            virQEMUCapsStripMachineAliases(info.qemuCaps); \
765 766 767 768 769 770 771 772
        if (virTestRun("QEMU XML-2-ARGV " name "." suffix, \
                       testCompareXMLToArgv, &info) < 0) \
            ret = -1; \
        virObjectUnref(info.qemuCaps); \
    } while (0)

# define TEST_CAPS_PATH abs_srcdir "/qemucapabilitiesdata/caps_"

773 774
# define DO_TEST_CAPS_ARCH_VER_FULL(name, flags, parseFlags, arch, ver) \
    DO_TEST_CAPS_INTERNAL(name, arch "-" ver, NULL, flags, parseFlags, \
775
                          arch, TEST_CAPS_PATH ver "." arch ".xml", false)
776

777 778
# define DO_TEST_CAPS_ARCH_VER(name, arch, ver) \
    DO_TEST_CAPS_ARCH_VER_FULL(name, 0, 0, arch, ver)
779 780

# define DO_TEST_CAPS_VER(name, ver) \
781
    DO_TEST_CAPS_ARCH_VER(name, "x86_64", ver)
782

783 784
# define DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, flags, parseFlags) \
    DO_TEST_CAPS_INTERNAL(name, arch "-latest", NULL, flags, parseFlags, arch, \
785 786
                          virHashLookup(capslatest, arch), true)

787 788 789
# define DO_TEST_CAPS_ARCH_LATEST(name, arch) \
    DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, 0, 0)

790
# define DO_TEST_CAPS_LATEST(name) \
791
    DO_TEST_CAPS_ARCH_LATEST(name, "x86_64")
792

793 794 795 796 797 798
# define DO_TEST_CAPS_LATEST_FAILURE(name) \
    DO_TEST_CAPS_ARCH_LATEST_FULL(name, "x86_64", FLAG_EXPECT_FAILURE, 0)

# define DO_TEST_CAPS_LATEST_PARSE_ERROR(name) \
    DO_TEST_CAPS_ARCH_LATEST_FULL(name, "x86_64", FLAG_EXPECT_PARSE_ERROR, 0)

799 800 801 802 803 804 805 806 807 808
/**
 * The following test macros should be used only in cases when the tests require
 * testing of some non-standard combination of capability flags
 */
# define DO_TEST_CAPS_FULL(name, flags, parseFlags, ver) \
    DO_TEST_CAPS_ARCH(name, NULL, flags, parseFlags, GIC_NONE, "x86_64", ver)

# define DO_TEST_CAPS(name, ver) \
    DO_TEST_CAPS_FULL(name, 0, 0, ver)

809 810 811 812
# define DO_TEST_FULL(name, migrateFrom, migrateFd, flags, \
                      parseFlags, gic, ...) \
    do { \
        static struct testInfo info = { \
813
            name, NULL, NULL, migrateFrom, migrateFd, (flags), parseFlags, \
814 815 816 817 818 819 820 821
        }; \
        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); \
822 823
    } while (0)

824
# define DO_TEST(name, ...) \
825
    DO_TEST_FULL(name, NULL, -1, 0, 0, GIC_NONE, __VA_ARGS__)
826

827
# define DO_TEST_GIC(name, gic, ...) \
828 829
    DO_TEST_FULL(name, NULL, -1, 0, 0, gic, __VA_ARGS__)

830 831
# define DO_TEST_FAILURE(name, ...) \
    DO_TEST_FULL(name, NULL, -1, FLAG_EXPECT_FAILURE, \
832
                 0, GIC_NONE, __VA_ARGS__)
833

834 835 836
# define DO_TEST_PARSE_ERROR(name, ...) \
    DO_TEST_FULL(name, NULL, -1, \
                 FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE, \
837
                 0, GIC_NONE, __VA_ARGS__)
838

839 840 841
# define DO_TEST_PARSE_FLAGS_ERROR(name, parseFlags, ...) \
    DO_TEST_FULL(name, NULL, -1, \
                 FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE, \
842
                 parseFlags, GIC_NONE, __VA_ARGS__)
843 844

# define NONE QEMU_CAPS_LAST
845

846 847 848
    /* 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 */
849 850 851 852 853 854 855
    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");
856 857
    unsetenv("QEMU_AUDIO_DRV");
    unsetenv("SDL_AUDIODRIVER");
858

859
    DO_TEST("minimal", NONE);
860 861
    DO_TEST("minimal-sandbox",
            QEMU_CAPS_SECCOMP_BLACKLIST);
862
    DO_TEST_PARSE_ERROR("minimal-no-memory", NONE);
863
    DO_TEST("minimal-msg-timestamp", QEMU_CAPS_MSG_TIMESTAMP);
864 865 866 867

    DO_TEST_CAPS_LATEST("genid");
    DO_TEST_CAPS_LATEST("genid-auto");

868
    DO_TEST("machine-aliases1", NONE);
869
    DO_TEST("machine-aliases2", QEMU_CAPS_KVM);
870
    DO_TEST("machine-core-on", NONE);
871
    driver.config->dumpGuestCore = true;
872
    DO_TEST("machine-core-off", NONE);
873
    driver.config->dumpGuestCore = false;
M
Michal Privoznik 已提交
874 875 876
    DO_TEST("machine-smm-opt",
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
877
            QEMU_CAPS_DEVICE_IOH3420,
M
Michal Privoznik 已提交
878 879 880
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_MACHINE_SMM_OPT,
            QEMU_CAPS_VIRTIO_SCSI);
881
    DO_TEST("machine-vmport-opt",
882
            QEMU_CAPS_MACHINE_VMPORT_OPT);
883 884 885
    DO_TEST("default-kvm-host-arch", NONE);
    DO_TEST("default-qemu-host-arch", NONE);
    DO_TEST("x86-kvm-32-on-64", NONE);
886 887 888
    DO_TEST("boot-cdrom", NONE);
    DO_TEST("boot-network", NONE);
    DO_TEST("boot-floppy", NONE);
889
    DO_TEST("boot-floppy-q35",
890
            QEMU_CAPS_DEVICE_IOH3420,
891
            QEMU_CAPS_ICH9_AHCI);
J
Ján Tomko 已提交
892 893
    DO_TEST("boot-multi", NONE);
    DO_TEST("boot-menu-enable", NONE);
894
    DO_TEST("boot-menu-enable-with-timeout",
895
            QEMU_CAPS_SPLASH_TIMEOUT);
J
Ján Tomko 已提交
896
    DO_TEST_FAILURE("boot-menu-enable-with-timeout", NONE);
897
    DO_TEST_PARSE_ERROR("boot-menu-enable-with-timeout-invalid", NONE);
J
Ján Tomko 已提交
898 899
    DO_TEST("boot-menu-disable", NONE);
    DO_TEST("boot-menu-disable-drive", NONE);
900
    DO_TEST_PARSE_ERROR("boot-dev+order",
901
            QEMU_CAPS_VIRTIO_BLK_SCSI);
902
    DO_TEST("boot-order",
903
            QEMU_CAPS_VIRTIO_BLK_SCSI);
904
    DO_TEST("boot-complex",
905
            QEMU_CAPS_VIRTIO_BLK_SCSI);
906
    DO_TEST("boot-strict",
907
            QEMU_CAPS_BOOT_STRICT,
908
            QEMU_CAPS_VIRTIO_BLK_SCSI);
909 910 911 912 913

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

914
    DO_TEST("bios",
915
            QEMU_CAPS_DEVICE_ISA_SERIAL,
916
            QEMU_CAPS_SGA);
J
Ján Tomko 已提交
917
    DO_TEST("bios-nvram", NONE);
M
Michal Privoznik 已提交
918 919 920
    DO_TEST("bios-nvram-secure",
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
921
            QEMU_CAPS_DEVICE_IOH3420,
M
Michal Privoznik 已提交
922 923 924
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_MACHINE_SMM_OPT,
            QEMU_CAPS_VIRTIO_SCSI);
925 926 927 928 929 930 931

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

932
    DO_TEST("clock-utc", NONE);
933
    DO_TEST("clock-localtime", NONE);
J
Ján Tomko 已提交
934 935 936 937
    DO_TEST("clock-localtime-basis-localtime", NONE);
    DO_TEST("clock-variable", NONE);
    DO_TEST("clock-france", NONE);
    DO_TEST("clock-hpet-off", NONE);
J
Ján Tomko 已提交
938
    DO_TEST("clock-catchup", QEMU_CAPS_KVM_PIT_TICK_POLICY);
939 940
    DO_TEST("cpu-kvmclock", NONE);
    DO_TEST("cpu-host-kvmclock", NONE);
941
    DO_TEST("kvmclock", QEMU_CAPS_KVM);
942
    DO_TEST("clock-timer-hyperv-rtc", QEMU_CAPS_KVM);
943

944 945
    DO_TEST("cpu-eoi-disabled", NONE);
    DO_TEST("cpu-eoi-enabled", NONE);
J
Ján Tomko 已提交
946
    DO_TEST("controller-order",
947 948 949 950 951 952
            QEMU_CAPS_KVM,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_CCID_PASSTHRU,
            QEMU_CAPS_SPICE,
            QEMU_CAPS_HDA_DUPLEX,
            QEMU_CAPS_USB_HUB,
953
            QEMU_CAPS_DEVICE_ISA_SERIAL,
954
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
955 956
    DO_TEST("eoi-disabled", NONE);
    DO_TEST("eoi-enabled", NONE);
957 958
    DO_TEST("pv-spinlock-disabled", NONE);
    DO_TEST("pv-spinlock-enabled", NONE);
959
    DO_TEST("kvmclock+eoi-disabled", NONE);
960

961
    DO_TEST("hyperv", NONE);
962
    DO_TEST("hyperv-off", NONE);
963
    DO_TEST("hyperv-panic", NONE);
964

965 966 967
    DO_TEST("kvm-features", NONE);
    DO_TEST("kvm-features-off", NONE);

968 969 970
    DO_TEST("pmu-feature", NONE);
    DO_TEST("pmu-feature-off", NONE);

971 972 973
    DO_TEST("pages-discard",
            QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
974 975 976 977
    DO_TEST("pages-discard-hugepages",
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
978 979 980 981
    DO_TEST("pages-dimm-discard",
            QEMU_CAPS_DEVICE_PC_DIMM,
            QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
982
    DO_TEST("hugepages-default", NONE);
983
    DO_TEST("hugepages-default-2M", NONE);
984
    DO_TEST("hugepages-default-system-size", NONE);
985
    DO_TEST_PARSE_ERROR("hugepages-default-1G-nodeset-2M", NONE);
986
    DO_TEST("hugepages-nodeset", NONE);
987 988 989 990
    DO_TEST_PARSE_ERROR("hugepages-nodeset-nonexist",
                        QEMU_CAPS_DEVICE_PC_DIMM,
                        QEMU_CAPS_OBJECT_MEMORY_FILE,
                        QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD);
991
    DO_TEST("hugepages-numa-default",
992
            QEMU_CAPS_OBJECT_MEMORY_FILE);
993 994 995
    DO_TEST("hugepages-numa-default-2M",
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
996
    DO_TEST("hugepages-numa-default-dimm",
997
            QEMU_CAPS_DEVICE_PC_DIMM,
J
Ján Tomko 已提交
998
            QEMU_CAPS_OBJECT_MEMORY_FILE);
999
    DO_TEST("hugepages-numa-nodeset",
A
Andrea Bolognani 已提交
1000
            QEMU_CAPS_OBJECT_MEMORY_RAM,
1001
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1002 1003
    DO_TEST("hugepages-numa-nodeset-part",
            QEMU_CAPS_OBJECT_MEMORY_RAM,
1004
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1005 1006 1007
    DO_TEST_PARSE_ERROR("hugepages-numa-nodeset-nonexist",
                        QEMU_CAPS_OBJECT_MEMORY_RAM,
                        QEMU_CAPS_OBJECT_MEMORY_FILE);
A
Andrea Bolognani 已提交
1008 1009 1010
    DO_TEST("hugepages-shared",
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1011
    DO_TEST_PARSE_ERROR("hugepages-memaccess-invalid", NONE);
1012 1013 1014
    DO_TEST("hugepages-memaccess", QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_DEVICE_PC_DIMM,
            QEMU_CAPS_NUMA);
1015 1016 1017
    DO_TEST("hugepages-memaccess2", QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_DEVICE_PC_DIMM,
            QEMU_CAPS_NUMA);
1018 1019 1020
    DO_TEST_PARSE_ERROR("hugepages-memaccess3",
                        QEMU_CAPS_OBJECT_MEMORY_RAM,
                        QEMU_CAPS_OBJECT_MEMORY_FILE);
1021
    DO_TEST_CAPS_LATEST("hugepages-nvdimm");
1022
    DO_TEST("nosharepages", QEMU_CAPS_MEM_MERGE);
1023
    DO_TEST("disk-cdrom", NONE);
1024
    DO_TEST_CAPS_VER("disk-cdrom", "2.12.0");
1025
    DO_TEST_CAPS_LATEST("disk-cdrom");
1026
    DO_TEST_CAPS_LATEST("disk-cdrom-bus-other");
1027
    DO_TEST("disk-iscsi", NONE);
1028
    DO_TEST("disk-cdrom-network", QEMU_CAPS_KVM);
1029
    DO_TEST_CAPS_VER("disk-cdrom-network", "2.12.0");
1030
    DO_TEST_CAPS_LATEST("disk-cdrom-network");
1031
    DO_TEST("disk-cdrom-tray",
1032
            QEMU_CAPS_VIRTIO_TX_ALG);
1033
    DO_TEST_CAPS_VER("disk-cdrom-tray", "2.12.0");
1034
    DO_TEST_CAPS_LATEST("disk-cdrom-tray");
1035
    DO_TEST("disk-floppy", NONE);
1036
    DO_TEST_CAPS_VER("disk-floppy", "2.12.0");
1037
    DO_TEST_CAPS_LATEST("disk-floppy");
1038
    DO_TEST_CAPS_VER("disk-floppy-q35-2_9", "2.12.0");
1039
    DO_TEST_CAPS_LATEST("disk-floppy-q35-2_9");
1040
    DO_TEST_CAPS_VER("disk-floppy-q35-2_11", "2.12.0");
1041
    DO_TEST_CAPS_LATEST("disk-floppy-q35-2_11");
1042 1043
    DO_TEST_FAILURE("disk-floppy-pseries",
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
1044
    DO_TEST("disk-floppy-tray", NONE);
1045
    DO_TEST("disk-virtio-s390",
1046
            QEMU_CAPS_VIRTIO_S390);
1047
    DO_TEST("disk-virtio", NONE);
1048
    DO_TEST("disk-virtio-ccw",
1049
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1050
    DO_TEST("disk-virtio-ccw-many",
1051
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1052 1053 1054 1055
    DO_TEST("disk-virtio-s390-zpci",
            QEMU_CAPS_DEVICE_ZPCI,
            QEMU_CAPS_CCW,
            QEMU_CAPS_VIRTIO_S390);
1056
    DO_TEST("disk-order", QEMU_CAPS_VIRTIO_BLK_SCSI);
1057
    DO_TEST("disk-virtio-queues",
L
Lin Ma 已提交
1058
            QEMU_CAPS_VIRTIO_BLK_NUM_QUEUES);
1059 1060 1061
    DO_TEST("disk-boot-disk", NONE);
    DO_TEST("disk-boot-cdrom", NONE);
    DO_TEST("floppy-drive-fat", NONE);
1062
    DO_TEST_CAPS_VER("floppy-drive-fat", "2.12.0");
1063
    DO_TEST_CAPS_LATEST("floppy-drive-fat");
1064
    DO_TEST("disk-readonly-disk", NONE);
1065
    DO_TEST_CAPS_VER("disk-readonly-disk", "2.12.0");
1066
    DO_TEST_CAPS_LATEST("disk-readonly-disk");
1067 1068 1069 1070
    DO_TEST("disk-fmt-qcow", NONE);
    DO_TEST_PARSE_ERROR("disk-fmt-cow", NONE);
    DO_TEST_PARSE_ERROR("disk-fmt-dir", NONE);
    DO_TEST_PARSE_ERROR("disk-fmt-iso", NONE);
1071
    DO_TEST_CAPS_VER("disk-shared", "2.12.0");
1072
    DO_TEST_CAPS_LATEST("disk-shared");
1073 1074
    DO_TEST_PARSE_ERROR("disk-shared-qcow", NONE);
    DO_TEST("disk-error-policy", NONE);
1075
    DO_TEST_CAPS_VER("disk-error-policy", "2.12.0");
1076
    DO_TEST_CAPS_LATEST("disk-error-policy");
1077
    DO_TEST_CAPS_VER("disk-cache", "1.5.3");
1078 1079
    DO_TEST_CAPS_VER("disk-cache", "2.6.0");
    DO_TEST_CAPS_VER("disk-cache", "2.7.0");
1080
    DO_TEST_CAPS_VER("disk-cache", "2.12.0");
1081
    DO_TEST_CAPS_LATEST("disk-cache");
1082
    DO_TEST("disk-network-nbd", NONE);
1083
    DO_TEST_CAPS_VER("disk-network-nbd", "2.12.0");
1084
    DO_TEST_CAPS_LATEST("disk-network-nbd");
1085
    DO_TEST("disk-network-iscsi", QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_BLOCK);
1086 1087 1088 1089
    DO_TEST("disk-network-iscsi-modern",
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_BLOCK,
            QEMU_CAPS_ISCSI_PASSWORD_SECRET);
1090
    DO_TEST_CAPS_VER("disk-network-iscsi", "2.12.0");
1091
    DO_TEST_CAPS_LATEST("disk-network-iscsi");
1092 1093 1094 1095
    DO_TEST_PARSE_ERROR("disk-network-iscsi-auth-secrettype-invalid", NONE);
    DO_TEST_PARSE_ERROR("disk-network-iscsi-auth-wrong-secrettype", NONE);
    DO_TEST_PARSE_ERROR("disk-network-source-auth-both", NONE);
    DO_TEST("disk-network-gluster",
1096
            QEMU_CAPS_GLUSTER_DEBUG_LEVEL);
1097
    DO_TEST_CAPS_VER("disk-network-gluster", "2.12.0");
1098
    DO_TEST_CAPS_LATEST("disk-network-gluster");
1099
    DO_TEST_CAPS_VER("disk-network-rbd", "2.5.0");
1100
    DO_TEST_CAPS_VER("disk-network-rbd", "2.12.0");
1101 1102
    DO_TEST_CAPS_LATEST("disk-network-rbd");
    DO_TEST_FAILURE("disk-network-rbd-no-colon", NONE);
1103
    DO_TEST("disk-network-sheepdog", NONE);
1104
    DO_TEST_CAPS_VER("disk-network-sheepdog", "2.12.0");
1105
    DO_TEST_CAPS_LATEST("disk-network-sheepdog");
1106
    DO_TEST("disk-network-source-auth", NONE);
1107
    DO_TEST_CAPS_VER("disk-network-source-auth", "2.12.0");
1108
    DO_TEST_CAPS_LATEST("disk-network-source-auth");
1109
    DO_TEST("disk-network-vxhs", QEMU_CAPS_VXHS);
1110
    driver.config->vxhsTLS = 1;
1111
    DO_TEST("disk-network-tlsx509", QEMU_CAPS_VXHS,
1112
            QEMU_CAPS_OBJECT_TLS_CREDS_X509, QEMU_CAPS_NBD_TLS);
1113
    DO_TEST_CAPS_VER("disk-network-tlsx509", "2.12.0");
1114
    DO_TEST_CAPS_LATEST("disk-network-tlsx509");
1115 1116
    driver.config->vxhsTLS = 0;
    VIR_FREE(driver.config->vxhsTLSx509certdir);
1117
    DO_TEST("disk-no-boot", NONE);
1118
    DO_TEST_PARSE_ERROR("disk-device-lun-type-invalid",
1119 1120
                        QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST_FAILURE("disk-usb-nosupport", NONE);
1121
    DO_TEST("disk-usb-device",
1122
            QEMU_CAPS_DEVICE_USB_STORAGE);
1123
    DO_TEST("disk-usb-device-removable",
1124
            QEMU_CAPS_DEVICE_USB_STORAGE,
1125
            QEMU_CAPS_USB_STORAGE_REMOVABLE);
1126
    DO_TEST_FAILURE("disk-usb-pci",
1127
                    QEMU_CAPS_DEVICE_USB_STORAGE);
1128
    DO_TEST_CAPS_LATEST("disk-scsi");
1129 1130
    DO_TEST_CAPS_VER("disk-scsi-device-auto", "1.5.3");
    DO_TEST_CAPS_LATEST("disk-scsi-device-auto");
1131
    DO_TEST("disk-scsi-disk-split",
1132
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI);
1133
    DO_TEST("disk-scsi-disk-wwn",
1134
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_DISK_WWN);
1135
    DO_TEST("disk-scsi-disk-vpd",
1136
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_DISK_WWN);
1137
    DO_TEST_FAILURE("disk-scsi-disk-vpd-build-error",
1138
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_DISK_WWN);
1139
    DO_TEST_CAPS_LATEST("controller-virtio-scsi");
1140
    DO_TEST("disk-sata-device",
1141
            QEMU_CAPS_ICH9_AHCI);
J
Ján Tomko 已提交
1142
    DO_TEST("disk-aio", NONE);
1143
    DO_TEST_CAPS_VER("disk-aio", "2.12.0");
1144
    DO_TEST_CAPS_LATEST("disk-aio");
1145 1146
    DO_TEST("disk-source-pool", NONE);
    DO_TEST("disk-source-pool-mode", NONE);
1147
    DO_TEST("disk-ioeventfd",
1148
            QEMU_CAPS_VIRTIO_IOEVENTFD,
1149
            QEMU_CAPS_VIRTIO_TX_ALG,
1150
            QEMU_CAPS_VIRTIO_BLK_SCSI);
1151
    DO_TEST("disk-copy_on_read",
1152
            QEMU_CAPS_VIRTIO_TX_ALG,
1153
            QEMU_CAPS_VIRTIO_BLK_SCSI);
1154
    DO_TEST_CAPS_VER("disk-copy_on_read", "2.12.0");
1155
    DO_TEST_CAPS_LATEST("disk-copy_on_read");
1156
    DO_TEST("disk-discard",
1157
            QEMU_CAPS_DRIVE_DISCARD);
1158
    DO_TEST("disk-detect-zeroes",
1159 1160
            QEMU_CAPS_DRIVE_DISCARD,
            QEMU_CAPS_DRIVE_DETECT_ZEROES);
1161
    DO_TEST_CAPS_VER("disk-detect-zeroes", "2.12.0");
1162
    DO_TEST_CAPS_LATEST("disk-detect-zeroes");
1163
    DO_TEST("disk-snapshot", NONE);
1164 1165
    DO_TEST_PARSE_ERROR("disk-same-targets",
                        QEMU_CAPS_SCSI_LSI,
1166
                        QEMU_CAPS_DEVICE_USB_STORAGE);
1167
    DO_TEST_PARSE_ERROR("disk-address-conflict",
1168 1169
                        QEMU_CAPS_ICH9_AHCI);
    DO_TEST_PARSE_ERROR("disk-hostdev-scsi-address-conflict",
1170
                        QEMU_CAPS_VIRTIO_SCSI);
1171
    DO_TEST_PARSE_ERROR("hostdevs-drive-address-conflict",
1172
                        QEMU_CAPS_VIRTIO_SCSI);
1173
    DO_TEST("event_idx",
1174 1175
            QEMU_CAPS_VIRTIO_BLK_EVENT_IDX,
            QEMU_CAPS_VIRTIO_NET_EVENT_IDX,
1176
            QEMU_CAPS_VIRTIO_BLK_SCSI);
1177
    DO_TEST("virtio-lun",
1178
            QEMU_CAPS_VIRTIO_BLK_SCSI);
1179
    DO_TEST("disk-scsi-lun-passthrough",
1180
            QEMU_CAPS_SCSI_BLOCK,
1181
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI);
1182
    DO_TEST("disk-serial",
1183
            QEMU_CAPS_KVM);
1184 1185 1186 1187 1188 1189 1190 1191
    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);
1192 1193 1194 1195
    DO_TEST_CAPS_VER("disk-backing-chains-index", "2.12.0");
    DO_TEST_CAPS_LATEST("disk-backing-chains-index");
    DO_TEST_CAPS_VER("disk-backing-chains-noindex", "2.12.0");
    DO_TEST_CAPS_LATEST("disk-backing-chains-noindex");
1196

1197 1198 1199
    DO_TEST("graphics-egl-headless",
            QEMU_CAPS_EGL_HEADLESS,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1200 1201
    DO_TEST_CAPS_LATEST("graphics-egl-headless");
    DO_TEST_CAPS_LATEST("graphics-egl-headless-rendernode");
1202

1203 1204
    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);
1205 1206
    DO_TEST("graphics-vnc-websocket",
            QEMU_CAPS_VNC,
1207
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1208
    DO_TEST("graphics-vnc-policy", QEMU_CAPS_VNC,
1209 1210 1211 1212 1213
            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);
1214
    driver.config->vncAutoUnixSocket = true;
1215 1216
    DO_TEST("graphics-vnc-auto-socket-cfg", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1217
    driver.config->vncAutoUnixSocket = false;
1218 1219 1220 1221
    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);
1222 1223
    DO_TEST("graphics-vnc-socket-new-cmdline", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA, QEMU_CAPS_VNC_MULTI_SERVERS);
1224

1225 1226
    driver.config->vncSASL = 1;
    VIR_FREE(driver.config->vncSASLdir);
1227
    ignore_value(VIR_STRDUP(driver.config->vncSASLdir, "/root/.sasl2"));
1228
    DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1229 1230
    driver.config->vncTLS = 1;
    driver.config->vncTLSx509verify = 1;
1231
    DO_TEST("graphics-vnc-tls", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1232 1233
    DO_TEST_CAPS_VER("graphics-vnc-tls", "2.4.0");
    DO_TEST_CAPS_LATEST("graphics-vnc-tls");
1234 1235 1236 1237 1238
    if (VIR_STRDUP_QUIET(driver.config->vncTLSx509secretUUID,
                         "6fd3f62d-9fe7-4a4e-a869-7acd6376d8ea") < 0)
        return EXIT_FAILURE;
    DO_TEST_CAPS_LATEST("graphics-vnc-tls-secret");
    VIR_FREE(driver.config->vncTLSx509secretUUID);
1239
    driver.config->vncSASL = driver.config->vncTLSx509verify = driver.config->vncTLS = 0;
1240 1241
    VIR_FREE(driver.config->vncSASLdir);
    VIR_FREE(driver.config->vncTLSx509certdir);
1242 1243 1244 1245
    DO_TEST("graphics-vnc-egl-headless",
            QEMU_CAPS_VNC,
            QEMU_CAPS_EGL_HEADLESS,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1246

J
Ján Tomko 已提交
1247 1248
    DO_TEST("graphics-sdl",
            QEMU_CAPS_DEVICE_VGA);
1249
    DO_TEST_CAPS_LATEST_PARSE_ERROR("graphics-sdl-egl-headless");
J
Ján Tomko 已提交
1250
    DO_TEST("graphics-sdl-fullscreen",
1251
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1252
    DO_TEST("graphics-spice",
1253
            QEMU_CAPS_SPICE,
1254 1255
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
1256
    DO_TEST("graphics-spice-no-args",
1257
            QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1258 1259 1260
    driver.config->spiceSASL = 1;
    ignore_value(VIR_STRDUP(driver.config->spiceSASLdir, "/root/.sasl2"));
    DO_TEST("graphics-spice-sasl",
1261
            QEMU_CAPS_SPICE,
1262 1263 1264
            QEMU_CAPS_DEVICE_QXL);
    VIR_FREE(driver.config->spiceSASLdir);
    driver.config->spiceSASL = 0;
1265
    DO_TEST("graphics-spice-agentmouse",
1266
            QEMU_CAPS_DEVICE_QXL,
1267
            QEMU_CAPS_SPICE,
1268
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1269
    DO_TEST("graphics-spice-compression",
1270
            QEMU_CAPS_SPICE,
1271
            QEMU_CAPS_DEVICE_QXL);
1272
    DO_TEST("graphics-spice-timeout",
1273
            QEMU_CAPS_KVM,
1274
            QEMU_CAPS_SPICE,
1275 1276
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_DEVICE_VGA);
1277
    DO_TEST("graphics-spice-qxl-vga",
1278
            QEMU_CAPS_SPICE,
1279
            QEMU_CAPS_DEVICE_QXL);
1280
    DO_TEST("graphics-spice-usb-redir",
1281
            QEMU_CAPS_SPICE,
1282 1283 1284 1285
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1286
    DO_TEST("graphics-spice-agent-file-xfer",
1287
            QEMU_CAPS_SPICE,
1288 1289
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
1290 1291
    DO_TEST("graphics-spice-socket",
            QEMU_CAPS_SPICE,
1292 1293
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1294 1295
    DO_TEST("graphics-spice-auto-socket",
            QEMU_CAPS_SPICE,
1296 1297
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1298 1299 1300
    driver.config->spiceAutoUnixSocket = true;
    DO_TEST("graphics-spice-auto-socket-cfg",
            QEMU_CAPS_SPICE,
1301 1302
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1303
    driver.config->spiceAutoUnixSocket = false;
1304 1305 1306 1307
    DO_TEST("graphics-spice-egl-headless",
            QEMU_CAPS_SPICE,
            QEMU_CAPS_EGL_HEADLESS,
            QEMU_CAPS_DEVICE_QXL);
1308
    DO_TEST_CAPS_LATEST_PARSE_ERROR("graphics-spice-invalid-egl-headless");
1309
    DO_TEST_CAPS_LATEST("graphics-spice-gl-auto-rendernode");
1310

1311 1312 1313
    DO_TEST("input-usbmouse", NONE);
    DO_TEST("input-usbtablet", NONE);
    DO_TEST("misc-acpi", NONE);
1314 1315 1316
    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);
1317
    DO_TEST_FAILURE("misc-enable-s4", NONE);
1318
    DO_TEST("misc-no-reboot", NONE);
1319
    DO_TEST("misc-uuid", NONE);
1320
    DO_TEST_PARSE_ERROR("vhost_queues-invalid", NONE);
1321
    DO_TEST("net-vhostuser", QEMU_CAPS_CHARDEV_FD_PASS);
1322 1323
    DO_TEST_CAPS_VER("net-vhostuser", "2.5.0");
    DO_TEST_CAPS_LATEST("net-vhostuser");
1324
    DO_TEST("net-vhostuser-multiq",
J
Ján Tomko 已提交
1325 1326
            QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
    DO_TEST_FAILURE("net-vhostuser-multiq", NONE);
1327 1328
    DO_TEST_FAILURE("net-vhostuser-fail",
                    QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
1329
    DO_TEST("net-user", NONE);
J
Ján Tomko 已提交
1330
    DO_TEST("net-user-addr", NONE);
1331 1332
    DO_TEST("net-virtio", NONE);
    DO_TEST("net-virtio-device",
1333 1334 1335
            QEMU_CAPS_VIRTIO_TX_ALG);
    DO_TEST("net-virtio-disable-offloads", NONE);
    DO_TEST("net-virtio-netdev", NONE);
1336
    DO_TEST("net-virtio-s390",
1337
            QEMU_CAPS_VIRTIO_S390);
1338
    DO_TEST("net-virtio-ccw",
1339
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1340 1341 1342
    DO_TEST("net-virtio-rxtxqueuesize",
            QEMU_CAPS_VIRTIO_NET_RX_QUEUE_SIZE,
            QEMU_CAPS_VIRTIO_NET_TX_QUEUE_SIZE);
1343
    DO_TEST_PARSE_ERROR("net-virtio-rxqueuesize-invalid-size", NONE);
1344 1345
    DO_TEST("net-eth", NONE);
    DO_TEST("net-eth-ifname", NONE);
1346
    DO_TEST("net-eth-names", NONE);
1347
    DO_TEST("net-eth-hostip", NONE);
1348 1349 1350
    DO_TEST("net-client", NONE);
    DO_TEST("net-server", NONE);
    DO_TEST("net-mcast", NONE);
1351
    DO_TEST("net-udp", NONE);
1352
    DO_TEST("net-hostdev", NONE);
1353
    DO_TEST("net-hostdev-bootorder", NONE);
1354
    DO_TEST("net-hostdev-multidomain", NONE);
1355 1356
    DO_TEST("net-hostdev-vfio",
            QEMU_CAPS_DEVICE_VFIO_PCI);
1357
    DO_TEST("net-hostdev-vfio-multidomain",
1358
            QEMU_CAPS_DEVICE_VFIO_PCI);
1359 1360 1361
    DO_TEST_FAILURE("net-hostdev-fail",
                    QEMU_CAPS_DEVICE_VFIO_PCI);

1362

1363 1364
    DO_TEST("serial-file-log",
            QEMU_CAPS_CHARDEV_FILE_APPEND,
1365
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1366
            QEMU_CAPS_CHARDEV_LOGFILE);
1367
    DO_TEST("serial-spiceport",
1368
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1369
            QEMU_CAPS_DEVICE_QXL,
1370
            QEMU_CAPS_SPICE,
1371
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1372
    DO_TEST("serial-spiceport-nospice", NONE);
1373

1374 1375 1376 1377
    DO_TEST("console-compat",
            QEMU_CAPS_DEVICE_ISA_SERIAL);
    DO_TEST("console-compat-auto",
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1378 1379

    DO_TEST("serial-vc-chardev",
1380
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1381
    DO_TEST("serial-pty-chardev",
1382
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1383
    DO_TEST("serial-dev-chardev",
1384
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1385
    DO_TEST("serial-dev-chardev-iobase",
1386
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1387
    DO_TEST("serial-file-chardev",
1388
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1389
            QEMU_CAPS_CHARDEV_FILE_APPEND);
1390
    DO_TEST("serial-unix-chardev",
1391
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1392
    DO_TEST_CAPS_LATEST("serial-unix-chardev");
1393
    DO_TEST_PARSE_ERROR("serial-unix-missing-source", NONE);
1394
    DO_TEST("serial-tcp-chardev",
1395
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1396
    DO_TEST("serial-udp-chardev",
1397
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1398
    DO_TEST("serial-tcp-telnet-chardev",
1399
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1400 1401
    driver.config->chardevTLS = 1;
    DO_TEST("serial-tcp-tlsx509-chardev",
1402
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1403
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1404 1405
    driver.config->chardevTLSx509verify = 1;
    DO_TEST("serial-tcp-tlsx509-chardev-verify",
1406
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1407 1408
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
    driver.config->chardevTLSx509verify = 0;
1409
    DO_TEST("serial-tcp-tlsx509-chardev-notls",
1410
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1411
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1412 1413 1414 1415 1416 1417 1418 1419
    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;
    DO_TEST("serial-tcp-tlsx509-secret-chardev",
            QEMU_CAPS_OBJECT_SECRET,
1420
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1421
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1422 1423
    driver.config->chardevTLS = 0;
    VIR_FREE(driver.config->chardevTLSx509certdir);
1424
    DO_TEST("serial-many-chardev",
1425 1426 1427
            QEMU_CAPS_DEVICE_ISA_SERIAL);
    DO_TEST("parallel-tcp-chardev", NONE);
    DO_TEST("parallel-parport-chardev", NONE);
J
Ján Tomko 已提交
1428 1429
    DO_TEST_CAPS_VER("parallel-unix-chardev", "2.5.0");
    DO_TEST_CAPS_LATEST("parallel-unix-chardev");
1430
    DO_TEST("console-compat-chardev",
1431
            QEMU_CAPS_DEVICE_ISA_SERIAL);
M
Michal Privoznik 已提交
1432 1433
    DO_TEST("pci-serial-dev-chardev",
            QEMU_CAPS_DEVICE_PCI_SERIAL);
1434

1435
    DO_TEST("channel-guestfwd", NONE);
J
Ján Tomko 已提交
1436 1437
    DO_TEST_CAPS_VER("channel-unix-guestfwd", "2.5.0");
    DO_TEST_CAPS_LATEST("channel-unix-guestfwd");
1438 1439 1440 1441 1442 1443
    DO_TEST("channel-virtio", NONE);
    DO_TEST("channel-virtio-state", NONE);
    DO_TEST("channel-virtio-auto", NONE);
    DO_TEST("channel-virtio-autoassign", NONE);
    DO_TEST("channel-virtio-autoadd", NONE);
    DO_TEST("console-virtio", NONE);
1444
    DO_TEST("console-virtio-many",
1445
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1446
    DO_TEST("console-virtio-s390",
1447
            QEMU_CAPS_VIRTIO_S390);
1448
    DO_TEST("console-virtio-ccw",
1449
            QEMU_CAPS_CCW,
1450
            QEMU_CAPS_VIRTIO_S390);
J
Ján Tomko 已提交
1451 1452
    DO_TEST_CAPS_VER("console-virtio-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("console-virtio-unix");
1453
    DO_TEST("console-sclp",
1454
            QEMU_CAPS_VIRTIO_S390,
1455
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
1456
    DO_TEST("channel-spicevmc",
1457
            QEMU_CAPS_SPICE,
1458
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1459
    DO_TEST("channel-virtio-default",
1460
            QEMU_CAPS_SPICE);
1461
    DO_TEST("channel-virtio-unix", NONE);
1462

1463
    DO_TEST("smartcard-host",
1464
            QEMU_CAPS_CCID_EMULATED);
1465
    DO_TEST("smartcard-host-certificates",
1466
            QEMU_CAPS_CCID_EMULATED);
1467 1468
    DO_TEST("smartcard-host-certificates-database",
            QEMU_CAPS_CCID_EMULATED);
1469
    DO_TEST("smartcard-passthrough-tcp",
1470
            QEMU_CAPS_CCID_PASSTHRU);
1471
    DO_TEST("smartcard-passthrough-spicevmc",
1472
            QEMU_CAPS_CCID_PASSTHRU);
1473
    DO_TEST("smartcard-controller",
1474
            QEMU_CAPS_CCID_EMULATED);
J
Ján Tomko 已提交
1475 1476
    DO_TEST_CAPS_VER("smartcard-passthrough-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("smartcard-passthrough-unix");
1477

1478 1479 1480 1481 1482 1483 1484 1485
    DO_TEST("chardev-reconnect",
            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_CHARDEV_RECONNECT);
1486 1487
    DO_TEST_PARSE_ERROR("chardev-reconnect-generated-path",
                        QEMU_CAPS_CHARDEV_RECONNECT);
1488

1489
    DO_TEST("usb-controller", NONE);
1490
    DO_TEST("usb-piix3-controller",
1491
            QEMU_CAPS_PIIX3_USB_UHCI);
1492
    DO_TEST("usb-ich9-ehci-addr",
1493
            QEMU_CAPS_ICH9_USB_EHCI1);
1494
    DO_TEST("input-usbmouse-addr", NONE);
1495
    DO_TEST("usb-ich9-companion",
1496
            QEMU_CAPS_ICH9_USB_EHCI1);
1497
    DO_TEST_PARSE_ERROR("usb-ich9-no-companion",
1498
            QEMU_CAPS_ICH9_USB_EHCI1);
1499
    DO_TEST("usb-ich9-autoassign",
1500
            QEMU_CAPS_ICH9_USB_EHCI1,
1501
            QEMU_CAPS_USB_HUB);
1502
    DO_TEST("usb-hub",
1503
            QEMU_CAPS_USB_HUB);
1504
    DO_TEST("usb-hub-autoadd",
1505
            QEMU_CAPS_USB_HUB);
1506
    DO_TEST("usb-hub-autoadd-deluxe",
1507
            QEMU_CAPS_USB_HUB);
J
Ján Tomko 已提交
1508
    DO_TEST_PARSE_ERROR("usb-hub-conflict",
1509
            QEMU_CAPS_USB_HUB);
1510
    DO_TEST_PARSE_ERROR("usb-hub-nonexistent",
1511
            QEMU_CAPS_USB_HUB);
J
Ján Tomko 已提交
1512
    DO_TEST("usb-port-missing",
1513
            QEMU_CAPS_USB_HUB);
1514
    DO_TEST_FAILURE("usb-bus-missing",
1515
                    QEMU_CAPS_USB_HUB);
1516
    DO_TEST("usb-ports",
1517
            QEMU_CAPS_USB_HUB);
1518
    DO_TEST_PARSE_ERROR("usb-ports-out-of-range",
1519
            QEMU_CAPS_USB_HUB);
1520
    DO_TEST("usb-port-autoassign",
1521
            QEMU_CAPS_USB_HUB);
1522
    DO_TEST("usb-redir",
1523 1524 1525
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
1526
            QEMU_CAPS_SPICE);
1527
    DO_TEST("usb-redir-boot",
1528 1529 1530
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
1531
            QEMU_CAPS_SPICE);
1532
    DO_TEST("usb-redir-filter",
1533 1534 1535 1536
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE,
1537
            QEMU_CAPS_USB_REDIR_FILTER);
1538 1539
    DO_TEST("usb-redir-filter-version",
            QEMU_CAPS_USB_REDIR,
1540
            QEMU_CAPS_SPICE,
1541
            QEMU_CAPS_USB_REDIR_FILTER);
J
Ján Tomko 已提交
1542 1543
    DO_TEST_CAPS_VER("usb-redir-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("usb-redir-unix");
1544
    DO_TEST("usb1-usb2",
1545 1546 1547
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1);
1548 1549
    DO_TEST("usb-none", NONE);
    DO_TEST_PARSE_ERROR("usb-none-other", NONE);
1550 1551
    DO_TEST_PARSE_ERROR("usb-none-hub",
            QEMU_CAPS_USB_HUB);
1552
    DO_TEST_PARSE_ERROR("usb-none-usbtablet", NONE);
1553
    DO_TEST("usb-controller-default-q35",
1554
            QEMU_CAPS_DEVICE_IOH3420,
1555 1556 1557
            QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI);
1558
    DO_TEST_FAILURE("usb-controller-default-unavailable-q35",
1559
                    QEMU_CAPS_DEVICE_IOH3420,
1560
                    QEMU_CAPS_PCI_OHCI,
1561 1562
                    QEMU_CAPS_NEC_USB_XHCI);
    DO_TEST("usb-controller-explicit-q35",
1563
            QEMU_CAPS_DEVICE_IOH3420,
1564 1565 1566
            QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI);
1567
    DO_TEST_FAILURE("usb-controller-explicit-unavailable-q35",
1568
                    QEMU_CAPS_DEVICE_IOH3420,
1569
                    QEMU_CAPS_PCI_OHCI,
1570
                    QEMU_CAPS_PIIX3_USB_UHCI);
1571
    DO_TEST("usb-controller-xhci",
1572 1573 1574
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_NEC_USB_XHCI_PORTS);
1575
    DO_TEST("usb-xhci-autoassign",
1576 1577 1578
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_NEC_USB_XHCI_PORTS,
1579
            QEMU_CAPS_USB_HUB);
1580
    DO_TEST_PARSE_ERROR("usb-controller-xhci-limit",
1581 1582 1583
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_NEC_USB_XHCI_PORTS);
1584 1585 1586 1587
    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);
1588

1589 1590 1591
    DO_TEST("smbios", NONE);
    DO_TEST_PARSE_ERROR("smbios-date", NONE);
    DO_TEST_PARSE_ERROR("smbios-uuid-match", NONE);
1592

1593
    DO_TEST("watchdog", NONE);
1594
    DO_TEST("watchdog-device", NONE);
1595
    DO_TEST("watchdog-dump", NONE);
1596
    DO_TEST("watchdog-injectnmi", NONE);
1597
    DO_TEST("watchdog-diag288", QEMU_CAPS_VIRTIO_S390);
1598 1599
    DO_TEST("balloon-device", NONE);
    DO_TEST("balloon-device-deflate",
1600
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1601
    DO_TEST("balloon-ccw-deflate",
1602
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1603
    DO_TEST("balloon-mmio-deflate",
J
Ján Tomko 已提交
1604
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1605
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1606
    DO_TEST("balloon-device-deflate-off",
1607
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1608 1609
    DO_TEST("balloon-device-auto", NONE);
    DO_TEST("balloon-device-period", NONE);
1610 1611
    DO_TEST("sound", NONE);
    DO_TEST("sound-device",
1612
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_HDA_MICRO,
1613
            QEMU_CAPS_HDA_OUTPUT,
1614 1615
            QEMU_CAPS_DEVICE_ICH9_INTEL_HDA,
            QEMU_CAPS_OBJECT_USB_AUDIO);
1616
    DO_TEST("fs9p", NONE);
1617
    DO_TEST("fs9p-ccw",
1618
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1619

1620
    DO_TEST("hostdev-usb-address", NONE);
1621
    DO_TEST("hostdev-usb-address-device", NONE);
1622
    DO_TEST("hostdev-usb-address-device-boot", NONE);
J
Ján Tomko 已提交
1623
    DO_TEST("hostdev-pci-address", NONE);
1624
    DO_TEST("hostdev-pci-address-device", NONE);
1625 1626
    DO_TEST("hostdev-vfio",
            QEMU_CAPS_DEVICE_VFIO_PCI);
1627
    DO_TEST("hostdev-vfio-multidomain",
1628
            QEMU_CAPS_DEVICE_VFIO_PCI);
1629 1630 1631 1632 1633 1634
    DO_TEST("hostdev-mdev-precreated",
            QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST_PARSE_ERROR("hostdev-mdev-src-address-invalid",
            QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST_PARSE_ERROR("hostdev-mdev-invalid-target-address",
            QEMU_CAPS_DEVICE_VFIO_PCI);
1635 1636 1637 1638 1639 1640 1641
    DO_TEST_CAPS_LATEST("hostdev-mdev-display-spice-opengl");
    DO_TEST_CAPS_LATEST("hostdev-mdev-display-spice-egl-headless");
    DO_TEST_CAPS_LATEST("hostdev-mdev-display-vnc");
    DO_TEST_CAPS_LATEST("hostdev-mdev-display-vnc-egl-headless");
    DO_TEST_PARSE_ERROR("hostdev-mdev-display-missing-graphics",
            QEMU_CAPS_DEVICE_VFIO_PCI,
            QEMU_CAPS_VFIO_PCI_DISPLAY);
1642 1643
    DO_TEST_PARSE_ERROR("hostdev-vfio-zpci-wrong-arch",
                        QEMU_CAPS_DEVICE_VFIO_PCI);
1644 1645 1646
    DO_TEST("hostdev-vfio-zpci",
            QEMU_CAPS_DEVICE_VFIO_PCI,
            QEMU_CAPS_DEVICE_ZPCI);
1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659
    DO_TEST("hostdev-vfio-zpci-multidomain-many",
            QEMU_CAPS_DEVICE_VFIO_PCI,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_ZPCI);
    DO_TEST("hostdev-vfio-zpci-autogenerate",
            QEMU_CAPS_DEVICE_VFIO_PCI,
            QEMU_CAPS_DEVICE_ZPCI);
    DO_TEST("hostdev-vfio-zpci-boundaries",
            QEMU_CAPS_DEVICE_VFIO_PCI,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_ZPCI);
    DO_TEST_PARSE_ERROR("hostdev-vfio-zpci",
                        QEMU_CAPS_DEVICE_VFIO_PCI);
1660
    DO_TEST("pci-rom", NONE);
1661
    DO_TEST("pci-rom-disabled", NONE);
1662
    DO_TEST("pci-rom-disabled-invalid", NONE);
1663

1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679
    DO_TEST("hostdev-subsys-mdev-vfio-ccw",
            QEMU_CAPS_CCW,
            QEMU_CAPS_CCW_CSSID_UNRESTRICTED,
            QEMU_CAPS_DEVICE_VFIO_CCW);
    DO_TEST_FAILURE("hostdev-subsys-mdev-vfio-ccw",
            QEMU_CAPS_CCW,
            QEMU_CAPS_CCW_CSSID_UNRESTRICTED);
    DO_TEST_PARSE_ERROR("hostdev-subsys-mdev-vfio-ccw-duplicate-address",
            QEMU_CAPS_CCW,
            QEMU_CAPS_CCW_CSSID_UNRESTRICTED,
            QEMU_CAPS_DEVICE_VFIO_CCW);
    DO_TEST_PARSE_ERROR("hostdev-subsys-mdev-vfio-ccw-invalid-address",
            QEMU_CAPS_CCW,
            QEMU_CAPS_CCW_CSSID_UNRESTRICTED,
            QEMU_CAPS_DEVICE_VFIO_CCW);

1680 1681 1682 1683
    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);
1684

A
Andrea Bolognani 已提交
1685 1686 1687
    DO_TEST_FULL("migrate-numa-unaligned", "stdio", 7, 0, 0, GIC_NONE,
                 QEMU_CAPS_NUMA,
                 QEMU_CAPS_OBJECT_MEMORY_RAM);
1688

1689
    DO_TEST("qemu-ns", NONE);
1690
    DO_TEST("qemu-ns-no-env", NONE);
1691
    DO_TEST("qemu-ns-alt", NONE);
1692

1693
    DO_TEST("smp", NONE);
1694

J
John Ferlan 已提交
1695
    DO_TEST("iothreads", QEMU_CAPS_OBJECT_IOTHREAD);
1696 1697
    DO_TEST("iothreads-ids", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-ids-partial", QEMU_CAPS_OBJECT_IOTHREAD);
1698
    DO_TEST_FAILURE("iothreads-nocap", NONE);
1699 1700
    DO_TEST("iothreads-disk", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-disk-virtio-ccw", QEMU_CAPS_OBJECT_IOTHREAD,
1701
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1702 1703
    DO_TEST_CAPS_LATEST("iothreads-virtio-scsi-pci");
    DO_TEST_CAPS_ARCH_LATEST("iothreads-virtio-scsi-ccw", "s390x");
J
John Ferlan 已提交
1704

1705 1706
    DO_TEST("cpu-topology1", NONE);
    DO_TEST("cpu-topology2", NONE);
1707
    DO_TEST("cpu-topology3", NONE);
1708 1709 1710 1711 1712 1713 1714 1715
    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);
1716
    DO_TEST("cpu-numa1", NONE);
1717 1718
    DO_TEST("cpu-numa2", NONE);
    DO_TEST("cpu-numa-no-memory-element", NONE);
1719
    DO_TEST_PARSE_ERROR("cpu-numa3", NONE);
1720 1721
    DO_TEST_FAILURE("cpu-numa-disjoint", NONE);
    DO_TEST("cpu-numa-disjoint", QEMU_CAPS_NUMA);
1722 1723
    DO_TEST_FAILURE("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_RAM);
    DO_TEST_FAILURE("cpu-numa-memshared", NONE);
1724
    DO_TEST("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_FILE);
1725
    DO_TEST("cpu-host-model", NONE);
1726
    DO_TEST("cpu-host-model-vendor", NONE);
1727 1728 1729 1730 1731 1732
    DO_TEST_FULL("cpu-host-model-fallback", NULL, -1,
                 FLAG_SKIP_LEGACY_CPUS, 0,
                 GIC_NONE, NONE);
    DO_TEST_FULL("cpu-host-model-nofallback", NULL, -1,
                 FLAG_SKIP_LEGACY_CPUS | FLAG_EXPECT_FAILURE,
                 0, GIC_NONE, NONE);
A
Andrea Bolognani 已提交
1733 1734
    DO_TEST("cpu-host-passthrough", QEMU_CAPS_KVM);
    DO_TEST_FAILURE("cpu-qemu-host-passthrough", QEMU_CAPS_KVM);
1735

1736
    qemuTestSetHostArch(driver.caps, VIR_ARCH_S390X);
1737
    DO_TEST("cpu-s390-zEC12", QEMU_CAPS_KVM, QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1738 1739
    DO_TEST("cpu-s390-features", QEMU_CAPS_KVM, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION);
    DO_TEST_FAILURE("cpu-s390-features", QEMU_CAPS_KVM);
1740 1741
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);

1742
    qemuTestSetHostCPU(driver.caps, cpuHaswell);
1743 1744 1745 1746
    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);
1747
    DO_TEST("cpu-host-model-cmt", NONE);
1748
    DO_TEST("cpu-tsc-frequency", QEMU_CAPS_KVM);
1749
    qemuTestSetHostCPU(driver.caps, NULL);
1750

1751 1752
    DO_TEST("encrypted-disk", QEMU_CAPS_QCOW2_LUKS, QEMU_CAPS_OBJECT_SECRET);
    DO_TEST("encrypted-disk-usage", QEMU_CAPS_QCOW2_LUKS, QEMU_CAPS_OBJECT_SECRET);
1753
    DO_TEST("luks-disks", QEMU_CAPS_OBJECT_SECRET);
1754
    DO_TEST("luks-disks-source", QEMU_CAPS_OBJECT_SECRET);
1755 1756
    DO_TEST_PARSE_ERROR("luks-disks-source-qcow2", QEMU_CAPS_OBJECT_SECRET);
    DO_TEST("luks-disks-source-qcow2", QEMU_CAPS_OBJECT_SECRET, QEMU_CAPS_QCOW2_LUKS);
1757
    DO_TEST_PARSE_ERROR("luks-disk-invalid", NONE);
1758
    DO_TEST_PARSE_ERROR("luks-disks-source-both", QEMU_CAPS_OBJECT_SECRET);
1759

1760 1761 1762 1763 1764 1765 1766 1767
    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);
1768
    DO_TEST("cputune-numatune",
1769
            QEMU_CAPS_KVM,
1770
            QEMU_CAPS_OBJECT_IOTHREAD,
1771 1772
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1773 1774 1775
    DO_TEST("vcpu-placement-static",
            QEMU_CAPS_KVM,
            QEMU_CAPS_OBJECT_IOTHREAD);
1776

1777
    DO_TEST("numatune-memory", NONE);
1778
    DO_TEST_PARSE_ERROR("numatune-memory-invalid-nodeset", NONE);
A
Andrea Bolognani 已提交
1779 1780 1781
    DO_TEST("numatune-memnode",
            QEMU_CAPS_NUMA,
            QEMU_CAPS_OBJECT_MEMORY_RAM);
1782 1783
    DO_TEST_FAILURE("numatune-memnode", NONE);

A
Andrea Bolognani 已提交
1784 1785 1786
    DO_TEST("numatune-memnode-no-memory",
            QEMU_CAPS_NUMA,
            QEMU_CAPS_OBJECT_MEMORY_RAM);
1787 1788
    DO_TEST_FAILURE("numatune-memnode-no-memory", NONE);

1789 1790
    DO_TEST("numatune-distances", QEMU_CAPS_NUMA, QEMU_CAPS_NUMA_DIST);

1791
    DO_TEST("numatune-auto-nodeset-invalid", NONE);
1792 1793
    DO_TEST("numatune-auto-prefer", QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1794 1795
    DO_TEST_FAILURE("numatune-static-nodeset-exceed-hostnode",
                    QEMU_CAPS_OBJECT_MEMORY_RAM);
1796 1797
    DO_TEST_PARSE_ERROR("numatune-memnode-nocpu", NONE);
    DO_TEST_PARSE_ERROR("numatune-memnodes-problematic", NONE);
1798 1799
    DO_TEST("numad", NONE);
    DO_TEST("numad-auto-vcpu-static-numatune", NONE);
1800
    DO_TEST_PARSE_ERROR("numad-auto-vcpu-static-numatune-no-nodeset", NONE);
1801 1802 1803
    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);
1804
    DO_TEST("blkdeviotune-max",
1805
            QEMU_CAPS_DRIVE_IOTUNE_MAX);
1806 1807 1808
    DO_TEST("blkdeviotune-group-num",
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_GROUP);
1809 1810 1811
    DO_TEST("blkdeviotune-max-length",
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_MAX_LENGTH);
1812

1813
    DO_TEST("multifunction-pci-device",
1814
            QEMU_CAPS_SCSI_LSI);
1815

1816
    DO_TEST("monitor-json", NONE);
1817

1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829
    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);
1830

1831
    DO_TEST("pseries-basic",
1832
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1833
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1834
    DO_TEST("pseries-vio",
1835
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1836
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1837
    DO_TEST("pseries-usb-default",
1838
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1839
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1840
            QEMU_CAPS_PIIX3_USB_UHCI,
1841
            QEMU_CAPS_PCI_OHCI);
1842
    DO_TEST("pseries-usb-multi",
1843
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1844
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1845
            QEMU_CAPS_PIIX3_USB_UHCI,
1846
            QEMU_CAPS_PCI_OHCI);
1847
    DO_TEST("pseries-vio-user-assigned",
1848
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1849 1850
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST_PARSE_ERROR("pseries-vio-address-clash", NONE);
1851 1852 1853
    DO_TEST("pseries-nvram",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_DEVICE_NVRAM);
1854
    DO_TEST("pseries-usb-kbd", QEMU_CAPS_PCI_OHCI,
1855
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1856
            QEMU_CAPS_DEVICE_USB_KBD,
1857
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1858
    DO_TEST("pseries-cpu-exact",
1859
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1860 1861
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST_PARSE_ERROR("pseries-no-parallel", NONE);
1862 1863

    qemuTestSetHostArch(driver.caps, VIR_ARCH_PPC64);
A
Andrea Bolognani 已提交
1864
    DO_TEST("pseries-cpu-compat", QEMU_CAPS_KVM,
1865
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1866
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1867 1868 1869
    DO_TEST("pseries-machine-max-cpu-compat",
            QEMU_CAPS_KVM,
            QEMU_CAPS_MACHINE_PSERIES_MAX_CPU_COMPAT,
1870
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
A
Andrea Bolognani 已提交
1871
    DO_TEST("pseries-cpu-le", QEMU_CAPS_KVM,
1872
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1873
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1874 1875 1876
    DO_TEST_FAILURE("pseries-cpu-compat-power9",
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
                    QEMU_CAPS_KVM);
1877 1878 1879

    qemuTestSetHostCPU(driver.caps, cpuPower9);
    DO_TEST("pseries-cpu-compat-power9",
1880
            QEMU_CAPS_KVM,
1881
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1882
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1883 1884
    qemuTestSetHostCPU(driver.caps, NULL);

1885 1886
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);

1887
    DO_TEST("pseries-panic-missing",
1888
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1889
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1890
    DO_TEST("pseries-panic-no-address",
1891
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1892
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1893
    DO_TEST_FAILURE("pseries-panic-address",
1894
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
1895 1896 1897 1898 1899

    DO_TEST("pseries-phb-simple",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
    DO_TEST("pseries-phb-default-missing",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
1900 1901 1902 1903 1904 1905
    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);
1906 1907 1908
    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);
1909

1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931
    DO_TEST("pseries-many-devices",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST("pseries-many-buses-1",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST("pseries-many-buses-2",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST("pseries-hostdevs-1",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST("pseries-hostdevs-2",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST("pseries-hostdevs-3",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VFIO_PCI);

1932
    DO_TEST("pseries-features",
1933
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1934
            QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE,
1935
            QEMU_CAPS_MACHINE_PSERIES_CAP_HTM,
1936
            QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV,
1937
            QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);
1938
    DO_TEST_FAILURE("pseries-features",
1939
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
A
Andrea Bolognani 已提交
1940
    DO_TEST_PARSE_ERROR("pseries-features-invalid-machine", NONE);
1941

1942
    DO_TEST("pseries-serial-native",
1943
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1944 1945
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial+console-native",
1946
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1947 1948
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial-compat",
1949
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1950
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1951
    DO_TEST("pseries-serial-pci",
1952
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1953 1954
            QEMU_CAPS_DEVICE_PCI_SERIAL);
    DO_TEST("pseries-serial-usb",
1955
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1956 1957
            QEMU_CAPS_DEVICE_QEMU_XHCI,
            QEMU_CAPS_DEVICE_USB_SERIAL);
1958
    DO_TEST("pseries-console-native",
1959
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1960 1961
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-console-virtio",
1962
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
1963 1964
    DO_TEST_PARSE_ERROR("pseries-serial-invalid-machine", NONE);

1965
    DO_TEST("mach-virt-serial-native",
1966
            QEMU_CAPS_DEVICE_PL011);
1967
    DO_TEST("mach-virt-serial+console-native",
1968
            QEMU_CAPS_DEVICE_PL011);
1969
    DO_TEST("mach-virt-serial-compat",
1970
            QEMU_CAPS_DEVICE_PL011);
1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982
    DO_TEST("mach-virt-serial-pci",
            QEMU_CAPS_OBJECT_GPEX,
            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_OBJECT_GPEX,
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT,
            QEMU_CAPS_DEVICE_QEMU_XHCI,
            QEMU_CAPS_DEVICE_USB_SERIAL);
    DO_TEST("mach-virt-console-native",
1983
            QEMU_CAPS_DEVICE_PL011);
1984 1985
    DO_TEST("mach-virt-console-virtio",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
1986 1987
    DO_TEST_PARSE_ERROR("mach-virt-serial-invalid-machine", NONE);

1988 1989
    DO_TEST("disk-ide-split", NONE);
    DO_TEST("disk-ide-wwn", QEMU_CAPS_IDE_DRIVE_WWN);
1990

1991
    DO_TEST("disk-geometry", NONE);
1992
    DO_TEST("disk-blockio", QEMU_CAPS_BLOCKIO);
1993

1994
    DO_TEST("video-device-pciaddr-default",
1995 1996
            QEMU_CAPS_KVM,
            QEMU_CAPS_VNC,
1997
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1998
            QEMU_CAPS_DEVICE_QXL);
1999
    DO_TEST("video-vga-nodevice", QEMU_CAPS_DEVICE_VGA);
2000
    DO_TEST("video-vga-device", QEMU_CAPS_DEVICE_VGA,
2001
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2002
    DO_TEST("video-vga-device-vgamem", QEMU_CAPS_DEVICE_VGA,
2003
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_VGA_VGAMEM);
2004
    DO_TEST("video-qxl-nodevice", QEMU_CAPS_DEVICE_QXL);
2005
    DO_TEST("video-qxl-device",
2006
            QEMU_CAPS_DEVICE_QXL,
2007
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2008
    DO_TEST("video-qxl-device-vgamem",
2009
            QEMU_CAPS_DEVICE_QXL,
2010
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2011
            QEMU_CAPS_QXL_VGAMEM);
2012
    DO_TEST_CAPS_LATEST("video-qxl-device-vram64");
2013
    DO_TEST("video-qxl-sec-device",
2014
            QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2015
    DO_TEST("video-qxl-sec-device-vgamem",
2016 2017
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2018
            QEMU_CAPS_QXL_VGAMEM);
2019
    DO_TEST_CAPS_LATEST("video-qxl-sec-device-vram64");
2020 2021 2022
    DO_TEST("video-qxl-heads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
2023
            QEMU_CAPS_QXL_MAX_OUTPUTS);
2024 2025 2026
    DO_TEST("video-vga-qxl-heads",
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_QXL_MAX_OUTPUTS);
2027 2028 2029
    DO_TEST("video-qxl-noheads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
2030
            QEMU_CAPS_QXL_MAX_OUTPUTS);
M
Marc-André Lureau 已提交
2031
    DO_TEST("video-virtio-gpu-device",
2032
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
M
Marc-André Lureau 已提交
2033
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2034
    DO_TEST("video-virtio-gpu-virgl",
2035
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
2036
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
2037
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2038 2039
    DO_TEST("video-virtio-gpu-spice-gl",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
2040
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
2041 2042
            QEMU_CAPS_SPICE,
            QEMU_CAPS_SPICE_GL,
2043
            QEMU_CAPS_SPICE_RENDERNODE,
2044
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2045 2046 2047 2048 2049
    DO_TEST("video-virtio-gpu-sdl-gl",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_SDL_GL,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2050 2051 2052
    DO_TEST("video-virtio-gpu-secondary",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2053 2054 2055
    DO_TEST("video-virtio-vga",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIRTIO_VGA,
2056 2057
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_GPU_MAX_OUTPUTS);
2058 2059 2060
    DO_TEST("video-none-device",
            QEMU_CAPS_VNC);
    DO_TEST_PARSE_ERROR("video-invalid-multiple-devices", NONE);
2061

2062 2063
    DO_TEST("virtio-rng-default",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2064
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2065 2066
    DO_TEST("virtio-rng-random",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2067
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2068 2069
    DO_TEST("virtio-rng-egd",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2070
            QEMU_CAPS_OBJECT_RNG_EGD);
J
Ján Tomko 已提交
2071 2072
    DO_TEST_CAPS_VER("virtio-rng-egd-unix", "2.5.0");
    DO_TEST_CAPS_LATEST("virtio-rng-egd-unix");
2073 2074 2075 2076
    DO_TEST("virtio-rng-multiple",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2077
    DO_TEST_PARSE_ERROR("virtio-rng-egd-crash",
2078 2079
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD);
2080
    DO_TEST("virtio-rng-ccw",
2081
            QEMU_CAPS_CCW,
2082 2083
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2084
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2085

2086
    DO_TEST("s390-allow-bogus-usb-none",
2087 2088 2089
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2090
    DO_TEST("s390-allow-bogus-usb-controller",
2091 2092 2093
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2094

2095
    DO_TEST("s390-panic-no-address",
2096
            QEMU_CAPS_CCW,
2097
            QEMU_CAPS_VIRTIO_S390);
2098
    DO_TEST_FAILURE("s390-panic-address",
2099
            QEMU_CAPS_CCW,
2100
            QEMU_CAPS_VIRTIO_S390);
2101
    DO_TEST("s390-panic-missing",
2102
            QEMU_CAPS_CCW,
2103
            QEMU_CAPS_VIRTIO_S390);
2104
    DO_TEST_PARSE_ERROR("s390-no-parallel",
2105
            QEMU_CAPS_CCW,
2106
            QEMU_CAPS_VIRTIO_S390);
2107
    DO_TEST("s390-serial",
2108
            QEMU_CAPS_CCW,
2109 2110 2111
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
    DO_TEST("s390-serial-2",
2112
            QEMU_CAPS_CCW,
2113 2114 2115 2116
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE,
            QEMU_CAPS_DEVICE_SCLPLMCONSOLE);
    DO_TEST("s390-serial-console",
2117
            QEMU_CAPS_CCW,
2118 2119
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
2120

2121
    DO_TEST("ppc-dtb",
J
Ján Tomko 已提交
2122
            QEMU_CAPS_KVM);
2123 2124
    DO_TEST("ppce500-serial",
            QEMU_CAPS_KVM);
O
Olivia Yin 已提交
2125

2126
    DO_TEST("tpm-passthrough",
2127
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
2128 2129
    DO_TEST("tpm-passthrough-crb",
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_CRB);
2130
    DO_TEST_PARSE_ERROR("tpm-no-backend-invalid",
2131
                        QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
2132
    DO_TEST_CAPS_LATEST("tpm-emulator");
2133
    DO_TEST_CAPS_LATEST("tpm-emulator-tpm2");
2134

2135 2136 2137 2138
    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);
2139

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

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

    /* 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,
2353
            QEMU_CAPS_DEVICE_IOH3420);
2354
    DO_TEST("pcie-root-port-model-ioh3420",
2355
            QEMU_CAPS_DEVICE_IOH3420);
2356

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

2374
    DO_TEST_PARSE_ERROR("q35-wrong-root",
2375
            QEMU_CAPS_DEVICE_IOH3420,
2376
            QEMU_CAPS_ICH9_AHCI,
2377
            QEMU_CAPS_ICH9_USB_EHCI1,
2378
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2379
            QEMU_CAPS_DEVICE_QXL);
2380
    DO_TEST_PARSE_ERROR("440fx-wrong-root", NONE);
2381
    DO_TEST_PARSE_ERROR("440fx-ide-address-conflict", NONE);
2382

2383
    DO_TEST_PARSE_ERROR("pcie-root-port-too-many",
2384
            QEMU_CAPS_DEVICE_IOH3420,
2385
            QEMU_CAPS_ICH9_AHCI,
2386
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2387
            QEMU_CAPS_DEVICE_QXL);
2388

2389 2390 2391
    DO_TEST("pcie-switch-upstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
2392
            QEMU_CAPS_ICH9_AHCI,
2393
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2394
            QEMU_CAPS_DEVICE_QXL);
2395 2396 2397 2398
    DO_TEST("pcie-switch-downstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
2399
            QEMU_CAPS_ICH9_AHCI,
2400
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2401
            QEMU_CAPS_DEVICE_QXL);
2402

2403 2404 2405 2406 2407 2408
    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);
2409 2410
    DO_TEST_PARSE_ERROR("pci-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_PXB);
2411

2412 2413 2414 2415 2416 2417 2418 2419 2420 2421
    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);
2422 2423 2424
    DO_TEST_PARSE_ERROR("pcie-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_IOH3420,
                        QEMU_CAPS_DEVICE_PXB_PCIE);
2425

2426
    DO_TEST("hostdev-scsi-lsi",
2427 2428
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2429
    DO_TEST("hostdev-scsi-virtio-scsi",
2430 2431
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2432
    DO_TEST("hostdev-scsi-readonly",
2433 2434
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2435
    DO_TEST("hostdev-scsi-virtio-scsi",
2436 2437
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2438
    DO_TEST("hostdev-scsi-lsi-iscsi",
2439 2440
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2441
    DO_TEST("hostdev-scsi-lsi-iscsi-auth",
2442 2443
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2444
    DO_TEST("hostdev-scsi-virtio-iscsi",
2445 2446
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2447
    DO_TEST("hostdev-scsi-virtio-iscsi-auth",
2448 2449
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
2450
    DO_TEST("disk-hostdev-scsi-virtio-iscsi-auth-AES",
2451 2452 2453
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_OBJECT_SECRET,
2454
            QEMU_CAPS_ISCSI_PASSWORD_SECRET);
2455 2456
    DO_TEST("hostdev-scsi-vhost-scsi-ccw",
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_VHOST_SCSI,
2457
            QEMU_CAPS_CCW);
2458
    DO_TEST("hostdev-scsi-vhost-scsi-pci",
2459 2460
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VHOST_SCSI);
2461 2462 2463 2464 2465
    DO_TEST("hostdev-scsi-vhost-scsi-pcie",
            QEMU_CAPS_KVM,
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_VHOST_SCSI,
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT,
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY);
2466

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

2472 2473 2474 2475
    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);
2476

2477
    DO_TEST("hotplug-base",
2478
            QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_SCSI);
2479

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

J
Ján Tomko 已提交
2489 2490
    DO_TEST("arm-vexpressa9-nodevs", NONE);
    DO_TEST("arm-vexpressa9-basic", NONE);
2491
    DO_TEST("arm-vexpressa9-virtio",
2492
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2493
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2494
    DO_TEST("arm-virt-virtio",
2495
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2496
            QEMU_CAPS_DEVICE_PL011,
2497
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2498

2499
    DO_TEST("aarch64-virt-virtio",
2500
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2501
            QEMU_CAPS_DEVICE_PL011,
2502
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2503 2504 2505 2506 2507 2508

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

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

2656
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);
2657

2658
    DO_TEST("kvm-pit-delay", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2659
    DO_TEST("kvm-pit-discard", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2660

2661 2662 2663 2664
    DO_TEST("panic",
            QEMU_CAPS_DEVICE_PANIC);
    DO_TEST("panic-double",
            QEMU_CAPS_DEVICE_PANIC);
H
Hu Tao 已提交
2665

2666 2667
    DO_TEST("panic-no-address",
            QEMU_CAPS_DEVICE_PANIC);
2668

2669 2670
    DO_TEST("fips-enabled", QEMU_CAPS_ENABLE_FIPS);

J
Ján Tomko 已提交
2671
    DO_TEST("shmem", QEMU_CAPS_DEVICE_IVSHMEM);
2672 2673 2674
    DO_TEST("shmem-plain-doorbell", QEMU_CAPS_DEVICE_IVSHMEM,
            QEMU_CAPS_DEVICE_IVSHMEM_PLAIN,
            QEMU_CAPS_DEVICE_IVSHMEM_DOORBELL);
2675
    DO_TEST_FAILURE("shmem", NONE);
J
Ján Tomko 已提交
2676
    DO_TEST_FAILURE("shmem-invalid-size",
2677
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2678
    DO_TEST_FAILURE("shmem-invalid-address",
2679
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2680
    DO_TEST_FAILURE("shmem-small-size",
2681
                    QEMU_CAPS_DEVICE_IVSHMEM);
2682
    DO_TEST_PARSE_ERROR("shmem-msi-only", NONE);
A
Andrea Bolognani 已提交
2683
    DO_TEST("cpu-host-passthrough-features", QEMU_CAPS_KVM);
2684

2685
    DO_TEST_FAILURE("memory-align-fail", NONE);
2686
    DO_TEST_FAILURE("memory-hotplug-nonuma", QEMU_CAPS_DEVICE_PC_DIMM);
M
Michal Privoznik 已提交
2687
    DO_TEST("memory-hotplug", NONE);
2688
    DO_TEST("memory-hotplug", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA);
2689
    DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2690
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2691
    DO_TEST("memory-hotplug-dimm-addr", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2692
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2693
    DO_TEST("memory-hotplug-ppc64-nonuma", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2694
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2695
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2696 2697 2698
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm");
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-access");
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-label");
2699
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-align");
2700
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-pmem");
2701
    DO_TEST_CAPS_LATEST("memory-hotplug-nvdimm-readonly");
2702

2703
    DO_TEST("machine-aeskeywrap-on-caps",
2704
            QEMU_CAPS_AES_KEY_WRAP,
2705
            QEMU_CAPS_DEA_KEY_WRAP,
2706
            QEMU_CAPS_VIRTIO_SCSI,
2707
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2708
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps",
2709
                    QEMU_CAPS_VIRTIO_SCSI,
2710
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2711 2712 2713
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps", NONE);

    DO_TEST("machine-aeskeywrap-on-cap",
2714
            QEMU_CAPS_AES_KEY_WRAP,
2715
            QEMU_CAPS_VIRTIO_SCSI,
2716
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2717
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap",
2718
                    QEMU_CAPS_VIRTIO_SCSI,
2719
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2720 2721 2722
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap", NONE);

    DO_TEST("machine-aeskeywrap-off-caps",
2723
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2724
            QEMU_CAPS_VIRTIO_SCSI,
2725
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2726
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps",
2727
                    QEMU_CAPS_VIRTIO_SCSI,
2728
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2729 2730 2731
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", NONE);

    DO_TEST("machine-aeskeywrap-off-cap",
2732
            QEMU_CAPS_AES_KEY_WRAP,
2733
            QEMU_CAPS_VIRTIO_SCSI,
2734
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2735
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap",
2736
                    QEMU_CAPS_VIRTIO_SCSI,
2737
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2738 2739 2740
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap", NONE);

    DO_TEST("machine-deakeywrap-on-caps",
2741
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2742
            QEMU_CAPS_VIRTIO_SCSI,
2743
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2744
    DO_TEST_FAILURE("machine-deakeywrap-on-caps",
2745
                    QEMU_CAPS_VIRTIO_SCSI,
2746
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2747 2748 2749
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", NONE);

    DO_TEST("machine-deakeywrap-on-cap",
2750
            QEMU_CAPS_DEA_KEY_WRAP,
2751
            QEMU_CAPS_VIRTIO_SCSI,
2752
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2753
    DO_TEST_FAILURE("machine-deakeywrap-on-cap",
2754
                    QEMU_CAPS_VIRTIO_SCSI,
2755
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2756 2757 2758
    DO_TEST_FAILURE("machine-deakeywrap-on-cap", NONE);

    DO_TEST("machine-deakeywrap-off-caps",
2759
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2760
            QEMU_CAPS_VIRTIO_SCSI,
2761
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2762
    DO_TEST_FAILURE("machine-deakeywrap-off-caps",
2763
                    QEMU_CAPS_VIRTIO_SCSI,
2764
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2765 2766 2767
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", NONE);

    DO_TEST("machine-deakeywrap-off-cap",
2768
            QEMU_CAPS_DEA_KEY_WRAP,
2769
            QEMU_CAPS_VIRTIO_SCSI,
2770
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2771
    DO_TEST_FAILURE("machine-deakeywrap-off-cap",
2772
                    QEMU_CAPS_VIRTIO_SCSI,
2773
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2774 2775 2776
    DO_TEST_FAILURE("machine-deakeywrap-off-cap", NONE);

    DO_TEST("machine-keywrap-none-caps",
2777
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2778
            QEMU_CAPS_VIRTIO_SCSI,
2779
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2780
    DO_TEST("machine-keywrap-none",
2781
            QEMU_CAPS_VIRTIO_SCSI,
2782
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2783

2784
    DO_TEST("machine-loadparm-s390",
2785
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390,
2786
            QEMU_CAPS_LOADPARM);
2787
    DO_TEST("machine-loadparm-net-s390",
2788
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390,
2789
            QEMU_CAPS_LOADPARM);
2790
    DO_TEST("machine-loadparm-multiple-disks-nets-s390",
2791
            QEMU_CAPS_CCW,
2792
            QEMU_CAPS_VIRTIO_S390,
2793 2794
            QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-char-invalid",
2795
                        QEMU_CAPS_CCW,
2796
                        QEMU_CAPS_VIRTIO_S390,
2797 2798
                        QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-len-invalid",
2799
                        QEMU_CAPS_CCW,
2800
                        QEMU_CAPS_VIRTIO_S390,
2801 2802
                        QEMU_CAPS_LOADPARM);

J
Jiri Denemark 已提交
2803 2804 2805 2806 2807 2808 2809
    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);

2810
    DO_TEST("virtio-input", QEMU_CAPS_VIRTIO_KEYBOARD,
2811
            QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET);
2812
    DO_TEST("virtio-input-passthrough", QEMU_CAPS_VIRTIO_INPUT_HOST);
2813

2814
    DO_TEST("ppc64-usb-controller",
2815
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2816
            QEMU_CAPS_PCI_OHCI);
2817
    DO_TEST("ppc64-usb-controller-legacy",
2818
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2819
            QEMU_CAPS_PIIX3_USB_UHCI);
2820 2821
    DO_TEST_FULL("ppc64-usb-controller-qemu-xhci", NULL, -1, 0,
                 VIR_DOMAIN_DEF_PARSE_ABI_UPDATE, GIC_NONE,
2822
                 QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2823 2824 2825 2826 2827 2828 2829
                 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);
2830

2831 2832 2833 2834
    DO_TEST("aarch64-usb-controller-nec-xhci",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_NEC_USB_XHCI);

2835 2836 2837
    /* VM XML has invalid arch/ostype/virttype combo, but the SKIP flag
     * will avoid the error. Still, we expect qemu driver to complain about
     * missing machine error, and not crash */
2838
    DO_TEST_PARSE_FLAGS_ERROR("missing-machine",
2839
                              VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE,
2840 2841
                              NONE);

2842 2843 2844
    DO_TEST("name-escape",
            QEMU_CAPS_NAME_DEBUG_THREADS,
            QEMU_CAPS_OBJECT_SECRET,
2845 2846
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_GROUP,
2847 2848 2849 2850
            QEMU_CAPS_VNC,
            QEMU_CAPS_NAME_GUEST,
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_SPICE,
2851
            QEMU_CAPS_SPICE_UNIX,
2852 2853 2854 2855 2856
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_SPICE_GL,
            QEMU_CAPS_SPICE_RENDERNODE,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2857
            QEMU_CAPS_DEVICE_ISA_SERIAL,
2858
            QEMU_CAPS_CHARDEV_FILE_APPEND,
2859
            QEMU_CAPS_CCID_EMULATED,
2860
            QEMU_CAPS_VIRTIO_SCSI);
M
Marc-André Lureau 已提交
2861 2862
    DO_TEST("debug-threads", QEMU_CAPS_NAME_DEBUG_THREADS);

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

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

2898
    DO_TEST("cpu-hotplug-startup", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);
2899 2900 2901
    DO_TEST_PARSE_ERROR("cpu-hotplug-granularity",
                        QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);

2902 2903 2904 2905 2906 2907 2908
    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_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
2909 2910 2911
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_PCI_IOMMU_PLATFORM,
            QEMU_CAPS_VIRTIO_PCI_ATS);
2912

J
Ján Tomko 已提交
2913
    DO_TEST("fd-memory-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
2914
            QEMU_CAPS_KVM);
J
Ján Tomko 已提交
2915
    DO_TEST("fd-memory-numa-topology2", QEMU_CAPS_OBJECT_MEMORY_FILE,
2916
            QEMU_CAPS_KVM);
J
Ján Tomko 已提交
2917
    DO_TEST("fd-memory-numa-topology3", QEMU_CAPS_OBJECT_MEMORY_FILE,
2918 2919
            QEMU_CAPS_KVM);

J
Ján Tomko 已提交
2920
    DO_TEST("fd-memory-no-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
2921 2922
            QEMU_CAPS_KVM);

M
Marc-André Lureau 已提交
2923 2924
    DO_TEST_CAPS_LATEST("memfd-memory-numa");

2925 2926 2927 2928 2929 2930 2931 2932
    DO_TEST("cpu-check-none", QEMU_CAPS_KVM);
    DO_TEST("cpu-check-partial", QEMU_CAPS_KVM);
    DO_TEST("cpu-check-full", QEMU_CAPS_KVM);
    DO_TEST("cpu-check-default-none", QEMU_CAPS_KVM);
    DO_TEST("cpu-check-default-none2", NONE);
    DO_TEST("cpu-check-default-partial", QEMU_CAPS_KVM);
    DO_TEST("cpu-check-default-partial2", QEMU_CAPS_KVM);

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

2944 2945 2946
    DO_TEST("user-aliases", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_OBJECT_MEMORY_FILE, QEMU_CAPS_PIIX_DISABLE_S3,
            QEMU_CAPS_PIIX_DISABLE_S4, QEMU_CAPS_VNC,
2947
            QEMU_CAPS_DEVICE_ISA_SERIAL,
2948
            QEMU_CAPS_HDA_DUPLEX,
2949 2950
            QEMU_CAPS_CCID_EMULATED,
            QEMU_CAPS_QCOW2_LUKS, QEMU_CAPS_OBJECT_SECRET);
2951
    DO_TEST("user-aliases2", QEMU_CAPS_DEVICE_IOH3420, QEMU_CAPS_ICH9_AHCI);
2952 2953
    DO_TEST("user-aliases-usb", QEMU_CAPS_KVM,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4,
2954
            QEMU_CAPS_ICH9_USB_EHCI1);
2955

2956
    DO_TEST_CAPS_VER("disk-virtio-scsi-reservations", "2.12.0");
2957
    DO_TEST_CAPS_LATEST("disk-virtio-scsi-reservations");
2958

2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983
    DO_TEST_CAPS_LATEST("tseg-explicit-size");
    DO_TEST_PARSE_ERROR("tseg-i440fx",
                        QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
                        QEMU_CAPS_DEVICE_PCI_BRIDGE,
                        QEMU_CAPS_DEVICE_IOH3420,
                        QEMU_CAPS_ICH9_AHCI,
                        QEMU_CAPS_MACHINE_SMM_OPT,
                        QEMU_CAPS_VIRTIO_SCSI,
                        QEMU_CAPS_MCH_EXTENDED_TSEG_MBYTES);
    DO_TEST_PARSE_ERROR("tseg-explicit-size",
                        QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
                        QEMU_CAPS_DEVICE_PCI_BRIDGE,
                        QEMU_CAPS_DEVICE_IOH3420,
                        QEMU_CAPS_ICH9_AHCI,
                        QEMU_CAPS_MACHINE_SMM_OPT,
                        QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST_PARSE_ERROR("tseg-invalid-size",
                        QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
                        QEMU_CAPS_DEVICE_PCI_BRIDGE,
                        QEMU_CAPS_DEVICE_IOH3420,
                        QEMU_CAPS_ICH9_AHCI,
                        QEMU_CAPS_MACHINE_SMM_OPT,
                        QEMU_CAPS_VIRTIO_SCSI,
                        QEMU_CAPS_MCH_EXTENDED_TSEG_MBYTES);

2984
    DO_TEST("video-virtio-gpu-ccw", QEMU_CAPS_CCW,
2985 2986 2987 2988 2989 2990
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_GPU_MAX_OUTPUTS,
            QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_VIRTIO_GPU_CCW);

2991
    DO_TEST("input-virtio-ccw", QEMU_CAPS_CCW,
2992 2993 2994 2995 2996 2997 2998
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_DEVICE_VIRTIO_KEYBOARD_CCW,
            QEMU_CAPS_DEVICE_VIRTIO_MOUSE_CCW,
            QEMU_CAPS_DEVICE_VIRTIO_TABLET_CCW);

2999 3000
    DO_TEST_CAPS_LATEST("vhost-vsock");
    DO_TEST_CAPS_LATEST("vhost-vsock-auto");
3001 3002
    DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw", "s390x");
    DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw-auto", "s390x");
3003

3004
    DO_TEST_CAPS_VER("launch-security-sev", "2.12.0");
3005

L
Lubomir Rintel 已提交
3006 3007
    DO_TEST("riscv64-virt",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
3008 3009
    DO_TEST("riscv64-virt-pci",
            QEMU_CAPS_OBJECT_GPEX);
L
Lubomir Rintel 已提交
3010

3011 3012 3013 3014 3015
    /* Older version checks disable-legacy usage */
    DO_TEST_CAPS_VER("virtio-transitional", "3.1.0");
    DO_TEST_CAPS_VER("virtio-non-transitional", "3.1.0");
    DO_TEST_CAPS_LATEST("virtio-transitional");
    DO_TEST_CAPS_LATEST("virtio-non-transitional");
3016 3017 3018 3019
    DO_TEST_PARSE_ERROR("virtio-transitional-not-supported",
                        QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
                        QEMU_CAPS_DEVICE_PCI_BRIDGE,
                        QEMU_CAPS_DEVICE_IOH3420);
3020

3021 3022 3023 3024 3025 3026 3027 3028
    /* Simple headless guests for various architectures */
    DO_TEST_CAPS_ARCH_LATEST("aarch64-virt-headless", "aarch64");
    DO_TEST_CAPS_ARCH_LATEST("ppc64-pseries-headless", "ppc64");
    DO_TEST_CAPS_ARCH_LATEST("riscv64-virt-headless", "riscv64");
    DO_TEST_CAPS_ARCH_LATEST("s390x-ccw-headless", "s390x");
    DO_TEST_CAPS_ARCH_LATEST("x86_64-pc-headless", "x86_64");
    DO_TEST_CAPS_ARCH_LATEST("x86_64-q35-headless", "x86_64");

3029 3030 3031 3032 3033 3034
    /* Simple guests with graphics for various architectures */
    DO_TEST_CAPS_ARCH_LATEST("aarch64-virt-graphics", "aarch64");
    DO_TEST_CAPS_ARCH_LATEST("ppc64-pseries-graphics", "ppc64");
    DO_TEST_CAPS_ARCH_LATEST("x86_64-pc-graphics", "x86_64");
    DO_TEST_CAPS_ARCH_LATEST("x86_64-q35-graphics", "x86_64");

3035 3036 3037 3038 3039
    DO_TEST_CAPS_LATEST("os-firmware-bios");
    DO_TEST_CAPS_LATEST("os-firmware-efi");
    DO_TEST_CAPS_LATEST("os-firmware-efi-secboot");
    DO_TEST_CAPS_ARCH_LATEST("aarch64-os-firmware-efi", "aarch64");

A
Andrea Bolognani 已提交
3040 3041 3042
    if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL)
        virFileDeleteTree(fakerootdir);

3043
    VIR_FREE(driver.config->nbdTLSx509certdir);
3044
    qemuTestDriverFree(&driver);
A
Andrea Bolognani 已提交
3045
    VIR_FREE(fakerootdir);
3046
    virHashFree(capslatest);
3047

3048
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
3049 3050
}

3051
VIR_TEST_MAIN_PRELOAD(mymain,
A
Andrea Bolognani 已提交
3052 3053 3054 3055
                      abs_builddir "/.libs/qemuxml2argvmock.so",
                      abs_builddir "/.libs/virrandommock.so",
                      abs_builddir "/.libs/qemucpumock.so",
                      abs_builddir "/.libs/virpcimock.so")
3056

3057 3058
#else

3059 3060 3061 3062
int main(void)
{
    return EXIT_AM_SKIP;
}
3063 3064

#endif /* WITH_QEMU */