qemuxml2argvtest.c 32.9 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
#ifdef WITH_QEMU

13 14
# include "internal.h"
# include "testutils.h"
15
# include "util/memory.h"
16 17
# include "qemu/qemu_capabilities.h"
# include "qemu/qemu_command.h"
M
Matthias Bolte 已提交
18
# include "qemu/qemu_domain.h"
19
# include "datatypes.h"
20
# include "cpu/cpu_map.h"
21

22
# include "testutilsqemu.h"
23

24
static const char *abs_top_srcdir;
25
static struct qemud_driver driver;
26

27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
static unsigned char *
fakeSecretGetValue(virSecretPtr obj ATTRIBUTE_UNUSED,
                   size_t *value_size,
                   unsigned int fakeflags ATTRIBUTE_UNUSED,
                   unsigned int internalFlags ATTRIBUTE_UNUSED)
{
    char *secret = strdup("AQCVn5hO6HzFAhAAq0NCv8jtJcIcE+HOBlMQ1A");
    *value_size = strlen(secret);
    return (unsigned char *) secret;
}

static virSecretPtr
fakeSecretLookupByUsage(virConnectPtr conn,
                        int usageType ATTRIBUTE_UNUSED,
                        const char *usageID)
{
43
    unsigned char uuid[VIR_UUID_BUFLEN];
44 45
    if (STRNEQ(usageID, "mycluster_myname"))
        return NULL;
46 47 48

    virUUIDGenerate(uuid);
    return virGetSecret(conn, uuid, usageType, usageID);
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
}

static int
fakeSecretClose(virConnectPtr conn ATTRIBUTE_UNUSED)
{
    return 0;
}

static virSecretDriver fakeSecretDriver = {
    .name = "fake_secret",
    .open = NULL,
    .close = fakeSecretClose,
    .numOfSecrets = NULL,
    .listSecrets = NULL,
    .lookupByUUID = NULL,
    .lookupByUsage = fakeSecretLookupByUsage,
    .defineXML = NULL,
    .getXMLDesc = NULL,
    .setValue = NULL,
    .getValue = fakeSecretGetValue,
    .undefine = NULL,
};

72 73 74 75 76 77 78
typedef enum {
    FLAG_EXPECT_ERROR       = 1 << 0,
    FLAG_EXPECT_FAILURE     = 1 << 1,
    FLAG_EXPECT_PARSE_ERROR = 1 << 2,
    FLAG_JSON               = 1 << 3,
} virQemuXML2ArgvTestFlags;

79
static int testCompareXMLToArgvFiles(const char *xml,
E
Eric Blake 已提交
80
                                     const char *cmdline,
81
                                     qemuCapsPtr extraFlags,
J
Jiri Denemark 已提交
82
                                     const char *migrateFrom,
83
                                     int migrateFd,
84
                                     virQemuXML2ArgvTestFlags flags)
