qemuxml2xmltest.c 27.3 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 58
                                      qemuXML2XMLPreFormatCallback, opaque, 0,
                                      TEST_COMPARE_DOM_XML2XML_RESULT_SUCCESS);
59 60
}

61

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

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

73

74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
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"
93
"  </devices>\n"
94 95 96
"  <numad nodeset='0-2'/>\n"
"  <libDir path='/tmp'/>\n"
"  <channelTargetDir path='/tmp/channel'/>\n";
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111

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

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

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

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

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

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

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

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

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

    ret = 0;

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


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

    virObjectUnref(info->qemuCaps);
198 199 200 201 202 203 204 205
}


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

209 210 211 212
    virQEMUCapsSetList(info->qemuCaps,
                       QEMU_CAPS_DEVICE,
                       QEMU_CAPS_LAST);

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

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

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

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

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

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

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

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

253
    return 0;
254

255 256 257
 error:
    testInfoFree(info);
    return -1;
258 259 260
}


261
static int
E
Eric Blake 已提交
262
mymain(void)
263 264
{
    int ret = 0;
265
    struct testInfo info;
266
    virQEMUDriverConfigPtr cfg = NULL;
267

268
    if (qemuTestDriverInit(&driver) < 0)
269
        return EXIT_FAILURE;
270

271 272
    /* TODO: test with format probing disabled too */
    driver.config->allowDiskFormatProbing = true;
273

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

300 301
# define NONE QEMU_CAPS_LAST

302
# define DO_TEST(name) \
303 304 305
    DO_TEST_FULL(name, WHEN_BOTH, NONE)


306 307 308 309 310

    /* 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);
311 312

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

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

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

    DO_TEST("cpu-eoi-disabled");
    DO_TEST("cpu-eoi-enabled");
    DO_TEST("eoi-disabled");
    DO_TEST("eoi-enabled");
344 345
    DO_TEST("pv-spinlock-disabled");
    DO_TEST("pv-spinlock-enabled");
346

347
    DO_TEST("hyperv");
348
    DO_TEST("hyperv-off");
349
    DO_TEST("hyperv-panic");
350

351 352 353
    DO_TEST("kvm-features");
    DO_TEST("kvm-features-off");

354
    DO_TEST("pmu-feature");
355 356
    DO_TEST("pmu-feature-off");

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

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

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

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

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

522
    DO_TEST("usb-redir");
523 524
    DO_TEST("usb-redir-filter");
    DO_TEST("usb-redir-filter-version");
L
Lei Li 已提交
525
    DO_TEST("blkdeviotune");
526
    DO_TEST("controller-usb-order");
527

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

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

552
    DO_TEST("disk-drive-discard");
O
Osier Yang 已提交
553

554 555 556
    DO_TEST("virtio-rng-random");
    DO_TEST("virtio-rng-egd");

557
    DO_TEST("pseries-nvram");
558 559
    DO_TEST("pseries-panic-missing");
    DO_TEST("pseries-panic-no-address");
560

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

    DO_TEST("metadata");
    DO_TEST("metadata-duplicate");
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
    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);
648 649 650
    DO_TEST_FULL("pci-expander-bus", WHEN_ACTIVE,
                 QEMU_CAPS_DEVICE_PCI_BRIDGE,
                 QEMU_CAPS_DEVICE_PXB);
651 652 653 654 655 656 657
    DO_TEST_FULL("pcie-expander-bus", WHEN_ACTIVE,
                 QEMU_CAPS_DEVICE_PCI_BRIDGE,
                 QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
                 QEMU_CAPS_DEVICE_IOH3420,
                 QEMU_CAPS_DEVICE_X3130_UPSTREAM,
                 QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
                 QEMU_CAPS_DEVICE_PXB_PCIE);
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 689 690 691 692 693 694 695 696 697 698 699 700 701


    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);
702

703
    DO_TEST("pcihole64");
704
    DO_TEST("pcihole64-gib");
705
    DO_TEST("pcihole64-none");
706 707 708 709 710 711 712
    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);
713

714
    DO_TEST("panic");
715 716
    DO_TEST("panic-isa");
    DO_TEST("panic-pseries");
D
Dmitry Andreev 已提交
717
    DO_TEST("panic-double");
718
    DO_TEST("panic-no-address");
H
Hu Tao 已提交
719

720
    DO_TEST("disk-backing-chains");
721

J
Ján Tomko 已提交
722 723
    DO_TEST("chardev-label");

724 725 726 727
    DO_TEST("cpu-numa1");
    DO_TEST("cpu-numa2");
    DO_TEST("cpu-numa-no-memory-element");
    DO_TEST("cpu-numa-disordered");
728
    DO_TEST("cpu-numa-disjoint");
729
    DO_TEST("cpu-numa-memshared");
730

731 732
    DO_TEST("numatune-auto-prefer");
    DO_TEST("numatune-memnode");
733
    DO_TEST("numatune-memnode-no-memory");
734

735
    DO_TEST("bios-nvram");
736
    DO_TEST("bios-nvram-os-interleave");
737

738
    DO_TEST("tap-vhost");
739
    DO_TEST("tap-vhost-incorrect");
740
    DO_TEST("shmem");
741
    DO_TEST("smbios");
742
    DO_TEST("smbios-multiple-type2");
743

744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759
    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);
760 761 762

    DO_TEST("aarch64-gic-none");
    DO_TEST("aarch64-gic-default");
763 764
    DO_TEST("aarch64-gic-v2");
    DO_TEST("aarch64-gic-v3");
765
    DO_TEST("aarch64-gic-host");
766

767 768
    DO_TEST("memory-hotplug");
    DO_TEST("memory-hotplug-nonuma");
769
    DO_TEST("memory-hotplug-dimm");
770
    DO_TEST("net-udp");
771

M
Marc-André Lureau 已提交
772
    DO_TEST("video-virtio-gpu-device");
773
    DO_TEST("video-virtio-gpu-virgl");
774
    DO_TEST("video-virtio-gpu-spice-gl");
775
    DO_TEST("virtio-input");
776
    DO_TEST("virtio-input-passthrough");
M
Marc-André Lureau 已提交
777

778 779 780 781 782 783
    cfg = virQEMUDriverGetConfig(&driver);
    cfg->vncAutoUnixSocket = true;
    DO_TEST_FULL("graphics-vnc-autosocket", WHEN_INACTIVE, NONE);
    cfg->vncAutoUnixSocket = false;

    virObjectUnref(cfg);
784
    qemuTestDriverFree(&driver);
785

786
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
787 788
}

789 790
VIRT_TEST_MAIN(mymain)

791 792
#else

793 794 795 796 797
int
main(void)
{
    return EXIT_AM_SKIP;
}
798 799

#endif /* WITH_QEMU */