All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v14 0/4] add unit tests for bitrate, latency and pdump libraries
       [not found] <1535115087-2442-1>
@ 2018-10-08 12:12 ` Naga Suresh Somarowthu
  2019-01-18  1:34   ` Thomas Monjalon
  2018-10-08 12:12 ` [PATCH v14 1/4] test: add helper functions for tests using ring-PMD Rx/Tx Naga Suresh Somarowthu
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 6+ messages in thread
From: Naga Suresh Somarowthu @ 2018-10-08 12:12 UTC (permalink / raw)
  To: dev; +Cc: reshma.pattan, anatoly.burakov, remy.horton, Naga Suresh Somarowthu

1/4: add helper functions for tests using ring-PMD Rx/Tx
2/4: unit test cases added for bitrate library
3/4: unit test cases added for latencystats library
4/4: unit test cases added for pdump library

Patches 2/4, 3/4 and 4/4 depends on 1/4

Signed-off-by: Naga Suresh Somarowthu <naga.sureshx.somarowthu@intel.com>
Reviewed-by: Reshma Pattan <reshma.pattan@intel.com>
Acked-by: Reshma Pattan <reshma.pattan@intel.com>

---
v14 :rebased
v13: added required changes for meson build
     updated respective patches
     updated the headers as per IWYU
v12: corrected commit message for pdump unit test
v11: fixed compilation issue in centos and 32bit arch 
     removed memzone free as per fix in the latency library
     and updated the maintainers file
v10: fixed clang compiler issues and freed latency stats memzone in latency stats unit tests.
v9: rebased ontop of latest autotest changes and added new tests to the autotest list
v8: renamed commit headline and freed the metrics memzone for bitrate ut
v7: removed unused macros and corrected the comment
v6: updated ring variable appropriately
v5: rebased, freed pools and rings, created common patch set
---

Naga Suresh Somarowthu (4):
  test: add helper functions for tests using ring-PMD Rx/Tx
  test: add unit tests for bitrate library
  test: add unit tests for latencystats library
  test: add unit test for pdump library

 MAINTAINERS                       |  10 +-
 test/test/Makefile                |   9 ++
 test/test/autotest_data.py        |  18 +++
 test/test/meson.build             |  10 ++
 test/test/process.h               |  13 +++
 test/test/sample_packet_forward.c | 114 +++++++++++++++++++
 test/test/sample_packet_forward.h |  46 ++++++++
 test/test/test.c                  |   2 +
 test/test/test_bitratestats.c     | 226 ++++++++++++++++++++++++++++++++++++++
 test/test/test_latencystats.c     | 224 +++++++++++++++++++++++++++++++++++++
 test/test/test_pdump.c            | 219 ++++++++++++++++++++++++++++++++++++
 test/test/test_pdump.h            |  31 ++++++
 12 files changed, 921 insertions(+), 1 deletion(-)
 create mode 100644 test/test/sample_packet_forward.c
 create mode 100644 test/test/sample_packet_forward.h
 create mode 100644 test/test/test_bitratestats.c
 create mode 100644 test/test/test_latencystats.c
 create mode 100644 test/test/test_pdump.c
 create mode 100644 test/test/test_pdump.h

-- 
2.13.6

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v14 1/4] test: add helper functions for tests using ring-PMD Rx/Tx
       [not found] <1535115087-2442-1>
  2018-10-08 12:12 ` [PATCH v14 0/4] add unit tests for bitrate, latency and pdump libraries Naga Suresh Somarowthu
@ 2018-10-08 12:12 ` Naga Suresh Somarowthu
  2018-10-08 12:12 ` [PATCH v14 2/4] test: add unit tests for bitrate library Naga Suresh Somarowthu
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Naga Suresh Somarowthu @ 2018-10-08 12:12 UTC (permalink / raw)
  To: dev; +Cc: reshma.pattan, anatoly.burakov, remy.horton, Naga Suresh Somarowthu

Added ring pmd based packet rx/tx helper functions
for verifying Latency, Bitrate and pdump lib UTs.

Signed-off-by: Naga Suresh Somarowthu <naga.sureshx.somarowthu@intel.com>
Reviewed-by: Reshma Pattan <reshma.pattan@intel.com>
Reviewed-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
 MAINTAINERS                       |   5 ++
 test/test/Makefile                |   1 +
 test/test/meson.build             |   1 +
 test/test/sample_packet_forward.c | 114 ++++++++++++++++++++++++++++++++++++++
 test/test/sample_packet_forward.h |  46 +++++++++++++++
 5 files changed, 167 insertions(+)
 create mode 100644 test/test/sample_packet_forward.c
 create mode 100644 test/test/sample_packet_forward.h

diff --git a/MAINTAINERS b/MAINTAINERS
index 84b9ff786..c00081cd8 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1188,6 +1188,11 @@ F: test/test/test_resource.c
 F: test/test/virtual_pmd.c
 F: test/test/virtual_pmd.h
 
+Sample packet helper functions for unit test
+M: Reshma Pattan <reshma.pattan@intel.com>
+F: test/test/sample_packet_forward.c
+F: test/test/sample_packet_forward.h
+
 Driver testing tool
 M: Wenzhuo Lu <wenzhuo.lu@intel.com>
 M: Jingjing Wu <jingjing.wu@intel.com>
diff --git a/test/test/Makefile b/test/test/Makefile
index dcea4410d..66e98066f 100644
--- a/test/test/Makefile
+++ b/test/test/Makefile
@@ -165,6 +165,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_REORDER) += test_reorder.c
 
 SRCS-y += virtual_pmd.c
 SRCS-y += packet_burst_generator.c
+SRCS-y += sample_packet_forward.c
 SRCS-$(CONFIG_RTE_LIBRTE_ACL) += test_acl.c
 
 ifeq ($(CONFIG_RTE_LIBRTE_PMD_RING),y)
