提交 4b6ee784 编写于 作者: J John Ferlan

tests: Add new fchosttest tests for management of a vHBA

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.
上级 03346def
...@@ -19,18 +19,31 @@ ...@@ -19,18 +19,31 @@
#include <config.h> #include <config.h>
#include "virlog.h"
#include "virstring.h" #include "virstring.h"
#include "virvhba.h" #include "virvhba.h"
#include "testutils.h" #include "testutils.h"
#define VIR_FROM_THIS VIR_FROM_NONE #define VIR_FROM_THIS VIR_FROM_NONE
VIR_LOG_INIT("tests.fchosttest");
static char *fchost_prefix; static char *fchost_prefix;
#define TEST_FC_HOST_PREFIX fchost_prefix #define TEST_FC_HOST_PREFIX fchost_prefix
#define TEST_FC_HOST_NUM 5 #define TEST_FC_HOST_NUM 5
#define TEST_FC_HOST_NUM_NO_FAB 6 #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 */ /* Test virIsVHBACapable */
static int static int
test1(const void *data ATTRIBUTE_UNUSED) test1(const void *data ATTRIBUTE_UNUSED)
...@@ -187,6 +200,50 @@ test6(const void *data ATTRIBUTE_UNUSED) ...@@ -187,6 +200,50 @@ test6(const void *data ATTRIBUTE_UNUSED)
return ret; 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 static int
mymain(void) mymain(void)
{ {
...@@ -210,10 +267,13 @@ mymain(void) ...@@ -210,10 +267,13 @@ mymain(void)
ret = -1; ret = -1;
if (virTestRun("virVHBAGetConfig-empty-fabric_wwn", test6, NULL) < 0) if (virTestRun("virVHBAGetConfig-empty-fabric_wwn", test6, NULL) < 0)
ret = -1; ret = -1;
if (virTestRun("manageVHBAByNodeDevice-by-parent", manageVHBAByNodeDevice,
test7_xml) < 0)
ret = -1;
cleanup: cleanup:
VIR_FREE(fchost_prefix); VIR_FREE(fchost_prefix);
return ret; return ret;
} }
VIRT_TEST_MAIN(mymain) VIRT_TEST_MAIN_PRELOAD(mymain, abs_builddir "/.libs/virrandommock.so")
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#ifndef WIN32 #ifndef WIN32
# include "internal.h" # include "internal.h"
# include "virstring.h"
# include "virrandom.h" # include "virrandom.h"
# include "virmock.h" # include "virmock.h"
...@@ -41,6 +42,14 @@ virRandomBytes(unsigned char *buf, ...@@ -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 # ifdef WITH_GNUTLS
# include <stdio.h> # include <stdio.h>
# include <gnutls/gnutls.h> # include <gnutls/gnutls.h>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册