When using memcmp function to check data, the third param should be the size of all elements, rather than the number of the elements.
Furthermore, do code clean up by moving repeated code inside 'test_ring_mem_cmp' function to validate data and print information of enqueue/dequeue elements if validation fails. Fixes: a9fe152363e2 ("test/ring: add custom element size functional tests") Cc: honnappa.nagaraha...@arm.com Cc: sta...@dpdk.org Signed-off-by: Feifei Wang <feifei.wa...@arm.com> Reviewed-by: Ruifeng Wang <ruifeng.w...@arm.com> Reviewed-by: Phil Yang <phil.y...@arm.com> Reviewed-by: Dharmik Thakkar <dharmik.thak...@arm.com> --- app/test/test_ring.c | 59 ++++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 32 deletions(-) diff --git a/app/test/test_ring.c b/app/test/test_ring.c index 811adc523..4a2bd39fc 100644 --- a/app/test/test_ring.c +++ b/app/test/test_ring.c @@ -258,6 +258,21 @@ test_ring_mem_init(void *obj, unsigned int count, int esize) ((uint32_t *)obj)[i] = i; } +static int +test_ring_mem_cmp(void *src, void *dst, unsigned int size) +{ + int ret; + + ret = memcmp(src, dst, size); + if (ret) { + rte_hexdump(stdout, "src", src, size); + rte_hexdump(stdout, "dst", dst, size); + printf("data after dequeue is not the same\n"); + } + + return ret; +} + static void test_ring_print_test_string(const char *istr, unsigned int api_type, int esize) { @@ -383,7 +398,7 @@ test_ring_burst_bulk_tests1(unsigned int test_idx) struct rte_ring *r; void **src = NULL, **cur_src = NULL, **dst = NULL, **cur_dst = NULL; int ret; - unsigned int i, j; + unsigned int i, j, temp_sz; int rand; const unsigned int rsz = RING_SIZE - 1; @@ -444,7 +459,11 @@ test_ring_burst_bulk_tests1(unsigned int test_idx) TEST_RING_VERIFY(rte_ring_empty(r)); /* check data */ - TEST_RING_VERIFY(memcmp(src, dst, rsz) == 0); + temp_sz = rsz * sizeof(void *); + if (esize[i] != -1) + temp_sz = rsz * esize[i]; + TEST_RING_VERIFY(test_ring_mem_cmp(src, dst, + temp_sz) == 0); } /* Free memory before test completed */ @@ -538,12 +557,8 @@ test_ring_burst_bulk_tests2(unsigned int test_idx) cur_dst = test_ring_inc_ptr(cur_dst, esize[i], MAX_BULK); /* check data */ - if (memcmp(src, dst, cur_dst - dst)) { - rte_hexdump(stdout, "src", src, cur_src - src); - rte_hexdump(stdout, "dst", dst, cur_dst - dst); - printf("data after dequeue is not the same\n"); + if (test_ring_mem_cmp(src, dst, RTE_PTR_DIFF(cur_dst, dst))) goto fail; - } /* Free memory before test completed */ rte_ring_free(r); @@ -614,12 +629,8 @@ test_ring_burst_bulk_tests3(unsigned int test_idx) } /* check data */ - if (memcmp(src, dst, cur_dst - dst)) { - rte_hexdump(stdout, "src", src, cur_src - src); - rte_hexdump(stdout, "dst", dst, cur_dst - dst); - printf("data after dequeue is not the same\n"); + if (test_ring_mem_cmp(src, dst, RTE_PTR_DIFF(cur_dst, dst))) goto fail; - } /* Free memory before test completed */ rte_ring_free(r); @@ -747,12 +758,8 @@ test_ring_burst_bulk_tests4(unsigned int test_idx) goto fail; /* check data */ - if (memcmp(src, dst, cur_dst - dst)) { - rte_hexdump(stdout, "src", src, cur_src - src); - rte_hexdump(stdout, "dst", dst, cur_dst - dst); - printf("data after dequeue is not the same\n"); + if (test_ring_mem_cmp(src, dst, RTE_PTR_DIFF(cur_dst, dst))) goto fail; - } /* Free memory before test completed */ rte_ring_free(r); @@ -857,12 +864,8 @@ test_ring_basic_ex(void) } /* check data */ - if (memcmp(src, dst, cur_src - src)) { - rte_hexdump(stdout, "src", src, cur_src - src); - rte_hexdump(stdout, "dst", dst, cur_dst - dst); - printf("data after dequeue is not the same\n"); + if (test_ring_mem_cmp(src, dst, RTE_PTR_DIFF(cur_src, src))) goto fail_test; - } /* Following tests use the configured flags to decide * SP/SC or MP/MC. @@ -909,12 +912,8 @@ test_ring_basic_ex(void) cur_dst = test_ring_inc_ptr(cur_dst, esize[i], 2); /* check data */ - if (memcmp(src, dst, cur_dst - dst)) { - rte_hexdump(stdout, "src", src, cur_src - src); - rte_hexdump(stdout, "dst", dst, cur_dst - dst); - printf("data after dequeue is not the same\n"); + if (test_ring_mem_cmp(src, dst, RTE_PTR_DIFF(cur_dst, dst))) goto fail_test; - } rte_ring_free(rp); rte_free(src); @@ -1047,12 +1046,8 @@ test_ring_with_exact_size(void) } /* check data */ - if (memcmp(src, dst, cur_dst - dst)) { - rte_hexdump(stdout, "src", src, cur_src - src); - rte_hexdump(stdout, "dst", dst, cur_dst - dst); - printf("data after dequeue is not the same\n"); + if (test_ring_mem_cmp(src, dst, RTE_PTR_DIFF(cur_dst, dst))) goto test_fail; - } rte_free(src_orig); rte_free(dst_orig); -- 2.17.1