diff --git a/test/test/meson.build b/test/test/meson.build
index bacb5b144..087ffdb91 100644
--- a/test/test/meson.build
+++ b/test/test/meson.build
@@ -3,6 +3,7 @@
 
 test_sources = files('commands.c',
 	'packet_burst_generator.c',
+	'sample_packet_forward.c',
 	'test.c',
 	'test_acl.c',
 	'test_alarm.c',
diff --git a/test/test/sample_packet_forward.c b/test/test/sample_packet_forward.c
new file mode 100644
index 000000000..61384b3d9
--- /dev/null
+++ b/test/test/sample_packet_forward.c
@@ -0,0 +1,114 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include <rte_eth_ring.h>
+#include <rte_ethdev.h>
+#include <rte_mbuf.h>
+#include <rte_bus_vdev.h>
+#include "rte_lcore.h"
+#include "rte_mempool.h"
+#include "rte_ring.h"
+
+#include "sample_packet_forward.h"
+
+/* Sample test to create virtual rings and tx,rx portid from rings */
+int
+test_ring_setup(struct rte_ring **ring, uint16_t *portid)
+{
+	*ring = rte_ring_create("R0", RING_SIZE, rte_socket_id(),
+				  RING_F_SP_ENQ | RING_F_SC_DEQ);
+	if (*ring == NULL) {
+		printf("%s() line %u: rte_ring_create R0 failed",
+		       __func__, __LINE__);
+		return -1;
+	}
+	*portid = rte_eth_from_rings("net_ringa", ring, NUM_QUEUES,
+			ring, NUM_QUEUES, rte_socket_id());
+
+	return 0;
+}
+
+/* Sample test to free the mempool */
+void
+test_mp_free(struct rte_mempool *mp)
+{
+	rte_mempool_free(mp);
+}
+
+/* Sample test to free the virtual rings */
+void
+test_ring_free(struct rte_ring *rxtx)
+{
+	rte_ring_free(rxtx);
+}
+
+/* Sample test to release the vdev */
+void
+test_vdev_uninit(const char *vdev)
+{
+	rte_vdev_uninit(vdev);
+}
+
+/* sample test to allocate the mempool */
+int
+test_get_mempool(struct rte_mempool **mp, char *poolname)
+{
+	*mp = rte_pktmbuf_pool_create(poolname, NB_MBUF, 32, 0,
+			RTE_MBUF_DEFAULT_BUF_SIZE, rte_socket_id());
+	if (*mp == NULL)
+		return -1;
+	return 0;
+}
+
+/* sample test to allocate buffer for pkts */
+int
+test_get_mbuf_from_pool(struct rte_mempool **mp, struct rte_mbuf **pbuf,
+		char *poolname)
+{
+	int ret = 0;
+
+	ret = test_get_mempool(mp, poolname);
+	if (ret < 0)
+		return -1;
+	if (rte_pktmbuf_alloc_bulk(*mp, pbuf, NUM_PACKETS) != 0) {
+		printf("%s() line %u: rte_pktmbuf_alloc_bulk failed", __func__,
+		       __LINE__);
+		return -1;
+	}
+	return 0;
+}
+
+/* sample test to deallocate the allocated buffers and mempool */
+void
+test_put_mbuf_to_pool(struct rte_mempool *mp, struct rte_mbuf **pbuf)
+{
+	int itr = 0;
+
+	for (itr = 0; itr < NUM_PACKETS; itr++)
+		rte_pktmbuf_free(pbuf[itr]);
+	rte_mempool_free(mp);
+}
+
+/* Sample test to forward packets using virtual portids */
+int
+test_packet_forward(struct rte_mbuf **pbuf, uint16_t portid, uint16_t queue_id)
+{
+	/* send and receive packet and check for stats update */
+	if (rte_eth_tx_burst(portid, queue_id, pbuf, NUM_PACKETS)
+			< NUM_PACKETS) {
+		printf("%s() line %u: Error sending packet to"
+		       " port %d\n", __func__, __LINE__, portid);
+		return -1;
+	}
+	if (rte_eth_rx_burst(portid, queue_id, pbuf, NUM_PACKETS)
+			< NUM_PACKETS) {
+		printf("%s() line %u: Error receiving packet from"
+		       " port %d\n", __func__, __LINE__, portid);
+		return -1;
+	}
+	return 0;
+}
diff --git a/test/test/sample_packet_forward.h b/test/test/sample_packet_forward.h
new file mode 100644
index 000000000..b2ed618b2
--- /dev/null
+++ b/test/test/sample_packet_forward.h
@@ -0,0 +1,46 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+
+#ifndef _SAMPLE_PACKET_FORWARD_H_
+#define _SAMPLE_PACKET_FORWARD_H_
+
+#include <stdint.h>
+
+/* MACROS to support virtual ring creation */
+#define RING_SIZE 256
+#define NUM_QUEUES 1
+#define NB_MBUF 512
+
+#define NUM_PACKETS 10
+
+struct rte_mbuf;
+struct rte_mempool;
+struct rte_ring;
+
+/* Sample test to create virtual rings and tx,rx portid from rings */
+int test_ring_setup(struct rte_ring **ring, uint16_t *portid);
+
+/* Sample test to free the virtual rings */
+void test_ring_free(struct rte_ring *rxtx);
+
+/* Sample test to forward packet using virtual port id */
+int test_packet_forward(struct rte_mbuf **pbuf, uint16_t portid,
+		uint16_t queue_id);
+
+/* sample test to allocate buffer for pkts */
+int test_get_mbuf_from_pool(struct rte_mempool **mp, struct rte_mbuf **pbuf,
+		char *poolname);
+
+/* Sample test to create the mempool */
+int test_get_mempool(struct rte_mempool **mp, char *poolname);
+
+/* sample test to deallocate the allocated buffers and mempool */
+void test_put_mbuf_to_pool(struct rte_mempool *mp, struct rte_mbuf **pbuf);
+
+/* Sample test to free the mempool */
+void test_mp_free(struct rte_mempool *mp);
+
+/* Sample test to release the vdev */
+void test_vdev_uninit(const char *vdev);
+#endif				/* _SAMPLE_PACKET_FORWARD_H_ */
-- 
2.13.6

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v14 2/4] test: add unit tests for bitrate library
       [not found] <1535115087-2442-1>
  2018-10-08 12:12 ` [PATCH v14 0/4] add unit tests for bitrate, latency and pdump libraries Naga Suresh Somarowthu
  2018-10-08 12:12 ` [PATCH v14 1/4] test: add helper functions for tests using ring-PMD Rx/Tx Naga Suresh Somarowthu
