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

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

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

11 12
#include "testutils.h"

13 14
#ifdef WITH_QEMU

15 16
# include "internal.h"
# include "qemu/qemu_conf.h"
M
Matthias Bolte 已提交
17
# include "qemu/qemu_domain.h"
18
# include "testutilsqemu.h"
19
# include "virstring.h"
20

21 22
# define VIR_FROM_THIS VIR_FROM_NONE

23
static virQEMUDriver driver;
24

25 26 27 28 29 30 31 32 33 34
enum {
    WHEN_INACTIVE = 1,
    WHEN_ACTIVE = 2,
    WHEN_BOTH = 3,
};

struct testInfo {
    char *inName;
    char *outActiveName;
    char *outInactiveName;
35 36

    virQEMUCapsPtr qemuCaps;
37 38
};

39 40 41 42 43 44 45 46 47 48 49
static int
qemuXML2XMLPreFormatCallback(virDomainDefPtr def, const void *opaque)
{
    const struct testInfo *info = opaque;

    if (qemuDomainAssignAddresses(def, info->qemuCaps, NULL))
        return -1;

    return 0;
}

50 51 52 53 54
static int
testXML2XMLActive(const void *opaque)
{
    const struct testInfo *info = opaque;

55
    return testCompareDomXML2XMLFiles(driver.caps, driver.xmlopt,
56
                                      info->inName, info->outActiveName, true,
57
                                      qemuXML2XMLPreFormatCallback, opaque);
58 59
}

60

61
static int
62
testXML2XMLInactive(const void *opaque)
63
{
64 65
    const struct testInfo *info = opaque;

66
    return testCompareDomXML2XMLFiles(driver.caps, driver.xmlopt, info->inName,
67
                                      info->outInactiveName, false,
68
                                      qemuXML2XMLPreFormatCallback, opaque);
69
}
70

71

72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
static const char testStatusXMLPrefix[] =
"<domstatus state='running' reason='booted' pid='3803518'>\n"
"  <taint flag='high-privileges'/>\n"
"  <monitor path='/var/lib/libvirt/qemu/test.monitor' json='1' type='unix'/>\n"
"  <vcpus>\n"
"    <vcpu pid='3803519'/>\n"
"  </vcpus>\n"
"  <qemuCaps>\n"
"    <flag name='vnet-hdr'/>\n"
"    <flag name='qxl.vgamem_mb'/>\n"
"    <flag name='qxl-vga.vgamem_mb'/>\n"
"    <flag name='pc-dimm'/>\n"
"  </qemuCaps>\n"
"  <devices>\n"
"    <device alias='balloon0'/>\n"
"    <device alias='video0'/>\n"
"    <device alias='serial0'/>\n"
"    <device alias='net0'/>\n"
"    <device alias='usb'/>\n"
91 92
"  </devices>\n"
"  <numad nodeset='0-2'/>\n";
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107

static const char testStatusXMLSuffix[] =
"</domstatus>\n";


