qemuxml2xmltest.c 28.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
# 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
}


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

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

214 215 216
    if (testQemuCapsSetGIC(info->qemuCaps, gic) < 0)
        goto error;

217 218 219 220
    if (qemuTestCapsCacheInsert(driver.qemuCapsCache, name,
                                info->qemuCaps) < 0)
        goto error;

221 222 223 224 225
    if (virAsprintf(&info->inName, "%s/qemuxml2argvdata/qemuxml2argv-%s.xml",
                    abs_srcdir, name) < 0)
        goto error;

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

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

234 235 236
            if (virAsprintf(&info->outInactiveName,
                            "%s/qemuxml2xmloutdata/qemuxml2xmlout-%s.xml",
                            abs_srcdir, name) < 0)
237 238
                goto error;
        }
239
    }
240

241
    if (when & WHEN_ACTIVE) {
242 243 244 245
        if (virAsprintf(&info->outActiveName,
                        "%s/qemuxml2xmloutdata/qemuxml2xmlout-%s-active.xml",
                        abs_srcdir, name) < 0)
            goto error;
246

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

250 251 252
            if (virAsprintf(&info->outActiveName,
                            "%s/qemuxml2xmloutdata/qemuxml2xmlout-%s.xml",
                            abs_srcdir, name) < 0)
253 254
                goto error;
        }
255
    }
256

257
    return 0;
258

259 260 261
 error:
    testInfoFree(info);
    return -1;
262 263 264
}


