qemuxml2argvtest.c 107.0 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
    FLAG_EXPECT_FAILURE     = 1 << 0,
    FLAG_EXPECT_PARSE_ERROR = 1 << 1,
268
    FLAG_FIPS               = 1 << 2,
269 270
} virQemuXML2ArgvTestFlags;

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

283 284 285 286

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

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

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

    return 0;
}


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

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

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

    ret = 0;

 cleanup:
    return ret;
}


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

381 382 383
    if (!caps)
        goto cleanup;

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

386 387
    virQEMUCapsInitQMPBasicArch(info->qemuCaps);

388 389 390
    if (testAddCPUModels(info->qemuCaps, info->skipLegacyCPUs) < 0)
        goto cleanup;

391 392 393 394
    virQEMUCapsInitHostCPUModel(info->qemuCaps, caps->host.arch,
                                VIR_DOMAIN_VIRT_KVM);
    virQEMUCapsInitHostCPUModel(info->qemuCaps, caps->host.arch,
                                VIR_DOMAIN_VIRT_QEMU);
395

396 397 398 399 400 401 402 403 404
    virQEMUCapsFilterByMachineType(info->qemuCaps, vm->def->os.machine);

    ret = 0;

 cleanup:
    return ret;
}


405
static int
406
testCompareXMLToStartupXML(const void *data)
407
{
408
    const struct testInfo *info = data;
409 410 411 412 413
    unsigned int format_flags = VIR_DOMAIN_DEF_FORMAT_SECURE;
    char *xml = NULL;
    char *actual = NULL;
    int ret = -1;

414 415 416
    if (!info->vm)
        return EXIT_AM_SKIP;

417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441
    if (virAsprintf(&xml, "%s/qemuxml2startupxmloutdata/%s.xml",
                    abs_srcdir, info->name) < 0)
        goto cleanup;

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

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

    ret = virTestCompareToFile(actual, xml);

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


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

458 459
    memset(&monitor_chr, 0, sizeof(monitor_chr));

460
    if (!(conn = virGetConnect()))
461
        goto cleanup;
462

463 464 465
    if (!suffix)
        suffix = "";

466
    conn->secretDriver = &fakeSecretDriver;
467
    conn->storageDriver = &fakeStorageDriver;
468

469 470 471
    virSetConnectSecret(conn);
    virSetConnectStorage(conn);

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

475
    if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0)
476 477
        goto cleanup;

478
    if (virAsprintf(&xml, "%s/qemuxml2argvdata/%s.xml",
479
                    abs_srcdir, info->name) < 0 ||
480 481
        virAsprintf(&args, "%s/qemuxml2argvdata/%s%s.args",
                    abs_srcdir, info->name, suffix) < 0)
482 483 484
        goto cleanup;

    if (info->migrateFrom &&
485 486
        !(migrateURI = qemuMigrationDstGetURI(info->migrateFrom,
                                              info->migrateFd)))
487 488
        goto cleanup;

489
    if (!(vm = virDomainObjNew(driver.xmlopt)))
490
        goto cleanup;
491

492
    parseFlags |= VIR_DOMAIN_DEF_PARSE_INACTIVE;
493
    if (!(vm->def = virDomainDefParseFile(xml, driver.caps, driver.xmlopt,
494
                                          NULL, parseFlags))) {
P
Pavel Hrdina 已提交
495
        if (flags & FLAG_EXPECT_PARSE_ERROR)
496
            goto ok;
497
        goto cleanup;
498
    }
499 500 501 502
    if (flags & FLAG_EXPECT_PARSE_ERROR) {
        VIR_TEST_DEBUG("passed instead of expected parse error");
        goto cleanup;
    }
503
    priv = vm->privateData;
504

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

508
    if (!virDomainDefCheckABIStability(vm->def, vm->def, driver.xmlopt)) {
509
        VIR_TEST_DEBUG("ABI stability check failed on %s", xml);
510
        goto cleanup;
511 512
    }

513
    vm->def->id = -1;
514

515
    if (qemuProcessPrepareMonitorChr(&monitor_chr, priv->libDir) < 0)
516
        goto cleanup;
517

518
    if (testUpdateQEMUCaps(info, vm, driver.caps) < 0)
519
        goto cleanup;
520

521
    log = virTestLogContentAndReset();
522
    VIR_FREE(log);
523
    virResetLastError();
J
Jiri Denemark 已提交
524

525 526
    for (i = 0; i < vm->def->nhostdevs; i++) {
        virDomainHostdevDefPtr hostdev = vm->def->hostdevs[i];
527 528 529 530 531 532 533 534

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

535
    if (!(cmd = qemuProcessCreatePretendCmd(&driver, vm, migrateURI,
P
Pavel Hrdina 已提交
536 537
                                            (flags & FLAG_FIPS), false,
                                            VIR_QEMU_PROCESS_START_COLD))) {
P
Pavel Hrdina 已提交
538 539
        if (flags & FLAG_EXPECT_FAILURE)
            goto ok;
540
        goto cleanup;
J
Jiri Denemark 已提交
541
    }
542 543 544 545
    if (flags & FLAG_EXPECT_FAILURE) {
        VIR_TEST_DEBUG("passed instead of expected failure");
        goto cleanup;
    }
J
Jiri Denemark 已提交
546

E
Eric Blake 已提交
547
    if (!(actualargv = virCommandToString(cmd)))
548
        goto cleanup;
E
Eric Blake 已提交
549

550
    if (virTestCompareToFile(actualargv, args) < 0)
551
        goto cleanup;
552

P
Pavel Hrdina 已提交
553 554
    ret = 0;

555
 ok:
556
    if (ret == 0 && flags & FLAG_EXPECT_FAILURE) {
P
Pavel Hrdina 已提交
557 558
        ret = -1;
        VIR_TEST_DEBUG("Error expected but there wasn't any.\n");
559
        goto cleanup;
P
Pavel Hrdina 已提交
560
    }
561
    if (!virTestOOMActive()) {
562
        if (flags & FLAG_EXPECT_FAILURE) {
563
            if ((log = virTestLogContentAndReset()))
P
Pavel Hrdina 已提交
564 565
                VIR_TEST_DEBUG("Got expected error: \n%s", log);
        }
566
        virResetLastError();
P
Pavel Hrdina 已提交
567
        ret = 0;
568 569
    }

570 571 572
    if (!(flags & FLAG_EXPECT_FAILURE) && ret == 0)
        VIR_STEAL_PTR(info->vm, vm);

573
 cleanup:
574 575
    VIR_FREE(log);
    VIR_FREE(actualargv);
576
    virDomainChrSourceDefClear(&monitor_chr);
E
Eric Blake 已提交
577
    virCommandFree(cmd);
578
    virObjectUnref(vm);
579 580
    virSetConnectSecret(NULL);
    virSetConnectStorage(NULL);
581
    virObjectUnref(conn);
582
    VIR_FREE(migrateURI);
583 584
    VIR_FREE(xml);
    VIR_FREE(args);
585
    return ret;
586 587
}

A
Andrea Bolognani 已提交
588
# define FAKEROOTDIRTEMPLATE abs_builddir "/fakerootdir-XXXXXX"
589

590
static int
E
Eric Blake 已提交
591
mymain(void)
592 593
{
    int ret = 0;
A
Andrea Bolognani 已提交
594
    char *fakerootdir;
595
    bool skipLegacyCPUs = false;
596
    char *capslatest_x86_64 = NULL;
597

A
Andrea Bolognani 已提交
598 599 600 601 602 603 604 605 606 607 608 609
    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);

610 611
    abs_top_srcdir = getenv("abs_top_srcdir");
    if (!abs_top_srcdir)
612
        abs_top_srcdir = abs_srcdir "/..";
613

614 615 616 617 618 619 620 621 622 623
    /* 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;
    }

624
    if (qemuTestDriverInit(&driver) < 0)
625
        return EXIT_FAILURE;
626 627

    driver.privileged = true;
628

629 630 631
    VIR_FREE(driver.config->defaultTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->defaultTLSx509certdir, "/etc/pki/qemu") < 0)
        return EXIT_FAILURE;
632
    VIR_FREE(driver.config->vncTLSx509certdir);
633
    if (VIR_STRDUP_QUIET(driver.config->vncTLSx509certdir, "/etc/pki/libvirt-vnc") < 0)
634 635
        return EXIT_FAILURE;
    VIR_FREE(driver.config->spiceTLSx509certdir);
636
    if (VIR_STRDUP_QUIET(driver.config->spiceTLSx509certdir, "/etc/pki/libvirt-spice") < 0)
637
        return EXIT_FAILURE;
638 639 640
    VIR_FREE(driver.config->chardevTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->chardevTLSx509certdir, "/etc/pki/libvirt-chardev") < 0)
        return EXIT_FAILURE;
641 642 643
    VIR_FREE(driver.config->vxhsTLSx509certdir);
    if (VIR_STRDUP_QUIET(driver.config->vxhsTLSx509certdir, "/etc/pki/libvirt-vxhs") < 0)
        return EXIT_FAILURE;
644

645
    VIR_FREE(driver.config->hugetlbfs);
646
    if (VIR_ALLOC_N(driver.config->hugetlbfs, 2) < 0)
647
        return EXIT_FAILURE;
648 649 650
    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)
651
        return EXIT_FAILURE;
652 653
    driver.config->hugetlbfs[0].size = 2048;
    driver.config->hugetlbfs[0].deflt = true;
654
    driver.config->hugetlbfs[1].size = 1048576;
655
    driver.config->spiceTLS = 1;
656
    if (VIR_STRDUP_QUIET(driver.config->spicePassword, "123456") < 0)
657
        return EXIT_FAILURE;
658 659 660
    VIR_FREE(driver.config->memoryBackingDir);
    if (VIR_STRDUP_QUIET(driver.config->memoryBackingDir, "/var/lib/libvirt/qemu/ram") < 0)
        return EXIT_FAILURE;
661

662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728
    if (!(capslatest_x86_64 = testQemuGetLatestCapsForArch(abs_srcdir "/qemucapabilitiesdata",
                                                           "x86_64", "xml")))
        return EXIT_FAILURE;

    VIR_TEST_VERBOSE("\nlatest caps x86_64: %s\n", capslatest_x86_64);


/**
 * The following set of macros allows testing of XML -> argv conversion with a
 * real set of capabilities gathered from a real qemu copy. It is desired to use
 * these for positive test cases as it provides combinations of flags which
 * can be met in real life.
 *
 * The capabilities are taken from the real capabilities stored in
 * tests/qemucapabilitiesdata.
 *
 * It is suggested to use the DO_TEST_CAPS_LATEST macro which always takes the
 * most recent capability set. In cases when the new code would change behaviour
 * the test cases should be forked using DO_TEST_CAPS_VER with the appropriate
 * version.
 */
# define DO_TEST_CAPS_INTERNAL(name, suffix, migrateFrom, flags, parseFlags, \
                               gic, arch, capsfile) \
    do { \
        static struct testInfo info = { \
            name, "." suffix, NULL, migrateFrom, migrateFrom ? 7 : -1,\
            (flags), parseFlags, false, NULL \
        }; \
        info.skipLegacyCPUs = skipLegacyCPUs; \
        if (testInitQEMUCaps(&info, gic) < 0) \
            return EXIT_FAILURE; \
        if (!(info.qemuCaps = qemuTestParseCapabilitiesArch(virArchFromString(arch), \
                                                            capsfile))) \
            return EXIT_FAILURE; \
        if (virTestRun("QEMU XML-2-ARGV " name "." suffix, \
                       testCompareXMLToArgv, &info) < 0) \
            ret = -1; \
        virObjectUnref(info.qemuCaps); \
        virObjectUnref(info.vm); \
    } while (0)

# define TEST_CAPS_PATH abs_srcdir "/qemucapabilitiesdata/caps_"

# define DO_TEST_CAPS_ARCH_VER_FULL(name, flags, parseFlags, gic, arch, ver) \
    DO_TEST_CAPS_INTERNAL(name, arch "-" ver, NULL, flags, parseFlags, gic, \
                          arch, TEST_CAPS_PATH ver "." arch ".xml")

# define DO_TEST_CAPS_ARCH_VER(name, gic, arch, ver) \
    DO_TEST_CAPS_ARCH_VER_FULL(name, 0, 0, gic, arch, ver)

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

# define DO_TEST_CAPS_LATEST(name) \
    DO_TEST_CAPS_INTERNAL(name, "x86_64-latest", NULL, 0, 0, GIC_NONE, "x86_64", \
                          capslatest_x86_64)

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

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

