diff --git a/Makefile.am b/Makefile.am index 7a1ca9b..a5f0489 100644 --- a/Makefile.am +++ b/Makefile.am @@ -200,6 +200,7 @@ bin_iscsi_test_cu_SOURCES = test-tool/iscsi-test-cu.c \ test-tool/test_readcapacity16_simple.c \ test-tool/test_readcapacity16_alloclen.c \ test-tool/test_unmap_simple.c \ + test-tool/test_unmap_0blocks.c \ test-tool/test_verify10_simple.c \ test-tool/test_verify10_beyond_eol.c \ test-tool/test_verify10_0blocks.c \ diff --git a/test-tool/iscsi-test-cu.c b/test-tool/iscsi-test-cu.c index d05916a..4b07998 100644 --- a/test-tool/iscsi-test-cu.c +++ b/test-tool/iscsi-test-cu.c @@ -110,6 +110,7 @@ static CU_TestInfo tests_readcapacity16[] = { static CU_TestInfo tests_unmap[] = { { (char *)"testUnmapSimple", test_unmap_simple }, + { (char *)"testUnmapZeroBlocks", test_unmap_0blocks }, CU_TEST_INFO_NULL }; @@ -518,7 +519,7 @@ main(int argc, char *argv[]) return -1; } block_size = rc10->block_size; - num_blocks = rc10->lba; + num_blocks = rc10->lba + 1; scsi_free_scsi_task(task); task = iscsi_readcapacity16_sync(iscsic, lun); @@ -538,7 +539,7 @@ main(int argc, char *argv[]) return -1; } block_size = rc16->block_length; - num_blocks = rc16->returned_lba; + num_blocks = rc16->returned_lba + 1; lbpme = rc16->lbpme; lbppb = 1 << rc16->lbppbe; lbpme = rc16->lbpme; diff --git a/test-tool/iscsi-test-cu.h b/test-tool/iscsi-test-cu.h index 3e4b302..de205e7 100644 --- a/test-tool/iscsi-test-cu.h +++ b/test-tool/iscsi-test-cu.h @@ -68,6 +68,7 @@ void test_readcapacity16_simple(void); void test_readcapacity16_alloclen(void); void test_unmap_simple(void); +void test_unmap_0blocks(void); void test_verify10_simple(void); void test_verify10_beyond_eol(void); diff --git a/test-tool/test_read10_simple.c b/test-tool/test_read10_simple.c index 0005ee0..91bf8dc 100644 --- a/test-tool/test_read10_simple.c +++ b/test-tool/test_read10_simple.c @@ -43,7 +43,7 @@ test_read10_simple(void) logging(LOG_VERBOSE, "Test READ10 of 1-256 blocks at the end of the LUN"); for (i = 1; i <= 256; i++) { - ret = read10(iscsic, tgt_lun, num_blocks +1 - i, + ret = read10(iscsic, tgt_lun, num_blocks - i, i * block_size, block_size, 0, 0, 0, 0, 0, NULL); CU_ASSERT_EQUAL(ret, 0); } diff --git a/test-tool/test_read12_simple.c b/test-tool/test_read12_simple.c index 2147589..a55d50c 100644 --- a/test-tool/test_read12_simple.c +++ b/test-tool/test_read12_simple.c @@ -43,7 +43,7 @@ test_read12_simple(void) logging(LOG_VERBOSE, "Test READ12 of 1-256 blocks at the end of the LUN"); for (i = 1; i <= 256; i++) { - ret = read12(iscsic, tgt_lun, num_blocks +1 - i, + ret = read12(iscsic, tgt_lun, num_blocks - i, i * block_size, block_size, 0, 0, 0, 0, 0, NULL); CU_ASSERT_EQUAL(ret, 0); } diff --git a/test-tool/test_read16_simple.c b/test-tool/test_read16_simple.c index 9bfc4e4..5781b07 100644 --- a/test-tool/test_read16_simple.c +++ b/test-tool/test_read16_simple.c @@ -44,7 +44,7 @@ test_read16_simple(void) logging(LOG_VERBOSE, "Test READ16 of 1-256 blocks at the end of the LUN"); for (i = 1; i <= 256; i++) { - ret = read16(iscsic, tgt_lun, num_blocks +1 - i, + ret = read16(iscsic, tgt_lun, num_blocks - i, i * block_size, block_size, 0, 0, 0, 0, 0, NULL); CU_ASSERT_EQUAL(ret, 0); } diff --git a/test-tool/test_read6_simple.c b/test-tool/test_read6_simple.c index 5110d2c..1cffc3b 100644 --- a/test-tool/test_read6_simple.c +++ b/test-tool/test_read6_simple.c @@ -43,7 +43,7 @@ test_read6_simple(void) logging(LOG_VERBOSE, "Test READ6 of 1-255 blocks at the end of the LUN"); for (i = 1; i <= 255; i++) { - ret = read6(iscsic, tgt_lun, num_blocks +1 - i, + ret = read6(iscsic, tgt_lun, num_blocks - i, i * block_size, block_size, NULL); CU_ASSERT_EQUAL(ret, 0); } diff --git a/test-tool/test_unmap_0blocks.c b/test-tool/test_unmap_0blocks.c new file mode 100644 index 0000000..75921c5 --- /dev/null +++ b/test-tool/test_unmap_0blocks.c @@ -0,0 +1,61 @@ + +/* + Copyright (C) 2013 Ronnie Sahlberg + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . +*/ + +#include + +#include + +#include "iscsi.h" +#include "scsi-lowlevel.h" +#include "iscsi-support.h" +#include "iscsi-test-cu.h" + + +void +test_unmap_0blocks(void) +{ + int i, ret; + struct unmap_list list[257]; + + CHECK_FOR_DATALOSS; + CHECK_FOR_THIN_PROVISIONING; + CHECK_FOR_SBC; + + logging(LOG_VERBOSE, ""); + logging(LOG_VERBOSE, "Test UNMAP of 0 blocks at LBA:0-255 as a single descriptor"); + for (i = 0; i < 256; i++) { + list[0].lba = i; + list[0].num = 0; + ret = unmap(iscsic, tgt_lun, 0, list, 1); + CU_ASSERT_EQUAL(ret, 0); + } + + logging(LOG_VERBOSE, "Test UNMAP of 0 blocks at LBA:0-255 with one descriptor per block"); + for (i = 0; i < 256; i++) { + list[i].lba = i; + list[i].num = 0; + ret = unmap(iscsic, tgt_lun, 0, list, i); + CU_ASSERT_EQUAL(ret, 0); + } + + logging(LOG_VERBOSE, "Test UNMAP of 0 blocks at end-of-LUN"); + list[0].lba = num_blocks; + list[0].num = 0; + ret = unmap(iscsic, tgt_lun, 0, list, 1); + CU_ASSERT_EQUAL(ret, 0); +} diff --git a/test-tool/test_unmap_simple.c b/test-tool/test_unmap_simple.c index aeb7bf7..9b8b297 100644 --- a/test-tool/test_unmap_simple.c +++ b/test-tool/test_unmap_simple.c @@ -47,10 +47,10 @@ test_unmap_simple(void) logging(LOG_VERBOSE, "Test UNMAP of 1-256 blocks at the start of the LUN with one descriptor per block"); - for (i = 1; i <= 256; i++) { - list[i].lba = i-1; + for (i = 0; i < 256; i++) { + list[i].lba = i; list[i].num = 1; - ret = unmap(iscsic, tgt_lun, 0, list, i); + ret = unmap(iscsic, tgt_lun, 0, list, i + 1); CU_ASSERT_EQUAL(ret, 0); } } diff --git a/test-tool/test_verify10_mismatch.c b/test-tool/test_verify10_mismatch.c index 9710d3d..de4828f 100644 --- a/test-tool/test_verify10_mismatch.c +++ b/test-tool/test_verify10_mismatch.c @@ -60,7 +60,7 @@ test_verify10_mismatch(void) unsigned char *buf = malloc(block_size * i); int offset = random() % (i * block_size); - ret = read10(iscsic, tgt_lun, num_blocks +1 - i, + ret = read10(iscsic, tgt_lun, num_blocks - i, i * block_size, block_size, 0, 0, 0, 0, 0, buf); CU_ASSERT_EQUAL(ret, 0); @@ -68,7 +68,7 @@ test_verify10_mismatch(void) buf[offset] ^= 'X'; logging(LOG_VERBOSE, "Flip some bits in the data"); - ret = verify10_miscompare(iscsic, tgt_lun, num_blocks +1 - i, + ret = verify10_miscompare(iscsic, tgt_lun, num_blocks - i, i * block_size, block_size, 0, 0, 1, buf); free(buf); CU_ASSERT_EQUAL(ret, 0); diff --git a/test-tool/test_verify10_mismatch_no_cmp.c b/test-tool/test_verify10_mismatch_no_cmp.c index 6411dcd..6bb0ad9 100644 --- a/test-tool/test_verify10_mismatch_no_cmp.c +++ b/test-tool/test_verify10_mismatch_no_cmp.c @@ -61,7 +61,7 @@ test_verify10_mismatch_no_cmp(void) unsigned char *buf = malloc(block_size * i); int offset = random() % (i * block_size); - ret = read10(iscsic, tgt_lun, num_blocks +1 - i, + ret = read10(iscsic, tgt_lun, num_blocks - i, i * block_size, block_size, 0, 0, 0, 0, 0, buf); CU_ASSERT_EQUAL(ret, 0); @@ -69,7 +69,7 @@ test_verify10_mismatch_no_cmp(void) buf[offset] ^= 'X'; logging(LOG_VERBOSE, "Flip some bits in the data"); - ret = verify10(iscsic, tgt_lun, num_blocks +1 - i, + ret = verify10(iscsic, tgt_lun, num_blocks - i, i * block_size, block_size, 0, 0, 0, buf); free(buf); CU_ASSERT_EQUAL(ret, 0); diff --git a/test-tool/test_verify10_simple.c b/test-tool/test_verify10_simple.c index b51df7c..654a918 100644 --- a/test-tool/test_verify10_simple.c +++ b/test-tool/test_verify10_simple.c @@ -54,11 +54,11 @@ test_verify10_simple(void) for (i = 1; i <= 256; i++) { unsigned char *buf = malloc(block_size * i); - ret = read10(iscsic, tgt_lun, num_blocks +1 - i, + ret = read10(iscsic, tgt_lun, num_blocks - i, i * block_size, block_size, 0, 0, 0, 0, 0, buf); CU_ASSERT_EQUAL(ret, 0); - ret = verify10(iscsic, tgt_lun, num_blocks +1 - i, + ret = verify10(iscsic, tgt_lun, num_blocks - i, i * block_size, block_size, 0, 0, 1, buf); free(buf); CU_ASSERT_EQUAL(ret, 0); diff --git a/test-tool/test_verify12_mismatch.c b/test-tool/test_verify12_mismatch.c index c2c3dc9..4d76845 100644 --- a/test-tool/test_verify12_mismatch.c +++ b/test-tool/test_verify12_mismatch.c @@ -60,7 +60,7 @@ test_verify12_mismatch(void) unsigned char *buf = malloc(block_size * i); int offset = random() % (i * block_size); - ret = read12(iscsic, tgt_lun, num_blocks +1 - i, + ret = read12(iscsic, tgt_lun, num_blocks - i, i * block_size, block_size, 0, 0, 0, 0, 0, buf); CU_ASSERT_EQUAL(ret, 0); @@ -68,7 +68,7 @@ test_verify12_mismatch(void) buf[offset] ^= 'X'; logging(LOG_VERBOSE, "Flip some bits in the data"); - ret = verify12_miscompare(iscsic, tgt_lun, num_blocks +1 - i, + ret = verify12_miscompare(iscsic, tgt_lun, num_blocks - i, i * block_size, block_size, 0, 0, 1, buf); free(buf); CU_ASSERT_EQUAL(ret, 0); diff --git a/test-tool/test_verify12_mismatch_no_cmp.c b/test-tool/test_verify12_mismatch_no_cmp.c index dc9783c..8c72c0e 100644 --- a/test-tool/test_verify12_mismatch_no_cmp.c +++ b/test-tool/test_verify12_mismatch_no_cmp.c @@ -61,7 +61,7 @@ test_verify12_mismatch_no_cmp(void) unsigned char *buf = malloc(block_size * i); int offset = random() % (i * block_size); - ret = read12(iscsic, tgt_lun, num_blocks +1 - i, + ret = read12(iscsic, tgt_lun, num_blocks - i, i * block_size, block_size, 0, 0, 0, 0, 0, buf); CU_ASSERT_EQUAL(ret, 0); @@ -69,7 +69,7 @@ test_verify12_mismatch_no_cmp(void) buf[offset] ^= 'X'; logging(LOG_VERBOSE, "Flip some bits in the data"); - ret = verify12(iscsic, tgt_lun, num_blocks +1 - i, + ret = verify12(iscsic, tgt_lun, num_blocks - i, i * block_size, block_size, 0, 0, 0, buf); free(buf); CU_ASSERT_EQUAL(ret, 0); diff --git a/test-tool/test_verify12_simple.c b/test-tool/test_verify12_simple.c index 02f7ec4..a3c25f7 100644 --- a/test-tool/test_verify12_simple.c +++ b/test-tool/test_verify12_simple.c @@ -54,11 +54,11 @@ test_verify12_simple(void) for (i = 1; i <= 256; i++) { unsigned char *buf = malloc(block_size * i); - ret = read12(iscsic, tgt_lun, num_blocks +1 - i, + ret = read12(iscsic, tgt_lun, num_blocks - i, i * block_size, block_size, 0, 0, 0, 0, 0, buf); CU_ASSERT_EQUAL(ret, 0); - ret = verify12(iscsic, tgt_lun, num_blocks +1 - i, + ret = verify12(iscsic, tgt_lun, num_blocks - i, i * block_size, block_size, 0, 0, 1, buf); free(buf); CU_ASSERT_EQUAL(ret, 0); diff --git a/test-tool/test_verify16_mismatch.c b/test-tool/test_verify16_mismatch.c index 33f7657..7a0c4d8 100644 --- a/test-tool/test_verify16_mismatch.c +++ b/test-tool/test_verify16_mismatch.c @@ -60,7 +60,7 @@ test_verify16_mismatch(void) unsigned char *buf = malloc(block_size * i); int offset = random() % (i * block_size); - ret = read16(iscsic, tgt_lun, num_blocks +1 - i, + ret = read16(iscsic, tgt_lun, num_blocks - i, i * block_size, block_size, 0, 0, 0, 0, 0, buf); CU_ASSERT_EQUAL(ret, 0); @@ -68,7 +68,7 @@ test_verify16_mismatch(void) buf[offset] ^= 'X'; logging(LOG_VERBOSE, "Flip some bits in the data"); - ret = verify16_miscompare(iscsic, tgt_lun, num_blocks +1 - i, + ret = verify16_miscompare(iscsic, tgt_lun, num_blocks - i, i * block_size, block_size, 0, 0, 1, buf); free(buf); CU_ASSERT_EQUAL(ret, 0); diff --git a/test-tool/test_verify16_mismatch_no_cmp.c b/test-tool/test_verify16_mismatch_no_cmp.c index 63a2ed9..ef00b57 100644 --- a/test-tool/test_verify16_mismatch_no_cmp.c +++ b/test-tool/test_verify16_mismatch_no_cmp.c @@ -61,7 +61,7 @@ test_verify16_mismatch_no_cmp(void) unsigned char *buf = malloc(block_size * i); int offset = random() % (i * block_size); - ret = read16(iscsic, tgt_lun, num_blocks +1 - i, + ret = read16(iscsic, tgt_lun, num_blocks - i, i * block_size, block_size, 0, 0, 0, 0, 0, buf); CU_ASSERT_EQUAL(ret, 0); @@ -69,7 +69,7 @@ test_verify16_mismatch_no_cmp(void) buf[offset] ^= 'X'; logging(LOG_VERBOSE, "Flip some bits in the data"); - ret = verify16(iscsic, tgt_lun, num_blocks +1 - i, + ret = verify16(iscsic, tgt_lun, num_blocks - i, i * block_size, block_size, 0, 0, 0, buf); free(buf); CU_ASSERT_EQUAL(ret, 0); diff --git a/test-tool/test_verify16_simple.c b/test-tool/test_verify16_simple.c index 609fa38..671eaea 100644 --- a/test-tool/test_verify16_simple.c +++ b/test-tool/test_verify16_simple.c @@ -54,11 +54,11 @@ test_verify16_simple(void) for (i = 1; i <= 256; i++) { unsigned char *buf = malloc(block_size * i); - ret = read16(iscsic, tgt_lun, num_blocks +1 - i, + ret = read16(iscsic, tgt_lun, num_blocks - i, i * block_size, block_size, 0, 0, 0, 0, 0, buf); CU_ASSERT_EQUAL(ret, 0); - ret = verify16(iscsic, tgt_lun, num_blocks +1 - i, + ret = verify16(iscsic, tgt_lun, num_blocks - i, i * block_size, block_size, 0, 0, 1, buf); free(buf); CU_ASSERT_EQUAL(ret, 0); diff --git a/test-tool/test_write10_simple.c b/test-tool/test_write10_simple.c index 0ba8c13..bb45b88 100644 --- a/test-tool/test_write10_simple.c +++ b/test-tool/test_write10_simple.c @@ -49,7 +49,7 @@ test_write10_simple(void) for (i = 1; i <= 256; i++) { unsigned char *buf = malloc(block_size * i); - ret = write10(iscsic, tgt_lun, num_blocks +1 - i, + ret = write10(iscsic, tgt_lun, num_blocks - i, i * block_size, block_size, 0, 0, 0, 0, 0, buf); free(buf); CU_ASSERT_EQUAL(ret, 0); diff --git a/test-tool/test_write12_simple.c b/test-tool/test_write12_simple.c index 48e295f..36eec57 100644 --- a/test-tool/test_write12_simple.c +++ b/test-tool/test_write12_simple.c @@ -49,7 +49,7 @@ test_write12_simple(void) for (i = 1; i <= 256; i++) { unsigned char *buf = malloc(block_size * i); - ret = write12(iscsic, tgt_lun, num_blocks +1 - i, + ret = write12(iscsic, tgt_lun, num_blocks - i, i * block_size, block_size, 0, 0, 0, 0, 0, buf); free(buf); CU_ASSERT_EQUAL(ret, 0); diff --git a/test-tool/test_write16_simple.c b/test-tool/test_write16_simple.c index 7b9587b..4dea767 100644 --- a/test-tool/test_write16_simple.c +++ b/test-tool/test_write16_simple.c @@ -50,7 +50,7 @@ test_write16_simple(void) for (i = 1; i <= 256; i++) { unsigned char *buf = malloc(block_size * i); - ret = write16(iscsic, tgt_lun, num_blocks +1 - i, + ret = write16(iscsic, tgt_lun, num_blocks - i, i * block_size, block_size, 0, 0, 0, 0, 0, buf); free(buf); CU_ASSERT_EQUAL(ret, 0);