qemuxml2argvtest.c 32.7 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
    DO_TEST("boot-order",
379 380
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE,
            QEMU_CAPS_VIRTIO_BLK_SCSI, QEMU_CAPS_VIRTIO_BLK_SG_IO);
381
    DO_TEST("boot-complex",
382 383
            QEMU_CAPS_DEVICE, QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT,
            QEMU_CAPS_VIRTIO_BLK_SCSI, QEMU_CAPS_VIRTIO_BLK_SG_IO);
384
    DO_TEST("boot-complex-bootindex",
385
            QEMU_CAPS_DEVICE, QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT,
386 387
            QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_VIRTIO_BLK_SCSI, QEMU_CAPS_VIRTIO_BLK_SG_IO);
388
    DO_TEST("bootloader", QEMU_CAPS_DOMID, QEMU_CAPS_KVM);
389 390 391 392 393

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

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

406 407 408 409 410
    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);

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

533 534
    DO_TEST("graphics-vnc", NONE);
    DO_TEST("graphics-vnc-socket", NONE);
535 536 537

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

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

580 581
    DO_TEST("input-usbmouse", NONE);
    DO_TEST("input-usbtablet", NONE);
582
    DO_TEST("input-xen", QEMU_CAPS_DOMID, QEMU_CAPS_KVM);
583
    DO_TEST("misc-acpi", NONE);
584 585 586 587
    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);
588 589 590 591 592
    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",
593
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_VIRTIO_TX_ALG);
594
    DO_TEST("net-virtio-netdev",
595
            QEMU_CAPS_DEVICE, QEMU_CAPS_NETDEV, QEMU_CAPS_NODEFCONFIG);
596
    DO_TEST("net-virtio-s390",
597
            QEMU_CAPS_DEVICE, QEMU_CAPS_VIRTIO_S390);
598 599 600 601 602 603 604
    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",
605
            QEMU_CAPS_PCIDEVICE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
606

607 608 609 610 611 612 613 614 615 616 617 618 619 620
    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",
621
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
622
    DO_TEST("serial-pty-chardev",
623
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
624
    DO_TEST("serial-dev-chardev",
625
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
626
    DO_TEST("serial-file-chardev",
627
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
628
    DO_TEST("serial-unix-chardev",
629
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
630
    DO_TEST("serial-tcp-chardev",
631
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
632
    DO_TEST("serial-udp-chardev",
633
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
634
    DO_TEST("serial-tcp-telnet-chardev",
635
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
636
    DO_TEST("serial-many-chardev",
637
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
638
    DO_TEST("parallel-tcp-chardev",
639
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
640
    DO_TEST("parallel-parport-chardev",
641
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
642
    DO_TEST("console-compat-chardev",
643 644
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);

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

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

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

726

727
    DO_TEST("smbios", QEMU_CAPS_SMBIOS_TYPE);
728

729 730 731 732 733
    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",
734
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
735 736
    DO_TEST("sound", NONE);
    DO_TEST("sound-device",
737 738
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_HDA_MICRO);
739
    DO_TEST("fs9p",
740 741
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_FSDEV,
            QEMU_CAPS_FSDEV_WRITEOUT);
742

743 744
    DO_TEST("hostdev-usb-address", NONE);
    DO_TEST("hostdev-usb-address-device",
745
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
746 747
    DO_TEST("hostdev-pci-address", QEMU_CAPS_PCIDEVICE);
    DO_TEST("hostdev-pci-address-device",
748
            QEMU_CAPS_PCIDEVICE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
749
    DO_TEST("pci-rom",
750 751
            QEMU_CAPS_PCIDEVICE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_ROMBAR);
752

753 754 755 756 757 758
    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,
759 760
            QEMU_CAPS_MIGRATE_QEMU_TCP);

761
    DO_TEST("qemu-ns", NONE);
762

763
    DO_TEST("smp", QEMU_CAPS_SMP_TOPOLOGY);
764

765 766 767 768 769 770 771 772 773
    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);
774
    DO_TEST_FAILURE("cpu-nofallback", NONE);
775 776 777 778
    DO_TEST("cpu-strict1", NONE);
    DO_TEST("cpu-numa1", NONE);
    DO_TEST("cpu-numa2", QEMU_CAPS_SMP_TOPOLOGY);
    DO_TEST("cpu-host-model", NONE);
779
    skipLegacyCPUs = true;
780
    DO_TEST("cpu-host-model-fallback", NONE);
781
    DO_TEST_FAILURE("cpu-host-model-nofallback", NONE);
782
    skipLegacyCPUs = false;
783
    DO_TEST("cpu-host-passthrough", QEMU_CAPS_KVM, QEMU_CAPS_CPU_HOST);
784 785 786
    DO_TEST_FAILURE("cpu-host-passthrough", NONE);
    DO_TEST_FAILURE("cpu-qemu-host-passthrough",
                    QEMU_CAPS_KVM, QEMU_CAPS_CPU_HOST);
787

788 789 790 791 792 793 794 795 796 797 798
    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,
799
            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_IOTUNE);
800

801
    DO_TEST("multifunction-pci-device",
802
            QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
803
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_SCSI_LSI);
804

805
    DO_TEST("monitor-json", QEMU_CAPS_DEVICE,
806
            QEMU_CAPS_CHARDEV, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_NODEFCONFIG);
807
    DO_TEST("no-shutdown", QEMU_CAPS_DEVICE,
808 809
            QEMU_CAPS_CHARDEV, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_NO_SHUTDOWN);
810

811 812 813 814 815 816
    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);
817

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

833
    DO_TEST("disk-geometry", QEMU_CAPS_DRIVE);
V
Viktor Mihajlovski 已提交
834
    DO_TEST("disk-blockio",
835
            QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
V
Viktor Mihajlovski 已提交
836
            QEMU_CAPS_IDE_CD, QEMU_CAPS_BLOCKIO);
837

838
    VIR_FREE(driver.stateDir);
839
    virCapabilitiesFree(driver.caps);
840
    VIR_FREE(map);
841

842
    return ret==0 ? EXIT_SUCCESS : EXIT_FAILURE;
843 844
}

845 846
VIRT_TEST_MAIN(mymain)

847
#else
E
Eric Blake 已提交
848
# include "testutils.h"
849

850 851 852 853
int main(void)
{
    return EXIT_AM_SKIP;
}
854 855

#endif /* WITH_QEMU */