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