@ 2018-10-08 12:12 ` Naga Suresh Somarowthu
  2018-10-08 12:12 ` [PATCH v14 3/4] test: add unit tests for latencystats library Naga Suresh Somarowthu
  2018-10-08 12:12 ` [PATCH v14 4/4] test: add unit test for pdump library Naga Suresh Somarowthu
  4 siblings, 0 replies; 6+ messages in thread
From: Naga Suresh Somarowthu @ 2018-10-08 12:12 UTC (permalink / raw)
  To: dev; +Cc: reshma.pattan, anatoly.burakov, remy.horton, Naga Suresh Somarowthu

Unit Test Cases for BitRate library.

Signed-off-by: Naga Suresh Somarowthu <naga.sureshx.somarowthu@intel.com>
Reviewed-by: Reshma Pattan <reshma.pattan@intel.com>
Reviewed-by: Remy Horton <remy.horton@intel.com>
---
 MAINTAINERS                   |   1 +
 test/test/Makefile            |   1 +
 test/test/autotest_data.py    |   6 ++
 test/test/meson.build         |   4 +
 test/test/test_bitratestats.c | 226 ++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 238 insertions(+)
 create mode 100644 test/test/test_bitratestats.c

diff --git a/MAINTAINERS b/MAINTAINERS
index c00081cd8..4798fb258 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1156,6 +1156,7 @@ F: lib/librte_metrics/
 Bit-rate statistics
 M: Remy Horton <remy.horton@intel.com>
 F: lib/librte_bitratestats/
+F: test/test/test_bitratestats.c
 
 Latency statistics
 M: Reshma Pattan <reshma.pattan@intel.com>
diff --git a/test/test/Makefile b/test/test/Makefile
index 66e98066f..c030ab111 100644
--- a/test/test/Makefile
+++ b/test/test/Makefile
@@ -183,6 +183,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_PMD_RING) += test_pmd_ring_perf.c
 SRCS-$(CONFIG_RTE_LIBRTE_CRYPTODEV) += test_cryptodev_blockcipher.c
 SRCS-$(CONFIG_RTE_LIBRTE_CRYPTODEV) += test_cryptodev.c
 SRCS-$(CONFIG_RTE_LIBRTE_CRYPTODEV) += test_cryptodev_asym.c
+SRCS-$(CONFIG_RTE_LIBRTE_BITRATE) += test_bitratestats.c
 
 ifeq ($(CONFIG_RTE_COMPRESSDEV_TEST),y)
 SRCS-$(CONFIG_RTE_LIBRTE_COMPRESSDEV) += test_compressdev.c
diff --git a/test/test/autotest_data.py b/test/test/autotest_data.py
index f68d9b111..b253bf8f0 100644
--- a/test/test/autotest_data.py
+++ b/test/test/autotest_data.py
@@ -482,6 +482,12 @@
         "Func":    default_autotest,
         "Report":  None,
     },
+    {
+        "Name":    "Bitratestats autotest",
+        "Command": "bitratestats_autotest",
+        "Func":    default_autotest,
+        "Report":  None,
+    },
     #
     #Please always keep all dump tests at the end and together!
     #
diff --git a/test/test/meson.build b/test/test/meson.build
index 087ffdb91..f40a28f27 100644
--- a/test/test/meson.build
+++ b/test/test/meson.build
@@ -9,6 +9,7 @@ test_sources = files('commands.c',
 	'test_alarm.c',
 	'test_atomic.c',
 	'test_barrier.c',
+	'test_bitratestats.c',
 	'test_bpf.c',
 	'test_byteorder.c',
 	'test_cmdline.c',
@@ -104,6 +105,7 @@ test_sources = files('commands.c',
 )
 
 test_deps = ['acl',
+	'bitratestats',
 	'bpf',
 	'cfgfile',
 	'cmdline',
@@ -116,6 +118,7 @@ test_deps = ['acl',
 	'hash',
 	'lpm',
 	'member',
+	'metrics',
 	'pipeline',
 	'port',
 	'reorder',
@@ -128,6 +131,7 @@ test_names = [
 	'alarm_autotest',
 	'atomic_autotest',
 	'barrier_autotest',
+	'bitratestats_autotest',
 	'byteorder_autotest',
 	'cmdline_autotest',
 	'common_autotest',
diff --git a/test/test/test_bitratestats.c b/test/test/test_bitratestats.c
new file mode 100644
index 000000000..32b1b0fc0
--- /dev/null
+++ b/test/test/test_bitratestats.c
@@ -0,0 +1,226 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+
+#include <stdio.h>
+#include <stdint.h>
+#include <string.h>
+
+#include <errno.h>
+#include <rte_lcore.h>
+#include <rte_memzone.h>
+#include <rte_metrics.h>
+#include <rte_bitrate.h>
+
+#include "sample_packet_forward.h"
+#include "test.h"
+
+#define BIT_NUM_PACKETS 10
+#define QUEUE_ID 0
+
+uint16_t portid;
+struct rte_stats_bitrates *bitrate_data;
+struct rte_ring *ring;
+
+/* To test whether rte_stats_bitrate_create is successful */
+static int
+test_stats_bitrate_create(void)
+{
+	bitrate_data = rte_stats_bitrate_create();
+	TEST_ASSERT(bitrate_data != NULL, "rte_stats_bitrate_create failed");
+
+	return TEST_SUCCESS;
+}
+
+/* To test bit rate registration */
+static int
+test_stats_bitrate_reg(void)
+{
+	int ret = 0;
+
+	/* Test to register bit rate without metrics init */
+	ret = rte_stats_bitrate_reg(bitrate_data);
+	TEST_ASSERT(ret < 0, "Test Failed: rte_stats_bitrate_reg succeeded "
+			"without metrics init, ret:%d", ret);
+
+	/* Metrics initialization */
+	rte_metrics_init(rte_socket_id());
+	/* Test to register bit rate after metrics init */
+	ret = rte_stats_bitrate_reg(bitrate_data);
+	TEST_ASSERT((ret >= 0), "Test Failed: rte_stats_bitrate_reg %d", ret);
+
+	return TEST_SUCCESS;
+}
+
+/* To test the bit rate registration with invalid pointer */
+static int
+test_stats_bitrate_reg_invalidpointer(void)
+{
+	int ret = 0;
+
+	ret = rte_stats_bitrate_reg(NULL);
+	TEST_ASSERT(ret < 0, "Test Failed: Expected failure < 0 but "
+			"got %d", ret);
+
+	return TEST_SUCCESS;
+}
+
+/* To test bit rate calculation with invalid bit rate data pointer */
+static int
+test_stats_bitrate_calc_invalid_bitrate_data(void)
+{
+	int ret = 0;
+
+	ret = rte_stats_bitrate_calc(NULL, portid);
+	TEST_ASSERT(ret < 0, "Test Failed: rte_stats_bitrate_calc "
+			"ret:%d", ret);
+
+	return TEST_SUCCESS;
+}
+
+/* To test the bit rate calculation with invalid portid
+ * (higher than max ports)
+ */
+static int
+test_stats_bitrate_calc_invalid_portid_1(void)
+{
+	int ret = 0;
+
+	ret = rte_stats_bitrate_calc(bitrate_data, 33);
+	TEST_ASSERT(ret == -EINVAL, "Test Failed: Expected -%d for higher "
+			"portid rte_stats_bitrate_calc ret:%d", EINVAL, ret);
+
+	return TEST_SUCCESS;
+}
+
+/* To test the bit rate calculation with invalid portid (lesser than 0) */
+static int
+test_stats_bitrate_calc_invalid_portid_2(void)
+{
+	int ret = 0;
+
+	ret = rte_stats_bitrate_calc(bitrate_data, -1);
+	TEST_ASSERT(ret == -EINVAL, "Test Failed: Expected -%d for invalid "
+			"portid rte_stats_bitrate_calc ret:%d", EINVAL, ret);
+
+	return TEST_SUCCESS;
+}
+
+/* To test the bit rate calculation with non-existing portid */
+static int
+test_stats_bitrate_calc_non_existing_portid(void)
+{
+	int ret = 0;
+
+	ret = rte_stats_bitrate_calc(bitrate_data, 31);
+	TEST_ASSERT(ret ==  -EINVAL, "Test Failed: Expected -%d for "
+			"non-existing portid rte_stats_bitrate_calc ret:%d",
+			EINVAL, ret);
+
+	return TEST_SUCCESS;
+}
+
+/* To test the bit rate calculation with valid bit rate data, valid portid */
+static int
+test_stats_bitrate_calc(void)
+{
+	int ret = 0;
+
+	ret = rte_stats_bitrate_calc(bitrate_data, portid);
+	TEST_ASSERT(ret >= 0, "Test Failed: Expected >=0 for valid portid "
+			"rte_stats_bitrate_calc ret:%d", ret);
+
+	return TEST_SUCCESS;
+}
+
+static int
+test_bit_packet_forward(void)
+{
+	int ret;
+	struct rte_mbuf *pbuf[BIT_NUM_PACKETS] = { };
+	struct rte_mempool *mp;
+	char poolname[] = "mbuf_pool";
+	ret = test_get_mbuf_from_pool(&mp, pbuf, poolname);
+	if (ret < 0) {
+		printf("allocate mbuf pool Failed\n");
+		return TEST_FAILED;
+	}
+	ret = test_packet_forward(pbuf, portid, QUEUE_ID);
+	if (ret < 0)
+		printf("send pkts Failed\n");
+	test_put_mbuf_to_pool(mp, pbuf);
+
+	return TEST_SUCCESS;
+}
+
+static int
+test_bit_ring_setup(void)
+{
+	test_ring_setup(&ring, &portid);
+	printf("port in ring setup : %d\n", portid);
+
+	return TEST_SUCCESS;
+}
+
+static void
+test_bit_ring_free(void)
+{
+	test_ring_free(ring);
+	test_vdev_uninit("net_ring_net_ringa");
+	rte_memzone_free(rte_memzone_lookup("RTE_METRICS"));
+}
+
+static struct
+unit_test_suite bitratestats_testsuite  = {
+	.suite_name = "BitRate Stats Unit Test Suite",
+	.setup = test_bit_ring_setup,
+	.teardown = test_bit_ring_free,
+	.unit_test_cases = {
+		/* TEST CASE 1: Test to create bit rate data */
+		TEST_CASE(test_stats_bitrate_create),
+
+		/* TEST CASE 2: Test to register bit rate metrics
+		 * without metrics init and after metrics init
+		 */
+		TEST_CASE(test_stats_bitrate_reg),
+
+		/* TEST CASE 3: Test to register bit rate metrics
+		 * with invalid bit rate data
+		 */
+		TEST_CASE(test_stats_bitrate_reg_invalidpointer),
+
+		/* TEST CASE 4: Test to calculate bit rate data metrics
+		 * with invalid bit rate data
+		 */
+		TEST_CASE(test_stats_bitrate_calc_invalid_bitrate_data),
+
+		/* TEST CASE 5: Test to calculate bit rate data metrics
+		 * with portid exceeding the max ports
+		 */
+		TEST_CASE(test_stats_bitrate_calc_invalid_portid_1),
+
+		/* TEST CASE 6: Test to calculate bit rate data metrics
+		 * with portid less than 0
+		 */
+		TEST_CASE(test_stats_bitrate_calc_invalid_portid_2),
+
+		/* TEST CASE 7: Test to calculate bit rate data metrics
+		 * with non-existing portid
+		 */
+		TEST_CASE(test_stats_bitrate_calc_non_existing_portid),
+
+		/* TEST CASE 8: Test to calculate bit rate data metrics
+		 * with valid portid, valid bit rate data
+		 */
+		TEST_CASE_ST(test_bit_packet_forward, NULL,
+				test_stats_bitrate_calc),
+		TEST_CASES_END()
+	}
+};
+
+static int
+test_bitratestats(void)
+{
+	return unit_test_suite_runner(&bitratestats_testsuite);
+}
+REGISTER_TEST_COMMAND(bitratestats_autotest, test_bitratestats);
-- 
2.13.6

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v14 3/4] test: add unit tests for latencystats library
       [not found] <1535115087-2442-1>
                   ` (2 preceding siblings ...)
  2018-10-08 12:12 ` [PATCH v14 2/4] test: add unit tests for bitrate library Naga Suresh Somarowthu
@ 2018-10-08 12:12 ` Naga Suresh Somarowthu
  2018-10-08 12:12 ` [PATCH v14 4/4] test: add unit test for pdump library Naga Suresh Somarowthu
  4 siblings, 0 replies; 6+ messages in thread
From: Naga Suresh Somarowthu @ 2018-10-08 12:12 UTC (permalink / raw)
  To: dev; +Cc: reshma.pattan, anatoly.burakov, remy.horton, Naga Suresh Somarowthu

Unit Test Cases added for latencystats library.

Signed-off-by: Naga Suresh Somarowthu <naga.sureshx.somarowthu@intel.com>
Reviewed-by: Reshma Pattan <reshma.pattan@intel.com>
---
 MAINTAINERS                   |   1 +
 test/test/Makefile            |   1 +
 test/test/autotest_data.py    |   6 ++
 test/test/meson.build         |   3 +
 test/test/test_latencystats.c | 224 ++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 235 insertions(+)
 create mode 100644 test/test/test_latencystats.c

diff --git a/MAINTAINERS b/MAINTAINERS
index 4798fb258..5eee72956 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1161,6 +1161,7 @@ F: test/test/test_bitratestats.c
 Latency statistics
 M: Reshma Pattan <reshma.pattan@intel.com>
 F: lib/librte_latencystats/
+F: test/test/test_latencystats.c
 
 BPF - EXPERIMENTAL
 M: Konstantin Ananyev <konstantin.ananyev@intel.com>
diff --git a/test/test/Makefile b/test/test/Makefile
index c030ab111..5729638a4 100644
--- a/test/test/Makefile
+++ b/test/test/Makefile
@@ -184,6 +184,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_CRYPTODEV) += test_cryptodev_blockcipher.c
 SRCS-$(CONFIG_RTE_LIBRTE_CRYPTODEV) += test_cryptodev.c
 SRCS-$(CONFIG_RTE_LIBRTE_CRYPTODEV) += test_cryptodev_asym.c
 SRCS-$(CONFIG_RTE_LIBRTE_BITRATE) += test_bitratestats.c
+SRCS-$(CONFIG_RTE_LIBRTE_LATENCY_STATS) += test_latencystats.c
 
 ifeq ($(CONFIG_RTE_COMPRESSDEV_TEST),y)
 SRCS-$(CONFIG_RTE_LIBRTE_COMPRESSDEV) += test_compressdev.c
diff --git a/test/test/autotest_data.py b/test/test/autotest_data.py
index b253bf8f0..f44e31d33 100644
--- a/test/test/autotest_data.py
+++ b/test/test/autotest_data.py
@@ -488,6 +488,12 @@
         "Func":    default_autotest,
         "Report":  None,
     },
+    {
+        "Name":    "Latencystats autotest",
+        "Command": "latencystats_autotest",
+        "Func":    default_autotest,
+        "Report":  None,
+    },
     #
     #Please always keep all dump tests at the end and together!
     #
diff --git a/test/test/meson.build b/test/test/meson.build
index f40a28f27..e31e24096 100644
--- a/test/test/meson.build
+++ b/test/test/meson.build
@@ -51,6 +51,7 @@ test_sources = files('commands.c',
 	'test_interrupts.c',
 	'test_kni.c',
 	'test_kvargs.c',
+	'test_latencystats.c',
 	'test_link_bonding.c',
 	'test_link_bonding_mode4.c',
 	'test_logs.c',
@@ -116,6 +117,7 @@ test_deps = ['acl',
 	'eventdev',
 	'flow_classify',
 	'hash',
+	'latencystats',
 	'lpm',
 	'member',
 	'metrics',
@@ -179,6 +181,7 @@ test_names = [
 	'interrupt_autotest',
 	'kni_autotest',
 	'kvargs_autotest',
+	'latencystats_autotest',
 	'link_bonding_autotest',
 	'link_bonding_mode4_autotest',
 	'logs_autotest',
diff --git a/test/test/test_latencystats.c b/test/test/test_latencystats.c
new file mode 100644
index 000000000..039c508cd
--- /dev/null
+++ b/test/test/test_latencystats.c
@@ -0,0 +1,224 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+
+#include <stdio.h>
+#include <stdint.h>
+#include <string.h>
+
+#include <rte_latencystats.h>
+#include "rte_lcore.h"
+#include "rte_metrics.h"
+
+#include "sample_packet_forward.h"
+#include "test.h"
+
+#define NUM_STATS 4
+#define LATENCY_NUM_PACKETS 10
+#define QUEUE_ID 0
+
+uint16_t portid;
+struct rte_ring *ring;
+
+struct rte_metric_name lat_stats_strings[] = {
+	{"min_latency_ns"},
+	{"avg_latency_ns"},
+	{"max_latency_ns"},
+	{"jitter_ns"},
+};
+
+/* Test case for latency init with metrics init */
+static int test_latency_init(void)
+{
+	int ret = 0;
+
+	/* Metrics Initialization */
+	rte_metrics_init(rte_socket_id());
+
+	ret = rte_latencystats_init(1, NULL);
+	TEST_ASSERT(ret >= 0, "Test Failed: rte_latencystats_init failed");
+
+	return TEST_SUCCESS;
+}
+
+/* Test case to update the latency stats */
+static int test_latency_update(void)
+{
+	int ret = 0;
+
+	ret = rte_latencystats_update();
+	TEST_ASSERT(ret >= 0, "Test Failed: rte_latencystats_update failed");
+
+	return TEST_SUCCESS;
+}
+
+/* Test case to uninit latency stats */
+static int test_latency_uninit(void)
+{
+	int ret = 0;
+
+	ret = rte_latencystats_uninit();
+	TEST_ASSERT(ret >= 0, "Test Failed: rte_latencystats_uninit failed");
+
+	return TEST_SUCCESS;
+}
+
+/* Test case to get names of latency stats */
+static int test_latencystats_get_names(void)
+{
+	int ret = 0, i = 0;
+	int size = 0;
+	struct rte_metric_name names[NUM_STATS];
+	struct rte_metric_name wrongnames[NUM_STATS - 2];
+
+	size_t m_size = sizeof(struct rte_metric_name);
+	for (i = 0; i < NUM_STATS; i++)
+		memset(&names[i], 0, m_size);
+	for (i = 0; i < NUM_STATS - 2; i++)
+		memset(&wrongnames[i], 0, m_size);
+
+	/* Success Test: Valid names and size */
+	size = NUM_STATS;
+	ret = rte_latencystats_get_names(names, size);
+	for (i = 0; i <= NUM_STATS; i++) {
+		if (strcmp(lat_stats_strings[i].name, names[i].name) == 0)
+			printf(" %s\n", names[i].name);
+		else
+			printf("Failed: Names are not matched\n");
+	}
+	TEST_ASSERT((ret == NUM_STATS), "Test Failed to get metrics names");
+
+	/* Failure Test: Invalid names and valid size */
+	ret = rte_latencystats_get_names(NULL, size);
+	TEST_ASSERT((ret == NUM_STATS), "Test Failed to get the metrics count,"
+		    "Actual: %d Expected: %d", ret, NUM_STATS);
+
+	/* Failure Test: Valid names and invalid size */
+	size = 0;
+	ret = rte_latencystats_get_names(names, size);
+	TEST_ASSERT((ret == NUM_STATS), "Test Failed to get the metrics count,"
+		    "Actual: %d Expected: %d", ret, NUM_STATS);
+
+	/* Failure Test: Invalid names (array size lesser than size) */
+	size = NUM_STATS + 1;
+	ret = rte_latencystats_get_names(wrongnames, size);
+	TEST_ASSERT((ret == NUM_STATS), "Test Failed to get metrics names");
+	return TEST_SUCCESS;
+}
+
+/* Test case to get latency stats values */
+static int test_latencystats_get(void)
+{
+	int ret = 0, i = 0;
+	int size = 0;
+	struct rte_metric_value values[NUM_STATS];
+	struct rte_metric_value wrongvalues[NUM_STATS - 2];
+
+	size_t v_size = sizeof(struct rte_metric_value);
+	for (i = 0; i < NUM_STATS; i++)
+		memset(&values[i], 0, v_size);
+	for (i = 0; i < NUM_STATS - 2; i++)
+		memset(&wrongvalues[i], 0, v_size);
+
+	/* Success Test: Valid values and valid size */
+	size = NUM_STATS;
+	ret = rte_latencystats_get(values, size);
+	TEST_ASSERT((ret == NUM_STATS), "Test Failed to get latency metrics"
+			" values");
+
+	/* Failure Test: Invalid values and valid size */
+	ret = rte_latencystats_get(NULL, size);
+	TEST_ASSERT((ret == NUM_STATS), "Test Failed to get the stats count,"
+		    "Actual: %d Expected: %d", ret, NUM_STATS);
+
+	/* Failure Test: Valid values and invalid size */
+	size = 0;
+	ret = rte_latencystats_get(values, size);
+	TEST_ASSERT((ret == NUM_STATS), "Test Failed to get the stats count,"
+		    "Actual: %d Expected: %d", ret, NUM_STATS);
+
+	/* Failure Test: Invalid values(array size lesser than size)
+	 * and invalid size
+	 */
+	size = NUM_STATS + 2;
+	ret = rte_latencystats_get(wrongvalues, size);
+	TEST_ASSERT(ret == NUM_STATS, "Test Failed to get latency metrics"
+			" values");
+
+	return TEST_SUCCESS;
+}
+
+static int test_latency_ring_setup(void)
+{
+	test_ring_setup(&ring, &portid);
+
+	return TEST_SUCCESS;
+}
+
+static void test_latency_ring_free(void)
+{
+	test_ring_free(ring);
+	test_vdev_uninit("net_ring_net_ringa");
+}
+
+static int test_latency_packet_forward(void)
+{
+	int ret;
+	struct rte_mbuf *pbuf[LATENCY_NUM_PACKETS] = { };
+	struct rte_mempool *mp;
+	char poolname[] = "mbuf_pool";
+
+	ret = test_get_mbuf_from_pool(&mp, pbuf, poolname);
+	if (ret < 0) {
+		printf("allocate mbuf pool Failed\n");
+		return TEST_FAILED;
+	}
+	ret = test_packet_forward(pbuf, portid, QUEUE_ID);
+	if (ret < 0)
+		printf("send pkts Failed\n");
+	test_put_mbuf_to_pool(mp, pbuf);
+
+	return TEST_SUCCESS;
+}
+
+static struct
+unit_test_suite latencystats_testsuite = {
+	.suite_name = "Latency Stats Unit Test Suite",
+	.setup = test_latency_ring_setup,
+	.teardown = test_latency_ring_free,
+	.unit_test_cases = {
+
+		/* Test Case 1: To check latency init with
+		 * metrics init
+		 */
+		TEST_CASE_ST(NULL, NULL, test_latency_init),
+
+		/* Test Case 2: Do packet forwarding for metrics
+		 * calculation and check the latency metrics values
+		 * are updated
+		 */
+		TEST_CASE_ST(test_latency_packet_forward, NULL,
+				test_latency_update),
+		/* Test Case 3: To check whether latency stats names
+		 * are retrieved
+		 */
+		TEST_CASE_ST(NULL, NULL, test_latencystats_get_names),
+
+		/* Test Case 4: To check whether latency stats
+		 * values are retrieved
+		 */
+		TEST_CASE_ST(NULL, NULL, test_latencystats_get),
+
+		/* Test Case 5: To check uninit of latency test */
+		TEST_CASE_ST(NULL, NULL, test_latency_uninit),
+
+		TEST_CASES_END()
+	}
+};
+
+static int test_latencystats(void)
+{
+	return unit_test_suite_runner(&latencystats_testsuite);
+}
+
+REGISTER_TEST_COMMAND(latencystats_autotest, test_latencystats);
-- 
2.13.6

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v14 4/4] test: add unit test for pdump library
       [not found] <1535115087-2442-1>
                   ` (3 preceding siblings ...)
  2018-10-08 12:12 ` [PATCH v14 3/4] test: add unit tests for latencystats library Naga Suresh Somarowthu
@ 2018-10-08 12:12 ` Naga Suresh Somarowthu
  4 siblings, 0 replies; 6+ messages in thread
