All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chenbo Xia <chenbo.xia@intel.com>
To: dev@dpdk.org, thomas@monjalon.net, david.marchand@redhat.com
Cc: stephen@networkplumber.org, cunming.liang@intel.com,
	xiuchun.lu@intel.com, miao.li@intel.com, jingjing.wu@intel.com
Subject: [dpdk-dev] [PATCH v2 7/8] test/emudev: introduce functional test
Date: Sat, 19 Dec 2020 14:28:05 +0800	[thread overview]
Message-ID: <20201219062806.56477-8-chenbo.xia@intel.com> (raw)
In-Reply-To: <20201219062806.56477-1-chenbo.xia@intel.com>

This patch introduces functional test for emudev. The
implementation of iavf emudev selftest is also added.

Signed-off-by: Miao Li <miao.li@intel.com>
Signed-off-by: Chenbo Xia <chenbo.xia@intel.com>
---
 app/test/meson.build                 |   5 +-
 app/test/test_emudev.c               |  29 +++++
 drivers/emu/iavf/iavf_emu.c          |   1 +
 drivers/emu/iavf/iavf_emu_internal.h |   1 +
 drivers/emu/iavf/iavf_emu_test.c     | 174 +++++++++++++++++++++++++++
 drivers/emu/iavf/meson.build         |   2 +-
 6 files changed, 210 insertions(+), 2 deletions(-)
 create mode 100644 app/test/test_emudev.c
 create mode 100644 drivers/emu/iavf/iavf_emu_test.c

diff --git a/app/test/meson.build b/app/test/meson.build
index f5b15ac44c..b8b79bbc8b 100644
--- a/app/test/meson.build
+++ b/app/test/meson.build
@@ -139,6 +139,7 @@ test_sources = files('commands.c',
 	'test_trace_register.c',
 	'test_trace_perf.c',
 	'test_vfio_user.c',
+	'test_emudev.c',
 	'test_version.c',
 	'virtual_pmd.c'
 )
@@ -176,7 +177,8 @@ test_deps = ['acl',
 	'stack',
 	'vfio_user',
 	'telemetry',
-	'timer'
+	'timer',
+	'emudev'
 ]
 
 # Each test is marked with flag true/false
