qemuxml2xmltest.c 19.0 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
};

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

44
    return testCompareDomXML2XMLFiles(driver.caps, driver.xmlopt,
45 46
                                      info->inName, info->outActiveName, true,
                                      NULL, NULL);
47 48
}

49

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

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

60

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

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;
97
    char *inFile = NULL, *outActiveFile = NULL;
98 99 100
    int ret = -1;
    int keepBlanksDefault = xmlKeepBlanksDefault(0);

101 102 103 104 105
    if (virtTestLoadFile(data->inName, &inFile) < 0)
        goto cleanup;
    if (virtTestLoadFile(data->outActiveName, &outActiveFile) < 0)
        goto cleanup;

106 107 108
    /* construct faked source status XML */
    virBufferAdd(&buf, testStatusXMLPrefix, -1);
    virBufferAdjustIndent(&buf, 2);
109
    virBufferAddStr(&buf, inFile);
110 111 112 113
    virBufferAdjustIndent(&buf, -2);
    virBufferAdd(&buf, testStatusXMLSuffix, -1);

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

    /* construct the expect string */
    virBufferAdd(&buf, testStatusXMLPrefix, -1);
    virBufferAdjustIndent(&buf, 2);
121
    virBufferAddStr(&buf, outActiveFile);
122 123 124 125
    virBufferAdjustIndent(&buf, -2);
    virBufferAdd(&buf, testStatusXMLSuffix, -1);

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

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

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

    ret = 0;

 cleanup:
    xmlKeepBlanksDefault(keepBlanksDefault);
    xmlFreeDoc(xml);
    virObjectUnref(obj);
    VIR_FREE(expect);
    VIR_FREE(actual);
    VIR_FREE(source);
166 167
    VIR_FREE(inFile);
    VIR_FREE(outActiveFile);
168 169 170 171
    return ret;
}


172 173 174 175 176 177
static void
testInfoFree(struct testInfo *info)
{
    VIR_FREE(info->inName);
    VIR_FREE(info->outActiveName);
    VIR_FREE(info->outInactiveName);
178 179

    virObjectUnref(info->qemuCaps);
180 181 182 183 184 185 186 187
}


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

191 192 193 194
    virQEMUCapsSetList(info->qemuCaps,
                       QEMU_CAPS_DEVICE,
                       QEMU_CAPS_LAST);

195 196 197 198
    if (qemuTestCapsCacheInsert(driver.qemuCapsCache, name,
                                info->qemuCaps) < 0)
        goto error;

199 200 201 202 203
    if (virAsprintf(&info->inName, "%s/qemuxml2argvdata/qemuxml2argv-%s.xml",
                    abs_srcdir, name) < 0)
        goto error;

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

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

212 213 214
            if (virAsprintf(&info->outInactiveName,
                            "%s/qemuxml2xmloutdata/qemuxml2xmlout-%s.xml",
                            abs_srcdir, name) < 0)
215 216
                goto error;
        }
217
    }
218

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

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

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

235
    return 0;
236

237 238 239
 error:
    testInfoFree(info);
    return -1;
240 241 242
}


