qemuxml2xmltest.c 43.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 19
# define VIR_FROM_THIS VIR_FROM_NONE

20
static virQEMUDriver driver;
21

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

struct testInfo {
    char *inName;
    char *outActiveName;
    char *outInactiveName;
32

33
    virBitmapPtr activeVcpus;
34
    bool blockjobs;
35

36
    virQEMUCapsPtr qemuCaps;
37 38
};

39

40 41 42 43 44
static int
testXML2XMLActive(const void *opaque)
{
    const struct testInfo *info = opaque;

45
    return testCompareDomXML2XMLFiles(driver.caps, driver.xmlopt,
46
                                      info->inName, info->outActiveName, true,
47
                                      0,
48
                                      TEST_COMPARE_DOM_XML2XML_RESULT_SUCCESS);
49 50
}

51

52
static int
53
testXML2XMLInactive(const void *opaque)
54
{
55 56
    const struct testInfo *info = opaque;

57
    return testCompareDomXML2XMLFiles(driver.caps, driver.xmlopt, info->inName,
58
                                      info->outInactiveName, false,
59
                                      0,
60
                                      TEST_COMPARE_DOM_XML2XML_RESULT_SUCCESS);
61
}
62

63

64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
static int
testCompareStatusXMLToXMLFiles(const void *opaque)
{
    const struct testInfo *data = opaque;
    virDomainObjPtr obj = NULL;
    char *actual = NULL;
    int ret = -1;

    if (!(obj = virDomainObjParseFile(data->inName, driver.caps, driver.xmlopt,
                                      VIR_DOMAIN_DEF_PARSE_STATUS |
                                      VIR_DOMAIN_DEF_PARSE_ACTUAL_NET |
                                      VIR_DOMAIN_DEF_PARSE_PCI_ORIG_STATES |
                                      VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE |
                                      VIR_DOMAIN_DEF_PARSE_ALLOW_POST_PARSE_FAIL)))
        goto cleanup;

    if (!(actual = virDomainObjFormat(driver.xmlopt, obj, NULL,
                                      VIR_DOMAIN_DEF_FORMAT_SECURE |
                                      VIR_DOMAIN_DEF_FORMAT_STATUS |
                                      VIR_DOMAIN_DEF_FORMAT_ACTUAL_NET |
                                      VIR_DOMAIN_DEF_FORMAT_PCI_ORIG_STATES |
                                      VIR_DOMAIN_DEF_FORMAT_CLOCK_ADJUST)))

        goto cleanup;

    if (virTestCompareToFile(actual, data->outActiveName) < 0)
        goto cleanup;

    ret = 0;

 cleanup:
95
    virDomainObjEndAPI(&obj);
96 97 98 99 100
    VIR_FREE(actual);
    return ret;
}


101
static void
102
testInfoClear(struct testInfo *info)
103 104 105 106
{
    VIR_FREE(info->inName);
    VIR_FREE(info->outActiveName);
    VIR_FREE(info->outInactiveName);
107

108 109 110
    virBitmapFree(info->activeVcpus);
    info->activeVcpus = NULL;

111
    virObjectUnref(info->qemuCaps);
112 113 114 115
}


static int
116 117
testInfoSetCommon(struct testInfo *info,
                  int gic)
118
{
119 120 121
    if (!(info->qemuCaps = virQEMUCapsNew()))
        goto error;

122 123 124
    if (testQemuCapsSetGIC(info->qemuCaps, gic) < 0)
        goto error;

125
    if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0)
126 127
        goto error;

128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
    return 0;

 error:
    testInfoClear(info);
    return -1;
}


static int
testInfoSet(struct testInfo *info,
            const char *name,
            int when,
            int gic)
{
    if (testInfoSetCommon(info, gic) < 0)
        return -1;

145
    if (virAsprintf(&info->inName, "%s/qemuxml2argvdata/%s.xml",
146 147 148 149
                    abs_srcdir, name) < 0)
        goto error;

    if (when & WHEN_INACTIVE) {
150
        if (virAsprintf(&info->outInactiveName,
151
                        "%s/qemuxml2xmloutdata/%s-inactive.xml",
152 153
                        abs_srcdir, name) < 0)
            goto error;
154

155 156
        if (!virFileExists(info->outInactiveName)) {
            VIR_FREE(info->outInactiveName);
157

158
            if (virAsprintf(&info->outInactiveName,
159
                            "%s/qemuxml2xmloutdata/%s.xml",
160
                            abs_srcdir, name) < 0)
161 162
                goto error;
        }
163
    }
164

165
    if (when & WHEN_ACTIVE) {
166
        if (virAsprintf(&info->outActiveName,
167
                        "%s/qemuxml2xmloutdata/%s-active.xml",
168 169
                        abs_srcdir, name) < 0)
            goto error;
170

171 172
        if (!virFileExists(info->outActiveName)) {
            VIR_FREE(info->outActiveName);
173

174
            if (virAsprintf(&info->outActiveName,
175
                            "%s/qemuxml2xmloutdata/%s.xml",
176
                            abs_srcdir, name) < 0)
177 178
                goto error;
        }
179
    }
180

181
    return 0;
182

183
 error:
184
    testInfoClear(info);
185
    return -1;
186 187
}

