unit/nvme: add wait for completion unit test

Add the completion and completion_timeout unit test.
Increase the code coverage of nvme.c

Change-Id: I89ff744955c83dc64a4678633a00c1bb166414d6
Signed-off-by: JinYu <jin.yu@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/455233
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
JinYu 2019-05-22 03:47:16 +08:00 committed by Ben Walker
parent 985169456b
commit 2ec93bc316

View File

@ -1154,6 +1154,43 @@ test_nvme_request_check_timeout(void)
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
} }
struct nvme_completion_poll_status g_status;
uint64_t completion_delay, timeout_in_secs;
int
spdk_nvme_qpair_process_completions(struct spdk_nvme_qpair *qpair, uint32_t max_completions)
{
spdk_delay_us(completion_delay * spdk_get_ticks_hz());
g_status.done = completion_delay < timeout_in_secs ? true : false;
return 0;
}
static void
test_nvme_wait_for_completion(void)
{
struct spdk_nvme_qpair qpair;
int rc = 0;
memset(&qpair, 0, sizeof(qpair));
memset(&g_status, 0, sizeof(g_status));
/* completion timeout */
completion_delay = 2;
timeout_in_secs = 1;
g_status.done = true;
rc = spdk_nvme_wait_for_completion_timeout(&qpair, &g_status, timeout_in_secs);
CU_ASSERT(g_status.done == false);
CU_ASSERT(rc == -EIO);
/* complete in time */
completion_delay = 1;
timeout_in_secs = 2;
rc = spdk_nvme_wait_for_completion_timeout(&qpair, &g_status, timeout_in_secs);
CU_ASSERT(g_status.done == true);
CU_ASSERT(rc == 0);
}
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
CU_pSuite suite = NULL; CU_pSuite suite = NULL;
@ -1209,7 +1246,9 @@ int main(int argc, char **argv)
CU_add_test(suite, "test_nvme_robust_mutex_init_shared", CU_add_test(suite, "test_nvme_robust_mutex_init_shared",
test_nvme_robust_mutex_init_shared) == NULL || test_nvme_robust_mutex_init_shared) == NULL ||
CU_add_test(suite, "test_nvme_request_check_timeout", CU_add_test(suite, "test_nvme_request_check_timeout",
test_nvme_request_check_timeout) == NULL test_nvme_request_check_timeout) == NULL ||
CU_add_test(suite, "test_nvme_wait_for_completion",
test_nvme_wait_for_completion) == NULL
) { ) {
CU_cleanup_registry(); CU_cleanup_registry();
return CU_get_error(); return CU_get_error();