mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 13:45:38 +00:00
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.
This commit is contained in:
parent
03346def06
commit
4b6ee784de
@ -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)
|
|||||||
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)
|
|||||||
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 @@
|
|||||||
#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,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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>
|
||||||
|
Loading…
Reference in New Issue
Block a user