From 2fefd9f53c1e9f2af5eac2b42776ece32cebe1c4 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Wed, 20 Feb 2019 07:44:31 +0900 Subject: [PATCH] ut/dif: Fill test data buffer by cyclic values to find potential issues Previously, test data buffer was filled by one value, 0xAB, but this may not be enough to detect future potential issues. ut_data_pattern_verify() already did per-byte check, but size of test data buffer is small and completion time of tests is not long. So, even if we change ut_data_pattern_generate() to set per-byte data instead of memset(), extra overhead of test completion time will be negligible. Change-Id: I35677b238f96a73c0c408f0818f080a92492dac6 Signed-off-by: Shuhei Matsumoto Reviewed-on: https://review.gerrithub.io/c/445430 Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Ben Walker Reviewed-by: wuzhouhui --- test/unit/lib/util/dif.c/dif_ut.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/test/unit/lib/util/dif.c/dif_ut.c b/test/unit/lib/util/dif.c/dif_ut.c index de8e67408..5d3f9671b 100644 --- a/test/unit/lib/util/dif.c/dif_ut.c +++ b/test/unit/lib/util/dif.c/dif_ut.c @@ -37,16 +37,16 @@ #include "util/dif.c" -#define DATA_PATTERN 0xAB -#define GUARD_SEED 0xCD +#define DATA_PATTERN(offset) ((uint8_t)(0xAB + (offset))) +#define GUARD_SEED 0xCD static int ut_data_pattern_generate(struct iovec *iovs, int iovcnt, uint32_t block_size, uint32_t md_size, uint32_t num_blocks) { struct _iov_iter iter; - uint32_t offset_blocks, offset_in_block, buf_len; - void *buf; + uint32_t offset_blocks, offset_in_block, buf_len, data_offset, i; + uint8_t *buf; if (!_are_iovs_valid(iovs, iovcnt, block_size * num_blocks)) { return -1; @@ -54,15 +54,19 @@ ut_data_pattern_generate(struct iovec *iovs, int iovcnt, offset_blocks = 0; _iov_iter_init(&iter, iovs, iovcnt); + data_offset = 0; while (offset_blocks < num_blocks) { offset_in_block = 0; while (offset_in_block < block_size) { - _iov_iter_get_buf(&iter, &buf, &buf_len); + _iov_iter_get_buf(&iter, (void *)&buf, &buf_len); if (offset_in_block < block_size - md_size) { buf_len = spdk_min(buf_len, block_size - md_size - offset_in_block); - memset(buf, DATA_PATTERN, buf_len); + for (i = 0; i < buf_len; i++) { + buf[i] = DATA_PATTERN(data_offset + i); + } + data_offset += buf_len; } else { buf_len = spdk_min(buf_len, block_size - offset_in_block); memset(buf, 0, buf_len); @@ -81,7 +85,7 @@ ut_data_pattern_verify(struct iovec *iovs, int iovcnt, uint32_t block_size, uint32_t md_size, uint32_t num_blocks) { struct _iov_iter iter; - uint32_t offset_blocks, offset_in_block, buf_len, i; + uint32_t offset_blocks, offset_in_block, buf_len, data_offset, i; uint8_t *buf; if (!_are_iovs_valid(iovs, iovcnt, block_size * num_blocks)) { @@ -90,6 +94,7 @@ ut_data_pattern_verify(struct iovec *iovs, int iovcnt, offset_blocks = 0; _iov_iter_init(&iter, iovs, iovcnt); + data_offset = 0; while (offset_blocks < num_blocks) { offset_in_block = 0; @@ -100,10 +105,11 @@ ut_data_pattern_verify(struct iovec *iovs, int iovcnt, buf_len = spdk_min(buf_len, block_size - md_size - offset_in_block); for (i = 0; i < buf_len; i++) { - if (buf[i] != DATA_PATTERN) { + if (buf[i] != DATA_PATTERN(data_offset + i)) { return -1; } } + data_offset += buf_len; } else { buf_len = spdk_min(buf_len, block_size - offset_in_block); }