ut/iscsi: Add out or order completion of read split

Out-of-order case didn't have UT code. Besides, remove unnecessary
if check in the in-order case together.

Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: Ic3c09de73f57033a1db9522519347d7d201e38be
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/473255
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
This commit is contained in:
Shuhei Matsumoto 2019-11-05 15:42:08 +09:00 committed by Tomasz Zawadzki
parent 83271409c0
commit c9275afb62

View File

@ -45,7 +45,8 @@ SPDK_LOG_REGISTER_COMPONENT("iscsi", SPDK_LOG_ISCSI)
#define DMIN32(A,B) ((uint32_t) ((uint32_t)(A) > (uint32_t)(B) ? (uint32_t)(B) : (uint32_t)(A)))
struct spdk_iscsi_globals g_spdk_iscsi;
static TAILQ_HEAD(, spdk_iscsi_task) g_ut_read_tasks = TAILQ_HEAD_INITIALIZER(g_ut_read_tasks);
static TAILQ_HEAD(read_tasks_head, spdk_iscsi_task) g_ut_read_tasks =
TAILQ_HEAD_INITIALIZER(g_ut_read_tasks);
static ssize_t g_sock_writev_bytes = 0;
DEFINE_STUB(spdk_app_get_shm_id, int, (void), 0);
@ -195,6 +196,7 @@ ut_conn_create_read_tasks(int transfer_len)
task = ut_conn_task_get(NULL);
TAILQ_INIT(&task->subtask_list);
task->scsi.transfer_len = transfer_len;
task->scsi.offset = 0;
task->scsi.length = DMIN32(SPDK_BDEV_LARGE_BUF_MAX_SIZE, task->scsi.transfer_len);
@ -250,10 +252,33 @@ read_task_split_in_order_case(void)
primary = TAILQ_FIRST(&g_ut_read_tasks);
SPDK_CU_ASSERT_FATAL(primary != NULL);
if (primary != NULL) {
CU_ASSERT(primary->bytes_completed == primary->scsi.transfer_len);
CU_ASSERT(primary->bytes_completed == primary->scsi.transfer_len);
TAILQ_FOREACH_SAFE(task, &g_ut_read_tasks, link, tmp) {
TAILQ_REMOVE(&g_ut_read_tasks, task, link);
free(task);
}
CU_ASSERT(TAILQ_EMPTY(&g_ut_read_tasks));
}
static void
read_task_split_reverse_order_case(void)
{
struct spdk_iscsi_task *primary, *task, *tmp;
ut_conn_create_read_tasks(SPDK_BDEV_LARGE_BUF_MAX_SIZE * 8);
TAILQ_FOREACH_REVERSE(task, &g_ut_read_tasks, read_tasks_head, link) {
primary = spdk_iscsi_task_get_primary(task);
process_read_task_completion(NULL, task, primary);
}
primary = TAILQ_FIRST(&g_ut_read_tasks);
SPDK_CU_ASSERT_FATAL(primary != NULL);
CU_ASSERT(primary->bytes_completed == primary->scsi.transfer_len);
TAILQ_FOREACH_SAFE(task, &g_ut_read_tasks, link, tmp) {
TAILQ_REMOVE(&g_ut_read_tasks, task, link);
free(task);
@ -380,6 +405,8 @@ main(int argc, char **argv)
if (
CU_add_test(suite, "read task split in order", read_task_split_in_order_case) == NULL ||
CU_add_test(suite, "read task split reverse order",
read_task_split_reverse_order_case) == NULL ||
CU_add_test(suite, "propagate_scsi_error_status_for_split_read_tasks",
propagate_scsi_error_status_for_split_read_tasks) == NULL ||
CU_add_test(suite, "recursive_flush_pdus_calls", recursive_flush_pdus_calls) == NULL