diff --git a/tests/Makefile.am b/tests/Makefile.am index 122bf6c8b4..c5346d100c 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -65,6 +65,7 @@ LDADDS = \ EXTRA_DIST = \ bhyvexml2argvdata \ + bhyvexml2xmloutdata \ capabilityschemadata \ capabilityschematest \ commanddata \ @@ -236,7 +237,7 @@ test_programs += vmwarevertest endif WITH_VMWARE if WITH_BHYVE -test_programs += bhyvexml2argvtest +test_programs += bhyvexml2argvtest bhyvexml2xmltest endif WITH_BHYVE if WITH_CIL @@ -634,8 +635,13 @@ bhyvexml2argvtest_SOURCES = \ bhyvexml2argvtest.c \ testutils.c testutils.h bhyvexml2argvtest_LDADD = $(bhyve_LDADDS) + +bhyvexml2xmltest_SOURCES = \ + bhyvexml2xmltest.c \ + testutils.c testutils.h +bhyvexml2xmltest_LDADD = $(bhyve_LDADDS) else ! WITH_BHYVE -EXTRA_DIST += bhyvexml2argvtest.c bhyvexml2argvmock.c +EXTRA_DIST += bhyvexml2argvtest.c bhyvexml2xmltest.c bhyvexml2argvmock.c endif ! WITH_BHYVE networkxml2xmltest_SOURCES = \ diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-metadata.xml b/tests/bhyvexml2argvdata/bhyvexml2argv-metadata.xml new file mode 100644 index 0000000000..6436301a92 --- /dev/null +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-metadata.xml @@ -0,0 +1,26 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 1 + + hvm + + + + + + + + + + + + + + + + fooish + barish + + diff --git a/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-metadata.xml b/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-metadata.xml new file mode 100644 index 0000000000..77e18d48c6 --- /dev/null +++ b/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-metadata.xml @@ -0,0 +1,33 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + + fooish + barish + + 219136 + 219136 + 1 + + hvm + + + + destroy + restart + destroy + + + + + +
+ + + + + + + + + diff --git a/tests/bhyvexml2xmltest.c b/tests/bhyvexml2xmltest.c new file mode 100644 index 0000000000..81cba0f96d --- /dev/null +++ b/tests/bhyvexml2xmltest.c @@ -0,0 +1,120 @@ +#include + +#include "testutils.h" + +#ifdef WITH_BHYVE + +# include "bhyve/bhyve_capabilities.h" +# include "bhyve/bhyve_utils.h" + +# define VIR_FROM_THIS VIR_FROM_NONE + +static bhyveConn driver; + +static int +testCompareXMLToXMLFiles(const char *inxml, const char *outxml) +{ + char *inXmlData = NULL; + char *outXmlData = NULL; + char *actual = NULL; + virDomainDefPtr def = NULL; + int ret = -1; + + if (virtTestLoadFile(inxml, &inXmlData) < 0) + goto fail; + + if (virtTestLoadFile(outxml, &outXmlData) < 0) + goto fail; + + if (!(def = virDomainDefParseString(inXmlData, driver.caps, driver.xmlopt, + 1 << VIR_DOMAIN_VIRT_BHYVE, + VIR_DOMAIN_XML_INACTIVE))) + goto fail; + + if (!(actual = virDomainDefFormat(def, VIR_DOMAIN_XML_INACTIVE))) + goto fail; + + if (STRNEQ(outXmlData, actual)) { + virtTestDifference(stderr, outXmlData, actual); + goto fail; + } + + ret = 0; + + fail: + VIR_FREE(inXmlData); + VIR_FREE(outXmlData); + VIR_FREE(actual); + virDomainDefFree(def); + return ret; +} + +struct testInfo { + const char *name; + bool different; +}; + +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/bhyvexml2argvdata/bhyvexml2argv-%s.xml", + abs_srcdir, info->name) < 0 || + virAsprintf(&xml_out, "%s/bhyvexml2xmloutdata/bhyvexml2xmlout-%s.xml", + abs_srcdir, info->name) < 0) + goto cleanup; + + ret = testCompareXMLToXMLFiles(xml_in, + info->different ? xml_out : xml_in); + + cleanup: + VIR_FREE(xml_in); + VIR_FREE(xml_out); + return ret; +} + +static int +mymain(void) +{ + int ret = 0; + + if ((driver.caps = virBhyveCapsBuild()) == NULL) + return EXIT_FAILURE; + + if ((driver.xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL)) == NULL) + return EXIT_FAILURE; + +# define DO_TEST_FULL(name, is_different) \ + do { \ + const struct testInfo info = {name, is_different}; \ + if (virtTestRun("BHYVE XML-2-XML " name, \ + testCompareXMLToXMLHelper, &info) < 0) \ + ret = -1; \ + } while (0) + +# define DO_TEST_DIFFERENT(name) \ + DO_TEST_FULL(name, true) + + DO_TEST_DIFFERENT("metadata"); + + virObjectUnref(driver.caps); + virObjectUnref(driver.xmlopt); + + return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; +} + +VIRT_TEST_MAIN(mymain) + +#else + +int +main(void) +{ + return EXIT_AM_SKIP; +} + +#endif /* WITH_BHYVE */