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

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

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

11 12
#include "testutils.h"

13 14
#ifdef WITH_QEMU

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

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

34
# include "testutilsqemu.h"
35

36 37
# define VIR_FROM_THIS VIR_FROM_QEMU

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

    if (!volinfo[1])
        goto fallback;

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

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

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

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

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

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

    return 0;
}


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

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

    return ret;
}


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

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

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

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

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

    return xmlbuf;
}

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

    return 1;
}

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

265
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 DO_TEST_LINUX(name, ...) \
771
    DO_TEST_LINUX_FULL(name, NULL, -1, 0, 0, GIC_NONE, __VA_ARGS__)
772

773 774 775 776 777 778
# ifdef __linux__
    /* This is a macro that invokes test only on Linux. It's
     * meant to be called in those cases where qemuxml2argvmock
     * cooperation is expected (e.g. we need a fixed time,
     * predictable NUMA topology and so on). On non-Linux
     * platforms the macro just consume its argument. */
779
#  define DO_TEST_LINUX_FULL(name, ...) \
780
    DO_TEST_FULL(name, __VA_ARGS__)
781
# else  /* __linux__ */
782 783 784
#  define DO_TEST_LINUX_FULL(name, ...) \
    do { \
        const char *tmp ATTRIBUTE_UNUSED = name; \
785 786 787
    } while (0)
# endif /* __linux__ */

788
# define NONE QEMU_CAPS_LAST
789

790 791 792
    /* 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 */
793 794 795 796 797 798 799
    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");
800 801
    unsetenv("QEMU_AUDIO_DRV");
    unsetenv("SDL_AUDIODRIVER");
802

803
    DO_TEST("minimal", NONE);
804 805
    DO_TEST("minimal-sandbox",
            QEMU_CAPS_SECCOMP_BLACKLIST);
806
    DO_TEST_PARSE_ERROR("minimal-no-memory", NONE);
807
    DO_TEST("minimal-msg-timestamp", QEMU_CAPS_MSG_TIMESTAMP);
808
    DO_TEST("machine-aliases1", NONE);
809
    DO_TEST("machine-aliases2", QEMU_CAPS_KVM);
810
    DO_TEST("machine-core-on", NONE);
811
    driver.config->dumpGuestCore = true;
812
    DO_TEST("machine-core-off", NONE);
813
    driver.config->dumpGuestCore = false;
M
Michal Privoznik 已提交
814 815 816
    DO_TEST("machine-smm-opt",
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
817
            QEMU_CAPS_DEVICE_IOH3420,
M
Michal Privoznik 已提交
818 819 820
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_MACHINE_SMM_OPT,
            QEMU_CAPS_VIRTIO_SCSI);
821
    DO_TEST("machine-vmport-opt",
822
            QEMU_CAPS_MACHINE_VMPORT_OPT);
823 824 825
    DO_TEST("default-kvm-host-arch", NONE);
    DO_TEST("default-qemu-host-arch", NONE);
    DO_TEST("x86-kvm-32-on-64", NONE);
826 827 828
    DO_TEST("boot-cdrom", NONE);
    DO_TEST("boot-network", NONE);
    DO_TEST("boot-floppy", NONE);
829
    DO_TEST("boot-floppy-q35",
830
            QEMU_CAPS_DEVICE_IOH3420,
831
            QEMU_CAPS_ICH9_AHCI);
832
    DO_TEST("bootindex-floppy-q35",
833
            QEMU_CAPS_DEVICE_IOH3420,
J
Ján Tomko 已提交
834
            QEMU_CAPS_ICH9_AHCI,
835
            QEMU_CAPS_BOOTINDEX);
J
Ján Tomko 已提交
836 837
    DO_TEST("boot-multi", NONE);
    DO_TEST("boot-menu-enable", NONE);
838
    DO_TEST("boot-menu-enable-bootindex",
839
            QEMU_CAPS_BOOTINDEX);
840
    DO_TEST("boot-menu-enable-with-timeout",
841
            QEMU_CAPS_SPLASH_TIMEOUT);
J
Ján Tomko 已提交
842
    DO_TEST_FAILURE("boot-menu-enable-with-timeout", NONE);
843
    DO_TEST_PARSE_ERROR("boot-menu-enable-with-timeout-invalid", NONE);
J
Ján Tomko 已提交
844 845
    DO_TEST("boot-menu-disable", NONE);
    DO_TEST("boot-menu-disable-drive", NONE);
846
    DO_TEST("boot-menu-disable-drive-bootindex",
847
            QEMU_CAPS_BOOTINDEX);
848
    DO_TEST_PARSE_ERROR("boot-dev+order",
849
            QEMU_CAPS_BOOTINDEX,
850
            QEMU_CAPS_VIRTIO_BLK_SCSI);
851
    DO_TEST("boot-order",
852
            QEMU_CAPS_BOOTINDEX,
853
            QEMU_CAPS_VIRTIO_BLK_SCSI);
854
    DO_TEST("boot-complex",
855
            QEMU_CAPS_DRIVE_BOOT,
856
            QEMU_CAPS_VIRTIO_BLK_SCSI);
857
    DO_TEST("boot-complex-bootindex",
858
            QEMU_CAPS_DRIVE_BOOT,
859
            QEMU_CAPS_BOOTINDEX,
860
            QEMU_CAPS_VIRTIO_BLK_SCSI);
861
    DO_TEST("boot-strict",
862
            QEMU_CAPS_DRIVE_BOOT,
863
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_BOOT_STRICT,
864
            QEMU_CAPS_VIRTIO_BLK_SCSI);
865 866 867 868 869

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

870
    DO_TEST("bios",
871
            QEMU_CAPS_DEVICE_ISA_SERIAL,
872
            QEMU_CAPS_SGA);
J
Ján Tomko 已提交
873
    DO_TEST("bios-nvram", NONE);
M
Michal Privoznik 已提交
874 875 876
    DO_TEST("bios-nvram-secure",
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
877
            QEMU_CAPS_DEVICE_IOH3420,
M
Michal Privoznik 已提交
878 879 880
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_MACHINE_SMM_OPT,
            QEMU_CAPS_VIRTIO_SCSI);
881 882 883 884 885 886 887

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

888
    DO_TEST("clock-utc", NONE);
889
    DO_TEST("clock-localtime", NONE);
J
Ján Tomko 已提交
890 891 892 893 894
    DO_TEST("clock-localtime-basis-localtime", NONE);
    DO_TEST("clock-variable", NONE);
    DO_TEST("clock-france", NONE);
    DO_TEST("clock-hpet-off", NONE);
    DO_TEST("clock-catchup", NONE);
895
    DO_TEST("cpu-kvmclock", QEMU_CAPS_ENABLE_KVM);
A
Andrea Bolognani 已提交
896
    DO_TEST("cpu-host-kvmclock", QEMU_CAPS_ENABLE_KVM);
897
    DO_TEST("kvmclock", QEMU_CAPS_KVM);
898
    DO_TEST("clock-timer-hyperv-rtc", QEMU_CAPS_KVM);
899

900 901
    DO_TEST("cpu-eoi-disabled", QEMU_CAPS_ENABLE_KVM);
    DO_TEST("cpu-eoi-enabled", QEMU_CAPS_ENABLE_KVM);