188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210

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

static int
testInfoSetStatus(struct testInfo *info,
                  const char *name,
                  int gic)
{
    if (testInfoSetCommon(info, gic) < 0)
        return -1;

    if (virAsprintf(&info->inName, "%s%s-in.xml", statusPath, name) < 0 ||
        virAsprintf(&info->outActiveName, "%s%s-out.xml", statusPath, name) < 0)
        goto error;

    return 0;

 error:
    testInfoClear(info);
    return -1;
}


A
Andrea Bolognani 已提交
211
# define FAKEROOTDIRTEMPLATE abs_builddir "/fakerootdir-XXXXXX"
212

213
static int
E
Eric Blake 已提交
214
mymain(void)
215 216
{
    int ret = 0;
A
Andrea Bolognani 已提交
217
    char *fakerootdir;
218
    struct testInfo info;
219
    virQEMUDriverConfigPtr cfg = NULL;
220

A
Andrea Bolognani 已提交
221 222 223 224 225 226 227 228 229 230 231 232
    if (VIR_STRDUP_QUIET(fakerootdir, FAKEROOTDIRTEMPLATE) < 0) {
        fprintf(stderr, "Out of memory\n");
        abort();
    }

    if (!mkdtemp(fakerootdir)) {
        fprintf(stderr, "Cannot create fakerootdir");
        abort();
    }

    setenv("LIBVIRT_FAKE_ROOT_DIR", fakerootdir, 1);

233 234
    memset(&info, 0, sizeof(info));

235
    if (qemuTestDriverInit(&driver) < 0)
236
        return EXIT_FAILURE;
237

238 239
    cfg = virQEMUDriverGetConfig(&driver);

240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258
# define DO_TEST_FULL(name, when, gic, ...) \
    do { \
        if (testInfoSet(&info, name, when, gic) < 0) { \
            VIR_TEST_DEBUG("Failed to generate test data for '%s'", name); \
            return -1; \
        } \
        virQEMUCapsSetList(info.qemuCaps, __VA_ARGS__, QEMU_CAPS_LAST); \
 \
        if (info.outInactiveName) { \
            if (virTestRun("QEMU XML-2-XML-inactive " name, \
                            testXML2XMLInactive, &info) < 0) \
                ret = -1; \
        } \
 \
        if (info.outActiveName) { \
            if (virTestRun("QEMU XML-2-XML-active " name, \
                            testXML2XMLActive, &info) < 0) \
                ret = -1; \
        } \
259
        testInfoClear(&info); \
260 261
    } while (0)

262 263
# define NONE QEMU_CAPS_LAST

264 265
# define DO_TEST(name, ...) \
    DO_TEST_FULL(name, WHEN_BOTH, GIC_NONE, __VA_ARGS__)
266 267


268 269 270 271 272

    /* 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);
273

274
    DO_TEST("minimal", NONE);
275 276
    DO_TEST("genid", NONE);
    DO_TEST("genid-auto", NONE);
277 278
    DO_TEST("machine-core-on", NONE);
    DO_TEST("machine-core-off", NONE);
279
    DO_TEST("machine-loadparm-multiple-disks-nets-s390", NONE);
280 281 282 283 284
    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);
285 286 287
    DO_TEST("boot-floppy-q35",
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI);
288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324
    DO_TEST("boot-multi", NONE);
    DO_TEST("boot-menu-enable-with-timeout", NONE);
    DO_TEST("boot-menu-disable", NONE);
    DO_TEST("boot-menu-disable-with-timeout", NONE);
    DO_TEST("boot-order", NONE);

    DO_TEST("reboot-timeout-enabled", NONE);
    DO_TEST("reboot-timeout-disabled", NONE);

    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);
    DO_TEST("clock-catchup", NONE);
    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);

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

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

325
    DO_TEST("pages-discard", NONE);
326
    DO_TEST("pages-discard-hugepages", NONE);
327
    DO_TEST("pages-dimm-discard", NONE);
328
    DO_TEST("hugepages-default", NONE);
329
    DO_TEST("hugepages-default-2M", NONE);
330
    DO_TEST("hugepages-default-system-size", NONE);
331
    DO_TEST("hugepages-nodeset", NONE);
332
    DO_TEST("hugepages-numa-default-2M", NONE);
333
    DO_TEST("hugepages-numa-default-dimm", NONE);
334
    DO_TEST("hugepages-numa-nodeset", NONE);
335
    DO_TEST("hugepages-numa-nodeset-part", NONE);
336
    DO_TEST("hugepages-shared", NONE);
337
    DO_TEST("hugepages-memaccess", NONE);
338
    DO_TEST("hugepages-memaccess2", NONE);
339
    DO_TEST("hugepages-nvdimm", NONE);
340 341 342 343 344 345 346 347 348 349
    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);
    DO_TEST("disk-floppy", NONE);
    DO_TEST("disk-usb-device", NONE);
    DO_TEST("disk-virtio", NONE);
    DO_TEST("floppy-drive-fat", NONE);
350 351 352 353 354
    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);
355
    DO_TEST("disk-cache", QEMU_CAPS_SCSI_LSI);
356
    DO_TEST("disk-network-nbd", NONE);
357
    DO_TEST("disk-network-iscsi", QEMU_CAPS_VIRTIO_SCSI);
358 359 360 361 362 363
    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);
364
    DO_TEST("disk-scsi-device",
365
            QEMU_CAPS_SCSI_LSI);
366
    DO_TEST("disk-scsi-vscsi", NONE);
367
    DO_TEST("disk-scsi-virtio-scsi",
368
            QEMU_CAPS_VIRTIO_SCSI);
369
    DO_TEST("disk-virtio-scsi-num_queues",
370
            QEMU_CAPS_VIRTIO_SCSI);
371
    DO_TEST("disk-virtio-scsi-reservations",
372
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_PR_MANAGER_HELPER);
373
    DO_TEST("disk-virtio-scsi-cmd_per_lun",
374
            QEMU_CAPS_VIRTIO_SCSI);
375
    DO_TEST("disk-virtio-scsi-max_sectors",
376
            QEMU_CAPS_VIRTIO_SCSI);
377
    DO_TEST("disk-virtio-scsi-ioeventfd",
378
            QEMU_CAPS_VIRTIO_SCSI);
379 380 381
    DO_TEST("disk-virtio-s390-zpci",
            QEMU_CAPS_DEVICE_ZPCI,
            QEMU_CAPS_CCW);
382
    DO_TEST("disk-scsi-megasas",
383
            QEMU_CAPS_SCSI_MEGASAS);
384
    DO_TEST("disk-scsi-mptsas1068",
385
            QEMU_CAPS_SCSI_MPTSAS1068,
386
            QEMU_CAPS_SCSI_DISK_WWN);
387
    DO_TEST("disk-mirror-old", NONE);
388
    DO_TEST("disk-mirror", NONE);
389
    DO_TEST_FULL("disk-active-commit", WHEN_ACTIVE, GIC_NONE, NONE);
390 391 392 393 394 395 396
    DO_TEST("graphics-listen-network", NONE);
    DO_TEST("graphics-vnc", NONE);
    DO_TEST("graphics-vnc-websocket", NONE);
    DO_TEST("graphics-vnc-sasl", NONE);
    DO_TEST("graphics-vnc-tls", NONE);
    DO_TEST("graphics-vnc-no-listen-attr", NONE);
    DO_TEST("graphics-vnc-remove-generated-socket", NONE);
397
    cfg->vncAutoUnixSocket = true;
398
    DO_TEST("graphics-vnc-auto-socket-cfg", NONE);
399
    cfg->vncAutoUnixSocket = false;
400 401
    DO_TEST("graphics-vnc-socket", NONE);
    DO_TEST("graphics-vnc-auto-socket", NONE);
402
    DO_TEST("graphics-vnc-egl-headless", NONE);
403 404 405 406 407 408 409 410

    DO_TEST("graphics-sdl", NONE);
    DO_TEST("graphics-sdl-fullscreen", NONE);
    DO_TEST("graphics-spice", NONE);
    DO_TEST("graphics-spice-compression", NONE);
    DO_TEST("graphics-spice-qxl-vga", NONE);
    DO_TEST("graphics-spice-socket", NONE);
    DO_TEST("graphics-spice-auto-socket", NONE);
411
    cfg->spiceAutoUnixSocket = true;
412
    DO_TEST("graphics-spice-auto-socket-cfg", NONE);
413
    cfg->spiceAutoUnixSocket = false;
414
    DO_TEST("graphics-spice-egl-headless", NONE);
415

416 417 418 419 420 421 422 423 424 425
    DO_TEST("input-usbmouse", NONE);
    DO_TEST("input-usbtablet", NONE);
    DO_TEST("misc-acpi", NONE);
    DO_TEST("misc-disable-s3", NONE);
    DO_TEST("misc-disable-suspends", NONE);
    DO_TEST("misc-enable-s4", NONE);
    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 已提交
426
    DO_TEST("net-user-addr", NONE);
427 428 429 430 431 432 433
    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);
    DO_TEST("net-virtio-network-portgroup", NONE);
434
    DO_TEST("net-virtio-rxtxqueuesize", NONE);
435
    DO_TEST("net-hostdev", NONE);
436
    DO_TEST("net-hostdev-bootorder", NONE);
437 438 439 440 441 442 443 444
    DO_TEST("net-hostdev-vfio", NONE);
    DO_TEST("net-midonet", NONE);
    DO_TEST("net-openvswitch", NONE);
    DO_TEST("sound", NONE);
    DO_TEST("sound-device", NONE);
    DO_TEST("watchdog", NONE);
    DO_TEST("net-bandwidth", NONE);
    DO_TEST("net-bandwidth2", NONE);
445
    DO_TEST("net-mtu", NONE);
446
    DO_TEST("net-coalesce", NONE);
447

448
    DO_TEST("serial-tcp-tlsx509-chardev", NONE);
449
    DO_TEST("serial-tcp-tlsx509-chardev-notls", NONE);
450 451 452 453 454 455 456 457 458
    DO_TEST("serial-spiceport", NONE);
    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);

459 460
    DO_TEST_FULL("channel-unix-source-path", WHEN_INACTIVE, GIC_NONE, NONE);

461 462 463
    DO_TEST("hostdev-usb-address", NONE);
    DO_TEST("hostdev-pci-address", NONE);
    DO_TEST("hostdev-vfio", NONE);
464 465 466
    DO_TEST("hostdev-vfio-zpci",
            QEMU_CAPS_DEVICE_ZPCI,
            QEMU_CAPS_CCW);
467
    DO_TEST("hostdev-mdev-precreated", NONE);
468
    DO_TEST("hostdev-mdev-display", QEMU_CAPS_VFIO_PCI_DISPLAY);
469
    DO_TEST("pci-rom", NONE);
470
    DO_TEST("pci-rom-disabled", NONE);
471
    DO_TEST("pci-rom-disabled-invalid", NONE);
472 473
    DO_TEST("pci-serial-dev-chardev", NONE);

474 475
    DO_TEST("encrypted-disk", QEMU_CAPS_QCOW2_LUKS);
    DO_TEST("encrypted-disk-usage", QEMU_CAPS_QCOW2_LUKS);
476
    DO_TEST("luks-disks", NONE);
477
    DO_TEST("luks-disks-source", NONE);
478 479 480 481 482 483 484 485 486
    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);
487
    DO_TEST("vcpu-placement-static",
488 489
            QEMU_CAPS_KVM,
            QEMU_CAPS_OBJECT_IOTHREAD);
490

491 492 493 494 495 496
    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);
497
    DO_TEST("iothreads-disk-virtio-ccw",
498
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
499
    DO_TEST("iothreads-virtio-scsi-pci",
500
            QEMU_CAPS_VIRTIO_SCSI);
501
    DO_TEST("iothreads-virtio-scsi-ccw",
502
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_CCW,
503
            QEMU_CAPS_VIRTIO_S390);
504 505 506 507 508 509 510
    DO_TEST("lease", NONE);
    DO_TEST("event_idx", NONE);
    DO_TEST("vhost_queues", NONE);
    DO_TEST("interface-driver", NONE);
    DO_TEST("interface-server", NONE);
    DO_TEST("virtio-lun", NONE);

511 512 513 514 515
    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",
516
            QEMU_CAPS_DEVICE_IOH3420,
517 518
            QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_PIIX3_USB_UHCI,
519 520
            QEMU_CAPS_NEC_USB_XHCI);
    DO_TEST("usb-controller-explicit-q35",
521
            QEMU_CAPS_DEVICE_IOH3420,
522 523
            QEMU_CAPS_PCI_OHCI,
            QEMU_CAPS_PIIX3_USB_UHCI,
524 525
            QEMU_CAPS_NEC_USB_XHCI);
    DO_TEST("ppc64-usb-controller",
526
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
527 528
            QEMU_CAPS_PCI_OHCI);
    DO_TEST("ppc64-usb-controller-legacy",
529
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
530
            QEMU_CAPS_PIIX3_USB_UHCI);
531 532 533 534 535
    DO_TEST("usb-port-missing", NONE);
    DO_TEST("usb-redir", NONE);
    DO_TEST("usb-redir-filter", NONE);
    DO_TEST("usb-redir-filter-version", NONE);
    DO_TEST("blkdeviotune", NONE);
536
    DO_TEST("blkdeviotune-max", NONE);
537
    DO_TEST("blkdeviotune-group-num", NONE);
538
    DO_TEST("blkdeviotune-max-length", NONE);
539
    DO_TEST("controller-usb-order", NONE);
540

541 542 543 544
    DO_TEST_FULL("seclabel-dynamic-baselabel", WHEN_INACTIVE, GIC_NONE, NONE);
    DO_TEST_FULL("seclabel-dynamic-override", WHEN_INACTIVE, GIC_NONE, NONE);
    DO_TEST_FULL("seclabel-dynamic-labelskip", WHEN_INACTIVE, GIC_NONE, NONE);
    DO_TEST_FULL("seclabel-dynamic-relabel", WHEN_INACTIVE, GIC_NONE, NONE);
545
    DO_TEST("seclabel-static", NONE);
546
    DO_TEST_FULL("seclabel-static-labelskip", WHEN_ACTIVE, GIC_NONE, NONE);
547 548 549 550
    DO_TEST("seclabel-none", NONE);
    DO_TEST("seclabel-dac-none", NONE);
    DO_TEST("seclabel-dynamic-none", NONE);
    DO_TEST("seclabel-device-multiple", NONE);
551
    DO_TEST_FULL("seclabel-dynamic-none-relabel", WHEN_INACTIVE, GIC_NONE, NONE);
552
    DO_TEST("numad-static-vcpu-no-numatune", NONE);
553

554
    DO_TEST("disk-scsi-lun-passthrough-sgio",
555
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI,
556 557
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_DISK_WWN);
    DO_TEST("disk-scsi-disk-vpd",
558
            QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI,
559
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_DISK_WWN);
560 561
    DO_TEST("disk-source-pool", NONE);
    DO_TEST("disk-source-pool-mode", NONE);
562

563 564
    DO_TEST("disk-discard", NONE);
    DO_TEST("disk-detect-zeroes", NONE);
O
Osier Yang 已提交
565

566 567
    DO_TEST("disk-serial", NONE);

568 569
    DO_TEST("virtio-rng-random", NONE);
    DO_TEST("virtio-rng-egd", NONE);
570

571 572 573 574 575 576
    DO_TEST("pseries-nvram",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
    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);
577

578 579 580 581
    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);
582 583 584 585
    DO_TEST("pseries-phb-numa-node",
            QEMU_CAPS_NUMA,
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
            QEMU_CAPS_SPAPR_PCI_HOST_BRIDGE_NUMA_NODE);
586

587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608
    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);

609
    DO_TEST("pseries-features",
610
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
611
            QEMU_CAPS_MACHINE_PSERIES_CAP_HPT_MAX_PAGE_SIZE,
612
            QEMU_CAPS_MACHINE_PSERIES_CAP_HTM,
613 614
            QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT);

615
    DO_TEST("pseries-serial-native",
616
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
617 618
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial+console-native",
619
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
620 621
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-serial-compat",
622
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
623
            QEMU_CAPS_DEVICE_SPAPR_VTY);
624
    DO_TEST("pseries-serial-pci",
625
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
626 627
            QEMU_CAPS_DEVICE_PCI_SERIAL);
    DO_TEST("pseries-serial-usb",
628
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
629 630
            QEMU_CAPS_DEVICE_QEMU_XHCI,
            QEMU_CAPS_DEVICE_USB_SERIAL);
631
    DO_TEST("pseries-console-native",
632
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
633 634
            QEMU_CAPS_DEVICE_SPAPR_VTY);
    DO_TEST("pseries-console-virtio",
635 636 637 638 639
            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);
640 641 642 643 644 645 646 647 648 649 650
    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);
651 652 653 654
    DO_TEST("mach-virt-console-native",
            QEMU_CAPS_DEVICE_PL011);
    DO_TEST("mach-virt-console-virtio",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
655

656 657 658 659
    DO_TEST("balloon-device-auto", NONE);
    DO_TEST("balloon-device-period", NONE);
    DO_TEST("channel-virtio-auto", NONE);
    DO_TEST("console-compat-auto", NONE);
660
    DO_TEST("disk-scsi-device-auto",
661
            QEMU_CAPS_SCSI_LSI);
662 663 664 665 666 667 668 669 670 671
    DO_TEST("console-virtio", NONE);
    DO_TEST("serial-target-port-auto", NONE);
    DO_TEST("graphics-listen-network2", NONE);
    DO_TEST("graphics-spice-timeout", NONE);
    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);
    DO_TEST("tpm-passthrough", NONE);
672
    DO_TEST("tpm-passthrough-crb", NONE);
673
    DO_TEST("tpm-emulator", NONE);
674 675 676

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

678
    DO_TEST("pci-bridge",
679 680 681 682 683
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
    DO_TEST("pci-many",
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
684 685 686
    DO_TEST("pci-bridge-many-disks",
            QEMU_CAPS_DEVICE_PCI_BRIDGE);
    DO_TEST("pci-autoadd-addr",
687 688
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
689
    DO_TEST("pci-autoadd-idx",
690 691
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_CIRRUS_VGA);
692
    DO_TEST("pci-autofill-addr", NONE);
693

694
    DO_TEST("q35",
695 696
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
697
            QEMU_CAPS_DEVICE_IOH3420,
698 699 700
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
701
            QEMU_CAPS_DEVICE_QXL);
702 703 704
    DO_TEST("q35-usb2",
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
705
            QEMU_CAPS_DEVICE_IOH3420,
706
            QEMU_CAPS_ICH9_AHCI,
707
            QEMU_CAPS_ICH9_USB_EHCI1,
708
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
709
            QEMU_CAPS_DEVICE_QXL);
710
    DO_TEST("q35-usb2-multi",
711 712
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
713
            QEMU_CAPS_DEVICE_IOH3420,
714 715 716
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
717
            QEMU_CAPS_DEVICE_QXL);
718
    DO_TEST("q35-usb2-reorder",
719 720
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
721
            QEMU_CAPS_DEVICE_IOH3420,
722 723 724
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_ICH9_USB_EHCI1,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
725
            QEMU_CAPS_DEVICE_QXL);
726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742
    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,
743
            QEMU_CAPS_NEC_USB_XHCI,
744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762
            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,
763
            QEMU_CAPS_NEC_USB_XHCI,
764
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
765 766 767 768 769 770 771 772 773
    /* 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,
774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792
            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,
793 794 795 796 797 798 799 800 801 802
            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,
803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821
            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,
822
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
823
    DO_TEST("q35-virt-manager-basic",
824 825 826
            QEMU_CAPS_KVM,
            QEMU_CAPS_ICH9_DISABLE_S3,
            QEMU_CAPS_ICH9_DISABLE_S4,
827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844
            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,
845 846 847 848 849
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_SPICE,
            QEMU_CAPS_DEVICE_QXL,
            QEMU_CAPS_HDA_DUPLEX,
            QEMU_CAPS_USB_REDIR);
850
    DO_TEST("pcie-root",
851 852
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
853
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
854
            QEMU_CAPS_DEVICE_QXL);
855 856

    /* Test automatic and manual setting of pcie-root-port attributes */
857
    DO_TEST("pcie-root-port",
858 859
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_ICH9_AHCI,
860
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
861
            QEMU_CAPS_DEVICE_QXL);
862 863 864 865 866 867

    /* 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,
868
            QEMU_CAPS_DEVICE_IOH3420);
869
    DO_TEST("pcie-root-port-model-ioh3420",
870
            QEMU_CAPS_DEVICE_IOH3420);
871

872
    DO_TEST("pcie-switch-upstream-port",
873 874 875
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_ICH9_AHCI,
876
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
877
            QEMU_CAPS_DEVICE_QXL);
878
    DO_TEST("pcie-switch-downstream-port",
879 880 881 882
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
            QEMU_CAPS_ICH9_AHCI,
883
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
884
            QEMU_CAPS_DEVICE_QXL);
885
    DO_TEST("pci-expander-bus",
886
            QEMU_CAPS_DEVICE_PXB);
887
    DO_TEST("pcie-expander-bus",
888 889 890 891
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_DEVICE_X3130_UPSTREAM,
            QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
            QEMU_CAPS_DEVICE_PXB_PCIE);
892
    DO_TEST("autoindex",
893 894 895 896 897 898 899
            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,
900
            QEMU_CAPS_NEC_USB_XHCI);
901 902 903 904 905 906 907
    /* 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);
908

909 910
    DO_TEST("hostdev-scsi-vhost-scsi-ccw",
            QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_VHOST_SCSI,
911
            QEMU_CAPS_CCW);
912
    DO_TEST("hostdev-scsi-vhost-scsi-pci",
913 914
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_DEVICE_VHOST_SCSI);
915 916 917 918 919
    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);
920
    DO_TEST("hostdev-scsi-lsi",
921 922
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
923
    DO_TEST("hostdev-scsi-virtio-scsi",
924 925
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
926
    DO_TEST("hostdev-scsi-readonly",
927 928
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
929 930

    DO_TEST("hostdev-scsi-shareable",
931 932
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
933
    DO_TEST("hostdev-scsi-sgio",
934 935
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
936
    DO_TEST("hostdev-scsi-rawio",
937 938
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
939 940

    DO_TEST("hostdev-scsi-autogen-address",
941 942
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
943
    DO_TEST("hostdev-scsi-large-unit",
944 945
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
946 947

    DO_TEST("hostdev-scsi-lsi-iscsi",
948 949
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
950
    DO_TEST("hostdev-scsi-lsi-iscsi-auth",
951 952
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
953
    DO_TEST("hostdev-scsi-virtio-iscsi",
954 955
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
956
    DO_TEST("hostdev-scsi-virtio-iscsi-auth",
957 958
            QEMU_CAPS_VIRTIO_SCSI,
            QEMU_CAPS_SCSI_LSI);
959

960 961 962 963 964
    DO_TEST("hostdev-subsys-mdev-vfio-ccw",
            QEMU_CAPS_CCW,
            QEMU_CAPS_CCW_CSSID_UNRESTRICTED,
            QEMU_CAPS_DEVICE_VFIO_CCW);

965
    DO_TEST("s390-defaultconsole",
966
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
967
    DO_TEST("s390-panic",
968
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
969
    DO_TEST("s390-panic-missing",
970
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
971
    DO_TEST("s390-panic-no-address",
972
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
973
    DO_TEST("s390-serial",
974
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
975
    DO_TEST("s390-serial-2",
976
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
977
    DO_TEST("s390-serial-console",
978
            QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390);
979

980 981 982
    DO_TEST("pcihole64", NONE);
    DO_TEST("pcihole64-gib", NONE);
    DO_TEST("pcihole64-none", NONE);
983
    DO_TEST("pcihole64-q35",
984
            QEMU_CAPS_DEVICE_IOH3420,
985 986
            QEMU_CAPS_ICH9_AHCI,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
987
            QEMU_CAPS_DEVICE_QXL,
988
            QEMU_CAPS_Q35_PCI_HOLE64_SIZE);
989

990 991
    DO_TEST("panic", NONE);
    DO_TEST("panic-isa", NONE);
992 993
    DO_TEST("panic-pseries",
            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
994 995
    DO_TEST("panic-double", NONE);
    DO_TEST("panic-no-address", NONE);
H
Hu Tao 已提交
996

997
    DO_TEST("disk-backing-chains", NONE);
998 999
    DO_TEST("disk-backing-chains-index", NONE);
    DO_TEST("disk-backing-chains-noindex", NONE);
1000

1001
    DO_TEST("chardev-label", NONE);
J
Ján Tomko 已提交
1002

1003 1004 1005 1006 1007 1008
    DO_TEST("cpu-numa1", NONE);
    DO_TEST("cpu-numa2", NONE);
    DO_TEST("cpu-numa-no-memory-element", NONE);
    DO_TEST("cpu-numa-disordered", NONE);
    DO_TEST("cpu-numa-disjoint", NONE);
    DO_TEST("cpu-numa-memshared", NONE);
1009

1010 1011 1012
    DO_TEST("numatune-auto-prefer", NONE);
    DO_TEST("numatune-memnode", NONE);
    DO_TEST("numatune-memnode-no-memory", NONE);
1013

1014 1015
    DO_TEST("bios-nvram", NONE);
    DO_TEST("bios-nvram-os-interleave", NONE);
1016

1017 1018 1019
    DO_TEST("tap-vhost", NONE);
    DO_TEST("tap-vhost-incorrect", NONE);
    DO_TEST("shmem", NONE);
1020
    DO_TEST("shmem-plain-doorbell", NONE);
1021 1022
    DO_TEST("smbios", NONE);
    DO_TEST("smbios-multiple-type2", NONE);
1023

1024
    DO_TEST("aarch64-aavmf-virtio-mmio",
1025 1026
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
1027
    DO_TEST("aarch64-virtio-pci-default",
1028
            QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY,
1029 1030 1031
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
1032 1033 1034
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_VIRTIO_SCSI);
1035
    DO_TEST("aarch64-virtio-pci-manual-addresses",
1036 1037 1038
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
1039 1040 1041
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420,
            QEMU_CAPS_VIRTIO_SCSI);
1042
    DO_TEST("aarch64-video-virtio-gpu-pci",
1043
            QEMU_CAPS_OBJECT_GPEX,
1044
            QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_IOH3420,
1045
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
1046
            QEMU_CAPS_DEVICE_VIRTIO_GPU);
1047 1048 1049 1050 1051 1052 1053
    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);
1054 1055 1056 1057
    DO_TEST("aarch64-traditional-pci",
            QEMU_CAPS_OBJECT_GPEX,
            QEMU_CAPS_DEVICE_PCIE_ROOT_PORT,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
1058
            QEMU_CAPS_DEVICE_PCIE_PCI_BRIDGE,
1059 1060
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_PCI_SERIAL);
1061 1062 1063 1064 1065 1066 1067 1068
    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);
1069

1070 1071 1072 1073
    DO_TEST_FULL("aarch64-gic-none", WHEN_BOTH, GIC_NONE, NONE);
    DO_TEST_FULL("aarch64-gic-none-v2", WHEN_BOTH, GIC_V2, NONE);
    DO_TEST_FULL("aarch64-gic-none-v3", WHEN_BOTH, GIC_V3, NONE);
    DO_TEST_FULL("aarch64-gic-none-both", WHEN_BOTH, GIC_BOTH, NONE);
1074
    DO_TEST_FULL("aarch64-gic-none-tcg", WHEN_BOTH, GIC_BOTH, NONE);
1075
    DO_TEST_FULL("aarch64-gic-default", WHEN_BOTH, GIC_NONE, NONE);
A
Andrea Bolognani 已提交
1076 1077 1078
    DO_TEST_FULL("aarch64-gic-default-v2", WHEN_BOTH, GIC_V2, NONE);
    DO_TEST_FULL("aarch64-gic-default-v3", WHEN_BOTH, GIC_V3, NONE);
    DO_TEST_FULL("aarch64-gic-default-both", WHEN_BOTH, GIC_BOTH, NONE);
1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090
    DO_TEST_FULL("aarch64-gic-v2", WHEN_BOTH, GIC_NONE, NONE);
    DO_TEST_FULL("aarch64-gic-v2", WHEN_BOTH, GIC_V2, NONE);
    DO_TEST_FULL("aarch64-gic-v2", WHEN_BOTH, GIC_V3, NONE);
    DO_TEST_FULL("aarch64-gic-v2", WHEN_BOTH, GIC_BOTH, NONE);
    DO_TEST_FULL("aarch64-gic-v3", WHEN_BOTH, GIC_NONE, NONE);
    DO_TEST_FULL("aarch64-gic-v3", WHEN_BOTH, GIC_V2, NONE);
    DO_TEST_FULL("aarch64-gic-v3", WHEN_BOTH, GIC_V3, NONE);
    DO_TEST_FULL("aarch64-gic-v3", WHEN_BOTH, GIC_BOTH, NONE);
    DO_TEST_FULL("aarch64-gic-host", WHEN_BOTH, GIC_NONE, NONE);
    DO_TEST_FULL("aarch64-gic-host", WHEN_BOTH, GIC_V2, NONE);
    DO_TEST_FULL("aarch64-gic-host", WHEN_BOTH, GIC_V3, NONE);
    DO_TEST_FULL("aarch64-gic-host", WHEN_BOTH, GIC_BOTH, NONE);
1091

1092 1093 1094
    DO_TEST("memory-hotplug", NONE);
    DO_TEST("memory-hotplug-nonuma", NONE);
    DO_TEST("memory-hotplug-dimm", NONE);
M
Michal Privoznik 已提交
1095
    DO_TEST("memory-hotplug-nvdimm", NONE);
1096
    DO_TEST("memory-hotplug-nvdimm-access", NONE);
1097
    DO_TEST("memory-hotplug-nvdimm-label", NONE);
1098
    DO_TEST("net-udp", NONE);
1099

1100 1101 1102
    DO_TEST("video-virtio-gpu-device", NONE);
    DO_TEST("video-virtio-gpu-virgl", NONE);
    DO_TEST("video-virtio-gpu-spice-gl", NONE);
1103
    DO_TEST("video-virtio-gpu-sdl-gl", NONE);
1104 1105 1106 1107 1108 1109 1110

    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 已提交
1111

1112 1113
    DO_TEST("memorybacking-set", NONE);
    DO_TEST("memorybacking-unset", NONE);
1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127

    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,
            QEMU_CAPS_VIRTIO_PCI_ATS);
1128

1129
    virObjectUnref(cfg);
J
Ján Tomko 已提交
1130

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

1133 1134 1135 1136 1137
    DO_TEST("video-device-pciaddr-default",
            QEMU_CAPS_KVM,
            QEMU_CAPS_VNC,
            QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
            QEMU_CAPS_DEVICE_QXL);
1138 1139
    DO_TEST("video-qxl-heads", NONE);
    DO_TEST("video-qxl-noheads", NONE);
1140
    DO_TEST("video-virtio-gpu-secondary", NONE);
1141
    DO_TEST("video-virtio-gpu-ccw",
1142
            QEMU_CAPS_CCW,
1143 1144 1145 1146 1147
            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);
1148
    DO_TEST("video-virtio-gpu-ccw-auto",
1149
            QEMU_CAPS_CCW,
1150 1151 1152 1153 1154
            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);
1155
    DO_TEST("video-none-device", NONE);
1156

1157
    DO_TEST("intel-iommu",
1158 1159 1160
            QEMU_CAPS_DEVICE_INTEL_IOMMU);
    DO_TEST("intel-iommu-machine",
            QEMU_CAPS_MACHINE_IOMMU);
1161 1162 1163 1164
    DO_TEST("intel-iommu-caching-mode",
            QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_IOH3420);
1165
    DO_TEST("intel-iommu-eim", NONE);
J
Ján Tomko 已提交
1166
    DO_TEST("intel-iommu-device-iotlb", NONE);
J
Ján Tomko 已提交
1167

1168 1169 1170 1171 1172 1173 1174
    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 已提交
1175
    DO_TEST("vmcoreinfo", NONE);
1176

1177 1178
    DO_TEST("smartcard-host", NONE);
    DO_TEST("smartcard-host-certificates", NONE);
1179
    DO_TEST("smartcard-host-certificates-database", NONE);
1180 1181 1182 1183
    DO_TEST("smartcard-passthrough-tcp", NONE);
    DO_TEST("smartcard-passthrough-spicevmc", NONE);
    DO_TEST("smartcard-controller", NONE);

1184 1185 1186 1187 1188 1189
    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);
1190

1191
    DO_TEST("user-aliases", QEMU_CAPS_QCOW2_LUKS);
1192
    DO_TEST("input-virtio-ccw",
1193
            QEMU_CAPS_CCW,
1194 1195 1196 1197 1198 1199
            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);
1200

1201 1202 1203 1204 1205 1206 1207 1208 1209
    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);

1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226
# define DO_TEST_STATUS(name) \
    do { \
        if (testInfoSetStatus(&info, name, GIC_NONE) < 0) { \
            VIR_TEST_DEBUG("Failed to generate status test data for '%s'", name); \
            return -1; \
        } \
\
        if (virTestRun("QEMU status XML-2-XML " name, \
                       testCompareStatusXMLToXMLFiles, &info) < 0) \
            ret = -1; \
\
        testInfoClear(&info); \
    } while (0)


    DO_TEST_STATUS("blockjob-mirror");
    DO_TEST_STATUS("vcpus-multi");
1227
    DO_TEST_STATUS("modern");
1228
    DO_TEST_STATUS("migration-out-nbd");
1229 1230
    DO_TEST_STATUS("migration-in-params");
    DO_TEST_STATUS("migration-out-params");
1231
    DO_TEST_STATUS("migration-out-nbd-tls");
1232
    DO_TEST_STATUS("disk-secinfo-upgrade");
1233

1234 1235
    DO_TEST("vhost-vsock", QEMU_CAPS_DEVICE_VHOST_VSOCK);
    DO_TEST("vhost-vsock-auto", QEMU_CAPS_DEVICE_VHOST_VSOCK);
1236 1237 1238 1239 1240
    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 已提交
1241 1242
    DO_TEST("riscv64-virt",
            QEMU_CAPS_DEVICE_VIRTIO_MMIO);
J
Ján Tomko 已提交
1243

A
Andrea Bolognani 已提交
1244 1245 1246
    if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL)
        virFileDeleteTree(fakerootdir);

1247
    qemuTestDriverFree(&driver);
A
Andrea Bolognani 已提交
1248
    VIR_FREE(fakerootdir);
1249

1250
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
1251 1252
}

A
Andrea Bolognani 已提交
1253
VIR_TEST_MAIN_PRELOAD(mymain,
1254 1255
                      abs_builddir "/.libs/virpcimock.so",
                      abs_builddir "/.libs/virrandommock.so")
1256

1257 1258
#else

1259 1260 1261 1262 1263
int
main(void)
{
    return EXIT_AM_SKIP;
}
1264 1265

#endif /* WITH_QEMU */