From: Naga Suresh Somarowthu @ 2018-10-08 12:12 UTC (permalink / raw)
  To: dev; +Cc: reshma.pattan, anatoly.burakov, remy.horton, Naga Suresh Somarowthu

Unit test cases are added for pdump library.
Primary process will act as server, forks a child secondary process.
Secondary process acts as client.
Server will do pdump init to serve any pdump client requests.
Server will create a vdev, send/receive packets continuously
in a separate thread.
Client will create virtual rings to receive the packet dump.
Client sends pdump enable/disable requests using either port/device id.
Packet flow direction can be tx/rx/tx&rx.
In Server, appropriate pdump callbacks are triggered,
when packets are transmitted/received.
Pdump packet is copied to client rings.

Signed-off-by: Naga Suresh Somarowthu <naga.sureshx.somarowthu@intel.com>
Reviewed-by: Reshma Pattan <reshma.pattan@intel.com>
---
 MAINTAINERS                |   3 +-
 test/test/Makefile         |   6 ++
 test/test/autotest_data.py |   6 ++
 test/test/meson.build      |   2 +
 test/test/process.h        |  13 +++
 test/test/test.c           |   2 +
 test/test/test_pdump.c     | 219 +++++++++++++++++++++++++++++++++++++++++++++
 test/test/test_pdump.h     |  31 +++++++
 8 files changed, 281 insertions(+), 1 deletion(-)
 create mode 100644 test/test/test_pdump.c
 create mode 100644 test/test/test_pdump.h

