void test_writeverify12_0blocks(void) { CHECK_FOR_DATALOSS; if (num_blocks >= 0x80000000) { CU_PASS("LUN is too big for read-beyond-eol tests with WRITEVERIFY12. Skipping test.\n"); return; } logging(LOG_VERBOSE, LOG_BLANK_LINE); logging(LOG_VERBOSE, "Test WRITEVERIFY12 0-blocks at LBA==0"); WRITEVERIFY12(sd, 0, 0, block_size, 0, 0, 0, 0, NULL, EXPECT_STATUS_GOOD); logging(LOG_VERBOSE, "Test WRITEVERIFY12 0-blocks one block past end-of-LUN"); WRITEVERIFY12(sd, num_blocks + 1, 0, block_size, 0, 0, 0, 0, NULL, EXPECT_LBA_OOB); logging(LOG_VERBOSE, "Test WRITEVERIFY12 0-blocks at LBA==2^31"); WRITEVERIFY12(sd, 0x80000000, 0, block_size, 0, 0, 0, 0, NULL, EXPECT_LBA_OOB); logging(LOG_VERBOSE, "Test WRITEVERIFY12 0-blocks at LBA==-1"); WRITEVERIFY12(sd, -1, 0, block_size, 0, 0, 0, 0, NULL, EXPECT_LBA_OOB); }
void test_writeverify12_beyond_eol(void) { int i; CHECK_FOR_DATALOSS; if (num_blocks >= 0x80000000) { CU_PASS("LUN is too big for write-beyond-eol tests with WRITEVERIFY12. Skipping test.\n"); return; } logging(LOG_VERBOSE, LOG_BLANK_LINE); logging(LOG_VERBOSE, "Test WRITEVERIFY12 1-256 blocks one block beyond the end"); memset(scratch, 0xa6, 256 * block_size); for (i = 1; i <= 256; i++) { if (maximum_transfer_length && maximum_transfer_length < i) { break; } WRITEVERIFY12(sd, num_blocks + 1 - i, i * block_size, block_size, 0, 0, 1, 0, scratch, EXPECT_LBA_OOB); } logging(LOG_VERBOSE, "Test WRITEVERIFY12 1-256 blocks at LBA==2^31"); for (i = 1; i <= 256; i++) { if (maximum_transfer_length && maximum_transfer_length < i) { break; } WRITEVERIFY12(sd, 0x80000000, i * block_size, block_size, 0, 0, 1, 0, scratch, EXPECT_LBA_OOB); } logging(LOG_VERBOSE, "Test WRITEVERIFY12 1-256 blocks at LBA==-1"); for (i = 1; i <= 256; i++) { if (maximum_transfer_length && maximum_transfer_length < i) { break; } WRITEVERIFY12(sd, -1, i * block_size, block_size, 0, 0, 1, 0, scratch, EXPECT_LBA_OOB); } logging(LOG_VERBOSE, "Test WRITEVERIFY12 2-256 blocks all but one block beyond the end"); for (i = 2; i <= 256; i++) { if (maximum_transfer_length && maximum_transfer_length < i) { break; } WRITEVERIFY12(sd, num_blocks - 1, i * block_size, block_size, 0, 0, 1, 0, scratch, EXPECT_LBA_OOB); } }
void test_writeverify12_wrprotect(void) { int i; /* * Try out different non-zero values for WRPROTECT. */ logging(LOG_VERBOSE, LOG_BLANK_LINE); logging(LOG_VERBOSE, "Test WRITEVERIFY12 with non-zero WRPROTECT"); CHECK_FOR_DATALOSS; CHECK_FOR_SBC; memset(scratch, 0xa6, block_size); if (!inq->protect || (rc16 != NULL && !rc16->prot_en)) { logging(LOG_VERBOSE, "Device does not support/use protection information. All commands should fail."); for (i = 1; i < 8; i++) { WRITEVERIFY12(sd, 0, block_size, block_size, i, 0, 1, 0, scratch, EXPECT_INVALID_FIELD_IN_CDB); } return; } logging(LOG_NORMAL, "No tests for devices that support protection information yet."); }
static void test_writeverify12(void) { logging(LOG_VERBOSE, "Test WRITEVERIFY12 fails with WRITE_PROTECTED"); WRITEVERIFY12(sd, 0, block_size, block_size, 0, 0, 0, 0, scratch, EXPECT_WRITE_PROTECTED); }