85 86
{
    char *expectargv = NULL;
E
Eric Blake 已提交
87
    int len;
88
    char *actualargv = NULL;
E
Eric Blake 已提交
89
    int ret = -1;
90
    virDomainDefPtr vmdef = NULL;
91
    virDomainChrSourceDef monitor_chr;
92
    virConnectPtr conn;
J
Jiri Denemark 已提交
93
    char *log = NULL;
94
    char *emulator = NULL;
E
Eric Blake 已提交
95
    virCommandPtr cmd = NULL;
96 97

    if (!(conn = virGetConnect()))
98
        goto out;
99
    conn->secretDriver = &fakeSecretDriver;
100

101
    if (!(vmdef = virDomainDefParseFile(driver.caps, xml,
M
Matthias Bolte 已提交
102
                                        QEMU_EXPECTED_VIRT_TYPES,
103 104 105
                                        VIR_DOMAIN_XML_INACTIVE))) {
        if (flags & FLAG_EXPECT_PARSE_ERROR)
            goto ok;
106
        goto out;
107
    }
108

109
    if (qemuCapsGet(extraFlags, QEMU_CAPS_DOMID))
110
        vmdef->id = 6;
111
    else
112
        vmdef->id = -1;
113

114
    memset(&monitor_chr, 0, sizeof(monitor_chr));
115 116 117
    monitor_chr.type = VIR_DOMAIN_CHR_TYPE_UNIX;
    monitor_chr.data.nix.path = (char *)"/tmp/test-monitor";
    monitor_chr.data.nix.listen = true;
118

119 120 121
    qemuCapsSetList(extraFlags,
                    QEMU_CAPS_VNC_COLON,
                    QEMU_CAPS_NO_REBOOT,
122
                    QEMU_CAPS_NO_ACPI,
123
                    QEMU_CAPS_LAST);
124

125 126 127 128 129 130
    if (STREQ(vmdef->os.machine, "pc") &&
        STREQ(vmdef->emulator, "/usr/bin/qemu-system-x86_64")) {
        VIR_FREE(vmdef->os.machine);
        if (!(vmdef->os.machine = strdup("pc-0.11")))
            goto out;
    }
131

132
    if (qemuCapsGet(extraFlags, QEMU_CAPS_DEVICE)) {
133
        if (qemuDomainAssignAddresses(vmdef, extraFlags, NULL)) {
134
            if (flags & FLAG_EXPECT_ERROR)
135
                goto ok;
136
            goto out;
137
        }
138 139
    }

140 141
    log = virtTestLogContentAndReset();
    VIR_FREE(log);
142
    virResetLastError();
J
Jiri Denemark 已提交
143

144 145
    if (STREQLEN(vmdef->os.arch, "x86_64", 6) ||
        STREQLEN(vmdef->os.arch, "i686", 4)) {
146
        qemuCapsSet(extraFlags, QEMU_CAPS_PCI_MULTIBUS);
147 148
    }

149
    if (qemuAssignDeviceAliases(vmdef, extraFlags) < 0)
150
        goto out;
151

152 153
    if (!(cmd = qemuBuildCommandLine(conn, &driver, vmdef, &monitor_chr,
                                     (flags & FLAG_JSON), extraFlags,
154
                                     migrateFrom, migrateFd, NULL,
155
                                     VIR_NETDEV_VPORT_PROFILE_OP_NO_OP))) {
156
        if (flags & FLAG_EXPECT_FAILURE) {
157 158 159 160
            ret = 0;
            virResetLastError();
        }
        goto out;
161
    } else if (flags & FLAG_EXPECT_FAILURE) {
162 163 164 165
        if (virTestGetDebug())
            fprintf(stderr, "qemuBuildCommandLine should have failed\n");
        goto out;
    }
166

167
    if (!!virGetLastError() != !!(flags & FLAG_EXPECT_ERROR)) {
168
        if (virTestGetDebug() && (log = virtTestLogContentAndReset()))
J
Jiri Denemark 已提交
169
            fprintf(stderr, "\n%s", log);
170
        goto out;
J
Jiri Denemark 已提交
171 172
    }

E
Eric Blake 已提交
173
    if (!(actualargv = virCommandToString(cmd)))
174
        goto out;
E
Eric Blake 已提交
175 176 177 178 179 180

    if (emulator) {
        /* Skip the abs_srcdir portion of replacement emulator.  */
        char *start_skip = strstr(actualargv, abs_srcdir);
        char *end_skip = strstr(actualargv, emulator);
        if (!start_skip || !end_skip)
181
            goto out;
E
Eric Blake 已提交
182
        memmove(start_skip, end_skip, strlen(end_skip) + 1);
183 184
    }

185 186 187 188 189 190
    len = virtTestLoadFile(cmdline, &expectargv);
    if (len < 0)
        goto out;
    if (len && expectargv[len - 1] == '\n')
        expectargv[len - 1] = '\0';

191 192
    if (STRNEQ(expectargv, actualargv)) {
        virtTestDifference(stderr, expectargv, actualargv);
193
        goto out;
194 195
    }

196
 ok:
197
    if (flags & FLAG_EXPECT_ERROR) {
198 199 200 201
        /* need to suppress the errors */
        virResetLastError();
    }

202 203
    ret = 0;

204
out:
205 206 207 208
    VIR_FREE(log);
    VIR_FREE(emulator);
    VIR_FREE(expectargv);
    VIR_FREE(actualargv);
E
Eric Blake 已提交
209
    virCommandFree(cmd);
210
    virDomainDefFree(vmdef);
211
    virObjectUnref(conn);
212 213 214 215
    return ret;
}


216 217
struct testInfo {
    const char *name;
218
    qemuCapsPtr extraFlags;
219
    const char *migrateFrom;
220
    int migrateFd;
221
    unsigned int flags;
222 223
};

224 225 226 227
static int
testCompareXMLToArgvHelper(const void *data)
{
    int result = -1;
228
    const struct testInfo *info = data;
229 230
    char *xml = NULL;
    char *args = NULL;
231
    unsigned int flags = info->flags;
232 233 234 235 236 237 238

    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;

239 240 241
    if (qemuCapsGet(info->extraFlags, QEMU_CAPS_MONITOR_JSON))
        flags |= FLAG_JSON;

242
    result = testCompareXMLToArgvFiles(xml, args, info->extraFlags,
243
                                       info->migrateFrom, info->migrateFd,
244
                                       flags);
245 246

cleanup:
247 248
    VIR_FREE(xml);
    VIR_FREE(args);
249
    return result;
250 251 252
}


