Tests: Create helper macro for COMPAREANDWRITE
Signed-off-by: Ronnie Sahlberg <ronniesahlberg@gmail.com>
This commit is contained in:
@@ -181,6 +181,20 @@ do { \
|
|||||||
} \
|
} \
|
||||||
} while (0);
|
} while (0);
|
||||||
|
|
||||||
|
#define COMPAREANDWRITE(...) \
|
||||||
|
do { \
|
||||||
|
int _r; \
|
||||||
|
_r = compareandwrite(__VA_ARGS__); \
|
||||||
|
if (_r == -2) { \
|
||||||
|
logging(LOG_NORMAL, "[SKIPPED] COMPAREANDWRITE " \
|
||||||
|
"is not implemented."); \
|
||||||
|
CU_PASS("[SKIPPED] Target does not support " \
|
||||||
|
"COMPAREANDWRITE. Skipping test"); \
|
||||||
|
return; \
|
||||||
|
} \
|
||||||
|
CU_ASSERT_EQUAL(_r, 0); \
|
||||||
|
} while (0);
|
||||||
|
|
||||||
#define VERIFY10(...) \
|
#define VERIFY10(...) \
|
||||||
do { \
|
do { \
|
||||||
int _r; \
|
int _r; \
|
||||||
|
|||||||
@@ -71,45 +71,35 @@ test_compareandwrite_dpofua(void)
|
|||||||
|
|
||||||
logging(LOG_VERBOSE, "Test COMPAREANDWRITE with DPO==1");
|
logging(LOG_VERBOSE, "Test COMPAREANDWRITE with DPO==1");
|
||||||
if (dpofua) {
|
if (dpofua) {
|
||||||
ret = compareandwrite(sd, 0, scratch, 2 * block_size,
|
COMPAREANDWRITE(sd, 0, scratch, 2 * block_size,
|
||||||
block_size, 0, 1, 0, 0,
|
block_size, 0, 1, 0, 0,
|
||||||
EXPECT_STATUS_GOOD);
|
EXPECT_STATUS_GOOD);
|
||||||
} else {
|
} else {
|
||||||
ret = compareandwrite(sd, 0, scratch, 2 * block_size,
|
COMPAREANDWRITE(sd, 0, scratch, 2 * block_size,
|
||||||
block_size, 0, 1, 0, 0,
|
block_size, 0, 1, 0, 0,
|
||||||
EXPECT_INVALID_FIELD_IN_CDB);
|
EXPECT_INVALID_FIELD_IN_CDB);
|
||||||
}
|
}
|
||||||
if (ret == -2) {
|
|
||||||
logging(LOG_NORMAL, "[SKIPPED] REPORT_SUPPORTED_OPCODES not "
|
|
||||||
"implemented. Skipping this part of the test");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
CU_ASSERT_EQUAL(ret, 0);
|
|
||||||
|
|
||||||
logging(LOG_VERBOSE, "Test COMPAREANDWRITE with FUA==1");
|
logging(LOG_VERBOSE, "Test COMPAREANDWRITE with FUA==1");
|
||||||
if (dpofua) {
|
if (dpofua) {
|
||||||
ret = compareandwrite(sd, 0, scratch, 2 * block_size,
|
COMPAREANDWRITE(sd, 0, scratch, 2 * block_size,
|
||||||
block_size, 0, 0, 1, 0,
|
block_size, 0, 0, 1, 0,
|
||||||
EXPECT_STATUS_GOOD);
|
EXPECT_STATUS_GOOD);
|
||||||
CU_ASSERT_EQUAL(ret, 0);
|
|
||||||
} else {
|
} else {
|
||||||
ret = compareandwrite(sd, 0, scratch, 2 * block_size,
|
COMPAREANDWRITE(sd, 0, scratch, 2 * block_size,
|
||||||
block_size, 0, 0, 1, 0,
|
block_size, 0, 0, 1, 0,
|
||||||
EXPECT_INVALID_FIELD_IN_CDB);
|
EXPECT_INVALID_FIELD_IN_CDB);
|
||||||
CU_ASSERT_EQUAL(ret, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
logging(LOG_VERBOSE, "Test COMPAREANDWRITE with DPO==1 FUA==1");
|
logging(LOG_VERBOSE, "Test COMPAREANDWRITE with DPO==1 FUA==1");
|
||||||
if (dpofua) {
|
if (dpofua) {
|
||||||
ret = compareandwrite(sd, 0, scratch, 2 * block_size,
|
COMPAREANDWRITE(sd, 0, scratch, 2 * block_size,
|
||||||
block_size, 0, 1, 1, 0,
|
block_size, 0, 1, 1, 0,
|
||||||
EXPECT_STATUS_GOOD);
|
EXPECT_STATUS_GOOD);
|
||||||
CU_ASSERT_EQUAL(ret, 0);
|
|
||||||
} else {
|
} else {
|
||||||
ret = compareandwrite(sd, 0, scratch, 2 * block_size,
|
COMPAREANDWRITE(sd, 0, scratch, 2 * block_size,
|
||||||
block_size, 0, 1, 1, 0,
|
block_size, 0, 1, 1, 0,
|
||||||
EXPECT_INVALID_FIELD_IN_CDB);
|
EXPECT_INVALID_FIELD_IN_CDB);
|
||||||
CU_ASSERT_EQUAL(ret, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
logging(LOG_VERBOSE, "Try fetching REPORT_SUPPORTED_OPCODES "
|
logging(LOG_VERBOSE, "Try fetching REPORT_SUPPORTED_OPCODES "
|
||||||
|
|||||||
@@ -72,17 +72,10 @@ test_compareandwrite_miscompare(void)
|
|||||||
"BlockLimits.MaximumCompareAndWriteLength(%d). "
|
"BlockLimits.MaximumCompareAndWriteLength(%d). "
|
||||||
"Command should fail with INVALID_FIELD_IN_CDB",
|
"Command should fail with INVALID_FIELD_IN_CDB",
|
||||||
i, maxbl);
|
i, maxbl);
|
||||||
ret = compareandwrite(sd, 0,
|
COMPAREANDWRITE(sd, 0,
|
||||||
scratch, 2 * i * block_size,
|
scratch, 2 * i * block_size,
|
||||||
block_size, 0, 0, 0, 0,
|
block_size, 0, 0, 0, 0,
|
||||||
EXPECT_INVALID_FIELD_IN_CDB);
|
EXPECT_INVALID_FIELD_IN_CDB);
|
||||||
if (ret == -2) {
|
|
||||||
CU_PASS("[SKIPPED] Target does not support "
|
|
||||||
"COMPARE_AND_WRITE. Skipping test");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
CU_ASSERT_EQUAL(ret, 0);
|
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,16 +83,10 @@ test_compareandwrite_miscompare(void)
|
|||||||
|
|
||||||
logging(LOG_VERBOSE, "Overwrite %d blocks with 'B' "
|
logging(LOG_VERBOSE, "Overwrite %d blocks with 'B' "
|
||||||
"at LBA:0 (if they all contain 'A')", i);
|
"at LBA:0 (if they all contain 'A')", i);
|
||||||
ret = compareandwrite(sd, 0,
|
COMPAREANDWRITE(sd, 0,
|
||||||
scratch, 2 * i * block_size, block_size,
|
scratch, 2 * i * block_size, block_size,
|
||||||
0, 0, 0, 0,
|
0, 0, 0, 0,
|
||||||
EXPECT_MISCOMPARE);
|
EXPECT_MISCOMPARE);
|
||||||
if (ret == -2) {
|
|
||||||
CU_PASS("[SKIPPED] Target does not support "
|
|
||||||
"COMPARE_AND_WRITE. Skipping test");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
CU_ASSERT_EQUAL(ret, 0);
|
|
||||||
|
|
||||||
logging(LOG_VERBOSE, "Read %d blocks at LBA:0 and verify "
|
logging(LOG_VERBOSE, "Read %d blocks at LBA:0 and verify "
|
||||||
"they are still unchanged as 'A'", i);
|
"they are still unchanged as 'A'", i);
|
||||||
@@ -142,12 +129,10 @@ test_compareandwrite_miscompare(void)
|
|||||||
"BlockLimits.MaximumCompareAndWriteLength(%d). "
|
"BlockLimits.MaximumCompareAndWriteLength(%d). "
|
||||||
"Command should fail with INVALID_FIELD_IN_CDB",
|
"Command should fail with INVALID_FIELD_IN_CDB",
|
||||||
i, maxbl);
|
i, maxbl);
|
||||||
ret = compareandwrite(sd, 0,
|
COMPAREANDWRITE(sd, 0,
|
||||||
scratch, 2 * i * block_size,
|
scratch, 2 * i * block_size,
|
||||||
block_size, 0, 0, 0, 0,
|
block_size, 0, 0, 0, 0,
|
||||||
EXPECT_INVALID_FIELD_IN_CDB);
|
EXPECT_INVALID_FIELD_IN_CDB);
|
||||||
CU_ASSERT_EQUAL(ret, 0);
|
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
memset(scratch + i * block_size, 'B', i * block_size);
|
memset(scratch + i * block_size, 'B', i * block_size);
|
||||||
@@ -155,11 +140,10 @@ test_compareandwrite_miscompare(void)
|
|||||||
logging(LOG_VERBOSE, "Overwrite %d blocks with 'B' "
|
logging(LOG_VERBOSE, "Overwrite %d blocks with 'B' "
|
||||||
"at LBA:%" PRIu64 " (if they all contain 'A')",
|
"at LBA:%" PRIu64 " (if they all contain 'A')",
|
||||||
i, num_blocks - i);
|
i, num_blocks - i);
|
||||||
ret = compareandwrite(sd, num_blocks - i,
|
COMPAREANDWRITE(sd, num_blocks - i,
|
||||||
scratch, 2 * i * block_size, block_size,
|
scratch, 2 * i * block_size, block_size,
|
||||||
0, 0, 0, 0,
|
0, 0, 0, 0,
|
||||||
EXPECT_MISCOMPARE);
|
EXPECT_MISCOMPARE);
|
||||||
CU_ASSERT_EQUAL(ret, 0);
|
|
||||||
|
|
||||||
logging(LOG_VERBOSE, "Read %d blocks at LBA:%" PRIu64
|
logging(LOG_VERBOSE, "Read %d blocks at LBA:%" PRIu64
|
||||||
"they are still unchanged as 'A'",
|
"they are still unchanged as 'A'",
|
||||||
|
|||||||
@@ -69,17 +69,10 @@ test_compareandwrite_simple(void)
|
|||||||
"BlockLimits.MaximumCompareAndWriteLength(%d). "
|
"BlockLimits.MaximumCompareAndWriteLength(%d). "
|
||||||
"Command should fail with INVALID_FIELD_IN_CDB",
|
"Command should fail with INVALID_FIELD_IN_CDB",
|
||||||
i, maxbl);
|
i, maxbl);
|
||||||
ret = compareandwrite(sd, 0,
|
COMPAREANDWRITE(sd, 0,
|
||||||
scratch, 2 * i * block_size,
|
scratch, 2 * i * block_size,
|
||||||
block_size, 0, 0, 0, 0,
|
block_size, 0, 0, 0, 0,
|
||||||
EXPECT_INVALID_FIELD_IN_CDB);
|
EXPECT_INVALID_FIELD_IN_CDB);
|
||||||
if (ret == -2) {
|
|
||||||
CU_PASS("[SKIPPED] Target does not support "
|
|
||||||
"COMPARE_AND_WRITE. Skipping test");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
CU_ASSERT_EQUAL(ret, 0);
|
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,16 +80,10 @@ test_compareandwrite_simple(void)
|
|||||||
|
|
||||||
logging(LOG_VERBOSE, "Overwrite %d blocks with 'B' "
|
logging(LOG_VERBOSE, "Overwrite %d blocks with 'B' "
|
||||||
"at LBA:0 (if they all contain 'A')", i);
|
"at LBA:0 (if they all contain 'A')", i);
|
||||||
ret = compareandwrite(sd, 0,
|
COMPAREANDWRITE(sd, 0,
|
||||||
scratch, 2 * i * block_size, block_size,
|
scratch, 2 * i * block_size, block_size,
|
||||||
0, 0, 0, 0,
|
0, 0, 0, 0,
|
||||||
EXPECT_STATUS_GOOD);
|
EXPECT_STATUS_GOOD);
|
||||||
if (ret == -2) {
|
|
||||||
CU_PASS("[SKIPPED] Target does not support "
|
|
||||||
"COMPARE_AND_WRITE. Skipping test");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
CU_ASSERT_EQUAL(ret, 0);
|
|
||||||
|
|
||||||
logging(LOG_VERBOSE, "Read %d blocks at LBA:0 and verify "
|
logging(LOG_VERBOSE, "Read %d blocks at LBA:0 and verify "
|
||||||
"they are all 'B'", i);
|
"they are all 'B'", i);
|
||||||
@@ -136,12 +123,10 @@ test_compareandwrite_simple(void)
|
|||||||
"BlockLimits.MaximumCompareAndWriteLength(%d). "
|
"BlockLimits.MaximumCompareAndWriteLength(%d). "
|
||||||
"Command should fail with INVALID_FIELD_IN_CDB",
|
"Command should fail with INVALID_FIELD_IN_CDB",
|
||||||
i, maxbl);
|
i, maxbl);
|
||||||
ret = compareandwrite(sd, 0,
|
COMPAREANDWRITE(sd, 0,
|
||||||
scratch, 2 * i * block_size,
|
scratch, 2 * i * block_size,
|
||||||
block_size, 0, 0, 0, 0,
|
block_size, 0, 0, 0, 0,
|
||||||
EXPECT_INVALID_FIELD_IN_CDB);
|
EXPECT_INVALID_FIELD_IN_CDB);
|
||||||
CU_ASSERT_EQUAL(ret, 0);
|
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
memset(scratch + i * block_size, 'B', i * block_size);
|
memset(scratch + i * block_size, 'B', i * block_size);
|
||||||
@@ -149,11 +134,10 @@ test_compareandwrite_simple(void)
|
|||||||
logging(LOG_VERBOSE, "Overwrite %d blocks with 'B' "
|
logging(LOG_VERBOSE, "Overwrite %d blocks with 'B' "
|
||||||
"at LBA:%" PRIu64 " (if they all contain 'A')",
|
"at LBA:%" PRIu64 " (if they all contain 'A')",
|
||||||
i, num_blocks - i);
|
i, num_blocks - i);
|
||||||
ret = compareandwrite(sd, num_blocks - i,
|
COMPAREANDWRITE(sd, num_blocks - i,
|
||||||
scratch, 2 * i * block_size, block_size,
|
scratch, 2 * i * block_size, block_size,
|
||||||
0, 0, 0, 0,
|
0, 0, 0, 0,
|
||||||
EXPECT_STATUS_GOOD);
|
EXPECT_STATUS_GOOD);
|
||||||
CU_ASSERT_EQUAL(ret, 0);
|
|
||||||
|
|
||||||
logging(LOG_VERBOSE, "Read %d blocks at LBA:%" PRIu64
|
logging(LOG_VERBOSE, "Read %d blocks at LBA:%" PRIu64
|
||||||
" and verify they are all 'B'",
|
" and verify they are all 'B'",
|
||||||
|
|||||||
@@ -78,27 +78,19 @@ test_multipathio_compareandwrite(void)
|
|||||||
/* write data is the second half, wrap around */
|
/* write data is the second half, wrap around */
|
||||||
memset(scratch + io_bl * block_size, path + 1,
|
memset(scratch + io_bl * block_size, path + 1,
|
||||||
io_bl * block_size);
|
io_bl * block_size);
|
||||||
|
COMPAREANDWRITE(mp_sds[path], i,
|
||||||
ret = compareandwrite(mp_sds[path], i,
|
scratch, 2 * io_bl * block_size,
|
||||||
scratch, 2 * io_bl * block_size,
|
block_size, 0, 0, 0, 0,
|
||||||
block_size, 0, 0, 0, 0,
|
EXPECT_STATUS_GOOD);
|
||||||
EXPECT_STATUS_GOOD);
|
|
||||||
if (ret == -2) {
|
|
||||||
CU_PASS("[SKIPPED] Target does not support "
|
|
||||||
"COMPARE_AND_WRITE. Skipping test");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
CU_ASSERT_EQUAL(ret, 0);
|
|
||||||
|
|
||||||
logging(LOG_VERBOSE,
|
logging(LOG_VERBOSE,
|
||||||
"Test bad COMPARE_AND_WRITE(%d->%d)",
|
"Test bad COMPARE_AND_WRITE(%d->%d)",
|
||||||
path, path + 1);
|
path, path + 1);
|
||||||
|
|
||||||
ret = compareandwrite(mp_sds[path], i,
|
COMPAREANDWRITE(mp_sds[path], i,
|
||||||
scratch, 2 * io_bl * block_size,
|
scratch, 2 * io_bl * block_size,
|
||||||
block_size, 0, 0, 0, 0,
|
block_size, 0, 0, 0, 0,
|
||||||
EXPECT_MISCOMPARE);
|
EXPECT_MISCOMPARE);
|
||||||
CU_ASSERT_EQUAL(ret, 0);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user