qemuxml2xmltest.c 18.6 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 35 36 37 38 39 40 41 42 43 44 45 46
enum {
    WHEN_INACTIVE = 1,
    WHEN_ACTIVE = 2,
    WHEN_BOTH = 3,
};

struct testInfo {
    char *inName;
    char *inFile;

    char *outActiveName;
    char *outActiveFile;

    char *outInactiveName;
    char *outInactiveFile;
};

static int
testXML2XMLActive(const void *opaque)
{
    const struct testInfo *info = opaque;

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

51

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

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

61

62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
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"
81 82
"  </devices>\n"
"  <numad nodeset='0-2'/>\n";
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108

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;
    int ret = -1;
    int keepBlanksDefault = xmlKeepBlanksDefault(0);

    /* construct faked source status XML */
    virBufferAdd(&buf, testStatusXMLPrefix, -1);
    virBufferAdjustIndent(&buf, 2);
    virBufferAddStr(&buf, data->inFile);
    virBufferAdjustIndent(&buf, -2);
    virBufferAdd(&buf, testStatusXMLSuffix, -1);

    if (!(source = virBufferContentAndReset(&buf))) {
109
        VIR_TEST_DEBUG("Failed to create the source XML");
110 111 112 113 114 115 116 117 118 119 120
        goto cleanup;
    }

    /* construct the expect string */
    virBufferAdd(&buf, testStatusXMLPrefix, -1);
    virBufferAdjustIndent(&buf, 2);
    virBufferAddStr(&buf, data->outActiveFile);
    virBufferAdjustIndent(&buf, -2);
    virBufferAdd(&buf, testStatusXMLSuffix, -1);

    if (!(expect = virBufferContentAndReset(&buf))) {
121
        VIR_TEST_DEBUG("Failed to create the expect XML");
122 123 124 125 126 127 128 129 130
        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 |
131
                                      VIR_DOMAIN_DEF_PARSE_PCI_ORIG_STATES))) {
132
        VIR_TEST_DEBUG("Failed to parse domain status XML:\n%s", source);
133 134 135 136 137 138
        goto cleanup;
    }

    /* format it back */
    if (!(actual = virDomainObjFormat(driver.xmlopt, obj,
                                      VIR_DOMAIN_DEF_FORMAT_SECURE))) {
139
        VIR_TEST_DEBUG("Failed to format domain status XML");
140 141 142 143
        goto cleanup;
    }

    if (STRNEQ(actual, expect)) {
144 145 146 147 148
        /* For status test we don't want to regenerate output to not
         * add the status data.*/
        virtTestDifferenceFullNoRegenerate(stderr,
                                           expect, data->outActiveName,
                                           actual, data->inName);
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
        goto cleanup;
    }

    ret = 0;

 cleanup:
    xmlKeepBlanksDefault(keepBlanksDefault);
    xmlFreeDoc(xml);
    virObjectUnref(obj);
    VIR_FREE(expect);
    VIR_FREE(actual);
    VIR_FREE(source);
    return ret;
}


165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 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 211 212 213
static void
testInfoFree(struct testInfo *info)
{
    VIR_FREE(info->inName);
    VIR_FREE(info->inFile);

    VIR_FREE(info->outActiveName);
    VIR_FREE(info->outActiveFile);

    VIR_FREE(info->outInactiveName);
    VIR_FREE(info->outInactiveFile);
}


static int
testInfoSet(struct testInfo *info,
            const char *name,
            bool different,
            int when)
{
    if (virAsprintf(&info->inName, "%s/qemuxml2argvdata/qemuxml2argv-%s.xml",
                    abs_srcdir, name) < 0)
        goto error;

    if (virtTestLoadFile(info->inName, &info->inFile) < 0)
        goto error;

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

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

                if (virAsprintf(&info->outInactiveName,
                                "%s/qemuxml2xmloutdata/qemuxml2xmlout-%s.xml",
                                abs_srcdir, name) < 0)
                    goto error;
            }
        } else {
            if (VIR_STRDUP(info->outInactiveName, info->inName) < 0)
                goto error;
        }

        if (virtTestLoadFile(info->outInactiveName, &info->outInactiveFile) < 0)
            goto error;
214
    }
215