253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279
static int
testAddCPUModels(qemuCapsPtr caps, bool skipLegacy)
{
    const char *newModels[] = {
        "Opteron_G3", "Opteron_G2", "Opteron_G1",
        "Nehalem", "Penryn", "Conroe",
    };
    const char *legacyModels[] = {
        "n270", "athlon", "pentium3", "pentium2", "pentium",
        "486", "coreduo", "kvm32", "qemu32", "kvm64",
        "core2duo", "phenom", "qemu64",
    };
    size_t i;

    for (i = 0 ; i < ARRAY_CARDINALITY(newModels) ; i++) {
        if (qemuCapsAddCPUDefinition(caps, newModels[i]) < 0)
            return -1;
    }
    if (skipLegacy)
        return 0;
    for (i = 0 ; i < ARRAY_CARDINALITY(legacyModels) ; i++) {
        if (qemuCapsAddCPUDefinition(caps, legacyModels[i]) < 0)
            return -1;
    }
    return 0;
}

280

281
static int
E
Eric Blake 已提交
282
mymain(void)
283 284
{
    int ret = 0;
285
    char *map = NULL;
286
    bool skipLegacyCPUs = false;
287

288 289 290 291
    abs_top_srcdir = getenv("abs_top_srcdir");
    if (!abs_top_srcdir)
        abs_top_srcdir = "..";

292 293
    if ((driver.caps = testQemuCapsInit()) == NULL)
        return EXIT_FAILURE;
294 295 296 297 298
    if ((driver.stateDir = strdup("/nowhere")) == NULL)
        return EXIT_FAILURE;
    if ((driver.hugetlbfs_mount = strdup("/dev/hugepages")) == NULL)
        return EXIT_FAILURE;
    if ((driver.hugepage_path = strdup("/dev/hugepages/libvirt/qemu")) == NULL)
299
        return EXIT_FAILURE;
300 301 302 303 304
    driver.spiceTLS = 1;
    if (!(driver.spiceTLSx509certdir = strdup("/etc/pki/libvirt-spice")))
        return EXIT_FAILURE;
    if (!(driver.spicePassword = strdup("123456")))
        return EXIT_FAILURE;
305 306
    if (virAsprintf(&map, "%s/src/cpu/cpu_map.xml", abs_top_srcdir) < 0 ||
        cpuMapOverride(map) < 0) {
307
        VIR_FREE(map);
308
        return EXIT_FAILURE;
309
    }
310

311
# define DO_TEST_FULL(name, migrateFrom, migrateFd, flags, ...)         \
312
    do {                                                                \
313
        static struct testInfo info = {                                 \
314
            name, NULL, migrateFrom, migrateFd, (flags)                 \
J
Jiri Denemark 已提交
315
        };                                                              \
316 317
        if (!(info.extraFlags = qemuCapsNew()))                         \
            return EXIT_FAILURE;                                        \
318 319
        if (testAddCPUModels(info.extraFlags, skipLegacyCPUs) < 0)      \
            return EXIT_FAILURE;                                        \
320
        qemuCapsSetList(info.extraFlags, __VA_ARGS__, QEMU_CAPS_LAST);  \
321 322 323
        if (virtTestRun("QEMU XML-2-ARGV " name,                        \
                        1, testCompareXMLToArgvHelper, &info) < 0)      \
            ret = -1;                                                   \
324
        virObjectUnref(info.extraFlags);                                \
325 326
    } while (0)

327 328 329 330 331
# 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__)
332 333

# define DO_TEST_FAILURE(name, ...)                                     \
334 335 336 337 338 339
    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__)
340 341

# define NONE QEMU_CAPS_LAST
342

343 344 345
    /* 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 */
346 347 348 349 350 351 352
    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");
353 354
    unsetenv("QEMU_AUDIO_DRV");
    unsetenv("SDL_AUDIODRIVER");
355

356 357 358
    DO_TEST("minimal", QEMU_CAPS_NAME);
    DO_TEST("minimal-s390", QEMU_CAPS_NAME);
    DO_TEST("machine-aliases1", NONE);
359
    DO_TEST("machine-aliases2", QEMU_CAPS_KVM);
360 361 362
    DO_TEST("machine-core-on", QEMU_CAPS_DUMP_GUEST_CORE);
    DO_TEST("machine-core-off", QEMU_CAPS_DUMP_GUEST_CORE);
    DO_TEST_FAILURE("machine-core-on", NONE);
363 364 365 366 367
    DO_TEST("boot-cdrom", NONE);
    DO_TEST("boot-network", NONE);
    DO_TEST("boot-floppy", NONE);
    DO_TEST("boot-multi", QEMU_CAPS_BOOT_MENU);
    DO_TEST("boot-menu-enable",
368
            QEMU_CAPS_BOOT_MENU, QEMU_CAPS_DEVICE, QEMU_CAPS_DRIVE);