265
static int
E
Eric Blake 已提交
266
mymain(void)
267 268
{
    int ret = 0;
269
    struct testInfo info;
270
    virQEMUDriverConfigPtr cfg = NULL;
271

272
    if (qemuTestDriverInit(&driver) < 0)
273
        return EXIT_FAILURE;
274

275 276
    /* TODO: test with format probing disabled too */
    driver.config->allowDiskFormatProbing = true;
277

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

304 305
# define NONE QEMU_CAPS_LAST

306
# define DO_TEST(name) \
307
    DO_TEST_FULL(name, WHEN_BOTH, GIC_NONE, NONE)
308 309


310 311 312 313 314

    /* 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);
315 316

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

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

333 334
    DO_TEST("clock-utc");
    DO_TEST("clock-localtime");
335
    DO_TEST("cpu-empty");
336 337
    DO_TEST("cpu-kvmclock");
    DO_TEST("cpu-host-kvmclock");
338
    DO_TEST("cpu-host-passthrough-features");
339
    DO_TEST("cpu-host-model-features");
340
    DO_TEST("clock-catchup");
341
    DO_TEST("kvmclock");
342
    DO_TEST("clock-timer-hyperv-rtc");
343 344 345 346 347

    DO_TEST("cpu-eoi-disabled");
    DO_TEST("cpu-eoi-enabled");
    DO_TEST("eoi-disabled");
    DO_TEST("eoi-enabled");
348 349
    DO_TEST("pv-spinlock-disabled");
    DO_TEST("pv-spinlock-enabled");
350

351
    DO_TEST("hyperv");
352
    DO_TEST("hyperv-off");
353
    DO_TEST("hyperv-panic");
354

355 356 357
    DO_TEST("kvm-features");
    DO_TEST("kvm-features-off");

358
    DO_TEST("pmu-feature");
359 360
    DO_TEST("pmu-feature-off");

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

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

492
    DO_TEST("hostdev-usb-address");
493
    DO_TEST("hostdev-pci-address");
494
    DO_TEST("hostdev-vfio");
495
    DO_TEST("pci-rom");
M
Michal Privoznik 已提交
496
    DO_TEST("pci-serial-dev-chardev");
497

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

511
    DO_TEST("smp");
J
John Ferlan 已提交
512
    DO_TEST("iothreads");
513 514
    DO_TEST("iothreads-ids");
    DO_TEST("iothreads-ids-partial");
515
    DO_TEST("cputune-iothreads");
516
    DO_TEST("iothreads-disk");
517
    DO_TEST_FULL("iothreads-disk-virtio-ccw", WHEN_ACTIVE, GIC_NONE,
518
                 QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
519
    DO_TEST_FULL("iothreads-virtio-scsi-pci", WHEN_ACTIVE, GIC_NONE,
520 521
                 QEMU_CAPS_NODEFCONFIG,
                 QEMU_CAPS_VIRTIO_SCSI);
522
    DO_TEST_FULL("iothreads-virtio-scsi-ccw", WHEN_ACTIVE, GIC_NONE,
523 524 525
                 QEMU_CAPS_VIRTIO_SCSI,
                 QEMU_CAPS_VIRTIO_CCW,
                 QEMU_CAPS_VIRTIO_S390);
526
    DO_TEST("lease");
527
    DO_TEST("event_idx");
528
    DO_TEST("vhost_queues");
529
    DO_TEST("interface-driver");
530
    DO_TEST("interface-server");
531
    DO_TEST("virtio-lun");
532

533
    DO_TEST("usb-redir");
534 535
    DO_TEST("usb-redir-filter");
    DO_TEST("usb-redir-filter-version");
L
Lei Li 已提交
536
    DO_TEST("blkdeviotune");
537
    DO_TEST("controller-usb-order");
538

539 540 541 542
    DO_TEST_FULL("seclabel-dynamic-baselabel", WHEN_INACTIVE, GIC_NONE, NONE);
    DO_TEST_FULL("seclabel-dynamic-override", WHEN_INACTIVE, GIC_NONE, NONE);
    DO_TEST_FULL("seclabel-dynamic-labelskip", WHEN_INACTIVE, GIC_NONE, NONE);
    DO_TEST_FULL("seclabel-dynamic-relabel", WHEN_INACTIVE, GIC_NONE, NONE);
543
    DO_TEST("seclabel-static");
544
    DO_TEST_FULL("seclabel-static-labelskip", WHEN_ACTIVE, GIC_NONE, NONE);
545
    DO_TEST("seclabel-none");
546
    DO_TEST("seclabel-dac-none");
547
    DO_TEST("seclabel-dynamic-none");
548
    DO_TEST("seclabel-device-multiple");
549
    DO_TEST_FULL("seclabel-dynamic-none-relabel", WHEN_INACTIVE, GIC_NONE, NONE);
550
    DO_TEST("numad-static-vcpu-no-numatune");
551

552
    DO_TEST_FULL("disk-scsi-lun-passthrough-sgio", WHEN_ACTIVE, GIC_NONE,
553 554 555
                 QEMU_CAPS_NODEFCONFIG,
                 QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
                 QEMU_CAPS_SCSI_DISK_WWN);
556
    DO_TEST_FULL("disk-scsi-disk-vpd", WHEN_ACTIVE, GIC_NONE,
557 558 559
                 QEMU_CAPS_NODEFCONFIG,
                 QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
                 QEMU_CAPS_SCSI_DISK_WWN);
560
    DO_TEST("disk-source-pool");
561
    DO_TEST("disk-source-pool-mode");
562

563
    DO_TEST("disk-drive-discard");
O
Osier Yang 已提交
564

565 566 567
    DO_TEST("virtio-rng-random");
    DO_TEST("virtio-rng-egd");

568
    DO_TEST("pseries-nvram");
569 570
    DO_TEST("pseries-panic-missing");
    DO_TEST("pseries-panic-no-address");
571

572 573 574 575
    DO_TEST("balloon-device-auto");
    DO_TEST("balloon-device-period");
    DO_TEST("channel-virtio-auto");
    DO_TEST("console-compat-auto");
576
    DO_TEST_FULL("disk-scsi-device-auto", WHEN_ACTIVE, GIC_NONE,
577 578
                 QEMU_CAPS_NODEFCONFIG,
                 QEMU_CAPS_SCSI_LSI);
579 580 581 582 583 584 585 586
    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");
587 588
    DO_TEST("disk-copy_on_read");
    DO_TEST("tpm-passthrough");
589 590 591

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

593
    DO_TEST_FULL("pci-bridge", WHEN_ACTIVE, GIC_NONE,
594
                 QEMU_CAPS_DEVICE_PCI_BRIDGE);
595
    DO_TEST_FULL("pci-bridge-many-disks", WHEN_ACTIVE, GIC_NONE,
596
                 QEMU_CAPS_DEVICE_PCI_BRIDGE);
597
    DO_TEST_FULL("pci-autoadd-addr", WHEN_ACTIVE, GIC_NONE,
598
                 QEMU_CAPS_DEVICE_PCI_BRIDGE);
599
    DO_TEST_FULL("pci-autoadd-idx", WHEN_ACTIVE, GIC_NONE,
600 601
                 QEMU_CAPS_DEVICE_PCI_BRIDGE);

602
    DO_TEST_FULL("q35", WHEN_ACTIVE, GIC_NONE,
603 604 605 606 607 608
                 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);
609
    DO_TEST_FULL("q35-usb2", WHEN_ACTIVE, GIC_NONE,
610 611 612 613 614 615
                 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);
616
    DO_TEST_FULL("q35-usb2-multi", WHEN_ACTIVE, GIC_NONE,
617 618 619 620 621 622
                 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);
623
    DO_TEST_FULL("q35-usb2-reorder", WHEN_ACTIVE, GIC_NONE,
624 625 626 627 628 629 630
                 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);

631
    DO_TEST_FULL("pcie-root", WHEN_ACTIVE, GIC_NONE,
632 633 634 635 636 637
                 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);
638
    DO_TEST_FULL("pcie-root-port", WHEN_ACTIVE, GIC_NONE,
639 640 641 642 643 644
                 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);
645
    DO_TEST_FULL("pcie-switch-upstream-port", WHEN_ACTIVE, GIC_NONE,
646 647 648 649 650 651
                 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);
652
    DO_TEST_FULL("pcie-switch-downstream-port", WHEN_ACTIVE, GIC_NONE,
653 654 655 656 657 658
                 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);
659
    DO_TEST_FULL("pci-expander-bus", WHEN_ACTIVE, GIC_NONE,
660 661
                 QEMU_CAPS_DEVICE_PCI_BRIDGE,
                 QEMU_CAPS_DEVICE_PXB);
662
    DO_TEST_FULL("pcie-expander-bus", WHEN_ACTIVE, GIC_NONE,
663 664 665 666 667 668
                 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);
669 670


671
    DO_TEST_FULL("hostdev-scsi-lsi", WHEN_ACTIVE, GIC_NONE,
672 673
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);
674
    DO_TEST_FULL("hostdev-scsi-virtio-scsi", WHEN_ACTIVE, GIC_NONE,
675 676
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);
677
    DO_TEST_FULL("hostdev-scsi-readonly", WHEN_ACTIVE, GIC_NONE,
678 679 680
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);

681
    DO_TEST_FULL("hostdev-scsi-shareable", WHEN_ACTIVE, GIC_NONE,
682 683
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);
684
    DO_TEST_FULL("hostdev-scsi-sgio", WHEN_ACTIVE, GIC_NONE,
685 686
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);
687
    DO_TEST_FULL("hostdev-scsi-rawio", WHEN_ACTIVE, GIC_NONE,
688 689 690
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);

691
    DO_TEST_FULL("hostdev-scsi-autogen-address", WHEN_ACTIVE, GIC_NONE,
692 693
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);
694
    DO_TEST_FULL("hostdev-scsi-large-unit", WHEN_ACTIVE, GIC_NONE,
695 696 697
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);

698
    DO_TEST_FULL("hostdev-scsi-lsi-iscsi", WHEN_ACTIVE, GIC_NONE,
699 700
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);
701
    DO_TEST_FULL("hostdev-scsi-lsi-iscsi-auth", WHEN_ACTIVE, GIC_NONE,
702 703
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);
704
    DO_TEST_FULL("hostdev-scsi-virtio-iscsi", WHEN_ACTIVE, GIC_NONE,
705 706
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);
707
    DO_TEST_FULL("hostdev-scsi-virtio-iscsi-auth", WHEN_ACTIVE, GIC_NONE,
708 709 710
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);

711
    DO_TEST_FULL("s390-defaultconsole", WHEN_ACTIVE, GIC_NONE,
712
                 QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
713
    DO_TEST_FULL("s390-panic", WHEN_BOTH, GIC_NONE,
714
                 QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
715
    DO_TEST_FULL("s390-panic-missing", WHEN_BOTH, GIC_NONE,
716
                 QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
717
    DO_TEST_FULL("s390-panic-no-address", WHEN_BOTH, GIC_NONE,
718
                 QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
719

720
    DO_TEST("pcihole64");
721
    DO_TEST("pcihole64-gib");
722
    DO_TEST("pcihole64-none");
723
    DO_TEST_FULL("pcihole64-q35", WHEN_ACTIVE, GIC_NONE,
724 725 726 727 728 729
                 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);
730

731
    DO_TEST("panic");
732 733
    DO_TEST("panic-isa");
    DO_TEST("panic-pseries");
D
Dmitry Andreev 已提交
734
    DO_TEST("panic-double");
735
    DO_TEST("panic-no-address");
H
Hu Tao 已提交
736

737
    DO_TEST("disk-backing-chains");
738

J
Ján Tomko 已提交
739 740
    DO_TEST("chardev-label");

741 742 743 744
    DO_TEST("cpu-numa1");
    DO_TEST("cpu-numa2");
    DO_TEST("cpu-numa-no-memory-element");
    DO_TEST("cpu-numa-disordered");
745
    DO_TEST("cpu-numa-disjoint");
746
    DO_TEST("cpu-numa-memshared");
747

748 749
    DO_TEST("numatune-auto-prefer");
    DO_TEST("numatune-memnode");
750
    DO_TEST("numatune-memnode-no-memory");
751

752
    DO_TEST("bios-nvram");
753
    DO_TEST("bios-nvram-os-interleave");
754

755
    DO_TEST("tap-vhost");
756
    DO_TEST("tap-vhost-incorrect");
757
    DO_TEST("shmem");
758
    DO_TEST("smbios");
759
    DO_TEST("smbios-multiple-type2");
760

761
    DO_TEST_FULL("aarch64-aavmf-virtio-mmio", WHEN_ACTIVE, GIC_NONE,
762 763 764
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
765
    DO_TEST_FULL("aarch64-virtio-pci-default", WHEN_ACTIVE, GIC_NONE,
766 767 768 769 770
            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);
771
    DO_TEST_FULL("aarch64-virtio-pci-manual-addresses", WHEN_ACTIVE, GIC_NONE,
772 773 774 775 776
            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);
777 778 779

    DO_TEST("aarch64-gic-none");
    DO_TEST("aarch64-gic-default");
780 781
    DO_TEST("aarch64-gic-v2");
    DO_TEST("aarch64-gic-v3");
782
    DO_TEST("aarch64-gic-host");
783

784 785
    DO_TEST("memory-hotplug");
    DO_TEST("memory-hotplug-nonuma");
786
    DO_TEST("memory-hotplug-dimm");
787
    DO_TEST("net-udp");
788

M
Marc-André Lureau 已提交
789
    DO_TEST("video-virtio-gpu-device");
790
    DO_TEST("video-virtio-gpu-virgl");
791
    DO_TEST("video-virtio-gpu-spice-gl");
792
    DO_TEST("virtio-input");
793
    DO_TEST("virtio-input-passthrough");
M
Marc-André Lureau 已提交
794

795 796
    cfg = virQEMUDriverGetConfig(&driver);
    cfg->vncAutoUnixSocket = true;
797
    DO_TEST_FULL("graphics-vnc-autosocket", WHEN_INACTIVE, GIC_NONE, NONE);
798 799 800
    cfg->vncAutoUnixSocket = false;

    virObjectUnref(cfg);
801
    qemuTestDriverFree(&driver);
802

803
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
804 805
}

806 807
VIRT_TEST_MAIN(mymain)

808 809
#else

810 811 812 813 814
int
main(void)
{
    return EXIT_AM_SKIP;
}
815 816

#endif /* WITH_QEMU */