@@ -327,6 +329,7 @@ driver_test_names = [
         'eventdev_selftest_octeontx',
         'eventdev_selftest_sw',
         'rawdev_autotest',
+        'emudev_autotest',
 ]
 
 dump_test_names = [
diff --git a/app/test/test_emudev.c b/app/test/test_emudev.c
new file mode 100644
index 0000000000..0dfce162ed
--- /dev/null
+++ b/app/test/test_emudev.c
@@ -0,0 +1,29 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2020 Intel Corporation
+ */
+
+#include <rte_emudev.h>
+#include <rte_bus_vdev.h>
+
+#include "test.h"
+
+static int
+test_emudev_selftest_impl(const char *pmd, const char *opts)
+{
+	int ret = 0;
+
+	if (rte_emudev_get_dev_id(pmd) == -ENODEV)
+		ret = rte_vdev_init(pmd, opts);
+	if (ret)
+		return TEST_SKIPPED;
+
+	return rte_emudev_selftest(rte_emudev_get_dev_id(pmd));
+}
+
+static int
+test_emudev_selftest(void)
+{
+	return test_emudev_selftest_impl("emu_iavf", "sock=/tmp/sock1");
+}
+
+REGISTER_TEST_COMMAND(emudev_autotest, test_emudev_selftest);
diff --git a/drivers/emu/iavf/iavf_emu.c b/drivers/emu/iavf/iavf_emu.c
index 9ad371ca98..88bf2bdf94 100644
--- a/drivers/emu/iavf/iavf_emu.c
+++ b/drivers/emu/iavf/iavf_emu.c
@@ -246,4 +246,5 @@ struct rte_emudev_ops emu_iavf_ops = {
 	.subscribe_event = iavf_emu_subs_ev,
 	.unsubscribe_event = iavf_emu_unsubs_ev,
 	.get_attr = iavf_emu_get_attr,
+	.dev_selftest = iavf_emu_selftest,
 };
diff --git a/drivers/emu/iavf/iavf_emu_internal.h b/drivers/emu/iavf/iavf_emu_internal.h
index 10197c00ba..1ac7f96566 100644
--- a/drivers/emu/iavf/iavf_emu_internal.h
+++ b/drivers/emu/iavf/iavf_emu_internal.h
@@ -65,4 +65,5 @@ struct iavf_emudev {
 };
 
 void iavf_emu_uninit_device(struct iavf_emudev *dev);
+int iavf_emu_selftest(uint16_t dev_id);
 #endif
diff --git a/drivers/emu/iavf/iavf_emu_test.c b/drivers/emu/iavf/iavf_emu_test.c
new file mode 100644
index 0000000000..ad19134724
--- /dev/null
+++ b/drivers/emu/iavf/iavf_emu_test.c
@@ -0,0 +1,174 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2020 Intel Corporation
+ */
+
+#include <inttypes.h>
+
+#include <rte_common.h>
+#include <rte_malloc.h>
+#include <rte_memcpy.h>
+#include <rte_dev.h>
+#include <rte_emudev.h>
+#include <rte_bus_vdev.h>
+#include <rte_test.h>
+
+#include "iavf_emu_internal.h"
+
+#define TEST_DEV_NAME "emu_iavf"
+#define TEST_SUCCESS 0
+#define TEST_FAILED -1
+
+#define EMUDEV_TEST_RUN(setup, teardown, test) \
+	emudev_test_run(setup, teardown, test, #test)
+static uint16_t test_dev_id;
+static int total;
+static int passed;
+static int failed;
+static int unsupported;
+
+static int
+testsuite_setup(void)
+{
+	uint8_t count;
+	count = rte_emudev_count();
+	if (!count) {
+		EMU_IAVF_LOG(INFO, "No existing emu dev; "
+				  "Creating emu_iavf\n");
+		return rte_vdev_init(TEST_DEV_NAME, NULL);
+	}
+
+	return TEST_SUCCESS;
+}
+
+static void
+testsuite_teardown(void)
+{
+	rte_vdev_uninit(TEST_DEV_NAME);
+}
+
+static void emudev_test_run(int (*setup)(void),
+			     void (*teardown)(void),
+			     int (*test)(void),
+			     const char *name)
+{
+	int ret = 0;
+
+	if (setup) {
+		ret = setup();
+		if (ret < 0) {
+			EMU_IAVF_LOG(INFO, "Error setting up test %s\n", name);
+			unsupported++;
+		}
+	}
+
+	if (test) {
+		ret = test();
+		if (ret < 0) {
+			failed++;
+			EMU_IAVF_LOG(INFO, "%s Failed\n", name);
+		} else {
+			passed++;
+			EMU_IAVF_LOG(INFO, "%s Passed\n", name);
+		}
+	}
+
+	if (teardown)
+		teardown();
+
+	total++;
+}
+
+static int
+test_emu_dev_count(void)
+{
+	uint8_t count;
+	count = rte_emudev_count();
+	RTE_TEST_ASSERT(count > 0, "Invalid emudev count %" PRIu8, count);
+	return TEST_SUCCESS;
+}
+
+static int
+test_emu_dev_get_dev_id(void)
+{
+	int ret;
+	ret = rte_emudev_get_dev_id("Invalid_emu_dev_device\n");
+	RTE_TEST_ASSERT_FAIL(ret, "Expected <0 for invalid dev name, ret=%d",
+			     ret);
+	return TEST_SUCCESS;
+}
+
+static int
+test_emu_dev_configure(void)
+{
+	int ret;
+	struct rte_emudev_info dev_conf;
+	struct rte_iavf_emu_config iavf_conf_set = {.qp_num = 1};
+	struct rte_iavf_emu_config iavf_conf_get = {0};
+
+	rte_emudev_stop(test_dev_id);
+
+	/* Check invalid configuration */
+	ret = rte_emudev_configure(test_dev_id, NULL);
+	RTE_TEST_ASSERT(ret == -EINVAL,
+			"Null configure; Expected -EINVAL, got %d", ret);
+
+	/* Valid configuration test */
+	dev_conf.dev_priv = (rte_emudev_obj_t)&iavf_conf_get;
+	ret = rte_emudev_get_dev_info(test_dev_id, &dev_conf);
+	RTE_TEST_ASSERT_SUCCESS(ret,
+				"Failed to obtain emudev configuration (%d)",
+				ret);
+	dev_conf.dev_priv = (rte_emudev_obj_t)&iavf_conf_set;
+	ret = rte_emudev_configure(test_dev_id, &dev_conf);
+	RTE_TEST_ASSERT_SUCCESS(ret, "Failed to configure emudev (%d)", ret);
+
+	memset(&iavf_conf_get, 0, sizeof(iavf_conf_get));
+	dev_conf.dev_priv = (rte_emudev_obj_t)&iavf_conf_get;
+	ret = rte_emudev_get_dev_info(test_dev_id, &dev_conf);
+	RTE_TEST_ASSERT_SUCCESS(ret,
+				"Failed to obtain emudev configuration (%d)",
+				ret);
+
+	RTE_TEST_ASSERT_EQUAL(iavf_conf_set.qp_num,
+			      iavf_conf_get.qp_num,
+			      "Configuration test failed; num_queues (%d)(%d)",
+			      iavf_conf_set.qp_num,
+			      iavf_conf_get.qp_num);
+
+	return TEST_SUCCESS;
+}
+
+static int
+test_emu_dev_start_stop(void)
+{
+	int ret;
+	ret = rte_emudev_start(test_dev_id);
+	RTE_TEST_ASSERT_SUCCESS(ret, "Failed to start emudev (%d)", ret);
+
+	rte_emudev_stop(test_dev_id);
+
+	return TEST_SUCCESS;
+}
+
+int iavf_emu_selftest(uint16_t dev_id)
+{
+	test_dev_id = dev_id;
+	testsuite_setup();
+
+	EMUDEV_TEST_RUN(NULL, NULL, test_emu_dev_count);
+	EMUDEV_TEST_RUN(NULL, NULL, test_emu_dev_get_dev_id);
+	EMUDEV_TEST_RUN(NULL, NULL, test_emu_dev_configure);
+	EMUDEV_TEST_RUN(NULL, NULL, test_emu_dev_start_stop);
+
+	testsuite_teardown();
+
+	EMU_IAVF_LOG(INFO, "Total tests   : %d\n", total);
+	EMU_IAVF_LOG(INFO, "Passed        : %d\n", passed);
+	EMU_IAVF_LOG(INFO, "Failed        : %d\n", failed);
+	EMU_IAVF_LOG(INFO, "Not supported : %d\n", unsupported);
+
+	if (failed)
+		return -1;
+
+	return 0;
+}
diff --git a/drivers/emu/iavf/meson.build b/drivers/emu/iavf/meson.build
index 3cab2226b7..613783e407 100644
--- a/drivers/emu/iavf/meson.build
+++ b/drivers/emu/iavf/meson.build
@@ -10,7 +10,7 @@ endif
 ext_deps += librt
 
 sources = files('iavf_emu.c', 'iavf_vfio_user.c',
-	'iavf_emudev.c')
+	'iavf_emu_test.c', 'iavf_emudev.c')
 
 deps += ['bus_vdev', 'emudev', 'vfio_user', 'common_iavf']
 
-- 
2.17.1


  parent reply	other threads:[~2020-12-19  6:45 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-18  7:47 [dpdk-dev] [PATCH 0/8] Introduce emudev library and iavf emudev driver Chenbo Xia
2020-12-18  7:47 ` [dpdk-dev] [PATCH 1/8] lib: introduce emudev library Chenbo Xia
2020-12-18  7:47 ` [dpdk-dev] [PATCH 2/8] doc: add emudev library guide Chenbo Xia
2020-12-18  7:47 ` [dpdk-dev] [PATCH 3/8] emu: introduce emulated iavf driver Chenbo Xia
2020-12-18  7:47 ` [dpdk-dev] [PATCH 4/8] emu/iavf: add vfio-user device register and unregister Chenbo Xia
2021-01-07  7:18   ` Xing, Beilei
2021-01-07  8:41     ` Xia, Chenbo
2020-12-18  7:47 ` [dpdk-dev] [PATCH 5/8] emu/iavf: add resource management and internal logic of iavf Chenbo Xia
2020-12-18  7:47 ` [dpdk-dev] [PATCH 6/8] emu/iavf: add emudev operations to fit in emudev framework Chenbo Xia
2020-12-18  7:47 ` [dpdk-dev] [PATCH 7/8] test/emudev: introduce functional test Chenbo Xia
2020-12-18  7:47 ` [dpdk-dev] [PATCH 8/8] doc: update release notes for iavf emudev driver Chenbo Xia
2020-12-18  9:53 ` [dpdk-dev] [PATCH 0/8] Introduce emudev library and " David Marchand
2020-12-19  6:11   ` Xia, Chenbo
2020-12-21  9:52     ` Maxime Coquelin
2020-12-21 12:01       ` Maxime Coquelin
2020-12-22  3:09         ` Xia, Chenbo
2020-12-22  8:48           ` Maxime Coquelin
2020-12-23  5:28             ` Xia, Chenbo
2020-12-19  6:27 ` [dpdk-dev] [PATCH v2 " Chenbo Xia
2020-12-19  6:27   ` [dpdk-dev] [PATCH v2 1/8] lib: introduce emudev library Chenbo Xia
2020-12-19  6:28   ` [dpdk-dev] [PATCH v2 2/8] doc: add emudev library guide Chenbo Xia
2020-12-19  6:28   ` [dpdk-dev] [PATCH v2 3/8] emu: introduce emulated iavf driver Chenbo Xia
2020-12-19  6:28   ` [dpdk-dev] [PATCH v2 4/8] emu/iavf: add vfio-user device register and unregister Chenbo Xia
2021-01-04  6:45     ` Wu, Jingjing
2021-01-05  1:26       ` Xia, Chenbo
2021-01-05 13:41     ` Wu, Jingjing
2021-01-06  7:41       ` Xia, Chenbo
2020-12-19  6:28   ` [dpdk-dev] [PATCH v2 5/8] emu/iavf: add resource management and internal logic of iavf Chenbo Xia
2020-12-29  6:05     ` Wu, Jingjing
2020-12-30  1:59       ` Xia, Chenbo
2020-12-19  6:28   ` [dpdk-dev] [PATCH v2 6/8] emu/iavf: add emudev operations to fit in emudev framework Chenbo Xia
2020-12-19  6:28   ` Chenbo Xia [this message]
2020-12-19  6:28   ` [dpdk-dev] [PATCH v2 8/8] doc: update release notes for iavf emudev driver Chenbo Xia
2021-01-13 16:52   ` [dpdk-dev] [PATCH v2 0/8] Introduce emudev library and " Thomas Monjalon
2021-01-14  1:35     ` Xia, Chenbo
2021-01-14  6:25   ` [dpdk-dev] [PATCH v3 " Chenbo Xia
2021-01-14  6:25     ` [dpdk-dev] [PATCH v3 1/8] lib: introduce emudev library Chenbo Xia
2021-01-14  6:25     ` [dpdk-dev] [PATCH v3 2/8] doc: add emudev library guide Chenbo Xia
2021-01-14  6:25     ` [dpdk-dev] [PATCH v3 3/8] emu: introduce emulated iavf driver Chenbo Xia
2021-01-14  6:25     ` [dpdk-dev] [PATCH v3 4/8] emu/iavf: add vfio-user device register and unregister Chenbo Xia
2021-01-14  6:25     ` [dpdk-dev] [PATCH v3 5/8] emu/iavf: add resource management and internal logic of iavf Chenbo Xia
2021-01-14  6:25     ` [dpdk-dev] [PATCH v3 6/8] emu/iavf: add emudev operations to fit in emudev framework Chenbo Xia
2021-01-14  6:25     ` [dpdk-dev] [PATCH v3 7/8] test/emudev: introduce functional test Chenbo Xia
2021-01-14  6:25     ` [dpdk-dev] [PATCH v3 8/8] doc: update release notes for iavf emudev driver Chenbo Xia
2024-02-12 22:49     ` [dpdk-dev] [PATCH v3 0/8] Introduce emudev library and " Stephen Hemminger
2023-06-14 19:47 ` [dpdk-dev] [PATCH " Stephen Hemminger

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201219062806.56477-8-chenbo.xia@intel.com \
    --to=chenbo.xia@intel.com \
    --cc=cunming.liang@intel.com \
    --cc=david.marchand@redhat.com \
    --cc=dev@dpdk.org \
    --cc=jingjing.wu@intel.com \
    --cc=miao.li@intel.com \
    --cc=stephen@networkplumber.org \
    --cc=thomas@monjalon.net \
    --cc=xiuchun.lu@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.