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

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

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

11 12
#include "testutils.h"

13 14
#ifdef WITH_QEMU

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

27
# include "testutilsqemu.h"
28

29 30
# define VIR_FROM_THIS VIR_FROM_QEMU

31
static const char *abs_top_srcdir;
32
static virQEMUDriver driver;
33

34 35 36 37 38 39
static unsigned char *
fakeSecretGetValue(virSecretPtr obj ATTRIBUTE_UNUSED,
                   size_t *value_size,
                   unsigned int fakeflags ATTRIBUTE_UNUSED,
                   unsigned int internalFlags ATTRIBUTE_UNUSED)
{
40 41
    char *secret;
    if (VIR_STRDUP(secret, "AQCVn5hO6HzFAhAAq0NCv8jtJcIcE+HOBlMQ1A") < 0)
42
        return NULL;
43 44 45 46 47 48 49 50 51
    *value_size = strlen(secret);
    return (unsigned char *) secret;
}

static virSecretPtr
fakeSecretLookupByUsage(virConnectPtr conn,
                        int usageType ATTRIBUTE_UNUSED,
                        const char *usageID)
{
52
    unsigned char uuid[VIR_UUID_BUFLEN];
53 54
    if (STRNEQ(usageID, "mycluster_myname"))
        return NULL;
55

56 57 58
    if (virUUIDGenerate(uuid) < 0)
        return NULL;

59
    return virGetSecret(conn, uuid, usageType, usageID);
60 61 62
}

static virSecretDriver fakeSecretDriver = {
63 64 65 66 67 68 69 70 71
    .connectNumOfSecrets = NULL,
    .connectListSecrets = NULL,
    .secretLookupByUUID = NULL,
    .secretLookupByUsage = fakeSecretLookupByUsage,
    .secretDefineXML = NULL,
    .secretGetXMLDesc = NULL,
    .secretSetValue = NULL,
    .secretGetValue = fakeSecretGetValue,
    .secretUndefine = NULL,
72 73
};

74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

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

101
 cleanup:
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
    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);

138
 cleanup:
139 140 141
    virStringFreeList(volinfo);
    return ret;

142
 fallback:
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 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
    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;

    if (virtTestLoadFile(xmlpath, &xmlbuf) < 0) {
        virReportError(VIR_ERR_INTERNAL_ERROR,
                       "failed to load XML file '%s'",
                       xmlpath);
        goto cleanup;
    }

201
 cleanup:
202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218
    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
219
 * qemu command line.
220 221 222
 *
 * There are a few "magic" values to pass to these functions:
 *
223 224
 * 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
225 226 227
 * 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
228
 * pattern VOLUME_TYPE+VOLUME_PATH can be used to simulate a volume in a pool.
229 230 231 232 233 234 235 236 237 238 239 240
 * 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,
};

241 242 243 244 245
typedef enum {
    FLAG_EXPECT_ERROR       = 1 << 0,
    FLAG_EXPECT_FAILURE     = 1 << 1,
    FLAG_EXPECT_PARSE_ERROR = 1 << 2,
    FLAG_JSON               = 1 << 3,
246
    FLAG_FIPS               = 1 << 4,
247 248
} virQemuXML2ArgvTestFlags;

249
static int testCompareXMLToArgvFiles(const char *xml,
E
Eric Blake 已提交
250
                                     const char *cmdline,
251
                                     virQEMUCapsPtr extraFlags,
J
Jiri Denemark 已提交
252
                                     const char *migrateFrom,
253
                                     int migrateFd,
254
                                     virQemuXML2ArgvTestFlags flags)
