Tests: Add helpers for WRITESAME

Signed-off-by: Ronnie Sahlberg <ronniesahlberg@gmail.com>
This commit is contained in:
Ronnie Sahlberg
2016-02-21 08:57:26 -08:00
parent 4d1e3aecd0
commit 0b5b724f17
15 changed files with 169 additions and 276 deletions

View File

@@ -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);
}
}