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

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

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

11 12
#include "testutils.h"

13 14
#ifdef WITH_QEMU

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

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

34
# include "testutilsqemu.h"
35

36 37
# define VIR_FROM_THIS VIR_FROM_QEMU

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

    if (!volinfo[1])
        goto fallback;

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

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

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

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

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

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

    return 0;
}


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

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

    return ret;
}


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

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

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

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

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

    return xmlbuf;
}

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

    return 1;
}

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

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

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

282 283 284 285

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

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

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

    return 0;
}


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

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

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

    ret = 0;

 cleanup:
    return ret;
}


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

380 381 382
    if (!caps)
        goto cleanup;

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

385 386
    virQEMUCapsInitQMPBasicArch(info->qemuCaps);

387 388 389 390 391
    /* We need to pretend QEMU 2.0.0 is in use so that pSeries guests
     * will get the correct alias assigned to their buses.
     * See virQEMUCapsHasPCIMultiBus() */
    virQEMUCapsSetVersion(info->qemuCaps, 2000000);

392 393 394
    if (testAddCPUModels(info->qemuCaps, info->skipLegacyCPUs) < 0)
        goto cleanup;

395 396 397 398
    virQEMUCapsInitHostCPUModel(info->qemuCaps, caps->host.arch,
                                VIR_DOMAIN_VIRT_KVM);
    virQEMUCapsInitHostCPUModel(info->qemuCaps, caps->host.arch,
                                VIR_DOMAIN_VIRT_QEMU);
399

400 401 402 403 404 405 406 407 408
    virQEMUCapsFilterByMachineType(info->qemuCaps, vm->def->os.machine);

    ret = 0;

 cleanup:
    return ret;
}


409 410
static int
testCompareXMLToArgv(const void *data)
411
{
412 413 414 415
    const struct testInfo *info = data;
    char *xml = NULL;
    char *args = NULL;
    char *migrateURI = NULL;
416
    char *actualargv = NULL;
417 418
    unsigned int flags = info->flags;
    unsigned int parseFlags = info->parseFlags;
E
Eric Blake 已提交
419
    int ret = -1;
420
    virDomainObjPtr vm = NULL;
421
    virDomainChrSourceDef monitor_chr;
422
    virConnectPtr conn;
J
Jiri Denemark 已提交
423
    char *log = NULL;
E
Eric Blake 已提交
424
    virCommandPtr cmd = NULL;
425
    size_t i;
426
    qemuDomainObjPrivatePtr priv = NULL;
427

428 429
    memset(&monitor_chr, 0, sizeof(monitor_chr));

430
    if (!(conn = virGetConnect()))
431
        goto cleanup;
432

433
    conn->secretDriver = &fakeSecretDriver;
434
    conn->storageDriver = &fakeStorageDriver;
435

436 437 438 439 440 441
    if (virQEMUCapsGet(info->qemuCaps, QEMU_CAPS_MONITOR_JSON))
        flags |= FLAG_JSON;

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

442
    if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0)
443 444 445 446 447 448 449 450 451 452 453 454 455
        goto cleanup;

    if (virAsprintf(&xml, "%s/qemuxml2argvdata/qemuxml2argv-%s.xml",
                    abs_srcdir, info->name) < 0 ||
        virAsprintf(&args, "%s/qemuxml2argvdata/qemuxml2argv-%s.args",
                    abs_srcdir, info->name) < 0)
        goto cleanup;

    if (info->migrateFrom &&
        !(migrateURI = qemuMigrationIncomingURI(info->migrateFrom,
                                                info->migrateFd)))
        goto cleanup;

456
    if (!(vm = virDomainObjNew(driver.xmlopt)))
457
        goto cleanup;
458

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

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

475
    if (!virDomainDefCheckABIStability(vm->def, vm->def, driver.xmlopt)) {
476
        VIR_TEST_DEBUG("ABI stability check failed on %s", xml);
477
        goto cleanup;
478 479
    }

480
    vm->def->id = -1;
481

482
    if (qemuProcessPrepareMonitorChr(&monitor_chr, priv->libDir) < 0)
483
        goto cleanup;
484

485
    if (testUpdateQEMUCaps(info, vm, driver.caps) < 0)
486
        goto cleanup;
487

488
    log = virTestLogContentAndReset();
489
    VIR_FREE(log);
490
    virResetLastError();
J
Jiri Denemark 已提交
491

492 493
    for (i = 0; i < vm->def->nhostdevs; i++) {
        virDomainHostdevDefPtr hostdev = vm->def->hostdevs[i];
494 495 496 497 498 499 500 501

        if (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS &&
            hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI &&
            hostdev->source.subsys.u.pci.backend == VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT) {
            hostdev->source.subsys.u.pci.backend = VIR_DOMAIN_HOSTDEV_PCI_BACKEND_KVM;
        }
    }

P
Pavel Hrdina 已提交
502 503 504
    if (!(cmd = qemuProcessCreatePretendCmd(conn, &driver, vm, migrateURI,
                                            (flags & FLAG_FIPS), false,
                                            VIR_QEMU_PROCESS_START_COLD))) {
P
Pavel Hrdina 已提交
505 506
        if (flags & FLAG_EXPECT_FAILURE)
            goto ok;
507
        goto cleanup;
J
Jiri Denemark 已提交
508
    }
509 510 511 512
    if (flags & FLAG_EXPECT_FAILURE) {
        VIR_TEST_DEBUG("passed instead of expected failure");
        goto cleanup;
    }
J
Jiri Denemark 已提交
513

E
Eric Blake 已提交
514
    if (!(actualargv = virCommandToString(cmd)))
515
        goto cleanup;
E
Eric Blake 已提交
516

517
    if (virTestCompareToFile(actualargv, args) < 0)
518
        goto cleanup;
519

P
Pavel Hrdina 已提交
520 521
    ret = 0;

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

537
 cleanup:
538 539
    VIR_FREE(log);
    VIR_FREE(actualargv);
540
    virDomainChrSourceDefClear(&monitor_chr);
E
Eric Blake 已提交
541
    virCommandFree(cmd);
542
    virObjectUnref(vm);
543
    virObjectUnref(conn);
544
    VIR_FREE(migrateURI);
545 546
    VIR_FREE(xml);
    VIR_FREE(args);
547
    return ret;
548 549
}

A
Andrea Bolognani 已提交
550
# define FAKEROOTDIRTEMPLATE abs_builddir "/fakerootdir-XXXXXX"
551

552
static int
E
Eric Blake 已提交
553
mymain(void)
554 555
{
    int ret = 0;
A
Andrea Bolognani 已提交
556
    char *fakerootdir;
557
    bool skipLegacyCPUs = false;
558

A
Andrea Bolognani 已提交
559 560 561 562 563 564 565 566 567 568 569 570
    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);

571 572
    abs_top_srcdir = getenv("abs_top_srcdir");
    if (!abs_top_srcdir)
573
        abs_top_srcdir = abs_srcdir "/..";
574

575 576 577 578 579 580 581 582 583 584
    /* 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;
    }

585
    if (qemuTestDriverInit(&driver) < 0)
586
        return EXIT_FAILURE;
587 588

    driver.privileged = true;
589

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

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

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

640
# define DO_TEST(name, ...) \
641
    DO_TEST_FULL(name, NULL, -1, 0, 0, GIC_NONE, __VA_ARGS__)
642

643
# define DO_TEST_GIC(name, gic, ...) \
644 645
    DO_TEST_FULL(name, NULL, -1, 0, 0, gic, __VA_ARGS__)

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

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

655 656 657
# define DO_TEST_PARSE_FLAGS_ERROR(name, parseFlags, ...) \
    DO_TEST_FULL(name, NULL, -1, \
                 FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE, \
658
                 parseFlags, GIC_NONE, __VA_ARGS__)
659

660
# define DO_TEST_LINUX(name, ...) \
661
    DO_TEST_LINUX_FULL(name, NULL, -1, 0, 0, GIC_NONE, __VA_ARGS__)
662

663 664 665 666 667 668
# ifdef __linux__
    /* This is a macro that invokes test only on Linux. It's
     * meant to be called in those cases where qemuxml2argvmock
     * cooperation is expected (e.g. we need a fixed time,
     * predictable NUMA topology and so on). On non-Linux
     * platforms the macro just consume its argument. */
669
#  define DO_TEST_LINUX_FULL(name, ...) \
670
    DO_TEST_FULL(name, __VA_ARGS__)
