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.");
}
Example #3
0
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);
}