qemuxml2xmltest.c 18.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 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
enum {
    WHEN_INACTIVE = 1,
    WHEN_ACTIVE = 2,
    WHEN_BOTH = 3,
};

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

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

42 43
    return testCompareDomXML2XMLFiles(driver.caps, driver.xmlopt,
                                      info->inName, info->outActiveName, true);
44 45
}

46

47
static int
48
testXML2XMLInactive(const void *opaque)
49
{
50 51
    const struct testInfo *info = opaque;

52 53
    return testCompareDomXML2XMLFiles(driver.caps, driver.xmlopt, info->inName,
                                      info->outInactiveName, false);
54
}
55

56

57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
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"
76 77
"  </devices>\n"
"  <numad nodeset='0-2'/>\n";
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92

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;
93
    char *inFile = NULL, *outActiveFile = NULL;
94 95 96
    int ret = -1;
    int keepBlanksDefault = xmlKeepBlanksDefault(0);

97 98 99 100 101
    if (virtTestLoadFile(data->inName, &inFile) < 0)
        goto cleanup;
    if (virtTestLoadFile(data->outActiveName, &outActiveFile) < 0)
        goto cleanup;

102 103 104
    /* construct faked source status XML */
    virBufferAdd(&buf, testStatusXMLPrefix, -1);
    virBufferAdjustIndent(&buf, 2);
105
    virBufferAddStr(&buf, inFile);
106 107 108 109
    virBufferAdjustIndent(&buf, -2);
    virBufferAdd(&buf, testStatusXMLSuffix, -1);

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

    /* construct the expect string */
    virBufferAdd(&buf, testStatusXMLPrefix, -1);
    virBufferAdjustIndent(&buf, 2);
117
    virBufferAddStr(&buf, outActiveFile);
118 119 120 121
    virBufferAdjustIndent(&buf, -2);
    virBufferAdd(&buf, testStatusXMLSuffix, -1);

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

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

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

    ret = 0;

 cleanup:
    xmlKeepBlanksDefault(keepBlanksDefault);
    xmlFreeDoc(xml);
    virObjectUnref(obj);
    VIR_FREE(expect);
    VIR_FREE(actual);
    VIR_FREE(source);
162 163
    VIR_FREE(inFile);
    VIR_FREE(outActiveFile);
164 165 166 167
    return ret;
}


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
static void
testInfoFree(struct testInfo *info)
{
    VIR_FREE(info->inName);
    VIR_FREE(info->outActiveName);
    VIR_FREE(info->outInactiveName);
}


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 (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;
        }
206
    }
207

208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227
    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;
        }

228
    }
229

230
    return 0;
231

232 233 234
 error:
    testInfoFree(info);
    return -1;
235 236 237
}


238
static int
E
Eric Blake 已提交
239
mymain(void)
240 241
{
    int ret = 0;
242
    struct testInfo info;
243

244
    if (qemuTestDriverInit(&driver) < 0)
245
        return EXIT_FAILURE;
246

247 248
    /* TODO: test with format probing disabled too */
    driver.config->allowDiskFormatProbing = true;
249

250 251 252
# define DO_TEST_FULL(name, is_different, when)                                \
    do {                                                                       \
        if (testInfoSet(&info, name, is_different, when) < 0) {                \
253
            VIR_TEST_DEBUG("Failed to generate test data for '%s'", name);    \
254 255 256 257 258 259 260 261 262 263 264 265
            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)                     \
266 267 268 269
                ret = -1;                                                      \
                                                                               \
            if (virtTestRun("QEMU XML-2-XML-status " name,                     \
                            testCompareStatusXMLToXMLFiles, &info) < 0)        \
270 271 272
                ret = -1;                                                      \
        }                                                                      \
        testInfoFree(&info);                                                   \
273 274
    } while (0)

275
# define DO_TEST(name) \
276
    DO_TEST_FULL(name, false, WHEN_BOTH)
277 278