243
static int
E
Eric Blake 已提交
244
mymain(void)
245 246
{
    int ret = 0;
247
    struct testInfo info;
248

249
    if (qemuTestDriverInit(&driver) < 0)
250
        return EXIT_FAILURE;
251

252 253
    /* TODO: test with format probing disabled too */
    driver.config->allowDiskFormatProbing = true;
254

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

281 282
# define NONE QEMU_CAPS_LAST

283
# define DO_TEST(name) \
284 285 286
    DO_TEST_FULL(name, WHEN_BOTH, NONE)


287 288 289 290 291

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

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

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

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

    DO_TEST("cpu-eoi-disabled");
    DO_TEST("cpu-eoi-enabled");
    DO_TEST("eoi-disabled");
    DO_TEST("eoi-enabled");
325 326
    DO_TEST("pv-spinlock-disabled");
    DO_TEST("pv-spinlock-enabled");
327

328
    DO_TEST("hyperv");
329
    DO_TEST("hyperv-off");
330
    DO_TEST("hyperv-panic");
331

332 333 334
    DO_TEST("kvm-features");
    DO_TEST("kvm-features-off");

335
    DO_TEST("pmu-feature");
336 337
    DO_TEST("pmu-feature-off");

338
    DO_TEST("hugepages");
339
    DO_TEST("hugepages-pages");
340 341
    DO_TEST("hugepages-pages2");
    DO_TEST("hugepages-pages3");
342
    DO_TEST("hugepages-shared");
343
    DO_TEST("nosharepages");
344 345 346
    DO_TEST("restore-v2");
    DO_TEST("migrate");
    DO_TEST("qemu-ns-no-env");
E
Eric Blake 已提交
347
    DO_TEST("disk-aio");
348
    DO_TEST("disk-cdrom");
349
    DO_TEST("disk-cdrom-empty");
350 351
    DO_TEST("disk-floppy");
    DO_TEST("disk-many");
352
    DO_TEST("disk-xenvbd");
353
    DO_TEST("disk-usb-device");
354
    DO_TEST("disk-virtio");
355
    DO_TEST("floppy-drive-fat");
356 357 358 359 360
    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");
361
    DO_TEST("disk-drive-fat");
362
    DO_TEST("disk-drive-fmt-qcow");
363
    DO_TEST("disk-drive-copy-on-read");
364 365 366 367 368
    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");
369
    DO_TEST("disk-drive-network-nbd");
P
Paolo Bonzini 已提交
370
    DO_TEST("disk-drive-network-nbd-export");
P
Paolo Bonzini 已提交
371 372
    DO_TEST("disk-drive-network-nbd-ipv6");
    DO_TEST("disk-drive-network-nbd-ipv6-export");
373
    DO_TEST("disk-drive-network-nbd-unix");
374
    DO_TEST("disk-drive-network-iscsi");
375
    DO_TEST("disk-drive-network-iscsi-auth");
376 377 378 379 380 381
    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");
382
    DO_TEST("disk-scsi-device");
383 384
    DO_TEST("disk-scsi-vscsi");
    DO_TEST("disk-scsi-virtio-scsi");
385
    DO_TEST("disk-virtio-scsi-num_queues");
386 387
    DO_TEST("disk-virtio-scsi-cmd_per_lun");
    DO_TEST("disk-virtio-scsi-max_sectors");
388
    DO_TEST("disk-virtio-scsi-ioeventfd");
389
    DO_TEST("disk-scsi-megasas");
390
    DO_TEST("disk-mirror-old");
391 392 393
    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);
394
    DO_TEST("graphics-listen-network");
395
    DO_TEST("graphics-vnc");
396
    DO_TEST("graphics-vnc-websocket");
397 398
    DO_TEST("graphics-vnc-sasl");
    DO_TEST("graphics-vnc-tls");
399
    DO_TEST("graphics-sdl");
400
    DO_TEST("graphics-sdl-fullscreen");
401
    DO_TEST("graphics-spice");
402
    DO_TEST("graphics-spice-compression");
403
    DO_TEST("graphics-spice-qxl-vga");
404
    DO_TEST("nographics-vga");
405 406 407
    DO_TEST("input-usbmouse");
    DO_TEST("input-usbtablet");
    DO_TEST("misc-acpi");
408 409 410
    DO_TEST("misc-disable-s3");
    DO_TEST("misc-disable-suspends");
    DO_TEST("misc-enable-s4");
411
    DO_TEST("misc-no-reboot");
412
    DO_TEST("misc-uuid");
M
Michele Paolino 已提交
413
    DO_TEST("net-vhostuser");
414
    DO_TEST("net-user");
415
    DO_TEST("net-virtio");
416
    DO_TEST("net-virtio-device");
417
    DO_TEST("net-virtio-disable-offloads");
418 419
    DO_TEST("net-eth");
    DO_TEST("net-eth-ifname");
420
    DO_TEST("net-virtio-network-portgroup");
421
    DO_TEST("net-hostdev");
422
    DO_TEST("net-hostdev-vfio");
