qemuxml2xmltest.c 54.6 KB
Newer Older
1
#include <config.h>
2 3

#include <unistd.h>
4 5 6 7

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

8 9
#include "testutils.h"

10 11
#ifdef WITH_QEMU

12
# include "internal.h"
J
Ján Tomko 已提交
13
# include "qemu/qemu_domain_address.h"
M
Matthias Bolte 已提交
14
# include "qemu/qemu_domain.h"
15
# include "testutilsqemu.h"
16
# include "virstring.h"
17 18
# include "virfilewrapper.h"
# include "configmake.h"
19

20 21
# define VIR_FROM_THIS VIR_FROM_NONE

22
static virQEMUDriver driver;
23

24 25 26 27 28 29
enum {
    WHEN_INACTIVE = 1,
    WHEN_ACTIVE = 2,
    WHEN_BOTH = 3,
};

30

31 32 33
static int
testXML2XMLActive(const void *opaque)
{
34
    const struct testQemuInfo *info = opaque;
35

36
    return testCompareDomXML2XMLFiles(driver.caps, driver.xmlopt,
37
                                      info->infile, info->outfile, true, 0,
38
                                      TEST_COMPARE_DOM_XML2XML_RESULT_SUCCESS);
39 40
}

41

42
static int
43
testXML2XMLInactive(const void *opaque)
44
{
45
    const struct testQemuInfo *info = opaque;
46

47 48
    return testCompareDomXML2XMLFiles(driver.caps, driver.xmlopt,
                                      info->infile, info->outfile, false, 0,
49
                                      TEST_COMPARE_DOM_XML2XML_RESULT_SUCCESS);
50
}
51

52

53 54 55
static int
testCompareStatusXMLToXMLFiles(const void *opaque)
{
56
    const struct testQemuInfo *data = opaque;
57 58 59 60
    virDomainObjPtr obj = NULL;
    char *actual = NULL;
    int ret = -1;

61
    if (!(obj = virDomainObjParseFile(data->infile, driver.xmlopt,
62 63 64 65
                                      VIR_DOMAIN_DEF_PARSE_STATUS |
                                      VIR_DOMAIN_DEF_PARSE_ACTUAL_NET |
                                      VIR_DOMAIN_DEF_PARSE_PCI_ORIG_STATES |
                                      VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE |
66
                                      VIR_DOMAIN_DEF_PARSE_ALLOW_POST_PARSE_FAIL))) {
67
        VIR_TEST_DEBUG("\nfailed to parse '%s'", data->infile);
68
        goto cleanup;
69
    }
70

71
    if (!(actual = virDomainObjFormat(obj, driver.xmlopt,
72 73 74 75
                                      VIR_DOMAIN_DEF_FORMAT_SECURE |
                                      VIR_DOMAIN_DEF_FORMAT_STATUS |
                                      VIR_DOMAIN_DEF_FORMAT_ACTUAL_NET |
                                      VIR_DOMAIN_DEF_FORMAT_PCI_ORIG_STATES |
76
                                      VIR_DOMAIN_DEF_FORMAT_CLOCK_ADJUST))) {
77
        VIR_TEST_DEBUG("\nfailed to format back '%s'", data->infile);
78
        goto cleanup;
79
    }
80

81
    if (virTestCompareToFile(actual, data->outfile) < 0)
82 83 84 85 86
        goto cleanup;

    ret = 0;

 cleanup:
87
    virDomainObjEndAPI(&obj);
88 89 90 91 92 93
    VIR_FREE(actual);
    return ret;
}


static int
94
testInfoSetPaths(struct testQemuInfo *info,
95
                 const char *suffix,
96
                 int when)
97
{
98 99 100
    VIR_FREE(info->infile);
    VIR_FREE(info->outfile);

101 102
    info->infile = g_strdup_printf("%s/qemuxml2argvdata/%s.xml", abs_srcdir,
                                   info->name);
103

104 105 106
    info->outfile = g_strdup_printf("%s/qemuxml2xmloutdata/%s-%s%s.xml",
                                    abs_srcdir, info->name,
                                    when == WHEN_ACTIVE ? "active" : "inactive", suffix);
107

108 109
    if (!virFileExists(info->outfile)) {
        VIR_FREE(info->outfile);
110

111 112
        info->outfile = g_strdup_printf("%s/qemuxml2xmloutdata/%s%s.xml",
                                        abs_srcdir, info->name, suffix);
113
    }
114

115
    return 0;
116 117
}

118 119 120

static const char *statusPath = abs_srcdir "/qemustatusxml2xmldata/";

121
static void
122
testInfoSetStatusPaths(struct testQemuInfo *info)
123
{
124 125
    info->infile = g_strdup_printf("%s%s-in.xml", statusPath, info->name);
    info->outfile = g_strdup_printf("%s%s-out.xml", statusPath, info->name);
126 127 128
}


A
Andrea Bolognani 已提交
129
# define FAKEROOTDIRTEMPLATE abs_builddir "/fakerootdir-XXXXXX"
130

131
static int
E
Eric Blake 已提交
132
mymain(void)
133 134
{
    int ret = 0;
A
Andrea Bolognani 已提交
135
    char *fakerootdir;
136
    virQEMUDriverConfigPtr cfg = NULL;
137 138 139 140 141
    virHashTablePtr capslatest = NULL;

    capslatest = testQemuGetLatestCaps();
    if (!capslatest)
        return EXIT_FAILURE;
142

143
    fakerootdir = g_strdup(FAKEROOTDIRTEMPLATE);
A
Andrea Bolognani 已提交
144

J
Ján Tomko 已提交
145
    if (!g_mkdtemp(fakerootdir)) {
A
Andrea Bolognani 已提交
146 147 148 149 150 151
        fprintf(stderr, "Cannot create fakerootdir");
        abort();
    }

    setenv("LIBVIRT_FAKE_ROOT_DIR", fakerootdir, 1);

152 153 154 155 156 157 158 159 160
    /* Required for tpm-emulator tests
     */
    virFileWrapperAddPrefix(SYSCONFDIR "/qemu/firmware",
                            abs_srcdir "/qemufirmwaredata/etc/qemu/firmware");
    virFileWrapperAddPrefix(PREFIX "/share/qemu/firmware",
                            abs_srcdir "/qemufirmwaredata/usr/share/qemu/firmware");
    virFileWrapperAddPrefix("/home/user/.config/qemu/firmware",
                            abs_srcdir "/qemufirmwaredata/home/user/.config/qemu/firmware");

161
    if (qemuTestDriverInit(&driver) < 0)
162
        return EXIT_FAILURE;
163

164 165
    cfg = virQEMUDriverGetConfig(&driver);

166
# define DO_TEST_INTERNAL(_name, suffix, when, ...) \
167
    do { \
168 169 170
        static struct testQemuInfo info = { \
            .name = _name, \
        }; \
171
        if (testQemuInfoSetArgs(&info, capslatest, \
172
                                __VA_ARGS__, \
173 174
                                ARG_END) < 0 || \
            qemuTestCapsCacheInsert(driver.qemuCapsCache, info.qemuCaps) < 0) { \
175
            VIR_TEST_DEBUG("Failed to generate test data for '%s'", _name); \
176 177 178
            return -1; \
        } \
 \
179
        if (when & WHEN_INACTIVE) { \
180
            if (testInfoSetPaths(&info, suffix, WHEN_INACTIVE) < 0) { \
181
                VIR_TEST_DEBUG("Failed to generate inactive paths for '%s'", _name); \
182 183
                return -1; \
            } \
184
            if (virTestRun("QEMU XML-2-XML-inactive " _name, \
185 186 187 188
                            testXML2XMLInactive, &info) < 0) \
                ret = -1; \
        } \
 \
189
        if (when & WHEN_ACTIVE) { \
190
            if (testInfoSetPaths(&info, suffix, WHEN_ACTIVE) < 0) { \
191
                VIR_TEST_DEBUG("Failed to generate active paths for '%s'", _name); \
192 193
                return -1; \
            } \
194
            if (virTestRun("QEMU XML-2-XML-active " _name, \
195 196 197
                            testXML2XMLActive, &info) < 0) \
                ret = -1; \
        } \
198
        testQemuInfoClear(&info); \
199 200
    } while (0)

201 202 203 204 205 206 207 208 209
# define DO_TEST_CAPS_INTERNAL(name, arch, ver, ...) \
    DO_TEST_INTERNAL(name, "." arch "-" ver, WHEN_BOTH, \
                     ARG_CAPS_ARCH, arch, \
                     ARG_CAPS_VER, ver, \
                     __VA_ARGS__)

# define DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, ...) \
    DO_TEST_CAPS_INTERNAL(name, arch, "latest", __VA_ARGS__)

210 211 212
# define DO_TEST_CAPS_ARCH_VER_FULL(name, arch, ver, ...) \
    DO_TEST_CAPS_INTERNAL(name, arch, ver, __VA_ARGS__)

213 214 215
# define DO_TEST_CAPS_ARCH_LATEST(name, arch) \
    DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, ARG_END)

