qemuxml2xmltest.c 32.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
# 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 37
    virBitmapPtr activeVcpus;

38
    virQEMUCapsPtr qemuCaps;
39 40
};

41
static int
42 43
qemuXML2XMLActivePreFormatCallback(virDomainDefPtr def,
                                   const void *opaque)
44
{
45 46 47 48 49 50
    struct testInfo *info = (struct testInfo *) opaque;

    /* store vCPU bitmap so that the status XML can be created faithfully */
    if (!info->activeVcpus)
        info->activeVcpus = virDomainDefGetOnlineVcpumap(def);

51 52 53
    return 0;
}

54 55 56 57 58
static int
testXML2XMLActive(const void *opaque)
{
    const struct testInfo *info = opaque;

59
    return testCompareDomXML2XMLFiles(driver.caps, driver.xmlopt,
60
                                      info->inName, info->outActiveName, true,
61 62
                                      qemuXML2XMLActivePreFormatCallback,
                                      opaque, 0,
63
                                      TEST_COMPARE_DOM_XML2XML_RESULT_SUCCESS);
64 65
}

66

67
static int
68
testXML2XMLInactive(const void *opaque)
69
{
70 71
    const struct testInfo *info = opaque;

72
    return testCompareDomXML2XMLFiles(driver.caps, driver.xmlopt, info->inName,
73
                                      info->outInactiveName, false,
74
                                      NULL, opaque, 0,
75
                                      TEST_COMPARE_DOM_XML2XML_RESULT_SUCCESS);
76
}
77

78

79
static const char testStatusXMLPrefixHeader[] =
80 81
"<domstatus state='running' reason='booted' pid='3803518'>\n"
"  <taint flag='high-privileges'/>\n"
82 83 84
"  <monitor path='/var/lib/libvirt/qemu/test.monitor' json='1' type='unix'/>\n";

static const char testStatusXMLPrefixFooter[] =
85 86 87 88 89 90 91 92 93 94 95 96
"  <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"
97
"  </devices>\n"
98 99 100
"  <numad nodeset='0-2'/>\n"
"  <libDir path='/tmp'/>\n"
"  <channelTargetDir path='/tmp/channel'/>\n";
101 102 103 104 105

static const char testStatusXMLSuffix[] =
"</domstatus>\n";


106 107 108 109 110 111 112 113 114 115
static void
testGetStatuXMLPrefixVcpus(virBufferPtr buf,
                           const struct testInfo *data)
{
    ssize_t vcpuid = -1;

    virBufferAddLit(buf, "<vcpus>\n");
    virBufferAdjustIndent(buf, 2);

    while ((vcpuid = virBitmapNextSetBit(data->activeVcpus, vcpuid)) >= 0)
116 117
        virBufferAsprintf(buf, "<vcpu id='%zd' pid='%zd'/>\n",
                          vcpuid, vcpuid + 3803519);
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140

    virBufferAdjustIndent(buf, -2);
    virBufferAddLit(buf, "</vcpus>\n");
}


static char *
testGetStatusXMLPrefix(const struct testInfo *data)
{
    virBuffer buf = VIR_BUFFER_INITIALIZER;

    virBufferAdd(&buf, testStatusXMLPrefixHeader, -1);
    virBufferAdjustIndent(&buf, 2);

    testGetStatuXMLPrefixVcpus(&buf, data);

    virBufferAdjustIndent(&buf, -2);
    virBufferAdd(&buf, testStatusXMLPrefixFooter, -1);

    return virBufferContentAndReset(&buf);
}


141 142 143 144 145 146 147 148 149 150
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;
151
    char *header = NULL;
152
    char *inFile = NULL, *outActiveFile = NULL;
153 154 155
    int ret = -1;
    int keepBlanksDefault = xmlKeepBlanksDefault(0);

156
    if (virTestLoadFile(data->inName, &inFile) < 0)
157
        goto cleanup;
158
    if (virTestLoadFile(data->outActiveName, &outActiveFile) < 0)
159 160
        goto cleanup;

161 162 163
    if (!(header = testGetStatusXMLPrefix(data)))
        goto cleanup;

164
    /* construct faked source status XML */
165
    virBufferAdd(&buf, header, -1);
166
    virBufferAdjustIndent(&buf, 2);
167
    virBufferAddStr(&buf, inFile);
