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

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

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

11 12
#include "testutils.h"

13 14
#ifdef WITH_QEMU

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

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

34
# include "testutilsqemu.h"
35

36 37
# define VIR_FROM_THIS VIR_FROM_QEMU

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

    if (!volinfo[1])
        goto fallback;

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

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

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

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

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

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

    return 0;
}


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

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

    return ret;
}


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

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

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

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

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

    return xmlbuf;
}

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

    return 1;
}

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

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

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

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 417
    if (testAddCPUModels(info->qemuCaps, info->skipLegacyCPUs) < 0)
        goto cleanup;

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

423 424 425 426
    virQEMUCapsInitHostCPUModel(info->qemuCaps, caps->host.arch,
                                VIR_DOMAIN_VIRT_KVM);
    virQEMUCapsInitHostCPUModel(info->qemuCaps, caps->host.arch,
                                VIR_DOMAIN_VIRT_QEMU);
427

428 429 430 431 432 433 434 435 436
    virQEMUCapsFilterByMachineType(info->qemuCaps, vm->def->os.machine);

    ret = 0;

 cleanup:
    return ret;
}


437
static int
438
testCompareXMLToStartupXML(const void *data)
439
{
440
    const struct testInfo *info = data;
441 442 443 444 445
    unsigned int format_flags = VIR_DOMAIN_DEF_FORMAT_SECURE;
    char *xml = NULL;
    char *actual = NULL;
    int ret = -1;

446 447 448
    if (!info->vm)
        return EXIT_AM_SKIP;

449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473
    if (virAsprintf(&xml, "%s/qemuxml2startupxmloutdata/%s.xml",
                    abs_srcdir, info->name) < 0)
        goto cleanup;

    if (!virFileExists(xml)) {
        ret = EXIT_AM_SKIP;
        goto cleanup;
    }

    if (!(actual = virDomainDefFormat(info->vm->def, NULL, format_flags)))
        goto cleanup;

    ret = virTestCompareToFile(actual, xml);

 cleanup:
    VIR_FREE(xml);
    VIR_FREE(actual);
    return ret;
}


static int
testCompareXMLToArgv(const void *data)
{
    struct testInfo *info = (void *) data;
474 475 476
    char *xml = NULL;
    char *args = NULL;
    char *migrateURI = NULL;
477
    char *actualargv = NULL;
478
    const char *suffix = info->suffix;
479 480
    unsigned int flags = info->flags;
    unsigned int parseFlags = info->parseFlags;
E
Eric Blake 已提交
481
    int ret = -1;
482
    virDomainObjPtr vm = NULL;
483
    virDomainChrSourceDef monitor_chr;
484
    virConnectPtr conn;
J
Jiri Denemark 已提交
485
    char *log = NULL;
E
Eric Blake 已提交
486
    virCommandPtr cmd = NULL;
487
    size_t i;
488
    qemuDomainObjPrivatePtr priv = NULL;
489

490 491
    memset(&monitor_chr, 0, sizeof(monitor_chr));

492
    if (!(conn = virGetConnect()))
493
        goto cleanup;
494

495 496 497
    if (!suffix)
        suffix = "";

498
    conn->secretDriver = &fakeSecretDriver;
499
    conn->storageDriver = &fakeStorageDriver;
500
    conn->nwfilterDriver = &fakeNWFilterDriver;
501

502 503 504 505
    virSetConnectInterface(conn);
    virSetConnectNetwork(conn);
    virSetConnectNWFilter(conn);
    virSetConnectNodeDev(conn);
506 507 508
    virSetConnectSecret(conn);
    virSetConnectStorage(conn);

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

512
    if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0)
513 514
        goto cleanup;

515
    if (virAsprintf(&xml, "%s/qemuxml2argvdata/%s.xml",
516
                    abs_srcdir, info->name) < 0 ||
517 518
        virAsprintf(&args, "%s/qemuxml2argvdata/%s%s.args",
                    abs_srcdir, info->name, suffix) < 0)
519 520 521
        goto cleanup;

    if (info->migrateFrom &&
522 523
        !(migrateURI = qemuMigrationDstGetURI(info->migrateFrom,
                                              info->migrateFd)))
524 525
        goto cleanup;

526
    if (!(vm = virDomainObjNew(driver.xmlopt)))
527
        goto cleanup;
528

529
    parseFlags |= VIR_DOMAIN_DEF_PARSE_INACTIVE;
530
    if (!(vm->def = virDomainDefParseFile(xml, driver.caps, driver.xmlopt,
531
                                          NULL, parseFlags))) {
P
Pavel Hrdina 已提交
532
        if (flags & FLAG_EXPECT_PARSE_ERROR)
533
            goto ok;
534
        goto cleanup;
535
    }
536 537 538 539
    if (flags & FLAG_EXPECT_PARSE_ERROR) {
        VIR_TEST_DEBUG("passed instead of expected parse error");
        goto cleanup;
    }
540
    priv = vm->privateData;
541

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

545
    if (!virDomainDefCheckABIStability(vm->def, vm->def, driver.xmlopt)) {
546
        VIR_TEST_DEBUG("ABI stability check failed on %s", xml);
547
        goto cleanup;
548 549
    }

550
    vm->def->id = -1;
551

552
    if (qemuProcessPrepareMonitorChr(&monitor_chr, priv->libDir) < 0)
553
        goto cleanup;
554

555
    if (testUpdateQEMUCaps(info, vm, driver.caps) < 0)
556
        goto cleanup;
557

558
    log = virTestLogContentAndReset();
559
    VIR_FREE(log);
560
    virResetLastError();
J
Jiri Denemark 已提交
561

562 563
    for (i = 0; i < vm->def->nhostdevs; i++) {
        virDomainHostdevDefPtr hostdev = vm->def->hostdevs[i];
564 565 566 567 568 569 570 571

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

572 573 574 575 576 577 578 579 580 581 582
    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;
    }

583 584 585
    if (vm->def->tpm) {
        switch (vm->def->tpm->type) {
        case VIR_DOMAIN_TPM_TYPE_EMULATOR:
586
            VIR_FREE(vm->def->tpm->data.emulator.source.data.file.path);
587 588 589
            if (VIR_STRDUP(vm->def->tpm->data.emulator.source.data.file.path,
                           "/dev/test") < 0)
                goto cleanup;
590
            vm->def->tpm->data.emulator.source.type = VIR_DOMAIN_CHR_TYPE_FILE;
591 592 593 594 595 596 597
            break;
        case VIR_DOMAIN_TPM_TYPE_PASSTHROUGH:
        case VIR_DOMAIN_TPM_TYPE_LAST:
            break;
       }
    }

598
    if (!(cmd = qemuProcessCreatePretendCmd(&driver, vm, migrateURI,
P
Pavel Hrdina 已提交
599 600
                                            (flags & FLAG_FIPS), false,
                                            VIR_QEMU_PROCESS_START_COLD))) {
P
Pavel Hrdina 已提交
601 602
        if (flags & FLAG_EXPECT_FAILURE)
            goto ok;
603
        goto cleanup;
J
Jiri Denemark 已提交
604
    }
605 606 607 608
    if (flags & FLAG_EXPECT_FAILURE) {
        VIR_TEST_DEBUG("passed instead of expected failure");
        goto cleanup;
    }
J
Jiri Denemark 已提交
609

E
Eric Blake 已提交
610
    if (!(actualargv = virCommandToString(cmd)))
611
        goto cleanup;
E
Eric Blake 已提交
612

613
    if (virTestCompareToFile(actualargv, args) < 0)
614
        goto cleanup;
615

