ut/vhost: add UT coverage for vhost.c
Change-Id: Ie62f7684d64736fa393aaaddfc4a3232c6423c62 Signed-off-by: Pawel Niedzwiecki <pawelx.niedzwiecki@intel.com> Reviewed-on: https://review.gerrithub.io/375077 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Pawel Wodkowski <pawelx.wodkowski@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
parent
9fdc10fc56
commit
ced09e3eb6
@ -85,6 +85,7 @@ alloc_vdev(void)
|
||||
rc = posix_memalign((void **)&vdev, 64, sizeof(*vdev));
|
||||
CU_ASSERT(rc == 0);
|
||||
SPDK_CU_ASSERT_FATAL(vdev != NULL);
|
||||
memset(vdev, 0, sizeof(*vdev));
|
||||
|
||||
vdev->mem = calloc(1, sizeof(*vdev->mem) + 2 * sizeof(struct rte_vhost_mem_region));
|
||||
SPDK_CU_ASSERT_FATAL(vdev->mem != NULL);
|
||||
@ -95,6 +96,7 @@ alloc_vdev(void)
|
||||
vdev->mem->regions[1].guest_phys_addr = 0x400000;
|
||||
vdev->mem->regions[1].size = 0x400000; /* 4 MB */
|
||||
vdev->mem->regions[1].host_user_addr = 0x2000000;
|
||||
vdev->vid = 0x10;
|
||||
|
||||
return vdev;
|
||||
}
|
||||
@ -102,6 +104,7 @@ alloc_vdev(void)
|
||||
static void
|
||||
free_vdev(struct spdk_vhost_dev *vdev)
|
||||
{
|
||||
free(vdev->name);
|
||||
free(vdev->mem);
|
||||
free(vdev);
|
||||
}
|
||||
@ -198,6 +201,114 @@ desc_to_iov_test(void)
|
||||
CU_ASSERT(true);
|
||||
}
|
||||
|
||||
static void
|
||||
create_controller_test(void)
|
||||
{
|
||||
struct spdk_vhost_dev *vdev;
|
||||
int ret;
|
||||
unsigned ctrlr_num;
|
||||
char long_name[PATH_MAX];
|
||||
struct spdk_vhost_dev_backend backend;
|
||||
|
||||
MOCK_SET(spdk_app_get_core_mask, uint64_t, 1);
|
||||
|
||||
/* Create device with no name */
|
||||
vdev = alloc_vdev();
|
||||
ret = spdk_vhost_dev_construct(vdev, NULL, "0x1", SPDK_VHOST_DEV_T_BLK, &backend);
|
||||
CU_ASSERT(ret != 0);
|
||||
|
||||
/* Create device with incorrect cpumask */
|
||||
ret = spdk_vhost_dev_construct(vdev, "vdev_name_0", "0x2", SPDK_VHOST_DEV_T_BLK, &backend);
|
||||
CU_ASSERT(ret != 0);
|
||||
|
||||
/* Create device with too long name and path */
|
||||
memset(long_name, 'x', sizeof(long_name));
|
||||
long_name[PATH_MAX - 1] = 0;
|
||||
snprintf(dev_dirname, sizeof(dev_dirname), "some_path/");
|
||||
ret = spdk_vhost_dev_construct(vdev, long_name, "0x1", SPDK_VHOST_DEV_T_BLK, &backend);
|
||||
CU_ASSERT(ret != 0);
|
||||
dev_dirname[0] = 0;
|
||||
|
||||
/* Create device when device name is already taken */
|
||||
vdev->name = strdup("vdev_name_0");
|
||||
g_spdk_vhost_devices[0] = vdev;
|
||||
ret = spdk_vhost_dev_construct(vdev, "vdev_name_0", "0x1", SPDK_VHOST_DEV_T_BLK, &backend);
|
||||
CU_ASSERT(ret != 0);
|
||||
|
||||
/* Create device when max number of devices is reached */
|
||||
for (ctrlr_num = 0; ctrlr_num < MAX_VHOST_DEVICES; ctrlr_num ++) {
|
||||
g_spdk_vhost_devices[ctrlr_num] = vdev;
|
||||
}
|
||||
|
||||
ret = spdk_vhost_dev_construct(vdev, "vdev_name_1", "0x1", SPDK_VHOST_DEV_T_BLK, &backend);
|
||||
CU_ASSERT(ret != 0);
|
||||
|
||||
free_vdev(vdev);
|
||||
for (ctrlr_num = 0; ctrlr_num < MAX_VHOST_DEVICES; ctrlr_num++) {
|
||||
g_spdk_vhost_devices[ctrlr_num] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
dev_find_by_vid_test(void)
|
||||
{
|
||||
struct spdk_vhost_dev *vdev;
|
||||
|
||||
g_spdk_vhost_devices[0] = alloc_vdev();
|
||||
vdev = spdk_vhost_dev_find_by_vid(0x10);
|
||||
CU_ASSERT(vdev != NULL);
|
||||
|
||||
/* Search for a device with incorrect vid */
|
||||
vdev = spdk_vhost_dev_find_by_vid(0xFF);
|
||||
CU_ASSERT(vdev == NULL);
|
||||
|
||||
free_vdev(g_spdk_vhost_devices[0]);
|
||||
g_spdk_vhost_devices[0] = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
remove_controller_test(void)
|
||||
{
|
||||
struct spdk_vhost_dev *vdev;
|
||||
char long_name[PATH_MAX];
|
||||
int ret;
|
||||
|
||||
vdev = alloc_vdev();
|
||||
vdev->lcore = 0;
|
||||
vdev->name = strdup("vdev_name_0");
|
||||
|
||||
/* Remove device when controller is in use */
|
||||
ret = spdk_vhost_dev_remove(vdev);
|
||||
CU_ASSERT(ret != 0);
|
||||
if (ret == 0) {
|
||||
vdev->name = strdup("vdev_name_0");
|
||||
}
|
||||
|
||||
/* Remove nonexistent device */
|
||||
vdev->lcore = -1;
|
||||
ret = spdk_vhost_dev_remove(vdev);
|
||||
CU_ASSERT(ret != 0);
|
||||
if (ret != 0) {
|
||||
free(vdev->name);
|
||||
}
|
||||
|
||||
/* Remove device with too long name and path */
|
||||
memset(long_name, 'x', sizeof(long_name));
|
||||
long_name[PATH_MAX - 1] = 0;
|
||||
snprintf(dev_dirname, sizeof(dev_dirname), "some_path/");
|
||||
vdev->name = strdup(long_name);
|
||||
g_spdk_vhost_devices[0] = vdev;
|
||||
ret = spdk_vhost_dev_remove(vdev);
|
||||
CU_ASSERT(ret != 0);
|
||||
if (ret == 0) {
|
||||
vdev->name = NULL;
|
||||
}
|
||||
|
||||
free_vdev(vdev);
|
||||
g_spdk_vhost_devices[0] = NULL;
|
||||
dev_dirname[0] = 0;
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
@ -215,7 +326,10 @@ main(int argc, char **argv)
|
||||
}
|
||||
|
||||
if (
|
||||
CU_add_test(suite, "desc_to_iov", desc_to_iov_test) == NULL
|
||||
CU_add_test(suite, "desc_to_iov", desc_to_iov_test) == NULL ||
|
||||
CU_add_test(suite, "create_controller", create_controller_test) == NULL ||
|
||||
CU_add_test(suite, "dev_find_by_vid", dev_find_by_vid_test) == NULL ||
|
||||
CU_add_test(suite, "remove_controller", remove_controller_test) == NULL
|
||||
) {
|
||||
CU_cleanup_registry();
|
||||
return CU_get_error();
|
||||
|
Loading…
x
Reference in New Issue
Block a user