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).

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
This commit is contained in:
Bart Van Assche
2013-10-14 18:22:02 +02:00
committed by Ronnie Sahlberg
parent d77765548f
commit cfce944b35
3 changed files with 14 additions and 4 deletions

View File

@@ -177,6 +177,7 @@ EXTERN const char *scsi_sense_key_str(int key);
#define SCSI_SENSE_ASCQ_INTERNAL_TARGET_FAILURE 0x4400
#define SCSI_SENSE_ASCQ_MEDIUM_LOAD_OR_EJECT_FAILED 0x5300
#define SCSI_SENSE_ASCQ_MEDIUM_REMOVAL_PREVENTED 0x5302
#define SCSI_SENSE_ASCQ_INVALID_FIELD_IN_INFORMATION_UNIT 0x0e03
EXTERN const char *scsi_sense_ascq_str(int ascq);

View File

@@ -161,11 +161,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) {
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)) {
logging(LOG_VERBOSE, "[FAILED] Target returned error %s",
iscsi_get_error(iscsic));
CU_ASSERT(0);
}
CU_ASSERT_EQUAL(task->status, SCSI_STATUS_GOOD);
logging(LOG_VERBOSE, "Verify residual overflow flag is set");
if (task->residual_status != SCSI_RESIDUAL_OVERFLOW) {

View File

@@ -161,11 +161,16 @@ 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) {
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))
{
logging(LOG_VERBOSE, "[FAILED] Target returned error %s",
iscsi_get_error(iscsic));
CU_ASSERT(0);
}
CU_ASSERT_EQUAL(task->status, SCSI_STATUS_GOOD);
logging(LOG_VERBOSE, "Verify residual overflow flag is set");
if (task->residual_status != SCSI_RESIDUAL_OVERFLOW) {