static int
testCompareStatusXMLToXMLFiles(const void *opaque)
{
    const struct testInfo *data = opaque;
    virBuffer buf = VIR_BUFFER_INITIALIZER;
    xmlDocPtr xml = NULL;
    virDomainObjPtr obj = NULL;
    char *expect = NULL;
    char *actual = NULL;
    char *source = NULL;
108
    char *inFile = NULL, *outActiveFile = NULL;
109 110 111
    int ret = -1;
    int keepBlanksDefault = xmlKeepBlanksDefault(0);

112 113 114 115 116
    if (virtTestLoadFile(data->inName, &inFile) < 0)
        goto cleanup;
    if (virtTestLoadFile(data->outActiveName, &outActiveFile) < 0)
        goto cleanup;

117 118 119
    /* construct faked source status XML */
    virBufferAdd(&buf, testStatusXMLPrefix, -1);
    virBufferAdjustIndent(&buf, 2);
120
    virBufferAddStr(&buf, inFile);
121 122 123 124
    virBufferAdjustIndent(&buf, -2);
    virBufferAdd(&buf, testStatusXMLSuffix, -1);

    if (!(source = virBufferContentAndReset(&buf))) {
125
        VIR_TEST_DEBUG("Failed to create the source XML");
126 127 128 129 130 131
        goto cleanup;
    }

    /* construct the expect string */
    virBufferAdd(&buf, testStatusXMLPrefix, -1);
    virBufferAdjustIndent(&buf, 2);
132
    virBufferAddStr(&buf, outActiveFile);
133 134 135 136
    virBufferAdjustIndent(&buf, -2);
    virBufferAdd(&buf, testStatusXMLSuffix, -1);

    if (!(expect = virBufferContentAndReset(&buf))) {
137
        VIR_TEST_DEBUG("Failed to create the expect XML");
138 139 140 141 142 143 144 145 146
        goto cleanup;
    }

    /* parse the fake source status XML */
    if (!(xml = virXMLParseString(source, "(domain_status_test_XML)")) ||
        !(obj = virDomainObjParseNode(xml, xmlDocGetRootElement(xml),
                                      driver.caps, driver.xmlopt,
                                      VIR_DOMAIN_DEF_PARSE_STATUS |
                                      VIR_DOMAIN_DEF_PARSE_ACTUAL_NET |
147
                                      VIR_DOMAIN_DEF_PARSE_PCI_ORIG_STATES))) {
148
        VIR_TEST_DEBUG("Failed to parse domain status XML:\n%s", source);
149 150 151
        goto cleanup;
    }

152 153 154
    if (qemuDomainAssignAddresses(obj->def, data->qemuCaps, NULL))
        goto cleanup;

155
    /* format it back */
156
    if (!(actual = virDomainObjFormat(driver.xmlopt, obj, NULL,
157
                                      VIR_DOMAIN_DEF_FORMAT_SECURE))) {
158
        VIR_TEST_DEBUG("Failed to format domain status XML");
159 160 161 162
        goto cleanup;
    }

    if (STRNEQ(actual, expect)) {
163 164 165 166 167
        /* For status test we don't want to regenerate output to not
         * add the status data.*/
        virtTestDifferenceFullNoRegenerate(stderr,
                                           expect, data->outActiveName,
                                           actual, data->inName);
168 169 170 171 172 173 174 175 176 177 178 179
        goto cleanup;
    }

    ret = 0;

 cleanup:
    xmlKeepBlanksDefault(keepBlanksDefault);
    xmlFreeDoc(xml);
    virObjectUnref(obj);
    VIR_FREE(expect);
    VIR_FREE(actual);
    VIR_FREE(source);
180 181
    VIR_FREE(inFile);
    VIR_FREE(outActiveFile);
182 183 184 185
    return ret;
}


186 187 188 189 190 191
static void
testInfoFree(struct testInfo *info)
{
    VIR_FREE(info->inName);
    VIR_FREE(info->outActiveName);
    VIR_FREE(info->outInactiveName);
192 193

    virObjectUnref(info->qemuCaps);
194 195 196 197 198 199 200 201
}


static int
testInfoSet(struct testInfo *info,
            const char *name,
            int when)
{
202 203 204
    if (!(info->qemuCaps = virQEMUCapsNew()))
        goto error;

205 206 207 208
    virQEMUCapsSetList(info->qemuCaps,
                       QEMU_CAPS_DEVICE,
                       QEMU_CAPS_LAST);

209 210 211 212
    if (qemuTestCapsCacheInsert(driver.qemuCapsCache, name,
                                info->qemuCaps) < 0)
        goto error;

213 214 215 216 217
    if (virAsprintf(&info->inName, "%s/qemuxml2argvdata/qemuxml2argv-%s.xml",
                    abs_srcdir, name) < 0)
        goto error;

    if (when & WHEN_INACTIVE) {
218 219 220 221
        if (virAsprintf(&info->outInactiveName,
                        "%s/qemuxml2xmloutdata/qemuxml2xmlout-%s-inactive.xml",
                        abs_srcdir, name) < 0)
            goto error;
222

223 224
        if (!virFileExists(info->outInactiveName)) {
            VIR_FREE(info->outInactiveName);
225

226 227 228
            if (virAsprintf(&info->outInactiveName,
                            "%s/qemuxml2xmloutdata/qemuxml2xmlout-%s.xml",
                            abs_srcdir, name) < 0)
229 230
                goto error;
        }
231
    }
232

233
    if (when & WHEN_ACTIVE) {
234 235 236 237
        if (virAsprintf(&info->outActiveName,
                        "%s/qemuxml2xmloutdata/qemuxml2xmlout-%s-active.xml",
                        abs_srcdir, name) < 0)
            goto error;
238

239 240
        if (!virFileExists(info->outActiveName)) {
            VIR_FREE(info->outActiveName);
241

242 243 244
            if (virAsprintf(&info->outActiveName,
                            "%s/qemuxml2xmloutdata/qemuxml2xmlout-%s.xml",
                            abs_srcdir, name) < 0)
245 246
                goto error;
        }
247
    }
248

249
    return 0;
250

251 252 253
 error:
    testInfoFree(info);
    return -1;
254 255 256
}


