[libvirt] [PATCH 3/3] tests: add bhyve xml2xml test
Michal Privoznik
mprivozn at redhat.com
Mon Apr 7 15:15:06 UTC 2014
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
More information about the libvir-list
mailing list