729 730 731 732
# define DO_TEST_FULL(name, migrateFrom, migrateFd, flags, \
                      parseFlags, gic, ...) \
    do { \
        static struct testInfo info = { \
733
            name, NULL, NULL, migrateFrom, migrateFd, (flags), parseFlags, \
734
            false, NULL \
735 736 737 738 739 740 741 742
        }; \
        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; \
743
        if (virTestRun("QEMU XML-2-startup-XML " name, \
J
Ján Tomko 已提交
744
                       testCompareXMLToStartupXML, &info) < 0) \
745
            ret = -1; \
746
        virObjectUnref(info.qemuCaps); \
747
        virObjectUnref(info.vm); \
748 749
    } while (0)

750
# define DO_TEST(name, ...) \
751
    DO_TEST_FULL(name, NULL, -1, 0, 0, GIC_NONE, __VA_ARGS__)
752

753
# define DO_TEST_GIC(name, gic, ...) \
754 755
    DO_TEST_FULL(name, NULL, -1, 0, 0, gic, __VA_ARGS__)

756 757
# define DO_TEST_FAILURE(name, ...) \
    DO_TEST_FULL(name, NULL, -1, FLAG_EXPECT_FAILURE, \
758
                 0, GIC_NONE, __VA_ARGS__)
759

760 761 762
# define DO_TEST_PARSE_ERROR(name, ...) \
    DO_TEST_FULL(name, NULL, -1, \
                 FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE, \
763
                 0, GIC_NONE, __VA_ARGS__)
764

765 766 767
# define DO_TEST_PARSE_FLAGS_ERROR(name, parseFlags, ...) \
    DO_TEST_FULL(name, NULL, -1, \
                 FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_FAILURE, \
768
                 parseFlags, GIC_NONE, __VA_ARGS__)
769 770

# define NONE QEMU_CAPS_LAST
771

772 773 774
    /* 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 */
775 776 777 778 779 780 781
    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");
782 783
    unsetenv("QEMU_AUDIO_DRV");
    unsetenv("SDL_AUDIODRIVER");
784

785
    DO_TEST("minimal", NONE);
786 787
    DO_TEST("minimal-sandbox",
            QEMU_CAPS_SECCOMP_BLACKLIST);
788
    DO_TEST_PARSE_ERROR("minimal-no-memory", NONE);
789
    DO_TEST("minimal-msg-timestamp", QEMU_CAPS_MSG_TIMESTAMP);
790
    DO_TEST("machine-aliases1", NONE);
791
    DO_TEST("machine-aliases2", QEMU_CAPS_KVM);
792
    DO_TEST("machine-core-on", NONE);
793
    driver.config->dumpGuestCore = true;
794
    DO_TEST("machine-core-off", NONE);
795
    driver.config->dumpGuestCore = false;
M
Michal Privoznik 已提交
796 797 798
    DO_TEST("machine-smm-opt",
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
799
            QEMU_CAPS_DEVICE_IOH3420,
M
Michal Privoznik 已提交
800 801 802
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_MACHINE_SMM_OPT,
            QEMU_CAPS_VIRTIO_SCSI);
803
    DO_TEST("machine-vmport-opt",
804
            QEMU_CAPS_MACHINE_VMPORT_OPT);
805 806 807
    DO_TEST("default-kvm-host-arch", NONE);
    DO_TEST("default-qemu-host-arch", NONE);
    DO_TEST("x86-kvm-32-on-64", NONE);
808 809 810
    DO_TEST("boot-cdrom", NONE);
    DO_TEST("boot-network", NONE);
    DO_TEST("boot-floppy", NONE);
811
    DO_TEST("boot-floppy-q35",
812
            QEMU_CAPS_DEVICE_IOH3420,
813
            QEMU_CAPS_ICH9_AHCI);
814
    DO_TEST("bootindex-floppy-q35",
815
            QEMU_CAPS_DEVICE_IOH3420,
J
Ján Tomko 已提交
816
            QEMU_CAPS_ICH9_AHCI,
817
            QEMU_CAPS_BOOTINDEX);
J
Ján Tomko 已提交
818 819
    DO_TEST("boot-multi", NONE);
    DO_TEST("boot-menu-enable", NONE);
820
    DO_TEST("boot-menu-enable-bootindex",
821
            QEMU_CAPS_BOOTINDEX);
822
    DO_TEST("boot-menu-enable-with-timeout",
823
            QEMU_CAPS_SPLASH_TIMEOUT);
J
Ján Tomko 已提交
824
    DO_TEST_FAILURE("boot-menu-enable-with-timeout", NONE);
825
    DO_TEST_PARSE_ERROR("boot-menu-enable-with-timeout-invalid", NONE);
J
Ján Tomko 已提交
826 827
    DO_TEST("boot-menu-disable", NONE);
    DO_TEST("boot-menu-disable-drive", NONE);
828
    DO_TEST("boot-menu-disable-drive-bootindex",
829
            QEMU_CAPS_BOOTINDEX);
830
    DO_TEST_PARSE_ERROR("boot-dev+order",
831
            QEMU_CAPS_BOOTINDEX,
832
            QEMU_CAPS_VIRTIO_BLK_SCSI);
833
    DO_TEST("boot-order",
834
            QEMU_CAPS_BOOTINDEX,
835
            QEMU_CAPS_VIRTIO_BLK_SCSI);
836
    DO_TEST("boot-complex",
837
            QEMU_CAPS_DRIVE_BOOT,
838
            QEMU_CAPS_VIRTIO_BLK_SCSI);
839
    DO_TEST("boot-complex-bootindex",
840
            QEMU_CAPS_DRIVE_BOOT,
841
            QEMU_CAPS_BOOTINDEX,
842
            QEMU_CAPS_VIRTIO_BLK_SCSI);
843
    DO_TEST("boot-strict",
844
            QEMU_CAPS_DRIVE_BOOT,
845
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_BOOT_STRICT,
846
            QEMU_CAPS_VIRTIO_BLK_SCSI);
847 848 849 850 851

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

852
    DO_TEST("bios",
853
            QEMU_CAPS_DEVICE_ISA_SERIAL,
854
            QEMU_CAPS_SGA);
J
Ján Tomko 已提交
855
    DO_TEST("bios-nvram", NONE);
M
Michal Privoznik 已提交
856 857 858
    DO_TEST("bios-nvram-secure",
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
859
            QEMU_CAPS_DEVICE_IOH3420,
M
Michal Privoznik 已提交
860 861 862
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_MACHINE_SMM_OPT,
            QEMU_CAPS_VIRTIO_SCSI);
863 864 865 866 867 868 869

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

870
    DO_TEST("clock-utc", NONE);
871
    DO_TEST("clock-localtime", NONE);
J
Ján Tomko 已提交
872 873 874 875
    DO_TEST("clock-localtime-basis-localtime", NONE);
    DO_TEST("clock-variable", NONE);
    DO_TEST("clock-france", NONE);
    DO_TEST("clock-hpet-off", NONE);
J
Ján Tomko 已提交
876
    DO_TEST("clock-catchup", QEMU_CAPS_KVM_PIT_TICK_POLICY);
877
    DO_TEST("cpu-kvmclock", QEMU_CAPS_ENABLE_KVM);
A
Andrea Bolognani 已提交
878
    DO_TEST("cpu-host-kvmclock", QEMU_CAPS_ENABLE_KVM);
879
    DO_TEST("kvmclock", QEMU_CAPS_KVM);
880
    DO_TEST("clock-timer-hyperv-rtc", QEMU_CAPS_KVM);
881

882 883
    DO_TEST("cpu-eoi-disabled", QEMU_CAPS_ENABLE_KVM);
    DO_TEST("cpu-eoi-enabled", QEMU_CAPS_ENABLE_KVM);
