[libvirt] [PATCH 10/15] tests: Add new fchosttest tests for management of a vHBA

John Ferlan jferlan at redhat.com
Wed Jan 25 20:27:36 UTC 2017


Add a test that will mimic creation and destruction of a vHBA
by using node device XML. The design will allow for testing the
multiple mechanisms.

The first test uses just <parent> in the node device XML. This is
somewhat similar to the existing objecteventtest, except that this
test will not provide input wwnn/wwpn's (similar to how the process
is described for the the libvirt wiki).

This requires mocking the virRandomGenerateWWN since parsing the
input XML (virNodeDevCapSCSIHostParseXML) requires either a provided
wwnn/wwpn in the XML or the ability to randomly generate the wwnn/wwpn.

Signed-off-by: John Ferlan <jferlan at redhat.com>
---
 tests/fchosttest.c    | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++-
 tests/virrandommock.c |  9 ++++++++
 2 files changed, 70 insertions(+), 1 deletion(-)

diff --git a/tests/fchosttest.c b/tests/fchosttest.c
index 39a06f3..715571e 100644
--- a/tests/fchosttest.c
+++ b/tests/fchosttest.c
@@ -19,18 +19,31 @@
 
 #include <config.h>
 
+#include "virlog.h"
 #include "virstring.h"
 #include "virvhba.h"
 #include "testutils.h"
 
 #define VIR_FROM_THIS VIR_FROM_NONE
 
+VIR_LOG_INIT("tests.fchosttest");
+
 static char *fchost_prefix;
 
 #define TEST_FC_HOST_PREFIX fchost_prefix
 #define TEST_FC_HOST_NUM 5
 #define TEST_FC_HOST_NUM_NO_FAB 6
 
+/* virNodeDeviceCreateXML using "<parent>" to find the vport capable HBA */
+static const char test7_xml[] =
+"<device>"
+"  <parent>scsi_host1</parent>"
+"  <capability type='scsi_host'>"
+"    <capability type='fc_host'>"
+"    </capability>"
+"  </capability>"
+"</device>";
+
 /* Test virIsVHBACapable */
 static int
 test1(const void *data ATTRIBUTE_UNUSED)
@@ -187,6 +200,50 @@ test6(const void *data ATTRIBUTE_UNUSED)
     return ret;
 }
 
+
+
+/* Test manageVHBAByNodeDevice
+ *  - Test both virNodeDeviceCreateXML and virNodeDeviceDestroy
+ *  - Create a node device vHBA allowing usage of various different
+ *    methods based on the input data/xml argument.
+ *  - Be sure that it's possible to destroy the node device as well.
+ */
+static int
+manageVHBAByNodeDevice(const void *data)
+{
+    const char *expect_hostname = "scsi_host12";
+    virConnectPtr conn = NULL;
+    virNodeDevicePtr dev = NULL;
+    int ret = -1;
+    const char *vhba = data;
+
+    if (!(conn = virConnectOpen("test:///default")))
+        return -1;
+
+    if (!(dev = virNodeDeviceCreateXML(conn, vhba, 0)))
+        goto cleanup;
+
+    if (virNodeDeviceDestroy(dev) < 0)
+        goto cleanup;
+
+    if (STRNEQ(virNodeDeviceGetName(dev), expect_hostname)) {
+        virReportError(VIR_ERR_INTERNAL_ERROR,
+                       "Expected hostname: '%s' got: '%s'",
+                       expect_hostname, virNodeDeviceGetName(dev));
+        goto cleanup;
+    }
+
+    ret = 0;
+
+ cleanup:
+    if (dev)
+        virNodeDeviceFree(dev);
+    if (conn)
+        virConnectClose(conn);
+    return ret;
+}
+
+
 static int
 mymain(void)
 {
@@ -210,10 +267,13 @@ mymain(void)
         ret = -1;
     if (virTestRun("virVHBAGetConfig-empty-fabric_wwn", test6, NULL) < 0)
         ret = -1;
+    if (virTestRun("manageVHBAByNodeDevice-by-parent", manageVHBAByNodeDevice,
+                   test7_xml) < 0)
+        ret = -1;
 
  cleanup:
     VIR_FREE(fchost_prefix);
     return ret;
 }
 
-VIRT_TEST_MAIN(mymain)
+VIRT_TEST_MAIN_PRELOAD(mymain, abs_builddir "/.libs/virrandommock.so")
diff --git a/tests/virrandommock.c b/tests/virrandommock.c
index a69712a..fd1a61f 100644
--- a/tests/virrandommock.c
+++ b/tests/virrandommock.c
@@ -23,6 +23,7 @@
 #ifndef WIN32
 
 # include "internal.h"
+# include "virstring.h"
 # include "virrandom.h"
 # include "virmock.h"
 
@@ -41,6 +42,14 @@ virRandomBytes(unsigned char *buf,
 }
 
 
+int virRandomGenerateWWN(char **wwn,
+                         const char *virt_type ATTRIBUTE_UNUSED)
+{
+    return virAsprintf(wwn, "5100000%09llx",
+                       (unsigned long long)virRandomBits(36));
+}
+
+
 # ifdef WITH_GNUTLS
 #  include <stdio.h>
 #  include <gnutls/gnutls.h>
-- 
2.7.4




More information about the libvir-list mailing list