J
Ján Tomko 已提交
902
    DO_TEST("controller-order",
903 904 905 906 907 908 909
            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,
910
            QEMU_CAPS_DEVICE_ISA_SERIAL,
911
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
912 913
    DO_TEST("eoi-disabled", NONE);
    DO_TEST("eoi-enabled", NONE);
914 915
    DO_TEST("pv-spinlock-disabled", NONE);
    DO_TEST("pv-spinlock-enabled", NONE);
M
Martin Kletzander 已提交
916
    DO_TEST("kvmclock+eoi-disabled", QEMU_CAPS_ENABLE_KVM);
917

918
    DO_TEST("hyperv", NONE);
919
    DO_TEST("hyperv-off", NONE);
920
    DO_TEST("hyperv-panic", NONE);
921

922 923 924
    DO_TEST("kvm-features", NONE);
    DO_TEST("kvm-features-off", NONE);

925 926 927
    DO_TEST("pmu-feature", NONE);
    DO_TEST("pmu-feature-off", NONE);

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

1146 1147 1148 1149
    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);
1150
    DO_TEST("graphics-vnc-policy", QEMU_CAPS_VNC,
1151 1152 1153 1154 1155
            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);
1156
    driver.config->vncAutoUnixSocket = true;
1157 1158
    DO_TEST("graphics-vnc-auto-socket-cfg", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1159
    driver.config->vncAutoUnixSocket = false;
1160 1161 1162 1163
    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);
1164 1165
    DO_TEST("graphics-vnc-socket-new-cmdline", QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA, QEMU_CAPS_VNC_MULTI_SERVERS);
1166

1167 1168
    driver.config->vncSASL = 1;
    VIR_FREE(driver.config->vncSASLdir);
1169
    ignore_value(VIR_STRDUP(driver.config->vncSASLdir, "/root/.sasl2"));
1170
    DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1171 1172
    driver.config->vncTLS = 1;
    driver.config->vncTLSx509verify = 1;
