qemuxml2argvtest.c 34.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 virQEMUDriver 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
    DO_TEST("cpu-eoi-disabled", QEMU_CAPS_ENABLE_KVM);
    DO_TEST("cpu-eoi-enabled", QEMU_CAPS_ENABLE_KVM);
411 412 413 414 415 416
    DO_TEST("controller-order", QEMU_CAPS_DRIVE, QEMU_CAPS_PCIDEVICE,
            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);
417 418
    DO_TEST("eoi-disabled", NONE);
    DO_TEST("eoi-enabled", NONE);
M
Martin Kletzander 已提交
419
    DO_TEST("kvmclock+eoi-disabled", QEMU_CAPS_ENABLE_KVM);
420

421 422
    DO_TEST("hyperv", NONE);

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

555 556
    DO_TEST("graphics-vnc", QEMU_CAPS_VNC);
    DO_TEST("graphics-vnc-socket", QEMU_CAPS_VNC);
557 558 559

    driver.vncSASL = 1;
    driver.vncSASLdir = strdup("/root/.sasl2");
560
    DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VNC, QEMU_CAPS_VGA);
561 562 563
    driver.vncTLS = 1;
    driver.vncTLSx509verify = 1;
    driver.vncTLSx509certdir = strdup("/etc/pki/tls/qemu");
564
    DO_TEST("graphics-vnc-tls", QEMU_CAPS_VNC);
565
    driver.vncSASL = driver.vncTLSx509verify = driver.vncTLS = 0;
566 567
    VIR_FREE(driver.vncSASLdir);
    VIR_FREE(driver.vncTLSx509certdir);
568 569
    driver.vncSASLdir = driver.vncTLSx509certdir = NULL;

570 571 572 573
    DO_TEST("graphics-sdl", NONE);
    DO_TEST("graphics-sdl-fullscreen", NONE);
    DO_TEST("nographics", QEMU_CAPS_VGA);
    DO_TEST("nographics-vga",
574
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_NONE);
575
    DO_TEST("graphics-spice",
576
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL,
577 578
            QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE,
            QEMU_CAPS_DEVICE_QXL);
579
    DO_TEST("graphics-spice-agentmouse",
P
Peng Zhou 已提交
580
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL,
581 582 583
            QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE,
            QEMU_CAPS_CHARDEV_SPICEVMC,
            QEMU_CAPS_NODEFCONFIG);
584
    DO_TEST("graphics-spice-compression",
585
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL,
586 587
            QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE,
            QEMU_CAPS_DEVICE_QXL);
588
    DO_TEST("graphics-spice-timeout",
589 590 591 592
            QEMU_CAPS_DRIVE,
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL,
            QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE,
            QEMU_CAPS_DEVICE_QXL_VGA);
593
    DO_TEST("graphics-spice-qxl-vga",
594 595
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL,
            QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE,
596 597
            QEMU_CAPS_DEVICE_QXL_VGA,
            QEMU_CAPS_DEVICE_QXL);
598
    DO_TEST("graphics-spice-usb-redir",
599 600 601 602 603
            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);
604

605 606
    DO_TEST("input-usbmouse", NONE);
    DO_TEST("input-usbtablet", NONE);
607
    DO_TEST("input-xen", QEMU_CAPS_DOMID, QEMU_CAPS_KVM, QEMU_CAPS_VNC);
608
    DO_TEST("misc-acpi", NONE);
609 610 611 612
    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);
613 614 615 616 617
    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",
618
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_VIRTIO_TX_ALG);
619
    DO_TEST("net-virtio-netdev",
620
            QEMU_CAPS_DEVICE, QEMU_CAPS_NETDEV, QEMU_CAPS_NODEFCONFIG);
621
    DO_TEST("net-virtio-s390",
622
            QEMU_CAPS_DEVICE, QEMU_CAPS_VIRTIO_S390);
623 624 625 626 627 628 629
    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",
630
            QEMU_CAPS_PCIDEVICE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
631

632 633 634 635 636 637 638 639 640 641 642 643 644 645
    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",
