qemuxml2argvtest.c 34.6 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 "viralloc.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;
E
Eric Blake 已提交
94
    virCommandPtr cmd = NULL;
95 96

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

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

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

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

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

124 125 126 127 128 129
    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;
    }
130

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

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

143 144
    if (vmdef->os.arch == VIR_ARCH_X86_64 ||
        vmdef->os.arch == VIR_ARCH_I686) {
145
        qemuCapsSet(extraFlags, QEMU_CAPS_PCI_MULTIBUS);
146 147
    }

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

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

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

E
Eric Blake 已提交
172
    if (!(actualargv = virCommandToString(cmd)))
173
        goto out;
E
Eric Blake 已提交
174

175 176 177 178 179 180
    len = virtTestLoadFile(cmdline, &expectargv);
    if (len < 0)
        goto out;
    if (len && expectargv[len - 1] == '\n')
        expectargv[len - 1] = '\0';

181 182
    if (STRNEQ(expectargv, actualargv)) {
        virtTestDifference(stderr, expectargv, actualargv);
183
        goto out;
184 185
    }

186
 ok:
187
    if (flags & FLAG_EXPECT_ERROR) {
188 189 190 191
        /* need to suppress the errors */
        virResetLastError();
    }

192 193
    ret = 0;

194
out:
195 196 197
    VIR_FREE(log);
    VIR_FREE(expectargv);
    VIR_FREE(actualargv);
E
Eric Blake 已提交
198
    virCommandFree(cmd);
199
    virDomainDefFree(vmdef);
200
    virObjectUnref(conn);
201 202 203 204
    return ret;
}


205 206
struct testInfo {
    const char *name;
207
    qemuCapsPtr extraFlags;
208
    const char *migrateFrom;
209
    int migrateFd;
210
    unsigned int flags;
211 212
};

213 214 215 216
static int
testCompareXMLToArgvHelper(const void *data)
{
    int result = -1;
217
    const struct testInfo *info = data;
218 219
    char *xml = NULL;
    char *args = NULL;
220
    unsigned int flags = info->flags;
221 222 223 224 225 226 227

    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;

228 229 230
    if (qemuCapsGet(info->extraFlags, QEMU_CAPS_MONITOR_JSON))
        flags |= FLAG_JSON;

231
    result = testCompareXMLToArgvFiles(xml, args, info->extraFlags,
232
                                       info->migrateFrom, info->migrateFd,
233
                                       flags);
234 235

cleanup:
236 237
    VIR_FREE(xml);
    VIR_FREE(args);
238
    return result;
239 240 241
}


242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268
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;
}

269

270
static int
E
Eric Blake 已提交
271
mymain(void)
272 273
{
    int ret = 0;
274
    char *map = NULL;
275
    bool skipLegacyCPUs = false;
276

277 278 279 280
    abs_top_srcdir = getenv("abs_top_srcdir");
    if (!abs_top_srcdir)
        abs_top_srcdir = "..";

281 282
    if ((driver.caps = testQemuCapsInit()) == NULL)
        return EXIT_FAILURE;
283 284 285 286 287
    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)
288
        return EXIT_FAILURE;
289 290 291 292 293
    driver.spiceTLS = 1;
    if (!(driver.spiceTLSx509certdir = strdup("/etc/pki/libvirt-spice")))
        return EXIT_FAILURE;
    if (!(driver.spicePassword = strdup("123456")))
        return EXIT_FAILURE;
294 295
    if (virAsprintf(&map, "%s/src/cpu/cpu_map.xml", abs_top_srcdir) < 0 ||
        cpuMapOverride(map) < 0) {
296
        VIR_FREE(map);
297
        return EXIT_FAILURE;
298
    }
299

300
# define DO_TEST_FULL(name, migrateFrom, migrateFd, flags, ...)         \
301
    do {                                                                \
302
        static struct testInfo info = {                                 \
303
            name, NULL, migrateFrom, migrateFd, (flags)                 \
J
Jiri Denemark 已提交
304
        };                                                              \
305 306
        if (!(info.extraFlags = qemuCapsNew()))                         \
            return EXIT_FAILURE;                                        \
307 308
        if (testAddCPUModels(info.extraFlags, skipLegacyCPUs) < 0)      \
            return EXIT_FAILURE;                                        \
309
        qemuCapsSetList(info.extraFlags, __VA_ARGS__, QEMU_CAPS_LAST);  \
310 311 312
        if (virtTestRun("QEMU XML-2-ARGV " name,                        \
                        1, testCompareXMLToArgvHelper, &info) < 0)      \
            ret = -1;                                                   \
313
        virObjectUnref(info.extraFlags);                                \
314 315
    } while (0)

