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

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

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

11 12
#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
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");
34 35 36
    if (!secret) {
        return NULL;
    }
37 38 39 40 41 42 43 44 45
    *value_size = strlen(secret);
    return (unsigned char *) secret;
}

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

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

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

75 76 77 78 79 80 81
typedef enum {
    FLAG_EXPECT_ERROR       = 1 << 0,
    FLAG_EXPECT_FAILURE     = 1 << 1,
    FLAG_EXPECT_PARSE_ERROR = 1 << 2,
    FLAG_JSON               = 1 << 3,
} virQemuXML2ArgvTestFlags;

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

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

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

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

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

121 122 123
    qemuCapsSetList(extraFlags,
                    QEMU_CAPS_VNC_COLON,
                    QEMU_CAPS_NO_REBOOT,
124
                    QEMU_CAPS_NO_ACPI,
125
                    QEMU_CAPS_LAST);
126

127 128 129 130 131 132
    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;
    }
133

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

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

146 147
    if (vmdef->os.arch == VIR_ARCH_X86_64 ||
        vmdef->os.arch == VIR_ARCH_I686) {
148
        qemuCapsSet(extraFlags, QEMU_CAPS_PCI_MULTIBUS);
149 150
    }

151
    if (qemuAssignDeviceAliases(vmdef, extraFlags) < 0)
152
        goto out;
153

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

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

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

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

184 185
    if (STRNEQ(expectargv, actualargv)) {
        virtTestDifference(stderr, expectargv, actualargv);
186
        goto out;
187 188
    }

189
 ok:
190
    if (flags & FLAG_EXPECT_ERROR) {
191 192 193 194
        /* need to suppress the errors */
        virResetLastError();
    }

195 196
    ret = 0;

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


208 209
struct testInfo {
    const char *name;
210
    qemuCapsPtr extraFlags;
211
    const char *migrateFrom;
212
    int migrateFd;
213
    unsigned int flags;
214 215
};

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

    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;

231 232 233
    if (qemuCapsGet(info->extraFlags, QEMU_CAPS_MONITOR_JSON))
        flags |= FLAG_JSON;

234
    result = testCompareXMLToArgvFiles(xml, args, info->extraFlags,
235
                                       info->migrateFrom, info->migrateFd,
236
                                       flags);
237 238

cleanup:
239 240
    VIR_FREE(xml);
    VIR_FREE(args);
241
    return result;
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 269 270 271
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;
}

272

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

280 281 282 283
    abs_top_srcdir = getenv("abs_top_srcdir");
    if (!abs_top_srcdir)
        abs_top_srcdir = "..";

284 285 286 287
    driver.config = virQEMUDriverConfigNew(false);
    VIR_FREE(driver.config->spiceListen);
    VIR_FREE(driver.config->vncListen);

288 289
    if ((driver.caps = testQemuCapsInit()) == NULL)
        return EXIT_FAILURE;
290 291
    VIR_FREE(driver.config->stateDir);
    if ((driver.config->stateDir = strdup("/nowhere")) == NULL)
292
        return EXIT_FAILURE;
293 294
    VIR_FREE(driver.config->hugetlbfsMount);
    if ((driver.config->hugetlbfsMount = strdup("/dev/hugepages")) == NULL)
295
        return EXIT_FAILURE;
296 297
    VIR_FREE(driver.config->hugepagePath);
    if ((driver.config->hugepagePath = strdup("/dev/hugepages/libvirt/qemu")) == NULL)
298
        return EXIT_FAILURE;
299 300
    driver.config->spiceTLS = 1;
    if (!(driver.config->spicePassword = strdup("123456")))
301
        return EXIT_FAILURE;
302 303
    if (virAsprintf(&map, "%s/src/cpu/cpu_map.xml", abs_top_srcdir) < 0 ||
        cpuMapOverride(map) < 0) {
304
        VIR_FREE(map);
305
        return EXIT_FAILURE;
306
    }
307

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

324 325 326 327 328
# 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__)
329 330

# define DO_TEST_FAILURE(name, ...)                                     \
331 332 333 334 335 336
    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__)
337 338

# define NONE QEMU_CAPS_LAST
339

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

353 354 355
    DO_TEST("minimal", QEMU_CAPS_NAME);
    DO_TEST("minimal-s390", QEMU_CAPS_NAME);
    DO_TEST("machine-aliases1", NONE);
356
    DO_TEST("machine-aliases2", QEMU_CAPS_KVM);
357 358 359
    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);
360 361 362 363 364
    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",
365
            QEMU_CAPS_BOOT_MENU, QEMU_CAPS_DEVICE, QEMU_CAPS_DRIVE);
366
    DO_TEST("boot-menu-enable",
367 368
            QEMU_CAPS_BOOT_MENU, QEMU_CAPS_DEVICE, QEMU_CAPS_DRIVE,
            QEMU_CAPS_BOOTINDEX);
369 370
    DO_TEST("boot-menu-disable", QEMU_CAPS_BOOT_MENU);
    DO_TEST("boot-menu-disable-drive",
371
            QEMU_CAPS_BOOT_MENU, QEMU_CAPS_DEVICE, QEMU_CAPS_DRIVE);
372
    DO_TEST("boot-menu-disable-drive-bootindex",
373 374
            QEMU_CAPS_BOOT_MENU, QEMU_CAPS_DEVICE, QEMU_CAPS_DRIVE,
            QEMU_CAPS_BOOTINDEX);
375 376 377
    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);
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
    DO_TEST("cpu-eoi-disabled", QEMU_CAPS_ENABLE_KVM);
    DO_TEST("cpu-eoi-enabled", QEMU_CAPS_ENABLE_KVM);
408 409 410 411 412 413
    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);
414 415
    DO_TEST("eoi-disabled", NONE);
    DO_TEST("eoi-enabled", NONE);
M
Martin Kletzander 已提交
416
    DO_TEST("kvmclock+eoi-disabled", QEMU_CAPS_ENABLE_KVM);
417

418 419
    DO_TEST("hyperv", NONE);

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

554 555
    DO_TEST("graphics-vnc", QEMU_CAPS_VNC);
    DO_TEST("graphics-vnc-socket", QEMU_CAPS_VNC);
556

557 558 559
    driver.config->vncSASL = 1;
    VIR_FREE(driver.config->vncSASLdir);
    driver.config->vncSASLdir = strdup("/root/.sasl2");
560
    DO_TEST("graphics-vnc-sasl", QEMU_CAPS_VNC, QEMU_CAPS_VGA);
561 562
    driver.config->vncTLS = 1;
    driver.config->vncTLSx509verify = 1;
563
    DO_TEST("graphics-vnc-tls", QEMU_CAPS_VNC);
564
    driver.config->vncSASL = driver.config->vncTLSx509verify = driver.config->vncTLS = 0;
565 566
    VIR_FREE(driver.config->vncSASLdir);
    VIR_FREE(driver.config->vncTLSx509certdir);
567

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

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

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

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

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

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

758

759
    DO_TEST("smbios", QEMU_CAPS_SMBIOS_TYPE);
760

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

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

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

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

798
    DO_TEST("smp", QEMU_CAPS_SMP_TOPOLOGY);
799

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

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

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

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

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

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

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

873 874 875 876 877
    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);

878
    virObjectUnref(driver.config);
879
    virCapabilitiesFree(driver.caps);
880
    VIR_FREE(map);
881

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

885 886
VIRT_TEST_MAIN(mymain)

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

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

#endif /* WITH_QEMU */