646
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
647
    DO_TEST("serial-pty-chardev",
648
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
649
    DO_TEST("serial-dev-chardev",
650
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
651
    DO_TEST("serial-file-chardev",
652
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
653
    DO_TEST("serial-unix-chardev",
654
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
655
    DO_TEST("serial-tcp-chardev",
656
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
657
    DO_TEST("serial-udp-chardev",
658
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
659
    DO_TEST("serial-tcp-telnet-chardev",
660
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
661
    DO_TEST("serial-many-chardev",
662
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
663
    DO_TEST("parallel-tcp-chardev",
664
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
665
    DO_TEST("parallel-parport-chardev",
666
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
667
    DO_TEST("console-compat-chardev",
668 669
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);

670
    DO_TEST("channel-guestfwd",
671
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
672
    DO_TEST("channel-virtio",
673
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
674
    DO_TEST("channel-virtio-auto",
675
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
676
    DO_TEST("console-virtio",
677
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
678
    DO_TEST("console-virtio-many",
679
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
680
    DO_TEST("console-virtio-s390",
681 682
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DRIVE,  QEMU_CAPS_VIRTIO_S390);
683
    DO_TEST("channel-spicevmc",
684 685
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC);
686
    DO_TEST("channel-spicevmc-old",
687 688 689
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_SPICEVMC);

690
    DO_TEST("smartcard-host",
691 692
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);
693
    DO_TEST("smartcard-host-certificates",
694 695
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);
696
    DO_TEST("smartcard-passthrough-tcp",
697 698
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_PASSTHRU);
699
    DO_TEST("smartcard-passthrough-spicevmc",
700 701
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_CCID_PASSTHRU, QEMU_CAPS_CHARDEV_SPICEVMC);
702
    DO_TEST("smartcard-controller",
703 704 705
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);

706
    DO_TEST("usb-controller",
707 708
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
            QEMU_CAPS_NODEFCONFIG);
709
    DO_TEST("usb-piix3-controller",
710
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_PIIX3_USB_UHCI,
711
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_NODEFCONFIG);
712
    DO_TEST("usb-ich9-ehci-addr",
713 714
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1);
715
    DO_TEST("input-usbmouse-addr",
716
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
717
    DO_TEST("usb-ich9-companion",
718 719
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1);
720
    DO_TEST("usb-hub",
M
Marc-André Lureau 已提交
721 722
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
723
    DO_TEST("usb-ports",
724 725
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_USB_HUB,
            QEMU_CAPS_NODEFCONFIG);
726
    DO_TEST("usb-redir",
727 728
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_USB_HUB,
729 730
            QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC);
731 732 733 734 735 736
    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);
737 738 739 740 741 742
    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);
743
    DO_TEST("usb1-usb2",
744 745 746
            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);
747 748 749 750 751 752 753 754 755 756
    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);

757

758
    DO_TEST("smbios", QEMU_CAPS_SMBIOS_TYPE);
759

760 761 762 763 764
    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",
765
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
766 767
    DO_TEST("sound", NONE);
    DO_TEST("sound-device",
768 769
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_HDA_MICRO);
770
    DO_TEST("fs9p",
771 772
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_FSDEV,
            QEMU_CAPS_FSDEV_WRITEOUT);
773

774 775
    DO_TEST("hostdev-usb-address", NONE);
    DO_TEST("hostdev-usb-address-device",
776
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
777 778 779
    DO_TEST("hostdev-usb-address-device-boot", QEMU_CAPS_DEVICE,
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_USB_HOST_BOOTINDEX);
780 781
    DO_TEST("hostdev-pci-address", QEMU_CAPS_PCIDEVICE);
    DO_TEST("hostdev-pci-address-device",
782
            QEMU_CAPS_PCIDEVICE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
783
    DO_TEST("pci-rom",
784 785
            QEMU_CAPS_PCIDEVICE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_ROMBAR);
786

787 788 789 790 791 792
    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,
793 794
            QEMU_CAPS_MIGRATE_QEMU_TCP);

795
    DO_TEST("qemu-ns", NONE);
796

797
    DO_TEST("smp", QEMU_CAPS_SMP_TOPOLOGY);
798

799 800 801 802 803 804 805 806 807
    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);
808
    DO_TEST_FAILURE("cpu-nofallback", NONE);
809 810 811 812
    DO_TEST("cpu-strict1", NONE);
    DO_TEST("cpu-numa1", NONE);
    DO_TEST("cpu-numa2", QEMU_CAPS_SMP_TOPOLOGY);
    DO_TEST("cpu-host-model", NONE);
813
    skipLegacyCPUs = true;
814
    DO_TEST("cpu-host-model-fallback", NONE);
815
    DO_TEST_FAILURE("cpu-host-model-nofallback", NONE);
816
    skipLegacyCPUs = false;
817
    DO_TEST("cpu-host-passthrough", QEMU_CAPS_KVM, QEMU_CAPS_CPU_HOST);
818 819 820
    DO_TEST_FAILURE("cpu-host-passthrough", NONE);
    DO_TEST_FAILURE("cpu-qemu-host-passthrough",
                    QEMU_CAPS_KVM, QEMU_CAPS_CPU_HOST);
821

822 823 824 825 826 827 828 829 830 831 832
    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,
833
            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_IOTUNE);
834

835
    DO_TEST("multifunction-pci-device",
836
            QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
837
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_SCSI_LSI);
838

839
    DO_TEST("monitor-json", QEMU_CAPS_DEVICE,
840
            QEMU_CAPS_CHARDEV, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_NODEFCONFIG);
841
    DO_TEST("no-shutdown", QEMU_CAPS_DEVICE,
842 843
            QEMU_CAPS_CHARDEV, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_NO_SHUTDOWN);
844

845 846 847 848 849 850
    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);
851

852
    DO_TEST("pseries-basic",
853
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
854
    DO_TEST("pseries-vio", QEMU_CAPS_DRIVE,
855
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
856
    DO_TEST("pseries-vio-user-assigned", QEMU_CAPS_DRIVE,
857
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
858
    DO_TEST_ERROR("pseries-vio-address-clash", QEMU_CAPS_DRIVE,
859
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
860
    DO_TEST("disk-ide-drive-split",
861 862
            QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_IDE_CD);
863 864 865
    DO_TEST("disk-ide-wwn",
            QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_IDE_CD,
            QEMU_CAPS_DRIVE_SERIAL, QEMU_CAPS_IDE_DRIVE_WWN);
866

867
    DO_TEST("disk-geometry", QEMU_CAPS_DRIVE);
V
Viktor Mihajlovski 已提交
868
    DO_TEST("disk-blockio",
869
            QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
V
Viktor Mihajlovski 已提交
870
            QEMU_CAPS_IDE_CD, QEMU_CAPS_BLOCKIO);
871

872 873 874 875 876
    DO_TEST("video-device-pciaddr-default",
            QEMU_CAPS_KVM, QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_DEVICE_QXL_VGA);

877
    VIR_FREE(driver.stateDir);
878
    virCapabilitiesFree(driver.caps);
879
    VIR_FREE(map);
880

881
    return ret==0 ? EXIT_SUCCESS : EXIT_FAILURE;
882 883
}

884 885
VIRT_TEST_MAIN(mymain)

886
#else
E
Eric Blake 已提交
887
# include "testutils.h"
888

889 890 891 892
int main(void)
{
    return EXIT_AM_SKIP;
}
893 894

#endif /* WITH_QEMU */