P
Pavel Hrdina 已提交
616 617
    ret = 0;

618
 ok:
619
    if (ret == 0 && flags & FLAG_EXPECT_FAILURE) {
P
Pavel Hrdina 已提交
620 621
        ret = -1;
        VIR_TEST_DEBUG("Error expected but there wasn't any.\n");
622
        goto cleanup;
P
Pavel Hrdina 已提交
623
    }
624
    if (!virTestOOMActive()) {
625
        if (flags & FLAG_EXPECT_FAILURE) {
626
            if ((log = virTestLogContentAndReset()))
P
Pavel Hrdina 已提交
627 628
                VIR_TEST_DEBUG("Got expected error: \n%s", log);
        }
629
        virResetLastError();
P
Pavel Hrdina 已提交
630
        ret = 0;
631 632
    }

633 634 635
    if (!(flags & FLAG_EXPECT_FAILURE) && ret == 0)
        VIR_STEAL_PTR(info->vm, vm);

636
 cleanup:
637 638
    VIR_FREE(log);
    VIR_FREE(actualargv);
639
    virDomainChrSourceDefClear(&monitor_chr);
E
Eric Blake 已提交
640
    virCommandFree(cmd);
641
    virObjectUnref(vm);
642 643
    virSetConnectSecret(NULL);
    virSetConnectStorage(NULL);
644
    virObjectUnref(conn);
645
    VIR_FREE(migrateURI);
646 647
    VIR_FREE(xml);
    VIR_FREE(args);
648
    return ret;
649 650
}

A
Andrea Bolognani 已提交
651
# define FAKEROOTDIRTEMPLATE abs_builddir "/fakerootdir-XXXXXX"
652

653
static int
E
Eric Blake 已提交
654
mymain(void)
655
{
656
    int ret = 0, i;
A
Andrea Bolognani 已提交
657
    char *fakerootdir;
658
    bool skipLegacyCPUs = false;
659 660 661 662 663 664 665
    const char *archs[] = {
        "aarch64",
        "ppc64",
        "riscv64",
        "s390x",
        "x86_64",
    };
666
    virHashTablePtr capslatest = NULL;
667

A
Andrea Bolognani 已提交
668 669 670 671 672 673 674 675 676 677 678 679
    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);

680 681
    abs_top_srcdir = getenv("abs_top_srcdir");
    if (!abs_top_srcdir)
682
        abs_top_srcdir = abs_srcdir "/..";
683

684 685 686 687 688 689 690 691 692 693
    /* 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;
    }

694
    if (qemuTestDriverInit(&driver) < 0)
695
        return EXIT_FAILURE;
696 697

    driver.privileged = true;
698

699 700 701
    VIR_FREE(driver.config->defaultTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->defaultTLSx509certdir, "/etc/pki/qemu") < 0)
        return EXIT_FAILURE;
702
    VIR_FREE(driver.config->vncTLSx509certdir);
703
    if (VIR_STRDUP_QUIET(driver.config->vncTLSx509certdir, "/etc/pki/libvirt-vnc") < 0)
704 705
        return EXIT_FAILURE;
    VIR_FREE(driver.config->spiceTLSx509certdir);
706
    if (VIR_STRDUP_QUIET(driver.config->spiceTLSx509certdir, "/etc/pki/libvirt-spice") < 0)
707
        return EXIT_FAILURE;
708 709 710
    VIR_FREE(driver.config->chardevTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->chardevTLSx509certdir, "/etc/pki/libvirt-chardev") < 0)
        return EXIT_FAILURE;
711
    VIR_FREE(driver.config->vxhsTLSx509certdir);
712
    if (VIR_STRDUP_QUIET(driver.config->vxhsTLSx509certdir, "/etc/pki/libvirt-vxhs/dummy,path") < 0)
713
        return EXIT_FAILURE;
714 715 716
    VIR_FREE(driver.config->nbdTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->nbdTLSx509certdir, "/etc/pki/libvirt-nbd/dummy,path") < 0)
        return EXIT_FAILURE;
717

718
    VIR_FREE(driver.config->hugetlbfs);
719
    if (VIR_ALLOC_N(driver.config->hugetlbfs, 2) < 0)
720
        return EXIT_FAILURE;
721 722 723
    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)
724
        return EXIT_FAILURE;
725 726
    driver.config->hugetlbfs[0].size = 2048;
    driver.config->hugetlbfs[0].deflt = true;
727
    driver.config->hugetlbfs[1].size = 1048576;
728
    driver.config->spiceTLS = 1;
729
    if (VIR_STRDUP_QUIET(driver.config->spicePassword, "123456") < 0)
730
        return EXIT_FAILURE;
731 732 733
    VIR_FREE(driver.config->memoryBackingDir);
    if (VIR_STRDUP_QUIET(driver.config->memoryBackingDir, "/var/lib/libvirt/qemu/ram") < 0)
        return EXIT_FAILURE;
734

735 736
    capslatest = virHashCreate(4, virHashValueFree);
    if (!capslatest)
737 738
        return EXIT_FAILURE;

739
    VIR_TEST_VERBOSE("\n");
740

741 742 743 744 745 746 747 748 749 750 751
    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");
752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767

/**
 * 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, \
768
                               arch, capsfile, stripmachinealiases) \
769 770 771 772 773 774 775 776 777
    do { \
        static struct testInfo info = { \
            name, "." suffix, NULL, migrateFrom, migrateFrom ? 7 : -1,\
            (flags), parseFlags, false, NULL \
        }; \
        info.skipLegacyCPUs = skipLegacyCPUs; \
        if (!(info.qemuCaps = qemuTestParseCapabilitiesArch(virArchFromString(arch), \
                                                            capsfile))) \
            return EXIT_FAILURE; \
778 779
        if (stripmachinealiases) \
            virQEMUCapsStripMachineAliases(info.qemuCaps); \
780 781 782 783 784 785 786 787 788
        if (virTestRun("QEMU XML-2-ARGV " name "." suffix, \
                       testCompareXMLToArgv, &info) < 0) \
            ret = -1; \
        virObjectUnref(info.qemuCaps); \
        virObjectUnref(info.vm); \
    } while (0)

# define TEST_CAPS_PATH abs_srcdir "/qemucapabilitiesdata/caps_"

789 790
# define DO_TEST_CAPS_ARCH_VER_FULL(name, flags, parseFlags, arch, ver) \
    DO_TEST_CAPS_INTERNAL(name, arch "-" ver, NULL, flags, parseFlags, \
791
                          arch, TEST_CAPS_PATH ver "." arch ".xml", false)
792

793 794
# define DO_TEST_CAPS_ARCH_VER(name, arch, ver) \
    DO_TEST_CAPS_ARCH_VER_FULL(name, 0, 0, arch, ver)
795 796

# define DO_TEST_CAPS_VER(name, ver) \
797
    DO_TEST_CAPS_ARCH_VER(name, "x86_64", ver)
798

799 800 801 802
# define DO_TEST_CAPS_ARCH_LATEST(name, arch) \
    DO_TEST_CAPS_INTERNAL(name, arch "-latest", NULL, 0, 0, arch, \
                          virHashLookup(capslatest, arch), true)

803
# define DO_TEST_CAPS_LATEST(name) \
804
    DO_TEST_CAPS_ARCH_LATEST(name, "x86_64")
805 806 807 808 809 810 811 812 813 814 815

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

816 817 818 819
# define DO_TEST_FULL(name, migrateFrom, migrateFd, flags, \
                      parseFlags, gic, ...) \
    do { \
        static struct testInfo info = { \
820
            name, NULL, NULL, migrateFrom, migrateFd, (flags), parseFlags, \
821
            false, NULL \
822 823 824 825 826 827 828 829
        }; \
        info.skipLegacyCPUs = skipLegacyCPUs; \
        if (testInitQEMUCaps(&info, gic) < 0) \
            return EXIT_FAILURE; \
        virQEMUCapsSetList(info.qemuCaps, __VA_ARGS__, QEMU_CAPS_LAST); \
        if (virTestRun("QEMU XML-2-ARGV " name, \
                       testCompareXMLToArgv, &info) < 0) \
            ret = -1; \
830
        if (virTestRun("QEMU XML-2-startup-XML " name, \
J
Ján Tomko 已提交
831
                       testCompareXMLToStartupXML, &info) < 0) \
832
            ret = -1; \
833
        virObjectUnref(info.qemuCaps); \
834
        virObjectUnref(info.vm); \
835 836
    } while (0)

837
# define DO_TEST(name, ...) \
838
    DO_TEST_FULL(name, NULL, -1, 0, 0, GIC_NONE, __VA_ARGS__)
839

840
# define DO_TEST_GIC(name, gic, ...) \
841 842
    DO_TEST_FULL(name, NULL, -1, 0, 0, gic, __VA_ARGS__)

843 844
# define DO_TEST_FAILURE(name, ...) \
    DO_TEST_FULL(name, NULL, -1, FLAG_EXPECT_FAILURE, \
845
                 0, GIC_NONE, __VA_ARGS__)
846

847 848 849
# define DO_TEST_PARSE_ERROR(name, ...) \
    DO_TEST_FULL(name, NULL, -1, \
                 FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE, \
850
                 0, GIC_NONE, __VA_ARGS__)
851

852 853 854
# define DO_TEST_PARSE_FLAGS_ERROR(name, parseFlags, ...) \
    DO_TEST_FULL(name, NULL, -1, \
                 FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE, \
855
                 parseFlags, GIC_NONE, __VA_ARGS__)
856 857

# define NONE QEMU_CAPS_LAST
858

859 860 861
    /* 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 */