# define DO_TEST_DIFFERENT(name) \
279
    DO_TEST_FULL(name, true, WHEN_BOTH)
280 281 282 283 284

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

    DO_TEST("minimal");
287 288
    DO_TEST("machine-core-on");
    DO_TEST("machine-core-off");
289 290
    DO_TEST_DIFFERENT("default-kvm-host-arch");
    DO_TEST_DIFFERENT("default-qemu-host-arch");
291 292 293
    DO_TEST("boot-cdrom");
    DO_TEST("boot-network");
    DO_TEST("boot-floppy");
294
    DO_TEST("boot-multi");
295
    DO_TEST("boot-menu-enable-with-timeout");
296
    DO_TEST("boot-menu-disable");
297
    DO_TEST_DIFFERENT("boot-menu-disable-with-timeout");
298
    DO_TEST("boot-order");
299 300 301 302

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

303 304
    DO_TEST("clock-utc");
    DO_TEST("clock-localtime");
305
    DO_TEST_DIFFERENT("cpu-empty");
306 307
    DO_TEST("cpu-kvmclock");
    DO_TEST("cpu-host-kvmclock");
308
    DO_TEST("cpu-host-passthrough-features");
309
    DO_TEST("cpu-host-model-features");
310
    DO_TEST("clock-catchup");
311
    DO_TEST("kvmclock");
312
    DO_TEST("clock-timer-hyperv-rtc");
313 314 315 316 317

    DO_TEST("cpu-eoi-disabled");
    DO_TEST("cpu-eoi-enabled");
    DO_TEST("eoi-disabled");
    DO_TEST("eoi-enabled");
318 319
    DO_TEST("pv-spinlock-disabled");
    DO_TEST("pv-spinlock-enabled");
320

321
    DO_TEST("hyperv");
322
    DO_TEST("hyperv-off");
323
    DO_TEST("hyperv-panic");
324

325 326 327
    DO_TEST("kvm-features");
    DO_TEST("kvm-features-off");

328 329 330
    DO_TEST_DIFFERENT("pmu-feature");
    DO_TEST("pmu-feature-off");

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

    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");
410 411
    DO_TEST("serial-spiceport");
    DO_TEST("serial-spiceport-nospice");
412 413
    DO_TEST("parallel-tcp");
    DO_TEST("console-compat");
414
    DO_TEST_DIFFERENT("console-compat2");
415
    DO_TEST("console-virtio-many");
416
    DO_TEST("channel-guestfwd");
417
    DO_TEST("channel-virtio");
418
    DO_TEST_DIFFERENT("channel-virtio-state");
419

420
    DO_TEST("hostdev-usb-address");
421
    DO_TEST("hostdev-pci-address");
422
    DO_TEST("hostdev-vfio");
423
    DO_TEST("pci-rom");
M
Michal Privoznik 已提交
424
    DO_TEST("pci-serial-dev-chardev");
425

426
    DO_TEST("encrypted-disk");
E
Eric Blake 已提交
427
    DO_TEST_DIFFERENT("memtune");
428
    DO_TEST_DIFFERENT("memtune-unlimited");
429
    DO_TEST("blkiotune");
430
    DO_TEST("blkiotune-device");
O
Osier Yang 已提交
431
    DO_TEST("cputune");
432
    DO_TEST("cputune-zero-shares");
433
    DO_TEST_DIFFERENT("cputune-iothreadsched");
434
    DO_TEST("cputune-iothreadsched-zeropriority");
435 436
    DO_TEST("cputune-numatune");
    DO_TEST("vcpu-placement-static");
437

438
    DO_TEST("smp");
J
John Ferlan 已提交
439
    DO_TEST("iothreads");
440 441
    DO_TEST("iothreads-ids");
    DO_TEST("iothreads-ids-partial");
E
Eric Blake 已提交
442
    DO_TEST_DIFFERENT("cputune-iothreads");
443
    DO_TEST("iothreads-disk");
