rdma: add tests for spdk_nvmf_rdma_get_optimal_poll_group

Change-Id: I79997c84288fdef9f9389bf87396bce03edc4726
Signed-off-by: Alexey Marchuk <alexeymar@mellanox.com>
Signed-off-by: Sasha Kotchubievsky <sashakot@mellanox.com>
Signed-off-by: Evgenii Kochetov <evgeniik@mellanox.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/468994
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
Alexey Marchuk 2019-09-20 13:02:08 +00:00 committed by Ben Walker
parent 73e87ed244
commit 94bb0d5456

View File

@ -792,6 +792,87 @@ test_spdk_nvmf_rdma_request_process(void)
spdk_mempool_free(rtransport.data_wr_pool);
}
#define TEST_GROUPS_COUNT 5
static void
test_spdk_nvmf_rdma_get_optimal_poll_group(void)
{
struct spdk_nvmf_rdma_transport rtransport = {};
struct spdk_nvmf_transport *transport = &rtransport.transport;
struct spdk_nvmf_rdma_qpair rqpair = {};
struct spdk_nvmf_transport_poll_group *groups[TEST_GROUPS_COUNT];
struct spdk_nvmf_rdma_poll_group *rgroups[TEST_GROUPS_COUNT];
struct spdk_nvmf_transport_poll_group *result;
uint32_t i;
rqpair.qpair.transport = transport;
pthread_mutex_init(&rtransport.lock, NULL);
TAILQ_INIT(&rtransport.poll_groups);
for (i = 0; i < TEST_GROUPS_COUNT; i++) {
groups[i] = spdk_nvmf_rdma_poll_group_create(transport);
CU_ASSERT(groups[i] != NULL);
rgroups[i] = SPDK_CONTAINEROF(groups[i], struct spdk_nvmf_rdma_poll_group, group);
groups[i]->transport = transport;
}
CU_ASSERT(rtransport.conn_sched.next_admin_pg == rgroups[0]);
CU_ASSERT(rtransport.conn_sched.next_io_pg == rgroups[0]);
/* Emulate connection of %TEST_GROUPS_COUNT% initiators - each creates 1 admin and 1 io qp */
for (i = 0; i < TEST_GROUPS_COUNT; i++) {
rqpair.qpair.qid = 0;
result = spdk_nvmf_rdma_get_optimal_poll_group(&rqpair.qpair);
CU_ASSERT(result == groups[i]);
CU_ASSERT(rtransport.conn_sched.next_admin_pg == rgroups[(i + 1) % TEST_GROUPS_COUNT]);
CU_ASSERT(rtransport.conn_sched.next_io_pg == rgroups[i]);
rqpair.qpair.qid = 1;
result = spdk_nvmf_rdma_get_optimal_poll_group(&rqpair.qpair);
CU_ASSERT(result == groups[i]);
CU_ASSERT(rtransport.conn_sched.next_admin_pg == rgroups[(i + 1) % TEST_GROUPS_COUNT]);
CU_ASSERT(rtransport.conn_sched.next_io_pg == rgroups[(i + 1) % TEST_GROUPS_COUNT]);
}
/* wrap around, admin/io pg point to the first pg
Destroy all poll groups except of the last one */
for (i = 0; i < TEST_GROUPS_COUNT - 1; i++) {
spdk_nvmf_rdma_poll_group_destroy(groups[i]);
CU_ASSERT(rtransport.conn_sched.next_admin_pg == rgroups[i + 1]);
CU_ASSERT(rtransport.conn_sched.next_io_pg == rgroups[i + 1]);
}
CU_ASSERT(rtransport.conn_sched.next_admin_pg == rgroups[TEST_GROUPS_COUNT - 1]);
CU_ASSERT(rtransport.conn_sched.next_io_pg == rgroups[TEST_GROUPS_COUNT - 1]);
/* Check that pointers to the next admin/io poll groups are not changed */
rqpair.qpair.qid = 0;
result = spdk_nvmf_rdma_get_optimal_poll_group(&rqpair.qpair);
CU_ASSERT(result == groups[TEST_GROUPS_COUNT - 1]);
CU_ASSERT(rtransport.conn_sched.next_admin_pg == rgroups[TEST_GROUPS_COUNT - 1]);
CU_ASSERT(rtransport.conn_sched.next_io_pg == rgroups[TEST_GROUPS_COUNT - 1]);
rqpair.qpair.qid = 1;
result = spdk_nvmf_rdma_get_optimal_poll_group(&rqpair.qpair);
CU_ASSERT(result == groups[TEST_GROUPS_COUNT - 1]);
CU_ASSERT(rtransport.conn_sched.next_admin_pg == rgroups[TEST_GROUPS_COUNT - 1]);
CU_ASSERT(rtransport.conn_sched.next_io_pg == rgroups[TEST_GROUPS_COUNT - 1]);
/* Remove the last poll group, check that pointers are NULL */
spdk_nvmf_rdma_poll_group_destroy(groups[TEST_GROUPS_COUNT - 1]);
CU_ASSERT(rtransport.conn_sched.next_admin_pg == NULL);
CU_ASSERT(rtransport.conn_sched.next_io_pg == NULL);
/* Request optimal poll group, result must be NULL */
rqpair.qpair.qid = 0;
result = spdk_nvmf_rdma_get_optimal_poll_group(&rqpair.qpair);
CU_ASSERT(result == NULL);
rqpair.qpair.qid = 1;
result = spdk_nvmf_rdma_get_optimal_poll_group(&rqpair.qpair);
CU_ASSERT(result == NULL);
pthread_mutex_destroy(&rtransport.lock);
}
#undef TEST_GROUPS_COUNT
int main(int argc, char **argv)
{
CU_pSuite suite = NULL;
@ -808,7 +889,8 @@ int main(int argc, char **argv)
}
if (!CU_add_test(suite, "test_parse_sgl", test_spdk_nvmf_rdma_request_parse_sgl) ||
!CU_add_test(suite, "test_request_process", test_spdk_nvmf_rdma_request_process)) {
!CU_add_test(suite, "test_request_process", test_spdk_nvmf_rdma_request_process) ||
!CU_add_test(suite, "test_optimal_pg", test_spdk_nvmf_rdma_get_optimal_poll_group)) {
CU_cleanup_registry();
return CU_get_error();
}