diff --git a/test-tool/iscsi-support.c b/test-tool/iscsi-support.c index 54d0136..880a4ec 100644 --- a/test-tool/iscsi-support.c +++ b/test-tool/iscsi-support.c @@ -61,7 +61,7 @@ int data_loss; int (*real_iscsi_queue_pdu)(struct iscsi_context *iscsi, struct iscsi_pdu *pdu); -static void logging(int level, const char *format, ...) +void logging(int level, const char *format, ...) { va_list ap; static char message[1024]; @@ -664,7 +664,7 @@ testunitready(struct iscsi_context *iscsi, int lun) { struct scsi_task *task; - logging(LOG_VERBOSE, "\nSend TESTUNITREADY (Expecting SUCCESS)"); + logging(LOG_VERBOSE, "Send TESTUNITREADY (Expecting SUCCESS)"); task = iscsi_testunitready_sync(iscsi, lun); if (task == NULL) { logging(LOG_NORMAL, @@ -940,6 +940,135 @@ prefetch16_nomedium(struct iscsi_context *iscsi, int lun, uint64_t lba, int num, return 0; } +int +read10(struct iscsi_context *iscsi, int lun, uint32_t lba, + uint32_t datalen, int blocksize, int rdprotect, + int dpo, int fua, int fua_nv, int group, + unsigned char *data) +{ + struct scsi_task *task; + + logging(LOG_VERBOSE, "Send READ10 LBA:%d blocks:%d rdprotect:%d " + "dpo:%d fua:%d fua_nv:%d group:%d", + lba, datalen / blocksize, rdprotect, + dpo, fua, fua_nv, group); + + task = iscsi_read10_sync(iscsi, lun, lba, datalen, blocksize, + rdprotect, dpo, fua, fua_nv, group); + if (task == NULL) { + logging(LOG_NORMAL, "[FAILED] Failed to send READ10 command: %s", + iscsi_get_error(iscsi)); + return -1; + } + if (task->status != SCSI_STATUS_GOOD) { + logging(LOG_NORMAL, "[FAILED] READ10 command: " + "failed with sense. %s", iscsi_get_error(iscsi)); + scsi_free_scsi_task(task); + return -1; + } + + if (data != NULL) { + memcpy(data, task->datain.data, task->datain.size); + } + + scsi_free_scsi_task(task); + logging(LOG_VERBOSE, "[OK] READ10 returned SUCCESS."); + return 0; +} + +int +read10_invalidfieldincdb(struct iscsi_context *iscsi, int lun, uint32_t lba, + uint32_t datalen, int blocksize, int rdprotect, + int dpo, int fua, int fua_nv, int group, + unsigned char *data) +{ + struct scsi_task *task; + + logging(LOG_VERBOSE, "Send READ10 (Expecting INVALID_FIELD_IN_CDB) " + "LBA:%d blocks:%d rdprotect:%d " + "dpo:%d fua:%d fua_nv:%d group:%d", + lba, datalen / blocksize, rdprotect, + dpo, fua, fua_nv, group); + + task = iscsi_read10_sync(iscsi, lun, lba, datalen, blocksize, + rdprotect, dpo, fua, fua_nv, group); + if (task == NULL) { + logging(LOG_NORMAL, "[FAILED] Failed to send READ10 command: %s", + iscsi_get_error(iscsi)); + return -1; + } + if (task->status == SCSI_STATUS_GOOD) { + logging(LOG_NORMAL, "[FAILED] READ10 successful but should " + "have failed with ILLEGAL_REQUEST/INVALID_FIELD_IN_CDB"); + scsi_free_scsi_task(task); + return -1; + } + if (task->status != SCSI_STATUS_CHECK_CONDITION + || task->sense.key != SCSI_SENSE_ILLEGAL_REQUEST + || task->sense.ascq != SCSI_SENSE_ASCQ_INVALID_FIELD_IN_CDB) { + logging(LOG_NORMAL, "[FAILED] READ10 failed with wrong sense. " + "Should have failed with ILLEGAL_REQUEST/" + "INVALID_FIELD_IN_CDB. Sense:%s\n", + iscsi_get_error(iscsi)); + scsi_free_scsi_task(task); + return -1; + } + + if (data != NULL) { + memcpy(data, task->datain.data, task->datain.size); + } + + scsi_free_scsi_task(task); + logging(LOG_VERBOSE, "[OK] READ10 returned ILLEGAL_REQUEST/INVALID_FIELD_IB_CDB."); + return 0; +} + +int +read10_lbaoutofrange(struct iscsi_context *iscsi, int lun, uint32_t lba, + uint32_t datalen, int blocksize, int rdprotect, + int dpo, int fua, int fua_nv, int group, + unsigned char *data) +{ + struct scsi_task *task; + + logging(LOG_VERBOSE, "Send READ10 (Expecting LBA_OUT_OF_RANGE) " + "LBA:%d blocks:%d rdprotect:%d " + "dpo:%d fua:%d fua_nv:%d group:%d", + lba, datalen / blocksize, rdprotect, + dpo, fua, fua_nv, group); + + task = iscsi_read10_sync(iscsi, lun, lba, datalen, blocksize, + rdprotect, dpo, fua, fua_nv, group); + if (task == NULL) { + logging(LOG_NORMAL, "[FAILED] Failed to send READ10 command: %s", + iscsi_get_error(iscsi)); + return -1; + } + if (task->status == SCSI_STATUS_GOOD) { + logging(LOG_NORMAL, "[FAILED] READ10 successful but should " + "have failed with ILLEGAL_REQUEST/LBA_OUT_OF_RANGE"); + scsi_free_scsi_task(task); + return -1; + } + if (task->status != SCSI_STATUS_CHECK_CONDITION + || task->sense.key != SCSI_SENSE_ILLEGAL_REQUEST + || task->sense.ascq != SCSI_SENSE_ASCQ_LBA_OUT_OF_RANGE) { + logging(LOG_NORMAL, "[FAILED] READ10 failed with wrong sense. " + "Should have failed with ILLEGAL_REQUEST/" + "LBA_OUT_OF_RANGE. Sense:%s\n", iscsi_get_error(iscsi)); + scsi_free_scsi_task(task); + return -1; + } + + if (data != NULL) { + memcpy(data, task->datain.data, task->datain.size); + } + + scsi_free_scsi_task(task); + logging(LOG_VERBOSE, "[OK] READ10 returned ILLEGAL_REQUEST/LBA_OUT_OF_RANGE."); + return 0; +} + int verify10(struct iscsi_context *iscsi, int lun, unsigned char *data, uint32_t datalen, uint32_t lba, int vprotect, int dpo, int bytchk, int blocksize) { diff --git a/test-tool/iscsi-support.h b/test-tool/iscsi-support.h index dde550d..7be502c 100644 --- a/test-tool/iscsi-support.h +++ b/test-tool/iscsi-support.h @@ -33,6 +33,7 @@ extern int loglevel; #define LOG_SILENT 0 #define LOG_NORMAL 1 #define LOG_VERBOSE 2 +void logging(int level, const char *format, ...); extern uint32_t block_size; extern uint64_t num_blocks; @@ -118,6 +119,9 @@ int prefetch10_nomedium(struct iscsi_context *iscsi, int lun, uint32_t lba, int int prefetch16(struct iscsi_context *iscsi, int lun, uint64_t lba, int num_blocks, int immed, int group); int prefetch16_lbaoutofrange(struct iscsi_context *iscsi, int lun, uint64_t lba, int num_blocks, int immed, int group); int prefetch16_nomedium(struct iscsi_context *iscsi, int lun, uint64_t lba, int num_blocks, int immed, int group); +int read10(struct iscsi_context *iscsi, int lun, uint32_t lba, uint32_t datalen, int blocksize, int rdprotect, int dpo, int fua, int fua_nv, int group, unsigned char *data); +int read10_invalidfieldincdb(struct iscsi_context *iscsi, int lun, uint32_t lba, uint32_t datalen, int blocksize, int rdprotect, int dpo, int fua, int fua_nv, int group, unsigned char *data); +int read10_lbaoutofrange(struct iscsi_context *iscsi, int lun, uint32_t lba, uint32_t datalen, int blocksize, int rdprotect, int dpo, int fua, int fua_nv, int group, unsigned char *data); int verify10(struct iscsi_context *iscsi, int lun, unsigned char *data, uint32_t datalen, uint32_t lba, int vprotect, int dpo, int bytchk, int blocksize); int verify10_nomedium(struct iscsi_context *iscsi, int lun, unsigned char *data, uint32_t datalen, uint32_t lba, int vprotect, int dpo, int bytchk, int blocksize); int verify10_miscompare(struct iscsi_context *iscsi, int lun, unsigned char *data, uint32_t datalen, uint32_t lba, int vprotect, int dpo, int bytchk, int blocksize); diff --git a/test-tool/iscsi-test-cu.c b/test-tool/iscsi-test-cu.c index a9ed2cb..d5692ff 100644 --- a/test-tool/iscsi-test-cu.c +++ b/test-tool/iscsi-test-cu.c @@ -324,6 +324,7 @@ main(int argc, char *argv[]) break; case 'n': mode = CU_BRM_NORMAL; + loglevel = LOG_NORMAL; break; case 'v': mode = CU_BRM_VERBOSE; /* default */ diff --git a/test-tool/test_read10_0blocks.c b/test-tool/test_read10_0blocks.c index 789f380..9cb756d 100644 --- a/test-tool/test_read10_0blocks.c +++ b/test-tool/test_read10_0blocks.c @@ -26,48 +26,32 @@ void test_read10_0blocks(void) { - /* read zero blocks at LBA 0 ... */ - task = iscsi_read10_sync(iscsic, tgt_lun, 0, 0, block_size, - 0, 0, 0, 0, 0); - CU_ASSERT_PTR_NOT_NULL(task); - CU_ASSERT_EQUAL(task->status, SCSI_STATUS_GOOD); - scsi_free_scsi_task(task); - task = NULL; + int ret; + + logging(LOG_VERBOSE, "\nTest READ10 0-blocks at LBA==0"); + ret = read10(iscsic, tgt_lun, 0, 0, block_size, + 0, 0, 0, 0, 0, NULL); + CU_ASSERT_EQUAL(ret, 0); - /* READ10 0blocks at one block beyond ... */ if (num_blocks > 0x80000000) { CU_PASS("[SKIPPED] LUN is too big"); return; } - task = iscsi_read10_sync(iscsic, tgt_lun, num_blocks + 1, 0, - block_size, 0, 0, 0, 0, 0); - CU_ASSERT_PTR_NOT_NULL(task); - CU_ASSERT_NOT_EQUAL(task->status, SCSI_STATUS_GOOD); - CU_ASSERT_EQUAL(task->status, SCSI_STATUS_CHECK_CONDITION); - CU_ASSERT_EQUAL(task->sense.key, SCSI_SENSE_ILLEGAL_REQUEST); - CU_ASSERT_EQUAL(task->sense.ascq, SCSI_SENSE_ASCQ_LBA_OUT_OF_RANGE); - scsi_free_scsi_task(task); - task = NULL; - /* READ10 0blocks at LBA 2^31 ... */ - task = iscsi_read10_sync(iscsic, tgt_lun, 0x80000000, 0, block_size, - 0, 0, 0, 0, 0); - CU_ASSERT_PTR_NOT_NULL(task); - CU_ASSERT_NOT_EQUAL(task->status, SCSI_STATUS_GOOD); - CU_ASSERT_EQUAL(task->status, SCSI_STATUS_CHECK_CONDITION); - CU_ASSERT_EQUAL(task->sense.key, SCSI_SENSE_ILLEGAL_REQUEST); - CU_ASSERT_EQUAL(task->sense.ascq, SCSI_SENSE_ASCQ_LBA_OUT_OF_RANGE); - scsi_free_scsi_task(task); - task = NULL; + logging(LOG_VERBOSE, "Test READ10 0-blocks one block past end-of-LUN"); + ret = read10_lbaoutofrange(iscsic, tgt_lun, num_blocks + 1, 0, + block_size, 0, 0, 0, 0, 0, NULL); + CU_ASSERT_EQUAL(ret, 0); - /* READ10 0blocks at LBA -1 ... */ - task = iscsi_read10_sync(iscsic, tgt_lun, -1, 0, block_size, - 0, 0, 0, 0, 0); - CU_ASSERT_PTR_NOT_NULL(task); - CU_ASSERT_NOT_EQUAL(task->status, SCSI_STATUS_GOOD); - CU_ASSERT_EQUAL(task->status, SCSI_STATUS_CHECK_CONDITION); - CU_ASSERT_EQUAL(task->sense.key, SCSI_SENSE_ILLEGAL_REQUEST); - CU_ASSERT_EQUAL(task->sense.ascq, SCSI_SENSE_ASCQ_LBA_OUT_OF_RANGE); - scsi_free_scsi_task(task); - task = NULL; + + logging(LOG_VERBOSE, "Test READ10 0-blocks at LBA==2^31"); + ret = read10_lbaoutofrange(iscsic, tgt_lun, 0x80000000, 0, block_size, + 0, 0, 0, 0, 0, NULL); + CU_ASSERT_EQUAL(ret, 0); + + + logging(LOG_VERBOSE, "Test READ10 0-blocks at LBA==-1"); + ret = read10_lbaoutofrange(iscsic, tgt_lun, -1, 0, block_size, + 0, 0, 0, 0, 0, NULL); + CU_ASSERT_EQUAL(ret, 0); } diff --git a/test-tool/test_read10_beyond_eol.c b/test-tool/test_read10_beyond_eol.c index d8f8188..ca8f095 100644 --- a/test-tool/test_read10_beyond_eol.c +++ b/test-tool/test_read10_beyond_eol.c @@ -27,62 +27,45 @@ void test_read10_beyond_eol(void) { - int i; + int i, ret; if (num_blocks >= 0x80000000) { CU_PASS("LUN is too big for read-beyond-eol tests with READ10. Skipping test.\n"); return; } - /* read 1-256 blocks, one block beyond the end-of-lun */ + + logging(LOG_VERBOSE, "\nTest READ10 1-256 blocks one block beyond the end"); for (i = 1; i <= 256; i++) { - task = iscsi_read10_sync(iscsic, tgt_lun, num_blocks + 2 - i, - i * block_size, block_size, 0, 0, 0, 0, 0); - CU_ASSERT_PTR_NOT_NULL(task); - CU_ASSERT_NOT_EQUAL(task->status, SCSI_STATUS_GOOD); - CU_ASSERT_EQUAL(task->status, SCSI_STATUS_CHECK_CONDITION); - CU_ASSERT_EQUAL(task->sense.key, SCSI_SENSE_ILLEGAL_REQUEST); - CU_ASSERT_EQUAL(task->sense.ascq, SCSI_SENSE_ASCQ_LBA_OUT_OF_RANGE); - scsi_free_scsi_task(task); - task = NULL; + ret = read10_lbaoutofrange(iscsic, tgt_lun, num_blocks + 2 - i, + i * block_size, block_size, + 0, 0, 0, 0, 0, NULL); + CU_ASSERT_EQUAL(ret, 0); } - /* Reading 1-256 blocks at LBA 2^31 */ + + logging(LOG_VERBOSE, "Test READ10 1-256 blocks at LBA==2^31"); for (i = 1; i <= 256; i++) { - task = iscsi_read10_sync(iscsic, tgt_lun, 0x80000000, - i * block_size, block_size, 0, 0, 0, 0, 0); - CU_ASSERT_PTR_NOT_NULL(task); - CU_ASSERT_NOT_EQUAL(task->status, SCSI_STATUS_GOOD); - CU_ASSERT_EQUAL(task->status, SCSI_STATUS_CHECK_CONDITION); - CU_ASSERT_EQUAL(task->sense.key, SCSI_SENSE_ILLEGAL_REQUEST); - CU_ASSERT_EQUAL(task->sense.ascq, SCSI_SENSE_ASCQ_LBA_OUT_OF_RANGE); - scsi_free_scsi_task(task); - task = NULL; + ret = read10_lbaoutofrange(iscsic, tgt_lun, 0x80000000, + i * block_size, block_size, + 0, 0, 0, 0, 0, NULL); + CU_ASSERT_EQUAL(ret, 0); } - /* read 1 - 256 blocks at LBA -1 */ + + logging(LOG_VERBOSE, "Test READ10 1-256 blocks at LBA==-1"); for (i = 1; i <= 256; i++) { - task = iscsi_read10_sync(iscsic, tgt_lun, -1, i * block_size, - block_size, 0, 0, 0, 0, 0); - CU_ASSERT_PTR_NOT_NULL(task); - CU_ASSERT_NOT_EQUAL(task->status, SCSI_STATUS_GOOD); - CU_ASSERT_EQUAL(task->status, SCSI_STATUS_CHECK_CONDITION); - CU_ASSERT_EQUAL(task->sense.key, SCSI_SENSE_ILLEGAL_REQUEST); - CU_ASSERT_EQUAL(task->sense.ascq, SCSI_SENSE_ASCQ_LBA_OUT_OF_RANGE); - scsi_free_scsi_task(task); - task = NULL; + ret = read10_lbaoutofrange(iscsic, tgt_lun, -1, i * block_size, + block_size, 0, 0, 0, 0, 0, NULL); + CU_ASSERT_EQUAL(ret, 0); } - /* read 2-256 blocks, all but one block beyond the eol */ + + logging(LOG_VERBOSE, "Test READ10 2-256 blocks all but one block beyond the end"); for (i = 2; i <= 256; i++) { - task = iscsi_read10_sync(iscsic, tgt_lun, num_blocks, - i * block_size, block_size, 0, 0, 0, 0, 0); - CU_ASSERT_PTR_NOT_NULL(task); - CU_ASSERT_NOT_EQUAL(task->status, SCSI_STATUS_GOOD); - CU_ASSERT_EQUAL(task->status, SCSI_STATUS_CHECK_CONDITION); - CU_ASSERT_EQUAL(task->sense.key, SCSI_SENSE_ILLEGAL_REQUEST); - CU_ASSERT_EQUAL(task->sense.ascq, SCSI_SENSE_ASCQ_LBA_OUT_OF_RANGE); - scsi_free_scsi_task(task); - task = NULL; + ret = read10_lbaoutofrange(iscsic, tgt_lun, num_blocks, + i * block_size, block_size, + 0, 0, 0, 0, 0, NULL); + CU_ASSERT_EQUAL(ret, 0); } } diff --git a/test-tool/test_read10_flags.c b/test-tool/test_read10_flags.c index d52adce..94423df 100644 --- a/test-tool/test_read10_flags.c +++ b/test-tool/test_read10_flags.c @@ -28,104 +28,51 @@ void test_read10_flags(void) { - struct scsi_task *task_ret; + int ret; - fprintf(stderr, "DEBUG: %s: entering\n", __FUNCTION__); - /* This test is only valid for SBC devices */ if (device_type != SCSI_INQUIRY_PERIPHERAL_DEVICE_TYPE_DIRECT_ACCESS) { CU_PASS("[SKIPPED] LUN is not SBC device. Skipping test"); return; } - /* Try out READ10 with DPO : 1 */ - task = malloc(sizeof(struct scsi_task)); - CU_ASSERT_PTR_NOT_NULL(task); - memset(task, 0, sizeof(struct scsi_task)); - task->cdb[0] = SCSI_OPCODE_READ10; - task->cdb[1] = 0x10; - task->cdb[8] = 1; - task->cdb_size = 10; - task->xfer_dir = SCSI_XFER_READ; - task->expxferlen = block_size; + logging(LOG_VERBOSE, "Test READ10 flags"); - task_ret = iscsi_scsi_command_sync(iscsic, tgt_lun, task, NULL); - CU_ASSERT_PTR_NOT_NULL(task_ret); - CU_ASSERT_EQUAL(task->status, SCSI_STATUS_GOOD); - scsi_free_scsi_task(task); - task = NULL; - /* Try out READ10 with FUA : 1 FUA_NV : 0 */ - task = malloc(sizeof(struct scsi_task)); - CU_ASSERT_PTR_NOT_NULL(task); + logging(LOG_VERBOSE, "Test READ10 with DPO==1"); + ret = read10(iscsic, tgt_lun, 0, + block_size, block_size, + 0, 1, 0, 0, 0, NULL); + CU_ASSERT_EQUAL(ret, 0); - memset(task, 0, sizeof(struct scsi_task)); - task->cdb[0] = SCSI_OPCODE_READ10; - task->cdb[1] = 0x08; - task->cdb[8] = 1; - task->cdb_size = 10; - task->xfer_dir = SCSI_XFER_READ; - task->expxferlen = block_size; - task_ret = iscsi_scsi_command_sync(iscsic, tgt_lun, task, NULL); - CU_ASSERT_PTR_NOT_NULL(task_ret); - CU_ASSERT_EQUAL(task->status, SCSI_STATUS_GOOD); - scsi_free_scsi_task(task); - task = NULL; + logging(LOG_VERBOSE, "Test READ10 with FUA==1 FUA_NV==0"); + ret = read10(iscsic, tgt_lun, 0, + block_size, block_size, + 0, 0, 1, 0, 0, NULL); + CU_ASSERT_EQUAL(ret, 0); - /* Try out READ10 with FUA : 1 FUA_NV : 1 */ - task = malloc(sizeof(struct scsi_task)); - CU_ASSERT_PTR_NOT_NULL(task); - memset(task, 0, sizeof(struct scsi_task)); - task->cdb[0] = SCSI_OPCODE_READ10; - task->cdb[1] = 0x0a; - task->cdb[8] = 1; - task->cdb_size = 10; - task->xfer_dir = SCSI_XFER_READ; - task->expxferlen = block_size; + logging(LOG_VERBOSE, "Test READ10 with FUA==1 FUA_NV==1"); + ret = read10(iscsic, tgt_lun, 0, + block_size, block_size, + 0, 0, 1, 1, 0, NULL); + CU_ASSERT_EQUAL(ret, 0); - task_ret = iscsi_scsi_command_sync(iscsic, tgt_lun, task, NULL); - CU_ASSERT_PTR_NOT_NULL(task_ret); - CU_ASSERT_EQUAL(task->status, SCSI_STATUS_GOOD); - scsi_free_scsi_task(task); - task = NULL; - /* Try out READ10 with FUA : 0 FUA_NV : 1 */ - task = malloc(sizeof(struct scsi_task)); - CU_ASSERT_PTR_NOT_NULL(task); + logging(LOG_VERBOSE, "Test READ10 with FUA==0 FUA_NV==1"); + ret = read10(iscsic, tgt_lun, 0, + block_size, block_size, + 0, 0, 0, 1, 0, NULL); + CU_ASSERT_EQUAL(ret, 0); - memset(task, 0, sizeof(struct scsi_task)); - task->cdb[0] = SCSI_OPCODE_READ10; - task->cdb[1] = 0x02; - task->cdb[8] = 1; - task->cdb_size = 10; - task->xfer_dir = SCSI_XFER_READ; - task->expxferlen = block_size; - task_ret = iscsi_scsi_command_sync(iscsic, tgt_lun, task, NULL); - CU_ASSERT_PTR_NOT_NULL(task_ret); - CU_ASSERT_EQUAL(task->status, SCSI_STATUS_GOOD); - scsi_free_scsi_task(task); - task = NULL; - /* Try out READM10 with DPO : 1 FUA : 1 FUA_NV : 1 */ - task = malloc(sizeof(struct scsi_task)); - CU_ASSERT_PTR_NOT_NULL(task); - - memset(task, 0, sizeof(struct scsi_task)); - task->cdb[0] = SCSI_OPCODE_READ10; - task->cdb[1] = 0x18; - task->cdb[8] = 1; - task->cdb_size = 10; - task->xfer_dir = SCSI_XFER_READ; - task->expxferlen = block_size; - - task_ret = iscsi_scsi_command_sync(iscsic, tgt_lun, task, NULL); - CU_ASSERT_PTR_NOT_NULL(task_ret); - CU_ASSERT_EQUAL(task->status, SCSI_STATUS_GOOD); - scsi_free_scsi_task(task); - task = NULL; + logging(LOG_VERBOSE, "Test READ10 with DPO==1 FUA==1 FUA_NV==1"); + ret = read10(iscsic, tgt_lun, 0, + block_size, block_size, + 0, 1, 1, 1, 0, NULL); + CU_ASSERT_EQUAL(ret, 0); } diff --git a/test-tool/test_read10_rdprotect.c b/test-tool/test_read10_rdprotect.c index f72db9c..66582cf 100644 --- a/test-tool/test_read10_rdprotect.c +++ b/test-tool/test_read10_rdprotect.c @@ -28,7 +28,7 @@ void test_read10_rdprotect(void) { - int i; + int i, ret; if (device_type != SCSI_INQUIRY_PERIPHERAL_DEVICE_TYPE_DIRECT_ACCESS) { @@ -37,32 +37,14 @@ test_read10_rdprotect(void) } /* - * Try out Different non-zero values for RDPROTECT. + * Try out different non-zero values for RDPROTECT. * They should all fail. */ - - /* Read10 with non-zero RDPROTECT ... */ + logging(LOG_VERBOSE, "\nTest READ10 with non-zero RDPROTECT"); for (i = 1; i < 8; i++) { - struct scsi_task *task_ret; - - task = malloc(sizeof(struct scsi_task)); - CU_ASSERT_PTR_NOT_NULL(task); - - memset(task, 0, sizeof(struct scsi_task)); - task->cdb[0] = SCSI_OPCODE_READ10; - task->cdb[1] = (i<<5)&0xe0; - task->cdb[8] = 1; - task->cdb_size = 10; - task->xfer_dir = SCSI_XFER_READ; - task->expxferlen = block_size; - - task_ret = iscsi_scsi_command_sync(iscsic, tgt_lun, task, NULL); - CU_ASSERT_PTR_NOT_NULL(task_ret); - - CU_ASSERT_EQUAL(task->status, SCSI_STATUS_CHECK_CONDITION); - CU_ASSERT_EQUAL(task->sense.key, SCSI_SENSE_ILLEGAL_REQUEST); - CU_ASSERT_EQUAL(task->sense.ascq, SCSI_SENSE_ASCQ_INVALID_FIELD_IN_CDB); - scsi_free_scsi_task(task); - task = NULL; + ret = read10_invalidfieldincdb(iscsic, tgt_lun, 0, + block_size, block_size, + i, 0, 0, 0, 0, NULL); + CU_ASSERT_EQUAL(ret, 0); } } diff --git a/test-tool/test_read10_simple.c b/test-tool/test_read10_simple.c index 66dddf1..a948048 100644 --- a/test-tool/test_read10_simple.c +++ b/test-tool/test_read10_simple.c @@ -22,32 +22,28 @@ #include "iscsi.h" #include "scsi-lowlevel.h" +#include "iscsi-support.h" #include "iscsi-test-cu.h" void test_read10_simple(void) { - int i; + int i, ret; - /* read the first 1 - 256 blocks at the start of the LUN */ + logging(LOG_VERBOSE, "\nTest READ10 of 1-256 blocks at the start of the LUN"); for (i = 1; i <= 256; i++) { - task = iscsi_read10_sync(iscsic, tgt_lun, 0, i * block_size, - block_size, 0, 0, 0, 0, 0); - CU_ASSERT_PTR_NOT_NULL(task); - CU_ASSERT_EQUAL(task->status, SCSI_STATUS_GOOD); - scsi_free_scsi_task(task); - task = NULL; + ret = read10(iscsic, tgt_lun, 0, i * block_size, + block_size, 0, 0, 0, 0, 0, NULL); + CU_ASSERT_EQUAL(ret, 0); } - /* read the last 1 - 256 blocks at the end of the LUN */ + + logging(LOG_VERBOSE, "Test READ10 of 1-256 blocks at the end of the LUN"); for (i = 1; i <= 256; i++) { - task = iscsi_read10_sync(iscsic, tgt_lun, num_blocks +1 - i, - i * block_size, block_size, 0, 0, 0, 0, 0); - CU_ASSERT_PTR_NOT_NULL(task); - CU_ASSERT_EQUAL(task->status, SCSI_STATUS_GOOD); - scsi_free_scsi_task(task); - task = NULL; + ret = read10(iscsic, tgt_lun, num_blocks +1 - i, + i * block_size, block_size, 0, 0, 0, 0, 0, NULL); + CU_ASSERT_EQUAL(ret, 0); } } diff --git a/test-tool/test_testunitready_simple.c b/test-tool/test_testunitready_simple.c index e223d18..a942371 100644 --- a/test-tool/test_testunitready_simple.c +++ b/test-tool/test_testunitready_simple.c @@ -28,6 +28,7 @@ test_testunitready_simple(void) { int ret; + logging(LOG_VERBOSE, "\nTest TESTUNITREADY"); ret = testunitready(iscsic, tgt_lun); CU_ASSERT_EQUAL(ret, 0); }