[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