Merge pull request #208 from sitsofe/ws-0blocks-fixes
Tests: WRITESAME 0-blocks fixes and improvements
This commit is contained in:
@@ -181,6 +181,16 @@ do { \
|
||||
} \
|
||||
} while (0);
|
||||
|
||||
#define CHECK_SIZE(_min_blocks, _c) \
|
||||
do { \
|
||||
if (num_blocks < _min_blocks) { \
|
||||
logging(LOG_VERBOSE, "[SKIPPED] " \
|
||||
"LUN too small. Skipping assert"); \
|
||||
} else { \
|
||||
_c \
|
||||
} \
|
||||
} while (0);
|
||||
|
||||
#define COMPAREANDWRITE(...) \
|
||||
do { \
|
||||
int _r; \
|
||||
|
||||
@@ -24,11 +24,10 @@
|
||||
#include "scsi-lowlevel.h"
|
||||
#include "iscsi-test-cu.h"
|
||||
|
||||
|
||||
void
|
||||
test_writesame10_0blocks(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
CHECK_FOR_DATALOSS;
|
||||
CHECK_FOR_SBC;
|
||||
|
||||
@@ -54,18 +53,39 @@ test_writesame10_0blocks(void)
|
||||
return;
|
||||
}
|
||||
|
||||
ret = writesame10(sd, 0,
|
||||
block_size, 0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
if (ret == -2) {
|
||||
CU_PASS("[SKIPPED] Target does not support WRITESAME10. Skipping test");
|
||||
return;
|
||||
} else if (ret == -3) {
|
||||
CU_PASS("[SKIPPED] Target does not support WRITESAME10 with NUMBER OF LOGICAL BLOCKS == 0");
|
||||
} else if (ret == -4) {
|
||||
CU_PASS("[SKIPPED] Number of WRITESAME10 logical blocks to be written exceeds MAXIMUM WRITE SAME LENGTH");
|
||||
if (inq_bl->max_ws_len > 0 && num_blocks >= inq_bl->max_ws_len) {
|
||||
WRITESAME10(sd, 0, block_size, 0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_INVALID_FIELD_IN_CDB);
|
||||
} else {
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME10(sd, 0, block_size, 0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
}
|
||||
|
||||
if (inq_bl->max_ws_len > 0) {
|
||||
logging(LOG_VERBOSE,
|
||||
"Test WRITESAME10 at MAXIMUM WRITE SAME LENGTH + 1 blocks "
|
||||
"from end-of-LUN");
|
||||
CHECK_SIZE((inq_bl->max_ws_len + 1),
|
||||
WRITESAME10(sd, num_blocks - (inq_bl->max_ws_len + 1),
|
||||
block_size, 0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_INVALID_FIELD_IN_CDB));
|
||||
logging(LOG_VERBOSE,
|
||||
"Test WRITESAME10 at MAXIMUM WRITE SAME LENGTH blocks "
|
||||
"from end-of-LUN");
|
||||
CHECK_SIZE(inq_bl->max_ws_len,
|
||||
WRITESAME10(sd, num_blocks - inq_bl->max_ws_len,
|
||||
block_size, 0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD));
|
||||
logging(LOG_VERBOSE,
|
||||
"Test WRITESAME10 at MAXIMUM WRITE SAME LENGTH - 1 blocks "
|
||||
"from end-of-LUN");
|
||||
CHECK_SIZE((inq_bl->max_ws_len - 1),
|
||||
WRITESAME10(sd, num_blocks - (inq_bl->max_ws_len - 1),
|
||||
block_size, 0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD));
|
||||
} else {
|
||||
logging(LOG_VERBOSE, "[SKIPPING] No MAXIMUM WRITE SAME LENGTH - "
|
||||
"skipping MAXIMUM WRITE SAME LENGTH asserts.");
|
||||
}
|
||||
|
||||
logging(LOG_VERBOSE, "Test WRITESAME10 0-blocks one block past end-of-LUN");
|
||||
|
||||
@@ -27,8 +27,6 @@
|
||||
void
|
||||
test_writesame16_0blocks(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
CHECK_FOR_DATALOSS;
|
||||
CHECK_FOR_SBC;
|
||||
|
||||
@@ -49,18 +47,40 @@ test_writesame16_0blocks(void)
|
||||
return;
|
||||
}
|
||||
|
||||
ret = writesame16(sd, 0, block_size, 0, 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;
|
||||
} else if (ret == -3) {
|
||||
CU_PASS("[SKIPPED] Target does not support WRITESAME16 with NUMBER OF LOGICAL BLOCKS == 0");
|
||||
} else if (ret == -4) {
|
||||
CU_PASS("[SKIPPED] Number of WRITESAME16 logical blocks to be written exceeds MAXIMUM WRITE SAME LENGTH");
|
||||
|
||||
if (inq_bl->max_ws_len > 0 && num_blocks >= inq_bl->max_ws_len) {
|
||||
WRITESAME16(sd, 0, block_size, 0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_INVALID_FIELD_IN_CDB);
|
||||
} else {
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
WRITESAME16(sd, 0, block_size, 0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD);
|
||||
}
|
||||
|
||||
if (inq_bl->max_ws_len > 0) {
|
||||
logging(LOG_VERBOSE,
|
||||
"Test WRITESAME16 at MAXIMUM WRITE SAME LENGTH + 1 blocks "
|
||||
"from end-of-LUN");
|
||||
CHECK_SIZE((inq_bl->max_ws_len + 1),
|
||||
WRITESAME16(sd, num_blocks - (inq_bl->max_ws_len + 1),
|
||||
block_size, 0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_INVALID_FIELD_IN_CDB));
|
||||
logging(LOG_VERBOSE,
|
||||
"Test WRITESAME16 at MAXIMUM WRITE SAME LENGTH blocks "
|
||||
"from end-of-LUN");
|
||||
CHECK_SIZE(inq_bl->max_ws_len,
|
||||
WRITESAME16(sd, num_blocks - inq_bl->max_ws_len,
|
||||
block_size, 0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD));
|
||||
logging(LOG_VERBOSE,
|
||||
"Test WRITESAME16 at MAXIMUM WRITE SAME LENGTH - 1 blocks "
|
||||
"from end-of-LUN");
|
||||
CHECK_SIZE((inq_bl->max_ws_len - 1),
|
||||
WRITESAME16(sd, num_blocks - (inq_bl->max_ws_len - 1),
|
||||
block_size, 0, 0, 0, 0, 0, scratch,
|
||||
EXPECT_STATUS_GOOD));
|
||||
} else {
|
||||
logging(LOG_VERBOSE, "[SKIPPING] No MAXIMUM WRITE SAME LENGTH - "
|
||||
"skipping MAXIMUM WRITE SAME LENGTH asserts.");
|
||||
}
|
||||
|
||||
logging(LOG_VERBOSE, "Test WRITESAME16 0-blocks one block past end-of-LUN");
|
||||
|
||||
Reference in New Issue
Block a user