671
# else  /* __linux__ */
672 673 674
#  define DO_TEST_LINUX_FULL(name, ...) \
    do { \
        const char *tmp ATTRIBUTE_UNUSED = name; \
675 676 677
    } while (0)
# endif /* __linux__ */

678
# define NONE QEMU_CAPS_LAST
679

680 681 682
    /* 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 */
683 684 685 686 687 688 689
    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");
690 691
    unsetenv("QEMU_AUDIO_DRV");
    unsetenv("SDL_AUDIODRIVER");
692

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

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

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

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

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

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

824
    DO_TEST("hyperv", NONE);
825
    DO_TEST("hyperv-off", NONE);
826
    DO_TEST("hyperv-panic", NONE);
827

828 829 830
    DO_TEST("kvm-features", NONE);
    DO_TEST("kvm-features-off", NONE);

831 832 833
    DO_TEST("pmu-feature", NONE);
    DO_TEST("pmu-feature-off", NONE);

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

1072 1073 1074 1075 1076 1077 1078 1079 1080 1081
    DO_TEST("graphics-vnc", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("graphics-vnc-socket", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("graphics-vnc-websocket", QEMU_CAPS_VNC, QEMU_CAPS_VNC_WEBSOCKET,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("graphics-vnc-policy", QEMU_CAPS_VNC, QEMU_CAPS_VNC_SHARE_POLICY,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("graphics-vnc-no-listen-attr", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("graphics-vnc-remove-generated-socket", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1082
    driver.config->vncAutoUnixSocket = true;
1083 1084
    DO_TEST("graphics-vnc-auto-socket-cfg", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1085
    driver.config->vncAutoUnixSocket = false;
1086 1087 1088 1089
    DO_TEST("graphics-vnc-socket", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("graphics-vnc-auto-socket", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("graphics-vnc-none", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1090 1091
    DO_TEST("graphics-vnc-socket-new-cmdline", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA, QEMU_CAPS_VNC_MULTI_SERVERS);
1092

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

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

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

1231

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

1243 1244
    DO_TEST("console-compat", NONE);
    DO_TEST("console-compat-auto", NONE);
1245 1246

    DO_TEST("serial-vc-chardev",
1247
            QEMU_CAPS_NODEFCONFIG);
1248
    DO_TEST("serial-pty-chardev",
1249
            QEMU_CAPS_NODEFCONFIG);
1250
    DO_TEST("serial-dev-chardev",
1251
            QEMU_CAPS_NODEFCONFIG);
1252
    DO_TEST("serial-dev-chardev-iobase",
1253
            QEMU_CAPS_NODEFCONFIG);
1254
    DO_TEST("serial-file-chardev",
1255
            QEMU_CAPS_NODEFCONFIG,
1256
            QEMU_CAPS_CHARDEV_FILE_APPEND);
1257
    DO_TEST("serial-unix-chardev",
1258
            QEMU_CAPS_NODEFCONFIG);
1259
    DO_TEST("serial-tcp-chardev",
1260
            QEMU_CAPS_NODEFCONFIG);
1261
    DO_TEST("serial-udp-chardev",
1262
            QEMU_CAPS_NODEFCONFIG);
1263
    DO_TEST("serial-tcp-telnet-chardev",
1264
            QEMU_CAPS_NODEFCONFIG);
1265 1266
    driver.config->chardevTLS = 1;
    DO_TEST("serial-tcp-tlsx509-chardev",
1267
            QEMU_CAPS_NODEFCONFIG,
1268
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1269 1270
    driver.config->chardevTLSx509verify = 1;
    DO_TEST("serial-tcp-tlsx509-chardev-verify",
1271
            QEMU_CAPS_NODEFCONFIG,
1272 1273
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
    driver.config->chardevTLSx509verify = 0;
1274
    DO_TEST("serial-tcp-tlsx509-chardev-notls",
1275
            QEMU_CAPS_NODEFCONFIG,
1276
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1277 1278 1279 1280 1281 1282 1283 1284
    VIR_FREE(driver.config->chardevTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->chardevTLSx509certdir, "/etc/pki/libvirt-chardev") < 0)
        return EXIT_FAILURE;
    if (VIR_STRDUP_QUIET(driver.config->chardevTLSx509secretUUID,
                         "6fd3f62d-9fe7-4a4e-a869-7acd6376d8ea") < 0)
        return EXIT_FAILURE;
# ifdef HAVE_GNUTLS_CIPHER_ENCRYPT
    DO_TEST("serial-tcp-tlsx509-secret-chardev",
1285
            QEMU_CAPS_NODEFCONFIG,
1286 1287 1288 1289
            QEMU_CAPS_OBJECT_SECRET,
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
# else
    DO_TEST_FAILURE("serial-tcp-tlsx509-secret-chardev",
1290
                    QEMU_CAPS_NODEFCONFIG,
1291 1292 1293
                    QEMU_CAPS_OBJECT_SECRET,
                    QEMU_CAPS_OBJECT_TLS_CREDS_X509);
# endif
1294 1295
    driver.config->chardevTLS = 0;
    VIR_FREE(driver.config->chardevTLSx509certdir);
1296
    DO_TEST("serial-many-chardev",
1297
            QEMU_CAPS_NODEFCONFIG);
1298
    DO_TEST("parallel-tcp-chardev",
1299
            QEMU_CAPS_NODEFCONFIG);
1300
    DO_TEST("parallel-parport-chardev",
1301
            QEMU_CAPS_NODEFCONFIG);
1302
    DO_TEST("console-compat-chardev",
1303
            QEMU_CAPS_NODEFCONFIG);
M
Michal Privoznik 已提交
1304
    DO_TEST("pci-serial-dev-chardev",
1305
            QEMU_CAPS_NODEFCONFIG,
M
Michal Privoznik 已提交
1306
            QEMU_CAPS_DEVICE_PCI_SERIAL);
1307

1308
    DO_TEST("channel-guestfwd",
1309
            QEMU_CAPS_NODEFCONFIG);
1310
    DO_TEST("channel-virtio",
1311
            QEMU_CAPS_NODEFCONFIG);
1312
    DO_TEST("channel-virtio-state",
1313
            QEMU_CAPS_NODEFCONFIG);
1314
    DO_TEST("channel-virtio-auto",
1315
            QEMU_CAPS_NODEFCONFIG);
1316
    DO_TEST("channel-virtio-autoassign",
1317
            QEMU_CAPS_NODEFCONFIG);
J
Ján Tomko 已提交
1318
    DO_TEST("channel-virtio-autoadd",
1319
            QEMU_CAPS_NODEFCONFIG);
1320
    DO_TEST("console-virtio",
1321
            QEMU_CAPS_NODEFCONFIG);
1322
    DO_TEST("console-virtio-many",
1323
            QEMU_CAPS_NODEFCONFIG);
1324
    DO_TEST("console-virtio-s390",
1325 1326 1327
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_VIRTIO_S390);
1328
    DO_TEST("console-virtio-ccw",
1329 1330 1331
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_VIRTIO_CCW,
1332
            QEMU_CAPS_VIRTIO_S390);
1333
    DO_TEST("console-sclp",
1334 1335
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_VIRTIO_S390,
1336
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
1337
    DO_TEST("channel-spicevmc",
1338
            QEMU_CAPS_NODEFCONFIG,
1339 1340
            QEMU_CAPS_SPICE,
            QEMU_CAPS_CHARDEV_SPICEVMC,
1341
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1342
    DO_TEST("channel-spicevmc-old",
1343
            QEMU_CAPS_NODEFCONFIG,
1344 1345
            QEMU_CAPS_SPICE,
            QEMU_CAPS_DEVICE_SPICEVMC,
1346
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1347
    DO_TEST("channel-virtio-default",
1348 1349 1350
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_SPICE,
            QEMU_CAPS_CHARDEV_SPICEVMC);
1351
    DO_TEST("channel-virtio-unix",
1352
            QEMU_CAPS_NODEFCONFIG);
1353

1354
    DO_TEST("smartcard-host",
1355 1356
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_CCID_EMULATED);
1357
    DO_TEST("smartcard-host-certificates",
1358 1359
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_CCID_EMULATED);
1360
    DO_TEST("smartcard-passthrough-tcp",
1361 1362
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_CCID_PASSTHRU);
1363
    DO_TEST("smartcard-passthrough-spicevmc",
1364 1365 1366
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_CCID_PASSTHRU,
            QEMU_CAPS_CHARDEV_SPICEVMC);
1367
    DO_TEST("smartcard-controller",
1368 1369
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_CCID_EMULATED);
1370

1371 1372 1373 1374 1375 1376 1377 1378 1379 1380
    DO_TEST("chardev-reconnect",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_CHARDEV_RECONNECT,
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD,
            QEMU_CAPS_CCID_PASSTHRU);
    DO_TEST_PARSE_ERROR("chardev-reconnect-invalid-timeout",
                        QEMU_CAPS_NODEFCONFIG,
                        QEMU_CAPS_CHARDEV_RECONNECT);
1381 1382 1383
    DO_TEST_PARSE_ERROR("chardev-reconnect-generated-path",
                        QEMU_CAPS_NODEFCONFIG,
                        QEMU_CAPS_CHARDEV_RECONNECT);
1384

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

1527
    DO_TEST("smbios", QEMU_CAPS_SMBIOS_TYPE);
1528
    DO_TEST_PARSE_ERROR("smbios-date", QEMU_CAPS_SMBIOS_TYPE);
1529
    DO_TEST_PARSE_ERROR("smbios-uuid-match", QEMU_CAPS_SMBIOS_TYPE);
1530

1531
    DO_TEST("watchdog", NONE);
1532
    DO_TEST("watchdog-device", QEMU_CAPS_NODEFCONFIG);
1533
    DO_TEST("watchdog-dump", NONE);
1534
    DO_TEST("watchdog-injectnmi", NONE);
1535
    DO_TEST("watchdog-diag288",
1536
            QEMU_CAPS_NODEFCONFIG,
1537
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390);
1538 1539
    DO_TEST("balloon-device", QEMU_CAPS_NODEFCONFIG);
    DO_TEST("balloon-device-deflate", QEMU_CAPS_NODEFCONFIG,
1540
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1541
    DO_TEST("balloon-ccw-deflate", QEMU_CAPS_NODEFCONFIG,
1542
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1543
    DO_TEST("balloon-mmio-deflate", QEMU_CAPS_NODEFCONFIG,
1544 1545
            QEMU_CAPS_DTB, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1546
    DO_TEST("balloon-device-deflate-off", QEMU_CAPS_NODEFCONFIG,
1547
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1548
    DO_TEST("balloon-device-auto",
1549 1550
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("balloon-device-period", QEMU_CAPS_NODEFCONFIG);
1551 1552
    DO_TEST("sound", NONE);
    DO_TEST("sound-device",
1553
            QEMU_CAPS_NODEFCONFIG,
1554
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_HDA_MICRO,
1555 1556
            QEMU_CAPS_DEVICE_ICH9_INTEL_HDA,
            QEMU_CAPS_OBJECT_USB_AUDIO);
1557
    DO_TEST("fs9p",
1558
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_FSDEV,
1559
            QEMU_CAPS_FSDEV_WRITEOUT);
1560
    DO_TEST("fs9p-ccw",
1561
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_FSDEV,
1562
            QEMU_CAPS_FSDEV_WRITEOUT,
1563
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1564

1565 1566
    DO_TEST("hostdev-usb-address", NONE);
    DO_TEST("hostdev-usb-address-device",
1567 1568
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST("hostdev-usb-address-device-boot",
1569 1570
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_USB_HOST_BOOTINDEX);
J
Ján Tomko 已提交
1571
    DO_TEST("hostdev-pci-address", NONE);
1572
    DO_TEST("hostdev-pci-address-device",
J
Ján Tomko 已提交
1573
            QEMU_CAPS_NODEFCONFIG);
1574
    DO_TEST("hostdev-vfio",
J
Ján Tomko 已提交
1575
            QEMU_CAPS_NODEFCONFIG,
1576
            QEMU_CAPS_DEVICE_VFIO_PCI);
1577
    DO_TEST("hostdev-vfio-multidomain",
J
Ján Tomko 已提交
1578
            QEMU_CAPS_NODEFCONFIG,
1579
            QEMU_CAPS_DEVICE_VFIO_PCI, QEMU_CAPS_HOST_PCI_MULTIDOMAIN);
1580 1581 1582 1583 1584 1585 1586 1587 1588
    DO_TEST("hostdev-mdev-precreated",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST_PARSE_ERROR("hostdev-mdev-src-address-invalid",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST_PARSE_ERROR("hostdev-mdev-invalid-target-address",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_VFIO_PCI);
1589 1590
    DO_TEST_FAILURE("hostdev-vfio-multidomain",
                    QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VFIO_PCI);
1591
    DO_TEST("pci-rom",
J
Ján Tomko 已提交
1592
            QEMU_CAPS_NODEFCONFIG);
1593

1594 1595 1596 1597
    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);
1598

1599
    DO_TEST_LINUX_FULL("migrate-numa-unaligned", "stdio", 7, 0, 0, GIC_NONE,
1600
                       QEMU_CAPS_NUMA,
1601 1602
                       QEMU_CAPS_OBJECT_MEMORY_RAM);

1603
    DO_TEST("qemu-ns", NONE);
1604
    DO_TEST("qemu-ns-no-env", NONE);
1605
    DO_TEST("qemu-ns-alt", NONE);
1606

1607
    DO_TEST("smp", NONE);
1608

J
John Ferlan 已提交
1609
    DO_TEST("iothreads", QEMU_CAPS_OBJECT_IOTHREAD);
1610 1611
    DO_TEST("iothreads-ids", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-ids-partial", QEMU_CAPS_OBJECT_IOTHREAD);
1612
    DO_TEST_FAILURE("iothreads-nocap", NONE);
1613 1614
    DO_TEST("iothreads-disk", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-disk-virtio-ccw", QEMU_CAPS_OBJECT_IOTHREAD,
1615
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1616 1617 1618 1619 1620 1621
    DO_TEST("iothreads-virtio-scsi-pci", QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_OBJECT_IOTHREAD,
            QEMU_CAPS_VIRTIO_SCSI_IOTHREAD);
    DO_TEST("iothreads-virtio-scsi-ccw", QEMU_CAPS_OBJECT_IOTHREAD,
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI_IOTHREAD,
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
J
John Ferlan 已提交
1622

1623 1624
    DO_TEST("cpu-topology1", NONE);
    DO_TEST("cpu-topology2", NONE);
1625
    DO_TEST("cpu-topology3", NONE);
1626 1627 1628 1629 1630 1631 1632 1633
    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);
1634
    DO_TEST("cpu-numa1", NONE);
1635 1636
    DO_TEST("cpu-numa2", NONE);
    DO_TEST("cpu-numa-no-memory-element", NONE);
1637
    DO_TEST_PARSE_ERROR("cpu-numa3", NONE);
1638 1639
    DO_TEST_FAILURE("cpu-numa-disjoint", NONE);
    DO_TEST("cpu-numa-disjoint", QEMU_CAPS_NUMA);
1640 1641
    DO_TEST_FAILURE("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_RAM);
    DO_TEST_FAILURE("cpu-numa-memshared", NONE);
1642
    DO_TEST("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_FILE);
1643
    DO_TEST("cpu-host-model", NONE);
1644
    DO_TEST("cpu-host-model-vendor", NONE);
1645
    skipLegacyCPUs = true;
1646
    DO_TEST("cpu-host-model-fallback", NONE);
1647
    DO_TEST_FAILURE("cpu-host-model-nofallback", NONE);
1648
    skipLegacyCPUs = false;
A
Andrea Bolognani 已提交
1649
    DO_TEST("cpu-host-passthrough", QEMU_CAPS_KVM);
1650
    DO_TEST_FAILURE("cpu-host-passthrough", NONE);
A
Andrea Bolognani 已提交
1651
    DO_TEST_FAILURE("cpu-qemu-host-passthrough", QEMU_CAPS_KVM);
1652

1653 1654
    qemuTestSetHostArch(driver.caps, VIR_ARCH_S390X);
    DO_TEST("cpu-s390-zEC12", QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1655 1656
    DO_TEST("cpu-s390-features", QEMU_CAPS_KVM, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION);
    DO_TEST_FAILURE("cpu-s390-features", QEMU_CAPS_KVM);
1657 1658
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);

1659
    qemuTestSetHostCPU(driver.caps, cpuHaswell);
1660 1661 1662 1663
    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);
1664
    DO_TEST("cpu-host-model-cmt", NONE);
1665
    DO_TEST("cpu-tsc-frequency", QEMU_CAPS_KVM);
1666
    qemuTestSetHostCPU(driver.caps, NULL);
1667

1668
    DO_TEST("encrypted-disk", NONE);
J
John Ferlan 已提交
1669
    DO_TEST("encrypted-disk-usage", NONE);
1670
# ifdef HAVE_GNUTLS_CIPHER_ENCRYPT
1671
    DO_TEST("luks-disks", QEMU_CAPS_OBJECT_SECRET);
1672
    DO_TEST("luks-disks-source", QEMU_CAPS_OBJECT_SECRET);
1673 1674 1675
# else
    DO_TEST_FAILURE("luks-disks", QEMU_CAPS_OBJECT_SECRET);
# endif
1676
    DO_TEST_PARSE_ERROR("luks-disk-invalid", NONE);
1677
    DO_TEST_PARSE_ERROR("luks-disks-source-both", QEMU_CAPS_OBJECT_SECRET);
1678

1679 1680 1681 1682 1683 1684 1685 1686
    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);
1687
    DO_TEST("cputune-numatune",
1688
            QEMU_CAPS_KVM,
1689
            QEMU_CAPS_OBJECT_IOTHREAD,
1690 1691
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1692 1693 1694
    DO_TEST("vcpu-placement-static",
            QEMU_CAPS_KVM,
            QEMU_CAPS_OBJECT_IOTHREAD);
1695

1696
    DO_TEST("numatune-memory", NONE);
1697
    DO_TEST_PARSE_ERROR("numatune-memory-invalid-nodeset", NONE);
1698 1699
    DO_TEST_LINUX("numatune-memnode", QEMU_CAPS_NUMA,
                  QEMU_CAPS_OBJECT_MEMORY_RAM);
1700 1701
    DO_TEST_FAILURE("numatune-memnode", NONE);

1702 1703
    DO_TEST_LINUX("numatune-memnode-no-memory", QEMU_CAPS_NUMA,
                  QEMU_CAPS_OBJECT_MEMORY_RAM);
1704 1705
    DO_TEST_FAILURE("numatune-memnode-no-memory", NONE);

1706 1707
    DO_TEST("numatune-distances", QEMU_CAPS_NUMA, QEMU_CAPS_NUMA_DIST);

1708
    DO_TEST("numatune-auto-nodeset-invalid", NONE);
1709 1710
    DO_TEST("numatune-auto-prefer", QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1711 1712
    DO_TEST_FAILURE("numatune-static-nodeset-exceed-hostnode",
                    QEMU_CAPS_OBJECT_MEMORY_RAM);
1713 1714
    DO_TEST_PARSE_ERROR("numatune-memnode-nocpu", NONE);
    DO_TEST_PARSE_ERROR("numatune-memnodes-problematic", NONE);
1715 1716
    DO_TEST("numad", NONE);
    DO_TEST("numad-auto-vcpu-static-numatune", NONE);
1717
    DO_TEST_PARSE_ERROR("numad-auto-vcpu-static-numatune-no-nodeset", NONE);
1718 1719 1720
    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);
1721
    DO_TEST("blkdeviotune",
1722
            QEMU_CAPS_DRIVE_IOTUNE);
1723
    DO_TEST("blkdeviotune-max",
1724
            QEMU_CAPS_DRIVE_IOTUNE,
1725
            QEMU_CAPS_DRIVE_IOTUNE_MAX);
1726 1727 1728 1729
    DO_TEST("blkdeviotune-group-num",
            QEMU_CAPS_DRIVE_IOTUNE,
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_GROUP);
1730 1731 1732 1733
    DO_TEST("blkdeviotune-max-length",
            QEMU_CAPS_DRIVE_IOTUNE,
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_MAX_LENGTH);
1734

1735
    DO_TEST("multifunction-pci-device",
1736
            QEMU_CAPS_NODEFCONFIG,
1737
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_SCSI_LSI);
1738

1739
    DO_TEST("monitor-json",
1740 1741
            QEMU_CAPS_MONITOR_JSON,
            QEMU_CAPS_NODEFCONFIG);
1742
    DO_TEST("no-shutdown",
1743 1744
            QEMU_CAPS_MONITOR_JSON,
            QEMU_CAPS_NODEFCONFIG,
1745
            QEMU_CAPS_NO_SHUTDOWN);
1746

1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758
    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);
1759

1760
    DO_TEST("pseries-basic",
1761
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1762
            QEMU_CAPS_NODEFCONFIG);
1763
    DO_TEST("pseries-vio",
1764
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1765
            QEMU_CAPS_NODEFCONFIG);
1766
    DO_TEST("pseries-usb-default",
1767
            QEMU_CAPS_NODEFCONFIG,
1768
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1769 1770 1771
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION);
1772
    DO_TEST("pseries-usb-multi",
1773
            QEMU_CAPS_NODEFCONFIG,
1774
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1775 1776 1777
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION);
1778
    DO_TEST("pseries-vio-user-assigned",
1779
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1780
            QEMU_CAPS_NODEFCONFIG);
1781
    DO_TEST_PARSE_ERROR("pseries-vio-address-clash",
1782
            QEMU_CAPS_NODEFCONFIG);
1783
    DO_TEST("pseries-nvram", QEMU_CAPS_DEVICE_NVRAM);
1784
    DO_TEST("pseries-usb-kbd", QEMU_CAPS_PCI_OHCI,
1785
            QEMU_CAPS_DEVICE_USB_KBD,
1786
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1787
            QEMU_CAPS_NODEFCONFIG);
1788
    DO_TEST("pseries-cpu-exact",
1789
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1790
            QEMU_CAPS_NODEFCONFIG);
1791 1792
    DO_TEST_PARSE_ERROR("pseries-no-parallel",
            QEMU_CAPS_NODEFCONFIG);
1793 1794

    qemuTestSetHostArch(driver.caps, VIR_ARCH_PPC64);
A
Andrea Bolognani 已提交
1795
    DO_TEST("pseries-cpu-compat", QEMU_CAPS_KVM,
1796
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1797
            QEMU_CAPS_NODEFCONFIG);
A
Andrea Bolognani 已提交
1798
    DO_TEST("pseries-cpu-le", QEMU_CAPS_KVM,
1799
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1800
            QEMU_CAPS_NODEFCONFIG);
1801 1802 1803 1804
    DO_TEST_FAILURE("pseries-cpu-compat-power9", QEMU_CAPS_KVM);

    qemuTestSetHostCPU(driver.caps, cpuPower9);
    DO_TEST("pseries-cpu-compat-power9",
1805
            QEMU_CAPS_KVM,
1806
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1807
            QEMU_CAPS_NODEFCONFIG);
1808 1809
    qemuTestSetHostCPU(driver.caps, NULL);

1810 1811
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);

1812
    DO_TEST("pseries-panic-missing",
1813
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1814
            QEMU_CAPS_NODEFCONFIG);
1815
    DO_TEST("pseries-panic-no-address",
1816
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1817
            QEMU_CAPS_NODEFCONFIG);
1818
    DO_TEST_FAILURE("pseries-panic-address",
1819
                    QEMU_CAPS_NODEFCONFIG);
1820 1821 1822 1823 1824 1825 1826

    DO_TEST("pseries-phb-simple",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
    DO_TEST("pseries-phb-default-missing",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
1827 1828 1829 1830 1831 1832
    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);
1833 1834 1835
    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);
1836

1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867
    DO_TEST("pseries-many-devices",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST("pseries-many-buses-1",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST("pseries-many-buses-2",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST("pseries-hostdevs-1",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_HOST_PCI_MULTIDOMAIN,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST("pseries-hostdevs-2",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_HOST_PCI_MULTIDOMAIN,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST("pseries-hostdevs-3",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_HOST_PCI_MULTIDOMAIN,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VFIO_PCI);

1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879
    DO_TEST("pseries-hpt-resizing",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);
    DO_TEST_FAILURE("pseries-hpt-resizing",
                    QEMU_CAPS_NODEFCONFIG,
                    QEMU_CAPS_MACHINE_OPT);
    DO_TEST_PARSE_ERROR("pseries-hpt-resizing-invalid-machine",
                        QEMU_CAPS_NODEFCONFIG,
                        QEMU_CAPS_MACHINE_OPT,
                        QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);

1880 1881 1882 1883 1884 1885 1886 1887 1888
    DO_TEST("pseries-serial-native",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial+console-native",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial-compat",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1889 1890 1891 1892 1893 1894 1895
    DO_TEST("pseries-serial-pci",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_PCI_SERIAL);
    DO_TEST("pseries-serial-usb",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_QEMU_XHCI,
            QEMU_CAPS_DEVICE_USB_SERIAL);
1896 1897 1898 1899 1900 1901 1902
    DO_TEST("pseries-console-native",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-console-virtio",
            QEMU_CAPS_NODEFCONFIG);
    DO_TEST_PARSE_ERROR("pseries-serial-invalid-machine", NONE);

1903
    DO_TEST("disk-ide-drive-split",
1904
            QEMU_CAPS_NODEFCONFIG,
1905
            QEMU_CAPS_IDE_CD);
1906
    DO_TEST("disk-ide-wwn",
1907
            QEMU_CAPS_IDE_CD,
1908
            QEMU_CAPS_DRIVE_SERIAL, QEMU_CAPS_IDE_DRIVE_WWN);
1909

1910
    DO_TEST("disk-geometry", NONE);
V
Viktor Mihajlovski 已提交
1911
    DO_TEST("disk-blockio",
1912
            QEMU_CAPS_NODEFCONFIG,
V
Viktor Mihajlovski 已提交
1913
            QEMU_CAPS_IDE_CD, QEMU_CAPS_BLOCKIO);
1914

1915
    DO_TEST("video-device-pciaddr-default",
1916 1917
            QEMU_CAPS_KVM,
            QEMU_CAPS_VNC,
1918
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1919
            QEMU_CAPS_DEVICE_QXL);
1920
    DO_TEST("video-vga-nodevice", QEMU_CAPS_DEVICE_VGA);
1921
    DO_TEST("video-vga-device", QEMU_CAPS_DEVICE_VGA,
1922
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1923
    DO_TEST("video-vga-device-vgamem", QEMU_CAPS_DEVICE_VGA,
1924
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_VGA_VGAMEM);
1925
    DO_TEST("video-qxl-nodevice", QEMU_CAPS_DEVICE_QXL);
1926
    DO_TEST("video-qxl-device",
1927
            QEMU_CAPS_DEVICE_QXL,
1928
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1929
    DO_TEST("video-qxl-device-vgamem",
1930
            QEMU_CAPS_DEVICE_QXL,
1931
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1932 1933
            QEMU_CAPS_QXL_VGAMEM);
    DO_TEST("video-qxl-sec-device",
1934
            QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1935
    DO_TEST("video-qxl-sec-device-vgamem",
1936 1937
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1938
            QEMU_CAPS_QXL_VGAMEM);
1939 1940 1941
    DO_TEST("video-qxl-heads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
1942
            QEMU_CAPS_QXL_MAX_OUTPUTS);
1943 1944 1945
    DO_TEST("video-vga-qxl-heads",
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_QXL_MAX_OUTPUTS);
1946 1947 1948
    DO_TEST("video-qxl-noheads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
1949
            QEMU_CAPS_QXL_MAX_OUTPUTS);
M
Marc-André Lureau 已提交
1950
    DO_TEST("video-virtio-gpu-device",
1951
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
M
Marc-André Lureau 已提交
1952
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1953
    DO_TEST("video-virtio-gpu-virgl",
1954
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
1955
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
1956
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1957 1958
    DO_TEST("video-virtio-gpu-spice-gl",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
1959
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
1960 1961
            QEMU_CAPS_SPICE,
            QEMU_CAPS_SPICE_GL,
1962
            QEMU_CAPS_SPICE_RENDERNODE,
1963
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1964 1965 1966
    DO_TEST("video-virtio-gpu-secondary",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1967 1968 1969
    DO_TEST("video-virtio-vga",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIRTIO_VGA,
1970 1971
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_GPU_MAX_OUTPUTS);
1972
    DO_TEST_PARSE_ERROR("video-invalid", NONE);
1973

1974 1975
    DO_TEST("virtio-rng-default",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
1976
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1977 1978
    DO_TEST("virtio-rng-random",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
1979
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1980 1981
    DO_TEST("virtio-rng-egd",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
1982
            QEMU_CAPS_OBJECT_RNG_EGD);
1983 1984 1985 1986
    DO_TEST("virtio-rng-multiple",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1987
    DO_TEST_PARSE_ERROR("virtio-rng-egd-crash",
1988 1989
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD);
1990
    DO_TEST("virtio-rng-ccw",
1991 1992 1993 1994 1995
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
1996
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1997

1998
    DO_TEST("s390-allow-bogus-usb-none",
1999 2000 2001 2002 2003
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2004
    DO_TEST("s390-allow-bogus-usb-controller",
2005 2006 2007 2008 2009
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
2010

2011
    DO_TEST("s390-panic-no-address",
2012 2013 2014
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390);
2015
    DO_TEST_FAILURE("s390-panic-address",
2016 2017 2018
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390);
2019
    DO_TEST("s390-panic-missing",
2020 2021 2022
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390);
2023 2024 2025 2026
    DO_TEST_PARSE_ERROR("s390-no-parallel",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390);
2027

2028 2029 2030 2031 2032
    DO_TEST("ppc-dtb",
            QEMU_CAPS_KVM,
            QEMU_CAPS_DTB);
    DO_TEST("ppce500-serial",
            QEMU_CAPS_KVM);
O
Olivia Yin 已提交
2033

2034
    DO_TEST("tpm-passthrough",
2035
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
2036
    DO_TEST_PARSE_ERROR("tpm-no-backend-invalid",
2037
                        QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
2038

2039

2040 2041 2042 2043
    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);
2044

2045 2046 2047 2048 2049 2050
    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,
2051
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
2052 2053
    DO_TEST("pci-autoadd-idx",
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2054 2055
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("pci-autofill-addr", QEMU_CAPS_DEVICE_CIRRUS_VGA);
2056
    DO_TEST("pci-many",
2057
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
2058
    DO_TEST("pci-bridge-many-disks",
2059
            QEMU_CAPS_DEVICE_PCI_BRIDGE);
L
Laine Stump 已提交
2060
    DO_TEST("pcie-root",
2061 2062 2063 2064
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL);
2065
    DO_TEST("q35",
2066
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2067
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2068
            QEMU_CAPS_DEVICE_IOH3420,
2069
            QEMU_CAPS_ICH9_AHCI,
2070 2071
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
2072
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2073
            QEMU_CAPS_DEVICE_QXL);
2074 2075 2076 2077 2078 2079 2080 2081
    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);
2082
    DO_TEST("q35-pm-disable",
2083
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2084
            QEMU_CAPS_DEVICE_IOH3420,
2085 2086 2087 2088
            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",
2089
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2090
            QEMU_CAPS_DEVICE_IOH3420,
2091 2092
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4);
2093
    DO_TEST("q35-usb2",
2094
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2095
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2096
            QEMU_CAPS_DEVICE_IOH3420,
2097
            QEMU_CAPS_ICH9_AHCI,
2098 2099
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
2100
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2101
            QEMU_CAPS_DEVICE_QXL);
2102
    DO_TEST("q35-usb2-multi",
2103
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2104
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2105
            QEMU_CAPS_DEVICE_IOH3420,
2106
            QEMU_CAPS_ICH9_AHCI,
2107 2108
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
2109
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2110
            QEMU_CAPS_DEVICE_QXL);
2111
    DO_TEST("q35-usb2-reorder",
2112
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2113
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2114
            QEMU_CAPS_DEVICE_IOH3420,
2115
            QEMU_CAPS_ICH9_AHCI,
2116 2117
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
2118
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2119
            QEMU_CAPS_DEVICE_QXL);
2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141
    /* verify that devices with pcie capability are assigned to a pcie slot */
    DO_TEST("q35-pcie",
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_NETDEV,
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_FSDEV,
            QEMU_CAPS_FSDEV_WRITEOUT,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
2142
            QEMU_CAPS_NEC_USB_XHCI,
2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
    /* same XML as q35-pcie, but don't set
     * QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY, so virtio devices should
     * be assigned to legacy pci slots
     */
    DO_TEST("q35-virtio-pci",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_NETDEV,
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_FSDEV,
            QEMU_CAPS_FSDEV_WRITEOUT,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
    /* same as q35-pcie, but all PCI controllers are added automatically */
    DO_TEST("q35-pcie-autoadd",
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_NETDEV,
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_FSDEV,
            QEMU_CAPS_FSDEV_WRITEOUT,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
    DO_TEST("q35-default-devices-only",
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_NETDEV,
2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_FSDEV,
            QEMU_CAPS_FSDEV_WRITEOUT,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
    DO_TEST("q35-multifunction",
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_NETDEV,
2222 2223 2224 2225 2226
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_FSDEV,
            QEMU_CAPS_FSDEV_WRITEOUT,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
2238
            QEMU_CAPS_NEC_USB_XHCI,
2239
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272
    DO_TEST("q35-virt-manager-basic",
            QEMU_CAPS_KVM,
            QEMU_CAPS_RTC,
            QEMU_CAPS_ICH9_DISABLE_S3,
            QEMU_CAPS_ICH9_DISABLE_S4,
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_NETDEV,
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_FSDEV,
            QEMU_CAPS_FSDEV_WRITEOUT,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_DEVICE_ICH9_INTEL_HDA,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_SPICE,
            QEMU_CAPS_CHARDEV_SPICEVMC,
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_HDA_DUPLEX,
            QEMU_CAPS_USB_REDIR);
2273 2274

    /* Test automatic and manual setting of pcie-root-port attributes */
2275 2276
    DO_TEST("pcie-root-port",
            QEMU_CAPS_DEVICE_IOH3420,
2277
            QEMU_CAPS_ICH9_AHCI,
2278
            QEMU_CAPS_PCI_MULTIFUNCTION,
2279
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2280
            QEMU_CAPS_DEVICE_QXL);
2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292

    /* Make sure the default model for PCIe Root Ports is picked correctly
     * based on QEMU binary capabilities. We use x86/q35 for the test, but
     * any PCIe machine type (such as aarch64/virt) will behave the same */
    DO_TEST("pcie-root-port-model-generic",
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_PCI_MULTIFUNCTION);
    DO_TEST("pcie-root-port-model-ioh3420",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_PCI_MULTIFUNCTION);

2293 2294 2295 2296 2297 2298 2299
    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,
2300 2301
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
2302
            QEMU_CAPS_NEC_USB_XHCI);
2303 2304 2305 2306 2307 2308 2309
    /* 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);
2310

2311
    DO_TEST_PARSE_ERROR("q35-wrong-root",
2312
            QEMU_CAPS_DEVICE_IOH3420,
2313 2314 2315
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2316
            QEMU_CAPS_DEVICE_QXL);
2317
    DO_TEST_PARSE_ERROR("440fx-wrong-root", NONE);
2318
    DO_TEST_PARSE_ERROR("440fx-ide-address-conflict", NONE);
2319

2320
    DO_TEST_PARSE_ERROR("pcie-root-port-too-many",
2321
            QEMU_CAPS_DEVICE_IOH3420,
2322
            QEMU_CAPS_ICH9_AHCI,
2323
            QEMU_CAPS_PCI_MULTIFUNCTION,
2324
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2325
            QEMU_CAPS_DEVICE_QXL);
2326

2327 2328 2329
    DO_TEST("pcie-switch-upstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
2330
            QEMU_CAPS_ICH9_AHCI,
2331
            QEMU_CAPS_PCI_MULTIFUNCTION,
2332
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2333
            QEMU_CAPS_DEVICE_QXL);
2334 2335 2336 2337
    DO_TEST("pcie-switch-downstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
2338
            QEMU_CAPS_ICH9_AHCI,
2339
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2340
            QEMU_CAPS_DEVICE_QXL);
2341

2342 2343 2344 2345 2346 2347
    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);
2348 2349
    DO_TEST_PARSE_ERROR("pci-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_PXB);
2350

2351 2352 2353 2354 2355 2356 2357 2358 2359 2360
    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);
2361 2362 2363
    DO_TEST_PARSE_ERROR("pcie-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_IOH3420,
                        QEMU_CAPS_DEVICE_PXB_PCIE);
2364

2365
    DO_TEST("hostdev-scsi-lsi",
2366 2367
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2368
    DO_TEST("hostdev-scsi-virtio-scsi",
2369 2370
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2371
    DO_TEST("hostdev-scsi-readonly",
J
Ján Tomko 已提交
2372
            QEMU_CAPS_VIRTIO_SCSI,
O
Osier Yang 已提交
2373
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_SCSI_GENERIC);
2374
    DO_TEST("hostdev-scsi-virtio-scsi",
2375 2376 2377
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC,
            QEMU_CAPS_DEVICE_SCSI_GENERIC_BOOTINDEX);
2378
    DO_TEST("hostdev-scsi-lsi-iscsi",
J
John Ferlan 已提交
2379 2380
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2381
    DO_TEST("hostdev-scsi-lsi-iscsi-auth",
J
John Ferlan 已提交
2382 2383
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2384
    DO_TEST("hostdev-scsi-virtio-iscsi",
J
John Ferlan 已提交
2385 2386
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2387
    DO_TEST("hostdev-scsi-virtio-iscsi-auth",
J
John Ferlan 已提交
2388 2389
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2390 2391 2392 2393 2394 2395
# ifdef HAVE_GNUTLS_CIPHER_ENCRYPT
    DO_TEST("disk-hostdev-scsi-virtio-iscsi-auth-AES",
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC, QEMU_CAPS_OBJECT_SECRET,
            QEMU_CAPS_ISCSI_PASSWORD_SECRET);
# endif
2396 2397 2398 2399 2400 2401
    DO_TEST("hostdev-scsi-vhost-scsi-ccw",
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_VHOST_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC, QEMU_CAPS_VIRTIO_CCW);
    DO_TEST("hostdev-scsi-vhost-scsi-pci",
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_VHOST_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2402

2403
    DO_TEST("mlock-on", QEMU_CAPS_REALTIME_MLOCK);
2404
    DO_TEST_FAILURE("mlock-on", NONE);
2405
    DO_TEST("mlock-off", QEMU_CAPS_REALTIME_MLOCK);
2406 2407
    DO_TEST("mlock-unsupported", NONE);

2408 2409 2410 2411
    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);
2412

2413
    DO_TEST("hotplug-base",
2414
            QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_SCSI);
2415

2416 2417
    DO_TEST("pcihole64", QEMU_CAPS_I440FX_PCI_HOLE64_SIZE);
    DO_TEST_FAILURE("pcihole64-none", NONE);
2418
    DO_TEST("pcihole64-q35",
2419
            QEMU_CAPS_DEVICE_IOH3420,
2420
            QEMU_CAPS_ICH9_AHCI,
2421
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2422
            QEMU_CAPS_DEVICE_QXL,
2423 2424
            QEMU_CAPS_Q35_PCI_HOLE64_SIZE);

2425
    DO_TEST("arm-vexpressa9-nodevs",
2426
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB);
2427
    DO_TEST("arm-vexpressa9-basic",
2428
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB);
2429
    DO_TEST("arm-vexpressa9-virtio",
2430
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2431
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2432
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2433
    DO_TEST("arm-virt-virtio",
2434
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2435
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2436
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2437

2438
    DO_TEST("aarch64-virt-virtio",
2439
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2440
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2441
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2442 2443 2444 2445 2446 2447

    /* 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",
2448
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2449
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
2450 2451 2452
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2453
            QEMU_CAPS_PCI_MULTIFUNCTION,
2454
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2455 2456
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_VIRTIO_SCSI);
2457 2458
    DO_TEST("aarch64-virt-2.6-virtio-pci-default",
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2459
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2460 2461
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2462
            QEMU_CAPS_PCI_MULTIFUNCTION,
2463 2464
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420);
2465 2466 2467
    /* Example of using virtio-pci with no explicit PCI controller
       but with manual PCI addresses */
    DO_TEST("aarch64-virtio-pci-manual-addresses",
2468
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2469
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2470 2471
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2472
            QEMU_CAPS_PCI_MULTIFUNCTION,
2473 2474 2475
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_VIRTIO_SCSI);
2476 2477 2478 2479 2480
    DO_TEST("aarch64-video-virtio-gpu-pci",
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_VIRTIO_GPU, QEMU_CAPS_BOOTINDEX);
2481 2482 2483 2484 2485 2486
    DO_TEST("aarch64-video-default",
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_VIRTIO_GPU, QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_VNC);
2487
    DO_TEST("aarch64-aavmf-virtio-mmio",
2488
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
2489
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2490
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2491
    DO_TEST("aarch64-virt-default-nic",
2492
            QEMU_CAPS_NODEFCONFIG,
2493
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
2494
    qemuTestSetHostArch(driver.caps, VIR_ARCH_AARCH64);
2495
    DO_TEST("aarch64-cpu-passthrough",
2496
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2497
            QEMU_CAPS_KVM);
2498 2499 2500
    DO_TEST_GIC("aarch64-gic-none", GIC_NONE,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
    DO_TEST_GIC("aarch64-gic-none", GIC_NONE,
A
Andrea Bolognani 已提交
2501
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2502
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2503 2504 2505 2506
    DO_TEST_GIC("aarch64-gic-none-v2", GIC_V2,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-none-v3", GIC_V3,
A
Andrea Bolognani 已提交
2507
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2508
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2509 2510 2511
    DO_TEST_GIC("aarch64-gic-none-both", GIC_BOTH,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2512 2513 2514
    DO_TEST_GIC("aarch64-gic-none-tcg", GIC_BOTH,
            QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2515
    DO_TEST_GIC("aarch64-gic-default", GIC_NONE,
A
Andrea Bolognani 已提交
2516
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
2517 2518 2519 2520
    DO_TEST_GIC("aarch64-gic-default", GIC_NONE,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-default", GIC_V2,
A
Andrea Bolognani 已提交
2521
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2522
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2523 2524 2525 2526 2527 2528 2529
    DO_TEST_GIC("aarch64-gic-default", GIC_V3,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-default", GIC_BOTH,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v2", GIC_NONE,
A
Andrea Bolognani 已提交
2530
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
2531 2532 2533 2534 2535 2536 2537
    DO_TEST_GIC("aarch64-gic-v2", GIC_NONE,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v2", GIC_V2,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v2", GIC_V3,
A
Andrea Bolognani 已提交
2538
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2539
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2540 2541 2542
    DO_TEST_GIC("aarch64-gic-v2", GIC_BOTH,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2543
    DO_TEST_FAILURE("aarch64-gic-v3",
A
Andrea Bolognani 已提交
2544
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
2545 2546 2547 2548 2549 2550 2551 2552 2553 2554
    DO_TEST_GIC("aarch64-gic-v3", GIC_NONE,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v3", GIC_V2,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v3", GIC_V3,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v3", GIC_BOTH,
A
Andrea Bolognani 已提交
2555
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2556
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2557
    DO_TEST_FAILURE("aarch64-gic-host",
A
Andrea Bolognani 已提交
2558
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570
    DO_TEST_GIC("aarch64-gic-host", GIC_NONE,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-host", GIC_V2,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-host", GIC_V3,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-host", GIC_BOTH,
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2571
    DO_TEST_PARSE_ERROR("aarch64-gic-invalid",
A
Andrea Bolognani 已提交
2572
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2573
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2574
    DO_TEST_FAILURE("aarch64-gic-not-virt",
A
Andrea Bolognani 已提交
2575
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2576
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2577
    DO_TEST_FAILURE("aarch64-gic-not-arm",
A
Andrea Bolognani 已提交
2578
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
2579
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2580
    DO_TEST("aarch64-kvm-32-on-64",
2581
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2582
            QEMU_CAPS_KVM, QEMU_CAPS_CPU_AARCH64_OFF);
2583
    DO_TEST_FAILURE("aarch64-kvm-32-on-64",
2584
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2585
            QEMU_CAPS_KVM);
2586 2587 2588 2589 2590 2591 2592 2593
    DO_TEST("aarch64-pci-serial",
            QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_PCI_SERIAL,
            QEMU_CAPS_CHARDEV_LOGFILE,
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT);
2594 2595 2596 2597 2598 2599 2600

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

2601
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);
2602

2603
    DO_TEST("kvm-pit-delay", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2604
    DO_TEST("kvm-pit-discard", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2605
    DO_TEST("no-kvm-pit-device", NONE);
2606

H
Hu Tao 已提交
2607
    DO_TEST("panic", QEMU_CAPS_DEVICE_PANIC,
2608
            QEMU_CAPS_NODEFCONFIG);
D
Dmitry Andreev 已提交
2609
    DO_TEST("panic-double", QEMU_CAPS_DEVICE_PANIC,
2610
            QEMU_CAPS_NODEFCONFIG);
H
Hu Tao 已提交
2611

2612
    DO_TEST("panic-no-address", QEMU_CAPS_DEVICE_PANIC,
2613
            QEMU_CAPS_NODEFCONFIG);
2614

2615 2616
    DO_TEST("fips-enabled", QEMU_CAPS_ENABLE_FIPS);

J
Ján Tomko 已提交
2617
    DO_TEST("shmem", QEMU_CAPS_DEVICE_IVSHMEM);
2618 2619 2620
    DO_TEST("shmem-plain-doorbell", QEMU_CAPS_DEVICE_IVSHMEM,
            QEMU_CAPS_DEVICE_IVSHMEM_PLAIN,
            QEMU_CAPS_DEVICE_IVSHMEM_DOORBELL);
2621
    DO_TEST_FAILURE("shmem", NONE);
J
Ján Tomko 已提交
2622
    DO_TEST_FAILURE("shmem-invalid-size",
2623
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2624
    DO_TEST_FAILURE("shmem-invalid-address",
2625
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2626
    DO_TEST_FAILURE("shmem-small-size",
2627
                    QEMU_CAPS_DEVICE_IVSHMEM);
2628
    DO_TEST_PARSE_ERROR("shmem-msi-only", NONE);
A
Andrea Bolognani 已提交
2629
    DO_TEST("cpu-host-passthrough-features", QEMU_CAPS_KVM);
2630

2631
    DO_TEST_FAILURE("memory-align-fail", NONE);
2632
    DO_TEST_FAILURE("memory-hotplug-nonuma", QEMU_CAPS_DEVICE_PC_DIMM);
M
Michal Privoznik 已提交
2633
    DO_TEST("memory-hotplug", NONE);
2634
    DO_TEST("memory-hotplug", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA);
2635
    DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2636
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2637
    DO_TEST("memory-hotplug-dimm-addr", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2638
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2639
    DO_TEST("memory-hotplug-ppc64-nonuma", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2640
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
M
Michal Privoznik 已提交
2641 2642
    DO_TEST("memory-hotplug-nvdimm", QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_DEVICE_NVDIMM,
            QEMU_CAPS_NUMA, QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2643 2644
    DO_TEST("memory-hotplug-nvdimm-access", QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_DEVICE_NVDIMM,
            QEMU_CAPS_NUMA, QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2645 2646
    DO_TEST("memory-hotplug-nvdimm-label", QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_DEVICE_NVDIMM,
            QEMU_CAPS_NUMA, QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2647

2648 2649
    DO_TEST("machine-aeskeywrap-on-caps",
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP,
2650
            QEMU_CAPS_DEA_KEY_WRAP,
2651
            QEMU_CAPS_VIRTIO_SCSI,
2652 2653
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps", QEMU_CAPS_MACHINE_OPT,
2654
                    QEMU_CAPS_VIRTIO_SCSI,
2655 2656 2657 2658 2659
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps", NONE);

    DO_TEST("machine-aeskeywrap-on-cap",
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP,
2660
            QEMU_CAPS_VIRTIO_SCSI,
2661 2662
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap", QEMU_CAPS_MACHINE_OPT,
2663
                    QEMU_CAPS_VIRTIO_SCSI,
2664 2665 2666 2667 2668
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap", NONE);

    DO_TEST("machine-aeskeywrap-off-caps",
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2669
            QEMU_CAPS_VIRTIO_SCSI,
2670 2671
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", QEMU_CAPS_MACHINE_OPT,
2672
                    QEMU_CAPS_VIRTIO_SCSI,
2673 2674 2675 2676
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", NONE);

    DO_TEST("machine-aeskeywrap-off-cap",
2677
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP,
2678
            QEMU_CAPS_VIRTIO_SCSI,
2679 2680
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap", QEMU_CAPS_MACHINE_OPT,
2681
                    QEMU_CAPS_VIRTIO_SCSI,
2682 2683 2684 2685 2686
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap", NONE);

    DO_TEST("machine-deakeywrap-on-caps",
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2687
            QEMU_CAPS_VIRTIO_SCSI,
2688
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2689
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", QEMU_CAPS_MACHINE_OPT,
2690
                    QEMU_CAPS_VIRTIO_SCSI,
2691 2692 2693 2694
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", NONE);

    DO_TEST("machine-deakeywrap-on-cap",
2695
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_DEA_KEY_WRAP,
2696
            QEMU_CAPS_VIRTIO_SCSI,
2697 2698
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-on-cap", QEMU_CAPS_MACHINE_OPT,
2699
                    QEMU_CAPS_VIRTIO_SCSI,
2700 2701 2702 2703 2704
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-on-cap", NONE);

    DO_TEST("machine-deakeywrap-off-caps",
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2705
            QEMU_CAPS_VIRTIO_SCSI,
2706 2707
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", QEMU_CAPS_MACHINE_OPT,
2708
                    QEMU_CAPS_VIRTIO_SCSI,
2709 2710 2711 2712
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", NONE);

    DO_TEST("machine-deakeywrap-off-cap",
2713
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_DEA_KEY_WRAP,
2714
            QEMU_CAPS_VIRTIO_SCSI,
2715 2716
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-cap", QEMU_CAPS_MACHINE_OPT,
2717
                    QEMU_CAPS_VIRTIO_SCSI,
2718 2719 2720 2721 2722
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-cap", NONE);

    DO_TEST("machine-keywrap-none-caps",
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2723
            QEMU_CAPS_VIRTIO_SCSI,
2724 2725
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST("machine-keywrap-none",
2726
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_VIRTIO_SCSI,
2727
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2728

2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747
    DO_TEST("machine-loadparm-s390", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_LOADPARM);
    DO_TEST("machine-loadparm-net-s390", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_LOADPARM);
    DO_TEST("machine-loadparm-multiple-disks-nets-s390",
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-char-invalid",
                        QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_VIRTIO_CCW,
                        QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_BOOTINDEX,
                        QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-len-invalid",
                        QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_VIRTIO_CCW,
                        QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_BOOTINDEX,
                        QEMU_CAPS_LOADPARM);

J
Jiri Denemark 已提交
2748 2749 2750 2751 2752 2753 2754
    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);

2755
    DO_TEST("virtio-input", QEMU_CAPS_VIRTIO_KEYBOARD,
2756
            QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET);
2757
    DO_TEST("virtio-input-passthrough", QEMU_CAPS_VIRTIO_INPUT_HOST);
2758

2759
    DO_TEST("ppc64-usb-controller",
2760
            QEMU_CAPS_PCI_OHCI);
2761
    DO_TEST("ppc64-usb-controller-legacy",
2762
            QEMU_CAPS_PIIX3_USB_UHCI);
2763 2764 2765 2766 2767 2768 2769 2770 2771
    DO_TEST_FULL("ppc64-usb-controller-qemu-xhci", NULL, -1, 0,
                 VIR_DOMAIN_DEF_PARSE_ABI_UPDATE, GIC_NONE,
                 QEMU_CAPS_NEC_USB_XHCI,
                 QEMU_CAPS_DEVICE_QEMU_XHCI);

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

2773 2774 2775 2776
    DO_TEST("aarch64-usb-controller-nec-xhci",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_NEC_USB_XHCI);

2777 2778 2779 2780
    DO_TEST_PARSE_FLAGS_ERROR("missing-machine",
                              VIR_DOMAIN_DEF_PARSE_SKIP_OSTYPE_CHECKS,
                              NONE);

2781 2782 2783 2784 2785 2786 2787 2788
    DO_TEST("name-escape",
            QEMU_CAPS_NAME_DEBUG_THREADS,
            QEMU_CAPS_OBJECT_SECRET,
            QEMU_CAPS_VNC,
            QEMU_CAPS_NAME_GUEST,
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_SPICE,
            QEMU_CAPS_SPICE_UNIX);
M
Marc-André Lureau 已提交
2789 2790
    DO_TEST("debug-threads", QEMU_CAPS_NAME_DEBUG_THREADS);

2791
    DO_TEST("master-key", QEMU_CAPS_OBJECT_SECRET);
2792
    DO_TEST("usb-long-port-path", QEMU_CAPS_NODEFCONFIG,
J
Ján Tomko 已提交
2793
            QEMU_CAPS_USB_HUB);
2794 2795
    DO_TEST_PARSE_ERROR("usb-too-long-port-path-invalid",
                        QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_USB_HUB);
2796

2797
    DO_TEST("acpi-table", NONE);
2798
    DO_TEST("intel-iommu",
2799
            QEMU_CAPS_DEVICE_INTEL_IOMMU);
2800 2801 2802
    DO_TEST("intel-iommu-machine",
            QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_IOMMU);
J
Ján Tomko 已提交
2803
    DO_TEST("intel-iommu-caching-mode",
2804 2805 2806
            QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_KERNEL_IRQCHIP,
            QEMU_CAPS_MACHINE_KERNEL_IRQCHIP_SPLIT,
2807 2808 2809 2810 2811 2812 2813 2814 2815
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_DEVICE_INTEL_IOMMU,
            QEMU_CAPS_INTEL_IOMMU_INTREMAP,
            QEMU_CAPS_INTEL_IOMMU_CACHING_MODE);
2816 2817 2818 2819 2820 2821 2822
    DO_TEST("intel-iommu-eim",
            QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_KERNEL_IRQCHIP,
            QEMU_CAPS_MACHINE_KERNEL_IRQCHIP_SPLIT,
            QEMU_CAPS_INTEL_IOMMU_INTREMAP,
            QEMU_CAPS_INTEL_IOMMU_EIM,
            QEMU_CAPS_DEVICE_INTEL_IOMMU);
2823 2824 2825 2826 2827 2828 2829
    DO_TEST("intel-iommu-device-iotlb",
            QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_KERNEL_IRQCHIP,
            QEMU_CAPS_MACHINE_KERNEL_IRQCHIP_SPLIT,
            QEMU_CAPS_INTEL_IOMMU_INTREMAP,
            QEMU_CAPS_INTEL_IOMMU_DEVICE_IOTLB,
            QEMU_CAPS_DEVICE_INTEL_IOMMU);
2830

2831
    DO_TEST("cpu-hotplug-startup", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);
2832 2833 2834 2835 2836 2837 2838 2839
    DO_TEST("virtio-options", QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_FSDEV, QEMU_CAPS_FSDEV_WRITEOUT,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
2840 2841 2842
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_PCI_IOMMU_PLATFORM,
            QEMU_CAPS_VIRTIO_PCI_ATS);
2843

2844 2845 2846 2847 2848 2849 2850 2851 2852 2853
    DO_TEST("fd-memory-numa-topology", QEMU_CAPS_MEM_PATH, QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_KVM);
    DO_TEST("fd-memory-numa-topology2", QEMU_CAPS_MEM_PATH, QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_KVM);
    DO_TEST("fd-memory-numa-topology3", QEMU_CAPS_MEM_PATH, QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_KVM);

    DO_TEST("fd-memory-no-numa-topology", QEMU_CAPS_MEM_PATH, QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_KVM);

2854 2855 2856 2857 2858 2859 2860 2861
    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);

2862 2863 2864 2865 2866 2867 2868 2869 2870
    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 已提交
2871
    DO_TEST("vmcoreinfo", QEMU_CAPS_DEVICE_VMCOREINFO);
2872

2873 2874 2875 2876
    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,
            QEMU_CAPS_HDA_DUPLEX);
2877
    DO_TEST("user-aliases2", QEMU_CAPS_DEVICE_IOH3420, QEMU_CAPS_ICH9_AHCI);
2878

A
Andrea Bolognani 已提交
2879 2880 2881
    if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL)
        virFileDeleteTree(fakerootdir);

2882
    qemuTestDriverFree(&driver);
A
Andrea Bolognani 已提交
2883
    VIR_FREE(fakerootdir);
2884

2885
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
2886 2887
}

2888
VIR_TEST_MAIN_PRELOAD(mymain,
A
Andrea Bolognani 已提交
2889 2890 2891 2892
                      abs_builddir "/.libs/qemuxml2argvmock.so",
                      abs_builddir "/.libs/virrandommock.so",
                      abs_builddir "/.libs/qemucpumock.so",
                      abs_builddir "/.libs/virpcimock.so")
2893

2894 2895
#else

2896 2897 2898 2899
int main(void)
{
    return EXIT_AM_SKIP;
}
2900 2901

#endif /* WITH_QEMU */