diff --git a/MAINTAINERS b/MAINTAINERS
index 5eee72956..7160c92cd 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1030,7 +1030,8 @@ F: lib/librte_pdump/
 F: doc/guides/prog_guide/pdump_lib.rst
 F: app/pdump/
 F: doc/guides/tools/pdump.rst
-
+F: test/test/test_pdump.c
+F: test/test/test_pdump.h
 
 Packet Framework
 ----------------
diff --git a/test/test/Makefile b/test/test/Makefile
index 5729638a4..129acb330 100644
--- a/test/test/Makefile
+++ b/test/test/Makefile
@@ -185,6 +185,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_CRYPTODEV) += test_cryptodev.c
 SRCS-$(CONFIG_RTE_LIBRTE_CRYPTODEV) += test_cryptodev_asym.c
 SRCS-$(CONFIG_RTE_LIBRTE_BITRATE) += test_bitratestats.c
 SRCS-$(CONFIG_RTE_LIBRTE_LATENCY_STATS) += test_latencystats.c
+SRCS-$(CONFIG_RTE_LIBRTE_PDUMP) += test_pdump.c
 
 ifeq ($(CONFIG_RTE_COMPRESSDEV_TEST),y)
 SRCS-$(CONFIG_RTE_LIBRTE_COMPRESSDEV) += test_compressdev.c
