void test_writeverify16_beyond_eol(void) { int i; CHECK_FOR_DATALOSS; CHECK_FOR_SBC; logging(LOG_VERBOSE, LOG_BLANK_LINE); logging(LOG_VERBOSE, "Test WRITEVERIFY16 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; } WRITEVERIFY16(sd, num_blocks + 1 - i, i * block_size, block_size, 0, 0, 1, 0, scratch, EXPECT_LBA_OOB); } logging(LOG_VERBOSE, "Test WRITEVERIFY16 1-256 blocks at LBA==2^63"); for (i = 1; i <= 256; i++) { if (maximum_transfer_length && maximum_transfer_length < i) { break; } WRITEVERIFY16(sd, 0x8000000000000000ULL, i * block_size, block_size, 0, 0, 1, 0, scratch, EXPECT_LBA_OOB); } logging(LOG_VERBOSE, "Test WRITEVERIFY16 1-256 blocks at LBA==-1"); for (i = 1; i <= 256; i++) { if (maximum_transfer_length && maximum_transfer_length < i) { break; } WRITEVERIFY16(sd, -1, i * block_size, block_size, 0, 0, 1, 0, scratch, EXPECT_LBA_OOB); } logging(LOG_VERBOSE, "Test WRITEVERIFY16 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; } WRITEVERIFY16(sd, num_blocks - 1, i * block_size, block_size, 0, 0, 1, 0, scratch, EXPECT_LBA_OOB); } }
void test_writeverify16_wrprotect(void) { int i; /* * Try out different non-zero values for WRPROTECT. */ logging(LOG_VERBOSE, LOG_BLANK_LINE); logging(LOG_VERBOSE, "Test WRITEVERIFY16 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++) { WRITEVERIFY16(sd, 0, block_size, block_size, i, 0, 0, 0, scratch, EXPECT_INVALID_FIELD_IN_CDB); } return; } logging(LOG_NORMAL, "No tests for devices that support protection information yet."); }
static void test_writeverify16(void) { logging(LOG_VERBOSE, "Test WRITEVERIFY16 fails with WRITE_PROTECTED"); WRITEVERIFY16(sd, 0, block_size, block_size, 0, 0, 0, 0, scratch, EXPECT_WRITE_PROTECTED); }
void test_writeverify16_flags(void) { CHECK_FOR_DATALOSS; logging(LOG_VERBOSE, LOG_BLANK_LINE); logging(LOG_VERBOSE, "Test WRITEVERIFY16 flags"); logging(LOG_VERBOSE, "Test WRITEVERIFY16 with BYTCHK==1"); memset(scratch, 0xa6, block_size); WRITEVERIFY16(sd, 0, block_size, block_size, 0, 0, 1, 0, scratch, EXPECT_STATUS_GOOD); }
void test_writeverify16_0blocks(void) { CHECK_FOR_DATALOSS; CHECK_FOR_SBC; logging(LOG_VERBOSE, LOG_BLANK_LINE); logging(LOG_VERBOSE, "Test WRITEVERIFY16 0-blocks at LBA==0"); WRITEVERIFY16(sd, 0, 0, block_size, 0, 0, 0, 0, NULL, EXPECT_STATUS_GOOD); logging(LOG_VERBOSE, "Test WRITEVERIFY16 0-blocks one block past end-of-LUN"); WRITEVERIFY16(sd, num_blocks + 1, 0, block_size, 0, 0, 0, 0, NULL, EXPECT_LBA_OOB); logging(LOG_VERBOSE, "Test WRITEVERIFY16 0-blocks at LBA==2^63"); WRITEVERIFY16(sd, 0x8000000000000000ULL, 0, block_size, 0, 0, 0, 0, NULL, EXPECT_LBA_OOB); logging(LOG_VERBOSE, "Test WRITEVERIFY16 0-blocks at LBA==-1"); WRITEVERIFY16(sd, -1, 0, block_size, 0, 0, 0, 0, NULL, EXPECT_LBA_OOB); }