216
# define DO_TEST_CAPS_ARCH_VER(name, arch, ver) \
217
    DO_TEST_CAPS_ARCH_VER_FULL(name, arch, ver, ARG_END)
218

219 220
# define DO_TEST_CAPS_LATEST(name) \
    DO_TEST_CAPS_ARCH_LATEST(name, "x86_64")
221

222 223 224 225 226 227 228 229 230 231 232
# define DO_TEST_CAPS_VER(name, ver) \
    DO_TEST_CAPS_ARCH_VER(name, "x86_64", ver)

# define DO_TEST_FULL(name, when, ...) \
    DO_TEST_INTERNAL(name, "", when, __VA_ARGS__)

# define DO_TEST(name, ...) \
    DO_TEST_FULL(name, WHEN_BOTH, \
                 ARG_QEMU_CAPS, __VA_ARGS__, QEMU_CAPS_LAST)

# define NONE QEMU_CAPS_LAST
233 234 235 236 237

    /* 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 */
    setenv("PATH", "/bin", 1);
238

239
    DO_TEST("minimal", NONE);
240 241
    DO_TEST_CAPS_LATEST("genid");
    DO_TEST_CAPS_LATEST("genid-auto");
242 243
    DO_TEST("machine-core-on", NONE);
    DO_TEST("machine-core-off", NONE);
244
    DO_TEST("machine-loadparm-multiple-disks-nets-s390", NONE);
245 246 247 248 249
    DO_TEST("default-kvm-host-arch", NONE);
    DO_TEST("default-qemu-host-arch", NONE);
    DO_TEST("boot-cdrom", NONE);
    DO_TEST("boot-network", NONE);
    DO_TEST("boot-floppy", NONE);
250 251 252
    DO_TEST("boot-floppy-q35",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI);
253
    DO_TEST("boot-multi", NONE);
254
    DO_TEST("boot-menu-enable-with-timeout", QEMU_CAPS_SPLASH_TIMEOUT);
255 256 257 258
    DO_TEST("boot-menu-disable", NONE);
    DO_TEST("boot-menu-disable-with-timeout", NONE);
    DO_TEST("boot-order", NONE);

259 260
    DO_TEST("reboot-timeout-enabled", QEMU_CAPS_REBOOT_TIMEOUT);
    DO_TEST("reboot-timeout-disabled", QEMU_CAPS_REBOOT_TIMEOUT);
261 262 263 264 265 266 267 268

    DO_TEST("clock-utc", NONE);
    DO_TEST("clock-localtime", NONE);
    DO_TEST("cpu-empty", NONE);
    DO_TEST("cpu-kvmclock", NONE);
    DO_TEST("cpu-host-kvmclock", NONE);
    DO_TEST("cpu-host-passthrough-features", NONE);
    DO_TEST("cpu-host-model-features", NONE);
269
    DO_TEST("clock-catchup", QEMU_CAPS_KVM_PIT_TICK_POLICY);
270 271 272 273 274 275 276 277 278 279 280 281 282
    DO_TEST("kvmclock", NONE);
    DO_TEST("clock-timer-hyperv-rtc", NONE);

    DO_TEST("cpu-eoi-disabled", NONE);
    DO_TEST("cpu-eoi-enabled", NONE);
    DO_TEST("eoi-disabled", NONE);
    DO_TEST("eoi-enabled", NONE);
    DO_TEST("pv-spinlock-disabled", NONE);
    DO_TEST("pv-spinlock-enabled", NONE);

    DO_TEST("hyperv", NONE);
    DO_TEST("hyperv-off", NONE);
    DO_TEST("hyperv-panic", NONE);
283
    DO_TEST("hyperv-stimer-direct", NONE);
284 285 286 287 288 289 290

    DO_TEST("kvm-features", NONE);
    DO_TEST("kvm-features-off", NONE);

    DO_TEST("pmu-feature", NONE);
    DO_TEST("pmu-feature-off", NONE);

291
    DO_TEST("pages-discard", NONE);
292
    DO_TEST("pages-discard-hugepages", QEMU_CAPS_OBJECT_MEMORY_FILE);
293
    DO_TEST("pages-dimm-discard", NONE);
294 295
    DO_TEST("hugepages-default", QEMU_CAPS_OBJECT_MEMORY_FILE);
    DO_TEST("hugepages-default-2M", QEMU_CAPS_OBJECT_MEMORY_FILE);
296
    DO_TEST("hugepages-default-system-size", NONE);
