Commit 2ec93bc3 authored by JinYu's avatar JinYu Committed by Ben Walker
Browse files

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: default avatarJinYu <jin.yu@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/455233


Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Reviewed-by: default avatarDarek Stojaczyk <dariusz.stojaczyk@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent 98516945
Loading
Loading
Loading
Loading
+40 −1
Original line number Diff line number Diff line
@@ -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();