216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237
    if (when & WHEN_ACTIVE) {
        if (different) {
            if (virAsprintf(&info->outActiveName,
                           "%s/qemuxml2xmloutdata/qemuxml2xmlout-%s-active.xml",
                           abs_srcdir, name) < 0)
                goto error;

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

                if (virAsprintf(&info->outActiveName,
                                "%s/qemuxml2xmloutdata/qemuxml2xmlout-%s.xml",
                                abs_srcdir, name) < 0)
                    goto error;
            }
        } else {
            if (VIR_STRDUP(info->outActiveName, info->inName) < 0)
                goto error;
        }

        if (virtTestLoadFile(info->outActiveName, &info->outActiveFile) < 0)
            goto error;
238
    }
239

240
    return 0;
241

242 243 244
 error:
    testInfoFree(info);
    return -1;
245 246 247
}


248
static int
E
Eric Blake 已提交
249
mymain(void)
250 251
{
    int ret = 0;
252
    struct testInfo info;
253

254
    if (qemuTestDriverInit(&driver) < 0)
255
        return EXIT_FAILURE;
256

257 258
    /* TODO: test with format probing disabled too */
    driver.config->allowDiskFormatProbing = true;
259

260 261 262
# define DO_TEST_FULL(name, is_different, when)                                \
    do {                                                                       \
        if (testInfoSet(&info, name, is_different, when) < 0) {                \
263
            VIR_TEST_DEBUG("Failed to generate test data for '%s'", name);    \
264 265 266 267 268 269 270 271 272 273 274 275
            return -1;                                                         \
        }                                                                      \
                                                                               \
        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)                     \
276 277 278 279
                ret = -1;                                                      \
                                                                               \
            if (virtTestRun("QEMU XML-2-XML-status " name,                     \
                            testCompareStatusXMLToXMLFiles, &info) < 0)        \
280 281 282
                ret = -1;                                                      \
        }                                                                      \
        testInfoFree(&info);                                                   \
283 284
    } while (0)

285
# define DO_TEST(name) \
286
    DO_TEST_FULL(name, false, WHEN_BOTH)
287 288

# define DO_TEST_DIFFERENT(name) \
289
    DO_TEST_FULL(name, true, WHEN_BOTH)
290 291 292 293 294

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

    DO_TEST("minimal");
297 298
    DO_TEST("machine-core-on");
    DO_TEST("machine-core-off");
299 300
    DO_TEST_DIFFERENT("default-kvm-host-arch");
    DO_TEST_DIFFERENT("default-qemu-host-arch");
301 302 303
    DO_TEST("boot-cdrom");
    DO_TEST("boot-network");
    DO_TEST("boot-floppy");
304
    DO_TEST("boot-multi");
305
    DO_TEST("boot-menu-enable-with-timeout");
306
    DO_TEST("boot-menu-disable");
307
    DO_TEST_DIFFERENT("boot-menu-disable-with-timeout");
308
    DO_TEST("boot-order");
309 310 311 312

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

313 314
    DO_TEST("clock-utc");
    DO_TEST("clock-localtime");
315
    DO_TEST_DIFFERENT("cpu-empty");
316 317
    DO_TEST("cpu-kvmclock");
    DO_TEST("cpu-host-kvmclock");
318
    DO_TEST("cpu-host-passthrough-features");
319
    DO_TEST("cpu-host-model-features");
320
    DO_TEST("clock-catchup");
321
    DO_TEST("kvmclock");
322
    DO_TEST("clock-timer-hyperv-rtc");
323 324 325 326 327

    DO_TEST("cpu-eoi-disabled");
    DO_TEST("cpu-eoi-enabled");
    DO_TEST("eoi-disabled");
    DO_TEST("eoi-enabled");
328 329
    DO_TEST("pv-spinlock-disabled");
    DO_TEST("pv-spinlock-enabled");
330

331
    DO_TEST("hyperv");
332
    DO_TEST("hyperv-off");
333
    DO_TEST("hyperv-panic");
334

335 336 337
    DO_TEST("kvm-features");
    DO_TEST("kvm-features-off");

338 339 340
    DO_TEST_DIFFERENT("pmu-feature");
    DO_TEST("pmu-feature-off");

341
    DO_TEST("hugepages");
342
    DO_TEST("hugepages-pages");
343 344
    DO_TEST("hugepages-pages2");
    DO_TEST("hugepages-pages3");
345
    DO_TEST("hugepages-shared");
346
    DO_TEST("nosharepages");
E
Eric Blake 已提交
347
    DO_TEST("disk-aio");
348 349 350
    DO_TEST("disk-cdrom");
    DO_TEST("disk-floppy");
    DO_TEST("disk-many");
351
    DO_TEST("disk-xenvbd");