444
    DO_TEST("iothreads-disk-virtio-ccw");
445
    DO_TEST("lease");
446
    DO_TEST("event_idx");
447
    DO_TEST("vhost_queues");
448
    DO_TEST("interface-driver");
449
    DO_TEST("interface-server");
450
    DO_TEST("virtio-lun");
451

452
    DO_TEST("usb-redir");
453
    DO_TEST_DIFFERENT("usb-redir-filter");
454
    DO_TEST_DIFFERENT("usb-redir-filter-version");
L
Lei Li 已提交
455
    DO_TEST("blkdeviotune");
456
    DO_TEST_DIFFERENT("controller-usb-order");
457

458 459
    DO_TEST_FULL("seclabel-dynamic-baselabel", false, WHEN_INACTIVE);
    DO_TEST_FULL("seclabel-dynamic-override", false, WHEN_INACTIVE);
460
    DO_TEST_FULL("seclabel-dynamic-labelskip", true, WHEN_INACTIVE);
461
    DO_TEST_FULL("seclabel-dynamic-relabel", true, WHEN_INACTIVE);
462
    DO_TEST("seclabel-static");
463
    DO_TEST_FULL("seclabel-static-labelskip", false, WHEN_ACTIVE);
464
    DO_TEST_DIFFERENT("seclabel-none");
465
    DO_TEST("seclabel-dac-none");
466
    DO_TEST("seclabel-dynamic-none");
467
    DO_TEST("seclabel-device-multiple");
468
    DO_TEST_FULL("seclabel-dynamic-none-relabel", true, WHEN_INACTIVE);
469
    DO_TEST("numad-static-vcpu-no-numatune");
O
Osier Yang 已提交
470
    DO_TEST("disk-scsi-lun-passthrough-sgio");
471

472
    DO_TEST("disk-scsi-disk-vpd");
473
    DO_TEST_DIFFERENT("disk-source-pool");
474
    DO_TEST("disk-source-pool-mode");
475

476
    DO_TEST_DIFFERENT("disk-drive-discard");
O
Osier Yang 已提交
477

478 479 480
    DO_TEST("virtio-rng-random");
    DO_TEST("virtio-rng-egd");

481
    DO_TEST("pseries-nvram");
482
    DO_TEST_DIFFERENT("pseries-panic-missing");
483
    DO_TEST_DIFFERENT("pseries-panic-no-address");
484

485 486
    /* These tests generate different XML */
    DO_TEST_DIFFERENT("balloon-device-auto");
487
    DO_TEST_DIFFERENT("balloon-device-period");
488 489 490
    DO_TEST_DIFFERENT("channel-virtio-auto");
    DO_TEST_DIFFERENT("console-compat-auto");
    DO_TEST_DIFFERENT("disk-scsi-device-auto");
C
Cole Robinson 已提交
491
    DO_TEST_DIFFERENT("console-virtio");
M
Michal Novotny 已提交
492
    DO_TEST_DIFFERENT("serial-target-port-auto");
493
    DO_TEST_DIFFERENT("graphics-listen-network2");
494
    DO_TEST_DIFFERENT("graphics-spice-timeout");
495
    DO_TEST_DIFFERENT("numad-auto-vcpu-no-numatune");
496 497
    DO_TEST_DIFFERENT("numad-auto-memory-vcpu-no-cpuset-and-placement");
    DO_TEST_DIFFERENT("numad-auto-memory-vcpu-cpuset");
498
    DO_TEST_DIFFERENT("usb-ich9-ehci-addr");
499

500
    DO_TEST_DIFFERENT("metadata");
501
    DO_TEST_DIFFERENT("metadata-duplicate");
502

503
    DO_TEST("tpm-passthrough");
504
    DO_TEST("pci-bridge");
505
    DO_TEST_DIFFERENT("pci-bridge-many-disks");
506 507
    DO_TEST_DIFFERENT("pci-autoadd-addr");
    DO_TEST_DIFFERENT("pci-autoadd-idx");
