From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124])
	by inbox.dpdk.org (Postfix) with ESMTP id 75750A0542;
	Wed,  5 Oct 2022 05:39:12 +0200 (CEST)
Received: from [217.70.189.124] (localhost [127.0.0.1])
	by mails.dpdk.org (Postfix) with ESMTP id D1493427F4;
	Wed,  5 Oct 2022 05:39:01 +0200 (CEST)
Received: from out162-62-58-216.mail.qq.com (out162-62-58-216.mail.qq.com
 [162.62.58.216]) by mails.dpdk.org (Postfix) with ESMTP id 9996C40694
 for <dev@dpdk.org>; Wed,  5 Oct 2022 05:38:58 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qq.com; s=s201512;
 t=1664941137; bh=rG2ZkGplRcelW1XLl2pfPrMLzFQd6n7/OgK5xTE5jeg=;
 h=From:To:Cc:Subject:Date:In-Reply-To:References;
 b=K3I+Id3yV50+6Bt6P+5TyRt1TVfz5S3qZ2M7WJoo+xmB5JE7S/fJptl5irFx2fVep
 xJMsGZEor1aIzN/aE5w17jDRvfWa781RGLsvCKdOBDAcozxzUKQNtwoMa9XzLKrYvT
 eO+3DUuBJZM7UFYZ2k4HSl/WmsnkhpCvAd4nyJkU=
Received: from qq.com ([120.229.93.179])
 by newxmesmtplogicsvrszc13.qq.com (NewEsmtp) with SMTP
 id 9B40FA58; Wed, 05 Oct 2022 11:38:52 +0800
X-QQ-mid: xmsmtpt1664941135tfdeaywvc
Message-ID: <tencent_B575B292B7019B78E75BE578AFB7400EFD08@qq.com>
X-QQ-XMAILINFO: OKKHiI6c9SH3x1lldSLzqkeIiPzkBwDMaLks8i5fPQEWC60fH1ZlUyc7daSNiq
 JIyhmwYaOynL2zFHwAL+xV8ybes2R+MpeXz1m5sNDDWPVKpxUyr+R7wcpbpe94tLxd/FCKbAU+Fh
 Powcgr6UoOB8sg9CoEnT6Xjk3Sm55c72bxYVe05cSQSgSFT+u35nxedH89+6s4t3/wXNDHFz4ywu
 g3lFi7Emx3ZkMp28lknqB0qTj9EYpbtKRZFnrYo4ROjXTlMaoCBe+F50OKyI6IqWt3eJNIw1DQFd
 f1gOwFh/tJhWN2d4Pufnx8xeEk57mdG9B2uY1W83pRn8X+Gx6QYmYRIl9ebhWz82BAKymgcjzUGQ
 WaotXfsL+FDZxAKJZSsVa1dRKMo3mRlesqr6W2BME0oILoZBx14JSLf3ia2/t6L8hMuQoQ/S3ifI
 fcNi4xigb2sYR79PHT8l48zwNUt62QPUzfREBTF4a3jO/KelMlYdVC2yi5JNFb84sn2yvBHhzxdp
 gPWHJDaQmSTvaeWaAcNwLmLa2WjEwUYdngQHCaCIwzPcYTtXt9I+0hH6h2trV6nxEHNIl6AGhci/
 kKgAsAfNLF8bayY1jwM6GuTHSHI8h4goW5I75zxN9lHstMtrDmCEKgpJD9izs2nXxSPnpAuZzpnR
 +PyvH2ezRuN6vVYgIrDV1cCXZbh8hT629O2qXDLe/vdoxJwgwYlFvBINIt+t8djGyA+TnWsFo8EM
 Gh6NG5N0DVT+/XSG4CGP3pO2QBAXmUlFM4YFQSHD1AVR4kusERxXw+nGA6obLtFXpi6UtiIojYMb
 3BYeEN+pSlWEMF6PWsuUC59bS2e1owoByQGhnYjGzyzQput9WUEoajS7iFL31fzOpkW9Wy30H6/g
 9lgz2lzqLsGsxi3Hji+Rne6uY+ICR6sdvmKIED8ORubL7ZPq0jXy+4ZaDJEfuNIEQyWBSAGcu+SG
 ouEJTxugOTi/8bKlR+bTakVCa4OZFQ3QesIe9jQ03DgxhYTIYU3w==