J
Ján Tomko 已提交
884
    DO_TEST("controller-order",
885 886 887 888 889 890 891
            QEMU_CAPS_KVM,
            QEMU_CAPS_ENABLE_KVM,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_CCID_PASSTHRU,
            QEMU_CAPS_SPICE,
            QEMU_CAPS_HDA_DUPLEX,
            QEMU_CAPS_USB_HUB,
892
            QEMU_CAPS_DEVICE_ISA_SERIAL,
893
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
894 895
    DO_TEST("eoi-disabled", NONE);
    DO_TEST("eoi-enabled", NONE);
896 897
    DO_TEST("pv-spinlock-disabled", NONE);
    DO_TEST("pv-spinlock-enabled", NONE);
M
Martin Kletzander 已提交
898
    DO_TEST("kvmclock+eoi-disabled", QEMU_CAPS_ENABLE_KVM);
899

900
    DO_TEST("hyperv", NONE);
901
    DO_TEST("hyperv-off", NONE);
902
    DO_TEST("hyperv-panic", NONE);
903

904 905 906
    DO_TEST("kvm-features", NONE);
    DO_TEST("kvm-features-off", NONE);

907 908 909
    DO_TEST("pmu-feature", NONE);
    DO_TEST("pmu-feature-off", NONE);

J
Ján Tomko 已提交
910
    DO_TEST("hugepages", NONE);
J
Ján Tomko 已提交
911
    DO_TEST("hugepages-numa",
912
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4,
913
            QEMU_CAPS_VIRTIO_SCSI,
914
            QEMU_CAPS_ICH9_USB_EHCI1,
915
            QEMU_CAPS_SPICE,
916
            QEMU_CAPS_DEVICE_QXL,
917
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_USB_REDIR,
918
            QEMU_CAPS_DEVICE_PC_DIMM,
J
Ján Tomko 已提交
919
            QEMU_CAPS_OBJECT_MEMORY_FILE);
A
Andrea Bolognani 已提交
920 921 922
    DO_TEST("hugepages-pages",
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
J
Ján Tomko 已提交
923
    DO_TEST("hugepages-pages2", QEMU_CAPS_OBJECT_MEMORY_RAM,
924
            QEMU_CAPS_OBJECT_MEMORY_FILE);
J
Ján Tomko 已提交
925
    DO_TEST("hugepages-pages3", QEMU_CAPS_OBJECT_MEMORY_RAM,
926
            QEMU_CAPS_OBJECT_MEMORY_FILE);
A
Andrea Bolognani 已提交
927 928 929
    DO_TEST("hugepages-shared",
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
930
    DO_TEST_PARSE_ERROR("hugepages-memaccess-invalid", NONE);
J
Ján Tomko 已提交
931
    DO_TEST_FAILURE("hugepages-pages4",
932
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
J
Ján Tomko 已提交
933
    DO_TEST("hugepages-pages5", NONE);
934
    DO_TEST("hugepages-pages6", NONE);
J
Ján Tomko 已提交
935
    DO_TEST("hugepages-pages7",
936
            QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_OBJECT_MEMORY_FILE);
937 938 939
    DO_TEST("hugepages-memaccess", QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_DEVICE_PC_DIMM,
            QEMU_CAPS_NUMA);
940 941 942
    DO_TEST("hugepages-memaccess2", QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_DEVICE_PC_DIMM,
            QEMU_CAPS_NUMA);
J
Ján Tomko 已提交
943
    DO_TEST_FAILURE("hugepages-memaccess3",
944 945
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_VIRTIO_SCSI);
946
    DO_TEST("nosharepages", QEMU_CAPS_MEM_MERGE);
947
    DO_TEST("disk-cdrom", NONE);
948
    DO_TEST("disk-iscsi", NONE);
949 950 951 952 953
    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);
954
    DO_TEST("disk-cdrom-empty", NONE);
955
    DO_TEST("disk-cdrom-tray",
956
            QEMU_CAPS_VIRTIO_TX_ALG);
957 958
    DO_TEST("disk-cdrom-tray-no-device-cap", NONE);
    DO_TEST("disk-floppy", NONE);
959 960
    DO_TEST_FAILURE("disk-floppy-pseries",
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
961
    DO_TEST("disk-floppy-tray-no-device-cap", NONE);
962
    DO_TEST("disk-floppy-tray", NONE);
963
    DO_TEST("disk-virtio-s390",
964
            QEMU_CAPS_VIRTIO_S390);
965
    DO_TEST("disk-many", NONE);
966 967
    DO_TEST("disk-virtio", QEMU_CAPS_DRIVE_BOOT);
    DO_TEST("disk-virtio-ccw",
968
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
969
    DO_TEST("disk-virtio-ccw-many",
970
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
971
    DO_TEST("disk-virtio-scsi-ccw", QEMU_CAPS_VIRTIO_SCSI,
972
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
973
    DO_TEST("disk-order",
974
            QEMU_CAPS_DRIVE_BOOT, QEMU_CAPS_VIRTIO_BLK_SCSI);
L
Lin Ma 已提交
975 976
    DO_TEST("disk-virtio-drive-queues",
            QEMU_CAPS_VIRTIO_BLK_NUM_QUEUES);
977
    DO_TEST("disk-drive-boot-disk",
978
            QEMU_CAPS_DRIVE_BOOT);
979
    DO_TEST("disk-drive-boot-cdrom",
980
            QEMU_CAPS_DRIVE_BOOT);
981
    DO_TEST("floppy-drive-fat",
982
            QEMU_CAPS_DRIVE_BOOT);
983 984
    DO_TEST("disk-drive-readonly-disk", NONE);
    DO_TEST("disk-drive-readonly-no-device", NONE);
985
    DO_TEST("disk-drive-fmt-qcow",
986
            QEMU_CAPS_DRIVE_BOOT);
987
    DO_TEST_PARSE_ERROR("disk-drive-fmt-cow", QEMU_CAPS_DRIVE_BOOT);
988
    DO_TEST_PARSE_ERROR("disk-drive-fmt-dir", QEMU_CAPS_DRIVE_BOOT);
989
    DO_TEST_PARSE_ERROR("disk-drive-fmt-iso", QEMU_CAPS_DRIVE_BOOT);
990
    DO_TEST("disk-drive-shared", NONE);
991
    DO_TEST_PARSE_ERROR("disk-drive-shared-qcow", NONE);
992 993
    DO_TEST("disk-drive-shared-locking",
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DISK_SHARE_RW);
994 995 996
    DO_TEST("disk-drive-error-policy-stop", NONE);
    DO_TEST("disk-drive-error-policy-enospace", NONE);
    DO_TEST("disk-drive-error-policy-wreport-rignore", NONE);
997 998 999
    DO_TEST("disk-drive-cache-v2-wt", NONE);
    DO_TEST("disk-drive-cache-v2-wb", NONE);
    DO_TEST("disk-drive-cache-v2-none", NONE);
1000
    DO_TEST("disk-drive-cache-directsync", NONE);
1001
    DO_TEST("disk-drive-cache-unsafe", NONE);
1002 1003 1004
    DO_TEST_CAPS_VER("disk-drive-write-cache", "2.6.0");
    DO_TEST_CAPS_VER("disk-drive-write-cache", "2.7.0");
    DO_TEST_CAPS_LATEST("disk-drive-write-cache");
1005 1006 1007 1008 1009 1010 1011
    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);
1012 1013
    DO_TEST_PARSE_ERROR("disk-drive-network-iscsi-auth-secrettype-invalid", NONE);
    DO_TEST_PARSE_ERROR("disk-drive-network-iscsi-auth-wrong-secrettype", NONE);
1014
    DO_TEST_PARSE_ERROR("disk-drive-network-source-auth-both", NONE);
1015
    DO_TEST("disk-drive-network-iscsi-lun",
1016
            QEMU_CAPS_VIRTIO_SCSI,
1017
            QEMU_CAPS_SCSI_BLOCK);
1018 1019
    DO_TEST("disk-drive-network-gluster",
            QEMU_CAPS_GLUSTER_DEBUG_LEVEL);
1020 1021 1022
    DO_TEST("disk-drive-network-rbd", NONE);
    DO_TEST("disk-drive-network-sheepdog", NONE);
    DO_TEST("disk-drive-network-rbd-auth", NONE);
1023
    DO_TEST("disk-drive-network-source-auth", NONE);
1024
# ifdef HAVE_GNUTLS_CIPHER_ENCRYPT
1025
    DO_TEST("disk-drive-network-rbd-auth-AES",
1026
            QEMU_CAPS_OBJECT_SECRET, QEMU_CAPS_VIRTIO_SCSI);
1027
# endif
1028 1029
    DO_TEST("disk-drive-network-rbd-ipv6", NONE);
    DO_TEST_FAILURE("disk-drive-network-rbd-no-colon", NONE);
1030
    DO_TEST("disk-drive-network-vxhs", QEMU_CAPS_VXHS);
1031 1032 1033 1034 1035
    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);
1036
    DO_TEST("disk-drive-no-boot",
1037
            QEMU_CAPS_BOOTINDEX);
1038
    DO_TEST_PARSE_ERROR("disk-device-lun-type-invalid",
1039 1040
                        QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST_FAILURE("disk-usb-nosupport", NONE);
1041
    DO_TEST("disk-usb-device",
1042
            QEMU_CAPS_DEVICE_USB_STORAGE);
1043
    DO_TEST("disk-usb-device-removable",
1044
            QEMU_CAPS_DEVICE_USB_STORAGE,
1045
            QEMU_CAPS_USB_STORAGE_REMOVABLE);
1046
    DO_TEST_FAILURE("disk-usb-pci",
1047
                    QEMU_CAPS_DEVICE_USB_STORAGE);
1048
    DO_TEST("disk-scsi-device",
1049
            QEMU_CAPS_SCSI_LSI);
1050
    DO_TEST("disk-scsi-device-auto",
1051
            QEMU_CAPS_SCSI_LSI);
1052
    DO_TEST("disk-scsi-disk-split",
1053
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI);
1054
    DO_TEST("disk-scsi-disk-wwn",
1055
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
1056 1057
            QEMU_CAPS_SCSI_DISK_WWN);
    DO_TEST("disk-scsi-disk-vpd",
1058
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
1059 1060
            QEMU_CAPS_SCSI_DISK_WWN);
    DO_TEST_FAILURE("disk-scsi-disk-vpd-build-error",
1061
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
1062
            QEMU_CAPS_SCSI_DISK_WWN);
1063
    DO_TEST("disk-scsi-vscsi", NONE);
1064
    DO_TEST("disk-scsi-virtio-scsi",
1065
            QEMU_CAPS_VIRTIO_SCSI);
1066 1067
    DO_TEST("disk-virtio-scsi-num_queues",
            QEMU_CAPS_VIRTIO_SCSI);
1068 1069 1070 1071
    DO_TEST("disk-virtio-scsi-cmd_per_lun",
            QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST("disk-virtio-scsi-max_sectors",
            QEMU_CAPS_VIRTIO_SCSI);
1072 1073
    DO_TEST("disk-virtio-scsi-ioeventfd",
            QEMU_CAPS_VIRTIO_IOEVENTFD, QEMU_CAPS_VIRTIO_SCSI);
1074 1075
    DO_TEST("disk-scsi-megasas",
            QEMU_CAPS_SCSI_MEGASAS);
1076 1077 1078
    DO_TEST("disk-scsi-mptsas1068",
            QEMU_CAPS_SCSI_MPTSAS1068,
            QEMU_CAPS_SCSI_DISK_WWN);
1079
    DO_TEST("disk-sata-device",
1080
            QEMU_CAPS_ICH9_AHCI);
J
Ján Tomko 已提交
1081
    DO_TEST("disk-aio", NONE);
1082 1083
    DO_TEST("disk-source-pool", NONE);
    DO_TEST("disk-source-pool-mode", NONE);
1084
    DO_TEST("disk-ioeventfd",
1085
            QEMU_CAPS_VIRTIO_IOEVENTFD,
1086
            QEMU_CAPS_VIRTIO_TX_ALG,
1087
            QEMU_CAPS_VIRTIO_BLK_SCSI);
1088
    DO_TEST("disk-copy_on_read",
1089
            QEMU_CAPS_VIRTIO_TX_ALG,
1090
            QEMU_CAPS_VIRTIO_BLK_SCSI);
O
Osier Yang 已提交
1091
    DO_TEST("disk-drive-discard",
1092
            QEMU_CAPS_DRIVE_DISCARD);
1093 1094 1095
    DO_TEST("disk-drive-detect-zeroes",
            QEMU_CAPS_DRIVE_DISCARD,
            QEMU_CAPS_DRIVE_DETECT_ZEROES);
1096
    DO_TEST("disk-snapshot", NONE);
1097 1098
    DO_TEST_PARSE_ERROR("disk-same-targets",
                        QEMU_CAPS_SCSI_LSI,
1099
                        QEMU_CAPS_DEVICE_USB_STORAGE);
1100 1101 1102 1103 1104 1105 1106 1107
    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);
1108
    DO_TEST("event_idx",
1109 1110
            QEMU_CAPS_VIRTIO_BLK_EVENT_IDX,
            QEMU_CAPS_VIRTIO_NET_EVENT_IDX,
1111
            QEMU_CAPS_VIRTIO_BLK_SCSI);
1112
    DO_TEST("virtio-lun",
1113
            QEMU_CAPS_VIRTIO_BLK_SCSI);
1114
    DO_TEST("disk-scsi-lun-passthrough",
1115
            QEMU_CAPS_SCSI_BLOCK,
1116
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI);
1117
    DO_TEST("disk-serial",
1118
            QEMU_CAPS_KVM);
1119 1120 1121 1122 1123 1124 1125 1126
    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);
1127

1128 1129 1130 1131
    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);
1132
    DO_TEST("graphics-vnc-policy", QEMU_CAPS_VNC,
1133 1134 1135 1136 1137
            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);
1138
    driver.config->vncAutoUnixSocket = true;
1139 1140
    DO_TEST("graphics-vnc-auto-socket-cfg", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1141
    driver.config->vncAutoUnixSocket = false;
1142 1143 1144 1145
    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);
1146 1147
    DO_TEST("graphics-vnc-socket-new-cmdline", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA, QEMU_CAPS_VNC_MULTI_SERVERS);
1148

1149 1150
    driver.config->vncSASL = 1;
    VIR_FREE(driver.config->vncSASLdir);
1151
    ignore_value(VIR_STRDUP(driver.config->vncSASLdir, "/root/.sasl2"));
1152
    DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1153 1154
    driver.config->vncTLS = 1;
    driver.config->vncTLSx509verify = 1;
1155
    DO_TEST("graphics-vnc-tls", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1156
    driver.config->vncSASL = driver.config->vncTLSx509verify = driver.config->vncTLS = 0;
1157 1158
    VIR_FREE(driver.config->vncSASLdir);
    VIR_FREE(driver.config->vncTLSx509certdir);
1159

J
Ján Tomko 已提交
1160 1161 1162
    DO_TEST("graphics-sdl",
            QEMU_CAPS_DEVICE_VGA);
    DO_TEST("graphics-sdl-fullscreen",
1163
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1164
    DO_TEST("graphics-spice",
1165
            QEMU_CAPS_SPICE,
1166 1167
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
1168
    DO_TEST("graphics-spice-no-args",
1169
            QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1170 1171 1172
    driver.config->spiceSASL = 1;
    ignore_value(VIR_STRDUP(driver.config->spiceSASLdir, "/root/.sasl2"));
    DO_TEST("graphics-spice-sasl",
1173
            QEMU_CAPS_SPICE,
1174 1175 1176
            QEMU_CAPS_DEVICE_QXL);
    VIR_FREE(driver.config->spiceSASLdir);
    driver.config->spiceSASL = 0;
1177
    DO_TEST("graphics-spice-agentmouse",
1178
            QEMU_CAPS_DEVICE_QXL,
1179
            QEMU_CAPS_SPICE,
1180
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1181
    DO_TEST("graphics-spice-compression",
1182
            QEMU_CAPS_SPICE,
1183
            QEMU_CAPS_DEVICE_QXL);
1184
    DO_TEST("graphics-spice-timeout",
1185
            QEMU_CAPS_KVM,
1186
            QEMU_CAPS_SPICE,
1187 1188
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_DEVICE_VGA);
1189
    DO_TEST("graphics-spice-qxl-vga",
1190
            QEMU_CAPS_SPICE,
1191
            QEMU_CAPS_DEVICE_QXL);
1192
    DO_TEST("graphics-spice-usb-redir",
1193
            QEMU_CAPS_SPICE,
1194 1195 1196 1197
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1198
    DO_TEST("graphics-spice-agent-file-xfer",
1199
            QEMU_CAPS_SPICE,
1200 1201
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
1202 1203
    DO_TEST("graphics-spice-socket",
            QEMU_CAPS_SPICE,
1204 1205
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1206 1207
    DO_TEST("graphics-spice-auto-socket",
            QEMU_CAPS_SPICE,
1208 1209
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1210 1211 1212
    driver.config->spiceAutoUnixSocket = true;
    DO_TEST("graphics-spice-auto-socket-cfg",
            QEMU_CAPS_SPICE,
1213 1214
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1215
    driver.config->spiceAutoUnixSocket = false;
1216

1217 1218 1219
    DO_TEST("input-usbmouse", NONE);
    DO_TEST("input-usbtablet", NONE);
    DO_TEST("misc-acpi", NONE);
1220 1221 1222
    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);
1223
    DO_TEST_FAILURE("misc-enable-s4", NONE);
1224
    DO_TEST("misc-no-reboot", NONE);
1225
    DO_TEST("misc-uuid", NONE);
1226
    DO_TEST_PARSE_ERROR("vhost_queues-invalid", NONE);
J
Ján Tomko 已提交
1227
    DO_TEST("net-vhostuser", NONE);
1228
    DO_TEST("net-vhostuser-multiq",
J
Ján Tomko 已提交
1229 1230
            QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
    DO_TEST_FAILURE("net-vhostuser-multiq", NONE);
1231 1232
    DO_TEST_FAILURE("net-vhostuser-fail",
                    QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
1233
    DO_TEST("net-user", NONE);
J
Ján Tomko 已提交
1234
    DO_TEST("net-user-addr", NONE);
1235 1236
    DO_TEST("net-virtio", NONE);
    DO_TEST("net-virtio-device",
1237 1238 1239
            QEMU_CAPS_VIRTIO_TX_ALG);
    DO_TEST("net-virtio-disable-offloads", NONE);
    DO_TEST("net-virtio-netdev", NONE);
1240
    DO_TEST("net-virtio-s390",
1241
            QEMU_CAPS_VIRTIO_S390);
1242
    DO_TEST("net-virtio-ccw",
1243
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1244 1245 1246
    DO_TEST("net-virtio-rxtxqueuesize",
            QEMU_CAPS_VIRTIO_NET_RX_QUEUE_SIZE,
            QEMU_CAPS_VIRTIO_NET_TX_QUEUE_SIZE);
1247
    DO_TEST_PARSE_ERROR("net-virtio-rxqueuesize-invalid-size", NONE);
1248 1249
    DO_TEST("net-eth", NONE);
    DO_TEST("net-eth-ifname", NONE);
1250
    DO_TEST("net-eth-names", NONE);
1251
    DO_TEST("net-eth-hostip", NONE);
1252 1253 1254
    DO_TEST("net-client", NONE);
    DO_TEST("net-server", NONE);
    DO_TEST("net-mcast", NONE);
1255
    DO_TEST("net-udp", NONE);
1256
    DO_TEST("net-hostdev", NONE);
1257
    DO_TEST("net-hostdev-multidomain", NONE);
1258 1259
    DO_TEST("net-hostdev-vfio",
            QEMU_CAPS_DEVICE_VFIO_PCI);
1260
    DO_TEST("net-hostdev-vfio-multidomain",
1261
            QEMU_CAPS_DEVICE_VFIO_PCI);
1262 1263 1264
    DO_TEST_FAILURE("net-hostdev-fail",
                    QEMU_CAPS_DEVICE_VFIO_PCI);

1265

1266 1267
    DO_TEST("serial-file-log",
            QEMU_CAPS_CHARDEV_FILE_APPEND,
1268
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1269
            QEMU_CAPS_CHARDEV_LOGFILE);
1270
    DO_TEST("serial-spiceport",
1271
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1272
            QEMU_CAPS_DEVICE_QXL,
1273
            QEMU_CAPS_SPICE,
1274
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1275
            QEMU_CAPS_CHARDEV_SPICEPORT);
1276
    DO_TEST("serial-spiceport-nospice", NONE);
1277

1278 1279 1280 1281
    DO_TEST("console-compat",
            QEMU_CAPS_DEVICE_ISA_SERIAL);
    DO_TEST("console-compat-auto",
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1282 1283

    DO_TEST("serial-vc-chardev",
1284
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1285
    DO_TEST("serial-pty-chardev",
1286
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1287
    DO_TEST("serial-dev-chardev",
1288
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1289
    DO_TEST("serial-dev-chardev-iobase",
1290
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1291
    DO_TEST("serial-file-chardev",
1292
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1293
            QEMU_CAPS_CHARDEV_FILE_APPEND);
1294
    DO_TEST("serial-unix-chardev",
1295
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1296
    DO_TEST("serial-tcp-chardev",
1297
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1298
    DO_TEST("serial-udp-chardev",
1299
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1300
    DO_TEST("serial-tcp-telnet-chardev",
1301
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1302 1303
    driver.config->chardevTLS = 1;
    DO_TEST("serial-tcp-tlsx509-chardev",
1304
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1305
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1306 1307
    driver.config->chardevTLSx509verify = 1;
    DO_TEST("serial-tcp-tlsx509-chardev-verify",
1308
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1309 1310
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
    driver.config->chardevTLSx509verify = 0;
1311
    DO_TEST("serial-tcp-tlsx509-chardev-notls",
1312
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1313
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1314 1315 1316 1317 1318 1319 1320 1321 1322
    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",
            QEMU_CAPS_OBJECT_SECRET,
1323
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1324 1325 1326 1327
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
# else
    DO_TEST_FAILURE("serial-tcp-tlsx509-secret-chardev",
                    QEMU_CAPS_OBJECT_SECRET,
1328
                    QEMU_CAPS_DEVICE_ISA_SERIAL,
1329 1330
                    QEMU_CAPS_OBJECT_TLS_CREDS_X509);
# endif
1331 1332
    driver.config->chardevTLS = 0;
    VIR_FREE(driver.config->chardevTLSx509certdir);
1333
    DO_TEST("serial-many-chardev",
1334 1335 1336
            QEMU_CAPS_DEVICE_ISA_SERIAL);
    DO_TEST("parallel-tcp-chardev", NONE);
    DO_TEST("parallel-parport-chardev", NONE);
1337
    DO_TEST("console-compat-chardev",
1338
            QEMU_CAPS_DEVICE_ISA_SERIAL);
M
Michal Privoznik 已提交
1339 1340
    DO_TEST("pci-serial-dev-chardev",
            QEMU_CAPS_DEVICE_PCI_SERIAL);
1341

1342 1343 1344 1345 1346 1347 1348
    DO_TEST("channel-guestfwd", NONE);
    DO_TEST("channel-virtio", NONE);
    DO_TEST("channel-virtio-state", NONE);
    DO_TEST("channel-virtio-auto", NONE);
    DO_TEST("channel-virtio-autoassign", NONE);
    DO_TEST("channel-virtio-autoadd", NONE);
    DO_TEST("console-virtio", NONE);
1349
    DO_TEST("console-virtio-many",
1350
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1351
    DO_TEST("console-virtio-s390",
1352 1353
            QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_VIRTIO_S390);
1354
    DO_TEST("console-virtio-ccw",
1355 1356
            QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_VIRTIO_CCW,
1357
            QEMU_CAPS_VIRTIO_S390);
1358
    DO_TEST("console-sclp",
1359
            QEMU_CAPS_VIRTIO_S390,
1360
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
1361
    DO_TEST("channel-spicevmc",
1362
            QEMU_CAPS_SPICE,
1363
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1364
    DO_TEST("channel-virtio-default",
1365
            QEMU_CAPS_SPICE);
1366
    DO_TEST("channel-virtio-unix", NONE);
1367

1368
    DO_TEST("smartcard-host",
1369
            QEMU_CAPS_CCID_EMULATED);
1370
    DO_TEST("smartcard-host-certificates",
1371
            QEMU_CAPS_CCID_EMULATED);
1372
    DO_TEST("smartcard-passthrough-tcp",
1373
            QEMU_CAPS_CCID_PASSTHRU);
1374
    DO_TEST("smartcard-passthrough-spicevmc",
1375
            QEMU_CAPS_CCID_PASSTHRU);
1376
    DO_TEST("smartcard-controller",
1377
            QEMU_CAPS_CCID_EMULATED);
1378

1379 1380 1381 1382 1383 1384 1385 1386
    DO_TEST("chardev-reconnect",
            QEMU_CAPS_CHARDEV_RECONNECT,
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD,
            QEMU_CAPS_CCID_PASSTHRU);
    DO_TEST_PARSE_ERROR("chardev-reconnect-invalid-timeout",
                        QEMU_CAPS_CHARDEV_RECONNECT);
1387 1388
    DO_TEST_PARSE_ERROR("chardev-reconnect-generated-path",
                        QEMU_CAPS_CHARDEV_RECONNECT);
1389

1390
    DO_TEST("usb-controller", NONE);
1391
    DO_TEST("usb-piix3-controller",
1392
            QEMU_CAPS_PIIX3_USB_UHCI);
1393
    DO_TEST("usb-ich9-ehci-addr",
1394
            QEMU_CAPS_ICH9_USB_EHCI1);
1395
    DO_TEST("input-usbmouse-addr", NONE);
1396
    DO_TEST("usb-ich9-companion",
1397
            QEMU_CAPS_ICH9_USB_EHCI1);
1398
    DO_TEST_PARSE_ERROR("usb-ich9-no-companion",
1399
            QEMU_CAPS_ICH9_USB_EHCI1);
1400
    DO_TEST("usb-ich9-autoassign",
1401
            QEMU_CAPS_ICH9_USB_EHCI1,
1402
            QEMU_CAPS_USB_HUB);
1403
    DO_TEST("usb-hub",
1404
            QEMU_CAPS_USB_HUB);
1405
    DO_TEST("usb-hub-autoadd",
1406
            QEMU_CAPS_USB_HUB);
1407
    DO_TEST("usb-hub-autoadd-deluxe",
1408
            QEMU_CAPS_USB_HUB);
J
Ján Tomko 已提交
1409
    DO_TEST_PARSE_ERROR("usb-hub-conflict",
1410
            QEMU_CAPS_USB_HUB);
1411
    DO_TEST_PARSE_ERROR("usb-hub-nonexistent",
1412
            QEMU_CAPS_USB_HUB);
J
Ján Tomko 已提交
1413
    DO_TEST("usb-port-missing",
1414
            QEMU_CAPS_USB_HUB);
1415
    DO_TEST_FAILURE("usb-bus-missing",
1416
                    QEMU_CAPS_USB_HUB);
1417
    DO_TEST("usb-ports",
1418
            QEMU_CAPS_USB_HUB);
1419
    DO_TEST_PARSE_ERROR("usb-ports-out-of-range",
1420
            QEMU_CAPS_USB_HUB);
1421
    DO_TEST("usb-port-autoassign",
1422
            QEMU_CAPS_USB_HUB);
1423
    DO_TEST("usb-redir",
1424 1425 1426
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
1427
            QEMU_CAPS_SPICE);
1428
    DO_TEST("usb-redir-boot",
1429 1430 1431 1432 1433
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE,
            QEMU_CAPS_BOOTINDEX,
1434
            QEMU_CAPS_USB_REDIR_BOOTINDEX);
1435
    DO_TEST("usb-redir-filter",
1436 1437 1438 1439
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE,
1440
            QEMU_CAPS_USB_REDIR_FILTER);
1441 1442
    DO_TEST("usb-redir-filter-version",
            QEMU_CAPS_USB_REDIR,
1443
            QEMU_CAPS_SPICE,
1444
            QEMU_CAPS_USB_REDIR_FILTER);
1445
    DO_TEST("usb1-usb2",
1446 1447 1448
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1);
1449 1450
    DO_TEST("usb-none", NONE);
    DO_TEST_PARSE_ERROR("usb-none-other", NONE);
1451 1452
    DO_TEST_PARSE_ERROR("usb-none-hub",
            QEMU_CAPS_USB_HUB);
1453
    DO_TEST_PARSE_ERROR("usb-none-usbtablet", NONE);
1454
    DO_TEST("usb-controller-default-q35",
1455
            QEMU_CAPS_DEVICE_IOH3420,
1456 1457 1458
            QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI);
1459
    DO_TEST_FAILURE("usb-controller-default-unavailable-q35",
1460
                    QEMU_CAPS_DEVICE_IOH3420,
1461
                    QEMU_CAPS_PCI_OHCI,
1462 1463
                    QEMU_CAPS_NEC_USB_XHCI);
    DO_TEST("usb-controller-explicit-q35",
1464
            QEMU_CAPS_DEVICE_IOH3420,
1465 1466 1467
            QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI);
1468
    DO_TEST_FAILURE("usb-controller-explicit-unavailable-q35",
1469
                    QEMU_CAPS_DEVICE_IOH3420,
1470
                    QEMU_CAPS_PCI_OHCI,
1471
                    QEMU_CAPS_PIIX3_USB_UHCI);
1472
    DO_TEST("usb-controller-xhci",
1473 1474 1475
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_NEC_USB_XHCI_PORTS);
1476
    DO_TEST("usb-xhci-autoassign",
1477 1478 1479
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_NEC_USB_XHCI_PORTS,
1480
            QEMU_CAPS_USB_HUB);
1481
    DO_TEST_PARSE_ERROR("usb-controller-xhci-limit",
1482 1483 1484
            QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_NEC_USB_XHCI_PORTS);
1485 1486 1487 1488
    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);
1489

1490 1491 1492
    DO_TEST("smbios", NONE);
    DO_TEST_PARSE_ERROR("smbios-date", NONE);
    DO_TEST_PARSE_ERROR("smbios-uuid-match", NONE);
1493

1494
    DO_TEST("watchdog", NONE);
1495
    DO_TEST("watchdog-device", NONE);
1496
    DO_TEST("watchdog-dump", NONE);
1497
    DO_TEST("watchdog-injectnmi", NONE);
1498
    DO_TEST("watchdog-diag288",
1499
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390);
1500 1501
    DO_TEST("balloon-device", NONE);
    DO_TEST("balloon-device-deflate",
1502
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1503
    DO_TEST("balloon-ccw-deflate",
1504
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1505
    DO_TEST("balloon-mmio-deflate",
J
Ján Tomko 已提交
1506
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1507
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1508
    DO_TEST("balloon-device-deflate-off",
1509
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1510 1511
    DO_TEST("balloon-device-auto", NONE);
    DO_TEST("balloon-device-period", NONE);
1512 1513
    DO_TEST("sound", NONE);
    DO_TEST("sound-device",
1514
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_HDA_MICRO,
1515 1516
            QEMU_CAPS_DEVICE_ICH9_INTEL_HDA,
            QEMU_CAPS_OBJECT_USB_AUDIO);
1517
    DO_TEST("fs9p", NONE);
1518 1519
    DO_TEST("fs9p-ccw",
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1520

1521
    DO_TEST("hostdev-usb-address", NONE);
1522
    DO_TEST("hostdev-usb-address-device", NONE);
1523
    DO_TEST("hostdev-usb-address-device-boot",
1524
            QEMU_CAPS_BOOTINDEX,
1525
            QEMU_CAPS_USB_HOST_BOOTINDEX);
J
Ján Tomko 已提交
1526
    DO_TEST("hostdev-pci-address", NONE);
1527
    DO_TEST("hostdev-pci-address-device", NONE);
1528 1529
    DO_TEST("hostdev-vfio",
            QEMU_CAPS_DEVICE_VFIO_PCI);
1530
    DO_TEST("hostdev-vfio-multidomain",
1531
            QEMU_CAPS_DEVICE_VFIO_PCI);
1532 1533 1534 1535 1536 1537
    DO_TEST("hostdev-mdev-precreated",
            QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST_PARSE_ERROR("hostdev-mdev-src-address-invalid",
            QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST_PARSE_ERROR("hostdev-mdev-invalid-target-address",
            QEMU_CAPS_DEVICE_VFIO_PCI);
1538
    DO_TEST("pci-rom", NONE);
1539
    DO_TEST("pci-rom-disabled", NONE);
1540
    DO_TEST("pci-rom-disabled-invalid", NONE);
1541

1542 1543 1544 1545
    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);
1546

A
Andrea Bolognani 已提交
1547 1548 1549
    DO_TEST_FULL("migrate-numa-unaligned", "stdio", 7, 0, 0, GIC_NONE,
                 QEMU_CAPS_NUMA,
                 QEMU_CAPS_OBJECT_MEMORY_RAM);
1550

1551
    DO_TEST("qemu-ns", NONE);
1552
    DO_TEST("qemu-ns-no-env", NONE);
1553
    DO_TEST("qemu-ns-alt", NONE);
1554

1555
    DO_TEST("smp", NONE);
1556

J
John Ferlan 已提交
1557
    DO_TEST("iothreads", QEMU_CAPS_OBJECT_IOTHREAD);
1558 1559
    DO_TEST("iothreads-ids", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-ids-partial", QEMU_CAPS_OBJECT_IOTHREAD);
1560
    DO_TEST_FAILURE("iothreads-nocap", NONE);
1561 1562
    DO_TEST("iothreads-disk", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-disk-virtio-ccw", QEMU_CAPS_OBJECT_IOTHREAD,
1563
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1564 1565 1566 1567 1568 1569
    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 已提交
1570

1571 1572
    DO_TEST("cpu-topology1", NONE);
    DO_TEST("cpu-topology2", NONE);
1573
    DO_TEST("cpu-topology3", NONE);
1574 1575 1576 1577 1578 1579 1580 1581
    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);
1582
    DO_TEST("cpu-numa1", NONE);
1583 1584
    DO_TEST("cpu-numa2", NONE);
    DO_TEST("cpu-numa-no-memory-element", NONE);
1585
    DO_TEST_PARSE_ERROR("cpu-numa3", NONE);
1586 1587
    DO_TEST_FAILURE("cpu-numa-disjoint", NONE);
    DO_TEST("cpu-numa-disjoint", QEMU_CAPS_NUMA);
1588 1589
    DO_TEST_FAILURE("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_RAM);
    DO_TEST_FAILURE("cpu-numa-memshared", NONE);
1590
    DO_TEST("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_FILE);
1591
    DO_TEST("cpu-host-model", NONE);
1592
    DO_TEST("cpu-host-model-vendor", NONE);
1593
    skipLegacyCPUs = true;
1594
    DO_TEST("cpu-host-model-fallback", NONE);
1595
    DO_TEST_FAILURE("cpu-host-model-nofallback", NONE);
1596
    skipLegacyCPUs = false;
A
Andrea Bolognani 已提交
1597 1598
    DO_TEST("cpu-host-passthrough", QEMU_CAPS_KVM);
    DO_TEST_FAILURE("cpu-qemu-host-passthrough", QEMU_CAPS_KVM);
1599

1600 1601
    qemuTestSetHostArch(driver.caps, VIR_ARCH_S390X);
    DO_TEST("cpu-s390-zEC12", QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1602 1603
    DO_TEST("cpu-s390-features", QEMU_CAPS_KVM, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION);
    DO_TEST_FAILURE("cpu-s390-features", QEMU_CAPS_KVM);
1604 1605
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);

1606
    qemuTestSetHostCPU(driver.caps, cpuHaswell);
1607 1608 1609 1610
    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);
1611
    DO_TEST("cpu-host-model-cmt", NONE);
1612
    DO_TEST("cpu-tsc-frequency", QEMU_CAPS_KVM);
1613
    qemuTestSetHostCPU(driver.caps, NULL);
1614

1615
    DO_TEST("encrypted-disk", NONE);
J
John Ferlan 已提交
1616
    DO_TEST("encrypted-disk-usage", NONE);
1617
# ifdef HAVE_GNUTLS_CIPHER_ENCRYPT
1618
    DO_TEST("luks-disks", QEMU_CAPS_OBJECT_SECRET);
1619
    DO_TEST("luks-disks-source", QEMU_CAPS_OBJECT_SECRET);
1620 1621
    DO_TEST_PARSE_ERROR("luks-disks-source-qcow2", QEMU_CAPS_OBJECT_SECRET);
    DO_TEST("luks-disks-source-qcow2", QEMU_CAPS_OBJECT_SECRET, QEMU_CAPS_QCOW2_LUKS);
1622 1623 1624
# else
    DO_TEST_FAILURE("luks-disks", QEMU_CAPS_OBJECT_SECRET);
# endif
1625
    DO_TEST_PARSE_ERROR("luks-disk-invalid", NONE);
1626
    DO_TEST_PARSE_ERROR("luks-disks-source-both", QEMU_CAPS_OBJECT_SECRET);
1627

1628 1629 1630 1631 1632 1633 1634 1635
    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);
1636
    DO_TEST("cputune-numatune",
1637
            QEMU_CAPS_KVM,
1638
            QEMU_CAPS_OBJECT_IOTHREAD,
1639 1640
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1641 1642 1643
    DO_TEST("vcpu-placement-static",
            QEMU_CAPS_KVM,
            QEMU_CAPS_OBJECT_IOTHREAD);
1644

1645
    DO_TEST("numatune-memory", NONE);
1646
    DO_TEST_PARSE_ERROR("numatune-memory-invalid-nodeset", NONE);
A
Andrea Bolognani 已提交
1647 1648 1649
    DO_TEST("numatune-memnode",
            QEMU_CAPS_NUMA,
            QEMU_CAPS_OBJECT_MEMORY_RAM);
1650 1651
    DO_TEST_FAILURE("numatune-memnode", NONE);

A
Andrea Bolognani 已提交
1652 1653 1654
    DO_TEST("numatune-memnode-no-memory",
            QEMU_CAPS_NUMA,
            QEMU_CAPS_OBJECT_MEMORY_RAM);
1655 1656
    DO_TEST_FAILURE("numatune-memnode-no-memory", NONE);

1657 1658
    DO_TEST("numatune-distances", QEMU_CAPS_NUMA, QEMU_CAPS_NUMA_DIST);

1659
    DO_TEST("numatune-auto-nodeset-invalid", NONE);
1660 1661
    DO_TEST("numatune-auto-prefer", QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1662 1663
    DO_TEST_FAILURE("numatune-static-nodeset-exceed-hostnode",
                    QEMU_CAPS_OBJECT_MEMORY_RAM);
1664 1665
    DO_TEST_PARSE_ERROR("numatune-memnode-nocpu", NONE);
    DO_TEST_PARSE_ERROR("numatune-memnodes-problematic", NONE);
1666 1667
    DO_TEST("numad", NONE);
    DO_TEST("numad-auto-vcpu-static-numatune", NONE);
1668
    DO_TEST_PARSE_ERROR("numad-auto-vcpu-static-numatune-no-nodeset", NONE);
1669 1670 1671
    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);
1672
    DO_TEST("blkdeviotune-max",
1673
            QEMU_CAPS_DRIVE_IOTUNE_MAX);
1674 1675 1676
    DO_TEST("blkdeviotune-group-num",
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_GROUP);
1677 1678 1679
    DO_TEST("blkdeviotune-max-length",
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_MAX_LENGTH);
1680

1681
    DO_TEST("multifunction-pci-device",
1682
            QEMU_CAPS_SCSI_LSI);
1683

1684
    DO_TEST("monitor-json", NONE);
1685

1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697
    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);
1698

1699
    DO_TEST("pseries-basic",
1700
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1701
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1702
    DO_TEST("pseries-vio",
1703
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1704
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1705
    DO_TEST("pseries-usb-default",
1706
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1707
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1708
            QEMU_CAPS_PIIX3_USB_UHCI,
1709
            QEMU_CAPS_PCI_OHCI);
1710
    DO_TEST("pseries-usb-multi",
1711
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1712
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1713
            QEMU_CAPS_PIIX3_USB_UHCI,
1714
            QEMU_CAPS_PCI_OHCI);
1715
    DO_TEST("pseries-vio-user-assigned",
1716
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1717 1718
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST_PARSE_ERROR("pseries-vio-address-clash", NONE);
1719 1720 1721
    DO_TEST("pseries-nvram",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_DEVICE_NVRAM);
1722
    DO_TEST("pseries-usb-kbd", QEMU_CAPS_PCI_OHCI,
1723
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1724
            QEMU_CAPS_DEVICE_USB_KBD,
1725
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1726
    DO_TEST("pseries-cpu-exact",
1727
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1728 1729
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST_PARSE_ERROR("pseries-no-parallel", NONE);
1730 1731

    qemuTestSetHostArch(driver.caps, VIR_ARCH_PPC64);
A
Andrea Bolognani 已提交
1732
    DO_TEST("pseries-cpu-compat", QEMU_CAPS_KVM,
1733
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1734
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1735 1736 1737
    DO_TEST("pseries-machine-max-cpu-compat",
            QEMU_CAPS_KVM,
            QEMU_CAPS_MACHINE_PSERIES_MAX_CPU_COMPAT,
1738
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
A
Andrea Bolognani 已提交
1739
    DO_TEST("pseries-cpu-le", QEMU_CAPS_KVM,
1740
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1741
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1742 1743 1744
    DO_TEST_FAILURE("pseries-cpu-compat-power9",
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
                    QEMU_CAPS_KVM);
1745 1746 1747

    qemuTestSetHostCPU(driver.caps, cpuPower9);
    DO_TEST("pseries-cpu-compat-power9",
1748
            QEMU_CAPS_KVM,
1749
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1750
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1751 1752
    qemuTestSetHostCPU(driver.caps, NULL);

1753 1754
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);

1755
    DO_TEST("pseries-panic-missing",
1756
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1757
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1758
    DO_TEST("pseries-panic-no-address",
1759
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1760
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1761
    DO_TEST_FAILURE("pseries-panic-address",
1762
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
1763 1764 1765 1766 1767

    DO_TEST("pseries-phb-simple",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
    DO_TEST("pseries-phb-default-missing",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
1768 1769 1770 1771 1772 1773
    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);
1774 1775 1776
    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);
1777

1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799
    DO_TEST("pseries-many-devices",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST("pseries-many-buses-1",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST("pseries-many-buses-2",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST("pseries-hostdevs-1",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST("pseries-hostdevs-2",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST("pseries-hostdevs-3",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VFIO_PCI);

1800
    DO_TEST("pseries-features",
1801
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1802
            QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);
1803
    DO_TEST_FAILURE("pseries-features",
1804
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
A
Andrea Bolognani 已提交
1805
    DO_TEST_PARSE_ERROR("pseries-features-invalid-machine", NONE);
1806

1807
    DO_TEST("pseries-serial-native",
1808
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1809 1810
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial+console-native",
1811
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1812 1813
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial-compat",
1814
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1815
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1816
    DO_TEST("pseries-serial-pci",
1817
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1818 1819
            QEMU_CAPS_DEVICE_PCI_SERIAL);
    DO_TEST("pseries-serial-usb",
1820
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1821 1822
            QEMU_CAPS_DEVICE_QEMU_XHCI,
            QEMU_CAPS_DEVICE_USB_SERIAL);
1823
    DO_TEST("pseries-console-native",
1824
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1825 1826
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-console-virtio",
1827
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
1828 1829
    DO_TEST_PARSE_ERROR("pseries-serial-invalid-machine", NONE);

1830
    DO_TEST("mach-virt-serial-native",
1831
            QEMU_CAPS_DEVICE_PL011);
1832
    DO_TEST("mach-virt-serial+console-native",
1833
            QEMU_CAPS_DEVICE_PL011);
1834
    DO_TEST("mach-virt-serial-compat",
1835
            QEMU_CAPS_DEVICE_PL011);
1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847
    DO_TEST("mach-virt-serial-pci",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_SERIAL);
    DO_TEST("mach-virt-serial-usb",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT,
            QEMU_CAPS_DEVICE_QEMU_XHCI,
            QEMU_CAPS_DEVICE_USB_SERIAL);
    DO_TEST("mach-virt-console-native",
1848 1849
            QEMU_CAPS_DEVICE_PL011);
    DO_TEST("mach-virt-console-virtio", NONE);
1850 1851
    DO_TEST_PARSE_ERROR("mach-virt-serial-invalid-machine", NONE);

1852
    DO_TEST("disk-ide-drive-split",
1853
            QEMU_CAPS_IDE_CD);
1854
    DO_TEST("disk-ide-wwn",
1855
            QEMU_CAPS_IDE_CD,
1856
            QEMU_CAPS_IDE_DRIVE_WWN);
1857

1858
    DO_TEST("disk-geometry", NONE);
V
Viktor Mihajlovski 已提交
1859 1860
    DO_TEST("disk-blockio",
            QEMU_CAPS_IDE_CD, QEMU_CAPS_BLOCKIO);
1861

1862
    DO_TEST("video-device-pciaddr-default",
1863 1864
            QEMU_CAPS_KVM,
            QEMU_CAPS_VNC,
1865
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1866
            QEMU_CAPS_DEVICE_QXL);
1867
    DO_TEST("video-vga-nodevice", QEMU_CAPS_DEVICE_VGA);
1868
    DO_TEST("video-vga-device", QEMU_CAPS_DEVICE_VGA,
1869
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1870
    DO_TEST("video-vga-device-vgamem", QEMU_CAPS_DEVICE_VGA,
1871
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_VGA_VGAMEM);
1872
    DO_TEST("video-qxl-nodevice", QEMU_CAPS_DEVICE_QXL);
1873
    DO_TEST("video-qxl-device",
1874
            QEMU_CAPS_DEVICE_QXL,
1875
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1876
    DO_TEST("video-qxl-device-vgamem",
1877
            QEMU_CAPS_DEVICE_QXL,
1878
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1879 1880
            QEMU_CAPS_QXL_VGAMEM);
    DO_TEST("video-qxl-sec-device",
1881
            QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1882
    DO_TEST("video-qxl-sec-device-vgamem",
1883 1884
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1885
            QEMU_CAPS_QXL_VGAMEM);
1886 1887 1888
    DO_TEST("video-qxl-heads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
1889
            QEMU_CAPS_QXL_MAX_OUTPUTS);
1890 1891 1892
    DO_TEST("video-vga-qxl-heads",
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_QXL_MAX_OUTPUTS);
1893 1894 1895
    DO_TEST("video-qxl-noheads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
1896
            QEMU_CAPS_QXL_MAX_OUTPUTS);
M
Marc-André Lureau 已提交
1897
    DO_TEST("video-virtio-gpu-device",
1898
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
M
Marc-André Lureau 已提交
1899
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1900
    DO_TEST("video-virtio-gpu-virgl",
1901
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
1902
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
1903
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1904 1905
    DO_TEST("video-virtio-gpu-spice-gl",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
1906
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
1907 1908
            QEMU_CAPS_SPICE,
            QEMU_CAPS_SPICE_GL,
1909
            QEMU_CAPS_SPICE_RENDERNODE,
1910
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1911 1912 1913
    DO_TEST("video-virtio-gpu-secondary",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1914 1915 1916
    DO_TEST("video-virtio-vga",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIRTIO_VGA,
1917 1918
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_GPU_MAX_OUTPUTS);
1919
    DO_TEST_PARSE_ERROR("video-invalid", NONE);
1920

1921 1922
    DO_TEST("virtio-rng-default",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
1923
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1924 1925
    DO_TEST("virtio-rng-random",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
1926
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1927 1928
    DO_TEST("virtio-rng-egd",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
1929
            QEMU_CAPS_OBJECT_RNG_EGD);
1930 1931 1932 1933
    DO_TEST("virtio-rng-multiple",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1934
    DO_TEST_PARSE_ERROR("virtio-rng-egd-crash",
1935 1936
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD);
1937
    DO_TEST("virtio-rng-ccw",
1938 1939 1940 1941
            QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
1942
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1943

1944
    DO_TEST("s390-allow-bogus-usb-none",
1945 1946 1947 1948
            QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1949
    DO_TEST("s390-allow-bogus-usb-controller",
1950 1951 1952 1953
            QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1954

1955
    DO_TEST("s390-panic-no-address",
1956 1957
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390);
1958
    DO_TEST_FAILURE("s390-panic-address",
1959 1960
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390);
1961
    DO_TEST("s390-panic-missing",
1962 1963
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390);
1964 1965 1966
    DO_TEST_PARSE_ERROR("s390-no-parallel",
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390);
1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979
    DO_TEST("s390-serial",
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
    DO_TEST("s390-serial-2",
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE,
            QEMU_CAPS_DEVICE_SCLPLMCONSOLE);
    DO_TEST("s390-serial-console",
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
1980

1981
    DO_TEST("ppc-dtb",
J
Ján Tomko 已提交
1982
            QEMU_CAPS_KVM);
1983 1984
    DO_TEST("ppce500-serial",
            QEMU_CAPS_KVM);
O
Olivia Yin 已提交
1985

1986
    DO_TEST("tpm-passthrough",
1987
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
1988 1989
    DO_TEST("tpm-passthrough-crb",
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_CRB);
1990
    DO_TEST_PARSE_ERROR("tpm-no-backend-invalid",
1991
                        QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
1992

1993

1994 1995 1996 1997
    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);
1998

1999 2000 2001 2002 2003 2004
    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,
2005
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
2006 2007
    DO_TEST("pci-autoadd-idx",
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2008 2009
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("pci-autofill-addr", QEMU_CAPS_DEVICE_CIRRUS_VGA);
2010
    DO_TEST("pci-many",
2011
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
2012
    DO_TEST("pci-bridge-many-disks",
2013
            QEMU_CAPS_DEVICE_PCI_BRIDGE);
L
Laine Stump 已提交
2014
    DO_TEST("pcie-root",
2015 2016 2017 2018
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL);
2019
    DO_TEST("q35",
2020
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2021
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2022
            QEMU_CAPS_DEVICE_IOH3420,
2023
            QEMU_CAPS_ICH9_AHCI,
2024
            QEMU_CAPS_ICH9_USB_EHCI1,
2025
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2026
            QEMU_CAPS_DEVICE_QXL);
2027 2028 2029 2030 2031 2032 2033 2034
    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);
2035
    DO_TEST("q35-pm-disable",
2036
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2037
            QEMU_CAPS_DEVICE_IOH3420,
2038 2039 2040 2041
            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",
2042
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2043
            QEMU_CAPS_DEVICE_IOH3420,
2044 2045
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4);
2046
    DO_TEST("q35-usb2",
2047
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2048
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2049
            QEMU_CAPS_DEVICE_IOH3420,
2050
            QEMU_CAPS_ICH9_AHCI,
2051
            QEMU_CAPS_ICH9_USB_EHCI1,
2052
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2053
            QEMU_CAPS_DEVICE_QXL);
2054
    DO_TEST("q35-usb2-multi",
2055
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2056
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2057
            QEMU_CAPS_DEVICE_IOH3420,
2058
            QEMU_CAPS_ICH9_AHCI,
2059
            QEMU_CAPS_ICH9_USB_EHCI1,
2060
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2061
            QEMU_CAPS_DEVICE_QXL);
2062
    DO_TEST("q35-usb2-reorder",
2063
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2064
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2065
            QEMU_CAPS_DEVICE_IOH3420,
2066
            QEMU_CAPS_ICH9_AHCI,
2067
            QEMU_CAPS_ICH9_USB_EHCI1,
2068
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2069
            QEMU_CAPS_DEVICE_QXL);
2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087
    /* verify that devices with pcie capability are assigned to a pcie slot */
    DO_TEST("q35-pcie",
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_ICH9_USB_EHCI1,
2088
            QEMU_CAPS_NEC_USB_XHCI,
2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
    /* same XML as q35-pcie, but don't set
     * QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY, so virtio devices should
     * be assigned to legacy pci slots
     */
    DO_TEST("q35-virtio-pci",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
    /* same as q35-pcie, but all PCI controllers are added automatically */
    DO_TEST("q35-pcie-autoadd",
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
    DO_TEST("q35-default-devices-only",
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
    DO_TEST("q35-multifunction",
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
2155 2156 2157 2158 2159
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
2160 2161 2162 2163 2164 2165 2166 2167
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_ICH9_USB_EHCI1,
2168
            QEMU_CAPS_NEC_USB_XHCI,
2169
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2170 2171
    DO_TEST("q35-virt-manager-basic",
            QEMU_CAPS_KVM,
2172
            QEMU_CAPS_MACHINE_VMPORT_OPT,
2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196
            QEMU_CAPS_ICH9_DISABLE_S3,
            QEMU_CAPS_ICH9_DISABLE_S4,
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_DEVICE_ICH9_INTEL_HDA,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_SPICE,
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_HDA_DUPLEX,
2197
            QEMU_CAPS_DEVICE_ISA_SERIAL,
2198
            QEMU_CAPS_USB_REDIR);
2199 2200

    /* Test automatic and manual setting of pcie-root-port attributes */
2201 2202
    DO_TEST("pcie-root-port",
            QEMU_CAPS_DEVICE_IOH3420,
2203
            QEMU_CAPS_ICH9_AHCI,
2204
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2205
            QEMU_CAPS_DEVICE_QXL);
2206 2207 2208 2209 2210 2211

    /* 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,
2212
            QEMU_CAPS_DEVICE_IOH3420);
2213
    DO_TEST("pcie-root-port-model-ioh3420",
2214
            QEMU_CAPS_DEVICE_IOH3420);
2215

2216 2217 2218 2219 2220 2221 2222
    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,
2223
            QEMU_CAPS_ICH9_USB_EHCI1,
2224
            QEMU_CAPS_NEC_USB_XHCI);
2225 2226 2227 2228 2229 2230 2231
    /* 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);
2232

2233
    DO_TEST_PARSE_ERROR("q35-wrong-root",
2234
            QEMU_CAPS_DEVICE_IOH3420,
2235
            QEMU_CAPS_ICH9_AHCI,
2236
            QEMU_CAPS_ICH9_USB_EHCI1,
2237
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2238
            QEMU_CAPS_DEVICE_QXL);
2239
    DO_TEST_PARSE_ERROR("440fx-wrong-root", NONE);
2240
    DO_TEST_PARSE_ERROR("440fx-ide-address-conflict", NONE);
2241

2242
    DO_TEST_PARSE_ERROR("pcie-root-port-too-many",
2243
            QEMU_CAPS_DEVICE_IOH3420,
2244
            QEMU_CAPS_ICH9_AHCI,
2245
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2246
            QEMU_CAPS_DEVICE_QXL);
2247

2248 2249 2250
    DO_TEST("pcie-switch-upstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
2251
            QEMU_CAPS_ICH9_AHCI,
2252
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2253
            QEMU_CAPS_DEVICE_QXL);
2254 2255 2256 2257
    DO_TEST("pcie-switch-downstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
2258
            QEMU_CAPS_ICH9_AHCI,
2259
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2260
            QEMU_CAPS_DEVICE_QXL);
2261

2262 2263 2264 2265 2266 2267
    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);
2268 2269
    DO_TEST_PARSE_ERROR("pci-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_PXB);
2270

2271 2272 2273 2274 2275 2276 2277 2278 2279 2280
    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);
2281 2282 2283
    DO_TEST_PARSE_ERROR("pcie-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_IOH3420,
                        QEMU_CAPS_DEVICE_PXB_PCIE);
2284

2285
    DO_TEST("hostdev-scsi-lsi",
2286 2287
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2288
    DO_TEST("hostdev-scsi-virtio-scsi",
2289 2290
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2291
    DO_TEST("hostdev-scsi-readonly",
J
Ján Tomko 已提交
2292
            QEMU_CAPS_VIRTIO_SCSI,
O
Osier Yang 已提交
2293
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_SCSI_GENERIC);
2294
    DO_TEST("hostdev-scsi-virtio-scsi",
2295 2296 2297
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC,
            QEMU_CAPS_DEVICE_SCSI_GENERIC_BOOTINDEX);
2298
    DO_TEST("hostdev-scsi-lsi-iscsi",
J
John Ferlan 已提交
2299 2300
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2301
    DO_TEST("hostdev-scsi-lsi-iscsi-auth",
J
John Ferlan 已提交
2302 2303
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2304
    DO_TEST("hostdev-scsi-virtio-iscsi",
J
John Ferlan 已提交
2305 2306
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2307
    DO_TEST("hostdev-scsi-virtio-iscsi-auth",
J
John Ferlan 已提交
2308 2309
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2310 2311 2312 2313 2314 2315
# 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
2316 2317 2318 2319 2320 2321
    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);
2322 2323 2324 2325 2326 2327
    DO_TEST("hostdev-scsi-vhost-scsi-pcie",
            QEMU_CAPS_KVM,
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_VHOST_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC,
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT,
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY);
2328

2329
    DO_TEST("mlock-on", QEMU_CAPS_REALTIME_MLOCK);
2330
    DO_TEST_FAILURE("mlock-on", NONE);
2331
    DO_TEST("mlock-off", QEMU_CAPS_REALTIME_MLOCK);
2332 2333
    DO_TEST("mlock-unsupported", NONE);

2334 2335 2336 2337
    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);
2338

2339
    DO_TEST("hotplug-base",
2340
            QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_SCSI);
2341

2342 2343
    DO_TEST("pcihole64", QEMU_CAPS_I440FX_PCI_HOLE64_SIZE);
    DO_TEST_FAILURE("pcihole64-none", NONE);
2344
    DO_TEST("pcihole64-q35",
2345
            QEMU_CAPS_DEVICE_IOH3420,
2346
            QEMU_CAPS_ICH9_AHCI,
2347
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2348
            QEMU_CAPS_DEVICE_QXL,
2349 2350
            QEMU_CAPS_Q35_PCI_HOLE64_SIZE);

J
Ján Tomko 已提交
2351 2352
    DO_TEST("arm-vexpressa9-nodevs", NONE);
    DO_TEST("arm-vexpressa9-basic", NONE);
2353
    DO_TEST("arm-vexpressa9-virtio",
2354
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2355
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2356
    DO_TEST("arm-virt-virtio",
2357
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2358
            QEMU_CAPS_DEVICE_PL011,
2359
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2360

2361
    DO_TEST("aarch64-virt-virtio",
2362
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2363
            QEMU_CAPS_DEVICE_PL011,
2364
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2365 2366 2367 2368 2369 2370

    /* 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",
2371
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
2372 2373 2374
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2375
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2376
            QEMU_CAPS_DEVICE_IOH3420,
2377
            QEMU_CAPS_DEVICE_PL011,
2378
            QEMU_CAPS_VIRTIO_SCSI);
2379
    DO_TEST("aarch64-virt-2.6-virtio-pci-default",
2380
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2381 2382
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2383
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2384
            QEMU_CAPS_DEVICE_PL011,
2385
            QEMU_CAPS_DEVICE_IOH3420);
2386 2387 2388
    /* Example of using virtio-pci with no explicit PCI controller
       but with manual PCI addresses */
    DO_TEST("aarch64-virtio-pci-manual-addresses",
2389
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2390 2391
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
2392 2393 2394
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_VIRTIO_SCSI);
2395
    DO_TEST("aarch64-video-virtio-gpu-pci",
2396
            QEMU_CAPS_OBJECT_GPEX,
2397
            QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_IOH3420,
2398
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2399
            QEMU_CAPS_DEVICE_VIRTIO_GPU, QEMU_CAPS_BOOTINDEX);
2400
    DO_TEST("aarch64-video-default",
2401
            QEMU_CAPS_OBJECT_GPEX,
2402
            QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_IOH3420,
2403
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2404 2405
            QEMU_CAPS_DEVICE_VIRTIO_GPU, QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_VNC);
2406
    DO_TEST("aarch64-aavmf-virtio-mmio",
2407
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2408
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2409 2410
    DO_TEST("aarch64-virt-default-nic",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
2411
    qemuTestSetHostArch(driver.caps, VIR_ARCH_AARCH64);
2412
    DO_TEST("aarch64-cpu-passthrough",
2413
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2414
            QEMU_CAPS_KVM);
2415
    DO_TEST_GIC("aarch64-gic-none", GIC_NONE,
2416
            QEMU_CAPS_KVM,
2417
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2418
    DO_TEST_GIC("aarch64-gic-none-v2", GIC_V2,
2419
            QEMU_CAPS_KVM,
2420 2421
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-none-v3", GIC_V3,
2422
            QEMU_CAPS_KVM,
2423
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2424
    DO_TEST_GIC("aarch64-gic-none-both", GIC_BOTH,
2425
            QEMU_CAPS_KVM,
2426
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2427 2428
    DO_TEST_GIC("aarch64-gic-none-tcg", GIC_BOTH,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2429
    DO_TEST_GIC("aarch64-gic-default", GIC_NONE,
2430
            QEMU_CAPS_KVM,
2431
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
A
Andrea Bolognani 已提交
2432
    DO_TEST_GIC("aarch64-gic-default-v2", GIC_V2,
2433
            QEMU_CAPS_KVM,
2434
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
A
Andrea Bolognani 已提交
2435
    DO_TEST_GIC("aarch64-gic-default-v3", GIC_V3,
2436
            QEMU_CAPS_KVM,
2437
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
A
Andrea Bolognani 已提交
2438
    DO_TEST_GIC("aarch64-gic-default-both", GIC_BOTH,
2439
            QEMU_CAPS_KVM,
2440 2441
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v2", GIC_NONE,
2442
            QEMU_CAPS_KVM,
2443 2444
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v2", GIC_V2,
2445
            QEMU_CAPS_KVM,
2446 2447
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v2", GIC_V3,
2448
            QEMU_CAPS_KVM,
2449
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2450
    DO_TEST_GIC("aarch64-gic-v2", GIC_BOTH,
2451
            QEMU_CAPS_KVM,
2452
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2453
    DO_TEST_FAILURE("aarch64-gic-v3",
2454
            QEMU_CAPS_KVM, NONE);
2455
    DO_TEST_GIC("aarch64-gic-v3", GIC_NONE,
2456
            QEMU_CAPS_KVM,
2457 2458
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v3", GIC_V2,
2459
            QEMU_CAPS_KVM,
2460 2461
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v3", GIC_V3,
2462
            QEMU_CAPS_KVM,
2463 2464
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-v3", GIC_BOTH,
2465
            QEMU_CAPS_KVM,
2466
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2467
    DO_TEST_FAILURE("aarch64-gic-host",
2468
            QEMU_CAPS_KVM, NONE);
2469
    DO_TEST_GIC("aarch64-gic-host", GIC_NONE,
2470
            QEMU_CAPS_KVM,
2471 2472
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-host", GIC_V2,
2473
            QEMU_CAPS_KVM,
2474 2475
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-host", GIC_V3,
2476
            QEMU_CAPS_KVM,
2477 2478
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_GIC("aarch64-gic-host", GIC_BOTH,
2479
            QEMU_CAPS_KVM,
2480
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2481
    DO_TEST_PARSE_ERROR("aarch64-gic-invalid",
2482
            QEMU_CAPS_KVM,
2483
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2484
    DO_TEST_PARSE_ERROR("aarch64-gic-not-virt",
2485
                        QEMU_CAPS_KVM,
2486 2487
                        QEMU_CAPS_MACH_VIRT_GIC_VERSION);
    DO_TEST_PARSE_ERROR("aarch64-gic-not-arm",
2488
                        QEMU_CAPS_KVM,
2489
                        QEMU_CAPS_MACH_VIRT_GIC_VERSION);
2490
    DO_TEST("aarch64-kvm-32-on-64",
2491
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2492
            QEMU_CAPS_DEVICE_PL011,
A
Andrea Bolognani 已提交
2493
            QEMU_CAPS_KVM, QEMU_CAPS_CPU_AARCH64_OFF);
2494
    DO_TEST_FAILURE("aarch64-kvm-32-on-64",
2495
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
A
Andrea Bolognani 已提交
2496
            QEMU_CAPS_KVM);
2497 2498 2499 2500 2501 2502 2503
    DO_TEST("aarch64-pci-serial",
            QEMU_CAPS_DEVICE_PCI_SERIAL,
            QEMU_CAPS_CHARDEV_LOGFILE,
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT);
2504 2505 2506 2507
    DO_TEST("aarch64-traditional-pci",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2508
            QEMU_CAPS_DEVICE_PCIE_PCI_BRIDGE,
2509 2510
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_SERIAL);
2511 2512 2513 2514 2515 2516 2517

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

2518
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);
2519

2520
    DO_TEST("kvm-pit-delay", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2521
    DO_TEST("kvm-pit-discard", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2522

2523 2524 2525 2526
    DO_TEST("panic",
            QEMU_CAPS_DEVICE_PANIC);
    DO_TEST("panic-double",
            QEMU_CAPS_DEVICE_PANIC);
H
Hu Tao 已提交
2527

2528 2529
    DO_TEST("panic-no-address",
            QEMU_CAPS_DEVICE_PANIC);
2530

2531 2532
    DO_TEST("fips-enabled", QEMU_CAPS_ENABLE_FIPS);

J
Ján Tomko 已提交
2533
    DO_TEST("shmem", QEMU_CAPS_DEVICE_IVSHMEM);
2534 2535 2536
    DO_TEST("shmem-plain-doorbell", QEMU_CAPS_DEVICE_IVSHMEM,
            QEMU_CAPS_DEVICE_IVSHMEM_PLAIN,
            QEMU_CAPS_DEVICE_IVSHMEM_DOORBELL);
2537
    DO_TEST_FAILURE("shmem", NONE);
J
Ján Tomko 已提交
2538
    DO_TEST_FAILURE("shmem-invalid-size",
2539
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2540
    DO_TEST_FAILURE("shmem-invalid-address",
2541
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2542
    DO_TEST_FAILURE("shmem-small-size",
2543
                    QEMU_CAPS_DEVICE_IVSHMEM);
2544
    DO_TEST_PARSE_ERROR("shmem-msi-only", NONE);
A
Andrea Bolognani 已提交
2545
    DO_TEST("cpu-host-passthrough-features", QEMU_CAPS_KVM);
2546

2547
    DO_TEST_FAILURE("memory-align-fail", NONE);
2548
    DO_TEST_FAILURE("memory-hotplug-nonuma", QEMU_CAPS_DEVICE_PC_DIMM);
M
Michal Privoznik 已提交
2549
    DO_TEST("memory-hotplug", NONE);
2550
    DO_TEST("memory-hotplug", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA);
2551
    DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2552
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2553
    DO_TEST("memory-hotplug-dimm-addr", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2554
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2555
    DO_TEST("memory-hotplug-ppc64-nonuma", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2556
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2557
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2558 2559
    DO_TEST("memory-hotplug-nvdimm",
            QEMU_CAPS_DEVICE_NVDIMM,
M
Michal Privoznik 已提交
2560
            QEMU_CAPS_NUMA, QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2561 2562
    DO_TEST("memory-hotplug-nvdimm-access",
            QEMU_CAPS_DEVICE_NVDIMM,
2563
            QEMU_CAPS_NUMA, QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2564 2565
    DO_TEST("memory-hotplug-nvdimm-label",
            QEMU_CAPS_DEVICE_NVDIMM,
2566
            QEMU_CAPS_NUMA, QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2567

2568
    DO_TEST("machine-aeskeywrap-on-caps",
2569
            QEMU_CAPS_AES_KEY_WRAP,
2570
            QEMU_CAPS_DEA_KEY_WRAP,
2571
            QEMU_CAPS_VIRTIO_SCSI,
2572
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2573
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps",
2574
                    QEMU_CAPS_VIRTIO_SCSI,
2575 2576 2577 2578
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps", NONE);

    DO_TEST("machine-aeskeywrap-on-cap",
2579
            QEMU_CAPS_AES_KEY_WRAP,
2580
            QEMU_CAPS_VIRTIO_SCSI,
2581
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2582
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap",
2583
                    QEMU_CAPS_VIRTIO_SCSI,
2584 2585 2586 2587
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap", NONE);

    DO_TEST("machine-aeskeywrap-off-caps",
2588
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2589
            QEMU_CAPS_VIRTIO_SCSI,
2590
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2591
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps",
2592
                    QEMU_CAPS_VIRTIO_SCSI,
2593 2594 2595 2596
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", NONE);

    DO_TEST("machine-aeskeywrap-off-cap",
2597
            QEMU_CAPS_AES_KEY_WRAP,
2598
            QEMU_CAPS_VIRTIO_SCSI,
2599
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2600
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap",
2601
                    QEMU_CAPS_VIRTIO_SCSI,
2602 2603 2604 2605
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap", NONE);

    DO_TEST("machine-deakeywrap-on-caps",
2606
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2607
            QEMU_CAPS_VIRTIO_SCSI,
2608
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2609
    DO_TEST_FAILURE("machine-deakeywrap-on-caps",
2610
                    QEMU_CAPS_VIRTIO_SCSI,
2611 2612 2613 2614
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", NONE);

    DO_TEST("machine-deakeywrap-on-cap",
2615
            QEMU_CAPS_DEA_KEY_WRAP,
2616
            QEMU_CAPS_VIRTIO_SCSI,
2617
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2618
    DO_TEST_FAILURE("machine-deakeywrap-on-cap",
2619
                    QEMU_CAPS_VIRTIO_SCSI,
2620 2621 2622 2623
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-on-cap", NONE);

    DO_TEST("machine-deakeywrap-off-caps",
2624
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2625
            QEMU_CAPS_VIRTIO_SCSI,
2626
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2627
    DO_TEST_FAILURE("machine-deakeywrap-off-caps",
2628
                    QEMU_CAPS_VIRTIO_SCSI,
2629 2630 2631 2632
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", NONE);

    DO_TEST("machine-deakeywrap-off-cap",
2633
            QEMU_CAPS_DEA_KEY_WRAP,
2634
            QEMU_CAPS_VIRTIO_SCSI,
2635
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2636
    DO_TEST_FAILURE("machine-deakeywrap-off-cap",
2637
                    QEMU_CAPS_VIRTIO_SCSI,
2638 2639 2640 2641
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-cap", NONE);

    DO_TEST("machine-keywrap-none-caps",
2642
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2643
            QEMU_CAPS_VIRTIO_SCSI,
2644 2645
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST("machine-keywrap-none",
2646
            QEMU_CAPS_VIRTIO_SCSI,
2647
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2648

2649
    DO_TEST("machine-loadparm-s390",
2650 2651
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_LOADPARM);
2652
    DO_TEST("machine-loadparm-net-s390",
2653 2654 2655
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_LOADPARM);
    DO_TEST("machine-loadparm-multiple-disks-nets-s390",
2656
            QEMU_CAPS_VIRTIO_CCW,
2657 2658 2659
            QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-char-invalid",
2660
                        QEMU_CAPS_VIRTIO_CCW,
2661 2662 2663
                        QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_BOOTINDEX,
                        QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-len-invalid",
2664
                        QEMU_CAPS_VIRTIO_CCW,
2665 2666 2667
                        QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_BOOTINDEX,
                        QEMU_CAPS_LOADPARM);

J
Jiri Denemark 已提交
2668 2669 2670 2671 2672 2673 2674
    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);

2675
    DO_TEST("virtio-input", QEMU_CAPS_VIRTIO_KEYBOARD,
2676
            QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET);
2677
    DO_TEST("virtio-input-passthrough", QEMU_CAPS_VIRTIO_INPUT_HOST);
2678

2679
    DO_TEST("ppc64-usb-controller",
2680
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2681
            QEMU_CAPS_PCI_OHCI);
2682
    DO_TEST("ppc64-usb-controller-legacy",
2683
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2684
            QEMU_CAPS_PIIX3_USB_UHCI);
2685 2686
    DO_TEST_FULL("ppc64-usb-controller-qemu-xhci", NULL, -1, 0,
                 VIR_DOMAIN_DEF_PARSE_ABI_UPDATE, GIC_NONE,
2687
                 QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2688 2689 2690 2691 2692 2693 2694
                 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);
2695

2696 2697 2698 2699
    DO_TEST("aarch64-usb-controller-nec-xhci",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_NEC_USB_XHCI);

2700 2701 2702 2703
    DO_TEST_PARSE_FLAGS_ERROR("missing-machine",
                              VIR_DOMAIN_DEF_PARSE_SKIP_OSTYPE_CHECKS,
                              NONE);

2704 2705 2706 2707 2708 2709 2710 2711
    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 已提交
2712 2713
    DO_TEST("debug-threads", QEMU_CAPS_NAME_DEBUG_THREADS);

2714
    DO_TEST("master-key", QEMU_CAPS_OBJECT_SECRET);
2715
    DO_TEST("usb-long-port-path",
J
Ján Tomko 已提交
2716
            QEMU_CAPS_USB_HUB);
2717
    DO_TEST_PARSE_ERROR("usb-too-long-port-path-invalid",
2718
                        QEMU_CAPS_USB_HUB);
2719

2720
    DO_TEST("acpi-table", NONE);
2721
    DO_TEST("intel-iommu",
2722
            QEMU_CAPS_DEVICE_INTEL_IOMMU);
2723 2724
    DO_TEST("intel-iommu-machine",
            QEMU_CAPS_MACHINE_IOMMU);
J
Ján Tomko 已提交
2725
    DO_TEST("intel-iommu-caching-mode",
2726 2727
            QEMU_CAPS_MACHINE_KERNEL_IRQCHIP,
            QEMU_CAPS_MACHINE_KERNEL_IRQCHIP_SPLIT,
2728 2729 2730 2731 2732 2733 2734 2735
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_DEVICE_INTEL_IOMMU,
            QEMU_CAPS_INTEL_IOMMU_INTREMAP,
            QEMU_CAPS_INTEL_IOMMU_CACHING_MODE);
2736 2737 2738 2739 2740 2741
    DO_TEST("intel-iommu-eim",
            QEMU_CAPS_MACHINE_KERNEL_IRQCHIP,
            QEMU_CAPS_MACHINE_KERNEL_IRQCHIP_SPLIT,
            QEMU_CAPS_INTEL_IOMMU_INTREMAP,
            QEMU_CAPS_INTEL_IOMMU_EIM,
            QEMU_CAPS_DEVICE_INTEL_IOMMU);
2742 2743 2744 2745 2746 2747
    DO_TEST("intel-iommu-device-iotlb",
            QEMU_CAPS_MACHINE_KERNEL_IRQCHIP,
            QEMU_CAPS_MACHINE_KERNEL_IRQCHIP_SPLIT,
            QEMU_CAPS_INTEL_IOMMU_INTREMAP,
            QEMU_CAPS_INTEL_IOMMU_DEVICE_IOTLB,
            QEMU_CAPS_DEVICE_INTEL_IOMMU);
2748

2749
    DO_TEST("cpu-hotplug-startup", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);
2750 2751 2752
    DO_TEST_PARSE_ERROR("cpu-hotplug-granularity",
                        QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);

2753 2754 2755 2756 2757 2758 2759
    DO_TEST("virtio-options", QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
2760 2761 2762
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_PCI_IOMMU_PLATFORM,
            QEMU_CAPS_VIRTIO_PCI_ATS);
2763

J
Ján Tomko 已提交
2764
    DO_TEST("fd-memory-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
2765
            QEMU_CAPS_KVM);
J
Ján Tomko 已提交
2766
    DO_TEST("fd-memory-numa-topology2", QEMU_CAPS_OBJECT_MEMORY_FILE,
2767
            QEMU_CAPS_KVM);
J
Ján Tomko 已提交
2768
    DO_TEST("fd-memory-numa-topology3", QEMU_CAPS_OBJECT_MEMORY_FILE,
2769 2770
            QEMU_CAPS_KVM);

J
Ján Tomko 已提交
2771
    DO_TEST("fd-memory-no-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
2772 2773
            QEMU_CAPS_KVM);

2774 2775 2776 2777 2778 2779 2780 2781
    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);

2782 2783 2784 2785 2786 2787 2788 2789 2790
    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 已提交
2791
    DO_TEST("vmcoreinfo", QEMU_CAPS_DEVICE_VMCOREINFO);
2792

2793 2794 2795
    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,
2796
            QEMU_CAPS_DEVICE_ISA_SERIAL,
2797 2798
            QEMU_CAPS_HDA_DUPLEX,
            QEMU_CAPS_CCID_EMULATED);
2799
    DO_TEST("user-aliases2", QEMU_CAPS_DEVICE_IOH3420, QEMU_CAPS_ICH9_AHCI);
2800 2801
    DO_TEST("user-aliases-usb", QEMU_CAPS_KVM,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4,
2802
            QEMU_CAPS_ICH9_USB_EHCI1);
2803

2804 2805 2806 2807
    DO_TEST("disk-virtio-scsi-reservations",
            QEMU_CAPS_DRIVE_BOOT, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_BLOCK, QEMU_CAPS_PR_MANAGER_HELPER);

2808 2809 2810 2811 2812 2813
    /* Test disks with format probing enabled for legacy reasons.
     * New tests should not go in this section. */
    driver.config->allowDiskFormatProbing = true;
    DO_TEST("disk-many-format-probing", QEMU_CAPS_DRIVE_BOOT);
    driver.config->allowDiskFormatProbing = false;

2814 2815 2816 2817 2818 2819 2820
    DO_TEST("video-virtio-gpu-ccw", QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_GPU_MAX_OUTPUTS,
            QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_VIRTIO_GPU_CCW);

2821 2822 2823 2824 2825 2826 2827 2828
    DO_TEST("input-virtio-ccw", QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_DEVICE_VIRTIO_KEYBOARD_CCW,
            QEMU_CAPS_DEVICE_VIRTIO_MOUSE_CCW,
            QEMU_CAPS_DEVICE_VIRTIO_TABLET_CCW);

A
Andrea Bolognani 已提交
2829 2830 2831
    if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL)
        virFileDeleteTree(fakerootdir);

2832
    qemuTestDriverFree(&driver);
A
Andrea Bolognani 已提交
2833
    VIR_FREE(fakerootdir);
2834
    VIR_FREE(capslatest_x86_64);
2835

2836
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
2837 2838
}

2839
VIR_TEST_MAIN_PRELOAD(mymain,
A
Andrea Bolognani 已提交
2840 2841 2842 2843
                      abs_builddir "/.libs/qemuxml2argvmock.so",
                      abs_builddir "/.libs/virrandommock.so",
                      abs_builddir "/.libs/qemucpumock.so",
                      abs_builddir "/.libs/virpcimock.so")
2844

2845 2846
#else

2847 2848 2849 2850
int main(void)
{
    return EXIT_AM_SKIP;
}
2851 2852

#endif /* WITH_QEMU */