297 298 299 300 301 302 303 304 305 306
    DO_TEST("hugepages-nodeset", QEMU_CAPS_OBJECT_MEMORY_FILE);
    DO_TEST("hugepages-numa-default-2M", QEMU_CAPS_OBJECT_MEMORY_FILE);
    DO_TEST("hugepages-numa-default-dimm", QEMU_CAPS_OBJECT_MEMORY_FILE);
    DO_TEST("hugepages-numa-nodeset", QEMU_CAPS_OBJECT_MEMORY_FILE);
    DO_TEST("hugepages-numa-nodeset-part", QEMU_CAPS_OBJECT_MEMORY_FILE);
    DO_TEST("hugepages-shared", QEMU_CAPS_OBJECT_MEMORY_FILE);
    DO_TEST("hugepages-memaccess", QEMU_CAPS_OBJECT_MEMORY_FILE);
    DO_TEST("hugepages-memaccess2", QEMU_CAPS_OBJECT_MEMORY_FILE);
    DO_TEST("hugepages-nvdimm", QEMU_CAPS_DEVICE_NVDIMM,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
307 308 309 310 311 312
    DO_TEST("nosharepages", NONE);
    DO_TEST("restore-v2", NONE);
    DO_TEST("migrate", NONE);
    DO_TEST("qemu-ns-no-env", NONE);
    DO_TEST("disk-aio", NONE);
    DO_TEST("disk-cdrom", NONE);
313
    DO_TEST_CAPS_LATEST("disk-cdrom-empty-network-invalid");
314
    DO_TEST("disk-cdrom-bus-other", NONE);
315 316 317 318
    DO_TEST("disk-floppy", NONE);
    DO_TEST("disk-usb-device", NONE);
    DO_TEST("disk-virtio", NONE);
    DO_TEST("floppy-drive-fat", NONE);
319 320 321 322 323
    DO_TEST("disk-virtio-queues", QEMU_CAPS_VIRTIO_BLK_NUM_QUEUES);
    DO_TEST("disk-boot-disk", NONE);
    DO_TEST("disk-boot-cdrom", NONE);
    DO_TEST("disk-error-policy", NONE);
    DO_TEST("disk-fmt-qcow", NONE);
324
    DO_TEST("disk-cache", QEMU_CAPS_SCSI_LSI);
325
    DO_TEST("disk-network-nbd", NONE);
326
    DO_TEST("disk-network-iscsi", QEMU_CAPS_VIRTIO_SCSI);
327 328 329 330 331 332
    DO_TEST("disk-network-gluster", NONE);
    DO_TEST("disk-network-rbd", NONE);
    DO_TEST("disk-network-source-auth", NONE);
    DO_TEST("disk-network-sheepdog", NONE);
    DO_TEST("disk-network-vxhs", NONE);
    DO_TEST("disk-network-tlsx509", NONE);
333 334
    DO_TEST("disk-scsi", QEMU_CAPS_SCSI_LSI, QEMU_CAPS_SCSI_MEGASAS,
            QEMU_CAPS_SCSI_MPTSAS1068, QEMU_CAPS_SCSI_DISK_WWN);
335
    DO_TEST("disk-virtio-scsi-reservations",
336
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_PR_MANAGER_HELPER);
337
    DO_TEST("controller-virtio-scsi", QEMU_CAPS_VIRTIO_SCSI);
338 339 340
    DO_TEST("disk-virtio-s390-zpci",
            QEMU_CAPS_DEVICE_ZPCI,
            QEMU_CAPS_CCW);
341
    DO_TEST("disk-mirror-old", NONE);
342
    DO_TEST("disk-mirror", NONE);
343
    DO_TEST("disk-active-commit", NONE);
344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364
    DO_TEST("graphics-listen-network",
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_VNC);
    DO_TEST("graphics-vnc",
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_VNC);
    DO_TEST("graphics-vnc-websocket",
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_VNC);
    DO_TEST("graphics-vnc-sasl",
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_VNC);
    DO_TEST("graphics-vnc-tls",
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_VNC);
    DO_TEST("graphics-vnc-no-listen-attr",
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_VNC);
    DO_TEST("graphics-vnc-remove-generated-socket",
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_VNC);
365
    cfg->vncAutoUnixSocket = true;
366 367 368
    DO_TEST("graphics-vnc-auto-socket-cfg",
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_VNC);
369
    cfg->vncAutoUnixSocket = false;
370 371 372 373 374 375
    DO_TEST("graphics-vnc-socket",
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_VNC);
    DO_TEST("graphics-vnc-auto-socket",
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_VNC);
376
    DO_TEST("graphics-vnc-egl-headless",
377 378 379
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_EGL_HEADLESS,
            QEMU_CAPS_VNC);
380

381 382 383 384
    DO_TEST_CAPS_ARCH_LATEST("default-video-type-aarch64", "aarch64");
    DO_TEST_CAPS_ARCH_LATEST("default-video-type-ppc64", "ppc64");
    DO_TEST_CAPS_ARCH_LATEST("default-video-type-riscv64", "riscv64");
    DO_TEST_CAPS_ARCH_LATEST("default-video-type-s390x", "s390x");
385 386 387 388 389 390
    DO_TEST("default-video-type-x86_64-caps-test-0",
            QEMU_CAPS_DEVICE_VGA,
            QEMU_CAPS_SPICE);
    DO_TEST("default-video-type-x86_64-caps-test-1",
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_SPICE);
391

392 393
    DO_TEST("graphics-sdl", QEMU_CAPS_DEVICE_VGA);
    DO_TEST("graphics-sdl-fullscreen", QEMU_CAPS_DEVICE_CIRRUS_VGA);
394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413

    cfg->spiceTLS = true;
    DO_TEST("graphics-spice",
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
    DO_TEST("graphics-spice-compression",
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE);
    DO_TEST("graphics-spice-qxl-vga",
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE);
    DO_TEST("graphics-spice-socket",
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_SPICE,
            QEMU_CAPS_SPICE_UNIX);
    DO_TEST("graphics-spice-auto-socket",
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_SPICE,
            QEMU_CAPS_SPICE_UNIX);
414
    cfg->spiceAutoUnixSocket = true;
415 416 417
    DO_TEST("graphics-spice-auto-socket-cfg",
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_SPICE);
418
    cfg->spiceAutoUnixSocket = false;
419
    cfg->spiceTLS = false;
420
    DO_TEST("graphics-spice-egl-headless",
421
            QEMU_CAPS_DEVICE_QXL,
422 423
            QEMU_CAPS_EGL_HEADLESS,
            QEMU_CAPS_SPICE);
424

425
    DO_TEST("graphics-egl-headless-rendernode",
426
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
427
            QEMU_CAPS_EGL_HEADLESS,
428 429
            QEMU_CAPS_EGL_HEADLESS_RENDERNODE,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
430

431 432 433
    DO_TEST("input-usbmouse", NONE);
    DO_TEST("input-usbtablet", NONE);
    DO_TEST("misc-acpi", NONE);
434 435 436 437 438
    DO_TEST("misc-disable-s3", QEMU_CAPS_PIIX_DISABLE_S3);
    DO_TEST("misc-disable-suspends",
            QEMU_CAPS_PIIX_DISABLE_S3,
            QEMU_CAPS_PIIX_DISABLE_S4);
    DO_TEST("misc-enable-s4", QEMU_CAPS_PIIX_DISABLE_S4);
439 440 441 442
    DO_TEST("misc-no-reboot", NONE);
    DO_TEST("misc-uuid", NONE);
    DO_TEST("net-vhostuser", NONE);
    DO_TEST("net-user", NONE);
J
Ján Tomko 已提交
443
    DO_TEST("net-user-addr", NONE);
444 445 446 447 448 449
    DO_TEST("net-virtio", NONE);
    DO_TEST("net-virtio-device", NONE);
    DO_TEST("net-virtio-disable-offloads", NONE);
    DO_TEST("net-eth", NONE);
    DO_TEST("net-eth-ifname", NONE);
    DO_TEST("net-eth-hostip", NONE);
450
    DO_TEST("net-eth-unmanaged-tap", NONE);
451
    DO_TEST("net-virtio-network-portgroup", NONE);
452
    DO_TEST("net-virtio-rxtxqueuesize", NONE);
453
    DO_TEST("net-hostdev", NONE);
454
    DO_TEST("net-hostdev-bootorder", NONE);
455
    DO_TEST("net-hostdev-vfio", QEMU_CAPS_DEVICE_VFIO_PCI);
456 457 458
    DO_TEST("net-midonet", NONE);
    DO_TEST("net-openvswitch", NONE);
    DO_TEST("sound", NONE);
459 460
    DO_TEST("sound-device",
            QEMU_CAPS_DEVICE_ICH9_INTEL_HDA,
461 462 463 464
            QEMU_CAPS_OBJECT_USB_AUDIO,
            QEMU_CAPS_HDA_MICRO,
            QEMU_CAPS_HDA_DUPLEX,
            QEMU_CAPS_HDA_OUTPUT);
465
    DO_TEST("watchdog", NONE);
466 467
    DO_TEST("net-bandwidth", QEMU_CAPS_DEVICE_VGA, QEMU_CAPS_VNC);
    DO_TEST("net-bandwidth2", QEMU_CAPS_DEVICE_VGA, QEMU_CAPS_VNC);
468
    DO_TEST("net-mtu", NONE);
469
    DO_TEST("net-coalesce", NONE);
470
    DO_TEST("net-many-models", NONE);
471

472
    DO_TEST("serial-tcp-tlsx509-chardev", NONE);
473
    DO_TEST("serial-tcp-tlsx509-chardev-notls", NONE);
474 475 476 477 478 479 480

    cfg->spiceTLS = true;
    DO_TEST("serial-spiceport",
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_SPICE);
    cfg->spiceTLS = false;

481 482 483 484 485 486 487 488
    DO_TEST("serial-spiceport-nospice", NONE);
    DO_TEST("console-compat", NONE);
    DO_TEST("console-compat2", NONE);
    DO_TEST("console-virtio-many", NONE);
    DO_TEST("channel-guestfwd", NONE);
    DO_TEST("channel-virtio", NONE);
    DO_TEST("channel-virtio-state", NONE);

489
    DO_TEST("channel-unix-source-path", NONE);
490

491 492
    DO_TEST("hostdev-usb-address", NONE);
    DO_TEST("hostdev-pci-address", NONE);
493 494
    DO_TEST("hostdev-pci-multifunction", QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST("hostdev-vfio", QEMU_CAPS_DEVICE_VFIO_PCI);
495
    DO_TEST("hostdev-vfio-zpci",
496
            QEMU_CAPS_DEVICE_VFIO_PCI,
497 498
            QEMU_CAPS_DEVICE_ZPCI,
            QEMU_CAPS_CCW);
499 500 501 502 503 504 505 506 507 508 509
    DO_TEST("hostdev-vfio-zpci-multidomain-many",
            QEMU_CAPS_DEVICE_VFIO_PCI,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_ZPCI);
    DO_TEST("hostdev-vfio-zpci-autogenerate",
            QEMU_CAPS_DEVICE_VFIO_PCI,
            QEMU_CAPS_DEVICE_ZPCI);
    DO_TEST("hostdev-vfio-zpci-boundaries",
            QEMU_CAPS_DEVICE_VFIO_PCI,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_ZPCI);
510
    DO_TEST("hostdev-mdev-precreated", QEMU_CAPS_DEVICE_VFIO_PCI);
511 512
    DO_TEST("hostdev-mdev-display",
            QEMU_CAPS_DEVICE_QXL,
513
            QEMU_CAPS_VFIO_PCI_DISPLAY,
514 515
            QEMU_CAPS_DEVICE_VFIO_PCI,
            QEMU_CAPS_VNC);
516
    DO_TEST("pci-rom", NONE);
517
    DO_TEST("pci-rom-disabled", NONE);
518
    DO_TEST("pci-rom-disabled-invalid", NONE);
519 520
    DO_TEST("pci-serial-dev-chardev", NONE);

521 522
    DO_TEST("encrypted-disk", QEMU_CAPS_QCOW2_LUKS);
    DO_TEST("encrypted-disk-usage", QEMU_CAPS_QCOW2_LUKS);
523
    DO_TEST("luks-disks", NONE);
524
    DO_TEST("luks-disks-source", NONE);
525 526 527 528 529 530 531 532 533
    DO_TEST("memtune", NONE);
    DO_TEST("memtune-unlimited", NONE);
    DO_TEST("blkiotune", NONE);
    DO_TEST("blkiotune-device", NONE);
    DO_TEST("cputune", NONE);
    DO_TEST("cputune-zero-shares", NONE);
    DO_TEST("cputune-iothreadsched", NONE);
    DO_TEST("cputune-iothreadsched-zeropriority", NONE);
    DO_TEST("cputune-numatune", NONE);
534
    DO_TEST("vcpu-placement-static",
535 536
            QEMU_CAPS_KVM,
            QEMU_CAPS_OBJECT_IOTHREAD);
537

538 539 540 541 542 543
    DO_TEST("smp", NONE);
    DO_TEST("iothreads", NONE);
    DO_TEST("iothreads-ids", NONE);
    DO_TEST("iothreads-ids-partial", NONE);
    DO_TEST("cputune-iothreads", NONE);
    DO_TEST("iothreads-disk", NONE);
544
    DO_TEST("iothreads-disk-virtio-ccw",
545
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
546
    DO_TEST("iothreads-virtio-scsi-pci",
547
            QEMU_CAPS_VIRTIO_SCSI);
548
    DO_TEST("iothreads-virtio-scsi-ccw",
549
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_CCW,
550
            QEMU_CAPS_VIRTIO_S390);
551 552 553 554
    DO_TEST("lease", NONE);
    DO_TEST("event_idx", NONE);
    DO_TEST("vhost_queues", NONE);
    DO_TEST("interface-driver", NONE);
555
    DO_TEST("interface-server", QEMU_CAPS_DEVICE_CIRRUS_VGA,
556 557
            QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_PIIX_DISABLE_S3,
558 559
            QEMU_CAPS_PIIX_DISABLE_S4,
            QEMU_CAPS_VNC);
560 561
    DO_TEST("virtio-lun", NONE);

562 563 564 565 566
    DO_TEST("usb-none", NONE);
    DO_TEST("usb-controller", NONE);
    DO_TEST("usb-piix3-controller",
            QEMU_CAPS_PIIX3_USB_UHCI);
    DO_TEST("usb-controller-default-q35",
567
            QEMU_CAPS_DEVICE_IOH3420,
568 569
            QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_PIIX3_USB_UHCI,
570 571
            QEMU_CAPS_NEC_USB_XHCI);
    DO_TEST("usb-controller-explicit-q35",
572
            QEMU_CAPS_DEVICE_IOH3420,
573 574
            QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_PIIX3_USB_UHCI,
575 576
            QEMU_CAPS_NEC_USB_XHCI);
    DO_TEST("ppc64-usb-controller",
577
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
578 579
            QEMU_CAPS_PCI_OHCI);
    DO_TEST("ppc64-usb-controller-legacy",
580
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
581
            QEMU_CAPS_PIIX3_USB_UHCI);
582
    DO_TEST("usb-port-missing", QEMU_CAPS_USB_HUB);
583 584 585 586
    DO_TEST("usb-redir", NONE);
    DO_TEST("usb-redir-filter", NONE);
    DO_TEST("usb-redir-filter-version", NONE);
    DO_TEST("blkdeviotune", NONE);
587
    DO_TEST("blkdeviotune-max", NONE);
588
    DO_TEST("blkdeviotune-group-num", NONE);
589
    DO_TEST("blkdeviotune-max-length", NONE);
590 591 592
    DO_TEST("controller-usb-order",
            QEMU_CAPS_PIIX_DISABLE_S3,
            QEMU_CAPS_PIIX_DISABLE_S4);
593

594 595 596 597 598 599 600 601
    DO_TEST_FULL("seclabel-dynamic-baselabel", WHEN_INACTIVE,
                 ARG_QEMU_CAPS, NONE);
    DO_TEST_FULL("seclabel-dynamic-override", WHEN_INACTIVE,
                 ARG_QEMU_CAPS, NONE);
    DO_TEST_FULL("seclabel-dynamic-labelskip", WHEN_INACTIVE,
                 ARG_QEMU_CAPS, NONE);
    DO_TEST_FULL("seclabel-dynamic-relabel", WHEN_INACTIVE,
                 ARG_QEMU_CAPS, NONE);
602
    DO_TEST("seclabel-static", NONE);
603
    DO_TEST("seclabel-static-labelskip", NONE);
604 605 606 607
    DO_TEST("seclabel-none", NONE);
    DO_TEST("seclabel-dac-none", NONE);
    DO_TEST("seclabel-dynamic-none", NONE);
    DO_TEST("seclabel-device-multiple", NONE);
608
    DO_TEST_FULL("seclabel-dynamic-none-relabel", WHEN_INACTIVE,
609
                 ARG_QEMU_CAPS, QEMU_CAPS_DEVICE_CIRRUS_VGA,
610 611
                 QEMU_CAPS_OBJECT_MEMORY_FILE,
                 QEMU_CAPS_SPICE, NONE);
612
    DO_TEST("numad-static-vcpu-no-numatune", NONE);
613

614
    DO_TEST("disk-scsi-lun-passthrough-sgio",
615
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_DISK_WWN);
616
    DO_TEST("disk-scsi-disk-vpd",
617
            QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_DISK_WWN);
618 619
    DO_TEST("disk-source-pool", NONE);
    DO_TEST("disk-source-pool-mode", NONE);
620

621 622
    DO_TEST("disk-discard", NONE);
    DO_TEST("disk-detect-zeroes", NONE);
O
Osier Yang 已提交
623

624 625
    DO_TEST("disk-serial", NONE);

626 627 628 629
    DO_TEST("virtio-rng-random",
            QEMU_CAPS_DEVICE_VIRTIO_RNG);
    DO_TEST("virtio-rng-egd",
            QEMU_CAPS_DEVICE_VIRTIO_RNG);
630

631
    DO_TEST("pseries-nvram",
632 633
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_DEVICE_NVRAM);
634 635 636 637
    DO_TEST("pseries-panic-missing",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
    DO_TEST("pseries-panic-no-address",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
638

639 640 641 642
    DO_TEST("pseries-phb-simple",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
    DO_TEST("pseries-phb-default-missing",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
643 644 645
    DO_TEST("pseries-phb-numa-node",
            QEMU_CAPS_NUMA,
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
646 647
            QEMU_CAPS_SPAPR_PCI_HOST_BRIDGE_NUMA_NODE,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
648

649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670
    DO_TEST("pseries-many-devices",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST("pseries-many-buses-1",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST("pseries-many-buses-2",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST("pseries-hostdevs-1",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST("pseries-hostdevs-2",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VFIO_PCI);
    DO_TEST("pseries-hostdevs-3",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VFIO_PCI);

671
    DO_TEST("pseries-features",
672
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
673
            QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE,
674
            QEMU_CAPS_MACHINE_PSERIES_CAP_HTM,
675
            QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV,
676
            QEMU_CAPS_MACHINE_PSERIES_CAP_CCF_ASSIST,
677 678
            QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);

679
    DO_TEST("pseries-serial-native",
680
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
681 682
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial+console-native",
683
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
684 685
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial-compat",
686
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
687
            QEMU_CAPS_DEVICE_SPAPR_VTY);
688
    DO_TEST("pseries-serial-pci",
689
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
690 691
            QEMU_CAPS_DEVICE_PCI_SERIAL);
    DO_TEST("pseries-serial-usb",
692
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
693 694
            QEMU_CAPS_DEVICE_QEMU_XHCI,
            QEMU_CAPS_DEVICE_USB_SERIAL);
695
    DO_TEST("pseries-console-native",
696
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
697 698
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-console-virtio",
699 700 701 702 703
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);

    DO_TEST("mach-virt-serial-native", NONE);
    DO_TEST("mach-virt-serial+console-native", NONE);
    DO_TEST("mach-virt-serial-compat", NONE);
704 705 706 707 708 709 710 711 712 713 714
    DO_TEST("mach-virt-serial-pci",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_SERIAL);
    DO_TEST("mach-virt-serial-usb",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT,
            QEMU_CAPS_DEVICE_QEMU_XHCI,
            QEMU_CAPS_DEVICE_USB_SERIAL);
715 716 717 718
    DO_TEST("mach-virt-console-native",
            QEMU_CAPS_DEVICE_PL011);
    DO_TEST("mach-virt-console-virtio",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
719

720 721 722 723
    DO_TEST("balloon-device-auto", NONE);
    DO_TEST("balloon-device-period", NONE);
    DO_TEST("channel-virtio-auto", NONE);
    DO_TEST("console-compat-auto", NONE);
724
    DO_TEST("disk-scsi-device-auto",
725
            QEMU_CAPS_SCSI_LSI);
726 727
    DO_TEST("console-virtio", NONE);
    DO_TEST("serial-target-port-auto", NONE);
728 729 730
    DO_TEST("graphics-listen-network2",
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
            QEMU_CAPS_VNC);
731 732 733
    DO_TEST("graphics-spice-timeout",
            QEMU_CAPS_DEVICE_VGA,
            QEMU_CAPS_SPICE);
734 735 736 737 738
    DO_TEST("numad-auto-vcpu-no-numatune", NONE);
    DO_TEST("numad-auto-memory-vcpu-no-cpuset-and-placement", NONE);
    DO_TEST("numad-auto-memory-vcpu-cpuset", NONE);
    DO_TEST("usb-ich9-ehci-addr", NONE);
    DO_TEST("disk-copy_on_read", NONE);
739 740 741 742 743
    DO_TEST_CAPS_LATEST("tpm-passthrough");
    DO_TEST_CAPS_LATEST("tpm-passthrough-crb");
    DO_TEST_CAPS_LATEST("tpm-emulator");
    DO_TEST_CAPS_LATEST("tpm-emulator-tpm2");
    DO_TEST_CAPS_LATEST("tpm-emulator-tpm2-enc");
744 745 746

    DO_TEST("metadata", NONE);
    DO_TEST("metadata-duplicate", NONE);
747

748
    DO_TEST("pci-bridge",
749 750 751 752 753
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("pci-many",
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
754 755 756
    DO_TEST("pci-bridge-many-disks",
            QEMU_CAPS_DEVICE_PCI_BRIDGE);
    DO_TEST("pci-autoadd-addr",
757 758
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
759
    DO_TEST("pci-autoadd-idx",
760 761
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
762
    DO_TEST("pci-autofill-addr", QEMU_CAPS_DEVICE_CIRRUS_VGA);
763

764
    DO_TEST("q35",
765 766
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
767
            QEMU_CAPS_DEVICE_IOH3420,
768 769 770
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
771
            QEMU_CAPS_DEVICE_QXL);
772 773 774
    DO_TEST("q35-usb2",
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
775
            QEMU_CAPS_DEVICE_IOH3420,
776
            QEMU_CAPS_ICH9_AHCI,
777
            QEMU_CAPS_ICH9_USB_EHCI1,
778
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
779
            QEMU_CAPS_DEVICE_QXL);
780
    DO_TEST("q35-usb2-multi",
781 782
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
783
            QEMU_CAPS_DEVICE_IOH3420,
784 785 786
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
787
            QEMU_CAPS_DEVICE_QXL);
788
    DO_TEST("q35-usb2-reorder",
789 790
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
791
            QEMU_CAPS_DEVICE_IOH3420,
792 793 794
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
795
            QEMU_CAPS_DEVICE_QXL);
796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812
    DO_TEST("q35-pcie",
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_ICH9_USB_EHCI1,
813
            QEMU_CAPS_NEC_USB_XHCI,
814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
    /* same XML as q35-pcie, but don't set
       QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY */
    DO_TEST("q35-virtio-pci",
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_ICH9_USB_EHCI1,
833
            QEMU_CAPS_NEC_USB_XHCI,
834
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
835 836 837 838 839 840 841 842 843
    /* same as q35-pcie, but all PCI controllers are added automatically */
    DO_TEST("q35-pcie-autoadd",
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862
            QEMU_CAPS_VIRTIO_MOUSE,
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
    DO_TEST("q35-default-devices-only",
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
863 864 865 866 867 868 869 870 871 872
            QEMU_CAPS_VIRTIO_MOUSE,
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_NEC_USB_XHCI,
873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
    DO_TEST("q35-multifunction",
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_NEC_USB_XHCI,
892
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
893
    DO_TEST("q35-virt-manager-basic",
894 895 896
            QEMU_CAPS_KVM,
            QEMU_CAPS_ICH9_DISABLE_S3,
            QEMU_CAPS_ICH9_DISABLE_S4,
897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_DEVICE_VIRTIO_NET,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_NEC_USB_XHCI,
            QEMU_CAPS_DEVICE_ICH9_INTEL_HDA,
915 916 917 918
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_SPICE,
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_HDA_DUPLEX,
919 920
            QEMU_CAPS_USB_REDIR,
            QEMU_CAPS_MACHINE_VMPORT_OPT);
921
    DO_TEST("pcie-root",
922 923
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
924
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
925
            QEMU_CAPS_DEVICE_QXL);
926 927

    /* Test automatic and manual setting of pcie-root-port attributes */
928
    DO_TEST("pcie-root-port",
929 930
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
931
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
932
            QEMU_CAPS_DEVICE_QXL);
933 934 935 936 937 938

    /* Make sure the default model for PCIe Root Ports is picked correctly
     * based on QEMU binary capabilities. We use x86/q35 for the test, but
     * any PCIe machine type (such as aarch64/virt) will behave the same */
    DO_TEST("pcie-root-port-model-generic",
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT,
939
            QEMU_CAPS_DEVICE_IOH3420);
940
    DO_TEST("pcie-root-port-model-ioh3420",
941
            QEMU_CAPS_DEVICE_IOH3420);
942

943
    DO_TEST("pcie-switch-upstream-port",
944 945 946
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_ICH9_AHCI,
947
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
948
            QEMU_CAPS_DEVICE_QXL);
949
    DO_TEST("pcie-switch-downstream-port",
950 951 952 953
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
            QEMU_CAPS_ICH9_AHCI,
954
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
955
            QEMU_CAPS_DEVICE_QXL);
956
    DO_TEST("pci-expander-bus",
957
            QEMU_CAPS_DEVICE_PXB);
958
    DO_TEST("pcie-expander-bus",
959 960 961 962
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
            QEMU_CAPS_DEVICE_PXB_PCIE);
963
    DO_TEST("autoindex",
964 965 966 967 968 969 970
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_ICH9_USB_EHCI1,
971
            QEMU_CAPS_NEC_USB_XHCI);
972 973 974 975 976 977 978
    /* Make sure the user can always override libvirt's default device
     * placement policy by providing an explicit PCI address */
    DO_TEST("q35-pci-force-address",
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_HDA_DUPLEX);
979

980 981
    DO_TEST("hostdev-scsi-vhost-scsi-ccw",
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_VHOST_SCSI,
982
            QEMU_CAPS_CCW);
983
    DO_TEST("hostdev-scsi-vhost-scsi-pci",
984 985
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VHOST_SCSI);
986 987 988 989 990
    DO_TEST("hostdev-scsi-vhost-scsi-pcie",
            QEMU_CAPS_KVM,
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_VHOST_SCSI,
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT,
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY);
991
    DO_TEST("hostdev-scsi-lsi",
992 993
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
994
    DO_TEST("hostdev-scsi-virtio-scsi",
995 996
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
997
    DO_TEST("hostdev-scsi-readonly",
998 999
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
1000 1001

    DO_TEST("hostdev-scsi-shareable",
1002 1003
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
1004
    DO_TEST("hostdev-scsi-sgio",
1005 1006
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
1007
    DO_TEST("hostdev-scsi-rawio",
1008 1009
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
1010 1011

    DO_TEST("hostdev-scsi-autogen-address",
1012 1013
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
1014
    DO_TEST("hostdev-scsi-large-unit",
1015 1016
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
1017 1018

    DO_TEST("hostdev-scsi-lsi-iscsi",
1019 1020
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
1021
    DO_TEST("hostdev-scsi-lsi-iscsi-auth",
1022 1023
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
1024
    DO_TEST("hostdev-scsi-virtio-iscsi",
1025 1026
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
1027
    DO_TEST("hostdev-scsi-virtio-iscsi-auth",
1028 1029
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
1030

1031 1032 1033 1034
    DO_TEST("hostdev-subsys-mdev-vfio-ccw",
            QEMU_CAPS_CCW,
            QEMU_CAPS_CCW_CSSID_UNRESTRICTED,
            QEMU_CAPS_DEVICE_VFIO_CCW);
1035 1036
    DO_TEST_CAPS_ARCH_LATEST("hostdev-subsys-mdev-vfio-ccw-boot",
                             "s390x");
B
Boris Fiuczynski 已提交
1037 1038 1039 1040
    DO_TEST("hostdev-subsys-mdev-vfio-ap",
            QEMU_CAPS_CCW,
            QEMU_CAPS_CCW_CSSID_UNRESTRICTED,
            QEMU_CAPS_DEVICE_VFIO_AP);
1041

1042
    DO_TEST("s390-defaultconsole",
1043
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1044
    DO_TEST("s390-panic",
1045
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1046
    DO_TEST("s390-panic-missing",
1047
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1048
    DO_TEST("s390-panic-no-address",
1049
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1050
    DO_TEST("s390-serial",
1051
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1052
    DO_TEST("s390-serial-2",
1053
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1054
    DO_TEST("s390-serial-console",
1055
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
1056

1057 1058 1059
    DO_TEST("pcihole64", QEMU_CAPS_I440FX_PCI_HOLE64_SIZE);
    DO_TEST("pcihole64-gib", QEMU_CAPS_I440FX_PCI_HOLE64_SIZE);
    DO_TEST("pcihole64-none", QEMU_CAPS_I440FX_PCI_HOLE64_SIZE);
1060
    DO_TEST("pcihole64-q35",
1061
            QEMU_CAPS_DEVICE_IOH3420,
1062 1063
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1064
            QEMU_CAPS_DEVICE_QXL,
1065
            QEMU_CAPS_Q35_PCI_HOLE64_SIZE);
1066

1067 1068
    DO_TEST("panic", NONE);
    DO_TEST("panic-isa", NONE);
1069 1070
    DO_TEST("panic-pseries",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
1071 1072
    DO_TEST("panic-double", NONE);
    DO_TEST("panic-no-address", NONE);
H
Hu Tao 已提交
1073

1074
    DO_TEST("disk-backing-chains", NONE);
1075 1076
    DO_TEST("disk-backing-chains-index", NONE);
    DO_TEST("disk-backing-chains-noindex", NONE);
1077

1078 1079
    DO_TEST("chardev-label",
            QEMU_CAPS_DEVICE_VIRTIO_RNG);
J
Ján Tomko 已提交
1080

1081 1082 1083 1084
    DO_TEST("cpu-numa1", NONE);
    DO_TEST("cpu-numa2", NONE);
    DO_TEST("cpu-numa-no-memory-element", NONE);
    DO_TEST("cpu-numa-disordered", NONE);
1085 1086
    DO_TEST("cpu-numa-disjoint", QEMU_CAPS_NUMA);
    DO_TEST("cpu-numa-memshared", QEMU_CAPS_OBJECT_MEMORY_FILE);
1087

1088
    DO_TEST("numatune-auto-prefer", NONE);
1089 1090
    DO_TEST("numatune-memnode", QEMU_CAPS_NUMA, QEMU_CAPS_OBJECT_MEMORY_FILE);
    DO_TEST("numatune-memnode-no-memory", QEMU_CAPS_OBJECT_MEMORY_FILE);
1091

1092 1093
    DO_TEST("bios-nvram", NONE);
    DO_TEST("bios-nvram-os-interleave", NONE);
1094

1095 1096 1097
    DO_TEST("tap-vhost", NONE);
    DO_TEST("tap-vhost-incorrect", NONE);
    DO_TEST("shmem", NONE);
1098
    DO_TEST("shmem-plain-doorbell", NONE);
1099 1100
    DO_TEST("smbios", NONE);
    DO_TEST("smbios-multiple-type2", NONE);
1101

1102 1103 1104
    DO_TEST_CAPS_LATEST("os-firmware-bios");
    DO_TEST_CAPS_LATEST("os-firmware-efi");
    DO_TEST_CAPS_LATEST("os-firmware-efi-secboot");
1105

1106
    DO_TEST("aarch64-aavmf-virtio-mmio",
1107 1108
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
1109
    DO_TEST_CAPS_ARCH_LATEST("aarch64-os-firmware-efi", "aarch64");
1110
    DO_TEST("aarch64-virtio-pci-default",
1111
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
1112 1113 1114
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
1115 1116 1117
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_VIRTIO_SCSI);
1118
    DO_TEST("aarch64-virtio-pci-manual-addresses",
1119 1120 1121
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
1122 1123 1124
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_VIRTIO_SCSI);
1125
    DO_TEST("aarch64-video-virtio-gpu-pci",
1126
            QEMU_CAPS_OBJECT_GPEX,
1127
            QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_IOH3420,
1128
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1129
            QEMU_CAPS_DEVICE_VIRTIO_GPU);
1130 1131 1132 1133 1134 1135 1136
    DO_TEST("aarch64-pci-serial",
            QEMU_CAPS_DEVICE_PCI_SERIAL,
            QEMU_CAPS_CHARDEV_LOGFILE,
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT);
1137 1138 1139 1140
    DO_TEST("aarch64-traditional-pci",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
1141
            QEMU_CAPS_DEVICE_PCIE_PCI_BRIDGE,
1142 1143
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_SERIAL);
1144 1145 1146 1147 1148 1149 1150 1151
    DO_TEST("aarch64-video-default",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_VNC);
1152

1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215
    DO_TEST_FULL("aarch64-gic-none", WHEN_BOTH,
                 ARG_GIC, GIC_NONE,
                 ARG_QEMU_CAPS, NONE);
    DO_TEST_FULL("aarch64-gic-none-v2", WHEN_BOTH,
                 ARG_GIC, GIC_V2,
                 ARG_QEMU_CAPS, NONE);
    DO_TEST_FULL("aarch64-gic-none-v3", WHEN_BOTH,
                 ARG_GIC, GIC_V3,
                 ARG_QEMU_CAPS, NONE);
    DO_TEST_FULL("aarch64-gic-none-both", WHEN_BOTH,
                 ARG_GIC, GIC_BOTH,
                 ARG_QEMU_CAPS, NONE);
    DO_TEST_FULL("aarch64-gic-none-tcg", WHEN_BOTH,
                 ARG_GIC, GIC_BOTH,
                 ARG_QEMU_CAPS, NONE);
    DO_TEST_FULL("aarch64-gic-default", WHEN_BOTH,
                 ARG_GIC, GIC_NONE,
                 ARG_QEMU_CAPS, NONE);
    DO_TEST_FULL("aarch64-gic-default-v2", WHEN_BOTH,
                 ARG_GIC, GIC_V2,
                 ARG_QEMU_CAPS, NONE);
    DO_TEST_FULL("aarch64-gic-default-v3", WHEN_BOTH,
                 ARG_GIC, GIC_V3,
                 ARG_QEMU_CAPS, NONE);
    DO_TEST_FULL("aarch64-gic-default-both", WHEN_BOTH,
                 ARG_GIC, GIC_BOTH,
                 ARG_QEMU_CAPS, NONE);
    DO_TEST_FULL("aarch64-gic-v2", WHEN_BOTH,
                 ARG_GIC, GIC_NONE,
                 ARG_QEMU_CAPS, NONE);
    DO_TEST_FULL("aarch64-gic-v2", WHEN_BOTH,
                 ARG_GIC, GIC_V2,
                 ARG_QEMU_CAPS, NONE);
    DO_TEST_FULL("aarch64-gic-v2", WHEN_BOTH,
                 ARG_GIC, GIC_V3,
                 ARG_QEMU_CAPS, NONE);
    DO_TEST_FULL("aarch64-gic-v2", WHEN_BOTH,
                 ARG_GIC, GIC_BOTH,
                 ARG_QEMU_CAPS, NONE);
    DO_TEST_FULL("aarch64-gic-v3", WHEN_BOTH,
                 ARG_GIC, GIC_NONE,
                 ARG_QEMU_CAPS, NONE);
    DO_TEST_FULL("aarch64-gic-v3", WHEN_BOTH,
                 ARG_GIC, GIC_V2,
                 ARG_QEMU_CAPS, NONE);
    DO_TEST_FULL("aarch64-gic-v3", WHEN_BOTH,
                 ARG_GIC, GIC_V3,
                 ARG_QEMU_CAPS, NONE);
    DO_TEST_FULL("aarch64-gic-v3", WHEN_BOTH,
                 ARG_GIC, GIC_BOTH,
                 ARG_QEMU_CAPS, NONE);
    DO_TEST_FULL("aarch64-gic-host", WHEN_BOTH,
                 ARG_GIC, GIC_NONE,
                 ARG_QEMU_CAPS, NONE);
    DO_TEST_FULL("aarch64-gic-host", WHEN_BOTH,
                 ARG_GIC, GIC_V2,
                 ARG_QEMU_CAPS, NONE);
    DO_TEST_FULL("aarch64-gic-host", WHEN_BOTH,
                 ARG_GIC, GIC_V3,
                 ARG_QEMU_CAPS, NONE);
    DO_TEST_FULL("aarch64-gic-host", WHEN_BOTH,
                 ARG_GIC, GIC_BOTH,
                 ARG_QEMU_CAPS, NONE);
1216

1217 1218 1219
    /* SVE aarch64 CPU features work on modern QEMU */
    DO_TEST_CAPS_ARCH_LATEST("aarch64-features-sve", "aarch64");

1220 1221 1222
    DO_TEST("memory-hotplug", NONE);
    DO_TEST("memory-hotplug-nonuma", NONE);
    DO_TEST("memory-hotplug-dimm", NONE);
M
Michal Privoznik 已提交
1223
    DO_TEST("memory-hotplug-nvdimm", NONE);
1224
    DO_TEST("memory-hotplug-nvdimm-access", NONE);
1225
    DO_TEST("memory-hotplug-nvdimm-label", NONE);
1226
    DO_TEST("memory-hotplug-nvdimm-align", NONE);
1227
    DO_TEST("memory-hotplug-nvdimm-pmem", NONE);
1228
    DO_TEST("memory-hotplug-nvdimm-readonly", NONE);
1229
    DO_TEST("net-udp", NONE);
1230

1231 1232 1233 1234 1235 1236
    DO_TEST("video-virtio-gpu-device", QEMU_CAPS_DEVICE_VIRTIO_GPU);
    DO_TEST("video-virtio-gpu-virgl",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL);
    DO_TEST("video-virtio-gpu-spice-gl",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
1237 1238 1239 1240 1241
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_SPICE,
            QEMU_CAPS_SPICE_FILE_XFER_DISABLE,
            QEMU_CAPS_SPICE_GL,
            QEMU_CAPS_SPICE_RENDERNODE);
1242 1243
    DO_TEST("video-virtio-gpu-sdl-gl",
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
1244 1245
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_SDL_GL);
1246 1247 1248 1249 1250 1251 1252

    DO_TEST("virtio-input",
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
            QEMU_CAPS_VIRTIO_TABLET);
    DO_TEST("virtio-input-passthrough",
            QEMU_CAPS_VIRTIO_INPUT_HOST);
M
Marc-André Lureau 已提交
1253

1254 1255
    DO_TEST("memorybacking-set", NONE);
    DO_TEST("memorybacking-unset", NONE);
1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268

    DO_TEST("virtio-options",
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_VIRTIO_INPUT_HOST,
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_VIRTIO_GPU_VIRGL,
            QEMU_CAPS_DEVICE_VIRTIO_RNG,
            QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_PCI_IOMMU_PLATFORM,
1269 1270
            QEMU_CAPS_VIRTIO_PCI_ATS,
            QEMU_CAPS_DEVICE_VHOST_USER_GPU);
1271

1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283
    DO_TEST("fd-memory-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_KVM);
    DO_TEST("fd-memory-numa-topology2", QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_KVM);
    DO_TEST("fd-memory-numa-topology3", QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_KVM);

    DO_TEST("fd-memory-no-numa-topology", QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_KVM);

    DO_TEST("memfd-memory-numa",
            QEMU_CAPS_OBJECT_MEMORY_MEMFD,
1284 1285
            QEMU_CAPS_OBJECT_MEMORY_MEMFD_HUGETLB,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1286 1287
    DO_TEST("memfd-memory-default-hugepage",
            QEMU_CAPS_OBJECT_MEMORY_MEMFD,
1288 1289
            QEMU_CAPS_OBJECT_MEMORY_MEMFD_HUGETLB,
            QEMU_CAPS_OBJECT_MEMORY_FILE);
1290

1291
    DO_TEST("acpi-table", NONE);
J
Ján Tomko 已提交
1292

1293 1294 1295 1296 1297
    DO_TEST("video-device-pciaddr-default",
            QEMU_CAPS_KVM,
            QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL);
1298 1299 1300 1301
    DO_TEST("video-qxl-heads", QEMU_CAPS_DEVICE_QXL);
    DO_TEST("video-qxl-noheads", QEMU_CAPS_DEVICE_QXL);
    DO_TEST("video-qxl-resolution", QEMU_CAPS_DEVICE_QXL);
    DO_TEST("video-virtio-gpu-secondary", QEMU_CAPS_DEVICE_VIRTIO_GPU);
1302
    DO_TEST("video-virtio-gpu-ccw",
1303
            QEMU_CAPS_CCW,
1304 1305 1306 1307 1308
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_GPU_MAX_OUTPUTS,
            QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_VIRTIO_GPU_CCW);
1309
    DO_TEST("video-virtio-gpu-ccw-auto",
1310
            QEMU_CAPS_CCW,
1311 1312 1313 1314 1315
            QEMU_CAPS_DEVICE_VIRTIO_GPU,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_VIRTIO_GPU_MAX_OUTPUTS,
            QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_VIRTIO_GPU_CCW);
1316
    DO_TEST("video-none-device", QEMU_CAPS_VNC);
1317

1318 1319 1320 1321 1322
    DO_TEST_CAPS_LATEST("intel-iommu");
    DO_TEST_CAPS_VER("intel-iommu", "2.6.0");
    DO_TEST_CAPS_LATEST("intel-iommu-caching-mode");
    DO_TEST_CAPS_LATEST("intel-iommu-eim");
    DO_TEST_CAPS_LATEST("intel-iommu-device-iotlb");
1323
    DO_TEST_CAPS_ARCH_LATEST("iommu-smmuv3", "aarch64");
J
Ján Tomko 已提交
1324

1325 1326 1327 1328 1329 1330 1331
    DO_TEST("cpu-check-none", NONE);
    DO_TEST("cpu-check-partial", NONE);
    DO_TEST("cpu-check-full", NONE);
    DO_TEST("cpu-check-default-none", NONE);
    DO_TEST("cpu-check-default-none2", NONE);
    DO_TEST("cpu-check-default-partial", NONE);
    DO_TEST("cpu-check-default-partial2", NONE);
M
Marc-André Lureau 已提交
1332
    DO_TEST("vmcoreinfo", NONE);
1333

1334 1335
    DO_TEST("smartcard-host", NONE);
    DO_TEST("smartcard-host-certificates", NONE);
1336
    DO_TEST("smartcard-host-certificates-database", NONE);
1337 1338 1339 1340
    DO_TEST("smartcard-passthrough-tcp", NONE);
    DO_TEST("smartcard-passthrough-spicevmc", NONE);
    DO_TEST("smartcard-controller", NONE);

1341 1342 1343 1344 1345 1346
    DO_TEST("pseries-cpu-compat-power9",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
    DO_TEST("pseries-cpu-compat",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
    DO_TEST("pseries-cpu-exact",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
1347

1348 1349
    DO_TEST("user-aliases",
            QEMU_CAPS_DEVICE_CIRRUS_VGA,
1350
            QEMU_CAPS_QCOW2_LUKS,
1351 1352
            QEMU_CAPS_OBJECT_MEMORY_FILE,
            QEMU_CAPS_PIIX_DISABLE_S3,
1353 1354
            QEMU_CAPS_PIIX_DISABLE_S4,
            QEMU_CAPS_VNC);
1355
    DO_TEST("input-virtio-ccw",
1356
            QEMU_CAPS_CCW,
1357 1358 1359 1360 1361 1362
            QEMU_CAPS_VIRTIO_KEYBOARD,
            QEMU_CAPS_VIRTIO_MOUSE,
            QEMU_CAPS_VIRTIO_TABLET,
            QEMU_CAPS_DEVICE_VIRTIO_KEYBOARD_CCW,
            QEMU_CAPS_DEVICE_VIRTIO_MOUSE_CCW,
            QEMU_CAPS_DEVICE_VIRTIO_TABLET_CCW);
1363

1364 1365 1366 1367 1368 1369 1370 1371 1372
    DO_TEST("tseg-explicit-size",
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_MACHINE_SMM_OPT,
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_MCH_EXTENDED_TSEG_MBYTES);

1373
# define DO_TEST_STATUS(_name) \
1374
    do { \
1375 1376 1377
        static struct testQemuInfo info = { \
            .name = _name, \
        }; \
1378 1379 1380
        if (testQemuInfoSetArgs(&info, capslatest, \
                                ARG_QEMU_CAPS, QEMU_CAPS_LAST, \
                                ARG_END) < 0 || \
1381
            qemuTestCapsCacheInsert(driver.qemuCapsCache, info.qemuCaps) < 0) { \
1382
            VIR_TEST_DEBUG("Failed to generate status test data for '%s'", _name); \
1383 1384
            return -1; \
        } \
1385
        testInfoSetStatusPaths(&info); \
1386
\
1387
        if (virTestRun("QEMU status XML-2-XML " _name, \
1388 1389 1390
                       testCompareStatusXMLToXMLFiles, &info) < 0) \
            ret = -1; \
\
1391
        testQemuInfoClear(&info); \
1392 1393 1394 1395 1396
    } while (0)


    DO_TEST_STATUS("blockjob-mirror");
    DO_TEST_STATUS("vcpus-multi");
1397
    DO_TEST_STATUS("modern");
1398
    DO_TEST_STATUS("migration-out-nbd");
1399 1400
    DO_TEST_STATUS("migration-in-params");
    DO_TEST_STATUS("migration-out-params");
1401
    DO_TEST_STATUS("migration-out-nbd-tls");
1402
    DO_TEST_STATUS("disk-secinfo-upgrade");
1403

1404 1405
    DO_TEST_STATUS("blockjob-blockdev");

1406 1407
    DO_TEST_STATUS("backup-pull");

1408 1409
    DO_TEST("vhost-vsock", QEMU_CAPS_DEVICE_VHOST_VSOCK);
    DO_TEST("vhost-vsock-auto", QEMU_CAPS_DEVICE_VHOST_VSOCK);
1410 1411 1412 1413 1414
    DO_TEST("vhost-vsock-ccw", QEMU_CAPS_DEVICE_VHOST_VSOCK,
            QEMU_CAPS_CCW);
    DO_TEST("vhost-vsock-ccw-auto", QEMU_CAPS_DEVICE_VHOST_VSOCK,
            QEMU_CAPS_CCW);

L
Lubomir Rintel 已提交
1415 1416
    DO_TEST("riscv64-virt",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
1417 1418
    DO_TEST("riscv64-virt-pci",
            QEMU_CAPS_OBJECT_GPEX);
J
Ján Tomko 已提交
1419

1420 1421
    DO_TEST_CAPS_LATEST("virtio-transitional");
    DO_TEST_CAPS_LATEST("virtio-non-transitional");
1422

1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438
    /* Simple headless guests for various architectures */
    DO_TEST_CAPS_ARCH_LATEST("aarch64-virt-headless", "aarch64");
    DO_TEST_CAPS_ARCH_LATEST("ppc64-pseries-headless", "ppc64");
    DO_TEST_CAPS_ARCH_LATEST("riscv64-virt-headless", "riscv64");
    DO_TEST_CAPS_ARCH_LATEST("s390x-ccw-headless", "s390x");
    DO_TEST_CAPS_ARCH_LATEST("x86_64-pc-headless", "x86_64");
    DO_TEST_CAPS_ARCH_LATEST("x86_64-q35-headless", "x86_64");

    /* Simple guests with graphics for various architectures */
    DO_TEST_CAPS_ARCH_LATEST("aarch64-virt-graphics", "aarch64");
    DO_TEST_CAPS_ARCH_LATEST("ppc64-pseries-graphics", "ppc64");
    DO_TEST_CAPS_ARCH_LATEST("riscv64-virt-graphics", "riscv64");
    DO_TEST_CAPS_ARCH_LATEST("s390x-ccw-graphics", "s390x");
    DO_TEST_CAPS_ARCH_LATEST("x86_64-pc-graphics", "x86_64");
    DO_TEST_CAPS_ARCH_LATEST("x86_64-q35-graphics", "x86_64");

1439 1440 1441
    DO_TEST_CAPS_VER("cpu-Icelake-Server-pconfig", "3.1.0");
    DO_TEST_CAPS_LATEST("cpu-Icelake-Server-pconfig");

1442 1443
    DO_TEST_CAPS_ARCH_LATEST("aarch64-default-cpu-kvm-virt-4.2", "aarch64");
    DO_TEST_CAPS_ARCH_LATEST("aarch64-default-cpu-tcg-virt-4.2", "aarch64");
1444 1445 1446 1447 1448 1449
    DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-kvm-pseries-2.7", "ppc64");
    DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-tcg-pseries-2.7", "ppc64");
    DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-kvm-pseries-3.1", "ppc64");
    DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-tcg-pseries-3.1", "ppc64");
    DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-kvm-pseries-4.2", "ppc64");
    DO_TEST_CAPS_ARCH_LATEST("ppc64-default-cpu-tcg-pseries-4.2", "ppc64");
1450 1451
    DO_TEST_CAPS_ARCH_LATEST("s390-default-cpu-kvm-ccw-virtio-4.2", "s390x");
    DO_TEST_CAPS_ARCH_LATEST("s390-default-cpu-tcg-ccw-virtio-4.2", "s390x");
1452 1453 1454 1455
    DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-kvm-pc-4.2", "x86_64");
    DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-tcg-pc-4.2", "x86_64");
    DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-kvm-q35-4.2", "x86_64");
    DO_TEST_CAPS_ARCH_LATEST("x86_64-default-cpu-tcg-q35-4.2", "x86_64");
1456

A
Andrea Bolognani 已提交
1457 1458 1459
    if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL)
        virFileDeleteTree(fakerootdir);

1460
    virHashFree(capslatest);
1461
    qemuTestDriverFree(&driver);
A
Andrea Bolognani 已提交
1462
    VIR_FREE(fakerootdir);
1463
    virFileWrapperClearPrefixes();
1464

1465
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
1466 1467
}

A
Andrea Bolognani 已提交
1468
VIR_TEST_MAIN_PRELOAD(mymain,
1469 1470
                      VIR_TEST_MOCK("virpci"),
                      VIR_TEST_MOCK("virrandom"),
M
Michal Privoznik 已提交
1471
                      VIR_TEST_MOCK("domaincaps"),
1472
                      VIR_TEST_MOCK("virdeterministichash"))
1473

1474 1475
#else

1476 1477 1478 1479 1480
int
main(void)
{
    return EXIT_AM_SKIP;
}
1481 1482

#endif /* WITH_QEMU */