168 169 170 171
    virBufferAdjustIndent(&buf, -2);
    virBufferAdd(&buf, testStatusXMLSuffix, -1);

    if (!(source = virBufferContentAndReset(&buf))) {
172
        VIR_TEST_DEBUG("Failed to create the source XML");
173 174 175 176
        goto cleanup;
    }

    /* construct the expect string */
177
    virBufferAdd(&buf, header, -1);
178
    virBufferAdjustIndent(&buf, 2);
179
    virBufferAddStr(&buf, outActiveFile);
180 181 182 183
    virBufferAdjustIndent(&buf, -2);
    virBufferAdd(&buf, testStatusXMLSuffix, -1);

    if (!(expect = virBufferContentAndReset(&buf))) {
184
        VIR_TEST_DEBUG("Failed to create the expect XML");
185 186 187 188 189 190 191 192 193
        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 |
194
                                      VIR_DOMAIN_DEF_PARSE_PCI_ORIG_STATES))) {
195
        VIR_TEST_DEBUG("Failed to parse domain status XML:\n%s", source);
196 197 198 199
        goto cleanup;
    }

    /* format it back */
200
    if (!(actual = virDomainObjFormat(driver.xmlopt, obj, NULL,
201
                                      VIR_DOMAIN_DEF_FORMAT_SECURE))) {
202
        VIR_TEST_DEBUG("Failed to format domain status XML");
203 204 205 206
        goto cleanup;
    }

    if (STRNEQ(actual, expect)) {
207 208
        /* For status test we don't want to regenerate output to not
         * add the status data.*/
209 210 211
        virTestDifferenceFullNoRegenerate(stderr,
                                          expect, data->outActiveName,
                                          actual, data->inName);
212 213 214 215 216 217 218 219 220 221 222 223
        goto cleanup;
    }

    ret = 0;

 cleanup:
    xmlKeepBlanksDefault(keepBlanksDefault);
    xmlFreeDoc(xml);
    virObjectUnref(obj);
    VIR_FREE(expect);
    VIR_FREE(actual);
    VIR_FREE(source);
224
    VIR_FREE(inFile);
225
    VIR_FREE(header);
226
    VIR_FREE(outActiveFile);
227 228 229 230
    return ret;
}


231 232 233 234 235 236
static void
testInfoFree(struct testInfo *info)
{
    VIR_FREE(info->inName);
    VIR_FREE(info->outActiveName);
    VIR_FREE(info->outInactiveName);
237

238 239 240
    virBitmapFree(info->activeVcpus);
    info->activeVcpus = NULL;

241
    virObjectUnref(info->qemuCaps);
242 243 244 245 246 247
}


static int
testInfoSet(struct testInfo *info,
            const char *name,
248 249
            int when,
            int gic)
250
{
251 252 253
    if (!(info->qemuCaps = virQEMUCapsNew()))
        goto error;

254 255 256
    virQEMUCapsSetList(info->qemuCaps,
                       QEMU_CAPS_LAST);

257 258 259
    if (testQemuCapsSetGIC(info->qemuCaps, gic) < 0)
        goto error;

260 261 262 263
    if (qemuTestCapsCacheInsert(driver.qemuCapsCache, name,
                                info->qemuCaps) < 0)
        goto error;

264 265 266 267 268
    if (virAsprintf(&info->inName, "%s/qemuxml2argvdata/qemuxml2argv-%s.xml",
                    abs_srcdir, name) < 0)
        goto error;

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

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

277 278 279
            if (virAsprintf(&info->outInactiveName,
                            "%s/qemuxml2xmloutdata/qemuxml2xmlout-%s.xml",
                            abs_srcdir, name) < 0)
280 281
                goto error;
        }
282
    }
283

284
    if (when & WHEN_ACTIVE) {
285 286 287 288
        if (virAsprintf(&info->outActiveName,
                        "%s/qemuxml2xmloutdata/qemuxml2xmlout-%s-active.xml",
                        abs_srcdir, name) < 0)
            goto error;
289

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

293 294 295
            if (virAsprintf(&info->outActiveName,
                            "%s/qemuxml2xmloutdata/qemuxml2xmlout-%s.xml",
                            abs_srcdir, name) < 0)
296 297
                goto error;
        }
298
    }
299

300
    return 0;
301

302 303 304
 error:
    testInfoFree(info);
    return -1;
305 306 307
}


