[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