@@ -215,6 +216,11 @@ CFLAGS += $(WERROR_FLAGS)
 CFLAGS += -D_GNU_SOURCE
 
 LDLIBS += -lm
+
+ifeq ($(CONFIG_RTE_LIBRTE_PDUMP),y)
+LDLIBS += -lpthread
+endif
+
 ifeq ($(CONFIG_RTE_COMPRESSDEV_TEST),y)
 ifeq ($(CONFIG_RTE_LIBRTE_COMPRESSDEV),y)
 LDLIBS += -lz
diff --git a/test/test/autotest_data.py b/test/test/autotest_data.py
index f44e31d33..9a54d0c04 100644
--- a/test/test/autotest_data.py
+++ b/test/test/autotest_data.py
@@ -494,6 +494,12 @@
         "Func":    default_autotest,
         "Report":  None,
     },
+    {
+        "Name":    "Pdump autotest",
+        "Comamnd": "pdump_autotest",
+        "Func":    default_autotest,
+        "Report":  None,
+    },
     #
     #Please always keep all dump tests at the end and together!
     #
diff --git a/test/test/meson.build b/test/test/meson.build
index e31e24096..4fd383c00 100644
--- a/test/test/meson.build
+++ b/test/test/meson.build
@@ -71,6 +71,7 @@ test_sources = files('commands.c',
 	'test_memzone.c',
 	'test_meter.c',
 	'test_mp_secondary.c',
+	'test_pdump.c',
 	'test_per_lcore.c',
 	'test_pmd_perf.c',
 	'test_pmd_ring.c',
@@ -201,6 +202,7 @@ test_names = [
 	'memzone_autotest',
 	'meter_autotest',
 	'multiprocess_autotest',
+	'pdump_autotest',
 	'per_lcore_autotest',
 	'pmd_perf_autotest',
 	'power_acpi_cpufreq_autotest',
diff --git a/test/test/process.h b/test/test/process.h
index ba3a18502..7f62f644f 100644
--- a/test/test/process.h
+++ b/test/test/process.h
@@ -9,6 +9,7 @@
 #include <libgen.h> /* basename et al */
 #include <stdlib.h> /* NULL */
 #include <unistd.h> /* readlink */
+#include <sys/wait.h>
 
 #ifdef RTE_EXEC_ENV_BSDAPP
 #define self "curproc"
@@ -18,6 +19,10 @@
 #define exe "exe"
 #endif
 
+#include <pthread.h>
+extern void *send_pkts(void *empty);
+extern uint16_t flag_for_send_pkts;
+
 /*
  * launches a second copy of the test process using the given argv parameters,
  * which should include argv[0] as the process name. To identify in the
@@ -31,6 +36,7 @@ process_dup(const char *const argv[], int numargs, const char *env_value)
 	char *argv_cpy[numargs + 1];
 	int i, fd, status;
 	char path[32];
+	pthread_t thread;
 
 	pid_t pid = fork();
 	if (pid < 0)
@@ -61,8 +67,15 @@ process_dup(const char *const argv[], int numargs, const char *env_value)
 			rte_panic("Cannot exec\n");
 	}
 	/* parent process does a wait */
+	if ((strcmp(env_value, "run_pdump_server_tests") == 0))
+		pthread_create(&thread, NULL, &send_pkts, NULL);
+
 	while (wait(&status) != pid)
 		;
+	if ((strcmp(env_value, "run_pdump_server_tests") == 0)) {
+		flag_for_send_pkts = 0;
+		pthread_join(thread, NULL);
+	}
 	return status;
 }
 
diff --git a/test/test/test.c b/test/test/test.c
index 44dfe20ef..a54b0d142 100644
--- a/test/test/test.c
+++ b/test/test/test.c
@@ -30,6 +30,7 @@ extern cmdline_parse_ctx_t main_ctx[];
 #endif
 
 #include "test.h"
+#include "test_pdump.h"
 
 #define RTE_LOGTYPE_APP RTE_LOGTYPE_USER1
 
@@ -49,6 +50,7 @@ do_recursive_call(void)
 		int (*action_fn)(void);
 	} actions[] =  {
 			{ "run_secondary_instances", test_mp_secondary },
+			{ "run_pdump_server_tests", test_pdump },
 			{ "test_missing_c_flag", no_action },
 			{ "test_master_lcore_flag", no_action },
 			{ "test_invalid_n_flag", no_action },
diff --git a/test/test/test_pdump.c b/test/test/test_pdump.c
new file mode 100644
index 000000000..ec962f08f
--- /dev/null
+++ b/test/test/test_pdump.c
@@ -0,0 +1,219 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+#include <stdio.h>
+#include <unistd.h>
+#include <stdint.h>
+#include <limits.h>
+
+#include <rte_ethdev_driver.h>
+#include <rte_pdump.h>
+#include "rte_eal.h"
+#include "rte_lcore.h"
+#include "rte_mempool.h"
+#include "rte_ring.h"
+
+#include "sample_packet_forward.h"
+#include "test.h"
+#include "process.h"
+#include "test_pdump.h"
+
+#define launch_p(ARGV) process_dup(ARGV, \
+		sizeof(ARGV)/(sizeof(ARGV[0])), __func__)
+
+struct rte_ring *ring_server;
+uint16_t portid;
+uint16_t flag_for_send_pkts = 1;
+
+int
+test_pdump_init(void)
+{
+	int ret = 0;
+
+	ret = rte_pdump_init(NULL);
+	if (ret < 0) {
+		printf("rte_pdump_init failed\n");
+		return -1;
+	}
+	ret = test_ring_setup(&ring_server, &portid);
+	if (ret < 0) {
+		printf("test_ring_setup failed\n");
+		return -1;
+	}
+	printf("pdump_init success\n");
+	return ret;
+}
+
+int
+run_pdump_client_tests(void)
+{
+	int flags = RTE_PDUMP_FLAG_TX, ret = 0, itr;
+	char deviceid[] = "net_ring_net_ringa";
+	struct rte_ring *ring_client;
+	struct rte_mempool *mp = NULL;
+	struct rte_eth_dev *eth_dev = NULL;
+	char poolname[] = "mbuf_pool_client";
+
+	ret = test_get_mempool(&mp, poolname);
+	if (ret < 0)
+		return -1;
+	mp->flags = 0x0000;
+	ring_client = rte_ring_create("SR0", RING_SIZE, rte_socket_id(),
+				      RING_F_SP_ENQ | RING_F_SC_DEQ);
+	if (ring_client == NULL) {
+		printf("rte_ring_create SR0 failed");
+		return -1;
+	}
+
+	eth_dev = rte_eth_dev_attach_secondary(deviceid);
+	if (!eth_dev) {
+		printf("Failed to probe %s", deviceid);
+		return -1;
+	}
+	rte_eth_dev_probing_finish(eth_dev);
+
+	ring_client->prod.single = 0;
+	ring_client->cons.single = 0;
+
+	printf("\n***** flags = RTE_PDUMP_FLAG_TX *****\n");
+
+	for (itr = 0; itr < NUM_ITR; itr++) {
+		ret = rte_pdump_enable(portid, QUEUE_ID, flags, ring_client,
+				       mp, NULL);
+		if (ret < 0) {
+			printf("rte_pdump_enable failed\n");
+			return -1;
+		}
+		printf("pdump_enable success\n");
+
+		ret = rte_pdump_disable(portid, QUEUE_ID, flags);
+		if (ret < 0) {
+			printf("rte_pdump_disable failed\n");
+			return -1;
+		}
+		printf("pdump_disable success\n");
+
+		ret = rte_pdump_enable_by_deviceid(deviceid, QUEUE_ID, flags,
+						   ring_client, mp, NULL);
+		if (ret < 0) {
+			printf("rte_pdump_enable_by_deviceid failed\n");
+			return -1;
+		}
+		printf("pdump_enable_by_deviceid success\n");
+
+		ret = rte_pdump_disable_by_deviceid(deviceid, QUEUE_ID, flags);
+		if (ret < 0) {
+			printf("rte_pdump_disable_by_deviceid failed\n");
+			return -1;
+		}
+		printf("pdump_disable_by_deviceid success\n");
+
+		if (itr == 0) {
+			flags = RTE_PDUMP_FLAG_RX;
+			printf("\n***** flags = RTE_PDUMP_FLAG_RX *****\n");
+		} else if (itr == 1) {
+			flags = RTE_PDUMP_FLAG_RXTX;
+			printf("\n***** flags = RTE_PDUMP_FLAG_RXTX *****\n");
+		}
+	}
+	if (ring_client != NULL)
+		test_ring_free(ring_client);
+	if (mp != NULL)
+		test_mp_free(mp);
+
+	return ret;
+}
+
+int
+test_pdump_uninit(void)
+{
+	int ret = 0;
+
+	ret = rte_pdump_uninit();
+	if (ret < 0) {
+		printf("rte_pdump_uninit failed\n");
+		return -1;
+	}
+	if (ring_server != NULL)
+		test_ring_free(ring_server);
+	printf("pdump_uninit success\n");
+	test_vdev_uninit("net_ring_net_ringa");
+	return ret;
+}
+
+void *
+send_pkts(void *empty)
+{
+	int ret = 0;
+	struct rte_mbuf *pbuf[NUM_PACKETS] = { };
+	struct rte_mempool *mp;
+	char poolname[] = "mbuf_pool_server";
+
+	ret = test_get_mbuf_from_pool(&mp, pbuf, poolname);
+	if (ret < 0)
+		printf("get_mbuf_from_pool failed\n");
+	do {
+		ret = test_packet_forward(pbuf, portid, QUEUE_ID);
+		if (ret < 0)
+			printf("send pkts Failed\n");
+	} while (flag_for_send_pkts);
+	test_put_mbuf_to_pool(mp, pbuf);
+	return empty;
+}
+
+/*
+ * This function is called in the primary i.e. main test, to spawn off secondary
+ * processes to run actual mp tests. Uses fork() and exec pair
+ */
+
+int
+run_pdump_server_tests(void)
+{
+	int ret = 0;
+	char coremask[10];
+
+#ifdef RTE_EXEC_ENV_LINUXAPP
+	char tmp[PATH_MAX] = { 0 };
+	char prefix[PATH_MAX] = { 0 };
+
+	get_current_prefix(tmp, sizeof(tmp));
+	snprintf(prefix, sizeof(prefix), "--file-prefix=%s", tmp);
+#else
+	const char *prefix = "";
+#endif
+
+	/* good case, using secondary */
+	const char *const argv1[] = {
+		prgname, "-c", coremask, "--proc-type=secondary",
+		prefix
+	};
+
+	snprintf(coremask, sizeof(coremask), "%x",
+		 (1 << rte_get_master_lcore()));
+
+	ret = test_pdump_init();
+	ret |= launch_p(argv1);
+	ret |= test_pdump_uninit();
+	return ret;
+}
+
+int
+test_pdump(void)
+{
+	int ret = 0;
+	if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
+		printf("IN PRIMARY PROCESS\n");
+		ret = run_pdump_server_tests();
+		if (ret < 0)
+			return TEST_FAILED;
+	} else if (rte_eal_process_type() == RTE_PROC_SECONDARY) {
+		printf("IN SECONDARY PROCESS\n");
+		sleep(5);
+		ret = run_pdump_client_tests();
+		if (ret < 0)
+			return TEST_FAILED;
+	}
+	return TEST_SUCCESS;
+}
+
+REGISTER_TEST_COMMAND(pdump_autotest, test_pdump);
diff --git a/test/test/test_pdump.h b/test/test/test_pdump.h
new file mode 100644
index 000000000..abef9a85e
--- /dev/null
+++ b/test/test/test_pdump.h
@@ -0,0 +1,31 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+
+#ifndef _TEST_PDUMP_H_
+#define _TEST_PDUMP_H_
+
+#define QUEUE_ID 0
+#define NUM_ITR 3
+
+/* sample test to send packets to the pdump client recursively */
+void *send_pkts(void *port);
+
+/* Sample test to create setup for the pdump server tests */
+int test_pdump_init(void);
+
+/* Sample test to teardown the pdump server setup */
+int test_pdump_uninit(void);
+
+/* Sample test to run the pdump client tests */
+int run_pdump_client_tests(void);
+
+/* Sample test to run the pdump server tests */
+int run_pdump_server_tests(void);
+
+/* Sample test to run the pdump client and server tests based on
+ * the process type
+ */
+int test_pdump(void);
+
+#endif /* _TEST_PDUMP_H_ */
-- 
2.13.6

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v14 0/4] add unit tests for bitrate, latency and pdump libraries
  2018-10-08 12:12 ` [PATCH v14 0/4] add unit tests for bitrate, latency and pdump libraries Naga Suresh Somarowthu
@ 2019-01-18  1:34   ` Thomas Monjalon
  0 siblings, 0 replies; 6+ messages in thread