308
static int
E
Eric Blake 已提交
309
mymain(void)
310 311
{
    int ret = 0;
312
    struct testInfo info;
313
    virQEMUDriverConfigPtr cfg = NULL;
314

315 316
    memset(&info, 0, sizeof(info));

317
    if (qemuTestDriverInit(&driver) < 0)
318
        return EXIT_FAILURE;
319

320 321
    cfg = virQEMUDriverGetConfig(&driver);

322 323
    /* TODO: test with format probing disabled too */
    driver.config->allowDiskFormatProbing = true;
324

325
# define DO_TEST_FULL(name, when, gic, ...)                                    \
326
    do {                                                                       \
327
        if (testInfoSet(&info, name, when, gic) < 0) {                         \
328
            VIR_TEST_DEBUG("Failed to generate test data for '%s'", name);     \
329 330
            return -1;                                                         \
        }                                                                      \
331
        virQEMUCapsSetList(info.qemuCaps, __VA_ARGS__, QEMU_CAPS_LAST);        \
332 333
                                                                               \
        if (info.outInactiveName) {                                            \
334
            if (virTestRun("QEMU XML-2-XML-inactive " name,                    \
335 336 337 338 339
                            testXML2XMLInactive, &info) < 0)                   \
                ret = -1;                                                      \
        }                                                                      \
                                                                               \
        if (info.outActiveName) {                                              \
340
            if (virTestRun("QEMU XML-2-XML-active " name,                      \
341
                            testXML2XMLActive, &info) < 0)                     \
342 343
                ret = -1;                                                      \
                                                                               \
344
            if (virTestRun("QEMU XML-2-XML-status " name,                      \
345
                            testCompareStatusXMLToXMLFiles, &info) < 0)        \
346 347 348
                ret = -1;                                                      \
        }                                                                      \
        testInfoFree(&info);                                                   \
349 350
    } while (0)

351 352
# define NONE QEMU_CAPS_LAST

353
# define DO_TEST(name) \
354
    DO_TEST_FULL(name, WHEN_BOTH, GIC_NONE, NONE)
355 356


357 358 359 360 361

    /* 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);
362 363

    DO_TEST("minimal");
364 365
    DO_TEST("machine-core-on");
    DO_TEST("machine-core-off");
366 367
    DO_TEST("default-kvm-host-arch");
    DO_TEST("default-qemu-host-arch");
368 369 370
    DO_TEST("boot-cdrom");
    DO_TEST("boot-network");
    DO_TEST("boot-floppy");
371
    DO_TEST("boot-multi");
372
    DO_TEST("boot-menu-enable-with-timeout");
373
    DO_TEST("boot-menu-disable");
374
    DO_TEST("boot-menu-disable-with-timeout");
375
    DO_TEST("boot-order");
376 377 378 379

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

380 381
    DO_TEST("clock-utc");
    DO_TEST("clock-localtime");
382
    DO_TEST("cpu-empty");
383 384
    DO_TEST("cpu-kvmclock");
    DO_TEST("cpu-host-kvmclock");
385
    DO_TEST("cpu-host-passthrough-features");
386
    DO_TEST("cpu-host-model-features");
387
    DO_TEST("clock-catchup");
388
    DO_TEST("kvmclock");
389
    DO_TEST("clock-timer-hyperv-rtc");
390 391 392 393 394

    DO_TEST("cpu-eoi-disabled");
    DO_TEST("cpu-eoi-enabled");
    DO_TEST("eoi-disabled");
    DO_TEST("eoi-enabled");
395 396
    DO_TEST("pv-spinlock-disabled");
    DO_TEST("pv-spinlock-enabled");
397

398
    DO_TEST("hyperv");
399
    DO_TEST("hyperv-off");
400
    DO_TEST("hyperv-panic");
401

402 403 404
    DO_TEST("kvm-features");
    DO_TEST("kvm-features-off");

405
    DO_TEST("pmu-feature");
406 407
    DO_TEST("pmu-feature-off");

408
    DO_TEST("hugepages");
409
    DO_TEST("hugepages-pages");
410 411
    DO_TEST("hugepages-pages2");
    DO_TEST("hugepages-pages3");
412
    DO_TEST("hugepages-shared");
413
    DO_TEST("nosharepages");
414 415 416
    DO_TEST("restore-v2");
    DO_TEST("migrate");
    DO_TEST("qemu-ns-no-env");
E
Eric Blake 已提交
417
    DO_TEST("disk-aio");
418
    DO_TEST("disk-cdrom");
419
    DO_TEST("disk-cdrom-empty");
420 421
    DO_TEST("disk-floppy");
    DO_TEST("disk-many");
422
    DO_TEST("disk-usb-device");
423
    DO_TEST("disk-virtio");
424
    DO_TEST("floppy-drive-fat");
425 426 427 428 429
    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");
430
    DO_TEST("disk-drive-fmt-qcow");
431
    DO_TEST("disk-drive-copy-on-read");
432 433 434 435 436
    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");
437
    DO_TEST("disk-drive-network-nbd");
P
Paolo Bonzini 已提交
438
    DO_TEST("disk-drive-network-nbd-export");
P
Paolo Bonzini 已提交
439 440
    DO_TEST("disk-drive-network-nbd-ipv6");
    DO_TEST("disk-drive-network-nbd-ipv6-export");
441
    DO_TEST("disk-drive-network-nbd-unix");
442
    DO_TEST("disk-drive-network-iscsi");
443
    DO_TEST("disk-drive-network-iscsi-auth");
444 445 446 447 448 449
    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");
450
    DO_TEST_FULL("disk-scsi-device", WHEN_ACTIVE, GIC_NONE,
451 452
                 QEMU_CAPS_NODEFCONFIG,
                 QEMU_CAPS_SCSI_LSI);
453
    DO_TEST("disk-scsi-vscsi");
454
    DO_TEST_FULL("disk-scsi-virtio-scsi", WHEN_ACTIVE, GIC_NONE,
455 456
                 QEMU_CAPS_NODEFCONFIG,
                 QEMU_CAPS_VIRTIO_SCSI);
457
    DO_TEST_FULL("disk-virtio-scsi-num_queues", WHEN_ACTIVE, GIC_NONE,
458 459
                 QEMU_CAPS_NODEFCONFIG,
                 QEMU_CAPS_VIRTIO_SCSI);
460
    DO_TEST_FULL("disk-virtio-scsi-cmd_per_lun", WHEN_ACTIVE, GIC_NONE,
461 462
                 QEMU_CAPS_NODEFCONFIG,
                 QEMU_CAPS_VIRTIO_SCSI);
463
    DO_TEST_FULL("disk-virtio-scsi-max_sectors", WHEN_ACTIVE, GIC_NONE,
464 465
                 QEMU_CAPS_NODEFCONFIG,
                 QEMU_CAPS_VIRTIO_SCSI);
466
    DO_TEST_FULL("disk-virtio-scsi-ioeventfd", WHEN_ACTIVE, GIC_NONE,
467 468
                 QEMU_CAPS_NODEFCONFIG,
                 QEMU_CAPS_VIRTIO_SCSI);
469
    DO_TEST_FULL("disk-scsi-megasas", WHEN_ACTIVE, GIC_NONE,
470 471
                 QEMU_CAPS_NODEFCONFIG,
                 QEMU_CAPS_SCSI_MEGASAS);
472
    DO_TEST_FULL("disk-scsi-mptsas1068", WHEN_ACTIVE, GIC_NONE,
473 474 475
                 QEMU_CAPS_NODEFCONFIG,
                 QEMU_CAPS_SCSI_MPTSAS1068,
                 QEMU_CAPS_SCSI_DISK_WWN);
476
    DO_TEST("disk-mirror-old");
477 478 479
    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);
480
    DO_TEST("graphics-listen-network");
481
    DO_TEST("graphics-vnc");
482
    DO_TEST("graphics-vnc-websocket");
483 484
    DO_TEST("graphics-vnc-sasl");
    DO_TEST("graphics-vnc-tls");
P
Pavel Hrdina 已提交
485
    DO_TEST("graphics-vnc-no-listen-attr");
486 487 488 489
    DO_TEST("graphics-vnc-remove-generated-socket");
    cfg->vncAutoUnixSocket = true;
    DO_TEST("graphics-vnc-auto-socket-cfg");
    cfg->vncAutoUnixSocket = false;
490 491
    DO_TEST("graphics-vnc-socket");
    DO_TEST("graphics-vnc-auto-socket");
492

493
    DO_TEST("graphics-sdl");
494
    DO_TEST("graphics-sdl-fullscreen");
495
    DO_TEST("graphics-spice");
496
    DO_TEST("graphics-spice-compression");
497
    DO_TEST("graphics-spice-qxl-vga");
498 499
    DO_TEST("graphics-spice-socket");
    DO_TEST("graphics-spice-auto-socket");
500 501 502 503
    cfg->spiceAutoUnixSocket = true;
    DO_TEST("graphics-spice-auto-socket-cfg");
    cfg->spiceAutoUnixSocket = false;

P
Paolo Bonzini 已提交
504
    DO_TEST_FULL("nographics-vga", WHEN_BOTH, GIC_NONE, QEMU_CAPS_DISPLAY);
505 506 507
    DO_TEST("input-usbmouse");
    DO_TEST("input-usbtablet");
    DO_TEST("misc-acpi");
508 509 510
    DO_TEST("misc-disable-s3");
    DO_TEST("misc-disable-suspends");
    DO_TEST("misc-enable-s4");
511
    DO_TEST("misc-no-reboot");
512
    DO_TEST("misc-uuid");
M
Michele Paolino 已提交
513
    DO_TEST("net-vhostuser");
514
    DO_TEST("net-user");
515
    DO_TEST("net-virtio");
516
    DO_TEST("net-virtio-device");
517
    DO_TEST("net-virtio-disable-offloads");
518 519
    DO_TEST("net-eth");
    DO_TEST("net-eth-ifname");
520
    DO_TEST("net-eth-hostip");
521
    DO_TEST("net-virtio-network-portgroup");
522
    DO_TEST("net-hostdev");
523
    DO_TEST("net-hostdev-vfio");
524
    DO_TEST("net-midonet");
525
    DO_TEST("net-openvswitch");
526
    DO_TEST("sound");
527
    DO_TEST("sound-device");
528
    DO_TEST("watchdog");
529
    DO_TEST("net-bandwidth");
530
    DO_TEST("net-bandwidth2");
531 532 533 534 535 536 537 538 539 540

    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");
541 542
    DO_TEST("serial-spiceport");
    DO_TEST("serial-spiceport-nospice");
543 544
    DO_TEST("parallel-tcp");
    DO_TEST("console-compat");
545
    DO_TEST("console-compat2");
546
    DO_TEST("console-virtio-many");
547
    DO_TEST("channel-guestfwd");
548
    DO_TEST("channel-virtio");
549
    DO_TEST("channel-virtio-state");
550

551
    DO_TEST("hostdev-usb-address");
552
    DO_TEST("hostdev-pci-address");
553
    DO_TEST("hostdev-vfio");
554
    DO_TEST("pci-rom");
M
Michal Privoznik 已提交
555
    DO_TEST("pci-serial-dev-chardev");
556

557
    DO_TEST("encrypted-disk");
J
John Ferlan 已提交
558
    DO_TEST("encrypted-disk-usage");
559
    DO_TEST("luks-disks");
560
    DO_TEST("luks-disk-cipher");
561 562
    DO_TEST("memtune");
    DO_TEST("memtune-unlimited");
563
    DO_TEST("blkiotune");
564
    DO_TEST("blkiotune-device");
O
Osier Yang 已提交
565
    DO_TEST("cputune");
566
    DO_TEST("cputune-zero-shares");
567
    DO_TEST("cputune-iothreadsched");
568
    DO_TEST("cputune-iothreadsched-zeropriority");
569
    DO_TEST("cputune-numatune");
570
    DO_TEST_FULL("vcpu-placement-static", WHEN_ACTIVE, GIC_NONE,
571
                 QEMU_CAPS_DEVICE_PCI_BRIDGE);
572

573
    DO_TEST("smp");
J
John Ferlan 已提交
574
    DO_TEST("iothreads");
575 576
    DO_TEST("iothreads-ids");
    DO_TEST("iothreads-ids-partial");
577
    DO_TEST("cputune-iothreads");
578
    DO_TEST("iothreads-disk");
579
    DO_TEST_FULL("iothreads-disk-virtio-ccw", WHEN_ACTIVE, GIC_NONE,
580
                 QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
581
    DO_TEST_FULL("iothreads-virtio-scsi-pci", WHEN_ACTIVE, GIC_NONE,
582 583
                 QEMU_CAPS_NODEFCONFIG,
                 QEMU_CAPS_VIRTIO_SCSI);
584
    DO_TEST_FULL("iothreads-virtio-scsi-ccw", WHEN_ACTIVE, GIC_NONE,
585 586 587
                 QEMU_CAPS_VIRTIO_SCSI,
                 QEMU_CAPS_VIRTIO_CCW,
                 QEMU_CAPS_VIRTIO_S390);
588
    DO_TEST("lease");
589
    DO_TEST("event_idx");
590
    DO_TEST("vhost_queues");
591
    DO_TEST("interface-driver");
592
    DO_TEST("interface-server");
593
    DO_TEST("virtio-lun");
594

595
    DO_TEST("usb-redir");
596 597
    DO_TEST("usb-redir-filter");
    DO_TEST("usb-redir-filter-version");
L
Lei Li 已提交
598
    DO_TEST("blkdeviotune");
599
    DO_TEST("controller-usb-order");
600

601 602 603 604
    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);
605
    DO_TEST("seclabel-static");
606
    DO_TEST_FULL("seclabel-static-labelskip", WHEN_ACTIVE, GIC_NONE, NONE);
607
    DO_TEST("seclabel-none");
608
    DO_TEST("seclabel-dac-none");
609
    DO_TEST("seclabel-dynamic-none");
610
    DO_TEST("seclabel-device-multiple");
611
    DO_TEST_FULL("seclabel-dynamic-none-relabel", WHEN_INACTIVE, GIC_NONE, NONE);
612
    DO_TEST("numad-static-vcpu-no-numatune");
613

614
    DO_TEST_FULL("disk-scsi-lun-passthrough-sgio", WHEN_ACTIVE, GIC_NONE,
615 616 617
                 QEMU_CAPS_NODEFCONFIG,
                 QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
                 QEMU_CAPS_SCSI_DISK_WWN);
618
    DO_TEST_FULL("disk-scsi-disk-vpd", WHEN_ACTIVE, GIC_NONE,
619 620 621
                 QEMU_CAPS_NODEFCONFIG,
                 QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI,
                 QEMU_CAPS_SCSI_DISK_WWN);
622
    DO_TEST("disk-source-pool");
623
    DO_TEST("disk-source-pool-mode");
624

625
    DO_TEST("disk-drive-discard");
626
    DO_TEST("disk-drive-detect-zeroes");
O
Osier Yang 已提交
627

628 629 630
    DO_TEST("virtio-rng-random");
    DO_TEST("virtio-rng-egd");

631
    DO_TEST("pseries-nvram");
632 633
    DO_TEST("pseries-panic-missing");
    DO_TEST("pseries-panic-no-address");
634

635 636 637 638
    DO_TEST("balloon-device-auto");
    DO_TEST("balloon-device-period");
    DO_TEST("channel-virtio-auto");
    DO_TEST("console-compat-auto");
639
    DO_TEST_FULL("disk-scsi-device-auto", WHEN_ACTIVE, GIC_NONE,
640 641
                 QEMU_CAPS_NODEFCONFIG,
                 QEMU_CAPS_SCSI_LSI);
642 643 644 645 646 647 648 649
    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");
650 651
    DO_TEST("disk-copy_on_read");
    DO_TEST("tpm-passthrough");
652 653 654

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

656
    DO_TEST_FULL("pci-bridge", WHEN_ACTIVE, GIC_NONE,
657
                 QEMU_CAPS_DEVICE_PCI_BRIDGE);
658
    DO_TEST_FULL("pci-bridge-many-disks", WHEN_ACTIVE, GIC_NONE,
659
                 QEMU_CAPS_DEVICE_PCI_BRIDGE);
660
    DO_TEST_FULL("pci-autoadd-addr", WHEN_ACTIVE, GIC_NONE,
661
                 QEMU_CAPS_DEVICE_PCI_BRIDGE);
662
    DO_TEST_FULL("pci-autoadd-idx", WHEN_ACTIVE, GIC_NONE,
663
                 QEMU_CAPS_DEVICE_PCI_BRIDGE);
664
    DO_TEST("pci-autofill-addr");
665

666
    DO_TEST_FULL("q35", WHEN_ACTIVE, GIC_NONE,
667 668 669 670 671 672
                 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);
673
    DO_TEST_FULL("q35-usb2", WHEN_ACTIVE, GIC_NONE,
674 675 676 677 678 679
                 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);
680
    DO_TEST_FULL("q35-usb2-multi", WHEN_ACTIVE, GIC_NONE,
681 682 683 684 685 686
                 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);
687
    DO_TEST_FULL("q35-usb2-reorder", WHEN_ACTIVE, GIC_NONE,
688 689 690 691 692 693 694
                 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);

695
    DO_TEST_FULL("pcie-root", WHEN_ACTIVE, GIC_NONE,
696 697 698 699 700 701
                 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);
702
    DO_TEST_FULL("pcie-root-port", WHEN_ACTIVE, GIC_NONE,
703 704 705 706 707 708
                 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);
709
    DO_TEST_FULL("pcie-switch-upstream-port", WHEN_ACTIVE, GIC_NONE,
710 711 712 713 714 715
                 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);
716
    DO_TEST_FULL("pcie-switch-downstream-port", WHEN_ACTIVE, GIC_NONE,
717 718 719 720 721 722
                 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);
723
    DO_TEST_FULL("pci-expander-bus", WHEN_ACTIVE, GIC_NONE,
724 725
                 QEMU_CAPS_DEVICE_PCI_BRIDGE,
                 QEMU_CAPS_DEVICE_PXB);
726
    DO_TEST_FULL("pcie-expander-bus", WHEN_ACTIVE, GIC_NONE,
727 728 729 730 731 732
                 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);
733 734 735 736 737 738 739 740 741
    DO_TEST_FULL("autoindex", WHEN_ACTIVE, GIC_NONE,
                 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_ICH9_AHCI,
                 QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_ICH9_USB_EHCI1,
                 QEMU_CAPS_NEC_USB_XHCI);
742

743
    DO_TEST_FULL("hostdev-scsi-lsi", WHEN_ACTIVE, GIC_NONE,
744 745
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);
746
    DO_TEST_FULL("hostdev-scsi-virtio-scsi", WHEN_ACTIVE, GIC_NONE,
747 748
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);
749
    DO_TEST_FULL("hostdev-scsi-readonly", WHEN_ACTIVE, GIC_NONE,
750 751 752
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);

753
    DO_TEST_FULL("hostdev-scsi-shareable", WHEN_ACTIVE, GIC_NONE,
754 755
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);
756
    DO_TEST_FULL("hostdev-scsi-sgio", WHEN_ACTIVE, GIC_NONE,
757 758
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);
759
    DO_TEST_FULL("hostdev-scsi-rawio", WHEN_ACTIVE, GIC_NONE,
760 761 762
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);

763
    DO_TEST_FULL("hostdev-scsi-autogen-address", WHEN_ACTIVE, GIC_NONE,
764 765
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);
766
    DO_TEST_FULL("hostdev-scsi-large-unit", WHEN_ACTIVE, GIC_NONE,
767 768 769
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);

770
    DO_TEST_FULL("hostdev-scsi-lsi-iscsi", WHEN_ACTIVE, GIC_NONE,
771 772
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);
773
    DO_TEST_FULL("hostdev-scsi-lsi-iscsi-auth", WHEN_ACTIVE, GIC_NONE,
774 775
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);
776
    DO_TEST_FULL("hostdev-scsi-virtio-iscsi", WHEN_ACTIVE, GIC_NONE,
777 778
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);
779
    DO_TEST_FULL("hostdev-scsi-virtio-iscsi-auth", WHEN_ACTIVE, GIC_NONE,
780 781 782
                 QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI,
                 QEMU_CAPS_DEVICE_SCSI_GENERIC);

783
    DO_TEST_FULL("s390-defaultconsole", WHEN_ACTIVE, GIC_NONE,
784
                 QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
785
    DO_TEST_FULL("s390-panic", WHEN_BOTH, GIC_NONE,
786
                 QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
787
    DO_TEST_FULL("s390-panic-missing", WHEN_BOTH, GIC_NONE,
788
                 QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
789
    DO_TEST_FULL("s390-panic-no-address", WHEN_BOTH, GIC_NONE,
790
                 QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390);
791

792
    DO_TEST("pcihole64");
793
    DO_TEST("pcihole64-gib");
794
    DO_TEST("pcihole64-none");
795
    DO_TEST_FULL("pcihole64-q35", WHEN_ACTIVE, GIC_NONE,
796 797 798 799 800 801
                 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);
802

803
    DO_TEST("panic");
804 805
    DO_TEST("panic-isa");
    DO_TEST("panic-pseries");
D
Dmitry Andreev 已提交
806
    DO_TEST("panic-double");
807
    DO_TEST("panic-no-address");
H
Hu Tao 已提交
808

809
    DO_TEST("disk-backing-chains");
810

J
Ján Tomko 已提交
811 812
    DO_TEST("chardev-label");

813 814 815 816
    DO_TEST("cpu-numa1");
    DO_TEST("cpu-numa2");
    DO_TEST("cpu-numa-no-memory-element");
    DO_TEST("cpu-numa-disordered");
817
    DO_TEST("cpu-numa-disjoint");
818
    DO_TEST("cpu-numa-memshared");
819

820 821
    DO_TEST("numatune-auto-prefer");
    DO_TEST("numatune-memnode");
822
    DO_TEST("numatune-memnode-no-memory");
823

824
    DO_TEST("bios-nvram");
825
    DO_TEST("bios-nvram-os-interleave");
826

827
    DO_TEST("tap-vhost");
828
    DO_TEST("tap-vhost-incorrect");
829
    DO_TEST("shmem");
830
    DO_TEST("smbios");
831
    DO_TEST("smbios-multiple-type2");
832

833
    DO_TEST_FULL("aarch64-aavmf-virtio-mmio", WHEN_ACTIVE, GIC_NONE,
834 835 836
            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_DTB,
            QEMU_CAPS_DEVICE_VIRTIO_MMIO,
            QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_RANDOM);
837
    DO_TEST_FULL("aarch64-virtio-pci-default", WHEN_ACTIVE, GIC_NONE,
838 839 840 841 842
            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);
843
    DO_TEST_FULL("aarch64-virtio-pci-manual-addresses", WHEN_ACTIVE, GIC_NONE,
844 845 846 847 848
            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);
849

850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869
    DO_TEST_FULL("aarch64-gic-none", WHEN_BOTH, GIC_NONE, NONE);
    DO_TEST_FULL("aarch64-gic-none-v2", WHEN_BOTH, GIC_V2, NONE);
    DO_TEST_FULL("aarch64-gic-none-v3", WHEN_BOTH, GIC_V3, NONE);
    DO_TEST_FULL("aarch64-gic-none-both", WHEN_BOTH, GIC_BOTH, NONE);
    DO_TEST_FULL("aarch64-gic-default", WHEN_BOTH, GIC_NONE, NONE);
    DO_TEST_FULL("aarch64-gic-default", WHEN_BOTH, GIC_V2, NONE);
    DO_TEST_FULL("aarch64-gic-default", WHEN_BOTH, GIC_V3, NONE);
    DO_TEST_FULL("aarch64-gic-default", WHEN_BOTH, GIC_BOTH, NONE);
    DO_TEST_FULL("aarch64-gic-v2", WHEN_BOTH, GIC_NONE, NONE);
    DO_TEST_FULL("aarch64-gic-v2", WHEN_BOTH, GIC_V2, NONE);
    DO_TEST_FULL("aarch64-gic-v2", WHEN_BOTH, GIC_V3, NONE);
    DO_TEST_FULL("aarch64-gic-v2", WHEN_BOTH, GIC_BOTH, NONE);
    DO_TEST_FULL("aarch64-gic-v3", WHEN_BOTH, GIC_NONE, NONE);
    DO_TEST_FULL("aarch64-gic-v3", WHEN_BOTH, GIC_V2, NONE);
    DO_TEST_FULL("aarch64-gic-v3", WHEN_BOTH, GIC_V3, NONE);
    DO_TEST_FULL("aarch64-gic-v3", WHEN_BOTH, GIC_BOTH, NONE);
    DO_TEST_FULL("aarch64-gic-host", WHEN_BOTH, GIC_NONE, NONE);
    DO_TEST_FULL("aarch64-gic-host", WHEN_BOTH, GIC_V2, NONE);
    DO_TEST_FULL("aarch64-gic-host", WHEN_BOTH, GIC_V3, NONE);
    DO_TEST_FULL("aarch64-gic-host", WHEN_BOTH, GIC_BOTH, NONE);
870

871 872
    DO_TEST("memory-hotplug");
    DO_TEST("memory-hotplug-nonuma");
873
    DO_TEST("memory-hotplug-dimm");
874
    DO_TEST("net-udp");
875

M
Marc-André Lureau 已提交
876
    DO_TEST("video-virtio-gpu-device");
877
    DO_TEST("video-virtio-gpu-virgl");
878
    DO_TEST("video-virtio-gpu-spice-gl");
879
    DO_TEST("virtio-input");
880
    DO_TEST("virtio-input-passthrough");
M
Marc-André Lureau 已提交
881

882
    virObjectUnref(cfg);
J
Ján Tomko 已提交
883 884 885

    DO_TEST("acpi-table");

886 887 888
    DO_TEST("video-qxl-heads");
    DO_TEST("video-qxl-noheads");

J
Ján Tomko 已提交
889 890 891 892
    DO_TEST_FULL("intel-iommu", WHEN_ACTIVE, GIC_NONE,
                 QEMU_CAPS_DEVICE_PCI_BRIDGE,
                 QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE);

893
    qemuTestDriverFree(&driver);
894

895
    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
896 897
}

898 899
VIRT_TEST_MAIN(mymain)

900 901
#else

902 903 904 905 906
int
main(void)
{
    return EXIT_AM_SKIP;
}
907 908

#endif /* WITH_QEMU */