423
    DO_TEST("net-midonet");
424
    DO_TEST("net-openvswitch");
425
    DO_TEST("sound");
426
    DO_TEST("sound-device");
427
    DO_TEST("watchdog");
428
    DO_TEST("net-bandwidth");
429
    DO_TEST("net-bandwidth2");
430 431 432 433 434 435 436 437 438 439

    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");
440 441
    DO_TEST("serial-spiceport");
    DO_TEST("serial-spiceport-nospice");
442 443
    DO_TEST("parallel-tcp");
    DO_TEST("console-compat");
444
    DO_TEST("console-compat2");
445
    DO_TEST("console-virtio-many");
446
    DO_TEST("channel-guestfwd");
447
    DO_TEST("channel-virtio");
448
    DO_TEST("channel-virtio-state");
449

450
    DO_TEST("hostdev-usb-address");
451
    DO_TEST("hostdev-pci-address");
452
    DO_TEST("hostdev-vfio");
453
    DO_TEST("pci-rom");
M
Michal Privoznik 已提交
454
    DO_TEST("pci-serial-dev-chardev");
455

456
    DO_TEST("encrypted-disk");
457 458
    DO_TEST("memtune");
    DO_TEST("memtune-unlimited");
459
    DO_TEST("blkiotune");
460
    DO_TEST("blkiotune-device");
O
Osier Yang 已提交
461
    DO_TEST("cputune");
462
    DO_TEST("cputune-zero-shares");
463
    DO_TEST("cputune-iothreadsched");
464
    DO_TEST("cputune-iothreadsched-zeropriority");
465 466
    DO_TEST("cputune-numatune");
    DO_TEST("vcpu-placement-static");
467

468
    DO_TEST("smp");
J
John Ferlan 已提交
469
    DO_TEST("iothreads");
470 471
    DO_TEST("iothreads-ids");
    DO_TEST("iothreads-ids-partial");
472
    DO_TEST("cputune-iothreads");
473
    DO_TEST("iothreads-disk");
474
    DO_TEST("iothreads-disk-virtio-ccw");
475
    DO_TEST("lease");
476
    DO_TEST("event_idx");
477
    DO_TEST("vhost_queues");
478
    DO_TEST("interface-driver");
479
    DO_TEST("interface-server");
480
    DO_TEST("virtio-lun");
481

482
    DO_TEST("usb-redir");
483 484
    DO_TEST("usb-redir-filter");
    DO_TEST("usb-redir-filter-version");
L
Lei Li 已提交
485
    DO_TEST("blkdeviotune");
486
    DO_TEST("controller-usb-order");
487

488 489 490 491
    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);
492
    DO_TEST("seclabel-static");
493
    DO_TEST_FULL("seclabel-static-labelskip", WHEN_ACTIVE, NONE);
494
    DO_TEST("seclabel-none");
495
    DO_TEST("seclabel-dac-none");
496
    DO_TEST("seclabel-dynamic-none");
497
    DO_TEST("seclabel-device-multiple");
498
    DO_TEST_FULL("seclabel-dynamic-none-relabel", WHEN_INACTIVE, NONE);
499
    DO_TEST("numad-static-vcpu-no-numatune");
O
Osier Yang 已提交
500
    DO_TEST("disk-scsi-lun-passthrough-sgio");
501

502
    DO_TEST("disk-scsi-disk-vpd");
503
    DO_TEST("disk-source-pool");
504
    DO_TEST("disk-source-pool-mode");
505

506
    DO_TEST("disk-drive-discard");
O
Osier Yang 已提交
507

508 509 510
    DO_TEST("virtio-rng-random");
    DO_TEST("virtio-rng-egd");

511
    DO_TEST("pseries-nvram");
512 513
    DO_TEST("pseries-panic-missing");
    DO_TEST("pseries-panic-no-address");
514

515
    /* These tests generate different XML */
516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531
    DO_TEST("balloon-device-auto");
    DO_TEST("balloon-device-period");
    DO_TEST("channel-virtio-auto");
    DO_TEST("console-compat-auto");
    DO_TEST("disk-scsi-device-auto");
    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");

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