369
    DO_TEST("boot-menu-enable",
370 371
            QEMU_CAPS_BOOT_MENU, QEMU_CAPS_DEVICE, QEMU_CAPS_DRIVE,
            QEMU_CAPS_BOOTINDEX);
372 373
    DO_TEST("boot-menu-disable", QEMU_CAPS_BOOT_MENU);
    DO_TEST("boot-menu-disable-drive",
374
            QEMU_CAPS_BOOT_MENU, QEMU_CAPS_DEVICE, QEMU_CAPS_DRIVE);
375
    DO_TEST("boot-menu-disable-drive-bootindex",
376 377
            QEMU_CAPS_BOOT_MENU, QEMU_CAPS_DEVICE, QEMU_CAPS_DRIVE,
            QEMU_CAPS_BOOTINDEX);
378 379 380
    DO_TEST_PARSE_ERROR("boot-dev+order",
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE,
            QEMU_CAPS_VIRTIO_BLK_SCSI, QEMU_CAPS_VIRTIO_BLK_SG_IO);
381
    DO_TEST("boot-order",
382 383
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE,
            QEMU_CAPS_VIRTIO_BLK_SCSI, QEMU_CAPS_VIRTIO_BLK_SG_IO);
384
    DO_TEST("boot-complex",
385 386
            QEMU_CAPS_DEVICE, QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT,
            QEMU_CAPS_VIRTIO_BLK_SCSI, QEMU_CAPS_VIRTIO_BLK_SG_IO);
387
    DO_TEST("boot-complex-bootindex",
388
            QEMU_CAPS_DEVICE, QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT,
389 390
            QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_VIRTIO_BLK_SCSI, QEMU_CAPS_VIRTIO_BLK_SG_IO);
391
    DO_TEST("bootloader", QEMU_CAPS_DOMID, QEMU_CAPS_KVM);
392 393 394 395 396

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

397 398 399
    DO_TEST("bios", QEMU_CAPS_DEVICE, QEMU_CAPS_SGA);
    DO_TEST("clock-utc", NONE);
    DO_TEST("clock-localtime", NONE);
400 401
    /*
     * Can't be enabled since the absolute timestamp changes every time
402
    DO_TEST("clock-variable", QEMU_CAPS_RTC);
403
    */
404 405 406 407 408
    DO_TEST("clock-france", QEMU_CAPS_RTC);
    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);

409 410 411 412
    DO_TEST("cpu-eoi-disabled", QEMU_CAPS_ENABLE_KVM);
    DO_TEST("cpu-eoi-enabled", QEMU_CAPS_ENABLE_KVM);
    DO_TEST("eoi-disabled", NONE);
    DO_TEST("eoi-enabled", NONE);
M
Martin Kletzander 已提交
413
    DO_TEST("kvmclock+eoi-disabled", QEMU_CAPS_ENABLE_KVM);
414

415 416 417 418
    DO_TEST("hugepages", QEMU_CAPS_MEM_PATH);
    DO_TEST("disk-cdrom", NONE);
    DO_TEST("disk-cdrom-empty", QEMU_CAPS_DRIVE);
    DO_TEST("disk-cdrom-tray",
419
            QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_VIRTIO_TX_ALG);
420 421 422 423
    DO_TEST("disk-cdrom-tray-no-device-cap", NONE);
    DO_TEST("disk-floppy", NONE);
    DO_TEST("disk-floppy-tray-no-device-cap", NONE);
    DO_TEST("disk-floppy-tray",
424
            QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE);
425
    DO_TEST("disk-virtio-s390", QEMU_CAPS_DRIVE,
426
            QEMU_CAPS_DEVICE, QEMU_CAPS_VIRTIO_S390);
427 428 429
    DO_TEST("disk-many", NONE);
    DO_TEST("disk-virtio", QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT);
    DO_TEST("disk-order",
430 431
            QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_DRIVE_BOOT,
            QEMU_CAPS_VIRTIO_BLK_SCSI, QEMU_CAPS_VIRTIO_BLK_SG_IO);
432 433
    DO_TEST("disk-xenvbd", QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT);
    DO_TEST("disk-drive-boot-disk",
434
            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT);
435
    DO_TEST("disk-drive-boot-cdrom",
436
            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT);
437
    DO_TEST("floppy-drive-fat",
438
            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT, QEMU_CAPS_DRIVE_FORMAT);
439
    DO_TEST("disk-drive-fat",
440
            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT, QEMU_CAPS_DRIVE_FORMAT);