From: Thomas Monjalon @ 2019-01-18  1:34 UTC (permalink / raw)
  To: Naga Suresh Somarowthu; +Cc: dev, reshma.pattan, anatoly.burakov, remy.horton

08/10/2018 14:12, Naga Suresh Somarowthu:
> 1/4: add helper functions for tests using ring-PMD Rx/Tx
> 2/4: unit test cases added for bitrate library
> 3/4: unit test cases added for latencystats library
> 4/4: unit test cases added for pdump library
> 
> Patches 2/4, 3/4 and 4/4 depends on 1/4
> 
> Signed-off-by: Naga Suresh Somarowthu <naga.sureshx.somarowthu@intel.com>
> Reviewed-by: Reshma Pattan <reshma.pattan@intel.com>
> Acked-by: Reshma Pattan <reshma.pattan@intel.com>
> 
> ---
> v14 :rebased
> v13: added required changes for meson build
>      updated respective patches
>      updated the headers as per IWYU
> v12: corrected commit message for pdump unit test
> v11: fixed compilation issue in centos and 32bit arch 
>      removed memzone free as per fix in the latency library
>      and updated the maintainers file
> v10: fixed clang compiler issues and freed latency stats memzone in latency stats unit tests.
> v9: rebased ontop of latest autotest changes and added new tests to the autotest list
> v8: renamed commit headline and freed the metrics memzone for bitrate ut
> v7: removed unused macros and corrected the comment
> v6: updated ring variable appropriately
> v5: rebased, freed pools and rings, created common patch set
> ---
> 
> Naga Suresh Somarowthu (4):
>   test: add helper functions for tests using ring-PMD Rx/Tx
>   test: add unit tests for bitrate library
>   test: add unit tests for latencystats library
>   test: add unit test for pdump library

Rebased and applied, thanks

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2019-01-18  1:34 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <1535115087-2442-1>
2018-10-08 12:12 ` [PATCH v14 0/4] add unit tests for bitrate, latency and pdump libraries Naga Suresh Somarowthu
2019-01-18  1:34   ` Thomas Monjalon
2018-10-08 12:12 ` [PATCH v14 1/4] test: add helper functions for tests using ring-PMD Rx/Tx Naga Suresh Somarowthu
2018-10-08 12:12 ` [PATCH v14 2/4] test: add unit tests for bitrate library Naga Suresh Somarowthu
2018-10-08 12:12 ` [PATCH v14 3/4] test: add unit tests for latencystats library Naga Suresh Somarowthu
2018-10-08 12:12 ` [PATCH v14 4/4] test: add unit test for pdump library Naga Suresh Somarowthu

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.