352
    DO_TEST("disk-usb");
353
    DO_TEST("disk-virtio");
354 355
    DO_TEST("floppy-drive-fat");
    DO_TEST("disk-drive-fat");
356
    DO_TEST("disk-drive-fmt-qcow");
357
    DO_TEST("disk-drive-copy-on-read");
358
    DO_TEST("disk-drive-network-nbd");
P
Paolo Bonzini 已提交
359
    DO_TEST("disk-drive-network-nbd-export");
P
Paolo Bonzini 已提交
360 361
    DO_TEST("disk-drive-network-nbd-ipv6");
    DO_TEST("disk-drive-network-nbd-ipv6-export");
362
    DO_TEST("disk-drive-network-nbd-unix");
363
    DO_TEST("disk-drive-network-iscsi");
364
    DO_TEST("disk-drive-network-iscsi-auth");
365
    DO_TEST("disk-scsi-device");
366 367
    DO_TEST("disk-scsi-vscsi");
    DO_TEST("disk-scsi-virtio-scsi");
368
    DO_TEST("disk-virtio-scsi-num_queues");
369 370
    DO_TEST("disk-virtio-scsi-cmd_per_lun");
    DO_TEST("disk-virtio-scsi-max_sectors");
371
    DO_TEST("disk-virtio-scsi-ioeventfd");
372
    DO_TEST("disk-scsi-megasas");
E
Eric Blake 已提交
373
    DO_TEST_DIFFERENT("disk-mirror-old");
374 375
    DO_TEST_FULL("disk-mirror", false, WHEN_ACTIVE);
    DO_TEST_FULL("disk-mirror", true, WHEN_INACTIVE);
E
Eric Blake 已提交
376
    DO_TEST_FULL("disk-active-commit", false, WHEN_ACTIVE);
377
    DO_TEST("graphics-listen-network");
378
    DO_TEST("graphics-vnc");
379
    DO_TEST("graphics-vnc-websocket");
380 381
    DO_TEST("graphics-vnc-sasl");
    DO_TEST("graphics-vnc-tls");
382
    DO_TEST("graphics-sdl");
383
    DO_TEST("graphics-sdl-fullscreen");
384
    DO_TEST("graphics-spice");
385
    DO_TEST("graphics-spice-compression");
386
    DO_TEST("graphics-spice-qxl-vga");
387 388 389
    DO_TEST("input-usbmouse");
    DO_TEST("input-usbtablet");
    DO_TEST("misc-acpi");
390 391 392
    DO_TEST("misc-disable-s3");
    DO_TEST("misc-disable-suspends");
    DO_TEST("misc-enable-s4");
393
    DO_TEST("misc-no-reboot");
M
Michele Paolino 已提交
394
    DO_TEST("net-vhostuser");
395
    DO_TEST("net-user");
396
    DO_TEST("net-virtio");
397
    DO_TEST("net-virtio-device");
398
    DO_TEST("net-virtio-disable-offloads");
399 400
    DO_TEST("net-eth");
    DO_TEST("net-eth-ifname");
401
    DO_TEST("net-virtio-network-portgroup");
402
    DO_TEST("net-hostdev");
403
    DO_TEST("net-hostdev-vfio");
404
    DO_TEST("net-midonet");
405
    DO_TEST("net-openvswitch");
406
    DO_TEST("sound");
407
    DO_TEST("sound-device");
408
    DO_TEST("net-bandwidth");
409
    DO_TEST("net-bandwidth2");
410 411 412 413 414 415 416 417 418 419

    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");
420 421
    DO_TEST("serial-spiceport");
    DO_TEST("serial-spiceport-nospice");
422 423
    DO_TEST("parallel-tcp");
    DO_TEST("console-compat");
424
    DO_TEST_DIFFERENT("console-compat2");
425
    DO_TEST("console-virtio-many");
426
    DO_TEST("channel-guestfwd");
427
    DO_TEST("channel-virtio");
428
    DO_TEST_DIFFERENT("channel-virtio-state");
429

430
    DO_TEST("hostdev-usb-address");
431
    DO_TEST("hostdev-pci-address");
432
    DO_TEST("hostdev-vfio");
433
    DO_TEST("pci-rom");
M
Michal Privoznik 已提交
434
    DO_TEST("pci-serial-dev-chardev");
435

436
    DO_TEST("encrypted-disk");
E
Eric Blake 已提交
437
    DO_TEST_DIFFERENT("memtune");
438
    DO_TEST_DIFFERENT("memtune-unlimited");