From: datshan <datshan@qq.com>
To: david.marchand@redhat.com, mb@smartsharesystems.com,
 anatoly.burakov@intel.com, dmitry.kozliuk@gmail.com, jerinjacobk@gmail.com
Cc: thomas@monjalon.net, dev@dpdk.org, Chengwen Feng <fengchengwen@huawei.com>
Subject: [PATCH v4 02/10] test/memarea: support memarea test
Date: Wed,  5 Oct 2022 11:38:40 +0800
X-OQ-MSGID: <20221005033848.2241-3-datshan@qq.com>
X-Mailer: git-send-email 2.34.1
In-Reply-To: <20221005033848.2241-1-datshan@qq.com>
References: <20220721044648.6817-1-fengchengwen@huawei.com>
 <20221005033848.2241-1-datshan@qq.com>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org

From: Chengwen Feng <fengchengwen@huawei.com>

This patch supports memarea test about API rte_memarea_create and
rte_memarea_destroy.

Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
 MAINTAINERS             |   1 +
 app/test/meson.build    |   2 +
 app/test/test_memarea.c | 149 ++++++++++++++++++++++++++++++++++++++++
 3 files changed, 152 insertions(+)
 create mode 100644 app/test/test_memarea.c

diff --git a/MAINTAINERS b/MAINTAINERS
index b9c638221d..bfdb36f1b5 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1554,6 +1554,7 @@ Memarea - EXPERIMENTAL
 M: Chengwen Feng <fengchengwen@huawei.com>
 F: lib/memarea
 F: doc/guides/prog_guide/memarea_lib.rst
+F: app/test/test_memarea*
 
 Membership - EXPERIMENTAL
 M: Yipeng Wang <yipeng1.wang@intel.com>
