ut/sock: add unit tests for spdk_sock_map

The usage of internal API for sock_map was not unit tested,
so far.

This patch adds first set of UT for the sock_map,
expanding it and fixing some issues later in the series.

Signed-off-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Change-Id: Idfce8e19668a87f1d45d73310edb17d71d9f8bd8
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/10724
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Community-CI: Mellanox Build Bot
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
Tomasz Zawadzki 2021-12-14 10:24:35 +01:00
parent 59a0d2c60d
commit dfeab17ef6

View File

@ -956,6 +956,116 @@ posix_sock_impl_get_set_opts(void)
CU_ASSERT(opts.recv_buf_size == 5);
}
static void
ut_sock_map(void)
{
struct spdk_sock_map map = {
.entries = STAILQ_HEAD_INITIALIZER(map.entries),
.mtx = PTHREAD_MUTEX_INITIALIZER
};
struct spdk_sock_group_impl *group_1, *group_2, *test_group;
int rc;
int test_id;
group_1 = spdk_ut_sock_group_impl_create();
group_2 = spdk_ut_sock_group_impl_create();
/* Test 1
* Sanity check when sock_map is empty */
test_id = spdk_sock_map_find_free(&map);
CU_ASSERT(test_id == -1);
test_group = NULL;
rc = spdk_sock_map_lookup(&map, 1, &test_group);
CU_ASSERT(rc == -EINVAL);
CU_ASSERT(test_group == NULL);
/* Test 2
* Insert single entry */
rc = spdk_sock_map_insert(&map, 1, group_1);
CU_ASSERT(rc == 0);
test_group = NULL;
rc = spdk_sock_map_lookup(&map, 1, &test_group);
CU_ASSERT(rc == 0);
CU_ASSERT(test_group == group_1);
/* There is single entry allocated, but it is not free */
test_id = spdk_sock_map_find_free(&map);
CU_ASSERT(test_id == -1);
/* Free the entry and verify */
spdk_sock_map_release(&map, 1);
test_id = spdk_sock_map_find_free(&map);
CU_ASSERT(test_id == 1);
spdk_sock_map_cleanup(&map);
/* Test 3
* Insert sock_group into placement_id multiple times */
rc = spdk_sock_map_insert(&map, 1, group_1);
CU_ASSERT(rc == 0);
CU_ASSERT(STAILQ_FIRST(&map.entries)->ref == 1);
rc = spdk_sock_map_insert(&map, 1, group_1);
CU_ASSERT(rc == 0);
CU_ASSERT(STAILQ_FIRST(&map.entries)->ref == 2);
/* Release entry once and see that it still exists. */
spdk_sock_map_release(&map, 1);
test_group = NULL;
rc = spdk_sock_map_lookup(&map, 1, &test_group);
CU_ASSERT(rc == 0);
CU_ASSERT(test_group == group_1);
/* Release entry second and final time. */
spdk_sock_map_release(&map, 1);
spdk_sock_map_cleanup(&map);
/* Test 4
* Test multiple entries */
rc = spdk_sock_map_insert(&map, 1, group_1);
CU_ASSERT(rc == 0);
test_group = NULL;
rc = spdk_sock_map_lookup(&map, 1, &test_group);
CU_ASSERT(rc == 0);
CU_ASSERT(test_group == group_1);
rc = spdk_sock_map_insert(&map, 2, group_2);
CU_ASSERT(rc == 0);
test_group = NULL;
rc = spdk_sock_map_lookup(&map, 2, &test_group);
CU_ASSERT(rc == 0);
CU_ASSERT(test_group == group_2);
spdk_sock_map_cleanup(&map);
/* Test 5
* Attempt inserting multiple entries into single placement_id */
rc = spdk_sock_map_insert(&map, 1, group_1);
CU_ASSERT(rc == 0);
test_group = NULL;
rc = spdk_sock_map_lookup(&map, 1, &test_group);
CU_ASSERT(rc == 0);
CU_ASSERT(test_group == group_1);
rc = spdk_sock_map_insert(&map, 1, group_2);
CU_ASSERT(rc == -EINVAL);
test_group = NULL;
rc = spdk_sock_map_lookup(&map, 1, &test_group);
CU_ASSERT(rc == 0);
CU_ASSERT(test_group == group_1);
spdk_sock_map_cleanup(&map);
spdk_ut_sock_group_impl_close(group_2);
spdk_ut_sock_group_impl_close(group_1);
}
int
main(int argc, char **argv)
{
@ -976,6 +1086,7 @@ main(int argc, char **argv)
CU_ADD_TEST(suite, sock_get_default_opts);
CU_ADD_TEST(suite, ut_sock_impl_get_set_opts);
CU_ADD_TEST(suite, posix_sock_impl_get_set_opts);
CU_ADD_TEST(suite, ut_sock_map);
CU_basic_set_mode(CU_BRM_VERBOSE);