439
    DO_TEST("blkiotune");
440
    DO_TEST("blkiotune-device");
O
Osier Yang 已提交
441
    DO_TEST("cputune");
442
    DO_TEST("cputune-zero-shares");
443
    DO_TEST_DIFFERENT("cputune-iothreadsched");
444
    DO_TEST("cputune-iothreadsched-zeropriority");
445 446
    DO_TEST("cputune-numatune");
    DO_TEST("vcpu-placement-static");
447

448
    DO_TEST("smp");
J
John Ferlan 已提交
449
    DO_TEST("iothreads");
450 451
    DO_TEST("iothreads-ids");
    DO_TEST("iothreads-ids-partial");
E
Eric Blake 已提交
452
    DO_TEST_DIFFERENT("cputune-iothreads");
453
    DO_TEST("iothreads-disk");
454
    DO_TEST("iothreads-disk-virtio-ccw");
455
    DO_TEST("lease");
456
    DO_TEST("event_idx");
457
    DO_TEST("vhost_queues");
458
    DO_TEST("interface-driver");
459
    DO_TEST("interface-server");
460
    DO_TEST("virtio-lun");
461

462
    DO_TEST("usb-redir");
463
    DO_TEST_DIFFERENT("usb-redir-filter");
464
    DO_TEST_DIFFERENT("usb-redir-filter-version");
L
Lei Li 已提交
465
    DO_TEST("blkdeviotune");
466
    DO_TEST_DIFFERENT("controller-usb-order");
467

468 469
    DO_TEST_FULL("seclabel-dynamic-baselabel", false, WHEN_INACTIVE);
    DO_TEST_FULL("seclabel-dynamic-override", false, WHEN_INACTIVE);
470
    DO_TEST_FULL("seclabel-dynamic-labelskip", true, WHEN_INACTIVE);
471
    DO_TEST_FULL("seclabel-dynamic-relabel", true, WHEN_INACTIVE);
472
    DO_TEST("seclabel-static");
473
    DO_TEST_FULL("seclabel-static-labelskip", false, WHEN_ACTIVE);
474
    DO_TEST_DIFFERENT("seclabel-none");
475
    DO_TEST("seclabel-dac-none");
476
    DO_TEST("seclabel-dynamic-none");
477
    DO_TEST("seclabel-device-multiple");
478
    DO_TEST_FULL("seclabel-dynamic-none-relabel", true, WHEN_INACTIVE);
479
    DO_TEST("numad-static-vcpu-no-numatune");
O
Osier Yang 已提交
480
    DO_TEST("disk-scsi-lun-passthrough-sgio");
481

482
    DO_TEST("disk-scsi-disk-vpd");
483
    DO_TEST_DIFFERENT("disk-source-pool");
484
    DO_TEST("disk-source-pool-mode");
485

486
    DO_TEST_DIFFERENT("disk-drive-discard");
O
Osier Yang 已提交
487

488 489 490
    DO_TEST("virtio-rng-random");
    DO_TEST("virtio-rng-egd");

491
    DO_TEST("pseries-nvram");
492
    DO_TEST_DIFFERENT("pseries-panic-missing");
493
    DO_TEST_DIFFERENT("pseries-panic-no-address");
494

495 496
    /* These tests generate different XML */
    DO_TEST_DIFFERENT("balloon-device-auto");
497
    DO_TEST_DIFFERENT("balloon-device-period");
498 499 500
    DO_TEST_DIFFERENT("channel-virtio-auto");
    DO_TEST_DIFFERENT("console-compat-auto");
    DO_TEST_DIFFERENT("disk-scsi-device-auto");
C
Cole Robinson 已提交
501
    DO_TEST_DIFFERENT("console-virtio");
M
Michal Novotny 已提交
502
    DO_TEST_DIFFERENT("serial-target-port-auto");
503
    DO_TEST_DIFFERENT("graphics-listen-network2");
504
    DO_TEST_DIFFERENT("graphics-spice-timeout");
505
    DO_TEST_DIFFERENT("numad-auto-vcpu-no-numatune");
506 507
    DO_TEST_DIFFERENT("numad-auto-memory-vcpu-no-cpuset-and-placement");
    DO_TEST_DIFFERENT("numad-auto-memory-vcpu-cpuset");
508
    DO_TEST_DIFFERENT("usb-ich9-ehci-addr");
509

510
    DO_TEST_DIFFERENT("metadata");
511
    DO_TEST_DIFFERENT("metadata-duplicate");
