This patch supports memarea test of rte_memarea_create() and
rte_memarea_destroy() API.

Signed-off-by: Chengwen Feng <fengcheng...@huawei.com>
Reviewed-by: Dongdong Liu <liudongdo...@huawei.com>
Acked-by: Morten Brørup <m...@smartsharesystems.com>
---
 MAINTAINERS             |   1 +
 app/test/meson.build    |   2 +
 app/test/test_memarea.c | 139 ++++++++++++++++++++++++++++++++++++++++
 3 files changed, 142 insertions(+)
 create mode 100644 app/test/test_memarea.c

diff --git a/MAINTAINERS b/MAINTAINERS
index 93de0876f1..cc082ae821 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1616,6 +1616,7 @@ Memarea - EXPERIMENTAL
 M: Chengwen Feng <fengcheng...@huawei.com>
 F: lib/memarea
 F: doc/guides/prog_guide/memarea_lib.rst
+F: app/test/test_memarea*
 
 Membership - EXPERIMENTAL
 M: Yipeng Wang <yipeng1.w...@intel.com>
diff --git a/app/test/meson.build b/app/test/meson.build
index 3e0a2360a3..5e3012328d 100644
--- a/app/test/meson.build
+++ b/app/test/meson.build
@@ -83,6 +83,7 @@ test_sources = files(
         'test_malloc.c',
         'test_malloc_perf.c',
         'test_mbuf.c',
+        'test_memarea.c',
         'test_member.c',
         'test_member_perf.c',
         'test_memcpy.c',
@@ -200,6 +201,7 @@ fast_tests = [
         ['malloc_autotest', false, true],
         ['mbuf_autotest', false, true],
         ['mcslock_autotest', false, true],
+        ['memarea_autotest', true, true],
         ['memcpy_autotest', true, true],
         ['memory_autotest', false, true],
         ['mempool_autotest', false, true],
diff --git a/app/test/test_memarea.c b/app/test/test_memarea.c
new file mode 100644
index 0000000000..d8d5fc35d4
--- /dev/null
+++ b/app/test/test_memarea.c
@@ -0,0 +1,139 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2023 HiSilicon Limited
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include <rte_errno.h>
+#include <rte_memory.h>
+#include <rte_memarea.h>
+
+#include "test.h"
+
+#define MEMAREA_TEST_DEFAULT_SIZE      0x1000
+
+static void
+test_memarea_init_param(struct rte_memarea_param *init)
+{
+       memset(init, 0, sizeof(struct rte_memarea_param));
+       sprintf(init->name, "%s", "autotest");
+       init->source = RTE_MEMAREA_SOURCE_LIBC;
+       init->total_sz = MEMAREA_TEST_DEFAULT_SIZE;
+       init->mt_safe = 1;
+}
+
+static int
+test_memarea_create_bad_param(void)
+{
+       struct rte_memarea_param init;
+       struct rte_memarea *ma;
+
+       /* test for NULL */
+       ma = rte_memarea_create(NULL);
+       TEST_ASSERT(ma == NULL, "Expected NULL");
+       TEST_ASSERT(rte_errno == EINVAL, "Expected EINVAL");
+
+       /* test for invalid name */
+       memset(&init, 0, sizeof(init));
+       ma = rte_memarea_create(&init);
+       TEST_ASSERT(ma == NULL, "Expected NULL");
+       TEST_ASSERT(rte_errno == EINVAL, "Expected EINVAL");
+       memset(&init.name, 1, sizeof(init.name));
+       ma = rte_memarea_create(&init);
+       TEST_ASSERT(ma == NULL, "Expected NULL");
+       TEST_ASSERT(rte_errno == EINVAL, "Expected EINVAL");
+
+       /* test for invalid source */
+       test_memarea_init_param(&init);
+       init.source = RTE_MEMAREA_SOURCE_MEMAREA + 1;
+       ma = rte_memarea_create(&init);
+       TEST_ASSERT(ma == NULL, "Expected NULL");
+       TEST_ASSERT(rte_errno == EINVAL, "Expected EINVAL");
+
+       /* test for total_sz */
+       test_memarea_init_param(&init);
+       init.total_sz = 0;
+       ma = rte_memarea_create(&init);
+       TEST_ASSERT(ma == NULL, "Expected NULL");
+       TEST_ASSERT(rte_errno == EINVAL, "Expected EINVAL");
+
+       /* test for memarea NULL */
+       test_memarea_init_param(&init);
+       init.source = RTE_MEMAREA_SOURCE_MEMAREA;
+       ma = rte_memarea_create(&init);
+       TEST_ASSERT(ma == NULL, "Expected NULL");
+       TEST_ASSERT(rte_errno == EINVAL, "Expected EINVAL");
+
+       /* test for algorithm invalid */
+       test_memarea_init_param(&init);
+       init.alg = RTE_MEMAREA_ALGORITHM_NEXTFIT + 1;
+       ma = rte_memarea_create(&init);
+       TEST_ASSERT(ma == NULL, "Expected NULL");
+       TEST_ASSERT(rte_errno == EINVAL, "Expected EINVAL");
+
+       /* test for reserved field */
+       test_memarea_init_param(&init);
+       init.reserved_bits = 1;
+       ma = rte_memarea_create(&init);
+       TEST_ASSERT(ma == NULL, "Expected NULL");
+       TEST_ASSERT(rte_errno == EINVAL, "Expected EINVAL");
+       test_memarea_init_param(&init);
+       init.reserved_64s[0] = 1;
+       ma = rte_memarea_create(&init);
+       TEST_ASSERT(ma == NULL, "Expected NULL");
+       TEST_ASSERT(rte_errno == EINVAL, "Expected EINVAL");
+       test_memarea_init_param(&init);
+       init.reserved_64s[1] = 1;
+       ma = rte_memarea_create(&init);
+       TEST_ASSERT(ma == NULL, "Expected NULL");
+       TEST_ASSERT(rte_errno == EINVAL, "Expected EINVAL");
+
+       return 0;
+}
+
+static int
+test_memarea_create_destroy(void)
+{
+       struct rte_memarea *ma;
+       struct rte_memarea_param init;
+
+       rte_errno = 0;
+
+       /* test for create with HEAP */
+       test_memarea_init_param(&init);
+       init.source = RTE_MEMAREA_SOURCE_HEAP;
+       init.heap.socket_id = SOCKET_ID_ANY;
+       ma = rte_memarea_create(&init);
+       TEST_ASSERT(ma != NULL, "Expected Non-NULL");
+       rte_memarea_destroy(ma);
+
+       /* test for create with LIBC */
+       test_memarea_init_param(&init);
+       init.source = RTE_MEMAREA_SOURCE_LIBC;
+       ma = rte_memarea_create(&init);
+       TEST_ASSERT(ma != NULL, "Expected Non-NULL");
+       rte_memarea_destroy(ma);
+
+       return 0;
+}
+
+static struct unit_test_suite memarea_test_suite  = {
+       .suite_name = "Memarea Unit Test Suite",
+       .setup = NULL,
+       .teardown = NULL,
+       .unit_test_cases = {
+               TEST_CASE(test_memarea_create_bad_param),
+               TEST_CASE(test_memarea_create_destroy),
+
+               TEST_CASES_END() /**< NULL terminate unit test array */
+       }
+};
+
+static int
+test_memarea(void)
+{
+       return unit_test_suite_runner(&memarea_test_suite);
+}
+
+REGISTER_TEST_COMMAND(memarea_autotest, test_memarea);
-- 
2.17.1

Reply via email to