316 317 318 319 320
# 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__)
321 322

# define DO_TEST_FAILURE(name, ...)                                     \
323 324 325 326 327 328
    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__)
329 330

# define NONE QEMU_CAPS_LAST
331

332 333 334
    /* 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 */
335 336 337 338 339 340 341
    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");
342 343
    unsetenv("QEMU_AUDIO_DRV");
    unsetenv("SDL_AUDIODRIVER");
344

345 346 347
    DO_TEST("minimal", QEMU_CAPS_NAME);
    DO_TEST("minimal-s390", QEMU_CAPS_NAME);
    DO_TEST("machine-aliases1", NONE);
348
    DO_TEST("machine-aliases2", QEMU_CAPS_KVM);
349 350 351
    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);
352 353 354 355 356
    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",
357
            QEMU_CAPS_BOOT_MENU, QEMU_CAPS_DEVICE, QEMU_CAPS_DRIVE);
358
    DO_TEST("boot-menu-enable",
359 360
            QEMU_CAPS_BOOT_MENU, QEMU_CAPS_DEVICE, QEMU_CAPS_DRIVE,
            QEMU_CAPS_BOOTINDEX);
361 362
    DO_TEST("boot-menu-disable", QEMU_CAPS_BOOT_MENU);
    DO_TEST("boot-menu-disable-drive",
363
            QEMU_CAPS_BOOT_MENU, QEMU_CAPS_DEVICE, QEMU_CAPS_DRIVE);
364
    DO_TEST("boot-menu-disable-drive-bootindex",
365 366
            QEMU_CAPS_BOOT_MENU, QEMU_CAPS_DEVICE, QEMU_CAPS_DRIVE,
            QEMU_CAPS_BOOTINDEX);
367 368 369
    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);
370
    DO_TEST("boot-order",
371 372
            QEMU_CAPS_BOOTINDEX, QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE,
            QEMU_CAPS_VIRTIO_BLK_SCSI, QEMU_CAPS_VIRTIO_BLK_SG_IO);
373
    DO_TEST("boot-complex",
374 375
            QEMU_CAPS_DEVICE, QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT,
            QEMU_CAPS_VIRTIO_BLK_SCSI, QEMU_CAPS_VIRTIO_BLK_SG_IO);
376
    DO_TEST("boot-complex-bootindex",
377
            QEMU_CAPS_DEVICE, QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_BOOT,
378 379
            QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_VIRTIO_BLK_SCSI, QEMU_CAPS_VIRTIO_BLK_SG_IO);
380
    DO_TEST("bootloader", QEMU_CAPS_DOMID, QEMU_CAPS_KVM);
381 382 383 384 385

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

386 387 388
    DO_TEST("bios", QEMU_CAPS_DEVICE, QEMU_CAPS_SGA);
    DO_TEST("clock-utc", NONE);
    DO_TEST("clock-localtime", NONE);
389 390
    /*
     * Can't be enabled since the absolute timestamp changes every time
391
    DO_TEST("clock-variable", QEMU_CAPS_RTC);
392
    */
393 394 395 396 397
    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);

398 399
    DO_TEST("cpu-eoi-disabled", QEMU_CAPS_ENABLE_KVM);
    DO_TEST("cpu-eoi-enabled", QEMU_CAPS_ENABLE_KVM);
400 401 402 403 404 405
    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);
406 407
    DO_TEST("eoi-disabled", NONE);
    DO_TEST("eoi-enabled", NONE);
M
Martin Kletzander 已提交
408
    DO_TEST("kvmclock+eoi-disabled", QEMU_CAPS_ENABLE_KVM);
409

410 411
    DO_TEST("hyperv", NONE);

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

546 547
    DO_TEST("graphics-vnc", QEMU_CAPS_VNC);
    DO_TEST("graphics-vnc-socket", QEMU_CAPS_VNC);
548 549 550

    driver.vncSASL = 1;
    driver.vncSASLdir = strdup("/root/.sasl2");