862 863 864 865 866 867 868
    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");
869 870
    unsetenv("QEMU_AUDIO_DRV");
    unsetenv("SDL_AUDIODRIVER");
871

872
    DO_TEST("minimal", NONE);
873 874
    DO_TEST("minimal-sandbox",
            QEMU_CAPS_SECCOMP_BLACKLIST);
875
    DO_TEST_PARSE_ERROR("minimal-no-memory", NONE);
876
    DO_TEST("minimal-msg-timestamp", QEMU_CAPS_MSG_TIMESTAMP);
877 878 879 880

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

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

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

927
    DO_TEST("bios",
928
            QEMU_CAPS_DEVICE_ISA_SERIAL,
929
            QEMU_CAPS_SGA);
J
Ján Tomko 已提交
930
    DO_TEST("bios-nvram", NONE);
M
Michal Privoznik 已提交
931 932 933
    DO_TEST("bios-nvram-secure",
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
934
            QEMU_CAPS_DEVICE_IOH3420,
M
Michal Privoznik 已提交
935 936 937
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_MACHINE_SMM_OPT,
            QEMU_CAPS_VIRTIO_SCSI);
938 939 940 941 942 943 944

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

945
    DO_TEST("clock-utc", NONE);
946
    DO_TEST("clock-localtime", NONE);
J
Ján Tomko 已提交
947 948 949 950
    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 已提交
951
    DO_TEST("clock-catchup", QEMU_CAPS_KVM_PIT_TICK_POLICY);
952
    DO_TEST("cpu-kvmclock", QEMU_CAPS_ENABLE_KVM);
A
Andrea Bolognani 已提交
953
    DO_TEST("cpu-host-kvmclock", QEMU_CAPS_ENABLE_KVM);
954
    DO_TEST("kvmclock", QEMU_CAPS_KVM);
955
    DO_TEST("clock-timer-hyperv-rtc", QEMU_CAPS_KVM);
956

957 958
    DO_TEST("cpu-eoi-disabled", QEMU_CAPS_ENABLE_KVM);
    DO_TEST("cpu-eoi-enabled", QEMU_CAPS_ENABLE_KVM);
