From fff67ba7dd5978ae12d068b807e9d69d300eb761 Mon Sep 17 00:00:00 2001 From: Chris Zankel Date: Wed, 22 Apr 2015 18:05:13 -0700 Subject: [PATCH] test_writesame*_0blocks: skip 0-block test if unsupported Skip 0-block WRITE SAME tests for targets that don't support these operations, ie. they have write_same_no_zero (WSNZ) set in the block limits vpd. Also, fix the test: "Test WRITESAME10 of 1-256 blocks at the end of the LUN by setting number-of-blocks==0" to actually pass 0 blocks instead of the number of remaining blocks to the end. Signed-off-by: Chris Zankel --- test-tool/test_writesame10_0blocks.c | 16 +++++++++----- test-tool/test_writesame10_unmap_until_end.c | 8 ++++++- test-tool/test_writesame16_0blocks.c | 22 +++++++++++++------- test-tool/test_writesame16_unmap_until_end.c | 6 ++++++ 4 files changed, 38 insertions(+), 14 deletions(-) diff --git a/test-tool/test_writesame10_0blocks.c b/test-tool/test_writesame10_0blocks.c index 4bcd001..b14e2bd 100644 --- a/test-tool/test_writesame10_0blocks.c +++ b/test-tool/test_writesame10_0blocks.c @@ -41,6 +41,16 @@ test_writesame10_0blocks(void) logging(LOG_VERBOSE, "Test WRITESAME10 0-blocks at LBA==0 (WSNZ=%d)", inq_bl->wsnz); memset(buf, 0, block_size); + + if (inq_bl->wsnz) { + ret = writesame10(sd, 0, + block_size, 0, 0, 0, 0, 0, buf, + EXPECT_INVALID_FIELD_IN_CDB); + logging(LOG_NORMAL, "[SKIPPED] WRITESAME16 does not support 0-blocks."); + CU_ASSERT_EQUAL(ret, 0); + return; + } + ret = writesame10(sd, 0, block_size, 0, 0, 0, 0, 0, buf, EXPECT_STATUS_GOOD); @@ -52,11 +62,7 @@ test_writesame10_0blocks(void) } else if (ret == -4) { CU_PASS("[SKIPPED] Number of WRITESAME10 logical blocks to be written exceeds MAXIMUM WRITE SAME LENGTH"); } else { - if (inq_bl->wsnz) { - CU_ASSERT_EQUAL(ret, -1); - } else { - CU_ASSERT_EQUAL(ret, 0); - } + CU_ASSERT_EQUAL(ret, 0); } logging(LOG_VERBOSE, "Test WRITESAME10 0-blocks one block past end-of-LUN"); diff --git a/test-tool/test_writesame10_unmap_until_end.c b/test-tool/test_writesame10_unmap_until_end.c index 6b9bfdd..7e60cac 100644 --- a/test-tool/test_writesame10_unmap_until_end.c +++ b/test-tool/test_writesame10_unmap_until_end.c @@ -40,6 +40,12 @@ test_writesame10_unmap_until_end(void) zeroBlock = alloca(block_size); memset(zeroBlock, 0, block_size); + if (inq_bl->wsnz) { + logging(LOG_NORMAL, "[SKIPPED] WRITESAME10 does not support 0-blocks."); + CU_PASS("[SKIPPED] WRITESAME10 does not support 0-blocks."); + return; + } + logging(LOG_VERBOSE, LOG_BLANK_LINE); logging(LOG_VERBOSE, "Test WRITESAME10 of 1-256 blocks at the end of the LUN by setting number-of-blocks==0"); for (i = 1; i <= 256; i++) { @@ -54,7 +60,7 @@ test_writesame10_unmap_until_end(void) logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME10", i); ret = writesame10(sd, num_blocks - i, - block_size, i, 0, 1, 0, 0, buf, + block_size, 0, 0, 1, 0, 0, buf, EXPECT_STATUS_GOOD); CU_ASSERT_EQUAL(ret, 0); diff --git a/test-tool/test_writesame16_0blocks.c b/test-tool/test_writesame16_0blocks.c index b9091c4..41f4d68 100644 --- a/test-tool/test_writesame16_0blocks.c +++ b/test-tool/test_writesame16_0blocks.c @@ -36,6 +36,16 @@ test_writesame16_0blocks(void) logging(LOG_VERBOSE, "Test WRITESAME16 0-blocks at LBA==0 (WSNZ=%d)", inq_bl->wsnz); memset(buf, 0, block_size); + + if (inq_bl->wsnz) { + ret = writesame16(sd, 0, + block_size, 0, 0, 0, 0, 0, buf, + EXPECT_INVALID_FIELD_IN_CDB); + logging(LOG_NORMAL, "[SKIPPED] WRITESAME16 does not support 0-blocks."); + CU_ASSERT_EQUAL(ret, 0); + return; + } + ret = writesame16(sd, 0, block_size, 0, 0, 0, 0, 0, buf, EXPECT_STATUS_GOOD); @@ -48,30 +58,26 @@ test_writesame16_0blocks(void) } else if (ret == -4) { CU_PASS("[SKIPPED] Number of WRITESAME16 logical blocks to be written exceeds MAXIMUM WRITE SAME LENGTH"); } else { - if (inq_bl->wsnz) { - CU_ASSERT_EQUAL(ret, -1); - } else { - CU_ASSERT_EQUAL(ret, 0); - } + CU_ASSERT_EQUAL(ret, 0); } logging(LOG_VERBOSE, "Test WRITESAME16 0-blocks one block past end-of-LUN"); ret = writesame16(sd, num_blocks + 1, - block_size, inq_bl->wsnz, 0, 0, 0, 0, buf, + block_size, 0, 0, 0, 0, 0, buf, EXPECT_LBA_OOB); CU_ASSERT_EQUAL(ret, 0); logging(LOG_VERBOSE, "Test WRITESAME16 0-blocks at LBA==2^63"); ret = writesame16(sd, 0x8000000000000000ULL, - block_size, inq_bl->wsnz, 0, 0, 0, 0, buf, + block_size, 0, 0, 0, 0, 0, buf, EXPECT_LBA_OOB); CU_ASSERT_EQUAL(ret, 0); logging(LOG_VERBOSE, "Test WRITESAME16 0-blocks at LBA==-1"); ret = writesame16(sd, -1, - block_size, inq_bl->wsnz, 0, 0, 0, 0, buf, + block_size, 0, 0, 0, 0, 0, buf, EXPECT_LBA_OOB); CU_ASSERT_EQUAL(ret, 0); } diff --git a/test-tool/test_writesame16_unmap_until_end.c b/test-tool/test_writesame16_unmap_until_end.c index a24b59f..be2d187 100644 --- a/test-tool/test_writesame16_unmap_until_end.c +++ b/test-tool/test_writesame16_unmap_until_end.c @@ -39,6 +39,12 @@ test_writesame16_unmap_until_end(void) CHECK_FOR_LBPWS; CHECK_FOR_SBC; + if (inq_bl->wsnz) { + logging(LOG_NORMAL, "[SKIPPED] WRITESAME10 does not support 0-blocks."); + CU_PASS("[SKIPPED] WRITESAME10 does not support 0-blocks."); + return; + } + zeroBlock = alloca(block_size); memset(zeroBlock, 0, block_size);