255
{
256
    char *actualargv = NULL;
E
Eric Blake 已提交
257
    int ret = -1;
258
    virDomainDefPtr vmdef = NULL;
259
    virDomainChrSourceDef monitor_chr;
260
    virConnectPtr conn;
J
Jiri Denemark 已提交
261
    char *log = NULL;
E
Eric Blake 已提交
262
    virCommandPtr cmd = NULL;
263
    size_t i;
264
    virBitmapPtr nodeset = NULL;
265 266

    if (!(conn = virGetConnect()))
267
        goto out;
268
    conn->secretDriver = &fakeSecretDriver;
269
    conn->storageDriver = &fakeStorageDriver;
270

271 272 273
    if (virBitmapParse("0-3", '\0', &nodeset, 4) < 0)
        goto out;

274
    if (!(vmdef = virDomainDefParseFile(xml, driver.caps, driver.xmlopt,
275
                                        VIR_DOMAIN_DEF_PARSE_INACTIVE))) {
276 277
        if (!virtTestOOMActive() &&
            (flags & FLAG_EXPECT_PARSE_ERROR))
278
            goto ok;
279
        goto out;
280
    }
281

282
    if (!virDomainDefCheckABIStability(vmdef, vmdef)) {
283
        VIR_TEST_DEBUG("ABI stability check failed on %s", xml);
284 285 286
        goto out;
    }

287
    vmdef->id = -1;
288

289
    memset(&monitor_chr, 0, sizeof(monitor_chr));
290 291 292
    monitor_chr.type = VIR_DOMAIN_CHR_TYPE_UNIX;
    monitor_chr.data.nix.path = (char *)"/tmp/test-monitor";
    monitor_chr.data.nix.listen = true;
293

294 295 296
    virQEMUCapsSetList(extraFlags,
                       QEMU_CAPS_NO_ACPI,
                       QEMU_CAPS_LAST);
297

298 299 300
    if (STREQ(vmdef->os.machine, "pc") &&
        STREQ(vmdef->emulator, "/usr/bin/qemu-system-x86_64")) {
        VIR_FREE(vmdef->os.machine);
301
        if (VIR_STRDUP(vmdef->os.machine, "pc-0.11") < 0)
302 303
            goto out;
    }
304

305 306
    virQEMUCapsFilterByMachineType(extraFlags, vmdef->os.machine);

307
    if (virQEMUCapsGet(extraFlags, QEMU_CAPS_DEVICE)) {
308
        if (qemuDomainAssignAddresses(vmdef, extraFlags, NULL)) {
309
            if (flags & FLAG_EXPECT_ERROR)
310
                goto ok;
311
            goto out;
312
        }
313 314
    }

315 316
    log = virtTestLogContentAndReset();
    VIR_FREE(log);
317
    virResetLastError();
J
Jiri Denemark 已提交
318

319 320
    if (vmdef->os.arch == VIR_ARCH_X86_64 ||
        vmdef->os.arch == VIR_ARCH_I686) {
321
        virQEMUCapsSet(extraFlags, QEMU_CAPS_PCI_MULTIBUS);
322 323
    }

324
    if (qemuAssignDeviceAliases(vmdef, extraFlags) < 0)
325
        goto out;
326

327 328 329 330 331 332 333 334 335 336
    for (i = 0; i < vmdef->nhostdevs; i++) {
        virDomainHostdevDefPtr hostdev = vmdef->hostdevs[i];

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

337
    for (i = 0; i < vmdef->ndisks; i++) {
338
        if (virStorageTranslateDiskSourcePool(conn, vmdef->disks[i]) < 0)
339 340 341
            goto out;
    }

342 343
    if (!(cmd = qemuBuildCommandLine(conn, &driver, vmdef, &monitor_chr,
                                     (flags & FLAG_JSON), extraFlags,
344
                                     migrateFrom, migrateFd, NULL,
345
                                     VIR_NETDEV_VPORT_PROFILE_OP_NO_OP,
346
                                     &testCallbacks, false,
347
                                     (flags & FLAG_FIPS),
348
                                     nodeset, NULL, NULL))) {
349 350
        if (!virtTestOOMActive() &&
            (flags & FLAG_EXPECT_FAILURE)) {
351
            ret = 0;
352 353
            VIR_TEST_DEBUG("Got expected error: %s\n",
                    virGetLastErrorMessage());
354 355 356
            virResetLastError();
        }
        goto out;
357
    } else if (flags & FLAG_EXPECT_FAILURE) {
358
        VIR_TEST_DEBUG("qemuBuildCommandLine should have failed\n");
359 360
        goto out;
    }
361

362 363
    if (!virtTestOOMActive() &&
        (!!virGetLastError() != !!(flags & FLAG_EXPECT_ERROR))) {
364 365
        if ((log = virtTestLogContentAndReset()))
            VIR_TEST_DEBUG("\n%s", log);
366
        goto out;
J
Jiri Denemark 已提交
367 368
    }

E
Eric Blake 已提交
369
    if (!(actualargv = virCommandToString(cmd)))
370
        goto out;
E
Eric Blake 已提交
371

C
Cole Robinson 已提交
372
    if (virtTestCompareToFile(actualargv, cmdline) < 0)
373
        goto out;
374

375
 ok:
376 377
    if (!virtTestOOMActive() &&
        (flags & FLAG_EXPECT_ERROR)) {
378 379 380 381
        /* need to suppress the errors */
        virResetLastError();
    }

382 383
    ret = 0;

384
 out:
385 386
    VIR_FREE(log);
    VIR_FREE(actualargv);
E
Eric Blake 已提交
387
    virCommandFree(cmd);
388
    virDomainDefFree(vmdef);
389
    virObjectUnref(conn);
390
    virBitmapFree(nodeset);
391 392 393 394
    return ret;
}


395 396
struct testInfo {
    const char *name;
397
    virQEMUCapsPtr extraFlags;
398
    const char *migrateFrom;
399
    int migrateFd;
400
    unsigned int flags;
401 402
};

403 404 405 406
static int
testCompareXMLToArgvHelper(const void *data)
{
    int result = -1;
407
    const struct testInfo *info = data;
408 409
    char *xml = NULL;
    char *args = NULL;
410
    unsigned int flags = info->flags;
411 412 413 414 415 416 417

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

418
    if (virQEMUCapsGet(info->extraFlags, QEMU_CAPS_MONITOR_JSON))
419 420
        flags |= FLAG_JSON;

421 422 423
    if (virQEMUCapsGet(info->extraFlags, QEMU_CAPS_ENABLE_FIPS))
        flags |= FLAG_FIPS;

P
Pavel Fedin 已提交
424 425 426 427 428
    result = qemuTestCapsCacheInsert(driver.qemuCapsCache, info->name,
                                     info->extraFlags);
    if (result < 0)
        goto cleanup;

429
    result = testCompareXMLToArgvFiles(xml, args, info->extraFlags,
430
                                       info->migrateFrom, info->migrateFd,
431
                                       flags);
432

433
 cleanup:
434 435
    VIR_FREE(xml);
    VIR_FREE(args);
436
    return result;
437 438 439
}


440
static int
441
testAddCPUModels(virQEMUCapsPtr caps, bool skipLegacy)
442 443 444 445
{
    const char *newModels[] = {
        "Opteron_G3", "Opteron_G2", "Opteron_G1",
        "Nehalem", "Penryn", "Conroe",
446
        "Haswell-noTSX", "Haswell",
447 448 449 450 451 452 453 454
    };
    const char *legacyModels[] = {
        "n270", "athlon", "pentium3", "pentium2", "pentium",
        "486", "coreduo", "kvm32", "qemu32", "kvm64",
        "core2duo", "phenom", "qemu64",
    };
    size_t i;

455
    for (i = 0; i < ARRAY_CARDINALITY(newModels); i++) {
456
        if (virQEMUCapsAddCPUDefinition(caps, newModels[i]) < 0)
457 458 459 460
            return -1;
    }
    if (skipLegacy)
        return 0;
461
    for (i = 0; i < ARRAY_CARDINALITY(legacyModels); i++) {
462
        if (virQEMUCapsAddCPUDefinition(caps, legacyModels[i]) < 0)
463 464 465 466 467
            return -1;
    }
    return 0;
}

468

469
static int
E
Eric Blake 已提交
470
mymain(void)
471 472
{
    int ret = 0;
473
    bool skipLegacyCPUs = false;
474

475 476
    abs_top_srcdir = getenv("abs_top_srcdir");
    if (!abs_top_srcdir)
477
        abs_top_srcdir = abs_srcdir "/..";
478

479 480 481 482 483 484 485 486 487 488
    /* 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;
    }

489
    if (qemuTestDriverInit(&driver) < 0)
490
        return EXIT_FAILURE;
491 492

    driver.privileged = true;
493

494 495 496
    VIR_FREE(driver.config->spiceListen);
    VIR_FREE(driver.config->vncListen);

497
    VIR_FREE(driver.config->vncTLSx509certdir);
498
    if (VIR_STRDUP_QUIET(driver.config->vncTLSx509certdir, "/etc/pki/libvirt-vnc") < 0)
499 500
        return EXIT_FAILURE;
    VIR_FREE(driver.config->spiceTLSx509certdir);
501
    if (VIR_STRDUP_QUIET(driver.config->spiceTLSx509certdir, "/etc/pki/libvirt-spice") < 0)
502 503
        return EXIT_FAILURE;

504
    VIR_FREE(driver.config->stateDir);
505
    if (VIR_STRDUP_QUIET(driver.config->stateDir, "/nowhere") < 0)
506
        return EXIT_FAILURE;
507
    VIR_FREE(driver.config->hugetlbfs);
508
    if (VIR_ALLOC_N(driver.config->hugetlbfs, 2) < 0)
509
        return EXIT_FAILURE;
510 511 512
    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)
513
        return EXIT_FAILURE;
514 515
    driver.config->hugetlbfs[0].size = 2048;
    driver.config->hugetlbfs[0].deflt = true;
516
    driver.config->hugetlbfs[1].size = 1048576;
517
    driver.config->spiceTLS = 1;
518
    if (VIR_STRDUP_QUIET(driver.config->spicePassword, "123456") < 0)
519
        return EXIT_FAILURE;
520 521 522
    VIR_FREE(driver.config->channelTargetDir);
    if (VIR_STRDUP_QUIET(driver.config->channelTargetDir, "/tmp") < 0)
        return EXIT_FAILURE;
523

524
# define DO_TEST_FULL(name, migrateFrom, migrateFd, flags, ...)         \
525
    do {                                                                \
526
        static struct testInfo info = {                                 \
527
            name, NULL, migrateFrom, migrateFd, (flags)                 \
J
Jiri Denemark 已提交
528
        };                                                              \
529
        if (!(info.extraFlags = virQEMUCapsNew()))                      \
530
            return EXIT_FAILURE;                                        \
531 532
        if (testAddCPUModels(info.extraFlags, skipLegacyCPUs) < 0)      \
            return EXIT_FAILURE;                                        \
533
        virQEMUCapsSetList(info.extraFlags, __VA_ARGS__, QEMU_CAPS_LAST);\
534
        if (virtTestRun("QEMU XML-2-ARGV " name,                        \
535
                        testCompareXMLToArgvHelper, &info) < 0)         \
536
            ret = -1;                                                   \
537
        virObjectUnref(info.extraFlags);                                \
538 539
    } while (0)

540 541 542 543 544
# define DO_TEST(name, ...)                                             \
    DO_TEST_FULL(name, NULL, -1, 0, __VA_ARGS__)

# define DO_TEST_ERROR(name, ...)                                       \
    DO_TEST_FULL(name, NULL, -1, FLAG_EXPECT_ERROR, __VA_ARGS__)
545 546

# define DO_TEST_FAILURE(name, ...)                                     \
547 548 549 550 551 552
    DO_TEST_FULL(name, NULL, -1, FLAG_EXPECT_FAILURE, __VA_ARGS__)

# define DO_TEST_PARSE_ERROR(name, ...)                                 \
    DO_TEST_FULL(name, NULL, -1,                                        \
                 FLAG_EXPECT_PARSE_ERROR | FLAG_EXPECT_ERROR,           \
                 __VA_ARGS__)
553

554 555 556
# define DO_TEST_LINUX(name, ...)                                       \
    DO_TEST_LINUX_FULL(name, NULL, -1, 0, __VA_ARGS__)

557 558 559 560 561 562
# 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. */
563 564
#  define DO_TEST_LINUX_FULL(name, ...)                                 \
    DO_TEST_FULL(name, __VA_ARGS__)
565
# else  /* __linux__ */
566
#  define DO_TEST_LINUX_FULL(name, ...)                                 \
567 568 569 570 571
    do {                                                                \
        const char *tmp ATTRIBUTE_UNUSED = name;                        \
    } while (0)
# endif /* __linux__ */

572
# define NONE QEMU_CAPS_LAST
573

574 575 576
    /* 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 */
577 578 579 580 581 582 583
    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");
584 585
    unsetenv("QEMU_AUDIO_DRV");
    unsetenv("SDL_AUDIODRIVER");
586

587
    DO_TEST("minimal", NONE);
588
    DO_TEST_PARSE_ERROR("minimal-no-memory", NONE);
589 590
    DO_TEST("minimal-msg-timestamp", QEMU_CAPS_MSG_TIMESTAMP);
    DO_TEST("minimal-s390", NONE);
591
    DO_TEST("machine-aliases1", NONE);
592
    DO_TEST("machine-aliases2", QEMU_CAPS_KVM);
593 594 595 596
    DO_TEST("machine-core-on", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_DUMP_GUEST_CORE);
    DO_TEST("machine-core-off", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_DUMP_GUEST_CORE);
597
    DO_TEST_FAILURE("machine-core-on", NONE);
598
    DO_TEST_FAILURE("machine-core-on", QEMU_CAPS_MACHINE_OPT);
L
Li Zhang 已提交
599 600
    DO_TEST("machine-usb-opt", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_USB_OPT);
601 602
    DO_TEST("machine-vmport-opt", QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACHINE_VMPORT_OPT);
603
    DO_TEST("kvm", QEMU_CAPS_MACHINE_OPT);
604 605
    DO_TEST("default-kvm-host-arch", QEMU_CAPS_MACHINE_OPT);
    DO_TEST("default-qemu-host-arch", QEMU_CAPS_MACHINE_OPT);
606 607 608
    DO_TEST("boot-cdrom", NONE);
    DO_TEST("boot-network", NONE);
    DO_TEST("boot-floppy", NONE);
609 610 611
    DO_TEST("boot-floppy-q35",
            QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
612
            QEMU_CAPS_ICH9_AHCI);
613 614 615
    DO_TEST("bootindex-floppy-q35",
            QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
616
            QEMU_CAPS_ICH9_AHCI, QEMU_CAPS_BOOT_MENU,
617
            QEMU_CAPS_BOOTINDEX);
618 619
    DO_TEST("boot-multi", QEMU_CAPS_BOOT_MENU);
    DO_TEST("boot-menu-enable",
620
            QEMU_CAPS_BOOT_MENU, QEMU_CAPS_DEVICE);
621
    DO_TEST("boot-menu-enable",
622
            QEMU_CAPS_BOOT_MENU, QEMU_CAPS_DEVICE,
623
            QEMU_CAPS_BOOTINDEX);
624 625
    DO_TEST("boot-menu-enable-with-timeout",
            QEMU_CAPS_BOOT_MENU, QEMU_CAPS_DEVICE,
626
            QEMU_CAPS_SPLASH_TIMEOUT);
627
    DO_TEST_FAILURE("boot-menu-enable-with-timeout", QEMU_CAPS_BOOT_MENU);
628
    DO_TEST_PARSE_ERROR("boot-menu-enable-with-timeout-invalid", NONE);
629 630
    DO_TEST("boot-menu-disable", QEMU_CAPS_BOOT_MENU);
    DO_TEST("boot-menu-disable-drive",
631
            QEMU_CAPS_BOOT_MENU, QEMU_CAPS_DEVICE);
632
    DO_TEST("boot-menu-disable-drive-bootindex",
633
            QEMU_CAPS_BOOT_MENU, QEMU_CAPS_DEVICE,
634
            QEMU_CAPS_BOOTINDEX);
635
    DO_TEST_PARSE_ERROR("boot-dev+order",
636
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_DEVICE,
637
            QEMU_CAPS_VIRTIO_BLK_SCSI, QEMU_CAPS_VIRTIO_BLK_SG_IO);
638
    DO_TEST("boot-order",
639
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_DEVICE,
640
            QEMU_CAPS_VIRTIO_BLK_SCSI, QEMU_CAPS_VIRTIO_BLK_SG_IO);
641
    DO_TEST("boot-complex",
642
            QEMU_CAPS_DEVICE, QEMU_CAPS_DRIVE_BOOT,
643
            QEMU_CAPS_VIRTIO_BLK_SCSI, QEMU_CAPS_VIRTIO_BLK_SG_IO);
644
    DO_TEST("boot-complex-bootindex",
645
            QEMU_CAPS_DEVICE, QEMU_CAPS_DRIVE_BOOT,
646 647
            QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_VIRTIO_BLK_SCSI, QEMU_CAPS_VIRTIO_BLK_SG_IO);
648
    DO_TEST("boot-strict",
649
            QEMU_CAPS_DEVICE, QEMU_CAPS_DRIVE_BOOT,
650 651
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_BOOT_STRICT,
            QEMU_CAPS_VIRTIO_BLK_SCSI, QEMU_CAPS_VIRTIO_BLK_SG_IO);
652 653 654 655 656

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

657
    DO_TEST("bios", QEMU_CAPS_DEVICE, QEMU_CAPS_SGA);
658
    DO_TEST("bios-nvram", QEMU_CAPS_DEVICE,
659
            QEMU_CAPS_DRIVE_READONLY);
660
    DO_TEST("clock-utc", QEMU_CAPS_NODEFCONFIG);
661
    DO_TEST("clock-localtime", NONE);
662
    DO_TEST("clock-localtime-basis-localtime", QEMU_CAPS_RTC);
663 664
    DO_TEST("clock-variable", QEMU_CAPS_RTC);
    DO_TEST("clock-france", QEMU_CAPS_RTC);
665 666
    DO_TEST("clock-hpet-off", QEMU_CAPS_RTC, QEMU_CAPS_NO_HPET,
            QEMU_CAPS_NO_KVM_PIT);
667
    DO_TEST("clock-catchup", QEMU_CAPS_RTC, QEMU_CAPS_NO_KVM_PIT);
668 669 670
    DO_TEST("cpu-kvmclock", QEMU_CAPS_ENABLE_KVM);
    DO_TEST("cpu-host-kvmclock", QEMU_CAPS_ENABLE_KVM, QEMU_CAPS_CPU_HOST);
    DO_TEST("kvmclock", QEMU_CAPS_KVM);
671
    DO_TEST("clock-timer-hyperv-rtc", QEMU_CAPS_KVM);
672

673 674
    DO_TEST("cpu-eoi-disabled", QEMU_CAPS_ENABLE_KVM);
    DO_TEST("cpu-eoi-enabled", QEMU_CAPS_ENABLE_KVM);
675
    DO_TEST("controller-order", QEMU_CAPS_PCIDEVICE,
676 677 678 679 680
            QEMU_CAPS_KVM, QEMU_CAPS_DEVICE, QEMU_CAPS_ENABLE_KVM,
            QEMU_CAPS_BOOT_MENU, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_DRIVE_AIO,
            QEMU_CAPS_CCID_PASSTHRU, QEMU_CAPS_CHARDEV,
            QEMU_CAPS_CHARDEV_SPICEVMC, QEMU_CAPS_SPICE, QEMU_CAPS_HDA_DUPLEX);
681 682
    DO_TEST("eoi-disabled", NONE);
    DO_TEST("eoi-enabled", NONE);
683 684
    DO_TEST("pv-spinlock-disabled", NONE);
    DO_TEST("pv-spinlock-enabled", NONE);
M
Martin Kletzander 已提交
685
    DO_TEST("kvmclock+eoi-disabled", QEMU_CAPS_ENABLE_KVM);
686

687
    DO_TEST("hyperv", NONE);
688
    DO_TEST("hyperv-off", NONE);
689

690 691 692
    DO_TEST("kvm-features", NONE);
    DO_TEST("kvm-features-off", NONE);

693 694 695
    DO_TEST("pmu-feature", NONE);
    DO_TEST("pmu-feature-off", NONE);

696
    DO_TEST("hugepages", QEMU_CAPS_MEM_PATH);
697 698
    DO_TEST("hugepages-numa", QEMU_CAPS_RTC, QEMU_CAPS_NO_KVM_PIT,
            QEMU_CAPS_DISABLE_S3, QEMU_CAPS_DISABLE_S4,
699
            QEMU_CAPS_DEVICE, QEMU_CAPS_VIRTIO_SCSI,
700 701 702 703
            QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_PCI_MULTIFUNCTION,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC,
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL,
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_USB_REDIR,
704
            QEMU_CAPS_DEVICE_PC_DIMM,
705
            QEMU_CAPS_MEM_PATH, QEMU_CAPS_OBJECT_MEMORY_FILE);
706 707 708
    DO_TEST_LINUX("hugepages-pages", QEMU_CAPS_MEM_PATH,
                  QEMU_CAPS_OBJECT_MEMORY_RAM,
                  QEMU_CAPS_OBJECT_MEMORY_FILE);
709 710 711 712
    DO_TEST("hugepages-pages2", QEMU_CAPS_MEM_PATH, QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
    DO_TEST("hugepages-pages3", QEMU_CAPS_MEM_PATH, QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
713 714 715
    DO_TEST_LINUX("hugepages-shared", QEMU_CAPS_MEM_PATH,
                  QEMU_CAPS_OBJECT_MEMORY_RAM,
                  QEMU_CAPS_OBJECT_MEMORY_FILE);
716
    DO_TEST_PARSE_ERROR("hugepages-memaccess-invalid", NONE);
717 718
    DO_TEST_FAILURE("hugepages-pages4", QEMU_CAPS_MEM_PATH,
            QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
719
    DO_TEST("hugepages-pages5", QEMU_CAPS_MEM_PATH);
720
    DO_TEST("hugepages-pages6", NONE);
721
    DO_TEST("nosharepages", QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_MEM_MERGE);
722
    DO_TEST("disk-cdrom", NONE);
723
    DO_TEST("disk-iscsi", NONE);
724 725 726 727 728 729
    DO_TEST("disk-cdrom-network-http", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE);
    DO_TEST("disk-cdrom-network-https", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE);
    DO_TEST("disk-cdrom-network-ftp", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE);
    DO_TEST("disk-cdrom-network-ftps", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE);
    DO_TEST("disk-cdrom-network-tftp", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE);
    DO_TEST("disk-cdrom-empty", NONE);
730
    DO_TEST("disk-cdrom-tray",
731
            QEMU_CAPS_DEVICE, QEMU_CAPS_VIRTIO_TX_ALG);
732 733
    DO_TEST("disk-cdrom-tray-no-device-cap", NONE);
    DO_TEST("disk-floppy", NONE);
734
    DO_TEST_FAILURE("disk-floppy-pseries", NONE);
735 736
    DO_TEST("disk-floppy-tray-no-device-cap", NONE);
    DO_TEST("disk-floppy-tray",
737 738
            QEMU_CAPS_DEVICE);
    DO_TEST("disk-virtio-s390",
739
            QEMU_CAPS_DEVICE, QEMU_CAPS_VIRTIO_S390);
740
    DO_TEST("disk-many", NONE);
741 742
    DO_TEST("disk-virtio", QEMU_CAPS_DRIVE_BOOT);
    DO_TEST("disk-virtio-ccw",
743
            QEMU_CAPS_DEVICE, QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
744
    DO_TEST("disk-virtio-ccw-many",
745
            QEMU_CAPS_DEVICE, QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
746
    DO_TEST("disk-virtio-scsi-ccw", QEMU_CAPS_VIRTIO_SCSI,
747
            QEMU_CAPS_DEVICE, QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
748
    DO_TEST("disk-order",
749
            QEMU_CAPS_DEVICE, QEMU_CAPS_DRIVE_BOOT,
750
            QEMU_CAPS_VIRTIO_BLK_SCSI, QEMU_CAPS_VIRTIO_BLK_SG_IO);
751
    DO_TEST("disk-xenvbd", QEMU_CAPS_DRIVE_BOOT);
752
    DO_TEST("disk-drive-boot-disk",
753
            QEMU_CAPS_DRIVE_BOOT);
754
    DO_TEST("disk-drive-boot-cdrom",
755
            QEMU_CAPS_DRIVE_BOOT);
756
    DO_TEST("floppy-drive-fat",
757
            QEMU_CAPS_DRIVE_BOOT);
758
    DO_TEST("disk-drive-fat",
759
            QEMU_CAPS_DRIVE_BOOT);
760
    DO_TEST("disk-drive-readonly-disk",
761
            QEMU_CAPS_DRIVE_READONLY,
762
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
763
    DO_TEST("disk-drive-readonly-no-device",
764
            QEMU_CAPS_DRIVE_READONLY, QEMU_CAPS_NODEFCONFIG);
765
    DO_TEST("disk-drive-fmt-qcow",
766
            QEMU_CAPS_DRIVE_BOOT);
767
    DO_TEST("disk-drive-shared",
768
            QEMU_CAPS_DRIVE_SERIAL);
769
    DO_TEST("disk-drive-error-policy-stop",
770
            QEMU_CAPS_MONITOR_JSON);
771
    DO_TEST("disk-drive-error-policy-enospace",
772
            QEMU_CAPS_MONITOR_JSON);
773
    DO_TEST("disk-drive-error-policy-wreport-rignore",
774 775 776 777
            QEMU_CAPS_MONITOR_JSON);
    DO_TEST("disk-drive-cache-v2-wt", NONE);
    DO_TEST("disk-drive-cache-v2-wb", NONE);
    DO_TEST("disk-drive-cache-v2-none", NONE);
778
    DO_TEST("disk-drive-cache-directsync",
779
            QEMU_CAPS_DRIVE_CACHE_DIRECTSYNC);
780
    DO_TEST("disk-drive-cache-unsafe",
781
            QEMU_CAPS_DRIVE_CACHE_UNSAFE);
782
    DO_TEST("disk-drive-copy-on-read",
783 784 785 786 787 788 789 790
            QEMU_CAPS_DRIVE_COPY_ON_READ);
    DO_TEST("disk-drive-network-nbd", NONE);
    DO_TEST("disk-drive-network-nbd-export", NONE);
    DO_TEST("disk-drive-network-nbd-ipv6", NONE);
    DO_TEST("disk-drive-network-nbd-ipv6-export", NONE);
    DO_TEST("disk-drive-network-nbd-unix", NONE);
    DO_TEST("disk-drive-network-iscsi", NONE);
    DO_TEST("disk-drive-network-iscsi-auth", NONE);
791
    DO_TEST("disk-drive-network-iscsi-lun",
792
            QEMU_CAPS_DEVICE,
793 794
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_VIRTIO_BLK_SG_IO, QEMU_CAPS_SCSI_BLOCK);
795 796 797 798 799 800
    DO_TEST("disk-drive-network-gluster", NONE);
    DO_TEST("disk-drive-network-rbd", NONE);
    DO_TEST("disk-drive-network-sheepdog", NONE);
    DO_TEST("disk-drive-network-rbd-auth", NONE);
    DO_TEST("disk-drive-network-rbd-ipv6", NONE);
    DO_TEST_FAILURE("disk-drive-network-rbd-no-colon", NONE);
801
    DO_TEST("disk-drive-no-boot",
802
            QEMU_CAPS_DEVICE, QEMU_CAPS_BOOTINDEX);
803
    DO_TEST_PARSE_ERROR("disk-device-lun-type-invalid",
804
                    QEMU_CAPS_DEVICE, QEMU_CAPS_VIRTIO_SCSI);
805 806
    DO_TEST("disk-usb",  NONE);
    DO_TEST("disk-usb-device",
807
            QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_USB_STORAGE,
808
            QEMU_CAPS_NODEFCONFIG);
809
    DO_TEST("disk-usb-device-removable",
810
            QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_USB_STORAGE,
811
            QEMU_CAPS_USB_STORAGE_REMOVABLE, QEMU_CAPS_NODEFCONFIG);
812
    DO_TEST_FAILURE("disk-usb-pci",
813
                    QEMU_CAPS_DEVICE,
814
                    QEMU_CAPS_DEVICE_USB_STORAGE, QEMU_CAPS_NODEFCONFIG);
815
    DO_TEST("disk-scsi-device",
816
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
817
            QEMU_CAPS_SCSI_LSI);
818
    DO_TEST("disk-scsi-device-auto",
819
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
820
            QEMU_CAPS_SCSI_LSI);
821
    DO_TEST("disk-scsi-disk-split",
822
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
823
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI);
824
    DO_TEST("disk-scsi-disk-wwn",
825
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
826
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
827 828
            QEMU_CAPS_SCSI_DISK_WWN);
    DO_TEST("disk-scsi-disk-vpd",
829
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
830
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
831 832
            QEMU_CAPS_SCSI_DISK_WWN);
    DO_TEST_FAILURE("disk-scsi-disk-vpd-build-error",
833
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
834
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
835
            QEMU_CAPS_SCSI_DISK_WWN);
836
    DO_TEST("disk-scsi-vscsi",
837
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
838
    DO_TEST("disk-scsi-virtio-scsi",
839
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
840
            QEMU_CAPS_VIRTIO_SCSI);
841
    DO_TEST("disk-virtio-scsi-num_queues",
842
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
843
            QEMU_CAPS_VIRTIO_SCSI);
844
    DO_TEST("disk-virtio-scsi-cmd_per_lun",
845
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
846 847
            QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST("disk-virtio-scsi-max_sectors",
848
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
849
            QEMU_CAPS_VIRTIO_SCSI);
850
    DO_TEST("disk-virtio-scsi-ioeventfd",
851
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
852
            QEMU_CAPS_VIRTIO_IOEVENTFD, QEMU_CAPS_VIRTIO_SCSI);
853
    DO_TEST("disk-scsi-megasas",
854
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
855
            QEMU_CAPS_SCSI_MEGASAS);
856
    DO_TEST("disk-sata-device",
857
            QEMU_CAPS_DEVICE,
J
Jim Fehlig 已提交
858
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_ICH9_AHCI);
859
    DO_TEST("disk-aio",
860
            QEMU_CAPS_DRIVE_AIO);
861
    DO_TEST("disk-source-pool",
862
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
863
    DO_TEST("disk-source-pool-mode",
864
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
865
    DO_TEST("disk-ioeventfd",
866
            QEMU_CAPS_VIRTIO_IOEVENTFD,
867
            QEMU_CAPS_VIRTIO_TX_ALG, QEMU_CAPS_DEVICE,
O
Osier Yang 已提交
868
            QEMU_CAPS_VIRTIO_BLK_SCSI, QEMU_CAPS_VIRTIO_BLK_SG_IO);
869
    DO_TEST("disk-copy_on_read",
870
            QEMU_CAPS_DRIVE_COPY_ON_READ,
O
Osier Yang 已提交
871
            QEMU_CAPS_VIRTIO_TX_ALG, QEMU_CAPS_DEVICE,
872
            QEMU_CAPS_VIRTIO_BLK_SCSI, QEMU_CAPS_VIRTIO_BLK_SG_IO);
O
Osier Yang 已提交
873
    DO_TEST("disk-drive-discard",
874
            QEMU_CAPS_DRIVE_DISCARD,
O
Osier Yang 已提交
875
            QEMU_CAPS_DEVICE);
876
    DO_TEST("disk-snapshot", NONE);
877
    DO_TEST_FAILURE("disk-same-targets",
878
                    QEMU_CAPS_DEVICE, QEMU_CAPS_SCSI_LSI,
879
                    QEMU_CAPS_DEVICE_USB_STORAGE, QEMU_CAPS_NODEFCONFIG);
880
    DO_TEST("event_idx",
881 882
            QEMU_CAPS_VIRTIO_BLK_EVENT_IDX,
            QEMU_CAPS_VIRTIO_NET_EVENT_IDX,
883 884
            QEMU_CAPS_DEVICE,
            QEMU_CAPS_VIRTIO_BLK_SCSI, QEMU_CAPS_VIRTIO_BLK_SG_IO);
885
    DO_TEST("virtio-lun",
886 887
            QEMU_CAPS_DEVICE,
            QEMU_CAPS_VIRTIO_BLK_SCSI, QEMU_CAPS_VIRTIO_BLK_SG_IO);
888
    DO_TEST("disk-scsi-lun-passthrough",
889
            QEMU_CAPS_DEVICE,
890
            QEMU_CAPS_SCSI_BLOCK, QEMU_CAPS_VIRTIO_BLK_SG_IO,
891
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI);
892 893 894 895
    DO_TEST("disk-serial",
            QEMU_CAPS_KVM,
            QEMU_CAPS_DEVICE,
            QEMU_CAPS_DRIVE_SERIAL);
896

897 898
    DO_TEST("graphics-vnc", QEMU_CAPS_VNC);
    DO_TEST("graphics-vnc-socket", QEMU_CAPS_VNC);
899
    DO_TEST("graphics-vnc-websocket", QEMU_CAPS_VNC, QEMU_CAPS_VNC_WEBSOCKET);
900
    DO_TEST("graphics-vnc-policy", QEMU_CAPS_VNC, QEMU_CAPS_VNC_SHARE_POLICY);
901

902 903
    driver.config->vncSASL = 1;
    VIR_FREE(driver.config->vncSASLdir);
904
    ignore_value(VIR_STRDUP(driver.config->vncSASLdir, "/root/.sasl2"));
905
    DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VNC, QEMU_CAPS_VGA);
906 907
    driver.config->vncTLS = 1;
    driver.config->vncTLSx509verify = 1;
908
    DO_TEST("graphics-vnc-tls", QEMU_CAPS_VNC);
909
    driver.config->vncSASL = driver.config->vncTLSx509verify = driver.config->vncTLS = 0;
910 911
    VIR_FREE(driver.config->vncSASLdir);
    VIR_FREE(driver.config->vncTLSx509certdir);
912

913 914 915 916
    DO_TEST("graphics-sdl", NONE);
    DO_TEST("graphics-sdl-fullscreen", NONE);
    DO_TEST("nographics", QEMU_CAPS_VGA);
    DO_TEST("nographics-vga",
917
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_NONE);
918
    DO_TEST("graphics-spice",
919
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL,
920
            QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE,
921 922
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
923 924 925 926 927 928 929 930
    driver.config->spiceSASL = 1;
    ignore_value(VIR_STRDUP(driver.config->spiceSASLdir, "/root/.sasl2"));
    DO_TEST("graphics-spice-sasl",
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL,
            QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE,
            QEMU_CAPS_DEVICE_QXL);
    VIR_FREE(driver.config->spiceSASLdir);
    driver.config->spiceSASL = 0;
931
    DO_TEST("graphics-spice-agentmouse",
P
Peng Zhou 已提交
932
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL,
933 934 935
            QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE,
            QEMU_CAPS_CHARDEV_SPICEVMC,
            QEMU_CAPS_NODEFCONFIG);
936
    DO_TEST("graphics-spice-compression",
937
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL,
938 939
            QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE,
            QEMU_CAPS_DEVICE_QXL);
940
    DO_TEST("graphics-spice-timeout",
941
            QEMU_CAPS_KVM,
942 943 944
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL,
            QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE,
            QEMU_CAPS_DEVICE_QXL_VGA);
945
    DO_TEST("graphics-spice-qxl-vga",
946 947
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL,
            QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE,
948 949
            QEMU_CAPS_DEVICE_QXL_VGA,
            QEMU_CAPS_DEVICE_QXL);
950
    DO_TEST("graphics-spice-usb-redir",
951 952 953 954 955
            QEMU_CAPS_VGA, QEMU_CAPS_SPICE,
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_CHARDEV_SPICEVMC);
956 957 958 959 960 961
    DO_TEST("graphics-spice-agent-file-xfer",
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL,
            QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE,
            QEMU_CAPS_DEVICE_QXL_VGA,
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
962

963 964 965
    DO_TEST("input-usbmouse", NONE);
    DO_TEST("input-usbtablet", NONE);
    DO_TEST("misc-acpi", NONE);
966 967 968 969
    DO_TEST("misc-disable-s3", QEMU_CAPS_DISABLE_S3);
    DO_TEST("misc-disable-suspends", QEMU_CAPS_DISABLE_S3, QEMU_CAPS_DISABLE_S4);
    DO_TEST("misc-enable-s4", QEMU_CAPS_DISABLE_S4);
    DO_TEST_FAILURE("misc-enable-s4", NONE);
970
    DO_TEST("misc-no-reboot", NONE);
971
    DO_TEST("misc-uuid", NONE);
972
    DO_TEST_PARSE_ERROR("vhost_queues-invalid", NONE);
M
Michele Paolino 已提交
973
    DO_TEST("net-vhostuser", QEMU_CAPS_DEVICE, QEMU_CAPS_NETDEV);
974
    DO_TEST("net-vhostuser-multiq",
J
Ján Tomko 已提交
975
            QEMU_CAPS_DEVICE, QEMU_CAPS_NETDEV, QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
976
    DO_TEST_FAILURE("net-vhostuser-multiq", QEMU_CAPS_DEVICE, QEMU_CAPS_NETDEV);
977 978 979
    DO_TEST("net-user", NONE);
    DO_TEST("net-virtio", NONE);
    DO_TEST("net-virtio-device",
980
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_VIRTIO_TX_ALG);
981 982
    DO_TEST("net-virtio-disable-offloads",
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
983
    DO_TEST("net-virtio-netdev",
984
            QEMU_CAPS_DEVICE, QEMU_CAPS_NETDEV, QEMU_CAPS_NODEFCONFIG);
985
    DO_TEST("net-virtio-s390",
986
            QEMU_CAPS_DEVICE, QEMU_CAPS_VIRTIO_S390);
987 988
    DO_TEST("net-virtio-ccw",
            QEMU_CAPS_DEVICE, QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
989 990 991 992 993 994
    DO_TEST("net-eth", NONE);
    DO_TEST("net-eth-ifname", NONE);
    DO_TEST("net-eth-names", QEMU_CAPS_NET_NAME);
    DO_TEST("net-client", NONE);
    DO_TEST("net-server", NONE);
    DO_TEST("net-mcast", NONE);
995
    DO_TEST("net-udp", NONE);
996
    DO_TEST("net-hostdev",
997
            QEMU_CAPS_PCIDEVICE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
998 999 1000 1001 1002 1003
    DO_TEST("net-hostdev-multidomain",
            QEMU_CAPS_PCIDEVICE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_HOST_PCI_MULTIDOMAIN);
    DO_TEST_FAILURE("net-hostdev-multidomain",
                    QEMU_CAPS_PCIDEVICE, QEMU_CAPS_DEVICE,
                    QEMU_CAPS_NODEFCONFIG);
1004 1005 1006
    DO_TEST("net-hostdev-vfio",
            QEMU_CAPS_PCIDEVICE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_VFIO_PCI);
1007 1008 1009 1010 1011 1012
    DO_TEST("net-hostdev-vfio-multidomain",
            QEMU_CAPS_PCIDEVICE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_VFIO_PCI, QEMU_CAPS_HOST_PCI_MULTIDOMAIN);
    DO_TEST_FAILURE("net-hostdev-vfio-multidomain",
                    QEMU_CAPS_PCIDEVICE, QEMU_CAPS_DEVICE,
                    QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VFIO_PCI);
1013

1014 1015 1016 1017 1018 1019 1020 1021 1022
    DO_TEST("serial-vc", NONE);
    DO_TEST("serial-pty", NONE);
    DO_TEST("serial-dev", NONE);
    DO_TEST("serial-file", NONE);
    DO_TEST("serial-unix", NONE);
    DO_TEST("serial-tcp", NONE);
    DO_TEST("serial-udp", NONE);
    DO_TEST("serial-tcp-telnet", NONE);
    DO_TEST("serial-many", NONE);
1023 1024 1025 1026 1027
    DO_TEST("serial-spiceport",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_QXL_VGA,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEPORT);
1028
    DO_TEST("serial-spiceport-nospice", NONE);
1029

1030 1031 1032 1033 1034
    DO_TEST("parallel-tcp", NONE);
    DO_TEST("console-compat", NONE);
    DO_TEST("console-compat-auto", NONE);

    DO_TEST("serial-vc-chardev",
1035
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
1036
    DO_TEST("serial-pty-chardev",
1037
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
1038
    DO_TEST("serial-dev-chardev",
1039
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
1040 1041
    DO_TEST("serial-dev-chardev-iobase",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
1042
    DO_TEST("serial-file-chardev",
1043
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
1044
    DO_TEST("serial-unix-chardev",
1045
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
1046
    DO_TEST("serial-tcp-chardev",
1047
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
1048
    DO_TEST("serial-udp-chardev",
1049
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
1050
    DO_TEST("serial-tcp-telnet-chardev",
1051
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
1052
    DO_TEST("serial-many-chardev",
1053
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
1054
    DO_TEST("parallel-tcp-chardev",
1055
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
1056
    DO_TEST("parallel-parport-chardev",
1057
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
1058
    DO_TEST("console-compat-chardev",
1059
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
M
Michal Privoznik 已提交
1060 1061 1062
    DO_TEST("pci-serial-dev-chardev",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_PCI_SERIAL);
1063

1064
    DO_TEST("channel-guestfwd",
1065
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
1066
    DO_TEST("channel-virtio",
1067
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1068 1069
    DO_TEST("channel-virtio-state",
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1070
    DO_TEST("channel-virtio-auto",
1071
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1072 1073
    DO_TEST("channel-virtio-autoassign",
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
J
Ján Tomko 已提交
1074 1075
    DO_TEST("channel-virtio-autoadd",
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1076
    DO_TEST("console-virtio",
1077
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1078
    DO_TEST("console-virtio-many",
1079
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1080
    DO_TEST("console-virtio-s390",
1081
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1082
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390);
1083 1084
    DO_TEST("console-virtio-ccw",
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1085
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_CCW,
1086
            QEMU_CAPS_VIRTIO_S390);
1087 1088
    DO_TEST("console-sclp",
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1089
            QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_SCLP_S390);
1090
    DO_TEST("channel-spicevmc",
1091 1092
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC);
1093
    DO_TEST("channel-spicevmc-old",
1094 1095
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_SPICEVMC);
1096 1097 1098
    DO_TEST("channel-virtio-default",
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC);
1099 1100
    DO_TEST("channel-virtio-unix",
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
1101

1102
    DO_TEST("smartcard-host",
1103 1104
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);
1105
    DO_TEST("smartcard-host-certificates",
1106 1107
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);
1108
    DO_TEST("smartcard-passthrough-tcp",
1109 1110
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_PASSTHRU);
1111
    DO_TEST("smartcard-passthrough-spicevmc",
1112 1113
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_CCID_PASSTHRU, QEMU_CAPS_CHARDEV_SPICEVMC);
1114
    DO_TEST("smartcard-controller",
1115 1116 1117
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);

1118
    DO_TEST("usb-controller",
1119 1120
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
            QEMU_CAPS_NODEFCONFIG);
1121
    DO_TEST("usb-piix3-controller",
1122
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_PIIX3_USB_UHCI,
1123
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_NODEFCONFIG);
1124
    DO_TEST("usb-ich9-ehci-addr",
1125 1126
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1);
1127
    DO_TEST("input-usbmouse-addr",
1128
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
1129
    DO_TEST("usb-ich9-companion",
1130 1131
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1);
1132 1133 1134
    DO_TEST_PARSE_ERROR("usb-ich9-no-companion",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1);
1135
    DO_TEST("usb-hub",
M
Marc-André Lureau 已提交
1136 1137
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
1138
    DO_TEST("usb-ports",
1139 1140
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
1141
    DO_TEST("usb-redir",
1142 1143
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB,
1144 1145
            QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC);
1146 1147 1148 1149 1150 1151
    DO_TEST("usb-redir-boot",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC, QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_USB_REDIR_BOOTINDEX);
1152 1153 1154 1155 1156 1157
    DO_TEST("usb-redir-filter",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC,
            QEMU_CAPS_USB_REDIR_FILTER);
1158 1159 1160 1161 1162
    DO_TEST("usb-redir-filter-version",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC,
            QEMU_CAPS_USB_REDIR_FILTER);
1163
    DO_TEST("usb1-usb2",
1164 1165 1166
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_USB_HUB, QEMU_CAPS_ICH9_USB_EHCI1);
1167 1168 1169 1170 1171 1172 1173 1174 1175 1176
    DO_TEST("usb-none",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
    DO_TEST_PARSE_ERROR("usb-none-other",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
    DO_TEST_PARSE_ERROR("usb-none-hub",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_USB_HUB);
    DO_TEST_PARSE_ERROR("usb-none-usbtablet",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);

1177

1178
    DO_TEST("smbios", QEMU_CAPS_SMBIOS_TYPE);
1179
    DO_TEST_PARSE_ERROR("smbios-date", QEMU_CAPS_SMBIOS_TYPE);
1180
    DO_TEST_PARSE_ERROR("smbios-uuid-match", QEMU_CAPS_SMBIOS_TYPE);
1181

1182 1183 1184
    DO_TEST("watchdog", NONE);
    DO_TEST("watchdog-device", QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
    DO_TEST("watchdog-dump", NONE);
1185
    DO_TEST("watchdog-injectnmi", NONE);
1186 1187
    DO_TEST("watchdog-diag288",
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1188
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390);
1189 1190
    DO_TEST("balloon-device", QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
    DO_TEST("balloon-device-auto",
1191
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
1192
    DO_TEST("balloon-device-period", QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
1193 1194
    DO_TEST("sound", NONE);
    DO_TEST("sound-device",
1195
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
1196
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_HDA_MICRO,
1197 1198
            QEMU_CAPS_DEVICE_ICH9_INTEL_HDA,
            QEMU_CAPS_OBJECT_USB_AUDIO);
1199
    DO_TEST("fs9p",
1200 1201
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_FSDEV,
            QEMU_CAPS_FSDEV_WRITEOUT);
1202 1203
    DO_TEST("fs9p-ccw",
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_FSDEV,
1204
            QEMU_CAPS_FSDEV_WRITEOUT,
1205
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1206

1207 1208
    DO_TEST("hostdev-usb-address", NONE);
    DO_TEST("hostdev-usb-address-device",
1209
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
1210 1211 1212
    DO_TEST("hostdev-usb-address-device-boot", QEMU_CAPS_DEVICE,
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_USB_HOST_BOOTINDEX);
1213 1214
    DO_TEST("hostdev-pci-address", QEMU_CAPS_PCIDEVICE);
    DO_TEST("hostdev-pci-address-device",
1215
            QEMU_CAPS_PCIDEVICE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
1216 1217 1218
    DO_TEST("hostdev-vfio",
            QEMU_CAPS_PCIDEVICE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_VFIO_PCI);
1219 1220 1221 1222 1223 1224
    DO_TEST("hostdev-vfio-multidomain",
            QEMU_CAPS_PCIDEVICE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_VFIO_PCI, QEMU_CAPS_HOST_PCI_MULTIDOMAIN);
    DO_TEST_FAILURE("hostdev-vfio-multidomain",
                    QEMU_CAPS_PCIDEVICE, QEMU_CAPS_DEVICE,
                    QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VFIO_PCI);
1225
    DO_TEST("pci-rom",
1226 1227
            QEMU_CAPS_PCIDEVICE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_ROMBAR);
1228

1229 1230 1231 1232
    DO_TEST_FULL("restore-v2", "exec:cat", 7, 0, NONE);
    DO_TEST_FULL("restore-v2-fd", "stdio", 7, 0, NONE);
    DO_TEST_FULL("restore-v2-fd", "fd:7", 7, 0, NONE);
    DO_TEST_FULL("migrate", "tcp:10.0.0.1:5000", -1, 0, NONE);
1233

1234
    DO_TEST_LINUX_FULL("migrate-numa-unaligned", "stdio", 7, 0,
1235
                       QEMU_CAPS_NUMA,
1236 1237
                       QEMU_CAPS_OBJECT_MEMORY_RAM);

1238
    DO_TEST("qemu-ns", NONE);
1239

1240
    DO_TEST("smp", QEMU_CAPS_SMP_TOPOLOGY);
1241

J
John Ferlan 已提交
1242
    DO_TEST("iothreads", QEMU_CAPS_OBJECT_IOTHREAD);
1243 1244
    DO_TEST("iothreads-ids", QEMU_CAPS_OBJECT_IOTHREAD);
    DO_TEST("iothreads-ids-partial", QEMU_CAPS_OBJECT_IOTHREAD);
1245
    DO_TEST_FAILURE("iothreads-nocap", NONE);
1246
    DO_TEST("iothreads-disk", QEMU_CAPS_OBJECT_IOTHREAD, QEMU_CAPS_DEVICE);
1247
    DO_TEST("iothreads-disk-virtio-ccw", QEMU_CAPS_OBJECT_IOTHREAD, QEMU_CAPS_DEVICE,
1248
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
J
John Ferlan 已提交
1249

1250 1251 1252
    DO_TEST("cpu-topology1", QEMU_CAPS_SMP_TOPOLOGY);
    DO_TEST("cpu-topology2", QEMU_CAPS_SMP_TOPOLOGY);
    DO_TEST("cpu-topology3", NONE);
1253 1254 1255 1256 1257 1258 1259 1260
    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);
1261 1262
    DO_TEST("cpu-numa1", NONE);
    DO_TEST("cpu-numa2", QEMU_CAPS_SMP_TOPOLOGY);
1263
    DO_TEST("cpu-numa-no-memory-element", QEMU_CAPS_SMP_TOPOLOGY);
1264
    DO_TEST_PARSE_ERROR("cpu-numa3", NONE);
1265 1266
    DO_TEST_FAILURE("cpu-numa-disjoint", NONE);
    DO_TEST("cpu-numa-disjoint", QEMU_CAPS_NUMA);
1267 1268 1269
    DO_TEST_FAILURE("cpu-numa-memshared", QEMU_CAPS_SMP_TOPOLOGY,
                    QEMU_CAPS_OBJECT_MEMORY_RAM);
    DO_TEST_FAILURE("cpu-numa-memshared", QEMU_CAPS_SMP_TOPOLOGY);
1270
    DO_TEST("cpu-host-model", NONE);
1271
    DO_TEST("cpu-host-model-vendor", NONE);
1272
    skipLegacyCPUs = true;
1273
    DO_TEST("cpu-host-model-fallback", NONE);
1274
    DO_TEST_FAILURE("cpu-host-model-nofallback", NONE);
1275
    skipLegacyCPUs = false;
1276
    DO_TEST("cpu-host-passthrough", QEMU_CAPS_KVM, QEMU_CAPS_CPU_HOST);
1277 1278 1279
    DO_TEST_FAILURE("cpu-host-passthrough", NONE);
    DO_TEST_FAILURE("cpu-qemu-host-passthrough",
                    QEMU_CAPS_KVM, QEMU_CAPS_CPU_HOST);
1280

1281 1282 1283 1284 1285 1286 1287
    driver.caps->host.cpu = cpuHaswell;
    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);
    driver.caps->host.cpu = cpuDefault;

1288 1289 1290 1291 1292 1293 1294 1295
    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);
1296 1297
    DO_TEST("cputune-numatune", QEMU_CAPS_SMP_TOPOLOGY,
            QEMU_CAPS_KVM,
1298
            QEMU_CAPS_OBJECT_IOTHREAD,
1299 1300
            QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1301

1302
    DO_TEST("numatune-memory", NONE);
1303
    DO_TEST_PARSE_ERROR("numatune-memory-invalid-nodeset", NONE);
1304 1305
    DO_TEST_LINUX("numatune-memnode", QEMU_CAPS_NUMA,
                  QEMU_CAPS_OBJECT_MEMORY_RAM);
1306 1307
    DO_TEST_FAILURE("numatune-memnode", NONE);

1308 1309
    DO_TEST_LINUX("numatune-memnode-no-memory", QEMU_CAPS_NUMA,
                  QEMU_CAPS_OBJECT_MEMORY_RAM);
1310 1311
    DO_TEST_FAILURE("numatune-memnode-no-memory", NONE);

1312
    DO_TEST("numatune-auto-nodeset-invalid", NONE);
1313 1314
    DO_TEST("numatune-auto-prefer", QEMU_CAPS_OBJECT_MEMORY_RAM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1315 1316
    DO_TEST_FAILURE("numatune-static-nodeset-exceed-hostnode",
                    QEMU_CAPS_OBJECT_MEMORY_RAM);
1317 1318
    DO_TEST_PARSE_ERROR("numatune-memnode-nocpu", NONE);
    DO_TEST_PARSE_ERROR("numatune-memnodes-problematic", NONE);
1319 1320
    DO_TEST("numad", NONE);
    DO_TEST("numad-auto-vcpu-static-numatune", NONE);
1321
    DO_TEST_PARSE_ERROR("numad-auto-vcpu-static-numatune-no-nodeset", NONE);
1322 1323 1324
    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);
1325
    DO_TEST("blkdeviotune", QEMU_CAPS_DEVICE,
1326
            QEMU_CAPS_DRIVE_IOTUNE);
1327
    DO_TEST("blkdeviotune-max", QEMU_CAPS_DEVICE,
1328
            QEMU_CAPS_DRIVE_IOTUNE,
1329
            QEMU_CAPS_DRIVE_IOTUNE_MAX);
1330

1331
    DO_TEST("multifunction-pci-device",
1332
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
1333
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_SCSI_LSI);
1334

1335
    DO_TEST("monitor-json", QEMU_CAPS_DEVICE,
1336
            QEMU_CAPS_CHARDEV, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_NODEFCONFIG);
1337
    DO_TEST("no-shutdown", QEMU_CAPS_DEVICE,
1338 1339
            QEMU_CAPS_CHARDEV, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_NO_SHUTDOWN);
1340

1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352
    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);
1353

1354
    DO_TEST("pseries-basic",
1355
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
1356
    DO_TEST("pseries-vio",
1357
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
1358
    DO_TEST("pseries-usb-default",
1359 1360 1361
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_PCI_OHCI, QEMU_CAPS_PCI_MULTIFUNCTION);
1362
    DO_TEST("pseries-usb-multi",
1363 1364 1365
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_PIIX3_USB_UHCI,
            QEMU_CAPS_PCI_OHCI, QEMU_CAPS_PCI_MULTIFUNCTION);
1366
    DO_TEST("pseries-vio-user-assigned",
1367
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
1368
    DO_TEST_ERROR("pseries-vio-address-clash",
1369
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
1370
    DO_TEST("pseries-nvram", QEMU_CAPS_DEVICE_NVRAM);
1371 1372 1373
    DO_TEST("pseries-usb-kbd", QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_DEVICE_USB_KBD, QEMU_CAPS_CHARDEV,
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
1374 1375
    DO_TEST("pseries-cpu-exact", QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
            QEMU_CAPS_NODEFCONFIG);
1376 1377
    DO_TEST("pseries-cpu-compat", QEMU_CAPS_KVM, QEMU_CAPS_CPU_HOST,
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
1378 1379
    DO_TEST("pseries-cpu-le",  QEMU_CAPS_KVM, QEMU_CAPS_CPU_HOST,
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
1380 1381
    DO_TEST("pseries-panic-missing",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
1382 1383 1384 1385
    DO_TEST("pseries-panic-no-address",
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
    DO_TEST_FAILURE("pseries-panic-address",
                    QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
1386
    DO_TEST("disk-ide-drive-split",
1387
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
1388
            QEMU_CAPS_IDE_CD);
1389
    DO_TEST("disk-ide-wwn",
1390
            QEMU_CAPS_DEVICE, QEMU_CAPS_IDE_CD,
1391
            QEMU_CAPS_DRIVE_SERIAL, QEMU_CAPS_IDE_DRIVE_WWN);
1392

1393
    DO_TEST("disk-geometry", NONE);
V
Viktor Mihajlovski 已提交
1394
    DO_TEST("disk-blockio",
1395
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
V
Viktor Mihajlovski 已提交
1396
            QEMU_CAPS_IDE_CD, QEMU_CAPS_BLOCKIO);
1397

1398 1399 1400
    DO_TEST("video-device-pciaddr-default",
            QEMU_CAPS_KVM, QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1401 1402
            QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_QXL_VGA,
            QEMU_CAPS_DEVICE_PCI_BRIDGE);
1403 1404 1405 1406 1407 1408 1409 1410 1411
    DO_TEST("video-vga-nodevice", QEMU_CAPS_VGA);
    DO_TEST("video-vga-device", QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_VGA,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
    DO_TEST("video-vga-device-vgamem", QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_VGA,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_VGA_VGAMEM);
    DO_TEST("video-qxl-nodevice", QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL);
    DO_TEST("video-qxl-device", QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_QXL_VGA,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
    DO_TEST("video-qxl-device-vgamem", QEMU_CAPS_DEVICE,
1412 1413
            QEMU_CAPS_DEVICE_QXL_VGA, QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_QXL_VGA_VGAMEM);
1414 1415 1416 1417 1418
    DO_TEST_FAILURE("video-qxl-sec-nodevice", QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL);
    DO_TEST("video-qxl-sec-device", QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_QXL_VGA,
            QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
    DO_TEST("video-qxl-sec-device-vgamem", QEMU_CAPS_DEVICE,
            QEMU_CAPS_DEVICE_QXL_VGA, QEMU_CAPS_DEVICE_QXL,
1419 1420
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_QXL_VGA_VGAMEM,
            QEMU_CAPS_QXL_VGAMEM);
1421
    DO_TEST_PARSE_ERROR("video-invalid", NONE);
1422

1423 1424
    DO_TEST("virtio-rng-default", QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1425 1426 1427 1428
    DO_TEST("virtio-rng-random", QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
    DO_TEST("virtio-rng-egd", QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD);
1429 1430
    DO_TEST("virtio-rng-multiple", QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_EGD, QEMU_CAPS_OBJECT_RNG_RANDOM);
1431 1432
    DO_TEST_PARSE_ERROR("virtio-rng-egd-crash", QEMU_CAPS_DEVICE,
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_EGD);
1433 1434
    DO_TEST("virtio-rng-ccw",
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1435
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_CCW,
1436 1437
            QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM);
1438

1439
    DO_TEST("s390-allow-bogus-usb-none",
1440
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1441
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390,
1442 1443
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);

1444
    DO_TEST("s390-allow-bogus-usb-controller",
1445
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
1446
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_S390,
1447 1448
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);

O
Olivia Yin 已提交
1449
    DO_TEST("ppc-dtb", QEMU_CAPS_KVM, QEMU_CAPS_DTB);
1450
    DO_TEST("ppce500-serial", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV);
O
Olivia Yin 已提交
1451

1452 1453
    DO_TEST("tpm-passthrough", QEMU_CAPS_DEVICE,
            QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
1454 1455
    DO_TEST_PARSE_ERROR("tpm-no-backend-invalid", QEMU_CAPS_DEVICE,
                        QEMU_CAPS_DEVICE_TPM_PASSTHROUGH, QEMU_CAPS_DEVICE_TPM_TIS);
1456

1457 1458 1459 1460 1461 1462

    DO_TEST_PARSE_ERROR("pci-domain-invalid", QEMU_CAPS_DEVICE);
    DO_TEST_PARSE_ERROR("pci-bus-invalid", QEMU_CAPS_DEVICE);
    DO_TEST_PARSE_ERROR("pci-slot-invalid", QEMU_CAPS_DEVICE);
    DO_TEST_PARSE_ERROR("pci-function-invalid", QEMU_CAPS_DEVICE);

1463 1464
    DO_TEST("pci-autoadd-addr", QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_PCI_BRIDGE);
    DO_TEST("pci-autoadd-idx", QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_PCI_BRIDGE);
1465
    DO_TEST("pci-many",
1466
            QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_PCI_BRIDGE);
1467
    DO_TEST("pci-bridge-many-disks",
1468
            QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_PCI_BRIDGE);
L
Laine Stump 已提交
1469
    DO_TEST("pcie-root",
1470
            QEMU_CAPS_ICH9_AHCI,
1471 1472 1473 1474 1475
            QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE);
    DO_TEST("q35",
            QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
1476
            QEMU_CAPS_ICH9_AHCI,
1477 1478
            QEMU_CAPS_VGA, QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
1479 1480 1481 1482
    DO_TEST("pcie-root-port",
            QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
1483
            QEMU_CAPS_ICH9_AHCI,
1484 1485 1486 1487 1488 1489 1490
            QEMU_CAPS_VGA, QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);

    DO_TEST_ERROR("pcie-root-port-too-many",
            QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
1491
            QEMU_CAPS_ICH9_AHCI,
1492 1493
            QEMU_CAPS_VGA, QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
1494

1495 1496 1497 1498 1499
    DO_TEST("pcie-switch-upstream-port",
            QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
1500
            QEMU_CAPS_ICH9_AHCI,
1501 1502
            QEMU_CAPS_VGA, QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
1503 1504 1505 1506 1507 1508
    DO_TEST("pcie-switch-downstream-port",
            QEMU_CAPS_DEVICE, 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,
1509
            QEMU_CAPS_ICH9_AHCI,
1510 1511
            QEMU_CAPS_VGA, QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
1512

1513
    DO_TEST("hostdev-scsi-lsi", QEMU_CAPS_DEVICE,
1514 1515
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1516
    DO_TEST("hostdev-scsi-virtio-scsi", QEMU_CAPS_DEVICE,
1517 1518
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1519
    DO_TEST("hostdev-scsi-readonly", QEMU_CAPS_DEVICE,
O
Osier Yang 已提交
1520 1521
            QEMU_CAPS_DRIVE_READONLY, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_SCSI_GENERIC);
1522
    DO_TEST("hostdev-scsi-virtio-scsi", QEMU_CAPS_DEVICE,
1523 1524 1525
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC,
            QEMU_CAPS_DEVICE_SCSI_GENERIC_BOOTINDEX);
1526
    DO_TEST("hostdev-scsi-lsi-iscsi", QEMU_CAPS_DEVICE,
J
John Ferlan 已提交
1527 1528
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1529
    DO_TEST("hostdev-scsi-lsi-iscsi-auth", QEMU_CAPS_DEVICE,
J
John Ferlan 已提交
1530 1531
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1532
    DO_TEST("hostdev-scsi-virtio-iscsi", QEMU_CAPS_DEVICE,
J
John Ferlan 已提交
1533 1534
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1535
    DO_TEST("hostdev-scsi-virtio-iscsi-auth", QEMU_CAPS_DEVICE,
J
John Ferlan 已提交
1536 1537
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_SCSI_GENERIC);
1538

1539 1540 1541 1542 1543
    DO_TEST("mlock-on", QEMU_CAPS_MLOCK);
    DO_TEST_FAILURE("mlock-on", NONE);
    DO_TEST("mlock-off", QEMU_CAPS_MLOCK);
    DO_TEST("mlock-unsupported", NONE);

1544 1545
    DO_TEST_PARSE_ERROR("pci-bridge-negative-index-invalid",
                        QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_PCI_BRIDGE);
J
Ján Tomko 已提交
1546 1547 1548 1549 1550 1551
    DO_TEST_PARSE_ERROR("pci-bridge-duplicate-index",
                        QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_PCI_BRIDGE);
    DO_TEST_PARSE_ERROR("pci-root-nonzero-index",
                        QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_PCI_BRIDGE);
    DO_TEST_PARSE_ERROR("pci-root-address",
                        QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_PCI_BRIDGE);
1552

1553
    DO_TEST("hotplug-base",
1554
            QEMU_CAPS_KVM, QEMU_CAPS_DEVICE, QEMU_CAPS_VIRTIO_SCSI);
1555

1556 1557 1558 1559 1560
    DO_TEST("pcihole64", QEMU_CAPS_DEVICE, QEMU_CAPS_I440FX_PCI_HOLE64_SIZE);
    DO_TEST_FAILURE("pcihole64-none", QEMU_CAPS_DEVICE);
    DO_TEST("pcihole64-q35",
            QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
1561
            QEMU_CAPS_ICH9_AHCI,
1562 1563 1564 1565
            QEMU_CAPS_VGA, QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_Q35_PCI_HOLE64_SIZE);

1566 1567
    DO_TEST("arm-vexpressa9-nodevs",
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB);
1568
    DO_TEST("arm-vexpressa9-basic",
1569
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB);
1570 1571
    DO_TEST("arm-vexpressa9-virtio",
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
1572
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1573
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
1574 1575
    DO_TEST("arm-virt-virtio",
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
1576
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1577
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
1578

1579 1580
    DO_TEST("aarch64-virt-virtio",
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
1581
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1582
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
1583 1584
    DO_TEST("aarch64-mmio-default-pci",
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
1585
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1586 1587 1588 1589 1590
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE);
    DO_TEST("aarch64-virtio-pci",
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
1591
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1592 1593 1594
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_VIRTIO_SCSI);
1595 1596
    DO_TEST("aarch64-aavmf-virtio-mmio",
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
1597
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
1598
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
1599 1600 1601
    DO_TEST("aarch64-virt-default-nic",
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
1602
    DO_TEST("aarch64-cpu-passthrough", QEMU_CAPS_DEVICE,
1603 1604
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_CPU_HOST, QEMU_CAPS_KVM);
1605
    DO_TEST("aarch64-gic", QEMU_CAPS_DEVICE,
M
Michal Privoznik 已提交
1606
            QEMU_CAPS_KVM);
1607
    DO_TEST("aarch64-gicv3", QEMU_CAPS_DEVICE,
1608 1609
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT,
            QEMU_CAPS_MACH_VIRT_GIC_VERSION);
1610
    DO_TEST_FAILURE("aarch64-gicv3", QEMU_CAPS_DEVICE,
1611
            QEMU_CAPS_KVM, QEMU_CAPS_MACHINE_OPT);
1612

1613
    driver.caps->host.cpu->arch = VIR_ARCH_AARCH64;
1614
    DO_TEST("aarch64-kvm-32-on-64", QEMU_CAPS_DEVICE,
1615 1616
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_KVM, QEMU_CAPS_CPU_HOST, QEMU_CAPS_CPU_AARCH64_OFF);
1617
    DO_TEST_FAILURE("aarch64-kvm-32-on-64", QEMU_CAPS_DEVICE,
1618 1619 1620 1621
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_KVM, QEMU_CAPS_CPU_HOST);
    driver.caps->host.cpu->arch = cpuDefault->arch;

1622 1623 1624 1625 1626
    DO_TEST("kvm-pit-device", QEMU_CAPS_KVM_PIT_TICK_POLICY);
    DO_TEST("kvm-pit-delay", QEMU_CAPS_NO_KVM_PIT);
    DO_TEST("kvm-pit-device", QEMU_CAPS_NO_KVM_PIT,
            QEMU_CAPS_KVM_PIT_TICK_POLICY);

H
Hu Tao 已提交
1627 1628 1629
    DO_TEST("panic", QEMU_CAPS_DEVICE_PANIC,
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);

1630 1631 1632
    DO_TEST("panic-no-address", QEMU_CAPS_DEVICE_PANIC,
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);

1633 1634
    DO_TEST("fips-enabled", QEMU_CAPS_ENABLE_FIPS);

1635 1636 1637
    DO_TEST("shmem", QEMU_CAPS_PCIDEVICE,
            QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_IVSHMEM);
    DO_TEST_FAILURE("shmem", NONE);
1638 1639
    DO_TEST_FAILURE("shmem-invalid-size", QEMU_CAPS_PCIDEVICE,
                    QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_IVSHMEM);
1640 1641
    DO_TEST_FAILURE("shmem-invalid-address", QEMU_CAPS_PCIDEVICE,
                    QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_IVSHMEM);
1642 1643
    DO_TEST_FAILURE("shmem-small-size", QEMU_CAPS_PCIDEVICE,
                    QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_IVSHMEM);
1644
    DO_TEST_PARSE_ERROR("shmem-msi-only", NONE);
1645
    DO_TEST("cpu-host-passthrough-features", QEMU_CAPS_KVM, QEMU_CAPS_CPU_HOST);
1646

1647 1648 1649
    DO_TEST_FAILURE("memory-hotplug-nonuma", QEMU_CAPS_DEVICE_PC_DIMM);
    DO_TEST_FAILURE("memory-hotplug", NONE);
    DO_TEST("memory-hotplug", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA);
1650
    DO_TEST("memory-hotplug-dimm", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
1651
            QEMU_CAPS_DEVICE, QEMU_CAPS_OBJECT_MEMORY_RAM, QEMU_CAPS_OBJECT_MEMORY_FILE);
1652
    DO_TEST("memory-hotplug-dimm-addr", QEMU_CAPS_DEVICE_PC_DIMM, QEMU_CAPS_NUMA,
1653
            QEMU_CAPS_DEVICE, QEMU_CAPS_OBJECT_MEMORY_FILE);
1654

1655 1656
    DO_TEST("machine-aeskeywrap-on-caps",
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP,
1657
            QEMU_CAPS_DEA_KEY_WRAP,
1658 1659 1660
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE,
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps", QEMU_CAPS_MACHINE_OPT,
1661
                    QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE,
1662 1663 1664 1665 1666
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-caps", NONE);

    DO_TEST("machine-aeskeywrap-on-cap",
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP,
1667
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE,
1668 1669
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap", QEMU_CAPS_MACHINE_OPT,
1670
                    QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE,
1671 1672 1673 1674 1675
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-on-cap", NONE);

    DO_TEST("machine-aeskeywrap-off-caps",
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
1676
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE,
1677 1678
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", QEMU_CAPS_MACHINE_OPT,
1679
                    QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE,
1680 1681 1682 1683
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-caps", NONE);

    DO_TEST("machine-aeskeywrap-off-cap",
1684
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP,
1685 1686 1687
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE,
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap", QEMU_CAPS_MACHINE_OPT,
1688
                    QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE,
1689 1690 1691 1692 1693
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-aeskeywrap-off-cap", NONE);

    DO_TEST("machine-deakeywrap-on-caps",
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
1694
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE,
1695
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
1696
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", QEMU_CAPS_MACHINE_OPT,
1697 1698 1699 1700 1701
                    QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE,
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-on-caps", NONE);

    DO_TEST("machine-deakeywrap-on-cap",
1702
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_DEA_KEY_WRAP,
1703 1704 1705
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE,
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-on-cap", QEMU_CAPS_MACHINE_OPT,
1706
                    QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE,
1707 1708 1709 1710 1711
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-on-cap", NONE);

    DO_TEST("machine-deakeywrap-off-caps",
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
1712
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE,
1713 1714
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", QEMU_CAPS_MACHINE_OPT,
1715
                    QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE,
1716 1717 1718 1719
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-caps", NONE);

    DO_TEST("machine-deakeywrap-off-cap",
1720
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_DEA_KEY_WRAP,
1721 1722 1723
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE,
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-cap", QEMU_CAPS_MACHINE_OPT,
1724
                    QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE,
1725 1726 1727 1728 1729
                    QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST_FAILURE("machine-deakeywrap-off-cap", NONE);

    DO_TEST("machine-keywrap-none-caps",
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_AES_KEY_WRAP, QEMU_CAPS_DEA_KEY_WRAP,
1730
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE,
1731 1732
            QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
    DO_TEST("machine-keywrap-none",
1733
            QEMU_CAPS_MACHINE_OPT, QEMU_CAPS_VIRTIO_SCSI,
1734 1735
            QEMU_CAPS_DEVICE, QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);

1736
    qemuTestDriverFree(&driver);
1737

1738
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
1739 1740
}

1741
VIRT_TEST_MAIN_PRELOAD(mymain, abs_builddir "/.libs/qemuxml2argvmock.so")
1742

1743 1744
#else

1745 1746 1747 1748
int main(void)
{
    return EXIT_AM_SKIP;
}
1749 1750

#endif /* WITH_QEMU */