From e3e4d8730c94d8a2d960fa859d23f88f8e65bc6a Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Fri, 17 Apr 2015 16:02:52 +0200 Subject: [PATCH] test_write*_residuals: Fix overflow tests RFC 3720 is not clear about whether a target should return SUCCESS or CHECK CONDITION if SPDTL > EDTL. Hence accept both. See also Fred Knight, Re: [Ips] Data Out residual overflow/underflow handling, IETF mailing list archive, 21 September 2012 (http://www.ietf.org/mail-archive/web/ips/current/msg02756.html). This patch reworks the changes introduced via commit cfce944b355f37199a694ae255a58d24db043890 and applies similar changes to the other WRITE and WRITE VERIFY tests. Signed-off-by: Bart Van Assche --- test-tool/test_write10_residuals.c | 14 +++++++------- test-tool/test_write12_residuals.c | 15 +++++++-------- test-tool/test_write16_residuals.c | 10 +++++++--- test-tool/test_writeverify10_residuals.c | 10 +++++++--- test-tool/test_writeverify12_residuals.c | 10 +++++++--- test-tool/test_writeverify16_residuals.c | 10 +++++++--- 6 files changed, 42 insertions(+), 27 deletions(-) diff --git a/test-tool/test_write10_residuals.c b/test-tool/test_write10_residuals.c index d109327..686dfd6 100644 --- a/test-tool/test_write10_residuals.c +++ b/test-tool/test_write10_residuals.c @@ -33,7 +33,7 @@ test_write10_residuals(void) struct scsi_task *task_ret; unsigned char buf[10000]; struct iscsi_data data; - int ret; + int ret, ok; unsigned int i; logging(LOG_VERBOSE, LOG_BLANK_LINE); @@ -170,15 +170,15 @@ test_write10_residuals(void) CU_ASSERT_PTR_NOT_NULL(task_ret); logging(LOG_VERBOSE, "Verify that the target returned SUCCESS"); - if (task->status != SCSI_STATUS_GOOD - && !(task->status == SCSI_STATUS_CHECK_CONDITION - && task->sense.key == SCSI_SENSE_ILLEGAL_REQUEST - && task->sense.ascq == - SCSI_SENSE_ASCQ_INVALID_FIELD_IN_INFORMATION_UNIT)) { + ok = task->status == SCSI_STATUS_GOOD || + (task->status == SCSI_STATUS_CHECK_CONDITION && + task->sense.key == SCSI_SENSE_ILLEGAL_REQUEST && + task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_FIELD_IN_INFORMATION_UNIT); + if (!ok) { logging(LOG_VERBOSE, "[FAILED] Target returned error %s", iscsi_get_error(sd->iscsi_ctx)); - CU_ASSERT(0); } + CU_ASSERT(ok); logging(LOG_VERBOSE, "Verify residual overflow flag is set"); if (task->residual_status != SCSI_RESIDUAL_OVERFLOW) { diff --git a/test-tool/test_write12_residuals.c b/test-tool/test_write12_residuals.c index a4c6831..02f8cda 100644 --- a/test-tool/test_write12_residuals.c +++ b/test-tool/test_write12_residuals.c @@ -33,7 +33,7 @@ test_write12_residuals(void) struct scsi_task *task_ret; unsigned char buf[10000]; struct iscsi_data data; - int ret; + int ret, ok; unsigned int i; logging(LOG_VERBOSE, LOG_BLANK_LINE); @@ -170,16 +170,15 @@ test_write12_residuals(void) CU_ASSERT_PTR_NOT_NULL(task_ret); logging(LOG_VERBOSE, "Verify that the target returned SUCCESS"); - if (task->status != SCSI_STATUS_GOOD - && !(task->status == SCSI_STATUS_CHECK_CONDITION - && task->sense.key == SCSI_SENSE_ILLEGAL_REQUEST - && task->sense.ascq == - SCSI_SENSE_ASCQ_INVALID_FIELD_IN_INFORMATION_UNIT)) - { + ok = task->status == SCSI_STATUS_GOOD || + (task->status == SCSI_STATUS_CHECK_CONDITION && + task->sense.key == SCSI_SENSE_ILLEGAL_REQUEST && + task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_FIELD_IN_INFORMATION_UNIT); + if (!ok) { logging(LOG_VERBOSE, "[FAILED] Target returned error %s", iscsi_get_error(sd->iscsi_ctx)); - CU_ASSERT(0); } + CU_ASSERT(ok); logging(LOG_VERBOSE, "Verify residual overflow flag is set"); if (task->residual_status != SCSI_RESIDUAL_OVERFLOW) { diff --git a/test-tool/test_write16_residuals.c b/test-tool/test_write16_residuals.c index 6f13ac9..74529c2 100644 --- a/test-tool/test_write16_residuals.c +++ b/test-tool/test_write16_residuals.c @@ -33,7 +33,7 @@ test_write16_residuals(void) struct scsi_task *task_ret; unsigned char buf[10000]; struct iscsi_data data; - int ret; + int ret, ok; unsigned int i; logging(LOG_VERBOSE, LOG_BLANK_LINE); @@ -170,11 +170,15 @@ test_write16_residuals(void) CU_ASSERT_PTR_NOT_NULL(task_ret); logging(LOG_VERBOSE, "Verify that the target returned SUCCESS"); - if (task->status != SCSI_STATUS_GOOD) { + ok = task->status == SCSI_STATUS_GOOD || + (task->status == SCSI_STATUS_CHECK_CONDITION && + task->sense.key == SCSI_SENSE_ILLEGAL_REQUEST && + task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_FIELD_IN_INFORMATION_UNIT); + if (!ok) { logging(LOG_VERBOSE, "[FAILED] Target returned error %s", iscsi_get_error(sd->iscsi_ctx)); } - CU_ASSERT_EQUAL(task->status, SCSI_STATUS_GOOD); + CU_ASSERT(ok); logging(LOG_VERBOSE, "Verify residual overflow flag is set"); if (task->residual_status != SCSI_RESIDUAL_OVERFLOW) { diff --git a/test-tool/test_writeverify10_residuals.c b/test-tool/test_writeverify10_residuals.c index ee9bd0d..87b656b 100644 --- a/test-tool/test_writeverify10_residuals.c +++ b/test-tool/test_writeverify10_residuals.c @@ -33,7 +33,7 @@ test_writeverify10_residuals(void) struct scsi_task *task_ret; unsigned char buf[10000]; struct iscsi_data data; - int ret; + int ret, ok; unsigned int i; logging(LOG_VERBOSE, LOG_BLANK_LINE); @@ -179,11 +179,15 @@ test_writeverify10_residuals(void) CU_ASSERT_PTR_NOT_NULL(task_ret); logging(LOG_VERBOSE, "Verify that the target returned SUCCESS"); - if (task->status != SCSI_STATUS_GOOD) { + ok = task->status == SCSI_STATUS_GOOD || + (task->status == SCSI_STATUS_CHECK_CONDITION && + task->sense.key == SCSI_SENSE_ILLEGAL_REQUEST && + task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_FIELD_IN_INFORMATION_UNIT); + if (!ok) { logging(LOG_VERBOSE, "[FAILED] Target returned error %s", iscsi_get_error(sd->iscsi_ctx)); } - CU_ASSERT_EQUAL(task->status, SCSI_STATUS_GOOD); + CU_ASSERT(ok); logging(LOG_VERBOSE, "Verify residual overflow flag is set"); if (task->residual_status != SCSI_RESIDUAL_OVERFLOW) { diff --git a/test-tool/test_writeverify12_residuals.c b/test-tool/test_writeverify12_residuals.c index a0efdf7..3934c6d 100644 --- a/test-tool/test_writeverify12_residuals.c +++ b/test-tool/test_writeverify12_residuals.c @@ -33,7 +33,7 @@ test_writeverify12_residuals(void) struct scsi_task *task_ret; unsigned char buf[10000]; struct iscsi_data data; - int ret; + int ret, ok; unsigned int i; logging(LOG_VERBOSE, LOG_BLANK_LINE); @@ -179,11 +179,15 @@ test_writeverify12_residuals(void) CU_ASSERT_PTR_NOT_NULL(task_ret); logging(LOG_VERBOSE, "Verify that the target returned SUCCESS"); - if (task->status != SCSI_STATUS_GOOD) { + ok = task->status == SCSI_STATUS_GOOD || + (task->status == SCSI_STATUS_CHECK_CONDITION && + task->sense.key == SCSI_SENSE_ILLEGAL_REQUEST && + task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_FIELD_IN_INFORMATION_UNIT); + if (!ok) { logging(LOG_VERBOSE, "[FAILED] Target returned error %s", iscsi_get_error(sd->iscsi_ctx)); } - CU_ASSERT_EQUAL(task->status, SCSI_STATUS_GOOD); + CU_ASSERT(ok); logging(LOG_VERBOSE, "Verify residual overflow flag is set"); if (task->residual_status != SCSI_RESIDUAL_OVERFLOW) { diff --git a/test-tool/test_writeverify16_residuals.c b/test-tool/test_writeverify16_residuals.c index af98722..0950b9f 100644 --- a/test-tool/test_writeverify16_residuals.c +++ b/test-tool/test_writeverify16_residuals.c @@ -33,7 +33,7 @@ test_writeverify16_residuals(void) struct scsi_task *task_ret; unsigned char buf[10000]; struct iscsi_data data; - int ret; + int ret, ok; unsigned int i; logging(LOG_VERBOSE, LOG_BLANK_LINE); @@ -188,11 +188,15 @@ test_writeverify16_residuals(void) CU_ASSERT_PTR_NOT_NULL(task_ret); logging(LOG_VERBOSE, "Verify that the target returned SUCCESS"); - if (task->status != SCSI_STATUS_GOOD) { + ok = task->status == SCSI_STATUS_GOOD || + (task->status == SCSI_STATUS_CHECK_CONDITION && + task->sense.key == SCSI_SENSE_ILLEGAL_REQUEST && + task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_FIELD_IN_INFORMATION_UNIT); + if (!ok) { logging(LOG_VERBOSE, "[FAILED] Target returned error %s", iscsi_get_error(sd->iscsi_ctx)); } - CU_ASSERT_EQUAL(task->status, SCSI_STATUS_GOOD); + CU_ASSERT(ok); logging(LOG_VERBOSE, "Verify residual overflow flag is set"); if (task->residual_status != SCSI_RESIDUAL_OVERFLOW) {