Test cases for the exact size ring are changed to test
rte_ring_xxx_elem APIs.

Signed-off-by: Honnappa Nagarahalli <honnappa.nagaraha...@arm.com>
Reviewed-by: Gavin Hu <gavin...@arm.com>
---
 app/test/test_ring.c | 147 ++++++++++++++++++++++++++-----------------
 1 file changed, 89 insertions(+), 58 deletions(-)

diff --git a/app/test/test_ring.c b/app/test/test_ring.c
index 1025097c8..294e3ee10 100644
--- a/app/test/test_ring.c
+++ b/app/test/test_ring.c
@@ -727,75 +727,106 @@ test_ring_basic_ex(void)
        return -1;
 }
 
+/*
+ * Basic test cases with exact size ring.
+ */
 static int
 test_ring_with_exact_size(void)
 {
-       struct rte_ring *std_ring = NULL, *exact_sz_ring = NULL;
-       void *ptr_array[16];
-       static const unsigned int ring_sz = RTE_DIM(ptr_array);
-       unsigned int i;
+       struct rte_ring *std_r = NULL, *exact_sz_r = NULL;
+       void *obj;
+       const unsigned int ring_sz = 16;
+       unsigned int i, j;
        int ret = -1;
 
-       std_ring = rte_ring_create("std", ring_sz, rte_socket_id(),
-                       RING_F_SP_ENQ | RING_F_SC_DEQ);
-       if (std_ring == NULL) {
-               printf("%s: error, can't create std ring\n", __func__);
-               goto end;
-       }
-       exact_sz_ring = rte_ring_create("exact sz", ring_sz, rte_socket_id(),
-                       RING_F_SP_ENQ | RING_F_SC_DEQ | RING_F_EXACT_SZ);
-       if (exact_sz_ring == NULL) {
-               printf("%s: error, can't create exact size ring\n", __func__);
-               goto end;
-       }
-
-       /*
-        * Check that the exact size ring is bigger than the standard ring
-        */
-       if (rte_ring_get_size(std_ring) >= rte_ring_get_size(exact_sz_ring)) {
-               printf("%s: error, std ring (size: %u) is not smaller than 
exact size one (size %u)\n",
-                               __func__,
-                               rte_ring_get_size(std_ring),
-                               rte_ring_get_size(exact_sz_ring));
-               goto end;
-       }
-       /*
-        * check that the exact_sz_ring can hold one more element than the
-        * standard ring. (16 vs 15 elements)
-        */
-       for (i = 0; i < ring_sz - 1; i++) {
-               rte_ring_enqueue(std_ring, NULL);
-               rte_ring_enqueue(exact_sz_ring, NULL);
-       }
-       if (rte_ring_enqueue(std_ring, NULL) != -ENOBUFS) {
-               printf("%s: error, unexpected successful enqueue\n", __func__);
-               goto end;
-       }
-       if (rte_ring_enqueue(exact_sz_ring, NULL) == -ENOBUFS) {
-               printf("%s: error, enqueue failed\n", __func__);
-               goto end;
-       }
+       for (i = 0; i < RTE_DIM(esize); i++) {
+               test_ring_print_test_string("Test exact size ring",
+                               TEST_RING_IGNORE_API_TYPE,
+                               esize[i]);
+
+               /* alloc object pointers */
+               obj = test_ring_calloc(16, esize[i]);
+               if (obj == NULL)
+                       goto test_fail;
+
+               TEST_RING_CREATE("std", esize[i], ring_sz, rte_socket_id(),
+                                       RING_F_SP_ENQ | RING_F_SC_DEQ, std_r);
+               if (std_r == NULL) {
+                       printf("%s: error, can't create std ring\n", __func__);
+                       goto test_fail;
+               }
+               TEST_RING_CREATE("exact sz", esize[i], ring_sz, rte_socket_id(),
+                               RING_F_SP_ENQ | RING_F_SC_DEQ | RING_F_EXACT_SZ,
+                               exact_sz_r);
+               if (exact_sz_r == NULL) {
+                       printf("%s: error, can't create exact size ring\n",
+                                       __func__);
+                       goto test_fail;
+               }
 
-       /* check that dequeue returns the expected number of elements */
-       if (rte_ring_dequeue_burst(exact_sz_ring, ptr_array,
-                       RTE_DIM(ptr_array), NULL) != ring_sz) {
-               printf("%s: error, failed to dequeue expected nb of elements\n",
+               /*
+                * Check that the exact size ring is bigger than the
+                * standard ring
+                */
+               if (rte_ring_get_size(std_r) >= rte_ring_get_size(exact_sz_r)) {
+                       printf("%s: error, std ring (size: %u) is not smaller 
than exact size one (size %u)\n",
+                                       __func__,
+                                       rte_ring_get_size(std_r),
+                                       rte_ring_get_size(exact_sz_r));
+                       goto test_fail;
+               }
+               /*
+                * check that the exact_sz_ring can hold one more element
+                * than the standard ring. (16 vs 15 elements)
+                */
+               for (j = 0; j < ring_sz - 1; j++) {
+                       TEST_RING_ENQUEUE(std_r, obj, esize[i], 1, ret,
+                                               TEST_RING_N | TEST_RING_SL);
+                       TEST_RING_ENQUEUE(exact_sz_r, obj, esize[i], 1,
+                                       ret, TEST_RING_N | TEST_RING_SL);
+               }
+               TEST_RING_ENQUEUE(std_r, obj, esize[i], 1, ret,
+                                               TEST_RING_N | TEST_RING_SL);
+               if (ret != -ENOBUFS) {
+                       printf("%s: error, unexpected successful enqueue\n",
                                __func__);
-               goto end;
-       }
+                       goto test_fail;
+               }
+               TEST_RING_ENQUEUE(exact_sz_r, obj, esize[i], 1, ret,
+                                               TEST_RING_N | TEST_RING_SL);
+               if (ret == -ENOBUFS) {
+                       printf("%s: error, enqueue failed\n", __func__);
+                       goto test_fail;
+               }
 
-       /* check that the capacity function returns expected value */
-       if (rte_ring_get_capacity(exact_sz_ring) != ring_sz) {
-               printf("%s: error, incorrect ring capacity reported\n",
+               /* check that dequeue returns the expected number of elements */
+               TEST_RING_DEQUEUE(exact_sz_r, obj, esize[i], ring_sz,
+                                       ret, TEST_RING_N | TEST_RING_BR);
+               if (ret != (int)ring_sz) {
+                       printf("%s: error, failed to dequeue expected nb of 
elements\n",
                                __func__);
-               goto end;
+                       goto test_fail;
+               }
+
+               /* check that the capacity function returns expected value */
+               if (rte_ring_get_capacity(exact_sz_r) != ring_sz) {
+                       printf("%s: error, incorrect ring capacity reported\n",
+                                       __func__);
+                       goto test_fail;
+               }
+
+               rte_free(obj);
+               rte_ring_free(std_r);
+               rte_ring_free(exact_sz_r);
        }
 
-       ret = 0; /* all ok if we get here */
-end:
-       rte_ring_free(std_ring);
-       rte_ring_free(exact_sz_ring);
-       return ret;
+       return 0;
+
+test_fail:
+       rte_free(obj);
+       rte_ring_free(std_r);
+       rte_ring_free(exact_sz_r);
+       return -1;
 }
 
 static int
-- 
2.17.1

Reply via email to