1173
    DO_TEST("graphics-vnc-tls", QEMU_CAPS_VNC, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1174
    driver.config->vncSASL = driver.config->vncTLSx509verify = driver.config->vncTLS = 0;
1175 1176
    VIR_FREE(driver.config->vncSASLdir);
    VIR_FREE(driver.config->vncTLSx509certdir);
1177

J
Ján Tomko 已提交
1178 1179 1180
    DO_TEST("graphics-sdl",
            QEMU_CAPS_DEVICE_VGA);
    DO_TEST("graphics-sdl-fullscreen",
1181
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1182
    DO_TEST("graphics-spice",
1183
            QEMU_CAPS_SPICE,
1184 1185
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
1186
    DO_TEST("graphics-spice-no-args",
1187
            QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_CIRRUS_VGA);
1188 1189 1190
    driver.config->spiceSASL = 1;
    ignore_value(VIR_STRDUP(driver.config->spiceSASLdir, "/root/.sasl2"));
    DO_TEST("graphics-spice-sasl",
1191
            QEMU_CAPS_SPICE,
1192 1193 1194
            QEMU_CAPS_DEVICE_QXL);
    VIR_FREE(driver.config->spiceSASLdir);
    driver.config->spiceSASL = 0;
1195
    DO_TEST("graphics-spice-agentmouse",
1196
            QEMU_CAPS_DEVICE_QXL,
1197
            QEMU_CAPS_SPICE,
1198
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1199
    DO_TEST("graphics-spice-compression",
1200
            QEMU_CAPS_SPICE,
1201
            QEMU_CAPS_DEVICE_QXL);
1202
    DO_TEST("graphics-spice-timeout",
1203
            QEMU_CAPS_KVM,
1204
            QEMU_CAPS_SPICE,
1205 1206
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_DEVICE_VGA);
1207
    DO_TEST("graphics-spice-qxl-vga",
1208
            QEMU_CAPS_SPICE,
1209
            QEMU_CAPS_DEVICE_QXL);
1210
    DO_TEST("graphics-spice-usb-redir",
1211
            QEMU_CAPS_SPICE,
1212 1213 1214 1215
            QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1216
    DO_TEST("graphics-spice-agent-file-xfer",
1217
            QEMU_CAPS_SPICE,
1218 1219
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
1220 1221
    DO_TEST("graphics-spice-socket",
            QEMU_CAPS_SPICE,
1222 1223
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1224 1225
    DO_TEST("graphics-spice-auto-socket",
            QEMU_CAPS_SPICE,
1226 1227
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1228 1229 1230
    driver.config->spiceAutoUnixSocket = true;
    DO_TEST("graphics-spice-auto-socket-cfg",
            QEMU_CAPS_SPICE,
1231 1232
            QEMU_CAPS_SPICE_UNIX,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1233
    driver.config->spiceAutoUnixSocket = false;
1234

1235 1236 1237
    DO_TEST("input-usbmouse", NONE);
    DO_TEST("input-usbtablet", NONE);
    DO_TEST("misc-acpi", NONE);
1238 1239 1240
    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);
1241
    DO_TEST_FAILURE("misc-enable-s4", NONE);
1242
    DO_TEST("misc-no-reboot", NONE);
1243
    DO_TEST("misc-uuid", NONE);
1244
    DO_TEST_PARSE_ERROR("vhost_queues-invalid", NONE);
J
Ján Tomko 已提交
1245
    DO_TEST("net-vhostuser", NONE);
1246
    DO_TEST("net-vhostuser-multiq",
J
Ján Tomko 已提交
1247 1248
            QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
    DO_TEST_FAILURE("net-vhostuser-multiq", NONE);
1249 1250
    DO_TEST_FAILURE("net-vhostuser-fail",
                    QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
1251
    DO_TEST("net-user", NONE);
J
Ján Tomko 已提交
1252
    DO_TEST("net-user-addr", NONE);
1253 1254
    DO_TEST("net-virtio", NONE);
    DO_TEST("net-virtio-device",
1255 1256 1257
            QEMU_CAPS_VIRTIO_TX_ALG);
    DO_TEST("net-virtio-disable-offloads", NONE);
    DO_TEST("net-virtio-netdev", NONE);
1258
    DO_TEST("net-virtio-s390",
1259
            QEMU_CAPS_VIRTIO_S390);
1260
    DO_TEST("net-virtio-ccw",
1261
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1262 1263 1264
    DO_TEST("net-virtio-rxtxqueuesize",
            QEMU_CAPS_VIRTIO_NET_RX_QUEUE_SIZE,
            QEMU_CAPS_VIRTIO_NET_TX_QUEUE_SIZE);
1265
    DO_TEST_PARSE_ERROR("net-virtio-rxqueuesize-invalid-size", NONE);
1266 1267
    DO_TEST("net-eth", NONE);
    DO_TEST("net-eth-ifname", NONE);
1268
    DO_TEST("net-eth-names", NONE);
1269
    DO_TEST("net-eth-hostip", NONE);
1270 1271 1272
    DO_TEST("net-client", NONE);
    DO_TEST("net-server", NONE);
    DO_TEST("net-mcast", NONE);
1273
    DO_TEST("net-udp", NONE);
1274
    DO_TEST("net-hostdev", NONE);
1275
    DO_TEST("net-hostdev-multidomain", NONE);
1276 1277
    DO_TEST("net-hostdev-vfio",
            QEMU_CAPS_DEVICE_VFIO_PCI);
1278
    DO_TEST("net-hostdev-vfio-multidomain",
1279
            QEMU_CAPS_DEVICE_VFIO_PCI);
1280 1281 1282
    DO_TEST_FAILURE("net-hostdev-fail",
                    QEMU_CAPS_DEVICE_VFIO_PCI);

1283

1284 1285
    DO_TEST("serial-file-log",
            QEMU_CAPS_CHARDEV_FILE_APPEND,
1286
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1287
            QEMU_CAPS_CHARDEV_LOGFILE);
1288
    DO_TEST("serial-spiceport",
1289
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1290
            QEMU_CAPS_DEVICE_QXL,
1291
            QEMU_CAPS_SPICE,
1292
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1293
            QEMU_CAPS_CHARDEV_SPICEPORT);
1294
    DO_TEST("serial-spiceport-nospice", NONE);
1295

1296 1297 1298 1299
    DO_TEST("console-compat",
            QEMU_CAPS_DEVICE_ISA_SERIAL);
    DO_TEST("console-compat-auto",
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1300 1301

    DO_TEST("serial-vc-chardev",
1302
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1303
    DO_TEST("serial-pty-chardev",
1304
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1305
    DO_TEST("serial-dev-chardev",
1306
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1307
    DO_TEST("serial-dev-chardev-iobase",
1308
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1309
    DO_TEST("serial-file-chardev",
1310
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1311
            QEMU_CAPS_CHARDEV_FILE_APPEND);
1312
    DO_TEST("serial-unix-chardev",
1313
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1314
    DO_TEST("serial-tcp-chardev",
1315
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1316
    DO_TEST("serial-udp-chardev",
1317
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1318
    DO_TEST("serial-tcp-telnet-chardev",
1319
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1320 1321
    driver.config->chardevTLS = 1;
    DO_TEST("serial-tcp-tlsx509-chardev",
1322
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1323
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1324 1325
    driver.config->chardevTLSx509verify = 1;
    DO_TEST("serial-tcp-tlsx509-chardev-verify",
1326
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1327 1328
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
    driver.config->chardevTLSx509verify = 0;
1329
    DO_TEST("serial-tcp-tlsx509-chardev-notls",
1330
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1331
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
1332 1333 1334 1335 1336 1337 1338 1339 1340
    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,
1341
            QEMU_CAPS_DEVICE_ISA_SERIAL,
1342 1343 1344 1345
            QEMU_CAPS_OBJECT_TLS_CREDS_X509);
# else
    DO_TEST_FAILURE("serial-tcp-tlsx509-secret-chardev",
                    QEMU_CAPS_OBJECT_SECRET,
1346
                    QEMU_CAPS_DEVICE_ISA_SERIAL,
1347 1348
                    QEMU_CAPS_OBJECT_TLS_CREDS_X509);
# endif
1349 1350
    driver.config->chardevTLS = 0;
    VIR_FREE(driver.config->chardevTLSx509certdir);
1351
    DO_TEST("serial-many-chardev",
1352 1353 1354
            QEMU_CAPS_DEVICE_ISA_SERIAL);
    DO_TEST("parallel-tcp-chardev", NONE);
    DO_TEST("parallel-parport-chardev", NONE);
1355
    DO_TEST("console-compat-chardev",
1356
            QEMU_CAPS_DEVICE_ISA_SERIAL);
M
Michal Privoznik 已提交
1357 1358
    DO_TEST("pci-serial-dev-chardev",
            QEMU_CAPS_DEVICE_PCI_SERIAL);
1359

1360 1361 1362 1363 1364 1365 1366
    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);
1367
    DO_TEST("console-virtio-many",
1368
            QEMU_CAPS_DEVICE_ISA_SERIAL);
1369
    DO_TEST("console-virtio-s390",
1370 1371
            QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_VIRTIO_S390);
1372
    DO_TEST("console-virtio-ccw",
1373 1374
            QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_VIRTIO_CCW,
1375
            QEMU_CAPS_VIRTIO_S390);
1376
    DO_TEST("console-sclp",
1377
            QEMU_CAPS_VIRTIO_S390,
1378
            QEMU_CAPS_DEVICE_SCLPCONSOLE);
1379
    DO_TEST("channel-spicevmc",
1380
            QEMU_CAPS_SPICE,
1381
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
1382
    DO_TEST("channel-virtio-default",
1383
            QEMU_CAPS_SPICE);
1384
    DO_TEST("channel-virtio-unix", NONE);
1385

1386
    DO_TEST("smartcard-host",
1387
            QEMU_CAPS_CCID_EMULATED);
1388
    DO_TEST("smartcard-host-certificates",
1389
            QEMU_CAPS_CCID_EMULATED);
1390
    DO_TEST("smartcard-passthrough-tcp",
1391
            QEMU_CAPS_CCID_PASSTHRU);
1392
    DO_TEST("smartcard-passthrough-spicevmc",
1393
            QEMU_CAPS_CCID_PASSTHRU);
1394
    DO_TEST("smartcard-controller",
1395
            QEMU_CAPS_CCID_EMULATED);
1396

1397 1398 1399 1400 1401 1402 1403 1404
    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);
1405 1406
    DO_TEST_PARSE_ERROR("chardev-reconnect-generated-path",
                        QEMU_CAPS_CHARDEV_RECONNECT);
1407

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

1508 1509 1510
    DO_TEST("smbios", NONE);
    DO_TEST_PARSE_ERROR("smbios-date", NONE);
    DO_TEST_PARSE_ERROR("smbios-uuid-match", NONE);
1511

1512
    DO_TEST("watchdog", NONE);
1513
    DO_TEST("watchdog-device", NONE);
1514
    DO_TEST("watchdog-dump", NONE);
1515
    DO_TEST("watchdog-injectnmi", NONE);
1516
    DO_TEST("watchdog-diag288",
1517
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390);
1518 1519
    DO_TEST("balloon-device", NONE);
    DO_TEST("balloon-device-deflate",
1520
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1521
    DO_TEST("balloon-ccw-deflate",
1522
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1523
    DO_TEST("balloon-mmio-deflate",
J
Ján Tomko 已提交
1524
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1525
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1526
    DO_TEST("balloon-device-deflate-off",
1527
            QEMU_CAPS_VIRTIO_BALLOON_AUTODEFLATE);
1528 1529
    DO_TEST("balloon-device-auto", NONE);
    DO_TEST("balloon-device-period", NONE);
1530 1531
    DO_TEST("sound", NONE);
    DO_TEST("sound-device",
1532
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_HDA_MICRO,
1533 1534
            QEMU_CAPS_DEVICE_ICH9_INTEL_HDA,
            QEMU_CAPS_OBJECT_USB_AUDIO);
1535
    DO_TEST("fs9p", NONE);
1536 1537
    DO_TEST("fs9p-ccw",
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1538

1539
    DO_TEST("hostdev-usb-address", NONE);
1540
    DO_TEST("hostdev-usb-address-device", NONE);
1541
    DO_TEST("hostdev-usb-address-device-boot",
1542
            QEMU_CAPS_BOOTINDEX,
1543
            QEMU_CAPS_USB_HOST_BOOTINDEX);
J
Ján Tomko 已提交
1544
    DO_TEST("hostdev-pci-address", NONE);
1545
    DO_TEST("hostdev-pci-address-device", NONE);
1546 1547
    DO_TEST("hostdev-vfio",
            QEMU_CAPS_DEVICE_VFIO_PCI);
1548
    DO_TEST("hostdev-vfio-multidomain",
1549
            QEMU_CAPS_DEVICE_VFIO_PCI);
1550 1551 1552 1553 1554 1555
    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);
1556
    DO_TEST("pci-rom", NONE);
1557
    DO_TEST("pci-rom-disabled", NONE);
1558
    DO_TEST("pci-rom-disabled-invalid", NONE);
1559

1560 1561 1562 1563
    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);
1564

1565
    DO_TEST_LINUX_FULL("migrate-numa-unaligned", "stdio", 7, 0, 0, GIC_NONE,
1566
                       QEMU_CAPS_NUMA,
1567 1568
                       QEMU_CAPS_OBJECT_MEMORY_RAM);

1569
    DO_TEST("qemu-ns", NONE);
1570
    DO_TEST("qemu-ns-no-env", NONE);
1571
    DO_TEST("qemu-ns-alt", NONE);
1572

1573
    DO_TEST("smp", NONE);
1574

J
John Ferlan 已提交
1575
    DO_TEST("iothreads", QEMU_CAPS_OBJECT_IOTHREAD);
1576 1577
    DO_TEST("iothreads-ids", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-ids-partial", QEMU_CAPS_OBJECT_IOTHREAD);
1578
    DO_TEST_FAILURE("iothreads-nocap", NONE);
1579 1580
    DO_TEST("iothreads-disk", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-disk-virtio-ccw", QEMU_CAPS_OBJECT_IOTHREAD,
1581
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1582 1583 1584 1585 1586 1587
    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 已提交
1588

1589 1590
    DO_TEST("cpu-topology1", NONE);
    DO_TEST("cpu-topology2", NONE);
1591
    DO_TEST("cpu-topology3", NONE);
1592 1593 1594 1595 1596 1597 1598 1599
    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);
1600
    DO_TEST("cpu-numa1", NONE);
1601 1602
    DO_TEST("cpu-numa2", NONE);
    DO_TEST("cpu-numa-no-memory-element", NONE);
1603
    DO_TEST_PARSE_ERROR("cpu-numa3", NONE);
1604 1605
    DO_TEST_FAILURE("cpu-numa-disjoint", NONE);
    DO_TEST("cpu-numa-disjoint", QEMU_CAPS_NUMA);
1606 1607
    DO_TEST_FAILURE("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_RAM);
    DO_TEST_FAILURE("cpu-numa-memshared", NONE);
1608
    DO_TEST("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_FILE);
1609
    DO_TEST("cpu-host-model", NONE);
1610
    DO_TEST("cpu-host-model-vendor", NONE);
1611
    skipLegacyCPUs = true;
1612
    DO_TEST("cpu-host-model-fallback", NONE);
1613
    DO_TEST_FAILURE("cpu-host-model-nofallback", NONE);
1614
    skipLegacyCPUs = false;
A
Andrea Bolognani 已提交
1615 1616
    DO_TEST("cpu-host-passthrough", QEMU_CAPS_KVM);
    DO_TEST_FAILURE("cpu-qemu-host-passthrough", QEMU_CAPS_KVM);
1617

1618 1619
    qemuTestSetHostArch(driver.caps, VIR_ARCH_S390X);
    DO_TEST("cpu-s390-zEC12", QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1620 1621
    DO_TEST("cpu-s390-features", QEMU_CAPS_KVM, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION);
    DO_TEST_FAILURE("cpu-s390-features", QEMU_CAPS_KVM);
1622 1623
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);

1624
    qemuTestSetHostCPU(driver.caps, cpuHaswell);
1625 1626 1627 1628
    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);
1629
    DO_TEST("cpu-host-model-cmt", NONE);
1630
    DO_TEST("cpu-tsc-frequency", QEMU_CAPS_KVM);
1631
    qemuTestSetHostCPU(driver.caps, NULL);
1632

1633
    DO_TEST("encrypted-disk", NONE);
J
John Ferlan 已提交
1634
    DO_TEST("encrypted-disk-usage", NONE);
1635
# ifdef HAVE_GNUTLS_CIPHER_ENCRYPT
1636
    DO_TEST("luks-disks", QEMU_CAPS_OBJECT_SECRET);
1637
    DO_TEST("luks-disks-source", QEMU_CAPS_OBJECT_SECRET);
1638 1639
    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);
1640 1641 1642
# else
    DO_TEST_FAILURE("luks-disks", QEMU_CAPS_OBJECT_SECRET);
# endif
1643
    DO_TEST_PARSE_ERROR("luks-disk-invalid", NONE);
1644
    DO_TEST_PARSE_ERROR("luks-disks-source-both", QEMU_CAPS_OBJECT_SECRET);
1645

1646 1647 1648 1649 1650 1651 1652 1653
    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);
1654
    DO_TEST("cputune-numatune",
1655
            QEMU_CAPS_KVM,
1656
            QEMU_CAPS_OBJECT_IOTHREAD,
1657 1658
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1659 1660 1661
    DO_TEST("vcpu-placement-static",
            QEMU_CAPS_KVM,
            QEMU_CAPS_OBJECT_IOTHREAD);
1662

1663
    DO_TEST("numatune-memory", NONE);
1664
    DO_TEST_PARSE_ERROR("numatune-memory-invalid-nodeset", NONE);
1665 1666
    DO_TEST_LINUX("numatune-memnode", QEMU_CAPS_NUMA,
                  QEMU_CAPS_OBJECT_MEMORY_RAM);
1667 1668
    DO_TEST_FAILURE("numatune-memnode", NONE);

1669 1670
    DO_TEST_LINUX("numatune-memnode-no-memory", QEMU_CAPS_NUMA,
                  QEMU_CAPS_OBJECT_MEMORY_RAM);
1671 1672
    DO_TEST_FAILURE("numatune-memnode-no-memory", NONE);

1673 1674
    DO_TEST("numatune-distances", QEMU_CAPS_NUMA, QEMU_CAPS_NUMA_DIST);

1675
    DO_TEST("numatune-auto-nodeset-invalid", NONE);
1676 1677
    DO_TEST("numatune-auto-prefer", QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1678 1679
    DO_TEST_FAILURE("numatune-static-nodeset-exceed-hostnode",
                    QEMU_CAPS_OBJECT_MEMORY_RAM);
1680 1681
    DO_TEST_PARSE_ERROR("numatune-memnode-nocpu", NONE);
    DO_TEST_PARSE_ERROR("numatune-memnodes-problematic", NONE);
1682 1683
    DO_TEST("numad", NONE);
    DO_TEST("numad-auto-vcpu-static-numatune", NONE);
1684
    DO_TEST_PARSE_ERROR("numad-auto-vcpu-static-numatune-no-nodeset", NONE);
1685 1686 1687
    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);
1688
    DO_TEST("blkdeviotune-max",
1689
            QEMU_CAPS_DRIVE_IOTUNE_MAX);
1690 1691 1692
    DO_TEST("blkdeviotune-group-num",
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_GROUP);
1693 1694 1695
    DO_TEST("blkdeviotune-max-length",
            QEMU_CAPS_DRIVE_IOTUNE_MAX,
            QEMU_CAPS_DRIVE_IOTUNE_MAX_LENGTH);
1696

1697
    DO_TEST("multifunction-pci-device",
1698
            QEMU_CAPS_SCSI_LSI);
1699

1700
    DO_TEST("monitor-json", NONE);
1701

1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713
    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);
1714

1715
    DO_TEST("pseries-basic",
1716
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1717
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1718
    DO_TEST("pseries-vio",
1719
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1720
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1721
    DO_TEST("pseries-usb-default",
1722
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1723
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1724
            QEMU_CAPS_PIIX3_USB_UHCI,
1725
            QEMU_CAPS_PCI_OHCI);
1726
    DO_TEST("pseries-usb-multi",
1727
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1728
            QEMU_CAPS_DEVICE_SPAPR_VTY,
1729
            QEMU_CAPS_PIIX3_USB_UHCI,
1730
            QEMU_CAPS_PCI_OHCI);
1731
    DO_TEST("pseries-vio-user-assigned",
1732
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1733 1734
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST_PARSE_ERROR("pseries-vio-address-clash", NONE);
1735 1736 1737
    DO_TEST("pseries-nvram",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_DEVICE_NVRAM);
1738
    DO_TEST("pseries-usb-kbd", QEMU_CAPS_PCI_OHCI,
1739
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1740
            QEMU_CAPS_DEVICE_USB_KBD,
1741
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1742
    DO_TEST("pseries-cpu-exact",
1743
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1744 1745
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST_PARSE_ERROR("pseries-no-parallel", NONE);
1746 1747

    qemuTestSetHostArch(driver.caps, VIR_ARCH_PPC64);
A
Andrea Bolognani 已提交
1748
    DO_TEST("pseries-cpu-compat", QEMU_CAPS_KVM,
1749
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1750
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1751 1752 1753
    DO_TEST("pseries-machine-max-cpu-compat",
            QEMU_CAPS_KVM,
            QEMU_CAPS_MACHINE_PSERIES_MAX_CPU_COMPAT,
1754
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
A
Andrea Bolognani 已提交
1755
    DO_TEST("pseries-cpu-le", QEMU_CAPS_KVM,
1756
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1757
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1758 1759 1760
    DO_TEST_FAILURE("pseries-cpu-compat-power9",
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
                    QEMU_CAPS_KVM);
1761 1762 1763

    qemuTestSetHostCPU(driver.caps, cpuPower9);
    DO_TEST("pseries-cpu-compat-power9",
1764
            QEMU_CAPS_KVM,
1765
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1766
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1767 1768
    qemuTestSetHostCPU(driver.caps, NULL);

1769 1770
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);

1771
    DO_TEST("pseries-panic-missing",
1772
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1773
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1774
    DO_TEST("pseries-panic-no-address",
1775
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1776
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1777
    DO_TEST_FAILURE("pseries-panic-address",
1778
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
1779 1780 1781 1782 1783

    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);
1784 1785 1786 1787 1788 1789
    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);
1790 1791 1792
    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);
1793

1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815
    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);

1816
    DO_TEST("pseries-features",
1817
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1818
            QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);
1819
    DO_TEST_FAILURE("pseries-features",
1820
                    QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
A
Andrea Bolognani 已提交
1821
    DO_TEST_PARSE_ERROR("pseries-features-invalid-machine", NONE);
1822

1823
    DO_TEST("pseries-serial-native",
1824
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1825 1826
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial+console-native",
1827
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1828 1829
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial-compat",
1830
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1831
            QEMU_CAPS_DEVICE_SPAPR_VTY);
1832
    DO_TEST("pseries-serial-pci",
1833
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1834 1835
            QEMU_CAPS_DEVICE_PCI_SERIAL);
    DO_TEST("pseries-serial-usb",
1836
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1837 1838
            QEMU_CAPS_DEVICE_QEMU_XHCI,
            QEMU_CAPS_DEVICE_USB_SERIAL);
1839
    DO_TEST("pseries-console-native",
1840
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
1841 1842
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-console-virtio",
1843
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
1844 1845
    DO_TEST_PARSE_ERROR("pseries-serial-invalid-machine", NONE);

1846
    DO_TEST("mach-virt-serial-native",
1847
            QEMU_CAPS_DEVICE_PL011);
1848
    DO_TEST("mach-virt-serial+console-native",
1849
            QEMU_CAPS_DEVICE_PL011);
1850
    DO_TEST("mach-virt-serial-compat",
1851
            QEMU_CAPS_DEVICE_PL011);
1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863
    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",
1864 1865
            QEMU_CAPS_DEVICE_PL011);
    DO_TEST("mach-virt-console-virtio", NONE);
1866 1867
    DO_TEST_PARSE_ERROR("mach-virt-serial-invalid-machine", NONE);

1868
    DO_TEST("disk-ide-drive-split",
1869
            QEMU_CAPS_IDE_CD);
1870
    DO_TEST("disk-ide-wwn",
1871
            QEMU_CAPS_IDE_CD,
1872
            QEMU_CAPS_IDE_DRIVE_WWN);
1873

1874
    DO_TEST("disk-geometry", NONE);
V
Viktor Mihajlovski 已提交
1875 1876
    DO_TEST("disk-blockio",
            QEMU_CAPS_IDE_CD, QEMU_CAPS_BLOCKIO);
1877

1878
    DO_TEST("video-device-pciaddr-default",
1879 1880
            QEMU_CAPS_KVM,
            QEMU_CAPS_VNC,
1881
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1882
            QEMU_CAPS_DEVICE_QXL);
1883
    DO_TEST("video-vga-nodevice", QEMU_CAPS_DEVICE_VGA);
1884
    DO_TEST("video-vga-device", QEMU_CAPS_DEVICE_VGA,
1885
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1886
    DO_TEST("video-vga-device-vgamem", QEMU_CAPS_DEVICE_VGA,
1887
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_VGA_VGAMEM);
1888
    DO_TEST("video-qxl-nodevice", QEMU_CAPS_DEVICE_QXL);
1889
    DO_TEST("video-qxl-device",
1890
            QEMU_CAPS_DEVICE_QXL,
1891
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1892
    DO_TEST("video-qxl-device-vgamem",
1893
            QEMU_CAPS_DEVICE_QXL,
1894
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1895 1896
            QEMU_CAPS_QXL_VGAMEM);
    DO_TEST("video-qxl-sec-device",
1897
            QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1898
    DO_TEST("video-qxl-sec-device-vgamem",
1899 1900
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1901
            QEMU_CAPS_QXL_VGAMEM);
1902 1903 1904
    DO_TEST("video-qxl-heads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
1905
            QEMU_CAPS_QXL_MAX_OUTPUTS);
1906 1907 1908
    DO_TEST("video-vga-qxl-heads",
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_QXL_MAX_OUTPUTS);
1909 1910 1911
    DO_TEST("video-qxl-noheads",
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL,
1912
            QEMU_CAPS_QXL_MAX_OUTPUTS);
M
Marc-André Lureau 已提交
1913
    DO_TEST("video-virtio-gpu-device",
1914
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
M
Marc-André Lureau 已提交
1915
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1916
    DO_TEST("video-virtio-gpu-virgl",
1917
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
1918
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
1919
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1920 1921
    DO_TEST("video-virtio-gpu-spice-gl",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
1922
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
1923 1924
            QEMU_CAPS_SPICE,
            QEMU_CAPS_SPICE_GL,
1925
            QEMU_CAPS_SPICE_RENDERNODE,
1926
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1927 1928 1929
    DO_TEST("video-virtio-gpu-secondary",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
1930 1931 1932
    DO_TEST("video-virtio-vga",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIRTIO_VGA,
1933 1934
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_GPU_MAX_OUTPUTS);
1935
    DO_TEST_PARSE_ERROR("video-invalid", NONE);
1936

1937 1938
    DO_TEST("virtio-rng-default",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
1939
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1940 1941
    DO_TEST("virtio-rng-random",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
1942
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1943 1944
    DO_TEST("virtio-rng-egd",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
1945
            QEMU_CAPS_OBJECT_RNG_EGD);
1946 1947 1948 1949
    DO_TEST("virtio-rng-multiple",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1950
    DO_TEST_PARSE_ERROR("virtio-rng-egd-crash",
1951 1952
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD);
1953
    DO_TEST("virtio-rng-ccw",
1954 1955 1956 1957
            QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
1958
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1959

1960
    DO_TEST("s390-allow-bogus-usb-none",
1961 1962 1963 1964
            QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1965
    DO_TEST("s390-allow-bogus-usb-controller",
1966 1967 1968 1969
            QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1970

1971
    DO_TEST("s390-panic-no-address",
1972 1973
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390);
1974
    DO_TEST_FAILURE("s390-panic-address",
1975 1976
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390);
1977
    DO_TEST("s390-panic-missing",
1978 1979
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390);
1980 1981 1982
    DO_TEST_PARSE_ERROR("s390-no-parallel",
            QEMU_CAPS_VIRTIO_CCW,
            QEMU_CAPS_VIRTIO_S390);
1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995
    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);
1996

1997
    DO_TEST("ppc-dtb",
J
Ján Tomko 已提交
1998
            QEMU_CAPS_KVM);
1999 2000
    DO_TEST("ppce500-serial",
            QEMU_CAPS_KVM);
O
Olivia Yin 已提交
2001

2002
    DO_TEST("tpm-passthrough",
2003
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
2004
    DO_TEST_PARSE_ERROR("tpm-no-backend-invalid",
2005
                        QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
2006

2007

2008 2009 2010 2011
    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);
2012

2013 2014 2015 2016 2017 2018
    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,
2019
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
2020 2021
    DO_TEST("pci-autoadd-idx",
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2022 2023
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("pci-autofill-addr", QEMU_CAPS_DEVICE_CIRRUS_VGA);
2024
    DO_TEST("pci-many",
2025
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
2026
    DO_TEST("pci-bridge-many-disks",
2027
            QEMU_CAPS_DEVICE_PCI_BRIDGE);
L
Laine Stump 已提交
2028
    DO_TEST("pcie-root",
2029 2030 2031 2032
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL);
2033
    DO_TEST("q35",
2034
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2035
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2036
            QEMU_CAPS_DEVICE_IOH3420,
2037
            QEMU_CAPS_ICH9_AHCI,
2038
            QEMU_CAPS_ICH9_USB_EHCI1,
2039
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2040
            QEMU_CAPS_DEVICE_QXL);
2041 2042 2043 2044 2045 2046 2047 2048
    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);
2049
    DO_TEST("q35-pm-disable",
2050
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2051
            QEMU_CAPS_DEVICE_IOH3420,
2052 2053 2054 2055
            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",
2056
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2057
            QEMU_CAPS_DEVICE_IOH3420,
2058 2059
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4);
2060
    DO_TEST("q35-usb2",
2061
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2062
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2063
            QEMU_CAPS_DEVICE_IOH3420,
2064
            QEMU_CAPS_ICH9_AHCI,
2065
            QEMU_CAPS_ICH9_USB_EHCI1,
2066
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2067
            QEMU_CAPS_DEVICE_QXL);
2068
    DO_TEST("q35-usb2-multi",
2069
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2070
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2071
            QEMU_CAPS_DEVICE_IOH3420,
2072
            QEMU_CAPS_ICH9_AHCI,
2073
            QEMU_CAPS_ICH9_USB_EHCI1,
2074
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2075
            QEMU_CAPS_DEVICE_QXL);
2076
    DO_TEST("q35-usb2-reorder",
2077
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
2078
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
2079
            QEMU_CAPS_DEVICE_IOH3420,
2080
            QEMU_CAPS_ICH9_AHCI,
2081
            QEMU_CAPS_ICH9_USB_EHCI1,
2082
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2083
            QEMU_CAPS_DEVICE_QXL);
2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101
    /* 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,
2102
            QEMU_CAPS_NEC_USB_XHCI,
2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115
            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,
2116 2117 2118 2119 2120 2121 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);
    /* 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,
2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149
            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,
2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168
            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,
2169 2170 2171 2172 2173
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
2174 2175 2176 2177 2178 2179 2180 2181
            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,
2182
            QEMU_CAPS_NEC_USB_XHCI,
2183
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
2184 2185
    DO_TEST("q35-virt-manager-basic",
            QEMU_CAPS_KVM,
2186
            QEMU_CAPS_MACHINE_VMPORT_OPT,
2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210
            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,
2211
            QEMU_CAPS_DEVICE_ISA_SERIAL,
2212
            QEMU_CAPS_USB_REDIR);
2213 2214

    /* Test automatic and manual setting of pcie-root-port attributes */
2215 2216
    DO_TEST("pcie-root-port",
            QEMU_CAPS_DEVICE_IOH3420,
2217
            QEMU_CAPS_ICH9_AHCI,
2218
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2219
            QEMU_CAPS_DEVICE_QXL);
2220 2221 2222 2223 2224 2225

    /* 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,
2226
            QEMU_CAPS_DEVICE_IOH3420);
2227
    DO_TEST("pcie-root-port-model-ioh3420",
2228
            QEMU_CAPS_DEVICE_IOH3420);
2229

2230 2231 2232 2233 2234 2235 2236
    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,
2237
            QEMU_CAPS_ICH9_USB_EHCI1,
2238
            QEMU_CAPS_NEC_USB_XHCI);
2239 2240 2241 2242 2243 2244 2245
    /* 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);
2246

2247
    DO_TEST_PARSE_ERROR("q35-wrong-root",
2248
            QEMU_CAPS_DEVICE_IOH3420,
2249
            QEMU_CAPS_ICH9_AHCI,
2250
            QEMU_CAPS_ICH9_USB_EHCI1,
2251
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2252
            QEMU_CAPS_DEVICE_QXL);
2253
    DO_TEST_PARSE_ERROR("440fx-wrong-root", NONE);
2254
    DO_TEST_PARSE_ERROR("440fx-ide-address-conflict", NONE);
2255

2256
    DO_TEST_PARSE_ERROR("pcie-root-port-too-many",
2257
            QEMU_CAPS_DEVICE_IOH3420,
2258
            QEMU_CAPS_ICH9_AHCI,
2259
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2260
            QEMU_CAPS_DEVICE_QXL);
2261

2262 2263 2264
    DO_TEST("pcie-switch-upstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
2265
            QEMU_CAPS_ICH9_AHCI,
2266
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2267
            QEMU_CAPS_DEVICE_QXL);
2268 2269 2270 2271
    DO_TEST("pcie-switch-downstream-port",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
2272
            QEMU_CAPS_ICH9_AHCI,
2273
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2274
            QEMU_CAPS_DEVICE_QXL);
2275

2276 2277 2278 2279 2280 2281
    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);
2282 2283
    DO_TEST_PARSE_ERROR("pci-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_PXB);
2284

2285 2286 2287 2288 2289 2290 2291 2292 2293 2294
    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);
2295 2296 2297
    DO_TEST_PARSE_ERROR("pcie-expander-bus-bad-bus",
                        QEMU_CAPS_DEVICE_IOH3420,
                        QEMU_CAPS_DEVICE_PXB_PCIE);
2298

2299
    DO_TEST("hostdev-scsi-lsi",
2300 2301
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2302
    DO_TEST("hostdev-scsi-virtio-scsi",
2303 2304
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2305
    DO_TEST("hostdev-scsi-readonly",
J
Ján Tomko 已提交
2306
            QEMU_CAPS_VIRTIO_SCSI,
O
Osier Yang 已提交
2307
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_SCSI_GENERIC);
2308
    DO_TEST("hostdev-scsi-virtio-scsi",
2309 2310 2311
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC,
            QEMU_CAPS_DEVICE_SCSI_GENERIC_BOOTINDEX);
2312
    DO_TEST("hostdev-scsi-lsi-iscsi",
J
John Ferlan 已提交
2313 2314
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2315
    DO_TEST("hostdev-scsi-lsi-iscsi-auth",
J
John Ferlan 已提交
2316 2317
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2318
    DO_TEST("hostdev-scsi-virtio-iscsi",
J
John Ferlan 已提交
2319 2320
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2321
    DO_TEST("hostdev-scsi-virtio-iscsi-auth",
J
John Ferlan 已提交
2322 2323
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
2324 2325 2326 2327 2328 2329
# 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
2330 2331 2332 2333 2334 2335
    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);
2336 2337 2338 2339 2340 2341
    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);
2342

2343
    DO_TEST("mlock-on", QEMU_CAPS_REALTIME_MLOCK);
2344
    DO_TEST_FAILURE("mlock-on", NONE);
2345
    DO_TEST("mlock-off", QEMU_CAPS_REALTIME_MLOCK);
2346 2347
    DO_TEST("mlock-unsupported", NONE);

2348 2349 2350 2351
    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);
2352

2353
    DO_TEST("hotplug-base",
2354
            QEMU_CAPS_KVM, QEMU_CAPS_VIRTIO_SCSI);
2355

2356 2357
    DO_TEST("pcihole64", QEMU_CAPS_I440FX_PCI_HOLE64_SIZE);
    DO_TEST_FAILURE("pcihole64-none", NONE);
2358
    DO_TEST("pcihole64-q35",
2359
            QEMU_CAPS_DEVICE_IOH3420,
2360
            QEMU_CAPS_ICH9_AHCI,
2361
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
2362
            QEMU_CAPS_DEVICE_QXL,
2363 2364
            QEMU_CAPS_Q35_PCI_HOLE64_SIZE);

J
Ján Tomko 已提交
2365 2366
    DO_TEST("arm-vexpressa9-nodevs", NONE);
    DO_TEST("arm-vexpressa9-basic", NONE);
2367
    DO_TEST("arm-vexpressa9-virtio",
2368
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2369
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2370
    DO_TEST("arm-virt-virtio",
2371
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2372
            QEMU_CAPS_DEVICE_PL011,
2373
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2374

2375
    DO_TEST("aarch64-virt-virtio",
2376
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
2377
            QEMU_CAPS_DEVICE_PL011,
2378
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
2379 2380 2381 2382 2383 2384

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

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

2532
    qemuTestSetHostArch(driver.caps, VIR_ARCH_NONE);
2533

2534
    DO_TEST("kvm-pit-delay", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2535
    DO_TEST("kvm-pit-discard", QEMU_CAPS_KVM_PIT_TICK_POLICY);
2536
    DO_TEST("no-kvm-pit-device", NONE);
2537

2538 2539 2540 2541
    DO_TEST("panic",
            QEMU_CAPS_DEVICE_PANIC);
    DO_TEST("panic-double",
            QEMU_CAPS_DEVICE_PANIC);
H
Hu Tao 已提交
2542

2543 2544
    DO_TEST("panic-no-address",
            QEMU_CAPS_DEVICE_PANIC);
2545

2546 2547
    DO_TEST("fips-enabled", QEMU_CAPS_ENABLE_FIPS);

J
Ján Tomko 已提交
2548
    DO_TEST("shmem", QEMU_CAPS_DEVICE_IVSHMEM);
2549 2550 2551
    DO_TEST("shmem-plain-doorbell", QEMU_CAPS_DEVICE_IVSHMEM,
            QEMU_CAPS_DEVICE_IVSHMEM_PLAIN,
            QEMU_CAPS_DEVICE_IVSHMEM_DOORBELL);
2552
    DO_TEST_FAILURE("shmem", NONE);
J
Ján Tomko 已提交
2553
    DO_TEST_FAILURE("shmem-invalid-size",
2554
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2555
    DO_TEST_FAILURE("shmem-invalid-address",
2556
                    QEMU_CAPS_DEVICE_IVSHMEM);
J
Ján Tomko 已提交
2557
    DO_TEST_FAILURE("shmem-small-size",
2558
                    QEMU_CAPS_DEVICE_IVSHMEM);
2559
    DO_TEST_PARSE_ERROR("shmem-msi-only", NONE);
A
Andrea Bolognani 已提交
2560
    DO_TEST("cpu-host-passthrough-features", QEMU_CAPS_KVM);
2561

2562
    DO_TEST_FAILURE("memory-align-fail", NONE);
2563
    DO_TEST_FAILURE("memory-hotplug-nonuma", QEMU_CAPS_DEVICE_PC_DIMM);
M
Michal Privoznik 已提交
2564
    DO_TEST("memory-hotplug", NONE);
2565
    DO_TEST("memory-hotplug", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA);
2566
    DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2567
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2568
    DO_TEST("memory-hotplug-dimm-addr", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2569
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2570
    DO_TEST("memory-hotplug-ppc64-nonuma", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
2571
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2572
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2573 2574
    DO_TEST("memory-hotplug-nvdimm",
            QEMU_CAPS_DEVICE_NVDIMM,
M
Michal Privoznik 已提交
2575
            QEMU_CAPS_NUMA, QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2576 2577
    DO_TEST("memory-hotplug-nvdimm-access",
            QEMU_CAPS_DEVICE_NVDIMM,
2578
            QEMU_CAPS_NUMA, QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2579 2580
    DO_TEST("memory-hotplug-nvdimm-label",
            QEMU_CAPS_DEVICE_NVDIMM,
2581
            QEMU_CAPS_NUMA, QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
2582

2583
    DO_TEST("machine-aeskeywrap-on-caps",
2584
            QEMU_CAPS_AES_KEY_WRAP,
2585
            QEMU_CAPS_DEA_KEY_WRAP,
2586
            QEMU_CAPS_VIRTIO_SCSI,
2587
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2588
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps",
2589
                    QEMU_CAPS_VIRTIO_SCSI,
2590 2591 2592 2593
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps", NONE);

    DO_TEST("machine-aeskeywrap-on-cap",
2594
            QEMU_CAPS_AES_KEY_WRAP,
2595
            QEMU_CAPS_VIRTIO_SCSI,
2596
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2597
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap",
2598
                    QEMU_CAPS_VIRTIO_SCSI,
2599 2600 2601 2602
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap", NONE);

    DO_TEST("machine-aeskeywrap-off-caps",
2603
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2604
            QEMU_CAPS_VIRTIO_SCSI,
2605
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2606
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps",
2607
                    QEMU_CAPS_VIRTIO_SCSI,
2608 2609 2610 2611
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", NONE);

    DO_TEST("machine-aeskeywrap-off-cap",
2612
            QEMU_CAPS_AES_KEY_WRAP,
2613
            QEMU_CAPS_VIRTIO_SCSI,
2614
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2615
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap",
2616
                    QEMU_CAPS_VIRTIO_SCSI,
2617 2618 2619 2620
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap", NONE);

    DO_TEST("machine-deakeywrap-on-caps",
2621
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2622
            QEMU_CAPS_VIRTIO_SCSI,
2623
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2624
    DO_TEST_FAILURE("machine-deakeywrap-on-caps",
2625
                    QEMU_CAPS_VIRTIO_SCSI,
2626 2627 2628 2629
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", NONE);

    DO_TEST("machine-deakeywrap-on-cap",
2630
            QEMU_CAPS_DEA_KEY_WRAP,
2631
            QEMU_CAPS_VIRTIO_SCSI,
2632
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2633
    DO_TEST_FAILURE("machine-deakeywrap-on-cap",
2634
                    QEMU_CAPS_VIRTIO_SCSI,
2635 2636 2637 2638
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-on-cap", NONE);

    DO_TEST("machine-deakeywrap-off-caps",
2639
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2640
            QEMU_CAPS_VIRTIO_SCSI,
2641
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2642
    DO_TEST_FAILURE("machine-deakeywrap-off-caps",
2643
                    QEMU_CAPS_VIRTIO_SCSI,
2644 2645 2646 2647
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", NONE);

    DO_TEST("machine-deakeywrap-off-cap",
2648
            QEMU_CAPS_DEA_KEY_WRAP,
2649
            QEMU_CAPS_VIRTIO_SCSI,
2650
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2651
    DO_TEST_FAILURE("machine-deakeywrap-off-cap",
2652
                    QEMU_CAPS_VIRTIO_SCSI,
2653 2654 2655 2656
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-cap", NONE);

    DO_TEST("machine-keywrap-none-caps",
2657
            QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
2658
            QEMU_CAPS_VIRTIO_SCSI,
2659 2660
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST("machine-keywrap-none",
2661
            QEMU_CAPS_VIRTIO_SCSI,
2662
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
2663

2664
    DO_TEST("machine-loadparm-s390",
2665 2666
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_LOADPARM);
2667
    DO_TEST("machine-loadparm-net-s390",
2668 2669 2670
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390,
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_LOADPARM);
    DO_TEST("machine-loadparm-multiple-disks-nets-s390",
2671
            QEMU_CAPS_VIRTIO_CCW,
2672 2673 2674
            QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-char-invalid",
2675
                        QEMU_CAPS_VIRTIO_CCW,
2676 2677 2678
                        QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_BOOTINDEX,
                        QEMU_CAPS_LOADPARM);
    DO_TEST_PARSE_ERROR("machine-loadparm-s390-len-invalid",
2679
                        QEMU_CAPS_VIRTIO_CCW,
2680 2681 2682
                        QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_BOOTINDEX,
                        QEMU_CAPS_LOADPARM);

J
Jiri Denemark 已提交
2683 2684 2685 2686 2687 2688 2689
    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);

2690
    DO_TEST("virtio-input", QEMU_CAPS_VIRTIO_KEYBOARD,
2691
            QEMU_CAPS_VIRTIO_MOUSE, QEMU_CAPS_VIRTIO_TABLET);
2692
    DO_TEST("virtio-input-passthrough", QEMU_CAPS_VIRTIO_INPUT_HOST);
2693

2694
    DO_TEST("ppc64-usb-controller",
2695
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2696
            QEMU_CAPS_PCI_OHCI);
2697
    DO_TEST("ppc64-usb-controller-legacy",
2698
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2699
            QEMU_CAPS_PIIX3_USB_UHCI);
2700 2701
    DO_TEST_FULL("ppc64-usb-controller-qemu-xhci", NULL, -1, 0,
                 VIR_DOMAIN_DEF_PARSE_ABI_UPDATE, GIC_NONE,
2702
                 QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
2703 2704 2705 2706 2707 2708 2709
                 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);
2710

2711 2712 2713 2714
    DO_TEST("aarch64-usb-controller-nec-xhci",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_NEC_USB_XHCI);

2715 2716 2717 2718
    DO_TEST_PARSE_FLAGS_ERROR("missing-machine",
                              VIR_DOMAIN_DEF_PARSE_SKIP_OSTYPE_CHECKS,
                              NONE);

2719 2720 2721 2722 2723 2724 2725 2726
    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 已提交
2727 2728
    DO_TEST("debug-threads", QEMU_CAPS_NAME_DEBUG_THREADS);

2729
    DO_TEST("master-key", QEMU_CAPS_OBJECT_SECRET);
2730
    DO_TEST("usb-long-port-path",
J
Ján Tomko 已提交
2731
            QEMU_CAPS_USB_HUB);
2732
    DO_TEST_PARSE_ERROR("usb-too-long-port-path-invalid",
2733
                        QEMU_CAPS_USB_HUB);
2734

2735
    DO_TEST("acpi-table", NONE);
2736
    DO_TEST("intel-iommu",
2737
            QEMU_CAPS_DEVICE_INTEL_IOMMU);
2738 2739
    DO_TEST("intel-iommu-machine",
            QEMU_CAPS_MACHINE_IOMMU);
J
Ján Tomko 已提交
2740
    DO_TEST("intel-iommu-caching-mode",
2741 2742
            QEMU_CAPS_MACHINE_KERNEL_IRQCHIP,
            QEMU_CAPS_MACHINE_KERNEL_IRQCHIP_SPLIT,
2743 2744 2745 2746 2747 2748 2749 2750
            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);
2751 2752 2753 2754 2755 2756
    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);
2757 2758 2759 2760 2761 2762
    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);
2763

2764
    DO_TEST("cpu-hotplug-startup", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);
2765 2766 2767
    DO_TEST_PARSE_ERROR("cpu-hotplug-granularity",
                        QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);

2768 2769 2770 2771 2772 2773 2774
    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,
2775 2776 2777
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_PCI_IOMMU_PLATFORM,
            QEMU_CAPS_VIRTIO_PCI_ATS);
2778

J
Ján Tomko 已提交
2779
    DO_TEST("fd-memory-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
2780
            QEMU_CAPS_KVM);
J
Ján Tomko 已提交
2781
    DO_TEST("fd-memory-numa-topology2", QEMU_CAPS_OBJECT_MEMORY_FILE,
2782
            QEMU_CAPS_KVM);
J
Ján Tomko 已提交
2783
    DO_TEST("fd-memory-numa-topology3", QEMU_CAPS_OBJECT_MEMORY_FILE,
2784 2785
            QEMU_CAPS_KVM);

J
Ján Tomko 已提交
2786
    DO_TEST("fd-memory-no-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
2787 2788
            QEMU_CAPS_KVM);

2789 2790 2791 2792 2793 2794 2795 2796
    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);

2797 2798 2799 2800 2801 2802 2803 2804 2805
    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 已提交
2806
    DO_TEST("vmcoreinfo", QEMU_CAPS_DEVICE_VMCOREINFO);
2807

2808 2809 2810
    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,
2811
            QEMU_CAPS_DEVICE_ISA_SERIAL,
2812 2813
            QEMU_CAPS_HDA_DUPLEX,
            QEMU_CAPS_CCID_EMULATED);
2814
    DO_TEST("user-aliases2", QEMU_CAPS_DEVICE_IOH3420, QEMU_CAPS_ICH9_AHCI);
2815 2816
    DO_TEST("user-aliases-usb", QEMU_CAPS_KVM,
            QEMU_CAPS_PIIX_DISABLE_S3, QEMU_CAPS_PIIX_DISABLE_S4,
2817
            QEMU_CAPS_ICH9_USB_EHCI1);
2818

2819 2820 2821 2822 2823 2824
    /* 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;

2825 2826 2827 2828 2829 2830 2831
    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);

2832 2833 2834 2835 2836 2837 2838 2839
    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 已提交
2840 2841 2842
    if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL)
        virFileDeleteTree(fakerootdir);

2843
    qemuTestDriverFree(&driver);
A
Andrea Bolognani 已提交
2844
    VIR_FREE(fakerootdir);
2845
    VIR_FREE(capslatest_x86_64);
2846

2847
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
2848 2849
}

2850
VIR_TEST_MAIN_PRELOAD(mymain,
A
Andrea Bolognani 已提交
2851 2852 2853 2854
                      abs_builddir "/.libs/qemuxml2argvmock.so",
                      abs_builddir "/.libs/virrandommock.so",
                      abs_builddir "/.libs/qemucpumock.so",
                      abs_builddir "/.libs/virpcimock.so")
2855

2856 2857
#else

2858 2859 2860 2861
int main(void)
{
    return EXIT_AM_SKIP;
}
2862 2863

#endif /* WITH_QEMU */