On 06.04.2014 11:52, Roman Bogorodskiy wrote:
The only implemented test for now is domain metadata test. --- tests/Makefile.am | 11 +- tests/bhyvexml2argvdata/bhyvexml2argv-metadata.xml | 26 +++++ .../bhyvexml2xmlout-metadata.xml | 33 ++++++ tests/bhyvexml2xmltest.c | 120 +++++++++++++++++++++ 4 files changed, 188 insertions(+), 2 deletions(-) create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-metadata.xml create mode 100644 tests/bhyvexml2xmloutdata/bhyvexml2xmlout-metadata.xml create mode 100644 tests/bhyvexml2xmltest.c diff --git a/tests/Makefile.am b/tests/Makefile.am index dfa0851..3163bf0 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -65,6 +65,7 @@ LDADDS = \ EXTRA_DIST = \ bhyvexml2argvdata \ + bhyvexml2xmloutdata \ capabilityschemadata \ capabilityschematest \ commanddata \ @@ -235,7 +236,7 @@ test_programs += vmwarevertest endif WITH_VMWARE if WITH_BHYVE -test_programs += bhyvexml2argvtest +test_programs += bhyvexml2argvtest bhyvexml2xmltest endif WITH_BHYVE if WITH_CIL @@ -633,8 +634,14 @@ bhyvexml2argvtest_SOURCES = \ testutils.c testutils.h \ testutilsbhyve.c testutilsbhyve.h bhyvexml2argvtest_LDADD = $(bhyve_LDADDS) + +bhyvexml2xmltest_SOURCES = \ + bhyvexml2xmltest.c \ + testutils.c testutils.h \ + testutilsbhyve.c testutilsbhyve.h +bhyvexml2xmltest_LDADD = $(bhyve_LDADDS) else ! WITH_BHYVE -EXTRA_DIST += bhyvexml2argvtest.c bhyvexml2argvmock.c \ +EXTRA_DIST += bhyvexml2argvtest.c bhyvexml2xmltest.c bhyvexml2argvmock.c \ testutilsbhyve.c testutilsbhyve.h endif ! WITH_BHYVE diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-metadata.xml b/tests/bhyvexml2argvdata/bhyvexml2argv-metadata.xml new file mode 100644 index 0000000..6436301 --- /dev/null +++ b/tests/bhyvexml2argvdata/bhyvexml2argv-metadata.xml @@ -0,0 +1,26 @@ +<domain type='bhyve'> + <name>bhyve</name> + <uuid>df3be7e7-a104-11e3-aeb0-50e5492bd3dc</uuid> + <memory>219136</memory> + <vcpu>1</vcpu> + <os> + <type>hvm</type> + </os> + <devices> + <disk type='file'> + <driver name='file' type='raw'/> + <source file='/tmp/freebsd.img'/> + <target dev='hda' bus='sata'/> + </disk> + <interface type='bridge'> + <mac address='52:54:00:ad:55:51'/> + <model type='virtio'/> + <source bridge="virbr0"/> + </interface> + </devices> + <!-- intentional mis-indentation --> + <metadata> + <app1:foo xmlns:app1="http://foo.org/">fooish</app1:foo> + <app2:bar xmlns:app2="http://bar.com/" maman="baz">barish</app2:bar> + </metadata> +</domain> diff --git a/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-metadata.xml b/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-metadata.xml new file mode 100644 index 0000000..77e18d4 --- /dev/null +++ b/tests/bhyvexml2xmloutdata/bhyvexml2xmlout-metadata.xml @@ -0,0 +1,33 @@ +<domain type='bhyve'> + <name>bhyve</name> + <uuid>df3be7e7-a104-11e3-aeb0-50e5492bd3dc</uuid> + <metadata> + <app1:foo xmlns:app1="http://foo.org/">fooish</app1:foo> + <app2:bar xmlns:app2="http://bar.com/" maman="baz">barish</app2:bar> + </metadata> + <memory unit='KiB'>219136</memory> + <currentMemory unit='KiB'>219136</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='x86_64'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <disk type='file' device='disk'> + <driver name='file' type='raw'/> + <source file='/tmp/freebsd.img'/> + <target dev='hda' bus='sata'/> + <address type='drive' controller='0' bus='0' target='0' unit='0'/> + </disk> + <controller type='sata' index='0'/> + <interface type='bridge'> + <mac address='52:54:00:ad:55:51'/> + <source bridge='virbr0'/> + <model type='virtio'/> + </interface> + </devices> +</domain> diff --git a/tests/bhyvexml2xmltest.c b/tests/bhyvexml2xmltest.c new file mode 100644 index 0000000..5f9bc65 --- /dev/null +++ b/tests/bhyvexml2xmltest.c @@ -0,0 +1,120 @@ +#include <config.h> + +#include "testutils.h" + +#ifdef WITH_BHYVE + +# include "bhyve/bhyve_utils.h" +# include "testutilsbhyve.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 = testBhyveBuildCapabilities()) == NULL)
Since I suggest dropping 2/3, this needs to be virBhyveCapsBuild() then.
+ 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 */
ACK Michal -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list