diff --git a/tests/Makefile.am b/tests/Makefile.am
index 1d57b39108..ee16666fd3 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -89,6 +89,8 @@ EXTRA_DIST = \
domainsnapshotxml2xmlin \
domainsnapshotxml2xmlout \
fchostdata \
+ genericxml2xmlindata \
+ genericxml2xmloutdata \
interfaceschemadata \
lxcconf2xmldata \
lxcxml2xmldata \
@@ -334,6 +336,8 @@ test_programs += metadatatest
test_programs += secretxml2xmltest
+test_programs += genericxml2xmltest
+
if WITH_LINUX
test_programs += virusbtest \
virnetdevbandwidthtest \
@@ -800,6 +804,11 @@ secretxml2xmltest_SOURCES = \
testutils.c testutils.h
secretxml2xmltest_LDADD = $(LDADDS)
+genericxml2xmltest_SOURCES = \
+ genericxml2xmltest.c \
+ testutils.c testutils.h
+genericxml2xmltest_LDADD = $(LDADDS)
+
if WITH_STORAGE
storagevolxml2argvtest_SOURCES = \
diff --git a/tests/domainschematest b/tests/domainschematest
index 31ee536b25..479fd23703 100755
--- a/tests/domainschematest
+++ b/tests/domainschematest
@@ -8,7 +8,7 @@ DIRS=""
DIRS="$DIRS domainschemadata qemuxml2argvdata sexpr2xmldata"
DIRS="$DIRS xmconfigdata xml2sexprdata qemuxml2xmloutdata"
DIRS="$DIRS lxcxml2xmldata lxcxml2xmloutdata"
-DIRS="$DIRS bhyvexml2argvdata"
+DIRS="$DIRS bhyvexml2argvdata genericxml2xmlindata genericxml2xmloutdata"
SCHEMA="domain.rng"
check_schema "$DIRS" "$SCHEMA"
diff --git a/tests/genericxml2xmlindata/generic-disk-virtio.xml b/tests/genericxml2xmlindata/generic-disk-virtio.xml
new file mode 100644
index 0000000000..458c55d8f3
--- /dev/null
+++ b/tests/genericxml2xmlindata/generic-disk-virtio.xml
@@ -0,0 +1,45 @@
+
+ QEMUGuest1
+ c7a5fdbd-edaf-9455-926a-d65c16db1809
+ 219136
+ 219136
+ 1
+
+ hvm
+
+
+
+ destroy
+ restart
+ destroy
+
+ /usr/bin/qemu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/genericxml2xmloutdata/generic-disk-virtio.xml b/tests/genericxml2xmloutdata/generic-disk-virtio.xml
new file mode 100644
index 0000000000..458c55d8f3
--- /dev/null
+++ b/tests/genericxml2xmloutdata/generic-disk-virtio.xml
@@ -0,0 +1,45 @@
+
+ QEMUGuest1
+ c7a5fdbd-edaf-9455-926a-d65c16db1809
+ 219136
+ 219136
+ 1
+
+ hvm
+
+
+
+ destroy
+ restart
+ destroy
+
+ /usr/bin/qemu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/genericxml2xmltest.c b/tests/genericxml2xmltest.c
new file mode 100644
index 0000000000..7f7989686f
--- /dev/null
+++ b/tests/genericxml2xmltest.c
@@ -0,0 +1,83 @@
+#include
+
+#include
+#include
+#include
+#include
+
+#include
+#include
+
+#include "testutils.h"
+#include "internal.h"
+#include "virstring.h"
+
+#define VIR_FROM_THIS VIR_FROM_NONE
+
+static virCapsPtr caps;
+static virDomainXMLOptionPtr xmlopt;
+
+struct testInfo {
+ const char *name;
+ int different;
+ bool inactive_only;
+};
+
+static int
+testCompareXMLToXMLHelper(const void *data)
+{
+ const struct testInfo *info = data;
+ char *xml_in = NULL;
+ char *xml_out = NULL;
+ int ret = -1;
+
+ if (virAsprintf(&xml_in, "%s/genericxml2xmlindata/generic-%s.xml",
+ abs_srcdir, info->name) < 0 ||
+ virAsprintf(&xml_out, "%s/genericxml2xmloutdata/generic-%s.xml",
+ abs_srcdir, info->name) < 0)
+ goto cleanup;
+
+ ret = testCompareDomXML2XMLFiles(caps, xmlopt, xml_in,
+ info->different ? xml_out : xml_in,
+ !info->inactive_only);
+ cleanup:
+ VIR_FREE(xml_in);
+ VIR_FREE(xml_out);
+ return ret;
+}
+
+
+static int
+mymain(void)
+{
+ int ret = 0;
+
+ if (!(caps = virTestGenericCapsInit()))
+ return EXIT_FAILURE;
+
+ if (!(xmlopt = virTestGenericDomainXMLConfInit()))
+ return EXIT_FAILURE;
+
+#define DO_TEST_FULL(name, is_different, inactive) \
+ do { \
+ const struct testInfo info = {name, is_different, inactive}; \
+ if (virtTestRun("GENERIC XML-2-XML " name, \
+ testCompareXMLToXMLHelper, &info) < 0) \
+ ret = -1; \
+ } while (0)
+
+#define DO_TEST(name) \
+ DO_TEST_FULL(name, 0, false)
+
+#define DO_TEST_DIFFERENT(name) \
+ DO_TEST_FULL(name, 1, false)
+
+ DO_TEST_DIFFERENT("disk-virtio");
+
+ virObjectUnref(caps);
+ virObjectUnref(xmlopt);
+
+ return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
+}
+
+VIRT_TEST_MAIN(mymain)