TESTS: Update the "invalid read10" test with better description and logging of what exactly it tests
This commit is contained in:
@@ -34,6 +34,9 @@ test_read10_invalid(void)
|
|||||||
char buf[4096];
|
char buf[4096];
|
||||||
struct scsi_task *task_ret;
|
struct scsi_task *task_ret;
|
||||||
|
|
||||||
|
logging(LOG_VERBOSE, LOG_BLANK_LINE);
|
||||||
|
logging(LOG_VERBOSE, "Test invalid READ10 commands");
|
||||||
|
logging(LOG_VERBOSE, "Block size is %u", block_size);
|
||||||
|
|
||||||
/* Try a read10 of 1 block but xferlength == 0 */
|
/* Try a read10 of 1 block but xferlength == 0 */
|
||||||
task = malloc(sizeof(struct scsi_task));
|
task = malloc(sizeof(struct scsi_task));
|
||||||
@@ -52,11 +55,21 @@ test_read10_invalid(void)
|
|||||||
*/
|
*/
|
||||||
iscsi_set_noautoreconnect(iscsic, 1);
|
iscsi_set_noautoreconnect(iscsic, 1);
|
||||||
|
|
||||||
|
|
||||||
|
logging(LOG_VERBOSE, "Try reading one block but with iSCSI expected transfer length==0");
|
||||||
|
|
||||||
task_ret = iscsi_scsi_command_sync(iscsic, tgt_lun, task, NULL);
|
task_ret = iscsi_scsi_command_sync(iscsic, tgt_lun, task, NULL);
|
||||||
CU_ASSERT_PTR_NOT_NULL(task_ret);
|
CU_ASSERT_PTR_NOT_NULL(task_ret);
|
||||||
CU_ASSERT_NOT_EQUAL(task->status, SCSI_STATUS_CANCELLED); /* XXX redundant? */
|
CU_ASSERT_NOT_EQUAL(task->status, SCSI_STATUS_CANCELLED); /* XXX redundant? */
|
||||||
|
|
||||||
|
logging(LOG_VERBOSE, "Verify that the target returned SUCCESS");
|
||||||
CU_ASSERT_EQUAL(task->status, SCSI_STATUS_GOOD);
|
CU_ASSERT_EQUAL(task->status, SCSI_STATUS_GOOD);
|
||||||
|
|
||||||
|
logging(LOG_VERBOSE, "Verify residual overflow flag is set");
|
||||||
CU_ASSERT_EQUAL(task->residual_status, SCSI_RESIDUAL_OVERFLOW);
|
CU_ASSERT_EQUAL(task->residual_status, SCSI_RESIDUAL_OVERFLOW);
|
||||||
|
|
||||||
|
logging(LOG_VERBOSE, "Verify we got %u bytes of residual overflow",
|
||||||
|
block_size);
|
||||||
CU_ASSERT_EQUAL(task->residual, (int64_t)block_size);
|
CU_ASSERT_EQUAL(task->residual, (int64_t)block_size);
|
||||||
scsi_free_scsi_task(task);
|
scsi_free_scsi_task(task);
|
||||||
task = NULL;
|
task = NULL;
|
||||||
@@ -64,7 +77,8 @@ test_read10_invalid(void)
|
|||||||
/* in case the previous test failed the session */
|
/* in case the previous test failed the session */
|
||||||
iscsi_set_noautoreconnect(iscsic, 0);
|
iscsi_set_noautoreconnect(iscsic, 0);
|
||||||
|
|
||||||
/* Try a read10 of 1 block but xferlength == 1024 */
|
|
||||||
|
logging(LOG_VERBOSE, "Try reading one block but with iSCSI expected transfer length==10000");
|
||||||
task = malloc(sizeof(struct scsi_task));
|
task = malloc(sizeof(struct scsi_task));
|
||||||
CU_ASSERT_PTR_NOT_NULL(task);
|
CU_ASSERT_PTR_NOT_NULL(task);
|
||||||
|
|
||||||
@@ -73,17 +87,29 @@ test_read10_invalid(void)
|
|||||||
task->cdb[8] = 1;
|
task->cdb[8] = 1;
|
||||||
task->cdb_size = 10;
|
task->cdb_size = 10;
|
||||||
task->xfer_dir = SCSI_XFER_READ;
|
task->xfer_dir = SCSI_XFER_READ;
|
||||||
task->expxferlen = 1024;
|
task->expxferlen = 10000;
|
||||||
|
|
||||||
task_ret = iscsi_scsi_command_sync(iscsic, tgt_lun, task, NULL);
|
task_ret = iscsi_scsi_command_sync(iscsic, tgt_lun, task, NULL);
|
||||||
CU_ASSERT_PTR_NOT_NULL(task_ret);
|
CU_ASSERT_PTR_NOT_NULL(task_ret);
|
||||||
|
|
||||||
|
logging(LOG_VERBOSE, "Verify that the target returned SUCCESS");
|
||||||
CU_ASSERT_EQUAL(task->status, SCSI_STATUS_GOOD);
|
CU_ASSERT_EQUAL(task->status, SCSI_STATUS_GOOD);
|
||||||
|
|
||||||
|
logging(LOG_VERBOSE, "Verify we got a whole block back from the target");
|
||||||
|
CU_ASSERT_EQUAL(task->datain.size, (int)block_size);
|
||||||
|
|
||||||
|
logging(LOG_VERBOSE, "Verify residual underflow flag is set");
|
||||||
CU_ASSERT_EQUAL(task->residual_status, SCSI_RESIDUAL_OVERFLOW);
|
CU_ASSERT_EQUAL(task->residual_status, SCSI_RESIDUAL_OVERFLOW);
|
||||||
CU_ASSERT_EQUAL(task->residual, (int64_t)block_size);
|
|
||||||
|
logging(LOG_VERBOSE, "Verify we got %u bytes of residual underflow",
|
||||||
|
10000 - block_size);
|
||||||
|
CU_ASSERT_EQUAL(task->residual, (int64_t)(10000 - block_size));
|
||||||
scsi_free_scsi_task(task);
|
scsi_free_scsi_task(task);
|
||||||
task = NULL;
|
task = NULL;
|
||||||
|
|
||||||
/* Try a read10 of 1 block but xferlength == 200 */
|
|
||||||
|
|
||||||
|
logging(LOG_VERBOSE, "Try reading one block but with iSCSI expected transfer length==200");
|
||||||
task = malloc(sizeof(struct scsi_task));
|
task = malloc(sizeof(struct scsi_task));
|
||||||
CU_ASSERT_PTR_NOT_NULL(task);
|
CU_ASSERT_PTR_NOT_NULL(task);
|
||||||
|
|
||||||
@@ -96,13 +122,27 @@ test_read10_invalid(void)
|
|||||||
|
|
||||||
task_ret = iscsi_scsi_command_sync(iscsic, tgt_lun, task, NULL);
|
task_ret = iscsi_scsi_command_sync(iscsic, tgt_lun, task, NULL);
|
||||||
CU_ASSERT_PTR_NOT_NULL(task_ret);
|
CU_ASSERT_PTR_NOT_NULL(task_ret);
|
||||||
|
|
||||||
|
logging(LOG_VERBOSE, "Verify that the target returned SUCCESS");
|
||||||
CU_ASSERT_EQUAL(task->status, SCSI_STATUS_GOOD);
|
CU_ASSERT_EQUAL(task->status, SCSI_STATUS_GOOD);
|
||||||
|
|
||||||
|
logging(LOG_VERBOSE, "Verify we got 200 bytes back from the target");
|
||||||
|
CU_ASSERT_EQUAL(task->datain.size, 200);
|
||||||
|
|
||||||
|
logging(LOG_VERBOSE, "Verify residual overflow flag is set");
|
||||||
CU_ASSERT_EQUAL(task->residual_status, SCSI_RESIDUAL_OVERFLOW);
|
CU_ASSERT_EQUAL(task->residual_status, SCSI_RESIDUAL_OVERFLOW);
|
||||||
|
|
||||||
|
logging(LOG_VERBOSE, "Verify we got %u bytes of residual overflow",
|
||||||
|
block_size - 200);
|
||||||
CU_ASSERT_EQUAL(task->residual, (int64_t)block_size - 200);
|
CU_ASSERT_EQUAL(task->residual, (int64_t)block_size - 200);
|
||||||
|
|
||||||
scsi_free_scsi_task(task);
|
scsi_free_scsi_task(task);
|
||||||
task = NULL;
|
task = NULL;
|
||||||
|
|
||||||
/* Try a read10 of 2 blocks but xferlength == 'block_size' */
|
|
||||||
|
|
||||||
|
logging(LOG_VERBOSE, "Try reading two blocks but iSCSI expected "
|
||||||
|
"transfer length==%u (==one block)", block_size);
|
||||||
task = malloc(sizeof(struct scsi_task));
|
task = malloc(sizeof(struct scsi_task));
|
||||||
CU_ASSERT_PTR_NOT_NULL(task);
|
CU_ASSERT_PTR_NOT_NULL(task);
|
||||||
|
|
||||||
@@ -115,13 +155,25 @@ test_read10_invalid(void)
|
|||||||
|
|
||||||
task_ret = iscsi_scsi_command_sync(iscsic, tgt_lun, task, NULL);
|
task_ret = iscsi_scsi_command_sync(iscsic, tgt_lun, task, NULL);
|
||||||
CU_ASSERT_PTR_NOT_NULL(task_ret);
|
CU_ASSERT_PTR_NOT_NULL(task_ret);
|
||||||
|
|
||||||
|
logging(LOG_VERBOSE, "Verify that the target returned SUCCESS");
|
||||||
CU_ASSERT_EQUAL(task->status, SCSI_STATUS_GOOD);
|
CU_ASSERT_EQUAL(task->status, SCSI_STATUS_GOOD);
|
||||||
|
|
||||||
|
logging(LOG_VERBOSE, "Verify we got one whole block back from the target");
|
||||||
|
CU_ASSERT_EQUAL(task->datain.size, (int)block_size);
|
||||||
|
|
||||||
|
logging(LOG_VERBOSE, "Verify residual overflow flag is set");
|
||||||
CU_ASSERT_EQUAL(task->residual_status, SCSI_RESIDUAL_OVERFLOW);
|
CU_ASSERT_EQUAL(task->residual_status, SCSI_RESIDUAL_OVERFLOW);
|
||||||
|
|
||||||
|
logging(LOG_VERBOSE, "Verify we got one block of residual overflow");
|
||||||
CU_ASSERT_EQUAL(task->residual, (int64_t)block_size);
|
CU_ASSERT_EQUAL(task->residual, (int64_t)block_size);
|
||||||
|
|
||||||
scsi_free_scsi_task(task);
|
scsi_free_scsi_task(task);
|
||||||
task = NULL;
|
task = NULL;
|
||||||
|
|
||||||
/* Try a read10 of 1 block but make it a data-out write on the iscsi layer */
|
|
||||||
|
|
||||||
|
logging(LOG_VERBOSE, "Try READ10 for one block but flag it as a write on the iSCSI layer.");
|
||||||
task = malloc(sizeof(struct scsi_task));
|
task = malloc(sizeof(struct scsi_task));
|
||||||
CU_ASSERT_PTR_NOT_NULL(task);
|
CU_ASSERT_PTR_NOT_NULL(task);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user