508
    DO_TEST_DIFFERENT("pcie-root");
509
    DO_TEST_DIFFERENT("q35");
510
    DO_TEST("pcie-root-port");
511
    DO_TEST("pcie-root-port-too-many");
512
    DO_TEST("pcie-switch-upstream-port");
513
    DO_TEST("pcie-switch-downstream-port");
514

515 516
    DO_TEST("hostdev-scsi-lsi");
    DO_TEST("hostdev-scsi-virtio-scsi");
O
Osier Yang 已提交
517
    DO_TEST("hostdev-scsi-readonly");
H
Han Cheng 已提交
518

519
    DO_TEST("disk-copy_on_read");
520
    DO_TEST("hostdev-scsi-shareable");
O
Osier Yang 已提交
521
    DO_TEST("hostdev-scsi-sgio");
522
    DO_TEST("hostdev-scsi-rawio");
523

524
    DO_TEST_DIFFERENT("hostdev-scsi-autogen-address");
525
    DO_TEST("hostdev-scsi-large-unit");
526

J
John Ferlan 已提交
527 528 529 530 531
    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");

532 533
    DO_TEST_DIFFERENT("s390-defaultconsole");

534 535 536 537 538
    DO_TEST("pcihole64");
    DO_TEST_DIFFERENT("pcihole64-gib");
    DO_TEST("pcihole64-none");
    DO_TEST("pcihole64-q35");

539
    DO_TEST_DIFFERENT("panic");
540 541
    DO_TEST("panic-isa");
    DO_TEST("panic-pseries");
D
Dmitry Andreev 已提交
542
    DO_TEST("panic-double");
543
    DO_TEST("panic-no-address");
H
Hu Tao 已提交
544

545 546
    DO_TEST_DIFFERENT("disk-backing-chains");

J
Ján Tomko 已提交
547 548
    DO_TEST("chardev-label");

549 550
    DO_TEST_DIFFERENT("cpu-numa1");
    DO_TEST_DIFFERENT("cpu-numa2");
551
    DO_TEST_DIFFERENT("cpu-numa-no-memory-element");
552
    DO_TEST_DIFFERENT("cpu-numa-disordered");
553
    DO_TEST("cpu-numa-disjoint");
554
    DO_TEST("cpu-numa-memshared");
555

556
    DO_TEST_DIFFERENT("numatune-auto-prefer");
557 558
    DO_TEST_DIFFERENT("numatune-memnode");
    DO_TEST("numatune-memnode-no-memory");
559

560
    DO_TEST("bios-nvram");
561
    DO_TEST_DIFFERENT("bios-nvram-os-interleave");
562

563
    DO_TEST("tap-vhost");
564
    DO_TEST_DIFFERENT("tap-vhost-incorrect");
565
    DO_TEST("shmem");
566
    DO_TEST("smbios");
567
    DO_TEST("smbios-multiple-type2");
568
    DO_TEST("aarch64-aavmf-virtio-mmio");
569

570 571 572
    DO_TEST("aarch64-gic");
    DO_TEST("aarch64-gicv3");

573 574
    DO_TEST("memory-hotplug");
    DO_TEST("memory-hotplug-nonuma");
575
    DO_TEST("memory-hotplug-dimm");
576
    DO_TEST("net-udp");
577

M
Marc-André Lureau 已提交
578
    DO_TEST("video-virtio-gpu-device");
579
    DO_TEST("video-virtio-gpu-virgl");
580
    DO_TEST("virtio-input");
581
    DO_TEST("virtio-input-passthrough");
M
Marc-André Lureau 已提交
582

583
    qemuTestDriverFree(&driver);
584

585
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
586 587
}

588 589
VIRT_TEST_MAIN(mymain)

590 591
#else

592 593 594 595 596
int
main(void)
{
    return EXIT_AM_SKIP;
}
597 598

#endif /* WITH_QEMU */