257
static int
E
Eric Blake 已提交
258
mymain(void)
259 260
{
    int ret = 0;
261
    struct testInfo info;
262

263
    if (qemuTestDriverInit(&driver) < 0)
264
        return EXIT_FAILURE;
265

266 267
    /* TODO: test with format probing disabled too */
    driver.config->allowDiskFormatProbing = true;
268

269
# define DO_TEST_FULL(name, when, ...)                                        \
270
    do {                                                                       \
271
        if (testInfoSet(&info, name, when) < 0) {                             \
272
            VIR_TEST_DEBUG("Failed to generate test data for '%s'", name);    \
273 274
            return -1;                                                         \
        }                                                                      \
275
        virQEMUCapsSetList(info.qemuCaps, __VA_ARGS__, QEMU_CAPS_LAST);        \
276 277 278 279 280 281 282 283 284 285
                                                                               \
        if (info.outInactiveName) {                                            \
            if (virtTestRun("QEMU XML-2-XML-inactive " name,                   \
                            testXML2XMLInactive, &info) < 0)                   \
                ret = -1;                                                      \
        }                                                                      \
                                                                               \
        if (info.outActiveName) {                                              \
            if (virtTestRun("QEMU XML-2-XML-active " name,                     \
                            testXML2XMLActive, &info) < 0)                     \
286 287 288 289
                ret = -1;                                                      \
                                                                               \
            if (virtTestRun("QEMU XML-2-XML-status " name,                     \
                            testCompareStatusXMLToXMLFiles, &info) < 0)        \
290 291 292
                ret = -1;                                                      \
        }                                                                      \
        testInfoFree(&info);                                                   \
293 294
    } while (0)

295 296
# define NONE QEMU_CAPS_LAST

297
# define DO_TEST(name) \
298 299 300
    DO_TEST_FULL(name, WHEN_BOTH, NONE)


301 302 303 304 305

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

    DO_TEST("minimal");
308 309
    DO_TEST("machine-core-on");
    DO_TEST("machine-core-off");
310 311
    DO_TEST("default-kvm-host-arch");
    DO_TEST("default-qemu-host-arch");
312 313 314
    DO_TEST("boot-cdrom");
    DO_TEST("boot-network");
    DO_TEST("boot-floppy");
315
    DO_TEST("boot-multi");
316
    DO_TEST("boot-menu-enable-with-timeout");
317
    DO_TEST("boot-menu-disable");
318
    DO_TEST("boot-menu-disable-with-timeout");
319
    DO_TEST("boot-order");
320 321 322 323

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

324 325
    DO_TEST("clock-utc");
    DO_TEST("clock-localtime");
326
    DO_TEST("cpu-empty");
327 328
    DO_TEST("cpu-kvmclock");
    DO_TEST("cpu-host-kvmclock");
329
    DO_TEST("cpu-host-passthrough-features");
330
    DO_TEST("cpu-host-model-features");
331
    DO_TEST("clock-catchup");
332
    DO_TEST("kvmclock");
333
    DO_TEST("clock-timer-hyperv-rtc");
334 335 336 337 338

    DO_TEST("cpu-eoi-disabled");
    DO_TEST("cpu-eoi-enabled");
    DO_TEST("eoi-disabled");
    DO_TEST("eoi-enabled");
339 340
    DO_TEST("pv-spinlock-disabled");
    DO_TEST("pv-spinlock-enabled");
341

342
    DO_TEST("hyperv");
343
    DO_TEST("hyperv-off");
344
    DO_TEST("hyperv-panic");
345

346 347 348
    DO_TEST("kvm-features");
    DO_TEST("kvm-features-off");

349
    DO_TEST("pmu-feature");
350 351
    DO_TEST("pmu-feature-off");

352
    DO_TEST("hugepages");
353
    DO_TEST("hugepages-pages");
354 355
    DO_TEST("hugepages-pages2");
    DO_TEST("hugepages-pages3");
356
    DO_TEST("hugepages-shared");
357
    DO_TEST("nosharepages");
358 359 360
    DO_TEST("restore-v2");
    DO_TEST("migrate");
    DO_TEST("qemu-ns-no-env");
E
Eric Blake 已提交
361
    DO_TEST("disk-aio");
362
    DO_TEST("disk-cdrom");
363
    DO_TEST("disk-cdrom-empty");
364 365
    DO_TEST("disk-floppy");
    DO_TEST("disk-many");
366
    DO_TEST("disk-xenvbd");
367
    DO_TEST("disk-usb-device");
368
    DO_TEST("disk-virtio");
369
    DO_TEST("floppy-drive-fat");
370 371 372 373 374
    DO_TEST("disk-drive-boot-disk");
    DO_TEST("disk-drive-boot-cdrom");
    DO_TEST("disk-drive-error-policy-stop");
    DO_TEST("disk-drive-error-policy-enospace");
    DO_TEST("disk-drive-error-policy-wreport-rignore");
375
    DO_TEST("disk-drive-fat");
376
    DO_TEST("disk-drive-fmt-qcow");
377
    DO_TEST("disk-drive-copy-on-read");
378 379 380 381 382
    DO_TEST("disk-drive-cache-v2-wt");
    DO_TEST("disk-drive-cache-v2-wb");
    DO_TEST("disk-drive-cache-v2-none");
    DO_TEST("disk-drive-cache-directsync");
    DO_TEST("disk-drive-cache-unsafe");
383
    DO_TEST("disk-drive-network-nbd");
P
Paolo Bonzini 已提交
384
    DO_TEST("disk-drive-network-nbd-export");
P
Paolo Bonzini 已提交
385 386
    DO_TEST("disk-drive-network-nbd-ipv6");
    DO_TEST("disk-drive-network-nbd-ipv6-export");
387
    DO_TEST("disk-drive-network-nbd-unix");
388
    DO_TEST("disk-drive-network-iscsi");
389
    DO_TEST("disk-drive-network-iscsi-auth");
390 391 392 393 394 395
    DO_TEST("disk-drive-network-gluster");
    DO_TEST("disk-drive-network-rbd");
    DO_TEST("disk-drive-network-rbd-auth");
    DO_TEST("disk-drive-network-rbd-ipv6");
    DO_TEST("disk-drive-network-rbd-ceph-env");
    DO_TEST("disk-drive-network-sheepdog");
396 397 398
    DO_TEST_FULL("disk-scsi-device", WHEN_ACTIVE,
                 QEMU_CAPS_NODEFCONFIG,
                 QEMU_CAPS_SCSI_LSI);
399
    DO_TEST("disk-scsi-vscsi");
400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417
    DO_TEST_FULL("disk-scsi-virtio-scsi", WHEN_ACTIVE,
                 QEMU_CAPS_NODEFCONFIG,
                 QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST_FULL("disk-virtio-scsi-num_queues", WHEN_ACTIVE,
                 QEMU_CAPS_NODEFCONFIG,
                 QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST_FULL("disk-virtio-scsi-cmd_per_lun", WHEN_ACTIVE,
                 QEMU_CAPS_NODEFCONFIG,
                 QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST_FULL("disk-virtio-scsi-max_sectors", WHEN_ACTIVE,
                 QEMU_CAPS_NODEFCONFIG,
                 QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST_FULL("disk-virtio-scsi-ioeventfd", WHEN_ACTIVE,
                 QEMU_CAPS_NODEFCONFIG,
                 QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST_FULL("disk-scsi-megasas", WHEN_ACTIVE,
                 QEMU_CAPS_NODEFCONFIG,
                 QEMU_CAPS_SCSI_MEGASAS);
418 419 420 421
    DO_TEST_FULL("disk-scsi-mptsas1068", WHEN_ACTIVE,
                 QEMU_CAPS_NODEFCONFIG,
                 QEMU_CAPS_SCSI_MPTSAS1068,
                 QEMU_CAPS_SCSI_DISK_WWN);
422
    DO_TEST("disk-mirror-old");
423 424 425
    DO_TEST_FULL("disk-mirror", WHEN_ACTIVE, NONE);
    DO_TEST_FULL("disk-mirror", WHEN_INACTIVE, NONE);
    DO_TEST_FULL("disk-active-commit", WHEN_ACTIVE, NONE);
426
    DO_TEST("graphics-listen-network");
427
    DO_TEST("graphics-vnc");
428
    DO_TEST("graphics-vnc-websocket");
429 430
    DO_TEST("graphics-vnc-sasl");
    DO_TEST("graphics-vnc-tls");
431
    DO_TEST("graphics-sdl");
432
    DO_TEST("graphics-sdl-fullscreen");
433
    DO_TEST("graphics-spice");
434
    DO_TEST("graphics-spice-compression");
435
    DO_TEST("graphics-spice-qxl-vga");
436
    DO_TEST("nographics-vga");
437 438 439
    DO_TEST("input-usbmouse");
    DO_TEST("input-usbtablet");
    DO_TEST("misc-acpi");
440 441 442
    DO_TEST("misc-disable-s3");
    DO_TEST("misc-disable-suspends");
    DO_TEST("misc-enable-s4");
443
    DO_TEST("misc-no-reboot");
444
    DO_TEST("misc-uuid");
M
Michele Paolino 已提交
445
    DO_TEST("net-vhostuser");
446
    DO_TEST("net-user");
447
    DO_TEST("net-virtio");
448
    DO_TEST("net-virtio-device");
449
    DO_TEST("net-virtio-disable-offloads");
450 451
    DO_TEST("net-eth");
    DO_TEST("net-eth-ifname");
452
    DO_TEST("net-virtio-network-portgroup");
453
    DO_TEST("net-hostdev");
454
    DO_TEST("net-hostdev-vfio");
455
    DO_TEST("net-midonet");
456
    DO_TEST("net-openvswitch");
457
    DO_TEST("sound");
458
    DO_TEST("sound-device");
459
    DO_TEST("watchdog");
460
    DO_TEST("net-bandwidth");
461
    DO_TEST("net-bandwidth2");
462 463 464 465 466 467 468 469 470 471

    DO_TEST("serial-vc");
    DO_TEST("serial-pty");
    DO_TEST("serial-dev");
    DO_TEST("serial-file");
    DO_TEST("serial-unix");
    DO_TEST("serial-tcp");
    DO_TEST("serial-udp");
    DO_TEST("serial-tcp-telnet");
    DO_TEST("serial-many");
472 473
    DO_TEST("serial-spiceport");
    DO_TEST("serial-spiceport-nospice");
474 475
    DO_TEST("parallel-tcp");
    DO_TEST("console-compat");
476
    DO_TEST("console-compat2");
477
    DO_TEST("console-virtio-many");
478
    DO_TEST("channel-guestfwd");
479
    DO_TEST("channel-virtio");
480
    DO_TEST("channel-virtio-state");
481

482
    DO_TEST("hostdev-usb-address");
483
    DO_TEST("hostdev-pci-address");
484
    DO_TEST("hostdev-vfio");
485
    DO_TEST("pci-rom");
M
Michal Privoznik 已提交
486
    DO_TEST("pci-serial-dev-chardev");
487

488
    DO_TEST("encrypted-disk");
489 490
    DO_TEST("memtune");
    DO_TEST("memtune-unlimited");
491
    DO_TEST("blkiotune");
492
    DO_TEST("blkiotune-device");
O
Osier Yang 已提交
493
    DO_TEST("cputune");
494
    DO_TEST("cputune-zero-shares");
495
    DO_TEST("cputune-iothreadsched");
496
    DO_TEST("cputune-iothreadsched-zeropriority");
497
    DO_TEST("cputune-numatune");
498 499
    DO_TEST_FULL("vcpu-placement-static", WHEN_ACTIVE,
                 QEMU_CAPS_DEVICE_PCI_BRIDGE);
500

501
    DO_TEST("smp");
J
John Ferlan 已提交
502
    DO_TEST("iothreads");
503 504
    DO_TEST("iothreads-ids");
    DO_TEST("iothreads-ids-partial");
505
    DO_TEST("cputune-iothreads");
506
    DO_TEST("iothreads-disk");
507 508
    DO_TEST_FULL("iothreads-disk-virtio-ccw", WHEN_ACTIVE,
                 QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
509
    DO_TEST("lease");
510
    DO_TEST("event_idx");
511
    DO_TEST("vhost_queues");
512
    DO_TEST("interface-driver");
513
    DO_TEST("interface-server");
514
    DO_TEST("virtio-lun");
515

516
    DO_TEST("usb-redir");
517 518
    DO_TEST("usb-redir-filter");
    DO_TEST("usb-redir-filter-version");
L
Lei Li 已提交
519
    DO_TEST("blkdeviotune");
520
    DO_TEST("controller-usb-order");
521

522 523 524 525
    DO_TEST_FULL("seclabel-dynamic-baselabel", WHEN_INACTIVE, NONE);
    DO_TEST_FULL("seclabel-dynamic-override", WHEN_INACTIVE, NONE);
    DO_TEST_FULL("seclabel-dynamic-labelskip", WHEN_INACTIVE, NONE);
    DO_TEST_FULL("seclabel-dynamic-relabel", WHEN_INACTIVE, NONE);
526
    DO_TEST("seclabel-static");
527
    DO_TEST_FULL("seclabel-static-labelskip", WHEN_ACTIVE, NONE);
528
    DO_TEST("seclabel-none");
529
    DO_TEST("seclabel-dac-none");
530
    DO_TEST("seclabel-dynamic-none");
531
    DO_TEST("seclabel-device-multiple");
532
    DO_TEST_FULL("seclabel-dynamic-none-relabel", WHEN_INACTIVE, NONE);
533
    DO_TEST("numad-static-vcpu-no-numatune");
534

535 536 537 538 539 540 541 542
    DO_TEST_FULL("disk-scsi-lun-passthrough-sgio", WHEN_ACTIVE,
                 QEMU_CAPS_NODEFCONFIG,
                 QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
                 QEMU_CAPS_SCSI_DISK_WWN);
    DO_TEST_FULL("disk-scsi-disk-vpd", WHEN_ACTIVE,
                 QEMU_CAPS_NODEFCONFIG,
                 QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
                 QEMU_CAPS_SCSI_DISK_WWN);
543
    DO_TEST("disk-source-pool");
544
    DO_TEST("disk-source-pool-mode");
545

546
    DO_TEST("disk-drive-discard");
O
Osier Yang 已提交
547

548 549 550
    DO_TEST("virtio-rng-random");
    DO_TEST("virtio-rng-egd");

551
    DO_TEST("pseries-nvram");
552 553
    DO_TEST("pseries-panic-missing");
    DO_TEST("pseries-panic-no-address");
554

555 556 557 558
    DO_TEST("balloon-device-auto");
    DO_TEST("balloon-device-period");
    DO_TEST("channel-virtio-auto");
    DO_TEST("console-compat-auto");
559 560 561
    DO_TEST_FULL("disk-scsi-device-auto", WHEN_ACTIVE,
                 QEMU_CAPS_NODEFCONFIG,
                 QEMU_CAPS_SCSI_LSI);
562 563 564 565 566 567 568 569
    DO_TEST("console-virtio");
    DO_TEST("serial-target-port-auto");
    DO_TEST("graphics-listen-network2");
    DO_TEST("graphics-spice-timeout");
    DO_TEST("numad-auto-vcpu-no-numatune");
    DO_TEST("numad-auto-memory-vcpu-no-cpuset-and-placement");
    DO_TEST("numad-auto-memory-vcpu-cpuset");
    DO_TEST("usb-ich9-ehci-addr");
570 571
    DO_TEST("disk-copy_on_read");
    DO_TEST("tpm-passthrough");
572 573 574

    DO_TEST("metadata");
    DO_TEST("metadata-duplicate");
575

576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685
    DO_TEST_FULL("pci-bridge", WHEN_ACTIVE,
                 QEMU_CAPS_DEVICE_PCI_BRIDGE);
    DO_TEST_FULL("pci-bridge-many-disks", WHEN_ACTIVE,
                 QEMU_CAPS_DEVICE_PCI_BRIDGE);
    DO_TEST_FULL("pci-autoadd-addr", WHEN_ACTIVE,
                 QEMU_CAPS_DEVICE_PCI_BRIDGE);
    DO_TEST_FULL("pci-autoadd-idx", WHEN_ACTIVE,
                 QEMU_CAPS_DEVICE_PCI_BRIDGE);

    DO_TEST_FULL("q35", WHEN_ACTIVE,
                 QEMU_CAPS_DEVICE_PCI_BRIDGE,
                 QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
                 QEMU_CAPS_ICH9_AHCI,
                 QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
                 QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
                 QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
    DO_TEST_FULL("q35-usb2", WHEN_ACTIVE,
                 QEMU_CAPS_DEVICE_PCI_BRIDGE,
                 QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
                 QEMU_CAPS_ICH9_AHCI,
                 QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
                 QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
                 QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
    DO_TEST_FULL("q35-usb2-multi", WHEN_ACTIVE,
                 QEMU_CAPS_DEVICE_PCI_BRIDGE,
                 QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
                 QEMU_CAPS_ICH9_AHCI,
                 QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
                 QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
                 QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
    DO_TEST_FULL("q35-usb2-reorder", WHEN_ACTIVE,
                 QEMU_CAPS_DEVICE_PCI_BRIDGE,
                 QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
                 QEMU_CAPS_ICH9_AHCI,
                 QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
                 QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
                 QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);

    DO_TEST_FULL("pcie-root", WHEN_ACTIVE,
                 QEMU_CAPS_DEVICE_PCI_BRIDGE,
                 QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
                 QEMU_CAPS_DEVICE_IOH3420,
                 QEMU_CAPS_ICH9_AHCI,
                 QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
                 QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
    DO_TEST_FULL("pcie-root-port", WHEN_ACTIVE,
                 QEMU_CAPS_DEVICE_PCI_BRIDGE,
                 QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
                 QEMU_CAPS_DEVICE_IOH3420,
                 QEMU_CAPS_ICH9_AHCI,
                 QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
                 QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
    DO_TEST_FULL("pcie-switch-upstream-port", WHEN_ACTIVE,
                 QEMU_CAPS_DEVICE_PCI_BRIDGE,
                 QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
                 QEMU_CAPS_DEVICE_IOH3420,
                 QEMU_CAPS_ICH9_AHCI,
                 QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
                 QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
    DO_TEST_FULL("pcie-switch-downstream-port", WHEN_ACTIVE,
                 QEMU_CAPS_DEVICE_PCI_BRIDGE,
                 QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
                 QEMU_CAPS_DEVICE_IOH3420,
                 QEMU_CAPS_ICH9_AHCI,
                 QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
                 QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);


    DO_TEST_FULL("hostdev-scsi-lsi", WHEN_ACTIVE,
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);
    DO_TEST_FULL("hostdev-scsi-virtio-scsi", WHEN_ACTIVE,
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);
    DO_TEST_FULL("hostdev-scsi-readonly", WHEN_ACTIVE,
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);

    DO_TEST_FULL("hostdev-scsi-shareable", WHEN_ACTIVE,
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);
    DO_TEST_FULL("hostdev-scsi-sgio", WHEN_ACTIVE,
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);
    DO_TEST_FULL("hostdev-scsi-rawio", WHEN_ACTIVE,
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);

    DO_TEST_FULL("hostdev-scsi-autogen-address", WHEN_ACTIVE,
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);
    DO_TEST_FULL("hostdev-scsi-large-unit", WHEN_ACTIVE,
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);

    DO_TEST_FULL("hostdev-scsi-lsi-iscsi", WHEN_ACTIVE,
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);
    DO_TEST_FULL("hostdev-scsi-lsi-iscsi-auth", WHEN_ACTIVE,
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);
    DO_TEST_FULL("hostdev-scsi-virtio-iscsi", WHEN_ACTIVE,
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);
    DO_TEST_FULL("hostdev-scsi-virtio-iscsi-auth", WHEN_ACTIVE,
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);

    DO_TEST_FULL("s390-defaultconsole", WHEN_ACTIVE,
                 QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
686

687
    DO_TEST("pcihole64");
688
    DO_TEST("pcihole64-gib");
689
    DO_TEST("pcihole64-none");
690 691 692 693 694 695 696
    DO_TEST_FULL("pcihole64-q35", WHEN_ACTIVE,
                 QEMU_CAPS_DEVICE_PCI_BRIDGE,
                 QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
                 QEMU_CAPS_ICH9_AHCI,
                 QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
                 QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL,
                 QEMU_CAPS_Q35_PCI_HOLE64_SIZE);
697

698
    DO_TEST("panic");
699 700
    DO_TEST("panic-isa");
    DO_TEST("panic-pseries");
D
Dmitry Andreev 已提交
701
    DO_TEST("panic-double");
702
    DO_TEST("panic-no-address");
H
Hu Tao 已提交
703

704
    DO_TEST("disk-backing-chains");
705

J
Ján Tomko 已提交
706 707
    DO_TEST("chardev-label");

708 709 710 711
    DO_TEST("cpu-numa1");
    DO_TEST("cpu-numa2");
    DO_TEST("cpu-numa-no-memory-element");
    DO_TEST("cpu-numa-disordered");
712
    DO_TEST("cpu-numa-disjoint");
713
    DO_TEST("cpu-numa-memshared");
714

715 716
    DO_TEST("numatune-auto-prefer");
    DO_TEST("numatune-memnode");
717
    DO_TEST("numatune-memnode-no-memory");
718

719
    DO_TEST("bios-nvram");
720
    DO_TEST("bios-nvram-os-interleave");
721

722
    DO_TEST("tap-vhost");
723
    DO_TEST("tap-vhost-incorrect");
724
    DO_TEST("shmem");
725
    DO_TEST("smbios");
726
    DO_TEST("smbios-multiple-type2");
727

728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743
    DO_TEST_FULL("aarch64-aavmf-virtio-mmio", WHEN_ACTIVE,
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
    DO_TEST_FULL("aarch64-virtio-pci-default", WHEN_ACTIVE,
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_VIRTIO_SCSI);
    DO_TEST_FULL("aarch64-virtio-pci-manual-addresses", WHEN_ACTIVE,
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM,
            QEMU_CAPS_OBJECT_GPEX, QEMU_CAPS_DEVICE_PCI_BRIDGE,
            QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, QEMU_CAPS_VIRTIO_SCSI);
744 745 746

    DO_TEST("aarch64-gic-none");
    DO_TEST("aarch64-gic-default");
747 748
    DO_TEST("aarch64-gic-v2");
    DO_TEST("aarch64-gic-v3");
749
    DO_TEST("aarch64-gic-host");
750

751 752
    DO_TEST("memory-hotplug");
    DO_TEST("memory-hotplug-nonuma");
753
    DO_TEST("memory-hotplug-dimm");
754
    DO_TEST("net-udp");
755

M
Marc-André Lureau 已提交
756
    DO_TEST("video-virtio-gpu-device");
757
    DO_TEST("video-virtio-gpu-virgl");
758
    DO_TEST("virtio-input");
759
    DO_TEST("virtio-input-passthrough");
M
Marc-André Lureau 已提交
760

761
    qemuTestDriverFree(&driver);
762

763
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
764 765
}

766 767
VIRT_TEST_MAIN(mymain)

768 769
#else

770 771 772 773 774
int
main(void)
{
    return EXIT_AM_SKIP;
}
775 776

#endif /* WITH_QEMU */