From 2ec93bc3169d6f9e21c7cb52d55294337669c6f6 Mon Sep 17 00:00:00 2001 From: JinYu Date: Wed, 22 May 2019 03:47:16 +0800 Subject: [PATCH] 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 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/455233 Reviewed-by: Changpeng Liu Reviewed-by: Darek Stojaczyk Reviewed-by: Shuhei Matsumoto Reviewed-by: Ben Walker Tested-by: SPDK CI Jenkins --- test/unit/lib/nvme/nvme.c/nvme_ut.c | 41 ++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/test/unit/lib/nvme/nvme.c/nvme_ut.c b/test/unit/lib/nvme/nvme.c/nvme_ut.c index 45a64c0c5..dc7990e63 100644 --- a/test/unit/lib/nvme/nvme.c/nvme_ut.c +++ b/test/unit/lib/nvme/nvme.c/nvme_ut.c @@ -1154,6 +1154,43 @@ test_nvme_request_check_timeout(void) 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) { CU_pSuite suite = NULL; @@ -1209,7 +1246,9 @@ int main(int argc, char **argv) CU_add_test(suite, "test_nvme_robust_mutex_init_shared", test_nvme_robust_mutex_init_shared) == NULL || 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(); return CU_get_error();