Files
libvirt/tests/qemuxml2xmltest.c
T

278 lines
7.4 KiB
C
Raw Normal View History

#include <config.h>
2007-07-18 21:34:22 +00:00
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
2007-07-18 21:34:22 +00:00
#include <string.h>
#include <sys/types.h>
#include <fcntl.h>
#ifdef WITH_QEMU
# include "internal.h"
# include "testutils.h"
# include "qemu/qemu_conf.h"
2011-07-11 19:29:09 +02:00
# include "qemu/qemu_domain.h"
# include "testutilsqemu.h"
2007-07-18 21:34:22 +00:00
static virQEMUDriver driver;
2007-07-18 21:34:22 +00:00
2011-04-25 00:25:10 +02:00
static int
2012-02-04 07:01:56 -07:00
testCompareXMLToXMLFiles(const char *inxml, const char *outxml, bool live)
2011-04-25 00:25:10 +02:00
{
char *inXmlData = NULL;
char *outXmlData = NULL;
2007-07-18 21:34:22 +00:00
char *actual = NULL;
int ret = -1;
virDomainDefPtr def = NULL;
2007-07-18 21:34:22 +00:00
2011-04-25 00:25:10 +02:00
if (virtTestLoadFile(inxml, &inXmlData) < 0)
goto fail;
2011-04-25 00:25:10 +02:00
if (virtTestLoadFile(outxml, &outXmlData) < 0)
2007-07-18 21:34:22 +00:00
goto fail;
if (!(def = virDomainDefParseString(driver.caps, inXmlData,
2011-07-11 19:29:09 +02:00
QEMU_EXPECTED_VIRT_TYPES,
2012-02-04 07:01:56 -07:00
live ? 0 : VIR_DOMAIN_XML_INACTIVE)))
2007-07-18 21:34:22 +00:00
goto fail;
if (!(actual = virDomainDefFormat(def, VIR_DOMAIN_XML_SECURE)))
2007-07-18 21:34:22 +00:00
goto fail;
if (STRNEQ(outXmlData, actual)) {
virtTestDifference(stderr, outXmlData, actual);
2007-07-18 21:34:22 +00:00
goto fail;
}
ret = 0;
fail:
2012-02-02 16:16:43 -07:00
VIR_FREE(inXmlData);
VIR_FREE(outXmlData);
VIR_FREE(actual);
virDomainDefFree(def);
2007-07-18 21:34:22 +00:00
return ret;
}
enum {
WHEN_INACTIVE = 1,
WHEN_ACTIVE = 2,
WHEN_EITHER = 3,
};
struct testInfo {
const char *name;
bool different;
int when;
};
2011-04-25 00:25:10 +02:00
static int
testCompareXMLToXMLHelper(const void *data)
{
const struct testInfo *info = data;
2011-04-25 00:25:10 +02:00
char *xml_in = NULL;
char *xml_out = NULL;
int ret = -1;
2011-04-25 00:25:10 +02:00
if (virAsprintf(&xml_in, "%s/qemuxml2argvdata/qemuxml2argv-%s.xml",
abs_srcdir, info->name) < 0 ||
virAsprintf(&xml_out, "%s/qemuxml2xmloutdata/qemuxml2xmlout-%s.xml",
abs_srcdir, info->name) < 0)
goto cleanup;
if (info->when & WHEN_INACTIVE) {
ret = testCompareXMLToXMLFiles(xml_in,
info->different ? xml_out : xml_in,
false);
2012-02-04 07:01:56 -07:00
}
if (info->when & WHEN_ACTIVE) {
ret = testCompareXMLToXMLFiles(xml_in,
info->different ? xml_out : xml_in,
true);
}
2011-04-25 00:25:10 +02:00
cleanup:
2012-02-02 16:16:43 -07:00
VIR_FREE(xml_in);
VIR_FREE(xml_out);
return ret;
2007-07-18 21:34:22 +00:00
}
static int
2011-04-29 10:21:20 -06:00
mymain(void)
2007-07-18 21:34:22 +00:00
{
int ret = 0;
if ((driver.caps = testQemuCapsInit()) == NULL)
return EXIT_FAILURE;
# define DO_TEST_FULL(name, is_different, when) \
do { \
const struct testInfo info = {name, is_different, when}; \
if (virtTestRun("QEMU XML-2-XML " name, \
1, testCompareXMLToXMLHelper, &info) < 0) \
ret = -1; \
} while (0)
# define DO_TEST(name) \
DO_TEST_FULL(name, false, WHEN_EITHER)
# define DO_TEST_DIFFERENT(name) \
DO_TEST_FULL(name, true, WHEN_EITHER)
/* 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);
DO_TEST("minimal");
2012-08-15 10:16:36 +02:00
DO_TEST("machine-core-on");
DO_TEST("machine-core-off");
DO_TEST("boot-cdrom");
DO_TEST("boot-network");
DO_TEST("boot-floppy");
2010-07-26 10:28:58 -04:00
DO_TEST("boot-multi");
DO_TEST("boot-menu-disable");
DO_TEST("boot-order");
2008-05-15 16:21:11 +00:00
DO_TEST("bootloader");
2012-09-18 12:32:07 +02:00
DO_TEST("reboot-timeout-enabled");
DO_TEST("reboot-timeout-disabled");
DO_TEST("clock-utc");
DO_TEST("clock-localtime");
2012-01-27 14:49:52 +01:00
DO_TEST("cpu-kvmclock");
DO_TEST("cpu-host-kvmclock");
DO_TEST("kvmclock");
2012-09-13 15:27:07 +02:00
DO_TEST("cpu-eoi-disabled");
DO_TEST("cpu-eoi-enabled");
DO_TEST("eoi-disabled");
DO_TEST("eoi-enabled");
DO_TEST("hyperv");
DO_TEST("hugepages");
2010-04-21 16:28:21 +02:00
DO_TEST("disk-aio");
DO_TEST("disk-cdrom");
DO_TEST("disk-floppy");
DO_TEST("disk-many");
DO_TEST("disk-xenvbd");
DO_TEST("disk-usb");
2009-12-22 16:53:20 +00:00
DO_TEST("disk-virtio");
DO_TEST("floppy-drive-fat");
DO_TEST("disk-drive-fat");
DO_TEST("disk-drive-fmt-qcow");
2009-01-30 17:15:39 +00:00
DO_TEST("disk-drive-cache-v1-wt");
DO_TEST("disk-drive-cache-v1-wb");
DO_TEST("disk-drive-cache-v1-none");
DO_TEST("disk-scsi-device");
DO_TEST("disk-scsi-vscsi");
DO_TEST("disk-scsi-virtio-scsi");
DO_TEST_FULL("disk-mirror", false, WHEN_ACTIVE);
DO_TEST_FULL("disk-mirror", true, WHEN_INACTIVE);
DO_TEST("graphics-listen-network");
DO_TEST("graphics-vnc");
2009-07-06 14:59:19 +01:00
DO_TEST("graphics-vnc-sasl");
DO_TEST("graphics-vnc-tls");
DO_TEST("graphics-sdl");
2008-12-11 11:44:30 +00:00
DO_TEST("graphics-sdl-fullscreen");
DO_TEST("graphics-spice");
2011-05-31 15:52:05 +02:00
DO_TEST("graphics-spice-compression");
2011-03-06 22:00:27 +08:00
DO_TEST("graphics-spice-qxl-vga");
DO_TEST("input-usbmouse");
DO_TEST("input-usbtablet");
DO_TEST("input-xen");
DO_TEST("misc-acpi");
DO_TEST("misc-disable-s3");
DO_TEST("misc-disable-suspends");
DO_TEST("misc-enable-s4");
DO_TEST("misc-no-reboot");
DO_TEST("net-user");
DO_TEST("net-virtio");
DO_TEST("net-virtio-device");
DO_TEST("net-eth");
DO_TEST("net-eth-ifname");
DO_TEST("net-virtio-network-portgroup");
DO_TEST("net-hostdev");
DO_TEST("net-openvswitch");
DO_TEST("sound");
DO_TEST("sound-device");
DO_TEST("net-bandwidth");
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");
DO_TEST("parallel-tcp");
DO_TEST("console-compat");
2011-02-23 18:27:23 +00:00
DO_TEST("console-virtio-many");
DO_TEST("channel-guestfwd");
2010-02-18 17:52:03 +01:00
DO_TEST("channel-virtio");
2007-07-18 21:34:22 +00:00
DO_TEST("hostdev-usb-address");
DO_TEST("hostdev-pci-address");
DO_TEST("pci-rom");
2010-04-27 12:01:32 +02:00
DO_TEST("encrypted-disk");
2012-03-05 14:52:07 -07:00
DO_TEST_DIFFERENT("memtune");
DO_TEST("blkiotune");
DO_TEST("blkiotune-device");
2011-03-29 21:44:14 +08:00
DO_TEST("cputune");
2010-04-27 12:01:32 +02:00
DO_TEST("smp");
DO_TEST("lease");
DO_TEST("event_idx");
DO_TEST("virtio-lun");
2011-09-02 23:09:14 +08:00
DO_TEST("usb-redir");
2011-11-15 17:02:50 +08:00
DO_TEST("blkdeviotune");
2011-09-02 23:09:14 +08:00
DO_TEST_FULL("seclabel-dynamic-baselabel", false, WHEN_INACTIVE);
DO_TEST_FULL("seclabel-dynamic-override", false, WHEN_INACTIVE);
2011-12-22 17:47:46 -07:00
DO_TEST("seclabel-static");
2012-02-04 07:01:56 -07:00
DO_TEST("seclabel-none");
DO_TEST("numad-static-vcpu-no-numatune");
2013-01-02 22:37:09 +08:00
DO_TEST("disk-scsi-lun-passthrough-sgio");
2011-12-22 17:47:46 -07:00
DO_TEST("disk-scsi-disk-vpd");
/* These tests generate different XML */
DO_TEST_DIFFERENT("balloon-device-auto");
DO_TEST_DIFFERENT("channel-virtio-auto");
DO_TEST_DIFFERENT("console-compat-auto");
DO_TEST_DIFFERENT("disk-scsi-device-auto");
2010-07-14 13:02:04 -04:00
DO_TEST_DIFFERENT("console-virtio");
2011-04-14 18:05:14 +02:00
DO_TEST_DIFFERENT("serial-target-port-auto");
DO_TEST_DIFFERENT("graphics-listen-network2");
2011-12-21 14:27:16 +01:00
DO_TEST_DIFFERENT("graphics-spice-timeout");
DO_TEST_DIFFERENT("numad-auto-vcpu-no-numatune");
DO_TEST_DIFFERENT("numad-auto-memory-vcpu-no-cpuset-and-placement");
DO_TEST_DIFFERENT("numad-auto-memory-vcpu-cpuset");
DO_TEST_DIFFERENT("usb-ich9-ehci-addr");
DO_TEST_DIFFERENT("metadata");
2013-02-01 12:26:18 +00:00
virObjectUnref(driver.caps);
2007-07-18 21:34:22 +00:00
return ret==0 ? EXIT_SUCCESS : EXIT_FAILURE;
2007-07-18 21:34:22 +00:00
}
VIRT_TEST_MAIN(mymain)
#else
2011-12-01 13:47:34 -07:00
# include "testutils.h"
2011-07-28 17:48:12 +02:00
int
main(void)
{
return EXIT_AM_SKIP;
}
#endif /* WITH_QEMU */