551
    DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VNC, QEMU_CAPS_VGA);
552 553 554
    driver.vncTLS = 1;
    driver.vncTLSx509verify = 1;
    driver.vncTLSx509certdir = strdup("/etc/pki/tls/qemu");
555
    DO_TEST("graphics-vnc-tls", QEMU_CAPS_VNC);
556
    driver.vncSASL = driver.vncTLSx509verify = driver.vncTLS = 0;
557 558
    VIR_FREE(driver.vncSASLdir);
    VIR_FREE(driver.vncTLSx509certdir);
559 560
    driver.vncSASLdir = driver.vncTLSx509certdir = NULL;

561 562 563 564
    DO_TEST("graphics-sdl", NONE);
    DO_TEST("graphics-sdl-fullscreen", NONE);
    DO_TEST("nographics", QEMU_CAPS_VGA);
    DO_TEST("nographics-vga",
565
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_NONE);
566
    DO_TEST("graphics-spice",
567
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL,
568 569
            QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE,
            QEMU_CAPS_DEVICE_QXL);
570
    DO_TEST("graphics-spice-agentmouse",
P
Peng Zhou 已提交
571
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL,
572 573 574
            QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE,
            QEMU_CAPS_CHARDEV_SPICEVMC,
            QEMU_CAPS_NODEFCONFIG);
575
    DO_TEST("graphics-spice-compression",
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-timeout",
580 581 582 583
            QEMU_CAPS_DRIVE,
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL,
            QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE,
            QEMU_CAPS_DEVICE_QXL_VGA);
584
    DO_TEST("graphics-spice-qxl-vga",
585 586
            QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL,
            QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE,
587 588
            QEMU_CAPS_DEVICE_QXL_VGA,
            QEMU_CAPS_DEVICE_QXL);
589
    DO_TEST("graphics-spice-usb-redir",
590 591 592 593 594
            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);
595

596 597
    DO_TEST("input-usbmouse", NONE);
    DO_TEST("input-usbtablet", NONE);
598
    DO_TEST("input-xen", QEMU_CAPS_DOMID, QEMU_CAPS_KVM, QEMU_CAPS_VNC);
599
    DO_TEST("misc-acpi", NONE);
600 601 602 603
    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);
604 605 606 607 608
    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",
609
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_VIRTIO_TX_ALG);
610
    DO_TEST("net-virtio-netdev",
611
            QEMU_CAPS_DEVICE, QEMU_CAPS_NETDEV, QEMU_CAPS_NODEFCONFIG);
612
    DO_TEST("net-virtio-s390",
613
            QEMU_CAPS_DEVICE, QEMU_CAPS_VIRTIO_S390);
614 615 616 617 618 619 620
    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",
621
            QEMU_CAPS_PCIDEVICE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
622

623 624 625 626 627 628 629 630 631 632 633 634 635 636
    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",
