Tests: Add helpers for WRITESAME
Signed-off-by: Ronnie Sahlberg <ronniesahlberg@gmail.com>
This commit is contained in:
@@ -294,6 +294,34 @@ do { \
|
||||
CU_ASSERT_EQUAL(_r, 0); \
|
||||
} while (0);
|
||||
|
||||
#define WRITESAME10(...) \
|
||||
do { \
|
||||
int _r; \
|
||||
_r = writesame10(__VA_ARGS__); \
|
||||
if (_r == -2) { \
|
||||
logging(LOG_NORMAL, "[SKIPPED] WRITESAME10 " \
|
||||
"is not implemented."); \
|
||||
CU_PASS("[SKIPPED] Target does not support " \
|
||||
"WRITESAME10. Skipping test"); \
|
||||
return; \
|
||||
} \
|
||||
CU_ASSERT_EQUAL(_r, 0); \
|
||||
} while (0);
|
||||
|
||||
#define WRITESAME16(...) \
|
||||
do { \
|
||||
int _r; \
|
||||
_r = writesame16(__VA_ARGS__); \
|
||||
if (_r == -2) { \
|
||||
logging(LOG_NORMAL, "[SKIPPED] WRITESAME16 " \
|
||||
"is not implemented."); \
|
||||
CU_PASS("[SKIPPED] Target does not support " \
|
||||
"WRITESAME16. Skipping test"); \
|
||||
return; \
|
||||
} \
|
||||
CU_ASSERT_EQUAL(_r, 0); \
|
||||
} while (0);
|
||||
|
||||
#define WRITEVERIFY10(...) \
|
||||
do { \
|
||||
int _r; \
|
||||
|
||||
@@ -48,11 +48,9 @@ test_writesame10_0blocks(void)
|
||||
memset(scratch, 0, block_size);
|
||||
|
||||
if (inq_bl->wsnz) {
|
||||
ret = writesame10(sd, 0,
|
||||
block_size, 0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_INVALID_FIELD_IN_CDB);
|
||||
WRITESAME10(sd, 0, block_size, 0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_INVALID_FIELD_IN_CDB);
|
||||
logging(LOG_NORMAL, "[SKIPPED] WRITESAME10 does not support 0-blocks.");
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -71,22 +69,14 @@ test_writesame10_0blocks(void)
|
||||
}
|
||||
|
||||
logging(LOG_VERBOSE, "Test WRITESAME10 0-blocks one block past end-of-LUN");
|
||||
ret = writesame10(sd, num_blocks + 1,
|
||||
block_size, 0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_LBA_OOB);
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
|
||||
WRITESAME10(sd, num_blocks + 1, block_size, 0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_LBA_OOB);
|
||||
|
||||
logging(LOG_VERBOSE, "Test WRITESAME10 0-blocks at LBA==2^31");
|
||||
ret = writesame10(sd, 0x80000000,
|
||||
block_size, 0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_LBA_OOB);
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
|
||||
WRITESAME10(sd, 0x80000000, block_size, 0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_LBA_OOB);
|
||||
|
||||
logging(LOG_VERBOSE, "Test WRITESAME10 0-blocks at LBA==-1");
|
||||
ret = writesame10(sd, -1,
|
||||
block_size, 0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_LBA_OOB);
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME10(sd, -1, block_size, 0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_LBA_OOB);
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
void
|
||||
test_writesame10_beyond_eol(void)
|
||||
{
|
||||
int i, ret;
|
||||
int i;
|
||||
|
||||
CHECK_FOR_DATALOSS;
|
||||
CHECK_FOR_SBC;
|
||||
@@ -43,40 +43,28 @@ test_writesame10_beyond_eol(void)
|
||||
logging(LOG_VERBOSE, "Test WRITESAME10 1-256 blocks one block beyond the end");
|
||||
memset(scratch, 0, block_size);
|
||||
for (i = 1; i <= 256; i++) {
|
||||
ret = writesame10(sd, num_blocks - i + 1,
|
||||
block_size, i, 0, 0, 0, 0, scratch,
|
||||
EXPECT_LBA_OOB);
|
||||
if (ret == -2) {
|
||||
CU_PASS("[SKIPPED] Target does not support WRITESAME10. Skipping test");
|
||||
return;
|
||||
}
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME10(sd, num_blocks - i + 1,
|
||||
block_size, i, 0, 0, 0, 0, scratch,
|
||||
EXPECT_LBA_OOB);
|
||||
}
|
||||
|
||||
|
||||
logging(LOG_VERBOSE, "Test WRITESAME10 1-256 blocks at LBA==2^31");
|
||||
for (i = 1; i <= 256; i++) {
|
||||
ret = writesame10(sd, 0x80000000,
|
||||
block_size, i, 0, 0, 0, 0, scratch,
|
||||
EXPECT_LBA_OOB);
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME10(sd, 0x80000000,
|
||||
block_size, i, 0, 0, 0, 0, scratch,
|
||||
EXPECT_LBA_OOB);
|
||||
}
|
||||
|
||||
|
||||
logging(LOG_VERBOSE, "Test WRITESAME10 1-256 blocks at LBA==-1");
|
||||
for (i = 1; i <= 256; i++) {
|
||||
ret = writesame10(sd, -1,
|
||||
block_size, i, 0, 0, 0, 0, scratch,
|
||||
EXPECT_LBA_OOB);
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME10(sd, -1, block_size, i, 0, 0, 0, 0, scratch,
|
||||
EXPECT_LBA_OOB);
|
||||
}
|
||||
|
||||
|
||||
logging(LOG_VERBOSE, "Test WRITESAME10 2-256 blocks all but one block beyond the end");
|
||||
for (i = 2; i <= 256; i++) {
|
||||
ret = writesame10(sd, num_blocks - 1,
|
||||
block_size, i, 0, 0, 0, 0, scratch,
|
||||
EXPECT_LBA_OOB);
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME10(sd, num_blocks - 1,
|
||||
block_size, i, 0, 0, 0, 0, scratch,
|
||||
EXPECT_LBA_OOB);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
void
|
||||
test_writesame10_simple(void)
|
||||
{
|
||||
int i, ret;
|
||||
int i;
|
||||
|
||||
CHECK_FOR_DATALOSS;
|
||||
CHECK_FOR_SBC;
|
||||
@@ -40,22 +40,14 @@ test_writesame10_simple(void)
|
||||
|
||||
memset(scratch, 0, block_size);
|
||||
for (i = 1; i <= 256; i++) {
|
||||
ret = writesame10(sd, 0,
|
||||
block_size, i, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
if (ret == -2) {
|
||||
CU_PASS("[SKIPPED] Target does not support WRITESAME10. Skipping test");
|
||||
return;
|
||||
}
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME10(sd, 0, block_size, i, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
}
|
||||
|
||||
logging(LOG_VERBOSE, "Test WRITESAME10 of 1-256 blocks at the end of the LUN");
|
||||
for (i = 1; i <= 256; i++) {
|
||||
ret = writesame10(sd, num_blocks - i,
|
||||
block_size, i, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME10(sd, num_blocks - i,
|
||||
block_size, i, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -30,7 +30,6 @@
|
||||
void
|
||||
test_writesame10_unmap(void)
|
||||
{
|
||||
int ret;
|
||||
unsigned int i;
|
||||
|
||||
CHECK_FOR_DATALOSS;
|
||||
@@ -51,10 +50,8 @@ test_writesame10_unmap(void)
|
||||
|
||||
logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME10", i);
|
||||
memset(scratch, 0, block_size);
|
||||
ret = writesame10(sd, 0,
|
||||
block_size, i, 0, 1, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME10(sd, 0, block_size, i, 0, 1, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
|
||||
if (rc16->lbprz) {
|
||||
logging(LOG_VERBOSE, "LBPRZ is set. Read the unmapped "
|
||||
@@ -62,10 +59,10 @@ test_writesame10_unmap(void)
|
||||
|
||||
logging(LOG_VERBOSE, "Read %d blocks and verify they "
|
||||
"are now zero", i);
|
||||
ret = read10(sd, NULL, 0,
|
||||
i * block_size, block_size,
|
||||
0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
read10(sd, NULL, 0,
|
||||
i * block_size, block_size,
|
||||
0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
CU_ASSERT(all_zeroes(scratch, i * block_size));
|
||||
} else {
|
||||
logging(LOG_VERBOSE, "LBPRZ is clear. Skip the read "
|
||||
@@ -85,10 +82,9 @@ test_writesame10_unmap(void)
|
||||
|
||||
logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME10", i);
|
||||
memset(scratch, 0, block_size);
|
||||
ret = writesame10(sd, num_blocks - i,
|
||||
block_size, i, 0, 1, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME10(sd, num_blocks - i,
|
||||
block_size, i, 0, 1, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
|
||||
if (rc16->lbprz) {
|
||||
logging(LOG_VERBOSE, "LBPRZ is set. Read the unmapped "
|
||||
@@ -96,10 +92,10 @@ test_writesame10_unmap(void)
|
||||
|
||||
logging(LOG_VERBOSE, "Read %d blocks and verify they "
|
||||
"are now zero", i);
|
||||
ret = read10(sd, NULL, num_blocks - i,
|
||||
i * block_size, block_size,
|
||||
0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
read10(sd, NULL, num_blocks - i,
|
||||
i * block_size, block_size,
|
||||
0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
CU_ASSERT(all_zeroes(scratch, i * block_size));
|
||||
} else {
|
||||
logging(LOG_VERBOSE, "LBPRZ is clear. Skip the read "
|
||||
@@ -109,28 +105,20 @@ test_writesame10_unmap(void)
|
||||
|
||||
logging(LOG_VERBOSE, "Verify that WRITESAME10 ANCHOR==1 + UNMAP==0 is "
|
||||
"invalid");
|
||||
ret = writesame10(sd, 0,
|
||||
block_size, 1, 1, 0, 0, 0, scratch,
|
||||
EXPECT_INVALID_FIELD_IN_CDB);
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
|
||||
|
||||
WRITESAME10(sd, 0, block_size, 1, 1, 0, 0, 0, scratch,
|
||||
EXPECT_INVALID_FIELD_IN_CDB);
|
||||
|
||||
if (inq_lbp->anc_sup) {
|
||||
logging(LOG_VERBOSE, "Test WRITESAME10 ANCHOR==1 + UNMAP==0");
|
||||
memset(scratch, 0, block_size);
|
||||
ret = writesame10(sd, 0,
|
||||
block_size, 1, 1, 1, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
WRITESAME10(sd, 0, block_size, 1, 1, 1, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
} else {
|
||||
logging(LOG_VERBOSE, "Test WRITESAME10 ANCHOR==1 + UNMAP==0 no "
|
||||
"ANC_SUP so expecting to fail");
|
||||
ret = writesame10(sd, 0,
|
||||
block_size, 1, 1, 1, 0, 0, scratch,
|
||||
EXPECT_INVALID_FIELD_IN_CDB);
|
||||
WRITESAME10(sd, 0, block_size, 1, 1, 1, 0, 0, scratch,
|
||||
EXPECT_INVALID_FIELD_IN_CDB);
|
||||
}
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
|
||||
|
||||
if (inq_bl == NULL) {
|
||||
logging(LOG_VERBOSE, "[FAILED] WRITESAME10 works but "
|
||||
@@ -156,10 +144,8 @@ test_writesame10_unmap(void)
|
||||
|
||||
logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME10", i);
|
||||
memset(scratch, 0, block_size);
|
||||
ret = writesame10(sd, 0,
|
||||
block_size, i, 0, 1, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME10(sd, 0, block_size, i, 0, 1, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
|
||||
if (rc16->lbprz) {
|
||||
logging(LOG_VERBOSE, "LBPRZ is set. Read the unmapped "
|
||||
@@ -167,10 +153,10 @@ test_writesame10_unmap(void)
|
||||
|
||||
logging(LOG_VERBOSE, "Read %d blocks and verify they "
|
||||
"are now zero", i);
|
||||
ret = read10(sd, NULL, 0,
|
||||
i * block_size, block_size,
|
||||
0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
read10(sd, NULL, 0,
|
||||
i * block_size, block_size,
|
||||
0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
CU_ASSERT(all_zeroes(scratch, i * block_size));
|
||||
} else {
|
||||
logging(LOG_VERBOSE, "LBPRZ is clear. Skip the read "
|
||||
@@ -182,9 +168,7 @@ test_writesame10_unmap(void)
|
||||
"INVALID_FIELD_IN_CDB.");
|
||||
|
||||
logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME10", i);
|
||||
ret = writesame10(sd, 0,
|
||||
block_size, i, 0, 1, 0, 0, scratch,
|
||||
EXPECT_INVALID_FIELD_IN_CDB);
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME10(sd, 0, block_size, i, 0, 1, 0, 0, scratch,
|
||||
EXPECT_INVALID_FIELD_IN_CDB);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
void
|
||||
test_writesame10_unmap_unaligned(void)
|
||||
{
|
||||
int i, ret;
|
||||
int i;
|
||||
|
||||
CHECK_FOR_DATALOSS;
|
||||
CHECK_FOR_THIN_PROVISIONING;
|
||||
@@ -42,9 +42,7 @@ test_writesame10_unmap_unaligned(void)
|
||||
memset(scratch, 0xa6, block_size);
|
||||
for (i = 1; i < lbppb; i++) {
|
||||
logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME10 at LBA:%d", lbppb - i, i);
|
||||
ret = writesame10(sd, i,
|
||||
block_size, lbppb - i, 0, 1, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME10(sd, i, block_size, lbppb - i, 0, 1, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,7 +29,6 @@
|
||||
void
|
||||
test_writesame10_unmap_until_end(void)
|
||||
{
|
||||
int ret;
|
||||
unsigned int i;
|
||||
|
||||
CHECK_FOR_DATALOSS;
|
||||
@@ -53,10 +52,9 @@ test_writesame10_unmap_until_end(void)
|
||||
EXPECT_STATUS_GOOD);
|
||||
|
||||
logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME10", i);
|
||||
ret = writesame10(sd, num_blocks - i,
|
||||
block_size, 0, 0, 1, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME10(sd, num_blocks - i,
|
||||
block_size, 0, 0, 1, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
|
||||
if (rc16->lbprz) {
|
||||
logging(LOG_VERBOSE, "LBPRZ is set. Read the unmapped "
|
||||
@@ -64,10 +62,10 @@ test_writesame10_unmap_until_end(void)
|
||||
|
||||
logging(LOG_VERBOSE, "Read %d blocks and verify they "
|
||||
"are now zero", i);
|
||||
ret = read10(sd, NULL, num_blocks - i,
|
||||
i * block_size, block_size,
|
||||
0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
read10(sd, NULL, num_blocks - i,
|
||||
i * block_size, block_size,
|
||||
0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
CU_ASSERT(all_zeroes(scratch, i * block_size));
|
||||
} else {
|
||||
logging(LOG_VERBOSE, "LBPRZ is clear. Skip the read "
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
void
|
||||
test_writesame10_wrprotect(void)
|
||||
{
|
||||
int i, ret;
|
||||
int i;
|
||||
|
||||
/*
|
||||
* Try out different non-zero values for WRPROTECT.
|
||||
@@ -45,15 +45,8 @@ test_writesame10_wrprotect(void)
|
||||
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++) {
|
||||
ret = writesame10(sd, 0,
|
||||
block_size, 1, 0, 0, i, 0, scratch,
|
||||
EXPECT_INVALID_FIELD_IN_CDB);
|
||||
if (ret == -2) {
|
||||
logging(LOG_NORMAL, "[SKIPPED] WRITESAME10 is not implemented.");
|
||||
CU_PASS("WRITESAME10 is not implemented.");
|
||||
return;
|
||||
}
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME10(sd, 0, block_size, 1, 0, 0, i, 0, scratch,
|
||||
EXPECT_INVALID_FIELD_IN_CDB);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -43,11 +43,9 @@ test_writesame16_0blocks(void)
|
||||
memset(scratch, 0, block_size);
|
||||
|
||||
if (inq_bl->wsnz) {
|
||||
ret = writesame16(sd, 0,
|
||||
block_size, 0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_INVALID_FIELD_IN_CDB);
|
||||
WRITESAME16(sd, 0, block_size, 0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_INVALID_FIELD_IN_CDB);
|
||||
logging(LOG_NORMAL, "[SKIPPED] WRITESAME16 does not support 0-blocks.");
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -66,22 +64,15 @@ test_writesame16_0blocks(void)
|
||||
}
|
||||
|
||||
logging(LOG_VERBOSE, "Test WRITESAME16 0-blocks one block past end-of-LUN");
|
||||
ret = writesame16(sd, num_blocks + 1,
|
||||
block_size, 0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_LBA_OOB);
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
|
||||
WRITESAME16(sd, num_blocks + 1, block_size, 0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_LBA_OOB);
|
||||
|
||||
logging(LOG_VERBOSE, "Test WRITESAME16 0-blocks at LBA==2^63");
|
||||
ret = writesame16(sd, 0x8000000000000000ULL,
|
||||
block_size, 0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_LBA_OOB);
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
|
||||
WRITESAME16(sd, 0x8000000000000000ULL,
|
||||
block_size, 0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_LBA_OOB);
|
||||
|
||||
logging(LOG_VERBOSE, "Test WRITESAME16 0-blocks at LBA==-1");
|
||||
ret = writesame16(sd, -1,
|
||||
block_size, 0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_LBA_OOB);
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME16(sd, -1, block_size, 0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_LBA_OOB);
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
void
|
||||
test_writesame16_beyond_eol(void)
|
||||
{
|
||||
int i, ret;
|
||||
int i;
|
||||
|
||||
CHECK_FOR_DATALOSS;
|
||||
CHECK_FOR_SBC;
|
||||
@@ -38,41 +38,28 @@ test_writesame16_beyond_eol(void)
|
||||
logging(LOG_VERBOSE, "Test WRITESAME16 1-256 blocks one block beyond the end");
|
||||
memset(scratch, 0, block_size);
|
||||
for (i = 1; i <= 256; i++) {
|
||||
ret = writesame16(sd, num_blocks - i + 1,
|
||||
block_size, i, 0, 0, 0, 0, scratch,
|
||||
EXPECT_LBA_OOB);
|
||||
if (ret == -2) {
|
||||
logging(LOG_NORMAL, "[SKIPPED] WRITESAME16 is not implemented.");
|
||||
CU_PASS("[SKIPPED] Target does not support WRITESAME16. Skipping test");
|
||||
return;
|
||||
}
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME16(sd, num_blocks - i + 1,
|
||||
block_size, i, 0, 0, 0, 0, scratch,
|
||||
EXPECT_LBA_OOB);
|
||||
}
|
||||
|
||||
|
||||
logging(LOG_VERBOSE, "Test WRITESAME16 1-256 blocks at LBA==2^63");
|
||||
for (i = 1; i <= 256; i++) {
|
||||
ret = writesame16(sd, 0x8000000000000000ULL,
|
||||
block_size, i, 0, 0, 0, 0, scratch,
|
||||
EXPECT_LBA_OOB);
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME16(sd, 0x8000000000000000ULL,
|
||||
block_size, i, 0, 0, 0, 0, scratch,
|
||||
EXPECT_LBA_OOB);
|
||||
}
|
||||
|
||||
|
||||
logging(LOG_VERBOSE, "Test WRITESAME16 1-256 blocks at LBA==-1");
|
||||
for (i = 1; i <= 256; i++) {
|
||||
ret = writesame16(sd, -1,
|
||||
block_size, i, 0, 0, 0, 0, scratch,
|
||||
EXPECT_LBA_OOB);
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME16(sd, -1, block_size, i, 0, 0, 0, 0, scratch,
|
||||
EXPECT_LBA_OOB);
|
||||
}
|
||||
|
||||
|
||||
logging(LOG_VERBOSE, "Test WRITESAME16 2-256 blocks all but one block beyond the end");
|
||||
for (i = 2; i <= 256; i++) {
|
||||
ret = writesame16(sd, num_blocks - 1,
|
||||
block_size, i, 0, 0, 0, 0, scratch,
|
||||
EXPECT_LBA_OOB);
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME16(sd, num_blocks - 1,
|
||||
block_size, i, 0, 0, 0, 0, scratch,
|
||||
EXPECT_LBA_OOB);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
void
|
||||
test_writesame16_simple(void)
|
||||
{
|
||||
int i, ret;
|
||||
int i;
|
||||
|
||||
CHECK_FOR_DATALOSS;
|
||||
CHECK_FOR_SBC;
|
||||
@@ -40,23 +40,14 @@ test_writesame16_simple(void)
|
||||
|
||||
memset(scratch, 0, block_size);
|
||||
for (i = 1; i <= 256; i++) {
|
||||
ret = writesame16(sd, 0,
|
||||
block_size, i, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
if (ret == -2) {
|
||||
logging(LOG_NORMAL, "[SKIPPED] WRITESAME16 is not implemented.");
|
||||
CU_PASS("[SKIPPED] Target does not support WRITESAME16. Skipping test");
|
||||
return;
|
||||
}
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME16(sd, 0, block_size, i, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
}
|
||||
|
||||
logging(LOG_VERBOSE, "Test WRITESAME16 of 1-256 blocks at the end of the LUN");
|
||||
for (i = 1; i <= 256; i++) {
|
||||
ret = writesame16(sd, num_blocks - i,
|
||||
block_size, i, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME16(sd, num_blocks - i,
|
||||
block_size, i, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -29,7 +29,6 @@
|
||||
void
|
||||
test_writesame16_unmap(void)
|
||||
{
|
||||
int ret;
|
||||
unsigned int i;
|
||||
|
||||
CHECK_FOR_DATALOSS;
|
||||
@@ -48,25 +47,18 @@ test_writesame16_unmap(void)
|
||||
|
||||
logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME16", i);
|
||||
memset(scratch, 0, block_size);
|
||||
ret = writesame16(sd, 0,
|
||||
block_size, i, 0, 1, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
if (ret == -2) {
|
||||
logging(LOG_NORMAL, "[SKIPPED] WRITESAME16 is not implemented.");
|
||||
CU_PASS("[SKIPPED] Target does not support WRITESAME16. Skipping test");
|
||||
return;
|
||||
}
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME16(sd, 0, block_size, i, 0, 1, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
|
||||
if (rc16->lbprz) {
|
||||
logging(LOG_VERBOSE, "LBPRZ is set. Read the unmapped "
|
||||
"blocks back and verify they are all zero");
|
||||
logging(LOG_VERBOSE, "Read %d blocks and verify they "
|
||||
"are now zero", i);
|
||||
ret = read16(sd, NULL, 0,
|
||||
i * block_size, block_size,
|
||||
0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
read16(sd, NULL, 0,
|
||||
i * block_size, block_size,
|
||||
0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
CU_ASSERT(all_zeroes(scratch, i * block_size));
|
||||
} else {
|
||||
logging(LOG_VERBOSE, "LBPRZ is clear. Skip the read "
|
||||
@@ -85,20 +77,19 @@ test_writesame16_unmap(void)
|
||||
|
||||
logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME16", i);
|
||||
memset(scratch, 0, block_size);
|
||||
ret = writesame16(sd, num_blocks - i,
|
||||
block_size, i, 0, 1, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME16(sd, num_blocks - i,
|
||||
block_size, i, 0, 1, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
|
||||
if (rc16->lbprz) {
|
||||
logging(LOG_VERBOSE, "LBPRZ is set. Read the unmapped "
|
||||
"blocks back and verify they are all zero");
|
||||
logging(LOG_VERBOSE, "Read %d blocks and verify they "
|
||||
"are now zero", i);
|
||||
ret = read16(sd, NULL, num_blocks - i,
|
||||
i * block_size, block_size,
|
||||
0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
read16(sd, NULL, num_blocks - i,
|
||||
i * block_size, block_size,
|
||||
0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
CU_ASSERT(all_zeroes(scratch, i * block_size));
|
||||
} else {
|
||||
logging(LOG_VERBOSE, "LBPRZ is clear. Skip the read "
|
||||
@@ -107,29 +98,20 @@ test_writesame16_unmap(void)
|
||||
}
|
||||
|
||||
logging(LOG_VERBOSE, "Verify that WRITESAME16 ANCHOR==1 + UNMAP==0 is invalid");
|
||||
ret = writesame16(sd, 0,
|
||||
block_size, 1, 1, 0, 0, 0, scratch,
|
||||
EXPECT_INVALID_FIELD_IN_CDB);
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
|
||||
|
||||
WRITESAME16(sd, 0, block_size, 1, 1, 0, 0, 0, scratch,
|
||||
EXPECT_INVALID_FIELD_IN_CDB);
|
||||
|
||||
if (inq_lbp->anc_sup) {
|
||||
logging(LOG_VERBOSE, "Test WRITESAME16 ANCHOR==1 + UNMAP==0");
|
||||
memset(scratch, 0, block_size);
|
||||
ret = writesame16(sd, 0,
|
||||
block_size, 1, 1, 1, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
WRITESAME16(sd, 0, block_size, 1, 1, 1, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
} else {
|
||||
logging(LOG_VERBOSE, "Test WRITESAME16 ANCHOR==1 + UNMAP==0 no ANC_SUP so expecting to fail");
|
||||
ret = writesame16(sd, 0,
|
||||
block_size, 1, 1, 1, 0, 0, scratch,
|
||||
EXPECT_INVALID_FIELD_IN_CDB);
|
||||
WRITESAME16(sd, 0, block_size, 1, 1, 1, 0, 0, scratch,
|
||||
EXPECT_INVALID_FIELD_IN_CDB);
|
||||
}
|
||||
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
|
||||
|
||||
if (inq_bl == NULL) {
|
||||
logging(LOG_VERBOSE, "[FAILED] WRITESAME16 works but "
|
||||
"BlockLimits VPD is missing.");
|
||||
@@ -154,10 +136,8 @@ test_writesame16_unmap(void)
|
||||
|
||||
logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME16", i);
|
||||
memset(scratch, 0, block_size);
|
||||
ret = writesame16(sd, 0,
|
||||
block_size, i, 0, 1, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME16(sd, 0, block_size, i, 0, 1, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
|
||||
if (rc16->lbprz) {
|
||||
logging(LOG_VERBOSE, "LBPRZ is set. Read the unmapped "
|
||||
@@ -165,10 +145,10 @@ test_writesame16_unmap(void)
|
||||
|
||||
logging(LOG_VERBOSE, "Read %d blocks and verify they "
|
||||
"are now zero", i);
|
||||
ret = read16(sd, NULL, 0,
|
||||
i * block_size, block_size,
|
||||
0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
read16(sd, NULL, 0,
|
||||
i * block_size, block_size,
|
||||
0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
CU_ASSERT(all_zeroes(scratch, i * block_size));
|
||||
} else {
|
||||
logging(LOG_VERBOSE, "LBPRZ is clear. Skip the read "
|
||||
@@ -180,10 +160,8 @@ test_writesame16_unmap(void)
|
||||
"INVALID_FIELD_IN_CDB.");
|
||||
|
||||
logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME16", i);
|
||||
ret = writesame16(sd, 0,
|
||||
block_size, i, 0, 1, 0, 0, scratch,
|
||||
EXPECT_INVALID_FIELD_IN_CDB);
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME16(sd, 0, block_size, i, 0, 1, 0, 0, scratch,
|
||||
EXPECT_INVALID_FIELD_IN_CDB);
|
||||
}
|
||||
|
||||
|
||||
@@ -203,10 +181,8 @@ test_writesame16_unmap(void)
|
||||
|
||||
logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME16", i);
|
||||
memset(scratch, 0, block_size);
|
||||
ret = writesame16(sd, 0,
|
||||
block_size, i, 0, 1, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME16(sd, 0, block_size, i, 0, 1, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
|
||||
if (rc16->lbprz) {
|
||||
logging(LOG_VERBOSE, "LBPRZ is set. Read the unmapped "
|
||||
@@ -214,10 +190,10 @@ test_writesame16_unmap(void)
|
||||
|
||||
logging(LOG_VERBOSE, "Read %d blocks and verify they "
|
||||
"are now zero", i);
|
||||
ret = read16(sd, NULL, 0,
|
||||
i * block_size, block_size,
|
||||
0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
read16(sd, NULL, 0,
|
||||
i * block_size, block_size,
|
||||
0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
CU_ASSERT(all_zeroes(scratch, i * block_size));
|
||||
} else {
|
||||
logging(LOG_VERBOSE, "LBPRZ is clear. Skip the read "
|
||||
@@ -229,9 +205,7 @@ test_writesame16_unmap(void)
|
||||
"INVALID_FIELD_IN_CDB.");
|
||||
|
||||
logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME16", i);
|
||||
ret = writesame16(sd, 0,
|
||||
block_size, i, 0, 1, 0, 0, scratch,
|
||||
EXPECT_INVALID_FIELD_IN_CDB);
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME16(sd, 0, block_size, i, 0, 1, 0, 0, scratch,
|
||||
EXPECT_INVALID_FIELD_IN_CDB);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
void
|
||||
test_writesame16_unmap_unaligned(void)
|
||||
{
|
||||
int i, ret;
|
||||
int i;
|
||||
|
||||
CHECK_FOR_DATALOSS;
|
||||
CHECK_FOR_THIN_PROVISIONING;
|
||||
@@ -42,14 +42,7 @@ test_writesame16_unmap_unaligned(void)
|
||||
|
||||
for (i = 1; i < lbppb; i++) {
|
||||
logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME16 at LBA:%d", lbppb - i, i);
|
||||
ret = writesame16(sd, i, 0, lbppb - i,
|
||||
0, 1, 0, 0, NULL,
|
||||
EXPECT_STATUS_GOOD);
|
||||
if (ret == -2) {
|
||||
logging(LOG_NORMAL, "[SKIPPED] WRITESAME16 is not implemented.");
|
||||
CU_PASS("[SKIPPED] Target does not support WRITESAME16. Skipping test");
|
||||
return;
|
||||
}
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME16(sd, i, 0, lbppb - i, 0, 1, 0, 0, NULL,
|
||||
EXPECT_STATUS_GOOD);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,6 @@
|
||||
void
|
||||
test_writesame16_unmap_until_end(void)
|
||||
{
|
||||
int ret;
|
||||
unsigned int i;
|
||||
|
||||
CHECK_FOR_DATALOSS;
|
||||
@@ -56,15 +55,9 @@ test_writesame16_unmap_until_end(void)
|
||||
|
||||
logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME16", i);
|
||||
memset(scratch, 0, block_size);
|
||||
ret = writesame16(sd, num_blocks - i,
|
||||
block_size, 0, 0, 1, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
if (ret == -2) {
|
||||
logging(LOG_NORMAL, "[SKIPPED] WRITESAME16 is not implemented.");
|
||||
CU_PASS("[SKIPPED] Target does not support WRITESAME16. Skipping test");
|
||||
return;
|
||||
}
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME16(sd, num_blocks - i,
|
||||
block_size, 0, 0, 1, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
|
||||
if (rc16->lbprz) {
|
||||
logging(LOG_VERBOSE, "LBPRZ is set. Read the unmapped "
|
||||
@@ -72,10 +65,10 @@ test_writesame16_unmap_until_end(void)
|
||||
|
||||
logging(LOG_VERBOSE, "Read %d blocks and verify they "
|
||||
"are now zero", i);
|
||||
ret = read16(sd, NULL, num_blocks - i,
|
||||
i * block_size, block_size,
|
||||
0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
read16(sd, NULL, num_blocks - i,
|
||||
i * block_size, block_size,
|
||||
0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
CU_ASSERT(all_zeroes(scratch, i * block_size));
|
||||
} else {
|
||||
logging(LOG_VERBOSE, "LBPRZ is clear. Skip the read "
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
void
|
||||
test_writesame16_wrprotect(void)
|
||||
{
|
||||
int i, ret;
|
||||
int i;
|
||||
|
||||
/*
|
||||
* Try out different non-zero values for WRPROTECT.
|
||||
@@ -45,15 +45,8 @@ test_writesame16_wrprotect(void)
|
||||
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++) {
|
||||
ret = writesame16(sd, 0,
|
||||
block_size, 1, 0, 0, i, 0, scratch,
|
||||
EXPECT_INVALID_FIELD_IN_CDB);
|
||||
if (ret == -2) {
|
||||
logging(LOG_NORMAL, "[SKIPPED] WRITESAME16 is not implemented.");
|
||||
CU_PASS("[SKIPPED] Target does not support WRITESAME16. Skipping test");
|
||||
return;
|
||||
}
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME16(sd, 0, block_size, 1, 0, 0, i, 0, scratch,
|
||||
EXPECT_INVALID_FIELD_IN_CDB);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user