[libvirt] [PATCH v3 2/2] bhyve: add xml2args unittest

Ján Tomko jtomko at redhat.com
Wed Mar 26 19:45:45 UTC 2014


On 03/26/2014 05:53 PM, Roman Bogorodskiy wrote:
> At this point unittest covers 4 basic cases:
> 
>  - minimal working XML for bhyve
>  - same as above, but with virtio disk
>  - ACPI and APIC args test
>  - MAC address test
> ---
>  tests/Makefile.am                                  |  26 ++++
>  .../bhyvexml2argvdata/bhyvexml2argv-acpiapic.args  |   3 +
>  tests/bhyvexml2argvdata/bhyvexml2argv-acpiapic.xml |  24 ++++
>  tests/bhyvexml2argvdata/bhyvexml2argv-base.args    |   3 +
>  tests/bhyvexml2argvdata/bhyvexml2argv-base.xml     |  20 +++
>  .../bhyvexml2argv-disk-virtio.args                 |   3 +
>  .../bhyvexml2argv-disk-virtio.xml                  |  20 +++
>  tests/bhyvexml2argvdata/bhyvexml2argv-macaddr.args |   3 +
>  tests/bhyvexml2argvdata/bhyvexml2argv-macaddr.xml  |  21 +++
>  tests/bhyvexml2argvmock.c                          |  49 +++++++
>  tests/bhyvexml2argvtest.c                          | 153 +++++++++++++++++++++
>  11 files changed, 325 insertions(+)
>  create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-acpiapic.args
>  create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-acpiapic.xml
>  create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-base.args
>  create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-base.xml
>  create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-disk-virtio.args
>  create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-disk-virtio.xml
>  create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-macaddr.args
>  create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-macaddr.xml
>  create mode 100644 tests/bhyvexml2argvmock.c
>  create mode 100644 tests/bhyvexml2argvtest.c
> 


> diff --git a/tests/bhyvexml2argvtest.c b/tests/bhyvexml2argvtest.c
> new file mode 100644
> index 0000000..463feab
> --- /dev/null
> +++ b/tests/bhyvexml2argvtest.c
> @@ -0,0 +1,153 @@
> +#include <config.h>
> +
> +#include "testutils.h"
> +
> +#ifdef WITH_BHYVE
> +
> +# include "datatypes.h"
> +
> +# include "bhyve/bhyve_utils.h"
> +# include "bhyve/bhyve_command.h"
> +
> +# define VIR_FROM_THIS VIR_FROM_BHYVE
> +
> +static bhyveConn driver;
> +
> +static virCapsPtr
> +testBhyveBuildCapabilities(void)
> +{
> +    virCapsPtr caps;
> +    virCapsGuestPtr guest;
> +
> +    if ((caps = virCapabilitiesNew(virArchFromHost(),

Getting the arch from the host seems wrong in a test, but it seems the bhyve
driver doesn't care about archs.

> +                                   0, 0)) == NULL)
> +        return NULL;
> +
> +    if ((guest = virCapabilitiesAddGuest(caps, "hvm",
> +                                         VIR_ARCH_X86_64,
> +                                         "bhyve",
> +                                         NULL, 0, NULL)) == NULL)
> +        goto error;
> +
> +    if (virCapabilitiesAddGuestDomain(guest,
> +                                      "bhyve", NULL, NULL, 0, NULL) == NULL)
> +        goto error;
> +
> +    return caps;
> +
> + error:
> +    virObjectUnref(caps);
> +    return NULL;
> +}
> +
> +static int testCompareXMLToArgvFiles(const char *xml,
> +                                     const char *cmdline)
> +{
> +    char *expectargv = NULL;
> +    int len;
> +    char *actualargv = NULL;
> +    virConnectPtr conn;
> +    virDomainDefPtr vmdef = NULL;
> +    virDomainObj vm;
> +    virCommandPtr cmd = NULL;
> +    int ret = -1;
> +
> +
> +    if (!(conn = virGetConnect()))

Does this have any side-effects? It doesn't seem to be used anywhere.

> +        goto out;
> +
> +    if (!(vmdef = virDomainDefParseFile(xml, driver.caps, driver.xmlopt,
> +                                        1 << VIR_DOMAIN_VIRT_BHYVE,
> +                                        VIR_DOMAIN_XML_INACTIVE)))
> +        goto out;
> +
> +    vm.def = vmdef;
> +
> +    if (!(cmd = virBhyveProcessBuildBhyveCmd(&driver, &vm)))
> +        goto out;
> +
> +    if (!(actualargv = virCommandToString(cmd)))
> +        goto out;
> +
> +    len = virtTestLoadFile(cmdline, &expectargv);
> +    if (len < 0)
> +        goto out;
> +
> +    if (len && expectargv[len - 1] == '\n')
> +        expectargv[len - 1] = '\0';
> +
> +    if (STRNEQ(expectargv, actualargv)) {
> +        virtTestDifference(stderr, expectargv, actualargv);
> +        goto out;
> +    }
> +
> +    ret = 0;
> +
> + out:
> +    VIR_FREE(expectargv);
> +    VIR_FREE(actualargv);
> +    virCommandFree(cmd);
> +    virDomainDefFree(vmdef);
> +    virObjectUnref(conn);
> +    return ret;
> +}
> +
> +static int
> +testCompareXMLToArgvHelper(const void *data)
> +{
> +    int ret = -1;
> +    const char *name = data;
> +    char *xml = NULL;
> +    char *args = NULL;
> +
> +    if (virAsprintf(&xml, "%s/bhyvexml2argvdata/bhyvexml2argv-%s.xml",
> +                    abs_srcdir, name) < 0 ||
> +        virAsprintf(&args, "%s/bhyvexml2argvdata/bhyvexml2argv-%s.args",
> +                    abs_srcdir, name) < 0)
> +        goto cleanup;
> +
> +    ret = testCompareXMLToArgvFiles(xml, args);
> +
> + cleanup:
> +    VIR_FREE(xml);
> +    VIR_FREE(args);
> +    return ret;
> +}
> +
> +static int
> +mymain(void)
> +{
> +    int ret = 0;
> +
> +    if ((driver.caps = testBhyveBuildCapabilities()) == NULL)
> +        return EXIT_FAILURE;
> +
> +    if ((driver.xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL)) == NULL)
> +        return EXIT_FAILURE;
> +
> +# define DO_TEST(name)                                        \
> +    do {                                                      \
> +        if (virtTestRun("BHYVE XML-2-ARGV " name,             \
> +                       testCompareXMLToArgvHelper, name) < 0) \
> +            ret = -1;                                         \
> +    } while (0)
> +
> +
> +    DO_TEST("base");
> +    DO_TEST("acpiapic");
> +    DO_TEST("disk-virtio");
> +    DO_TEST("macaddr");

caps and xmlopt should be unref'd here.

> +
> +    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
> +}
> +

ACK with the leak fixed and virGetConnect removed (or explained).

Jan


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140326/5b0e2a8c/attachment-0001.sig>


More information about the libvir-list mailing list