637
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
638
    DO_TEST("serial-pty-chardev",
639
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
640
    DO_TEST("serial-dev-chardev",
641
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
642
    DO_TEST("serial-file-chardev",
643
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
644
    DO_TEST("serial-unix-chardev",
645
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
646
    DO_TEST("serial-tcp-chardev",
647
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
648
    DO_TEST("serial-udp-chardev",
649
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
650
    DO_TEST("serial-tcp-telnet-chardev",
651
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
652
    DO_TEST("serial-many-chardev",
653
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
654
    DO_TEST("parallel-tcp-chardev",
655
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
656
    DO_TEST("parallel-parport-chardev",
657
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
658
    DO_TEST("console-compat-chardev",
659 660
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);

661
    DO_TEST("channel-guestfwd",
662
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
663
    DO_TEST("channel-virtio",
664
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
665
    DO_TEST("channel-virtio-auto",
666
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
667
    DO_TEST("console-virtio",
668
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
669
    DO_TEST("console-virtio-many",
670
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG);
671
    DO_TEST("console-virtio-s390",
672 673
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DRIVE,  QEMU_CAPS_VIRTIO_S390);
674 675 676
    DO_TEST("console-sclp",
            QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_DRIVE, QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_SCLP_S390);
677
    DO_TEST("channel-spicevmc",
678 679
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_SPICE, QEMU_CAPS_CHARDEV_SPICEVMC);
680
    DO_TEST("channel-spicevmc-old",
681 682 683
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_SPICE, QEMU_CAPS_DEVICE_SPICEVMC);

684
    DO_TEST("smartcard-host",
685 686
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);
687
    DO_TEST("smartcard-host-certificates",
688 689
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);
690
    DO_TEST("smartcard-passthrough-tcp",
691 692
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_PASSTHRU);
693
    DO_TEST("smartcard-passthrough-spicevmc",
694 695
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_CCID_PASSTHRU, QEMU_CAPS_CHARDEV_SPICEVMC);
696
    DO_TEST("smartcard-controller",
697 698 699
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CCID_EMULATED);

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

751

752
    DO_TEST("smbios", QEMU_CAPS_SMBIOS_TYPE);
753

754 755 756 757 758
    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",
759
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
760 761
    DO_TEST("sound", NONE);
    DO_TEST("sound-device",
762 763
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_HDA_DUPLEX, QEMU_CAPS_HDA_MICRO);
764
    DO_TEST("fs9p",
765 766
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_FSDEV,
            QEMU_CAPS_FSDEV_WRITEOUT);
767

768 769
    DO_TEST("hostdev-usb-address", NONE);
    DO_TEST("hostdev-usb-address-device",
770
            QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
771 772 773
    DO_TEST("hostdev-usb-address-device-boot", QEMU_CAPS_DEVICE,
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_BOOTINDEX,
            QEMU_CAPS_USB_HOST_BOOTINDEX);
774 775
    DO_TEST("hostdev-pci-address", QEMU_CAPS_PCIDEVICE);
    DO_TEST("hostdev-pci-address-device",
776
            QEMU_CAPS_PCIDEVICE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
777
    DO_TEST("pci-rom",
778 779
            QEMU_CAPS_PCIDEVICE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_PCI_ROMBAR);
780

781 782 783 784 785 786
    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,
787 788
            QEMU_CAPS_MIGRATE_QEMU_TCP);

789
    DO_TEST("qemu-ns", NONE);
790

791
    DO_TEST("smp", QEMU_CAPS_SMP_TOPOLOGY);
792

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

816 817 818 819 820 821 822 823 824 825 826
    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,
827
            QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_IOTUNE);
828

829
    DO_TEST("multifunction-pci-device",
830
            QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
831
            QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_SCSI_LSI);
832

833
    DO_TEST("monitor-json", QEMU_CAPS_DEVICE,
834
            QEMU_CAPS_CHARDEV, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_NODEFCONFIG);
835
    DO_TEST("no-shutdown", QEMU_CAPS_DEVICE,
836 837
            QEMU_CAPS_CHARDEV, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_NO_SHUTDOWN);
838

839 840 841 842 843 844
    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);
845

846
    DO_TEST("pseries-basic",
847
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
848
    DO_TEST("pseries-vio", QEMU_CAPS_DRIVE,
849
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
850
    DO_TEST("pseries-vio-user-assigned", QEMU_CAPS_DRIVE,
851
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
852
    DO_TEST_ERROR("pseries-vio-address-clash", QEMU_CAPS_DRIVE,
853
            QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
854
    DO_TEST("disk-ide-drive-split",
855 856
            QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
            QEMU_CAPS_IDE_CD);
857 858 859
    DO_TEST("disk-ide-wwn",
            QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_IDE_CD,
            QEMU_CAPS_DRIVE_SERIAL, QEMU_CAPS_IDE_DRIVE_WWN);
860

861
    DO_TEST("disk-geometry", QEMU_CAPS_DRIVE);
V
Viktor Mihajlovski 已提交
862
    DO_TEST("disk-blockio",
863
            QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
V
Viktor Mihajlovski 已提交
864
            QEMU_CAPS_IDE_CD, QEMU_CAPS_BLOCKIO);
865

866 867 868 869 870
    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);

871
    VIR_FREE(driver.stateDir);
872
    virCapabilitiesFree(driver.caps);
873
    VIR_FREE(map);
874

875
    return ret==0 ? EXIT_SUCCESS : EXIT_FAILURE;
876 877
}

878 879
VIRT_TEST_MAIN(mymain)

880
#else
E
Eric Blake 已提交
881
# include "testutils.h"
882

883 884 885 886
int main(void)
{
    return EXIT_AM_SKIP;
}
887 888

#endif /* WITH_QEMU */