441
    DO_TEST("disk-drive-readonly-disk",
442 443
            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_READONLY,
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
444
    DO_TEST("disk-drive-readonly-no-device",
445
            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_READONLY, QEMU_CAPS_NODEFCONFIG);
446
    DO_TEST("disk-drive-fmt-qcow",
447
            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT, QEMU_CAPS_DRIVE_FORMAT);
448
    DO_TEST("disk-drive-shared",
449
            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT, QEMU_CAPS_DRIVE_SERIAL);
450
    DO_TEST("disk-drive-cache-v1-wt",
451
            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT);
452
    DO_TEST("disk-drive-cache-v1-wb",
453
            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT);
454
    DO_TEST("disk-drive-cache-v1-none",
455
            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT);
456
    DO_TEST("disk-drive-error-policy-stop",
457
            QEMU_CAPS_DRIVE, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_DRIVE_FORMAT);
458
    DO_TEST("disk-drive-error-policy-enospace",
459
            QEMU_CAPS_DRIVE, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_DRIVE_FORMAT);
460
    DO_TEST("disk-drive-error-policy-wreport-rignore",
461
            QEMU_CAPS_DRIVE, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_DRIVE_FORMAT);
462
    DO_TEST("disk-drive-cache-v2-wt",
463
            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_CACHE_V2, QEMU_CAPS_DRIVE_FORMAT);
464
    DO_TEST("disk-drive-cache-v2-wb",
465
            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_CACHE_V2, QEMU_CAPS_DRIVE_FORMAT);
466
    DO_TEST("disk-drive-cache-v2-none",
467
            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_CACHE_V2, QEMU_CAPS_DRIVE_FORMAT);
468
    DO_TEST("disk-drive-cache-directsync",
469 470
            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_CACHE_V2,
            QEMU_CAPS_DRIVE_CACHE_DIRECTSYNC, QEMU_CAPS_DRIVE_FORMAT);
471
    DO_TEST("disk-drive-cache-unsafe",
472 473
            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_CACHE_V2,
            QEMU_CAPS_DRIVE_CACHE_UNSAFE, QEMU_CAPS_DRIVE_FORMAT);
474
    DO_TEST("disk-drive-network-nbd",
475
            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT);
476
    DO_TEST("disk-drive-network-rbd",
477
            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT);
478
    DO_TEST("disk-drive-network-sheepdog",
479
            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT);
480
    DO_TEST("disk-drive-network-rbd-auth",
481
            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT);
482
    DO_TEST("disk-drive-no-boot",
483
            QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_BOOTINDEX);
484 485
    DO_TEST("disk-usb",  NONE);
    DO_TEST("disk-usb-device",
486
            QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
487
    DO_TEST("disk-scsi-device",
488 489
            QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_SCSI_LSI);
490
    DO_TEST("disk-scsi-device-auto",
491 492
            QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_SCSI_LSI);
493
    DO_TEST("disk-scsi-disk-split",
494
            QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
495
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI_PCI);
496 497 498 499
    DO_TEST("disk-scsi-disk-wwn",
            QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI_PCI,
            QEMU_CAPS_SCSI_DISK_WWN);
500
    DO_TEST("disk-scsi-vscsi",
501
            QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
502
    DO_TEST("disk-scsi-virtio-scsi",
503 504
            QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_VIRTIO_SCSI_PCI);
505
    DO_TEST("disk-sata-device",
J
Jim Fehlig 已提交
506 507
            QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE,
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_ICH9_AHCI);
508
    DO_TEST("disk-aio",
509 510
            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_AIO,
            QEMU_CAPS_DRIVE_CACHE_V2, QEMU_CAPS_DRIVE_FORMAT);
511
    DO_TEST("disk-ioeventfd",
512
            QEMU_CAPS_DRIVE, QEMU_CAPS_VIRTIO_IOEVENTFD,
513
            QEMU_CAPS_VIRTIO_TX_ALG, QEMU_CAPS_DEVICE,
O
Osier Yang 已提交
514
            QEMU_CAPS_VIRTIO_BLK_SCSI, QEMU_CAPS_VIRTIO_BLK_SG_IO);
515
    DO_TEST("disk-copy_on_read",
O
Osier Yang 已提交
516 517
            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_COPY_ON_READ,
            QEMU_CAPS_VIRTIO_TX_ALG, QEMU_CAPS_DEVICE,
518
            QEMU_CAPS_VIRTIO_BLK_SCSI, QEMU_CAPS_VIRTIO_BLK_SG_IO);
519
    DO_TEST("disk-snapshot",
520
            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_CACHE_V2, QEMU_CAPS_DRIVE_FORMAT);
521
    DO_TEST("event_idx",
522 523 524
            QEMU_CAPS_DRIVE,
            QEMU_CAPS_VIRTIO_BLK_EVENT_IDX,
            QEMU_CAPS_VIRTIO_NET_EVENT_IDX,
525 526
            QEMU_CAPS_DEVICE,
            QEMU_CAPS_VIRTIO_BLK_SCSI, QEMU_CAPS_VIRTIO_BLK_SG_IO);
527
    DO_TEST("virtio-lun",
528 529 530
            QEMU_CAPS_DRIVE,
            QEMU_CAPS_DEVICE,
            QEMU_CAPS_VIRTIO_BLK_SCSI, QEMU_CAPS_VIRTIO_BLK_SG_IO);
531
    DO_TEST("disk-scsi-lun-passthrough",
532 533
            QEMU_CAPS_DRIVE,
            QEMU_CAPS_DEVICE,
534 535
            QEMU_CAPS_SCSI_BLOCK, QEMU_CAPS_VIRTIO_BLK_SG_IO,
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI_PCI);
536

537 538
    DO_TEST("graphics-vnc", NONE);
    DO_TEST("graphics-vnc-socket", NONE);
539 540 541

    driver.vncSASL = 1;
    driver.vncSASLdir = strdup("/root/.sasl2");
542
    DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VGA);
543 544 545
    driver.vncTLS = 1;
    driver.vncTLSx509verify = 1;
    driver.vncTLSx509certdir = strdup("/etc/pki/tls/qemu");
546
    DO_TEST("graphics-vnc-tls", NONE);
547
    driver.vncSASL = driver.vncTLSx509verify = driver.vncTLS = 0;
548 549
    VIR_FREE(driver.vncSASLdir);
    VIR_FREE(driver.vncTLSx509certdir);
550 551
    driver.vncSASLdir = driver.vncTLSx509certdir = NULL;

552 553 554 555
    DO_TEST("graphics-sdl", NONE);
    DO_TEST("graphics-sdl-fullscreen", NONE);
    DO_TEST("nographics", QEMU_CAPS_VGA);
    DO_TEST("nographics-vga",
556
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_NONE);
557
    DO_TEST("graphics-spice",
558 559
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL,
            QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE);
560
    DO_TEST("graphics-spice-agentmouse",
P
Peng Zhou 已提交
561
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL,
562 563 564
            QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE,
            QEMU_CAPS_CHARDEV_SPICEVMC,
            QEMU_CAPS_NODEFCONFIG);
565
    DO_TEST("graphics-spice-compression",
566 567
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL,
            QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE);
568
    DO_TEST("graphics-spice-timeout",
569 570 571 572
            QEMU_CAPS_DRIVE,
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL,
            QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE,
            QEMU_CAPS_DEVICE_QXL_VGA);
573
    DO_TEST("graphics-spice-qxl-vga",
574 575 576
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL,
            QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE,
            QEMU_CAPS_DEVICE_QXL_VGA);
577
    DO_TEST("graphics-spice-usb-redir",
578 579 580 581 582
            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);
583

584 585
    DO_TEST("input-usbmouse", NONE);
    DO_TEST("input-usbtablet", NONE);
586
    DO_TEST("input-xen", QEMU_CAPS_DOMID, QEMU_CAPS_KVM);
587
    DO_TEST("misc-acpi", NONE);
588 589 590 591
    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);
592 593 594 595 596
    DO_TEST("misc-no-reboot", NONE);
    DO_TEST("misc-uuid", QEMU_CAPS_NAME, QEMU_CAPS_UUID);
    DO_TEST("net-user", NONE);
    DO_TEST("net-virtio", NONE);
    DO_TEST("net-virtio-device",
597
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_VIRTIO_TX_ALG);
598
    DO_TEST("net-virtio-netdev",
599
            QEMU_CAPS_DEVICE, QEMU_CAPS_NETDEV, QEMU_CAPS_NODEFCONFIG);
600
    DO_TEST("net-virtio-s390",
601
            QEMU_CAPS_DEVICE, QEMU_CAPS_VIRTIO_S390);
602 603 604 605 606 607 608
    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);
    DO_TEST("net-hostdev",
609
            QEMU_CAPS_PCIDEVICE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
610

611 612 613 614 615 616 617 618 619 620 621 622 623 624
    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);
    DO_TEST("parallel-tcp", NONE);
    DO_TEST("console-compat", NONE);
    DO_TEST("console-compat-auto", NONE);

    DO_TEST("serial-vc-chardev",
625
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
626
    DO_TEST("serial-pty-chardev",
627
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
628
    DO_TEST("serial-dev-chardev",
629
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
630
    DO_TEST("serial-file-chardev",
631
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
632
    DO_TEST("serial-unix-chardev",
633
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
634
    DO_TEST("serial-tcp-chardev",
635
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
636
    DO_TEST("serial-udp-chardev",
637
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
638
    DO_TEST("serial-tcp-telnet-chardev",
639
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
640
    DO_TEST("serial-many-chardev",
641
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
642
    DO_TEST("parallel-tcp-chardev",
643
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
644
    DO_TEST("parallel-parport-chardev",
645
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
646
    DO_TEST("console-compat-chardev",
647 648
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);

649
    DO_TEST("channel-guestfwd",
650
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
651
    DO_TEST("channel-virtio",
652
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
653
    DO_TEST("channel-virtio-auto",
654
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
655
    DO_TEST("console-virtio",
656
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
657
    DO_TEST("console-virtio-many",
658
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
659
    DO_TEST("console-virtio-s390",
660 661
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DRIVE,  QEMU_CAPS_VIRTIO_S390);
662
    DO_TEST("channel-spicevmc",
663 664
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC);
665
    DO_TEST("channel-spicevmc-old",
666 667 668
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_SPICEVMC);

669
    DO_TEST("smartcard-host",
670 671
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);
672
    DO_TEST("smartcard-host-certificates",
673 674
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);
675
    DO_TEST("smartcard-passthrough-tcp",
676 677
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_PASSTHRU);
678
    DO_TEST("smartcard-passthrough-spicevmc",
679 680
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_CCID_PASSTHRU, QEMU_CAPS_CHARDEV_SPICEVMC);
681
    DO_TEST("smartcard-controller",
682 683 684
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);

685
    DO_TEST("usb-controller",
686 687
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
            QEMU_CAPS_NODEFCONFIG);
688
    DO_TEST("usb-piix3-controller",
689
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_PIIX3_USB_UHCI,
690
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_NODEFCONFIG);
691
    DO_TEST("usb-ich9-ehci-addr",
692 693
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1);
694
    DO_TEST("input-usbmouse-addr",
695
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
696
    DO_TEST("usb-ich9-companion",
697 698
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1);
699
    DO_TEST("usb-hub",
M
Marc-André Lureau 已提交
700 701
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
702
    DO_TEST("usb-ports",
703 704
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
705
    DO_TEST("usb-redir",
706 707
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB,
708 709
            QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC);
710 711 712 713 714 715
    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);
716
    DO_TEST("usb1-usb2",
717 718 719
            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);
720 721 722 723 724 725 726 727 728 729
    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);

730

731
    DO_TEST("smbios", QEMU_CAPS_SMBIOS_TYPE);
732

733 734 735 736 737
    DO_TEST("watchdog", NONE);
    DO_TEST("watchdog-device", QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
    DO_TEST("watchdog-dump", NONE);
    DO_TEST("balloon-device", QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
    DO_TEST("balloon-device-auto",
738
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
739 740
    DO_TEST("sound", NONE);
    DO_TEST("sound-device",
741 742
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_HDA_MICRO);
743
    DO_TEST("fs9p",
744 745
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_FSDEV,
            QEMU_CAPS_FSDEV_WRITEOUT);
746

747 748
    DO_TEST("hostdev-usb-address", NONE);
    DO_TEST("hostdev-usb-address-device",
749
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
750 751
    DO_TEST("hostdev-pci-address", QEMU_CAPS_PCIDEVICE);
    DO_TEST("hostdev-pci-address-device",
752
            QEMU_CAPS_PCIDEVICE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
753
    DO_TEST("pci-rom",
754 755
            QEMU_CAPS_PCIDEVICE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_ROMBAR);
756

757 758 759 760 761 762
    DO_TEST_FULL("restore-v1", "stdio", 7, 0, QEMU_CAPS_MIGRATE_KVM_STDIO);
    DO_TEST_FULL("restore-v2", "stdio", 7, 0, QEMU_CAPS_MIGRATE_QEMU_EXEC);
    DO_TEST_FULL("restore-v2", "exec:cat", 7, 0, QEMU_CAPS_MIGRATE_QEMU_EXEC);
    DO_TEST_FULL("restore-v2-fd", "stdio", 7, 0, QEMU_CAPS_MIGRATE_QEMU_FD);
    DO_TEST_FULL("restore-v2-fd", "fd:7", 7, 0, QEMU_CAPS_MIGRATE_QEMU_FD);
    DO_TEST_FULL("migrate", "tcp:10.0.0.1:5000", -1, 0,
763 764
            QEMU_CAPS_MIGRATE_QEMU_TCP);

765
    DO_TEST("qemu-ns", NONE);
766

767
    DO_TEST("smp", QEMU_CAPS_SMP_TOPOLOGY);
768

769 770 771 772 773 774 775 776 777
    DO_TEST("cpu-topology1", QEMU_CAPS_SMP_TOPOLOGY);
    DO_TEST("cpu-topology2", QEMU_CAPS_SMP_TOPOLOGY);
    DO_TEST("cpu-topology3", NONE);
    DO_TEST("cpu-minimum1", NONE);
    DO_TEST("cpu-minimum2", NONE);
    DO_TEST("cpu-exact1", NONE);
    DO_TEST("cpu-exact2", NONE);
    DO_TEST("cpu-exact2-nofallback", NONE);
    DO_TEST("cpu-fallback", NONE);
778
    DO_TEST_FAILURE("cpu-nofallback", NONE);
779 780 781 782
    DO_TEST("cpu-strict1", NONE);
    DO_TEST("cpu-numa1", NONE);
    DO_TEST("cpu-numa2", QEMU_CAPS_SMP_TOPOLOGY);
    DO_TEST("cpu-host-model", NONE);
783
    skipLegacyCPUs = true;
784
    DO_TEST("cpu-host-model-fallback", NONE);
785
    DO_TEST_FAILURE("cpu-host-model-nofallback", NONE);
786
    skipLegacyCPUs = false;
787
    DO_TEST("cpu-host-passthrough", QEMU_CAPS_KVM, QEMU_CAPS_CPU_HOST);
788 789 790
    DO_TEST_FAILURE("cpu-host-passthrough", NONE);
    DO_TEST_FAILURE("cpu-qemu-host-passthrough",
                    QEMU_CAPS_KVM, QEMU_CAPS_CPU_HOST);
791

792 793 794 795 796 797 798 799 800 801 802
    DO_TEST("memtune", QEMU_CAPS_NAME);
    DO_TEST("blkiotune", QEMU_CAPS_NAME);
    DO_TEST("blkiotune-device", QEMU_CAPS_NAME);
    DO_TEST("cputune", QEMU_CAPS_NAME);
    DO_TEST("numatune-memory", NONE);
    DO_TEST("numad", NONE);
    DO_TEST("numad-auto-vcpu-static-numatune", NONE);
    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);
    DO_TEST("blkdeviotune", QEMU_CAPS_NAME, QEMU_CAPS_DEVICE,
803
            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_IOTUNE);
804

805
    DO_TEST("multifunction-pci-device",
806
            QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
807
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_SCSI_LSI);
808

809
    DO_TEST("monitor-json", QEMU_CAPS_DEVICE,
810
            QEMU_CAPS_CHARDEV, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_NODEFCONFIG);
811
    DO_TEST("no-shutdown", QEMU_CAPS_DEVICE,
812 813
            QEMU_CAPS_CHARDEV, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_NO_SHUTDOWN);
814

815 816 817 818 819 820
    DO_TEST("seclabel-dynamic", QEMU_CAPS_NAME);
    DO_TEST("seclabel-dynamic-baselabel", QEMU_CAPS_NAME);
    DO_TEST("seclabel-dynamic-override", QEMU_CAPS_NAME);
    DO_TEST("seclabel-static", QEMU_CAPS_NAME);
    DO_TEST("seclabel-static-relabel", QEMU_CAPS_NAME);
    DO_TEST("seclabel-none", QEMU_CAPS_NAME);
821

822
    DO_TEST("pseries-basic",
823
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
824
    DO_TEST("pseries-vio", QEMU_CAPS_DRIVE,
825
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
826
    DO_TEST("pseries-vio-user-assigned", QEMU_CAPS_DRIVE,
827
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
828
    DO_TEST_ERROR("pseries-vio-address-clash", QEMU_CAPS_DRIVE,
829
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
830
    DO_TEST("disk-ide-drive-split",
831 832
            QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_IDE_CD);
833 834 835
    DO_TEST("disk-ide-wwn",
            QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_IDE_CD,
            QEMU_CAPS_DRIVE_SERIAL, QEMU_CAPS_IDE_DRIVE_WWN);
836

837
    DO_TEST("disk-geometry", QEMU_CAPS_DRIVE);
V
Viktor Mihajlovski 已提交
838
    DO_TEST("disk-blockio",
839
            QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
V
Viktor Mihajlovski 已提交
840
            QEMU_CAPS_IDE_CD, QEMU_CAPS_BLOCKIO);
841

842
    VIR_FREE(driver.stateDir);
843
    virCapabilitiesFree(driver.caps);
844
    VIR_FREE(map);
845

846
    return ret==0 ? EXIT_SUCCESS : EXIT_FAILURE;
847 848
}

849 850
VIRT_TEST_MAIN(mymain)

851
#else
E
Eric Blake 已提交
852
# include "testutils.h"
853

854 855 856 857
int main(void)
{
    return EXIT_AM_SKIP;
}
858 859

#endif /* WITH_QEMU */