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_PARSE_ERROR("serial-unix-missing-source", NONE);
1421
    DO_TEST("serial-tcp-chardev",
1422
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1423
    DO_TEST("serial-udp-chardev",
1424
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1425
    DO_TEST("serial-tcp-telnet-chardev",
1426
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1427 1428
    driver.config->chardevTLS = 1;
    DO_TEST("serial-tcp-tlsx509-chardev",
1429
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1430
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1431 1432
    driver.config->chardevTLSx509verify = 1;
    DO_TEST("serial-tcp-tlsx509-chardev-verify",
1433
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1434 1435
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
    driver.config->chardevTLSx509verify = 0;
1436
    DO_TEST("serial-tcp-tlsx509-chardev-notls",
1437
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1438
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1439 1440 1441 1442 1443 1444 1445 1446
    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,
1447
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1448
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1449 1450
    driver.config->chardevTLS = 0;
    VIR_FREE(driver.config->chardevTLSx509certdir);
1451
    DO_TEST("serial-many-chardev",
1452 1453 1454
            QEMU_CAPS_DEVICE_ISA_SERIAL);
    DO_TEST("parallel-tcp-chardev", NONE);
    DO_TEST("parallel-parport-chardev", NONE);
1455
    DO_TEST("console-compat-chardev",
1456
            QEMU_CAPS_DEVICE_ISA_SERIAL);
M
Michal Privoznik 已提交
1457 1458
    DO_TEST("pci-serial-dev-chardev",
            QEMU_CAPS_DEVICE_PCI_SERIAL);
1459

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

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

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

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

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

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

1638
    DO_TEST("hostdev-usb-address", NONE);
1639
    DO_TEST("hostdev-usb-address-device", NONE);
1640
    DO_TEST("hostdev-usb-address-device-boot",
1641
            QEMU_CAPS_USB_HOST_BOOTINDEX);
J
Ján Tomko 已提交
1642
    DO_TEST("hostdev-pci-address", NONE);
1643
    DO_TEST("hostdev-pci-address-device", NONE);
1644 1645
    DO_TEST("hostdev-vfio",
            QEMU_CAPS_DEVICE_VFIO_PCI);
1646
    DO_TEST("hostdev-vfio-multidomain",
1647
            QEMU_CAPS_DEVICE_VFIO_PCI);
1648 1649 1650 1651 1652 1653
    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);
1654 1655 1656 1657 1658 1659 1660
    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);
1661
    DO_TEST("pci-rom", NONE);
1662
    DO_TEST("pci-rom-disabled", NONE);
1663
    DO_TEST("pci-rom-disabled-invalid", NONE);
1664

1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680
    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);

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

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

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

1694
    DO_TEST("smp", NONE);
1695

J
John Ferlan 已提交
1696
    DO_TEST("iothreads", QEMU_CAPS_OBJECT_IOTHREAD);
1697 1698
    DO_TEST("iothreads-ids", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-ids-partial", QEMU_CAPS_OBJECT_IOTHREAD);
1699
    DO_TEST_FAILURE("iothreads-nocap", NONE);
1700 1701
    DO_TEST("iothreads-disk", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-disk-virtio-ccw", QEMU_CAPS_OBJECT_IOTHREAD,
1702
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1703 1704 1705 1706 1707
    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,
1708
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
J
John Ferlan 已提交
1709

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1888 1889
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2477 2478 2479 2480
    DO_TEST_PARSE_ERROR("pci-bridge-negative-index-invalid", NONE);
    DO_TEST_PARSE_ERROR("pci-bridge-duplicate-index", NONE);
    DO_TEST_PARSE_ERROR("pci-root-nonzero-index", NONE);
    DO_TEST_PARSE_ERROR("pci-root-address", NONE);
2481

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

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

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

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

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

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

2661
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);
2662

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2951 2952 2953
    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,
2954
            QEMU_CAPS_DEVICE_ISA_SERIAL,
2955
            QEMU_CAPS_HDA_DUPLEX,
2956 2957
            QEMU_CAPS_CCID_EMULATED,
            QEMU_CAPS_QCOW2_LUKS, QEMU_CAPS_OBJECT_SECRET);
2958
    DO_TEST("user-aliases2", QEMU_CAPS_DEVICE_IOH3420, QEMU_CAPS_ICH9_AHCI);
2959 2960
    DO_TEST("user-aliases-usb", QEMU_CAPS_KVM,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4,
2961
            QEMU_CAPS_ICH9_USB_EHCI1);
2962

2963
    DO_TEST_CAPS_VER("disk-virtio-scsi-reservations", "2.12.0");
2964
    DO_TEST_CAPS_LATEST("disk-virtio-scsi-reservations");
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 2990
    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);

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

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

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

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

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

3016 3017 3018 3019 3020 3021 3022 3023
    /* 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 已提交
3024 3025 3026
    if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL)
        virFileDeleteTree(fakerootdir);

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

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

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

3041 3042
#else

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

#endif /* WITH_QEMU */