qemuxml2xmltest.c 26.4 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
# include "internal.h"
J
Ján Tomko 已提交
16
# include "qemu/qemu_domain_address.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, 0);
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, 0);
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
"  </devices>\n"
92 93 94
"  <numad nodeset='0-2'/>\n"
"  <libDir path='/tmp'/>\n"
"  <channelTargetDir path='/tmp/channel'/>\n";
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109

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;
110
    char *inFile = NULL, *outActiveFile = NULL;
111 112 113
    int ret = -1;
    int keepBlanksDefault = xmlKeepBlanksDefault(0);

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

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

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

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

    if (!(expect = virBufferContentAndReset(&buf))) {
139
        VIR_TEST_DEBUG("Failed to create the expect XML");
140 141 142 143 144 145 146 147 148
        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 |
149
                                      VIR_DOMAIN_DEF_PARSE_PCI_ORIG_STATES))) {
150
        VIR_TEST_DEBUG("Failed to parse domain status XML:\n%s", source);
151 152 153
        goto cleanup;
    }

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

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

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

    ret = 0;

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


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

    virObjectUnref(info->qemuCaps);
196 197 198 199 200 201 202 203
}


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

207 208 209 210
    virQEMUCapsSetList(info->qemuCaps,
                       QEMU_CAPS_DEVICE,
                       QEMU_CAPS_LAST);

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

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

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

225 226
        if (!virFileExists(info->outInactiveName)) {
            VIR_FREE(info->outInactiveName);
227

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

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

241 242
        if (!virFileExists(info->outActiveName)) {
            VIR_FREE(info->outActiveName);
243

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

251
    return 0;
252

253 254 255
 error:
    testInfoFree(info);
    return -1;
256 257 258
}


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

265
    if (qemuTestDriverInit(&driver) < 0)
266
        return EXIT_FAILURE;
267

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

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

297 298
# define NONE QEMU_CAPS_LAST

299
# define DO_TEST(name) \
300 301 302
    DO_TEST_FULL(name, WHEN_BOTH, NONE)


303 304 305 306 307

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

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

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

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

    DO_TEST("cpu-eoi-disabled");
    DO_TEST("cpu-eoi-enabled");
    DO_TEST("eoi-disabled");
    DO_TEST("eoi-enabled");
341 342
    DO_TEST("pv-spinlock-disabled");
    DO_TEST("pv-spinlock-enabled");
343

344
    DO_TEST("hyperv");
345
    DO_TEST("hyperv-off");
346
    DO_TEST("hyperv-panic");
347

348 349 350
    DO_TEST("kvm-features");
    DO_TEST("kvm-features-off");

351
    DO_TEST("pmu-feature");
352 353
    DO_TEST("pmu-feature-off");

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

    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");
475 476
    DO_TEST("serial-spiceport");
    DO_TEST("serial-spiceport-nospice");
477 478
    DO_TEST("parallel-tcp");
    DO_TEST("console-compat");
479
    DO_TEST("console-compat2");
480
    DO_TEST("console-virtio-many");
481
    DO_TEST("channel-guestfwd");
482
    DO_TEST("channel-virtio");
483
    DO_TEST("channel-virtio-state");
484

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

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

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

519
    DO_TEST("usb-redir");
520 521
    DO_TEST("usb-redir-filter");
    DO_TEST("usb-redir-filter-version");
L
Lei Li 已提交
522
    DO_TEST("blkdeviotune");
523
    DO_TEST("controller-usb-order");
524

525 526 527 528
    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);
529
    DO_TEST("seclabel-static");
530
    DO_TEST_FULL("seclabel-static-labelskip", WHEN_ACTIVE, NONE);
531
    DO_TEST("seclabel-none");
532
    DO_TEST("seclabel-dac-none");
533
    DO_TEST("seclabel-dynamic-none");
534
    DO_TEST("seclabel-device-multiple");
535
    DO_TEST_FULL("seclabel-dynamic-none-relabel", WHEN_INACTIVE, NONE);
536
    DO_TEST("numad-static-vcpu-no-numatune");
537

538 539 540 541 542 543 544 545
    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);
546
    DO_TEST("disk-source-pool");
547
    DO_TEST("disk-source-pool-mode");
548

549
    DO_TEST("disk-drive-discard");
O
Osier Yang 已提交
550

551 552 553
    DO_TEST("virtio-rng-random");
    DO_TEST("virtio-rng-egd");

554
    DO_TEST("pseries-nvram");
555 556
    DO_TEST("pseries-panic-missing");
    DO_TEST("pseries-panic-no-address");
557

558 559 560 561
    DO_TEST("balloon-device-auto");
    DO_TEST("balloon-device-period");
    DO_TEST("channel-virtio-auto");
    DO_TEST("console-compat-auto");
562 563 564
    DO_TEST_FULL("disk-scsi-device-auto", WHEN_ACTIVE,
                 QEMU_CAPS_NODEFCONFIG,
                 QEMU_CAPS_SCSI_LSI);
565 566 567 568 569 570 571 572
    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");
573 574
    DO_TEST("disk-copy_on_read");
    DO_TEST("tpm-passthrough");
575 576 577

    DO_TEST("metadata");
    DO_TEST("metadata-duplicate");
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 686 687 688
    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);
689

690
    DO_TEST("pcihole64");
691
    DO_TEST("pcihole64-gib");
692
    DO_TEST("pcihole64-none");
693 694 695 696 697 698 699
    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);
700

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

707
    DO_TEST("disk-backing-chains");
708

J
Ján Tomko 已提交
709 710
    DO_TEST("chardev-label");

711 712 713 714
    DO_TEST("cpu-numa1");
    DO_TEST("cpu-numa2");
    DO_TEST("cpu-numa-no-memory-element");
    DO_TEST("cpu-numa-disordered");
715
    DO_TEST("cpu-numa-disjoint");
716
    DO_TEST("cpu-numa-memshared");
717

718 719
    DO_TEST("numatune-auto-prefer");
    DO_TEST("numatune-memnode");
720
    DO_TEST("numatune-memnode-no-memory");
721

722
    DO_TEST("bios-nvram");
723
    DO_TEST("bios-nvram-os-interleave");
724

725
    DO_TEST("tap-vhost");
726
    DO_TEST("tap-vhost-incorrect");
727
    DO_TEST("shmem");
728
    DO_TEST("smbios");
729
    DO_TEST("smbios-multiple-type2");
730

731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746
    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);
747 748 749

    DO_TEST("aarch64-gic-none");
    DO_TEST("aarch64-gic-default");
750 751
    DO_TEST("aarch64-gic-v2");
    DO_TEST("aarch64-gic-v3");
752
    DO_TEST("aarch64-gic-host");
753

754 755
    DO_TEST("memory-hotplug");
    DO_TEST("memory-hotplug-nonuma");
756
    DO_TEST("memory-hotplug-dimm");
757
    DO_TEST("net-udp");
758

M
Marc-André Lureau 已提交
759
    DO_TEST("video-virtio-gpu-device");
760
    DO_TEST("video-virtio-gpu-virgl");
761
    DO_TEST("video-virtio-gpu-spice-gl");
762
    DO_TEST("virtio-input");
763
    DO_TEST("virtio-input-passthrough");
M
Marc-André Lureau 已提交
764

765
    qemuTestDriverFree(&driver);
766

767
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
768 769
}

770 771
VIRT_TEST_MAIN(mymain)

772 773
#else

774 775 776 777 778
int
main(void)
{
    return EXIT_AM_SKIP;
}
779 780

#endif /* WITH_QEMU */