512

513
    DO_TEST("tpm-passthrough");
514
    DO_TEST("pci-bridge");
515
    DO_TEST_DIFFERENT("pci-bridge-many-disks");
516 517
    DO_TEST_DIFFERENT("pci-autoadd-addr");
    DO_TEST_DIFFERENT("pci-autoadd-idx");
518
    DO_TEST_DIFFERENT("pcie-root");
519
    DO_TEST_DIFFERENT("q35");
520
    DO_TEST("pcie-root-port");
521
    DO_TEST("pcie-root-port-too-many");
522
    DO_TEST("pcie-switch-upstream-port");
523
    DO_TEST("pcie-switch-downstream-port");
524

525 526
    DO_TEST("hostdev-scsi-lsi");
    DO_TEST("hostdev-scsi-virtio-scsi");
O
Osier Yang 已提交
527
    DO_TEST("hostdev-scsi-readonly");
H
Han Cheng 已提交
528

529
    DO_TEST("disk-copy_on_read");
530
    DO_TEST("hostdev-scsi-shareable");
O
Osier Yang 已提交
531
    DO_TEST("hostdev-scsi-sgio");
532
    DO_TEST("hostdev-scsi-rawio");
533

534
    DO_TEST_DIFFERENT("hostdev-scsi-autogen-address");
535
    DO_TEST("hostdev-scsi-large-unit");
536

J
John Ferlan 已提交
537 538 539 540 541
    DO_TEST("hostdev-scsi-lsi-iscsi");
    DO_TEST("hostdev-scsi-lsi-iscsi-auth");
    DO_TEST("hostdev-scsi-virtio-iscsi");
    DO_TEST("hostdev-scsi-virtio-iscsi-auth");

542 543
    DO_TEST_DIFFERENT("s390-defaultconsole");

544 545 546 547 548
    DO_TEST("pcihole64");
    DO_TEST_DIFFERENT("pcihole64-gib");
    DO_TEST("pcihole64-none");
    DO_TEST("pcihole64-q35");

549
    DO_TEST_DIFFERENT("panic");
550 551
    DO_TEST("panic-isa");
    DO_TEST("panic-pseries");
D
Dmitry Andreev 已提交
552
    DO_TEST("panic-double");
553
    DO_TEST("panic-no-address");
H
Hu Tao 已提交
554

555 556
    DO_TEST_DIFFERENT("disk-backing-chains");

J
Ján Tomko 已提交
557 558
    DO_TEST("chardev-label");

559 560
    DO_TEST_DIFFERENT("cpu-numa1");
    DO_TEST_DIFFERENT("cpu-numa2");
561
    DO_TEST_DIFFERENT("cpu-numa-no-memory-element");
562
    DO_TEST_DIFFERENT("cpu-numa-disordered");
563
    DO_TEST("cpu-numa-disjoint");
564
    DO_TEST("cpu-numa-memshared");
565

566
    DO_TEST_DIFFERENT("numatune-auto-prefer");
567 568
    DO_TEST_DIFFERENT("numatune-memnode");
    DO_TEST("numatune-memnode-no-memory");
569

570
    DO_TEST("bios-nvram");
571
    DO_TEST_DIFFERENT("bios-nvram-os-interleave");
572

573
    DO_TEST("tap-vhost");
574
    DO_TEST_DIFFERENT("tap-vhost-incorrect");
575
    DO_TEST("shmem");
576
    DO_TEST("smbios");
577
    DO_TEST("smbios-multiple-type2");
578
    DO_TEST("aarch64-aavmf-virtio-mmio");
579

580 581 582
    DO_TEST("aarch64-gic");
    DO_TEST("aarch64-gicv3");

583 584
    DO_TEST("memory-hotplug");
    DO_TEST("memory-hotplug-nonuma");
585
    DO_TEST("memory-hotplug-dimm");
586
    DO_TEST("net-udp");
587

M
Marc-André Lureau 已提交
588
    DO_TEST("video-virtio-gpu-device");
589
    DO_TEST("video-virtio-gpu-virgl");
590
    DO_TEST("virtio-input");
591
    DO_TEST("virtio-input-passthrough");
M
Marc-André Lureau 已提交
592

593
    qemuTestDriverFree(&driver);
594

595
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
596 597
}

598 599
VIRT_TEST_MAIN(mymain)

600 601
#else

602 603 604 605 606
int
main(void)
{
    return EXIT_AM_SKIP;
}
607 608

#endif /* WITH_QEMU */