2008-01-29 18:15:54 +00:00
|
|
|
#include <config.h>
|
2007-11-26 12:03:34 +00:00
|
|
|
|
2007-07-18 21:34:22 +00:00
|
|
|
#include <stdio.h>
|
2007-11-26 12:03:34 +00:00
|
|
|
#include <stdlib.h>
|
|
|
|
|
#include <unistd.h>
|
2007-07-18 21:34:22 +00:00
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
|
|
#include <sys/types.h>
|
|
|
|
|
#include <fcntl.h>
|
|
|
|
|
|
2007-11-26 12:03:34 +00:00
|
|
|
#ifdef WITH_QEMU
|
|
|
|
|
|
2010-03-09 19:22:22 +01:00
|
|
|
# include "internal.h"
|
|
|
|
|
# include "testutils.h"
|
|
|
|
|
# include "qemu/qemu_conf.h"
|
2011-07-11 19:29:09 +02:00
|
|
|
# include "qemu/qemu_domain.h"
|
2010-03-09 19:22:22 +01:00
|
|
|
# include "testutilsqemu.h"
|
2007-07-18 21:34:22 +00:00
|
|
|
|
2012-11-28 16:43:10 +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;
|
2010-07-24 18:18:18 -04:00
|
|
|
virDomainDefPtr def = NULL;
|
2007-07-18 21:34:22 +00:00
|
|
|
|
2011-04-25 00:25:10 +02:00
|
|
|
if (virtTestLoadFile(inxml, &inXmlData) < 0)
|
2010-07-24 18:18:18 -04:00
|
|
|
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;
|
|
|
|
|
|
2010-07-24 18:18:18 -04:00
|
|
|
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;
|
|
|
|
|
|
2011-05-26 13:52:08 +02:00
|
|
|
if (!(actual = virDomainDefFormat(def, VIR_DOMAIN_XML_SECURE)))
|
2007-07-18 21:34:22 +00:00
|
|
|
goto fail;
|
|
|
|
|
|
2010-07-24 18:18:18 -04:00
|
|
|
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);
|
2010-07-24 18:18:18 -04:00
|
|
|
virDomainDefFree(def);
|
2007-07-18 21:34:22 +00:00
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
2012-03-28 18:10:18 -06:00
|
|
|
enum {
|
|
|
|
|
WHEN_INACTIVE = 1,
|
|
|
|
|
WHEN_ACTIVE = 2,
|
|
|
|
|
WHEN_EITHER = 3,
|
|
|
|
|
};
|
|
|
|
|
|
2010-07-24 18:18:18 -04:00
|
|
|
struct testInfo {
|
|
|
|
|
const char *name;
|
2012-03-28 18:10:18 -06:00
|
|
|
bool different;
|
|
|
|
|
int when;
|
2010-07-24 18:18:18 -04:00
|
|
|
};
|
|
|
|
|
|
2011-04-25 00:25:10 +02:00
|
|
|
static int
|
|
|
|
|
testCompareXMLToXMLHelper(const void *data)
|
|
|
|
|
{
|
2010-07-24 18:18:18 -04:00
|
|
|
const struct testInfo *info = data;
|
2011-04-25 00:25:10 +02:00
|
|
|
char *xml_in = NULL;
|
|
|
|
|
char *xml_out = NULL;
|
|
|
|
|
int ret = -1;
|
2010-07-24 18:18:18 -04:00
|
|
|
|
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;
|
2010-07-24 18:18:18 -04:00
|
|
|
|
2012-03-28 18:10:18 -06:00
|
|
|
if (info->when & WHEN_INACTIVE) {
|
|
|
|
|
ret = testCompareXMLToXMLFiles(xml_in,
|
|
|
|
|
info->different ? xml_out : xml_in,
|
|
|
|
|
false);
|
2012-02-04 07:01:56 -07:00
|
|
|
}
|
2012-03-28 18:10:18 -06:00
|
|
|
if (info->when & WHEN_ACTIVE) {
|
|
|
|
|
ret = testCompareXMLToXMLFiles(xml_in,
|
|
|
|
|
info->different ? xml_out : xml_in,
|
|
|
|
|
true);
|
2010-07-24 18:18:18 -04:00
|
|
|
}
|
|
|
|
|
|
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);
|
2010-07-24 18:18:18 -04:00
|
|
|
return ret;
|
2007-07-18 21:34:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2008-05-29 15:31:49 +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;
|
2008-02-27 04:35:08 +00:00
|
|
|
|
2008-05-29 15:31:49 +00:00
|
|
|
if ((driver.caps = testQemuCapsInit()) == NULL)
|
2012-03-22 12:33:35 +01:00
|
|
|
return EXIT_FAILURE;
|
2008-02-27 04:35:08 +00:00
|
|
|
|
2012-03-28 18:10:18 -06:00
|
|
|
# define DO_TEST_FULL(name, is_different, when) \
|
2010-07-24 18:18:18 -04:00
|
|
|
do { \
|
2012-03-28 18:10:18 -06:00
|
|
|
const struct testInfo info = {name, is_different, when}; \
|
2010-07-24 18:18:18 -04:00
|
|
|
if (virtTestRun("QEMU XML-2-XML " name, \
|
|
|
|
|
1, testCompareXMLToXMLHelper, &info) < 0) \
|
|
|
|
|
ret = -1; \
|
|
|
|
|
} while (0)
|
|
|
|
|
|
2010-03-09 19:22:22 +01:00
|
|
|
# define DO_TEST(name) \
|
2012-03-28 18:10:18 -06:00
|
|
|
DO_TEST_FULL(name, false, WHEN_EITHER)
|
2010-07-24 18:18:18 -04:00
|
|
|
|
|
|
|
|
# define DO_TEST_DIFFERENT(name) \
|
2012-03-28 18:10:18 -06:00
|
|
|
DO_TEST_FULL(name, true, WHEN_EITHER)
|
2010-07-24 18:18:18 -04:00
|
|
|
|
|
|
|
|
/* 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);
|
2008-04-25 20:46:13 +00:00
|
|
|
|
|
|
|
|
DO_TEST("minimal");
|
2012-08-15 10:16:36 +02:00
|
|
|
DO_TEST("machine-core-on");
|
|
|
|
|
DO_TEST("machine-core-off");
|
2008-04-25 20:46:13 +00:00
|
|
|
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");
|
2011-01-13 11:46:43 +01:00
|
|
|
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");
|
|
|
|
|
|
2008-04-25 20:46:13 +00:00
|
|
|
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");
|
|
|
|
|
|
2012-10-17 14:55:18 +02:00
|
|
|
DO_TEST("hyperv");
|
|
|
|
|
|
2009-08-25 15:05:18 +01:00
|
|
|
DO_TEST("hugepages");
|
2010-04-21 16:28:21 +02:00
|
|
|
DO_TEST("disk-aio");
|
2008-04-25 20:46:13 +00:00
|
|
|
DO_TEST("disk-cdrom");
|
|
|
|
|
DO_TEST("disk-floppy");
|
|
|
|
|
DO_TEST("disk-many");
|
2008-05-15 16:05:41 +00:00
|
|
|
DO_TEST("disk-xenvbd");
|
2008-08-08 15:03:00 +00:00
|
|
|
DO_TEST("disk-usb");
|
2009-12-22 16:53:20 +00:00
|
|
|
DO_TEST("disk-virtio");
|
2009-11-16 18:08:29 +00:00
|
|
|
DO_TEST("floppy-drive-fat");
|
|
|
|
|
DO_TEST("disk-drive-fat");
|
2009-01-23 16:22:20 +00:00
|
|
|
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");
|
2010-07-24 18:18:18 -04:00
|
|
|
DO_TEST("disk-scsi-device");
|
2012-02-28 14:01:31 +08:00
|
|
|
DO_TEST("disk-scsi-vscsi");
|
|
|
|
|
DO_TEST("disk-scsi-virtio-scsi");
|
2012-03-28 18:10:18 -06:00
|
|
|
DO_TEST_FULL("disk-mirror", false, WHEN_ACTIVE);
|
|
|
|
|
DO_TEST_FULL("disk-mirror", true, WHEN_INACTIVE);
|
2011-07-07 00:20:28 -04:00
|
|
|
DO_TEST("graphics-listen-network");
|
2008-04-25 20:46:13 +00:00
|
|
|
DO_TEST("graphics-vnc");
|
2009-07-06 14:59:19 +01:00
|
|
|
DO_TEST("graphics-vnc-sasl");
|
|
|
|
|
DO_TEST("graphics-vnc-tls");
|
2008-04-25 20:46:13 +00:00
|
|
|
DO_TEST("graphics-sdl");
|
2008-12-11 11:44:30 +00:00
|
|
|
DO_TEST("graphics-sdl-fullscreen");
|
2010-03-05 17:12:52 +00:00
|
|
|
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");
|
2008-04-25 20:46:13 +00:00
|
|
|
DO_TEST("input-usbmouse");
|
|
|
|
|
DO_TEST("input-usbtablet");
|
2008-05-15 16:11:40 +00:00
|
|
|
DO_TEST("input-xen");
|
2008-04-25 20:46:13 +00:00
|
|
|
DO_TEST("misc-acpi");
|
2012-08-02 12:18:16 +02:00
|
|
|
DO_TEST("misc-disable-s3");
|
|
|
|
|
DO_TEST("misc-disable-suspends");
|
|
|
|
|
DO_TEST("misc-enable-s4");
|
2008-04-25 20:46:13 +00:00
|
|
|
DO_TEST("misc-no-reboot");
|
|
|
|
|
DO_TEST("net-user");
|
2008-04-30 12:30:55 +00:00
|
|
|
DO_TEST("net-virtio");
|
2011-02-03 15:20:01 -05:00
|
|
|
DO_TEST("net-virtio-device");
|
2009-01-30 17:17:58 +00:00
|
|
|
DO_TEST("net-eth");
|
|
|
|
|
DO_TEST("net-eth-ifname");
|
2011-06-26 04:09:00 -04:00
|
|
|
DO_TEST("net-virtio-network-portgroup");
|
2012-02-15 12:37:15 -05:00
|
|
|
DO_TEST("net-hostdev");
|
2012-08-12 03:51:30 -04:00
|
|
|
DO_TEST("net-openvswitch");
|
2008-07-11 19:34:11 +00:00
|
|
|
DO_TEST("sound");
|
2012-05-16 00:55:11 +02:00
|
|
|
DO_TEST("sound-device");
|
2011-07-22 16:07:29 +02:00
|
|
|
DO_TEST("net-bandwidth");
|
2008-04-25 20:46:13 +00:00
|
|
|
|
|
|
|
|
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");
|
2009-11-05 15:31:03 +01:00
|
|
|
DO_TEST("channel-guestfwd");
|
2010-02-18 17:52:03 +01:00
|
|
|
DO_TEST("channel-virtio");
|
2007-07-18 21:34:22 +00:00
|
|
|
|
2008-08-08 14:27:05 +00:00
|
|
|
DO_TEST("hostdev-usb-address");
|
2009-01-12 15:09:19 +00:00
|
|
|
DO_TEST("hostdev-pci-address");
|
2012-01-24 19:54:12 -05:00
|
|
|
DO_TEST("pci-rom");
|
2008-08-08 14:27:05 +00:00
|
|
|
|
2010-04-27 12:01:32 +02:00
|
|
|
DO_TEST("encrypted-disk");
|
2012-03-05 14:52:07 -07:00
|
|
|
DO_TEST_DIFFERENT("memtune");
|
2011-02-08 14:59:38 +08:00
|
|
|
DO_TEST("blkiotune");
|
2011-11-08 19:00:34 +08:00
|
|
|
DO_TEST("blkiotune-device");
|
2011-03-29 21:44:14 +08:00
|
|
|
DO_TEST("cputune");
|
2010-04-27 12:01:32 +02:00
|
|
|
|
2010-09-29 15:58:47 -06:00
|
|
|
DO_TEST("smp");
|
2010-12-09 18:25:11 +00:00
|
|
|
DO_TEST("lease");
|
2011-08-13 02:32:45 -04:00
|
|
|
DO_TEST("event_idx");
|
2012-01-04 22:48:38 -05:00
|
|
|
DO_TEST("virtio-lun");
|
2010-09-29 15:58:47 -06:00
|
|
|
|
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
|
|
|
|
2012-03-28 18:10:18 -06: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");
|
2012-05-09 00:04:34 +08:00
|
|
|
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
|
|
|
|
2012-12-06 18:23:02 +08:00
|
|
|
DO_TEST("disk-scsi-disk-vpd");
|
|
|
|
|
|
2010-07-24 18:18:18 -04:00
|
|
|
/* 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");
|
2011-07-07 00:20:28 -04:00
|
|
|
DO_TEST_DIFFERENT("graphics-listen-network2");
|
2011-12-21 14:27:16 +01:00
|
|
|
DO_TEST_DIFFERENT("graphics-spice-timeout");
|
2012-05-09 00:04:34 +08:00
|
|
|
DO_TEST_DIFFERENT("numad-auto-vcpu-no-numatune");
|
2012-05-09 00:04:35 +08:00
|
|
|
DO_TEST_DIFFERENT("numad-auto-memory-vcpu-no-cpuset-and-placement");
|
|
|
|
|
DO_TEST_DIFFERENT("numad-auto-memory-vcpu-cpuset");
|
2012-05-14 11:16:22 +01:00
|
|
|
DO_TEST_DIFFERENT("usb-ich9-ehci-addr");
|
2010-07-24 18:18:18 -04:00
|
|
|
|
2012-01-24 04:26:18 +02:00
|
|
|
DO_TEST_DIFFERENT("metadata");
|
|
|
|
|
|
2013-02-01 12:26:18 +00:00
|
|
|
virObjectUnref(driver.caps);
|
2007-07-18 21:34:22 +00:00
|
|
|
|
2012-03-22 12:33:35 +01:00
|
|
|
return ret==0 ? EXIT_SUCCESS : EXIT_FAILURE;
|
2007-07-18 21:34:22 +00:00
|
|
|
}
|
|
|
|
|
|
2008-05-29 15:31:49 +00:00
|
|
|
VIRT_TEST_MAIN(mymain)
|
|
|
|
|
|
2007-11-26 12:03:34 +00:00
|
|
|
#else
|
2011-12-01 13:47:34 -07:00
|
|
|
# include "testutils.h"
|
2007-11-26 12:03:34 +00:00
|
|
|
|
2011-07-28 17:48:12 +02:00
|
|
|
int
|
|
|
|
|
main(void)
|
|
|
|
|
{
|
|
|
|
|
return EXIT_AM_SKIP;
|
|
|
|
|
}
|
2007-11-26 12:03:34 +00:00
|
|
|
|
|
|
|
|
#endif /* WITH_QEMU */
|