533
    DO_TEST("tpm-passthrough");
534
    DO_TEST("pci-bridge");
535 536 537 538 539 540 541 542
    DO_TEST("pci-bridge-many-disks");
    DO_TEST("pci-autoadd-addr");
    DO_TEST("pci-autoadd-idx");
    DO_TEST("pcie-root");
    DO_TEST("q35");
    DO_TEST("q35-usb2");
    DO_TEST("q35-usb2-multi");
    DO_TEST("q35-usb2-reorder");
543
    DO_TEST("pcie-root-port");
544
    DO_TEST("pcie-root-port-too-many");
545
    DO_TEST("pcie-switch-upstream-port");
546
    DO_TEST("pcie-switch-downstream-port");
547

548 549
    DO_TEST("hostdev-scsi-lsi");
    DO_TEST("hostdev-scsi-virtio-scsi");
O
Osier Yang 已提交
550
    DO_TEST("hostdev-scsi-readonly");
H
Han Cheng 已提交
551

552
    DO_TEST("disk-copy_on_read");
553
    DO_TEST("hostdev-scsi-shareable");
O
Osier Yang 已提交
554
    DO_TEST("hostdev-scsi-sgio");
555
    DO_TEST("hostdev-scsi-rawio");
556

557
    DO_TEST("hostdev-scsi-autogen-address");
558
    DO_TEST("hostdev-scsi-large-unit");
559

J
John Ferlan 已提交
560 561 562 563 564
    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");

565
    DO_TEST("s390-defaultconsole");
566

567
    DO_TEST("pcihole64");
568
    DO_TEST("pcihole64-gib");
569 570 571
    DO_TEST("pcihole64-none");
    DO_TEST("pcihole64-q35");

572
    DO_TEST("panic");
573 574
    DO_TEST("panic-isa");
    DO_TEST("panic-pseries");
D
Dmitry Andreev 已提交
575
    DO_TEST("panic-double");
576
    DO_TEST("panic-no-address");
H
Hu Tao 已提交
577

578
    DO_TEST("disk-backing-chains");
579

J
Ján Tomko 已提交
580 581
    DO_TEST("chardev-label");

582 583 584 585
    DO_TEST("cpu-numa1");
    DO_TEST("cpu-numa2");
    DO_TEST("cpu-numa-no-memory-element");
    DO_TEST("cpu-numa-disordered");
586
    DO_TEST("cpu-numa-disjoint");
587
    DO_TEST("cpu-numa-memshared");
588

589 590
    DO_TEST("numatune-auto-prefer");
    DO_TEST("numatune-memnode");
591
    DO_TEST("numatune-memnode-no-memory");
592

593
    DO_TEST("bios-nvram");
594
    DO_TEST("bios-nvram-os-interleave");
595

596
    DO_TEST("tap-vhost");
597
    DO_TEST("tap-vhost-incorrect");
598
    DO_TEST("shmem");
599
    DO_TEST("smbios");
600
    DO_TEST("smbios-multiple-type2");
601
    DO_TEST("aarch64-aavmf-virtio-mmio");
602

603 604 605
    DO_TEST("aarch64-gic");
    DO_TEST("aarch64-gicv3");

606 607
    DO_TEST("memory-hotplug");
    DO_TEST("memory-hotplug-nonuma");
608
    DO_TEST("memory-hotplug-dimm");
609
    DO_TEST("net-udp");
610

M
Marc-André Lureau 已提交
611
    DO_TEST("video-virtio-gpu-device");
612
    DO_TEST("video-virtio-gpu-virgl");
613
    DO_TEST("virtio-input");
614
    DO_TEST("virtio-input-passthrough");
M
Marc-André Lureau 已提交
615

616
    qemuTestDriverFree(&driver);
617

618
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
619 620
}

621 622
VIRT_TEST_MAIN(mymain)

623 624
#else

625 626 627 628 629
int
main(void)
{
    return EXIT_AM_SKIP;
}
630 631

#endif /* WITH_QEMU */