diff --git a/app/test/meson.build b/app/test/meson.build
index d5cad72116..778de8d65d 100644
--- a/app/test/meson.build
+++ b/app/test/meson.build
@@ -84,6 +84,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',
@@ -199,6 +200,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..7c3d78652d
--- /dev/null
+++ b/app/test/test_memarea.c
@@ -0,0 +1,149 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2022 HiSilicon Limited
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include "test.h"
+
+#ifdef RTE_EXEC_ENV_WINDOWS
+static int
+test_memarea(void)
+{
+	printf("memarea not supported on Windows, skipping test\n");
+	return TEST_SKIPPED;
+}
+
+#else
+
+#include <rte_memory.h>
+#include <rte_memarea.h>
+
+#define MEMAREA_TEST_DEFAULT_SIZE	0x1000
+
+#define MEMAREA_TEST_API_RUN(test_func) \
+	do { \
+		int ret = test_func(); \
+		if (ret < 0) \
+			printf("%s Failed\n", #test_func); \
+		else \
+			printf("%s Passed\n", #test_func); \
+	} while (0)
+
+static void
+test_memarea_init_def_param(struct rte_memarea_param *init)
+{
+	memset(init, 0, sizeof(struct rte_memarea_param));
+	sprintf(init->name, "%s", "test-memarea");
+	init->source = RTE_MEMAREA_SOURCE_SYSTEM_API;
+	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;
+	int i;
+
+	/* test for NULL */
+	ma = rte_memarea_create(NULL);
+	RTE_TEST_ASSERT(ma == NULL, "Expected NULL");
+
+	/* test for invalid name */
+	memset(&init, 0, sizeof(init));
+	ma = rte_memarea_create(&init);
+	RTE_TEST_ASSERT(ma == NULL, "Expected NULL");
+	memset(&init.name, 1, sizeof(init.name));
+	ma = rte_memarea_create(&init);
+	RTE_TEST_ASSERT(ma == NULL, "Expected NULL");
+
+	/* test for invalid source */
+	test_memarea_init_def_param(&init);
+	init.source = RTE_MEMAREA_SOURCE_USER_MEMAREA + 1;
+	ma = rte_memarea_create(&init);
+	RTE_TEST_ASSERT(ma == NULL, "Expected NULL");
+
+	/* test for total_sz */
+	test_memarea_init_def_param(&init);
+	init.total_sz = 0;
+	ma = rte_memarea_create(&init);
+	RTE_TEST_ASSERT(ma == NULL, "Expected NULL");
+
+	/* test for user address NULL */
+	test_memarea_init_def_param(&init);
+	init.source = RTE_MEMAREA_SOURCE_USER_ADDR;
+	ma = rte_memarea_create(&init);
+	RTE_TEST_ASSERT(ma == NULL, "Expected NULL");
+
+	/* test for user address align invalid */
+	test_memarea_init_def_param(&init);
+	init.source = RTE_MEMAREA_SOURCE_USER_ADDR;
+	for (i = 1; i < RTE_CACHE_LINE_SIZE; i++) {
+		init.user_addr = (void *)((uintptr_t)i);
+		ma = rte_memarea_create(&init);
+		RTE_TEST_ASSERT(ma == NULL, "Expected NULL");
+	}
+
+	/* test for user memarea NULL */
+	test_memarea_init_def_param(&init);
+	init.source = RTE_MEMAREA_SOURCE_USER_MEMAREA;
+	ma = rte_memarea_create(&init);
+	RTE_TEST_ASSERT(ma == NULL, "Expected NULL");
+
+	/* test for alg invalid */
+	test_memarea_init_def_param(&init);
+	init.alg = RTE_MEMAREA_ALG_DEFAULT + 1;
+	ma = rte_memarea_create(&init);
+	RTE_TEST_ASSERT(ma == NULL, "Expected NULL");
+
+	return 0;
+}
+
+static int
+test_memarea_create_destroy(void)
+{
+	uint8_t user_buffer[MEMAREA_TEST_DEFAULT_SIZE + RTE_CACHE_LINE_SIZE];
+	struct rte_memarea_param init;
+	struct rte_memarea *ma;
+
+	/* test for create with RTE memory */
+	test_memarea_init_def_param(&init);
+	init.source = RTE_MEMAREA_SOURCE_RTE_MEMORY;
+	init.numa_socket = SOCKET_ID_ANY;
+	ma = rte_memarea_create(&init);
+	RTE_TEST_ASSERT(ma != NULL, "Expected Non-NULL");
+	rte_memarea_destroy(ma);
+
+	/* test for create with system API */
+	test_memarea_init_def_param(&init);
+	init.source = RTE_MEMAREA_SOURCE_SYSTEM_API;
+	ma = rte_memarea_create(&init);
+	RTE_TEST_ASSERT(ma != NULL, "Expected Non-NULL");
+	rte_memarea_destroy(ma);
+
+	/* test for create with user-address */
+	test_memarea_init_def_param(&init);
+	init.source = RTE_MEMAREA_SOURCE_USER_ADDR;
+	init.user_addr = (void *)(((uintptr_t)user_buffer + RTE_CACHE_LINE_SIZE) &
+				  ~(RTE_CACHE_LINE_SIZE - 1));
+	ma = rte_memarea_create(&init);
+	RTE_TEST_ASSERT(ma != NULL, "Expected Non-NULL");
+	rte_memarea_destroy(ma);
+
+	return 0;
+}
+
+static int
+test_memarea(void)
+{
+	MEMAREA_TEST_API_RUN(test_memarea_create_bad_param);
+	MEMAREA_TEST_API_RUN(test_memarea_create_destroy);
+	return 0;
+}
+
+#endif /* !RTE_EXEC_ENV_WINDOWS */
+
+REGISTER_TEST_COMMAND(memarea_autotest, test_memarea);
-- 
2.34.1