[PATCH 2/2] bhyve: add xml2args unittest

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



At this point unittest covers 3 basic cases:

 - minimal working XML for bhyve
 - same as above, but with virtio disk
 - ACPI and APIC args test
---
 src/util/virnetdevtap.c                            |   1 -
 tests/Makefile.am                                  |  25 ++++
 .../bhyvexml2argvdata/bhyvexml2argv-acpiapic.args  |   2 +
 tests/bhyvexml2argvdata/bhyvexml2argv-acpiapic.xml |  24 ++++
 tests/bhyvexml2argvdata/bhyvexml2argv-base.args    |   2 +
 tests/bhyvexml2argvdata/bhyvexml2argv-base.xml     |  20 +++
 .../bhyvexml2argv-disk-virtio.args                 |   2 +
 .../bhyvexml2argv-disk-virtio.xml                  |  20 +++
 tests/bhyvexml2argvmock.c                          |  38 +++++
 tests/bhyvexml2argvtest.c                          | 154 +++++++++++++++++++++
 10 files changed, 287 insertions(+), 1 deletion(-)
 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/bhyvexml2argvmock.c
 create mode 100644 tests/bhyvexml2argvtest.c

diff --git a/src/util/virnetdevtap.c b/src/util/virnetdevtap.c
index bd00c28..6ecc1d6 100644
--- a/src/util/virnetdevtap.c
+++ b/src/util/virnetdevtap.c
@@ -22,7 +22,6 @@
 
 #include <config.h>
 
-#include <fcntl.h>
 #include <sys/types.h>
 #include <dirent.h>
 
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 90f70ff..4fac8b3 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -227,6 +227,10 @@ if WITH_VMWARE
 test_programs += vmwarevertest
 endif WITH_VMWARE
 
+if WITH_BHYVE
+test_programs += bhyvexml2argvtest
+endif WITH_BHYVE
+
 if WITH_CIL
 test_programs += objectlocking
 endif WITH_CIL
@@ -348,6 +352,10 @@ test_libraries += libqemumonitortestutils.la \
 		$(NULL)
 endif WITH_QEMU
 
+if WITH_BHYVE
+test_libraries += bhyvexml2argvmock.la
+endif WITH_BHYVE
+
 if WITH_DBUS
 test_libraries += virsystemdmock.la
 endif WITH_DBUS
@@ -597,6 +605,23 @@ else ! WITH_VMWARE
 EXTRA_DIST += vmwarevertest.c
 endif ! WITH_VMWARE
 
+if WITH_BHYVE
+bhyvexml2argvmock_la_SOURCES = \
+	bhyvexml2argvmock.c
+bhyvexml2argvmock_la_CFLAGS = $(AM_CFLAGS)
+bhyvexml2argvmock_la_LDFLAGS = -module -avoid-version \
+			-rpath /evil/libtool/hack/to/force/shared/lib/creation
+
+bhyve_LDADDS = ../src/libvirt_driver_bhyve_impl.la
+bhyve_LDADDS += $(LDADDS)
+bhyvexml2argvtest_SOURCES = \
+	bhyvexml2argvtest.c \
+	testutils.c testutils.h
+bhyvexml2argvtest_LDADD = $(bhyve_LDADDS)
+else ! WITH_BHYVE
+EXTRA_DIST += bhyvexml2argvtest.c
+endif ! WITH_BHYVE
+
 networkxml2xmltest_SOURCES = \
 	networkxml2xmltest.c \
 	testutils.c testutils.h
diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-acpiapic.args b/tests/bhyvexml2argvdata/bhyvexml2argv-acpiapic.args
new file mode 100644
index 0000000..c638f61
--- /dev/null
+++ b/tests/bhyvexml2argvdata/bhyvexml2argv-acpiapic.args
@@ -0,0 +1,2 @@
+/usr/sbin/bhyve -c 1 -m 214 -A -I -H -P -s 0:0,hostbridge \
+-s 1:0,virtio-net,faketapdev -s 2:0,ahci-hd,/tmp/freebsd.img bhyve
diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-acpiapic.xml b/tests/bhyvexml2argvdata/bhyvexml2argv-acpiapic.xml
new file mode 100644
index 0000000..b429fef
--- /dev/null
+++ b/tests/bhyvexml2argvdata/bhyvexml2argv-acpiapic.xml
@@ -0,0 +1,24 @@
+<domain type='bhyve'>
+  <name>bhyve</name>
+  <uuid>df3be7e7-a104-11e3-aeb0-50e5492bd3dc</uuid>
+  <memory>219136</memory>
+  <vcpu>1</vcpu>
+  <os>
+    <type>hvm</type>
+  </os>
+  <features>
+    <apic/>
+    <acpi/>
+  </features>
+  <devices>
+    <disk type='file'>
+      <driver name='file' type='raw'/>
+      <source file='/tmp/freebsd.img'/>
+      <target dev='hda' bus='sata'/>
+    </disk>
+    <interface type='bridge'>
+      <model type='virtio'/>
+      <source bridge="virbr0"/>
+    </interface>
+  </devices>
+</domain>
diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-base.args b/tests/bhyvexml2argvdata/bhyvexml2argv-base.args
new file mode 100644
index 0000000..afa94f1
--- /dev/null
+++ b/tests/bhyvexml2argvdata/bhyvexml2argv-base.args
@@ -0,0 +1,2 @@
+/usr/sbin/bhyve -c 1 -m 214 -H -P -s 0:0,hostbridge \
+-s 1:0,virtio-net,faketapdev -s 2:0,ahci-hd,/tmp/freebsd.img bhyve
diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-base.xml b/tests/bhyvexml2argvdata/bhyvexml2argv-base.xml
new file mode 100644
index 0000000..8c96f77
--- /dev/null
+++ b/tests/bhyvexml2argvdata/bhyvexml2argv-base.xml
@@ -0,0 +1,20 @@
+<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'>
+      <model type='virtio'/>
+      <source bridge="virbr0"/>
+    </interface>
+  </devices>
+</domain>
diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-disk-virtio.args b/tests/bhyvexml2argvdata/bhyvexml2argv-disk-virtio.args
new file mode 100644
index 0000000..e627d18
--- /dev/null
+++ b/tests/bhyvexml2argvdata/bhyvexml2argv-disk-virtio.args
@@ -0,0 +1,2 @@
+/usr/sbin/bhyve -c 1 -m 214 -H -P -s 0:0,hostbridge \
+-s 1:0,virtio-net,faketapdev -s 2:0,virtio-blk,/tmp/freebsd.img bhyve
diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-disk-virtio.xml b/tests/bhyvexml2argvdata/bhyvexml2argv-disk-virtio.xml
new file mode 100644
index 0000000..8cfb518
--- /dev/null
+++ b/tests/bhyvexml2argvdata/bhyvexml2argv-disk-virtio.xml
@@ -0,0 +1,20 @@
+<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='vda' bus='virtio'/>
+    </disk>
+    <interface type='bridge'>
+      <model type='virtio'/>
+      <source bridge="virbr0"/>
+    </interface>
+  </devices>
+</domain>
diff --git a/tests/bhyvexml2argvmock.c b/tests/bhyvexml2argvmock.c
new file mode 100644
index 0000000..5ad5a60
--- /dev/null
+++ b/tests/bhyvexml2argvmock.c
@@ -0,0 +1,38 @@
+#include <config.h>
+
+#include "util/virstring.h"
+#include "util/virnetdev.h"
+#include "util/virnetdevtap.h"
+#include "internal.h"
+
+#define VIR_FROM_THIS VIR_FROM_BHYVE
+
+int virNetDevTapCreateInBridgePort(const char *brname ATTRIBUTE_UNUSED,
+                                   char **ifname,
+                                   const virMacAddr *macaddr ATTRIBUTE_UNUSED,
+                                   const unsigned char *vmuuid ATTRIBUTE_UNUSED,
+                                   int *tapfd ATTRIBUTE_UNUSED,
+                                   int tapfdSize ATTRIBUTE_UNUSED,
+                                   virNetDevVPortProfilePtr virtPortProfile ATTRIBUTE_UNUSED,
+                                   virNetDevVlanPtr virtVlan ATTRIBUTE_UNUSED,
+                                   unsigned int fakeflags ATTRIBUTE_UNUSED)
+{
+    if (VIR_STRDUP(*ifname, "vnet0") < 0)
+        return -1;
+    return 0;
+}
+
+char *virNetDevTapGetRealDeviceName(char *name ATTRIBUTE_UNUSED)
+{
+    char *fakename;
+
+    if (VIR_STRDUP(fakename, "faketapdev") < 0)
+        return NULL;
+    return fakename;
+}
+
+int virNetDevSetOnline(const char *ifname ATTRIBUTE_UNUSED,
+                       bool online ATTRIBUTE_UNUSED)
+{
+    return 0;
+}
diff --git a/tests/bhyvexml2argvtest.c b/tests/bhyvexml2argvtest.c
new file mode 100644
index 0000000..ae115f3
--- /dev/null
+++ b/tests/bhyvexml2argvtest.c
@@ -0,0 +1,154 @@
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "datatypes.h"
+#include "bhyve/bhyve_utils.h"
+#include "bhyve/bhyve_command.h"
+
+#include "testutils.h"
+
+#ifdef WITH_BHYVE
+
+# define VIR_FROM_THIS VIR_FROM_BHYVE
+
+static bhyveConn driver;
+
+static virCapsPtr
+testBhyveBuildCapabilities(void)
+{
+    virCapsPtr caps;
+    virCapsGuestPtr guest;
+
+    if ((caps = virCapabilitiesNew(virArchFromHost(),
+                                   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()))
+        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");
+
+    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
+}
+
+VIRT_TEST_MAIN_PRELOAD(mymain, abs_builddir "/.libs/bhyvexml2argvmock.so")
+
+#else
+
+int main(void)
+{
+    return EXIT_AM_SKIP;
+}
+
+#endif /* WITH_BHYVE */
-- 
1.8.4.2

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]