J
Ján Tomko 已提交
959
    DO_TEST("controller-order",
960 961 962 963 964 965 966
            QEMU_CAPS_KVM,
            QEMU_CAPS_ENABLE_KVM,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_CCID_PASSTHRU,
            QEMU_CAPS_SPICE,
            QEMU_CAPS_HDA_DUPLEX,
            QEMU_CAPS_USB_HUB,
967
            QEMU_CAPS_DEVICE_ISA_SERIAL,
968
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
969 970
    DO_TEST("eoi-disabled", NONE);
    DO_TEST("eoi-enabled", NONE);
971 972
    DO_TEST("pv-spinlock-disabled", NONE);
    DO_TEST("pv-spinlock-enabled", NONE);
M
Martin Kletzander 已提交
973
    DO_TEST("kvmclock+eoi-disabled", QEMU_CAPS_ENABLE_KVM);
974

975
    DO_TEST("hyperv", NONE);
976
    DO_TEST("hyperv-off", NONE);
977
    DO_TEST("hyperv-panic", NONE);
978

979 980 981
    DO_TEST("kvm-features", NONE);
    DO_TEST("kvm-features-off", NONE);

982 983 984
    DO_TEST("pmu-feature", NONE);
    DO_TEST("pmu-feature-off", NONE);

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

1232 1233 1234 1235
    DO_TEST("graphics-egl-headless",
            QEMU_CAPS_EGL_HEADLESS,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);

1236 1237 1238 1239
    DO_TEST("graphics-vnc", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("graphics-vnc-socket", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("graphics-vnc-websocket", QEMU_CAPS_VNC, QEMU_CAPS_VNC_WEBSOCKET,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1240
    DO_TEST("graphics-vnc-policy", QEMU_CAPS_VNC,
1241 1242 1243 1244 1245
            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);
1246
    driver.config->vncAutoUnixSocket = true;
1247 1248
    DO_TEST("graphics-vnc-auto-socket-cfg", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1249
    driver.config->vncAutoUnixSocket = false;
1250 1251 1252 1253
    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);
1254 1255
    DO_TEST("graphics-vnc-socket-new-cmdline", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA, QEMU_CAPS_VNC_MULTI_SERVERS);
1256

1257 1258
    driver.config->vncSASL = 1;
    VIR_FREE(driver.config->vncSASLdir);
1259
    ignore_value(VIR_STRDUP(driver.config->vncSASLdir, "/root/.sasl2"));
1260
    DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1261 1262
    driver.config->vncTLS = 1;
    driver.config->vncTLSx509verify = 1;
1263
    DO_TEST("graphics-vnc-tls", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1264 1265
    DO_TEST_CAPS_VER("graphics-vnc-tls", "2.4.0");
    DO_TEST_CAPS_LATEST("graphics-vnc-tls");
1266
    driver.config->vncSASL = driver.config->vncTLSx509verify = driver.config->vncTLS = 0;
1267 1268
    VIR_FREE(driver.config->vncSASLdir);
    VIR_FREE(driver.config->vncTLSx509certdir);
1269 1270 1271 1272
    DO_TEST("graphics-vnc-egl-headless",
            QEMU_CAPS_VNC,
            QEMU_CAPS_EGL_HEADLESS,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1273

J
Ján Tomko 已提交
1274 1275
    DO_TEST("graphics-sdl",
            QEMU_CAPS_DEVICE_VGA);
1276
    DO_TEST_FAILURE("graphics-sdl-egl-headless", NONE);
J
Ján Tomko 已提交
1277
    DO_TEST("graphics-sdl-fullscreen",
1278
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1279
    DO_TEST("graphics-spice",
1280
            QEMU_CAPS_SPICE,
1281 1282
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
1283
    DO_TEST("graphics-spice-no-args",
1284
            QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1285 1286 1287
    driver.config->spiceSASL = 1;
    ignore_value(VIR_STRDUP(driver.config->spiceSASLdir, "/root/.sasl2"));
    DO_TEST("graphics-spice-sasl",
1288
            QEMU_CAPS_SPICE,
1289 1290 1291
            QEMU_CAPS_DEVICE_QXL);
    VIR_FREE(driver.config->spiceSASLdir);
    driver.config->spiceSASL = 0;
1292
    DO_TEST("graphics-spice-agentmouse",
1293
            QEMU_CAPS_DEVICE_QXL,
1294
            QEMU_CAPS_SPICE,
1295
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1296
    DO_TEST("graphics-spice-compression",
1297
            QEMU_CAPS_SPICE,
1298
            QEMU_CAPS_DEVICE_QXL);
1299
    DO_TEST("graphics-spice-timeout",
1300
            QEMU_CAPS_KVM,
1301
            QEMU_CAPS_SPICE,
1302 1303
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_DEVICE_VGA);
1304
    DO_TEST("graphics-spice-qxl-vga",
1305
            QEMU_CAPS_SPICE,
1306
            QEMU_CAPS_DEVICE_QXL);
1307
    DO_TEST("graphics-spice-usb-redir",
1308
            QEMU_CAPS_SPICE,
1309 1310 1311 1312
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1313
    DO_TEST("graphics-spice-agent-file-xfer",
1314
            QEMU_CAPS_SPICE,
1315 1316
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
1317 1318
    DO_TEST("graphics-spice-socket",
            QEMU_CAPS_SPICE,
1319 1320
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1321 1322
    DO_TEST("graphics-spice-auto-socket",
            QEMU_CAPS_SPICE,
1323 1324
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1325 1326 1327
    driver.config->spiceAutoUnixSocket = true;
    DO_TEST("graphics-spice-auto-socket-cfg",
            QEMU_CAPS_SPICE,
1328 1329
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1330
    driver.config->spiceAutoUnixSocket = false;
1331 1332 1333 1334 1335 1336 1337 1338
    DO_TEST("graphics-spice-egl-headless",
            QEMU_CAPS_SPICE,
            QEMU_CAPS_EGL_HEADLESS,
            QEMU_CAPS_DEVICE_QXL);
    DO_TEST_FAILURE("graphics-spice-invalid-egl-headless",
                    QEMU_CAPS_SPICE,
                    QEMU_CAPS_EGL_HEADLESS,
                    QEMU_CAPS_DEVICE_QXL);
1339

1340 1341 1342
    DO_TEST("input-usbmouse", NONE);
    DO_TEST("input-usbtablet", NONE);
    DO_TEST("misc-acpi", NONE);
1343 1344 1345
    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);
1346
    DO_TEST_FAILURE("misc-enable-s4", NONE);
1347
    DO_TEST("misc-no-reboot", NONE);
1348
    DO_TEST("misc-uuid", NONE);
1349
    DO_TEST_PARSE_ERROR("vhost_queues-invalid", NONE);
1350
    DO_TEST("net-vhostuser", QEMU_CAPS_CHARDEV_FD_PASS);
1351
    DO_TEST("net-vhostuser-multiq",
J
Ján Tomko 已提交
1352 1353
            QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
    DO_TEST_FAILURE("net-vhostuser-multiq", NONE);
1354 1355
    DO_TEST_FAILURE("net-vhostuser-fail",
                    QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
1356
    DO_TEST("net-user", NONE);
J
Ján Tomko 已提交
1357
    DO_TEST("net-user-addr", NONE);
1358 1359
    DO_TEST("net-virtio", NONE);
    DO_TEST("net-virtio-device",
1360 1361 1362
            QEMU_CAPS_VIRTIO_TX_ALG);
    DO_TEST("net-virtio-disable-offloads", NONE);
    DO_TEST("net-virtio-netdev", NONE);
1363
    DO_TEST("net-virtio-s390",
1364
            QEMU_CAPS_VIRTIO_S390);
1365
    DO_TEST("net-virtio-ccw",
1366
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1367 1368 1369
    DO_TEST("net-virtio-rxtxqueuesize",
            QEMU_CAPS_VIRTIO_NET_RX_QUEUE_SIZE,
            QEMU_CAPS_VIRTIO_NET_TX_QUEUE_SIZE);
1370
    DO_TEST_PARSE_ERROR("net-virtio-rxqueuesize-invalid-size", NONE);
1371 1372
    DO_TEST("net-eth", NONE);
    DO_TEST("net-eth-ifname", NONE);
1373
    DO_TEST("net-eth-names", NONE);
1374
    DO_TEST("net-eth-hostip", NONE);
1375 1376 1377
    DO_TEST("net-client", NONE);
    DO_TEST("net-server", NONE);
    DO_TEST("net-mcast", NONE);
1378
    DO_TEST("net-udp", NONE);
1379
    DO_TEST("net-hostdev", NONE);
1380
    DO_TEST("net-hostdev-multidomain", NONE);
1381 1382
    DO_TEST("net-hostdev-vfio",
            QEMU_CAPS_DEVICE_VFIO_PCI);
1383
    DO_TEST("net-hostdev-vfio-multidomain",
1384
            QEMU_CAPS_DEVICE_VFIO_PCI);
1385 1386 1387
    DO_TEST_FAILURE("net-hostdev-fail",
                    QEMU_CAPS_DEVICE_VFIO_PCI);

1388

1389 1390
    DO_TEST("serial-file-log",
            QEMU_CAPS_CHARDEV_FILE_APPEND,
1391
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1392
            QEMU_CAPS_CHARDEV_LOGFILE);
1393
    DO_TEST("serial-spiceport",
1394
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1395
            QEMU_CAPS_DEVICE_QXL,
1396
            QEMU_CAPS_SPICE,
1397
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1398
            QEMU_CAPS_CHARDEV_SPICEPORT);
1399
    DO_TEST("serial-spiceport-nospice", NONE);
1400

1401 1402 1403 1404
    DO_TEST("console-compat",
            QEMU_CAPS_DEVICE_ISA_SERIAL);
    DO_TEST("console-compat-auto",
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1405 1406

    DO_TEST("serial-vc-chardev",
1407
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1408
    DO_TEST("serial-pty-chardev",
1409
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1410
    DO_TEST("serial-dev-chardev",
1411
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1412
    DO_TEST("serial-dev-chardev-iobase",
1413
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1414
    DO_TEST("serial-file-chardev",
1415
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1416
            QEMU_CAPS_CHARDEV_FILE_APPEND);
1417
    DO_TEST("serial-unix-chardev",
1418
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1419
    DO_TEST_CAPS_LATEST("serial-unix-chardev");
1420
    DO_TEST("serial-tcp-chardev",
1421
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1422
    DO_TEST("serial-udp-chardev",
1423
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1424
    DO_TEST("serial-tcp-telnet-chardev",
1425
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1426 1427
    driver.config->chardevTLS = 1;
    DO_TEST("serial-tcp-tlsx509-chardev",
1428
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1429
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1430 1431
    driver.config->chardevTLSx509verify = 1;
    DO_TEST("serial-tcp-tlsx509-chardev-verify",
1432
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1433 1434
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
    driver.config->chardevTLSx509verify = 0;
1435
    DO_TEST("serial-tcp-tlsx509-chardev-notls",
1436
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1437
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1438 1439 1440 1441 1442 1443 1444 1445
    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,
1446
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1447
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1448 1449
    driver.config->chardevTLS = 0;
    VIR_FREE(driver.config->chardevTLSx509certdir);
1450
    DO_TEST("serial-many-chardev",
1451 1452 1453
            QEMU_CAPS_DEVICE_ISA_SERIAL);
    DO_TEST("parallel-tcp-chardev", NONE);
    DO_TEST("parallel-parport-chardev", NONE);
1454
    DO_TEST("console-compat-chardev",
1455
            QEMU_CAPS_DEVICE_ISA_SERIAL);
M
Michal Privoznik 已提交
1456 1457
    DO_TEST("pci-serial-dev-chardev",
            QEMU_CAPS_DEVICE_PCI_SERIAL);
1458

1459 1460 1461 1462 1463 1464 1465
    DO_TEST("channel-guestfwd", NONE);
    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);
1466
    DO_TEST("console-virtio-many",
1467
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1468
    DO_TEST("console-virtio-s390",
1469
            QEMU_CAPS_VIRTIO_S390);
1470
    DO_TEST("console-virtio-ccw",
1471
            QEMU_CAPS_CCW,
1472
            QEMU_CAPS_VIRTIO_S390);
1473
    DO_TEST("console-sclp",
1474
            QEMU_CAPS_VIRTIO_S390,
1475
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
1476
    DO_TEST("channel-spicevmc",
1477
            QEMU_CAPS_SPICE,
1478
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1479
    DO_TEST("channel-virtio-default",
1480
            QEMU_CAPS_SPICE);
1481
    DO_TEST("channel-virtio-unix", NONE);
1482

1483
    DO_TEST("smartcard-host",
1484
            QEMU_CAPS_CCID_EMULATED);
1485
    DO_TEST("smartcard-host-certificates",
1486
            QEMU_CAPS_CCID_EMULATED);
1487 1488
    DO_TEST("smartcard-host-certificates-database",
            QEMU_CAPS_CCID_EMULATED);
1489
    DO_TEST("smartcard-passthrough-tcp",
1490
            QEMU_CAPS_CCID_PASSTHRU);
1491
    DO_TEST("smartcard-passthrough-spicevmc",
1492
            QEMU_CAPS_CCID_PASSTHRU);
1493
    DO_TEST("smartcard-controller",
1494
            QEMU_CAPS_CCID_EMULATED);
1495

1496 1497 1498 1499 1500 1501 1502 1503
    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);
1504 1505
    DO_TEST_PARSE_ERROR("chardev-reconnect-generated-path",
                        QEMU_CAPS_CHARDEV_RECONNECT);
1506

1507
    DO_TEST("usb-controller", NONE);
1508
    DO_TEST("usb-piix3-controller",
1509
            QEMU_CAPS_PIIX3_USB_UHCI);
1510
    DO_TEST("usb-ich9-ehci-addr",
1511
            QEMU_CAPS_ICH9_USB_EHCI1);
1512
    DO_TEST("input-usbmouse-addr", NONE);
1513
    DO_TEST("usb-ich9-companion",
1514
            QEMU_CAPS_ICH9_USB_EHCI1);
1515
    DO_TEST_PARSE_ERROR("usb-ich9-no-companion",
1516
            QEMU_CAPS_ICH9_USB_EHCI1);
1517
    DO_TEST("usb-ich9-autoassign",
1518
            QEMU_CAPS_ICH9_USB_EHCI1,
1519
            QEMU_CAPS_USB_HUB);
1520
    DO_TEST("usb-hub",
1521
            QEMU_CAPS_USB_HUB);
1522
    DO_TEST("usb-hub-autoadd",
1523
            QEMU_CAPS_USB_HUB);
1524
    DO_TEST("usb-hub-autoadd-deluxe",
1525
            QEMU_CAPS_USB_HUB);
J
Ján Tomko 已提交
1526
    DO_TEST_PARSE_ERROR("usb-hub-conflict",
1527
            QEMU_CAPS_USB_HUB);
1528
    DO_TEST_PARSE_ERROR("usb-hub-nonexistent",
1529
            QEMU_CAPS_USB_HUB);
J
Ján Tomko 已提交
1530
    DO_TEST("usb-port-missing",
1531
            QEMU_CAPS_USB_HUB);
1532
    DO_TEST_FAILURE("usb-bus-missing",
1533
                    QEMU_CAPS_USB_HUB);
1534
    DO_TEST("usb-ports",
1535
            QEMU_CAPS_USB_HUB);
1536
    DO_TEST_PARSE_ERROR("usb-ports-out-of-range",
1537
            QEMU_CAPS_USB_HUB);
1538
    DO_TEST("usb-port-autoassign",
1539
            QEMU_CAPS_USB_HUB);
1540
    DO_TEST("usb-redir",
1541 1542 1543
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
1544
            QEMU_CAPS_SPICE);
1545
    DO_TEST("usb-redir-boot",
1546 1547 1548 1549
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE,
1550
            QEMU_CAPS_USB_REDIR_BOOTINDEX);
1551
    DO_TEST("usb-redir-filter",
1552 1553 1554 1555
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE,
1556
            QEMU_CAPS_USB_REDIR_FILTER);
1557 1558
    DO_TEST("usb-redir-filter-version",
            QEMU_CAPS_USB_REDIR,
1559
            QEMU_CAPS_SPICE,
1560
            QEMU_CAPS_USB_REDIR_FILTER);
1561
    DO_TEST("usb1-usb2",
1562 1563 1564
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1);
1565 1566
    DO_TEST("usb-none", NONE);
    DO_TEST_PARSE_ERROR("usb-none-other", NONE);
1567 1568
    DO_TEST_PARSE_ERROR("usb-none-hub",
            QEMU_CAPS_USB_HUB);
1569
    DO_TEST_PARSE_ERROR("usb-none-usbtablet", NONE);
1570
    DO_TEST("usb-controller-default-q35",
1571
            QEMU_CAPS_DEVICE_IOH3420,
1572 1573 1574
            QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI);
1575
    DO_TEST_FAILURE("usb-controller-default-unavailable-q35",
1576
                    QEMU_CAPS_DEVICE_IOH3420,
1577
                    QEMU_CAPS_PCI_OHCI,
1578 1579
                    QEMU_CAPS_NEC_USB_XHCI);
    DO_TEST("usb-controller-explicit-q35",
1580
            QEMU_CAPS_DEVICE_IOH3420,
1581 1582 1583
            QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI);
1584
    DO_TEST_FAILURE("usb-controller-explicit-unavailable-q35",
1585
                    QEMU_CAPS_DEVICE_IOH3420,
1586
                    QEMU_CAPS_PCI_OHCI,
1587
                    QEMU_CAPS_PIIX3_USB_UHCI);
1588
    DO_TEST("usb-controller-xhci",
1589 1590 1591
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_NEC_USB_XHCI_PORTS);
1592
    DO_TEST("usb-xhci-autoassign",
1593 1594 1595
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_NEC_USB_XHCI_PORTS,
1596
            QEMU_CAPS_USB_HUB);
1597
    DO_TEST_PARSE_ERROR("usb-controller-xhci-limit",
1598 1599 1600
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_NEC_USB_XHCI_PORTS);
1601 1602 1603 1604
    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);
1605

1606 1607 1608
    DO_TEST("smbios", NONE);
    DO_TEST_PARSE_ERROR("smbios-date", NONE);
    DO_TEST_PARSE_ERROR("smbios-uuid-match", NONE);
1609

1610
    DO_TEST("watchdog", NONE);
1611
    DO_TEST("watchdog-device", NONE);
1612
    DO_TEST("watchdog-dump", NONE);
1613
    DO_TEST("watchdog-injectnmi", NONE);
1614
    DO_TEST("watchdog-diag288", QEMU_CAPS_VIRTIO_S390);
1615 1616
    DO_TEST("balloon-device", NONE);
    DO_TEST("balloon-device-deflate",
1617
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1618
    DO_TEST("balloon-ccw-deflate",
1619
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1620
    DO_TEST("balloon-mmio-deflate",
J
Ján Tomko 已提交
1621
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1622
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1623
    DO_TEST("balloon-device-deflate-off",
1624
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1625 1626
    DO_TEST("balloon-device-auto", NONE);
    DO_TEST("balloon-device-period", NONE);
1627 1628
    DO_TEST("sound", NONE);
    DO_TEST("sound-device",
1629
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_HDA_MICRO,
1630
            QEMU_CAPS_HDA_OUTPUT,
1631 1632
            QEMU_CAPS_DEVICE_ICH9_INTEL_HDA,
            QEMU_CAPS_OBJECT_USB_AUDIO);
1633
    DO_TEST("fs9p", NONE);
1634
    DO_TEST("fs9p-ccw",
1635
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1636

1637
    DO_TEST("hostdev-usb-address", NONE);
1638
    DO_TEST("hostdev-usb-address-device", NONE);
1639
    DO_TEST("hostdev-usb-address-device-boot",
1640
            QEMU_CAPS_USB_HOST_BOOTINDEX);
J
Ján Tomko 已提交
1641
    DO_TEST("hostdev-pci-address", NONE);
1642
    DO_TEST("hostdev-pci-address-device", NONE);
1643 1644
    DO_TEST("hostdev-vfio",
            QEMU_CAPS_DEVICE_VFIO_PCI);
1645
    DO_TEST("hostdev-vfio-multidomain",
1646
            QEMU_CAPS_DEVICE_VFIO_PCI);
1647 1648 1649 1650 1651 1652
    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);
1653 1654 1655 1656 1657 1658 1659
    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);
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 1704 1705 1706
    DO_TEST("iothreads-virtio-scsi-pci", QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_OBJECT_IOTHREAD,
            QEMU_CAPS_VIRTIO_SCSI_IOTHREAD);
    DO_TEST("iothreads-virtio-scsi-ccw", QEMU_CAPS_OBJECT_IOTHREAD,
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI_IOTHREAD,
1707
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
J
John Ferlan 已提交
1708

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

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

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

1753 1754
    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);
1755
    DO_TEST("luks-disks", QEMU_CAPS_OBJECT_SECRET);
1756
    DO_TEST("luks-disks-source", QEMU_CAPS_OBJECT_SECRET);
1757 1758
    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);
1759
    DO_TEST_PARSE_ERROR("luks-disk-invalid", NONE);
1760
    DO_TEST_PARSE_ERROR("luks-disks-source-both", QEMU_CAPS_OBJECT_SECRET);
1761

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

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

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

1791 1792
    DO_TEST("numatune-distances", QEMU_CAPS_NUMA, QEMU_CAPS_NUMA_DIST);

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

1815
    DO_TEST("multifunction-pci-device",
1816
            QEMU_CAPS_SCSI_LSI);
1817

1818
    DO_TEST("monitor-json", NONE);
1819

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

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

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

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

1887 1888
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);

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

    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);
1902 1903 1904 1905 1906 1907
    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);
1908 1909 1910
    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);
1911

1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933
    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);

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

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

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

1989
    DO_TEST("disk-ide-split",
1990
            QEMU_CAPS_IDE_CD);
1991
    DO_TEST("disk-ide-wwn",
1992
            QEMU_CAPS_IDE_CD,
1993
            QEMU_CAPS_IDE_DRIVE_WWN);
1994

1995
    DO_TEST("disk-geometry", NONE);
V
Viktor Mihajlovski 已提交
1996 1997
    DO_TEST("disk-blockio",
            QEMU_CAPS_IDE_CD, QEMU_CAPS_BLOCKIO);
1998

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

2067 2068
    DO_TEST("virtio-rng-default",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2069
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2070 2071
    DO_TEST("virtio-rng-random",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2072
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2073 2074
    DO_TEST("virtio-rng-egd",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2075
            QEMU_CAPS_OBJECT_RNG_EGD);
2076 2077 2078 2079
    DO_TEST("virtio-rng-multiple",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2080
    DO_TEST_PARSE_ERROR("virtio-rng-egd-crash",
2081 2082
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD);
2083
    DO_TEST("virtio-rng-ccw",
2084
            QEMU_CAPS_CCW,
2085 2086
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
2087
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2088

2089
    DO_TEST("s390-allow-bogus-usb-none",
2090 2091 2092
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2093
    DO_TEST("s390-allow-bogus-usb-controller",
2094 2095 2096
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2097

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

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

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

2138 2139 2140 2141
    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);
2142

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

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

    /* 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,
2356
            QEMU_CAPS_DEVICE_IOH3420);
2357
    DO_TEST("pcie-root-port-model-ioh3420",
2358
            QEMU_CAPS_DEVICE_IOH3420);
2359

2360 2361 2362 2363 2364 2365 2366
    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,
2367
            QEMU_CAPS_ICH9_USB_EHCI1,
2368
            QEMU_CAPS_NEC_USB_XHCI);
2369 2370 2371 2372 2373 2374 2375
    /* Make sure the user can always override libvirt's default device
     * placement policy by providing an explicit PCI address */
    DO_TEST("q35-pci-force-address",
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_HDA_DUPLEX);
2376

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

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

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

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

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

2429
    DO_TEST("hostdev-scsi-lsi",
2430 2431
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2432
    DO_TEST("hostdev-scsi-virtio-scsi",
2433 2434
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2435
    DO_TEST("hostdev-scsi-readonly",
J
Ján Tomko 已提交
2436
            QEMU_CAPS_VIRTIO_SCSI,
O
Osier Yang 已提交
2437
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_SCSI_GENERIC);
2438
    DO_TEST("hostdev-scsi-virtio-scsi",
2439 2440 2441
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC,
            QEMU_CAPS_DEVICE_SCSI_GENERIC_BOOTINDEX);
2442
    DO_TEST("hostdev-scsi-lsi-iscsi",
J
John Ferlan 已提交
2443 2444
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2445
    DO_TEST("hostdev-scsi-lsi-iscsi-auth",
J
John Ferlan 已提交
2446 2447
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2448
    DO_TEST("hostdev-scsi-virtio-iscsi",
J
John Ferlan 已提交
2449 2450
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2451
    DO_TEST("hostdev-scsi-virtio-iscsi-auth",
J
John Ferlan 已提交
2452 2453
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2454 2455 2456 2457
    DO_TEST("disk-hostdev-scsi-virtio-iscsi-auth-AES",
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC, QEMU_CAPS_OBJECT_SECRET,
            QEMU_CAPS_ISCSI_PASSWORD_SECRET);
2458 2459
    DO_TEST("hostdev-scsi-vhost-scsi-ccw",
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_VHOST_SCSI,
2460
            QEMU_CAPS_DEVICE_SCSI_GENERIC, QEMU_CAPS_CCW);
2461 2462 2463
    DO_TEST("hostdev-scsi-vhost-scsi-pci",
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_VHOST_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2464 2465 2466 2467 2468 2469
    DO_TEST("hostdev-scsi-vhost-scsi-pcie",
            QEMU_CAPS_KVM,
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_VHOST_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC,
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT,
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY);
2470

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

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

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

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

J
Ján Tomko 已提交
2493 2494
    DO_TEST("arm-vexpressa9-nodevs", NONE);
    DO_TEST("arm-vexpressa9-basic", NONE);
2495
    DO_TEST("arm-vexpressa9-virtio",
2496
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2497
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2498
    DO_TEST("arm-virt-virtio",
2499
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2500
            QEMU_CAPS_DEVICE_PL011,
2501
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2502

2503
    DO_TEST("aarch64-virt-virtio",
2504
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2505
            QEMU_CAPS_DEVICE_PL011,
2506
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2507 2508 2509 2510 2511 2512

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

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

2660
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);
2661

2662
    DO_TEST("kvm-pit-delay", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2663
    DO_TEST("kvm-pit-discard", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2664

2665 2666 2667 2668
    DO_TEST("panic",
            QEMU_CAPS_DEVICE_PANIC);
    DO_TEST("panic-double",
            QEMU_CAPS_DEVICE_PANIC);
H
Hu Tao 已提交
2669

2670 2671
    DO_TEST("panic-no-address",
            QEMU_CAPS_DEVICE_PANIC);
2672

2673 2674
    DO_TEST("fips-enabled", QEMU_CAPS_ENABLE_FIPS);

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

2689
    DO_TEST_FAILURE("memory-align-fail", NONE);
2690
    DO_TEST_FAILURE("memory-hotplug-nonuma", QEMU_CAPS_DEVICE_PC_DIMM);
M
Michal Privoznik 已提交
2691
    DO_TEST("memory-hotplug", NONE);
2692
    DO_TEST("memory-hotplug", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA);
2693
    DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2694
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2695
    DO_TEST("memory-hotplug-dimm-addr", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2696
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2697
    DO_TEST("memory-hotplug-ppc64-nonuma", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2698
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2699
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2700 2701
    DO_TEST("memory-hotplug-nvdimm",
            QEMU_CAPS_DEVICE_NVDIMM,
M
Michal Privoznik 已提交
2702
            QEMU_CAPS_NUMA, QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2703 2704
    DO_TEST("memory-hotplug-nvdimm-access",
            QEMU_CAPS_DEVICE_NVDIMM,
2705
            QEMU_CAPS_NUMA, QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2706 2707
    DO_TEST("memory-hotplug-nvdimm-label",
            QEMU_CAPS_DEVICE_NVDIMM,
2708
            QEMU_CAPS_NUMA, QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2709

2710
    DO_TEST("machine-aeskeywrap-on-caps",
2711
            QEMU_CAPS_AES_KEY_WRAP,
2712
            QEMU_CAPS_DEA_KEY_WRAP,
2713
            QEMU_CAPS_VIRTIO_SCSI,
2714
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2715
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps",
2716
                    QEMU_CAPS_VIRTIO_SCSI,
2717
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2718 2719 2720
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps", NONE);

    DO_TEST("machine-aeskeywrap-on-cap",
2721
            QEMU_CAPS_AES_KEY_WRAP,
2722
            QEMU_CAPS_VIRTIO_SCSI,
2723
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2724
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap",
2725
                    QEMU_CAPS_VIRTIO_SCSI,
2726
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2727 2728 2729
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap", NONE);

    DO_TEST("machine-aeskeywrap-off-caps",
2730
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2731
            QEMU_CAPS_VIRTIO_SCSI,
2732
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2733
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps",
2734
                    QEMU_CAPS_VIRTIO_SCSI,
2735
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2736 2737 2738
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", NONE);

    DO_TEST("machine-aeskeywrap-off-cap",
2739
            QEMU_CAPS_AES_KEY_WRAP,
2740
            QEMU_CAPS_VIRTIO_SCSI,
2741
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2742
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap",
2743
                    QEMU_CAPS_VIRTIO_SCSI,
2744
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2745 2746 2747
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap", NONE);

    DO_TEST("machine-deakeywrap-on-caps",
2748
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2749
            QEMU_CAPS_VIRTIO_SCSI,
2750
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2751
    DO_TEST_FAILURE("machine-deakeywrap-on-caps",
2752
                    QEMU_CAPS_VIRTIO_SCSI,
2753
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2754 2755 2756
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", NONE);

    DO_TEST("machine-deakeywrap-on-cap",
2757
            QEMU_CAPS_DEA_KEY_WRAP,
2758
            QEMU_CAPS_VIRTIO_SCSI,
2759
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2760
    DO_TEST_FAILURE("machine-deakeywrap-on-cap",
2761
                    QEMU_CAPS_VIRTIO_SCSI,
2762
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2763 2764 2765
    DO_TEST_FAILURE("machine-deakeywrap-on-cap", NONE);

    DO_TEST("machine-deakeywrap-off-caps",
2766
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2767
            QEMU_CAPS_VIRTIO_SCSI,
2768
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2769
    DO_TEST_FAILURE("machine-deakeywrap-off-caps",
2770
                    QEMU_CAPS_VIRTIO_SCSI,
2771
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2772 2773 2774
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", NONE);

    DO_TEST("machine-deakeywrap-off-cap",
2775
            QEMU_CAPS_DEA_KEY_WRAP,
2776
            QEMU_CAPS_VIRTIO_SCSI,
2777
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2778
    DO_TEST_FAILURE("machine-deakeywrap-off-cap",
2779
                    QEMU_CAPS_VIRTIO_SCSI,
2780
                    QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2781 2782 2783
    DO_TEST_FAILURE("machine-deakeywrap-off-cap", NONE);

    DO_TEST("machine-keywrap-none-caps",
2784
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2785
            QEMU_CAPS_VIRTIO_SCSI,
2786
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2787
    DO_TEST("machine-keywrap-none",
2788
            QEMU_CAPS_VIRTIO_SCSI,
2789
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
2790

2791
    DO_TEST("machine-loadparm-s390",
2792
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390,
2793
            QEMU_CAPS_LOADPARM);
2794
    DO_TEST("machine-loadparm-net-s390",
2795
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390,
2796
            QEMU_CAPS_LOADPARM);
2797
    DO_TEST("machine-loadparm-multiple-disks-nets-s390",
2798
            QEMU_CAPS_CCW,
2799
            QEMU_CAPS_VIRTIO_S390,
2800 2801
            QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-char-invalid",
2802
                        QEMU_CAPS_CCW,
2803
                        QEMU_CAPS_VIRTIO_S390,
2804 2805
                        QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-len-invalid",
2806
                        QEMU_CAPS_CCW,
2807
                        QEMU_CAPS_VIRTIO_S390,
2808 2809
                        QEMU_CAPS_LOADPARM);

J
Jiri Denemark 已提交
2810 2811 2812 2813 2814 2815 2816
    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);

2817
    DO_TEST("virtio-input", QEMU_CAPS_VIRTIO_KEYBOARD,
2818
            QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET);
2819
    DO_TEST("virtio-input-passthrough", QEMU_CAPS_VIRTIO_INPUT_HOST);
2820

2821
    DO_TEST("ppc64-usb-controller",
2822
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2823
            QEMU_CAPS_PCI_OHCI);
2824
    DO_TEST("ppc64-usb-controller-legacy",
2825
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2826
            QEMU_CAPS_PIIX3_USB_UHCI);
2827 2828
    DO_TEST_FULL("ppc64-usb-controller-qemu-xhci", NULL, -1, 0,
                 VIR_DOMAIN_DEF_PARSE_ABI_UPDATE, GIC_NONE,
2829
                 QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2830 2831 2832 2833 2834 2835 2836
                 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);
2837

2838 2839 2840 2841
    DO_TEST("aarch64-usb-controller-nec-xhci",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_NEC_USB_XHCI);

2842 2843 2844
    /* 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 */
2845
    DO_TEST_PARSE_FLAGS_ERROR("missing-machine",
2846
                              VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE,
2847 2848
                              NONE);

2849 2850 2851
    DO_TEST("name-escape",
            QEMU_CAPS_NAME_DEBUG_THREADS,
            QEMU_CAPS_OBJECT_SECRET,
2852 2853
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_GROUP,
2854 2855 2856 2857
            QEMU_CAPS_VNC,
            QEMU_CAPS_NAME_GUEST,
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_SPICE,
2858
            QEMU_CAPS_SPICE_UNIX,
2859 2860 2861 2862 2863
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_SPICE_GL,
            QEMU_CAPS_SPICE_RENDERNODE,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2864
            QEMU_CAPS_DEVICE_ISA_SERIAL,
2865
            QEMU_CAPS_CHARDEV_FILE_APPEND,
2866 2867 2868
            QEMU_CAPS_CCID_EMULATED,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
M
Marc-André Lureau 已提交
2869 2870
    DO_TEST("debug-threads", QEMU_CAPS_NAME_DEBUG_THREADS);

2871
    DO_TEST("master-key", QEMU_CAPS_OBJECT_SECRET);
2872
    DO_TEST("usb-long-port-path",
J
Ján Tomko 已提交
2873
            QEMU_CAPS_USB_HUB);
2874
    DO_TEST_PARSE_ERROR("usb-too-long-port-path-invalid",
2875
                        QEMU_CAPS_USB_HUB);
2876

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

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

2910 2911 2912 2913 2914 2915 2916
    DO_TEST("virtio-options", QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
2917 2918 2919
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_PCI_IOMMU_PLATFORM,
            QEMU_CAPS_VIRTIO_PCI_ATS);
2920

J
Ján Tomko 已提交
2921
    DO_TEST("fd-memory-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
2922
            QEMU_CAPS_KVM);
J
Ján Tomko 已提交
2923
    DO_TEST("fd-memory-numa-topology2", QEMU_CAPS_OBJECT_MEMORY_FILE,
2924
            QEMU_CAPS_KVM);
J
Ján Tomko 已提交
2925
    DO_TEST("fd-memory-numa-topology3", QEMU_CAPS_OBJECT_MEMORY_FILE,
2926 2927
            QEMU_CAPS_KVM);

J
Ján Tomko 已提交
2928
    DO_TEST("fd-memory-no-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
2929 2930
            QEMU_CAPS_KVM);

2931 2932 2933 2934 2935 2936 2937 2938
    DO_TEST("cpu-check-none", QEMU_CAPS_KVM);
    DO_TEST("cpu-check-partial", QEMU_CAPS_KVM);
    DO_TEST("cpu-check-full", QEMU_CAPS_KVM);
    DO_TEST("cpu-check-default-none", QEMU_CAPS_KVM);
    DO_TEST("cpu-check-default-none2", NONE);
    DO_TEST("cpu-check-default-partial", QEMU_CAPS_KVM);
    DO_TEST("cpu-check-default-partial2", QEMU_CAPS_KVM);

2939 2940 2941 2942 2943 2944 2945 2946 2947
    DO_TEST("cpu-cache-disable", QEMU_CAPS_KVM, QEMU_CAPS_CPU_CACHE);
    DO_TEST("cpu-cache-disable2", QEMU_CAPS_KVM);
    DO_TEST("cpu-cache-disable3", QEMU_CAPS_KVM, QEMU_CAPS_CPU_CACHE);
    DO_TEST("cpu-cache-passthrough", QEMU_CAPS_KVM, QEMU_CAPS_CPU_CACHE);
    DO_TEST("cpu-cache-passthrough2", QEMU_CAPS_KVM);
    DO_TEST("cpu-cache-emulate-l3", QEMU_CAPS_KVM, QEMU_CAPS_CPU_CACHE);
    DO_TEST_PARSE_ERROR("cpu-cache-emulate-l2", QEMU_CAPS_KVM);
    DO_TEST_PARSE_ERROR("cpu-cache-passthrough3", QEMU_CAPS_KVM);
    DO_TEST_PARSE_ERROR("cpu-cache-passthrough-l3", QEMU_CAPS_KVM);
M
Marc-André Lureau 已提交
2948
    DO_TEST("vmcoreinfo", QEMU_CAPS_DEVICE_VMCOREINFO);
2949

2950 2951 2952
    DO_TEST("user-aliases", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_OBJECT_MEMORY_FILE, QEMU_CAPS_PIIX_DISABLE_S3,
            QEMU_CAPS_PIIX_DISABLE_S4, QEMU_CAPS_VNC,
2953
            QEMU_CAPS_DEVICE_ISA_SERIAL,
2954
            QEMU_CAPS_HDA_DUPLEX,
2955 2956
            QEMU_CAPS_CCID_EMULATED,
            QEMU_CAPS_QCOW2_LUKS, QEMU_CAPS_OBJECT_SECRET);
2957
    DO_TEST("user-aliases2", QEMU_CAPS_DEVICE_IOH3420, QEMU_CAPS_ICH9_AHCI);
2958 2959
    DO_TEST("user-aliases-usb", QEMU_CAPS_KVM,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4,
2960
            QEMU_CAPS_ICH9_USB_EHCI1);
2961

2962
    DO_TEST_CAPS_VER("disk-virtio-scsi-reservations", "2.12.0");
2963
    DO_TEST_CAPS_LATEST("disk-virtio-scsi-reservations");
2964

2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989
    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);

2990
    DO_TEST("video-virtio-gpu-ccw", QEMU_CAPS_CCW,
2991 2992 2993 2994 2995 2996
            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);

2997
    DO_TEST("input-virtio-ccw", QEMU_CAPS_CCW,
2998 2999 3000 3001 3002 3003 3004
            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);

3005 3006
    DO_TEST_CAPS_LATEST("vhost-vsock");
    DO_TEST_CAPS_LATEST("vhost-vsock-auto");
3007 3008
    DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw", "s390x");
    DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw-auto", "s390x");
3009

3010
    DO_TEST_CAPS_VER("launch-security-sev", "2.12.0");
3011

L
Lubomir Rintel 已提交
3012 3013 3014
    DO_TEST("riscv64-virt",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);

3015 3016 3017 3018 3019 3020 3021 3022
    /* 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");

A
Andrea Bolognani 已提交
3023 3024 3025
    if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL)
        virFileDeleteTree(fakerootdir);

3026
    VIR_FREE(driver.config->nbdTLSx509certdir);
3027
    qemuTestDriverFree(&driver);
A
Andrea Bolognani 已提交
3028
    VIR_FREE(fakerootdir);
3029
    virHashFree(capslatest);
3030

3031
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
3032 3033
}

3034
VIR_TEST_MAIN_PRELOAD(mymain,
A
Andrea Bolognani 已提交
3035 3036 3037 3038
                      abs_builddir "/.libs/qemuxml2argvmock.so",
                      abs_builddir "/.libs/virrandommock.so",
                      abs_builddir "/.libs/qemucpumock.so",
                      abs_builddir "/.libs/virpcimock.so")
3039

3040 3041
#else

3042 3043 3044 3045
int main(void)
{
    return EXIT_AM_SKIP;
}
3046 3047

#endif /* WITH_QEMU */