* [dpdk-dev] [PATCH v10 0/5] add unit tests for bitrate, latency and pdump libraries @ 2018-07-31 22:18 Reshma Pattan 2018-07-31 22:18 ` [dpdk-dev] [PATCH v10 1/5] test: add helper functions for tests using ring-PMD Rx/Tx Reshma Pattan ` (7 more replies) 0 siblings, 8 replies; 32+ messages in thread From: Reshma Pattan @ 2018-07-31 22:18 UTC (permalink / raw) To: thomas, dev Cc: anatoly.burakov, jananeex.m.parthasarathy, Reshma Pattan, Naga Suresh Somarowthu From: Reshma Pattan <reshma.pattan@intel.com> 1/5: add helper functions for tests using ring-PMD Rx/Tx 2/5: unit test cases added for bitrate library 3/5: unit test cases added for latencystats library 4/5: unit test cases added for pdump library 5/5: added new unit tests to autotest list Patches 2/5,3/5 depends on 1/5 Patch 4/5 depends on 1/5 and the below patch http://patches.dpdk.org/patch/43354/ 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> Reviewed-by: Anatoly Burakov <anatoly.burakov@intel.com> Acked-by: Reshma Pattan <reshma.pattan@intel.com> --- 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 Reshma Pattan (1): autotest: add new unit tests to autotest list test/test/Makefile | 9 ++ test/test/autotest_data.py | 18 +++ test/test/process.h | 12 ++ test/test/sample_packet_forward.c | 115 +++++++++++++++++++ test/test/sample_packet_forward.h | 40 +++++++ test/test/test.c | 2 + test/test/test_bitratestats.c | 229 +++++++++++++++++++++++++++++++++++++ test/test/test_latencystats.c | 229 +++++++++++++++++++++++++++++++++++++ test/test/test_pdump.c | 232 ++++++++++++++++++++++++++++++++++++++ test/test/test_pdump.h | 31 +++++ 10 files changed, 917 insertions(+) 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.14.4 ^ permalink raw reply [flat|nested] 32+ messages in thread
* [dpdk-dev] [PATCH v10 1/5] test: add helper functions for tests using ring-PMD Rx/Tx 2018-07-31 22:18 [dpdk-dev] [PATCH v10 0/5] add unit tests for bitrate, latency and pdump libraries Reshma Pattan @ 2018-07-31 22:18 ` Reshma Pattan 2018-07-31 22:18 ` [dpdk-dev] [PATCH v10 2/5] test: add unit tests for bitrate library Reshma Pattan ` (6 subsequent siblings) 7 siblings, 0 replies; 32+ messages in thread From: Reshma Pattan @ 2018-07-31 22:18 UTC (permalink / raw) To: thomas, dev Cc: anatoly.burakov, jananeex.m.parthasarathy, Naga Suresh Somarowthu From: Naga Suresh Somarowthu <naga.sureshx.somarowthu@intel.com> 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> --- test/test/Makefile | 1 + test/test/sample_packet_forward.c | 115 ++++++++++++++++++++++++++++++++++++++ test/test/sample_packet_forward.h | 40 +++++++++++++ 3 files changed, 156 insertions(+) create mode 100644 test/test/sample_packet_forward.c create mode 100644 test/test/sample_packet_forward.h diff --git a/test/test/Makefile b/test/test/Makefile index e6967bab6..9f7d398e4 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/sample_packet_forward.c b/test/test/sample_packet_forward.c new file mode 100644 index 000000000..3822577b9 --- /dev/null +++ b/test/test/sample_packet_forward.c @@ -0,0 +1,115 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2018 Intel Corporation + */ + +#include <string.h> +#include <errno.h> +#include <time.h> + +#include <rte_memcpy.h> +#include <rte_common.h> +#include <rte_eth_ring.h> +#include <rte_ethdev.h> +#include <rte_mbuf.h> +#include <rte_bus_vdev.h> + +#include "sample_packet_forward.h" +#include "test.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..433bd3ba2 --- /dev/null +++ b/test/test/sample_packet_forward.h @@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2018 Intel Corporation + */ + +#ifndef _SAMPLE_PACKET_FORWARD_H_ +#define _SAMPLE_PACKET_FORWARD_H_ + +/* MACROS to support virtual ring creation */ +#define RING_SIZE 256 +#define NUM_QUEUES 1 +#define NB_MBUF 512 + +#define NUM_PACKETS 10 + +/* 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.14.4 ^ permalink raw reply [flat|nested] 32+ messages in thread
* [dpdk-dev] [PATCH v10 2/5] test: add unit tests for bitrate library 2018-07-31 22:18 [dpdk-dev] [PATCH v10 0/5] add unit tests for bitrate, latency and pdump libraries Reshma Pattan 2018-07-31 22:18 ` [dpdk-dev] [PATCH v10 1/5] test: add helper functions for tests using ring-PMD Rx/Tx Reshma Pattan @ 2018-07-31 22:18 ` Reshma Pattan 2018-07-31 22:18 ` [dpdk-dev] [PATCH v10 3/5] test: add unit tests for latencystats library Reshma Pattan ` (5 subsequent siblings) 7 siblings, 0 replies; 32+ messages in thread From: Reshma Pattan @ 2018-07-31 22:18 UTC (permalink / raw) To: thomas, dev Cc: anatoly.burakov, jananeex.m.parthasarathy, Naga Suresh Somarowthu From: Naga Suresh Somarowthu <naga.sureshx.somarowthu@intel.com> 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> --- test/test/Makefile | 1 + test/test/test_bitratestats.c | 229 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 230 insertions(+) create mode 100644 test/test/test_bitratestats.c diff --git a/test/test/Makefile b/test/test/Makefile index 9f7d398e4..c619877f0 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/test_bitratestats.c b/test/test/test_bitratestats.c new file mode 100644 index 000000000..38f7da4b5 --- /dev/null +++ b/test/test/test_bitratestats.c @@ -0,0 +1,229 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2018 Intel Corporation + */ + +#include <string.h> +#include <errno.h> +#include <time.h> + +#include <rte_log.h> +#include <rte_lcore.h> +#include <rte_mbuf.h> +#include <rte_memzone.h> +#include <rte_malloc.h> +#include <rte_common.h> +#include <rte_metrics.h> +#include <rte_bitrate.h> + +#include "test.h" +#include "sample_packet_forward.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.14.4 ^ permalink raw reply [flat|nested] 32+ messages in thread
* [dpdk-dev] [PATCH v10 3/5] test: add unit tests for latencystats library 2018-07-31 22:18 [dpdk-dev] [PATCH v10 0/5] add unit tests for bitrate, latency and pdump libraries Reshma Pattan 2018-07-31 22:18 ` [dpdk-dev] [PATCH v10 1/5] test: add helper functions for tests using ring-PMD Rx/Tx Reshma Pattan 2018-07-31 22:18 ` [dpdk-dev] [PATCH v10 2/5] test: add unit tests for bitrate library Reshma Pattan @ 2018-07-31 22:18 ` Reshma Pattan 2018-07-31 22:18 ` [dpdk-dev] [PATCH v10 4/5] test: add unit test for pdump library Reshma Pattan ` (4 subsequent siblings) 7 siblings, 0 replies; 32+ messages in thread From: Reshma Pattan @ 2018-07-31 22:18 UTC (permalink / raw) To: thomas, dev Cc: anatoly.burakov, jananeex.m.parthasarathy, Naga Suresh Somarowthu From: Naga Suresh Somarowthu <naga.sureshx.somarowthu@intel.com> 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> --- test/test/Makefile | 1 + test/test/test_latencystats.c | 229 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 230 insertions(+) create mode 100644 test/test/test_latencystats.c diff --git a/test/test/Makefile b/test/test/Makefile index c619877f0..bba3be1be 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/test_latencystats.c b/test/test/test_latencystats.c new file mode 100644 index 000000000..8db3428ff --- /dev/null +++ b/test/test/test_latencystats.c @@ -0,0 +1,229 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2018 Intel Corporation + */ + +#include <stdio.h> +#include <string.h> +#include <errno.h> +#include <time.h> + +#include <rte_common.h> +#include <rte_metrics.h> +#include <rte_latencystats.h> +#include <rte_eth_ring.h> +#include <rte_ethdev.h> +#include <rte_mbuf.h> +#include "test.h" +#include "sample_packet_forward.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; + 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 (int i = 0; i < NUM_STATS; i++) + memset(&names[i], 0, m_size); + for (int 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 (int 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; + 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 (int i = 0; i < NUM_STATS; i++) + memset(&values[i], 0, v_size); + for (int 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"); + for (int i = 0; i < NUM_STATS; i++) + printf("values: %ld\n", values[i].value); + + /* 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"); + rte_memzone_free(rte_memzone_lookup("rte_latencystats")); +} + +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.14.4 ^ permalink raw reply [flat|nested] 32+ messages in thread
* [dpdk-dev] [PATCH v10 4/5] test: add unit test for pdump library 2018-07-31 22:18 [dpdk-dev] [PATCH v10 0/5] add unit tests for bitrate, latency and pdump libraries Reshma Pattan ` (2 preceding siblings ...) 2018-07-31 22:18 ` [dpdk-dev] [PATCH v10 3/5] test: add unit tests for latencystats library Reshma Pattan @ 2018-07-31 22:18 ` Reshma Pattan 2018-07-31 22:18 ` [dpdk-dev] [PATCH v10 5/5] autotest: add new unit tests to autotest list Reshma Pattan ` (3 subsequent siblings) 7 siblings, 0 replies; 32+ messages in thread From: Reshma Pattan @ 2018-07-31 22:18 UTC (permalink / raw) To: thomas, dev Cc: anatoly.burakov, jananeex.m.parthasarathy, Naga Suresh Somarowthu From: Naga Suresh Somarowthu <naga.sureshx.somarowthu@intel.com> 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> --- test/test/Makefile | 6 ++ test/test/process.h | 12 +++ test/test/test.c | 2 + test/test/test_pdump.c | 232 +++++++++++++++++++++++++++++++++++++++++++++++++ test/test/test_pdump.h | 31 +++++++ 5 files changed, 283 insertions(+) create mode 100644 test/test/test_pdump.c create mode 100644 test/test/test_pdump.h diff --git a/test/test/Makefile b/test/test/Makefile index bba3be1be..3e7baef76 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 @@ -214,6 +215,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/process.h b/test/test/process.h index ba3a18502..c015c9030 100644 --- a/test/test/process.h +++ b/test/test/process.h @@ -18,6 +18,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 +35,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 +66,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..cfdda4d39 --- /dev/null +++ b/test/test/test_pdump.c @@ -0,0 +1,232 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2018 Intel Corporation + */ + +#include <time.h> +#include <stdio.h> +#include <stdint.h> +#include <stdlib.h> +#include <stdarg.h> +#include <inttypes.h> +#include <sys/queue.h> +#include <string.h> +#include <unistd.h> +#include <sys/wait.h> + +#include <rte_common.h> +#include <rte_mbuf.h> +#include <rte_pdump.h> +#include <rte_eth_ctrl.h> +#include <rte_memory.h> +#include <rte_memzone.h> +#include <rte_eal.h> +#include <rte_ring.h> +#include <rte_mempool.h> +#include <rte_eth_ring.h> +#include <rte_ethdev_driver.h> +#include <libgen.h> + +#include "test.h" +#include "sample_packet_forward.h" +#include "test_pdump.h" +#include "process.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.14.4 ^ permalink raw reply [flat|nested] 32+ messages in thread
* [dpdk-dev] [PATCH v10 5/5] autotest: add new unit tests to autotest list 2018-07-31 22:18 [dpdk-dev] [PATCH v10 0/5] add unit tests for bitrate, latency and pdump libraries Reshma Pattan ` (3 preceding siblings ...) 2018-07-31 22:18 ` [dpdk-dev] [PATCH v10 4/5] test: add unit test for pdump library Reshma Pattan @ 2018-07-31 22:18 ` Reshma Pattan 2018-07-31 22:30 ` [dpdk-dev] [PATCH v10 0/5] add unit tests for bitrate, latency and pdump libraries Thomas Monjalon ` (2 subsequent siblings) 7 siblings, 0 replies; 32+ messages in thread From: Reshma Pattan @ 2018-07-31 22:18 UTC (permalink / raw) To: thomas, dev; +Cc: anatoly.burakov, jananeex.m.parthasarathy, Reshma Pattan From: Reshma Pattan <reshma.pattan@intel.com> added bitrate, latency and pdump lib unit tests to autotest list. Signed-off-by: Reshma Pattan <reshma.pattan@intel.com> --- test/test/autotest_data.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/test/test/autotest_data.py b/test/test/autotest_data.py index 3f856ff57..2f7a2aa43 100644 --- a/test/test/autotest_data.py +++ b/test/test/autotest_data.py @@ -476,6 +476,24 @@ "Func": default_autotest, "Report": None, }, + { + "Name": "Bitratestats autotest", + "Command": "bitratestats_autotest", + "Func": default_autotest, + "Report": None, + } + { + "Name": "Latencystats autotest", + "Command": "latencystats_autotest", + "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! # -- 2.14.4 ^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [dpdk-dev] [PATCH v10 0/5] add unit tests for bitrate, latency and pdump libraries 2018-07-31 22:18 [dpdk-dev] [PATCH v10 0/5] add unit tests for bitrate, latency and pdump libraries Reshma Pattan ` (4 preceding siblings ...) 2018-07-31 22:18 ` [dpdk-dev] [PATCH v10 5/5] autotest: add new unit tests to autotest list Reshma Pattan @ 2018-07-31 22:30 ` Thomas Monjalon 2018-08-01 7:52 ` Thomas Monjalon 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 0/6] " Naga Suresh Somarowthu 7 siblings, 0 replies; 32+ messages in thread From: Thomas Monjalon @ 2018-07-31 22:30 UTC (permalink / raw) To: Reshma Pattan Cc: dev, anatoly.burakov, jananeex.m.parthasarathy, Naga Suresh Somarowthu Hi Reshma, 01/08/2018 00:18, Reshma Pattan: > 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 Please use --in-reply-to as explained in the contributing guide, in order to get all the versions in the same thread. ^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [dpdk-dev] [PATCH v10 0/5] add unit tests for bitrate, latency and pdump libraries 2018-07-31 22:18 [dpdk-dev] [PATCH v10 0/5] add unit tests for bitrate, latency and pdump libraries Reshma Pattan ` (5 preceding siblings ...) 2018-07-31 22:30 ` [dpdk-dev] [PATCH v10 0/5] add unit tests for bitrate, latency and pdump libraries Thomas Monjalon @ 2018-08-01 7:52 ` Thomas Monjalon 2018-08-03 13:45 ` Pattan, Reshma 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 0/6] " Naga Suresh Somarowthu 7 siblings, 1 reply; 32+ messages in thread From: Thomas Monjalon @ 2018-08-01 7:52 UTC (permalink / raw) To: Reshma Pattan Cc: dev, anatoly.burakov, jananeex.m.parthasarathy, Naga Suresh Somarowthu 01/08/2018 00:18, Reshma Pattan: > 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 > --- Sorry, the integration of this patchset is very painful. After asking for rebase, for clang fix, there are still some basic errors with 32-bit compilation: test_latencystats.c:131:21: error: format ‘%ld’ expects argument of type ‘long int’, but argument 2 has type ‘uint64_t’ {aka ‘long long unsigned int’} linkage: test@test@@dpdk-test@exe/test.c.o:(.data+0x18): undefined reference to `test_pdump' or even MAINTAINERS file: test/test/sample_packet_forward.c test/test/sample_packet_forward.h test/test/test_bitratestats.c test/test/test_latencystats.c I have already spent too much time on it, despite it is not fixing 18.08. Please do a complete detailed review of this series, so it can be considered for 18.11. ^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [dpdk-dev] [PATCH v10 0/5] add unit tests for bitrate, latency and pdump libraries 2018-08-01 7:52 ` Thomas Monjalon @ 2018-08-03 13:45 ` Pattan, Reshma 2018-08-03 14:11 ` Thomas Monjalon 2018-08-03 14:16 ` Parthasarathy, JananeeX M 0 siblings, 2 replies; 32+ messages in thread From: Pattan, Reshma @ 2018-08-03 13:45 UTC (permalink / raw) To: Thomas Monjalon, Somarowthu, Naga SureshX Cc: dev, Burakov, Anatoly, Parthasarathy, JananeeX M Hi Thomas, > -----Original Message----- > From: Thomas Monjalon [mailto:thomas@monjalon.net] > Sent: Wednesday, August 1, 2018 8:52 AM > To: Pattan, Reshma <reshma.pattan@intel.com> > Cc: dev@dpdk.org; Burakov, Anatoly <anatoly.burakov@intel.com>; > Parthasarathy, JananeeX M <jananeex.m.parthasarathy@intel.com>; > Somarowthu, Naga SureshX <naga.sureshx.somarowthu@intel.com> > Subject: Re: [dpdk-dev] [PATCH v10 0/5] add unit tests for bitrate, latency and > pdump libraries > > 01/08/2018 00:18, Reshma Pattan: > > 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 > > --- > > Sorry, the integration of this patchset is very painful. > > After asking for rebase, for clang fix, there are still some basic errors with 32- > bit compilation: > > test_latencystats.c:131:21: error: > format ‘%ld’ expects argument of type ‘long int’, > but argument 2 has type ‘uint64_t’ {aka ‘long long unsigned int’} > > linkage: > > test@test@@dpdk-test@exe/test.c.o:(.data+0x18): undefined > reference to `test_pdump' > > or even MAINTAINERS file: > > test/test/sample_packet_forward.c > test/test/sample_packet_forward.h > test/test/test_bitratestats.c > test/test/test_latencystats.c > > I have already spent too much time on it, despite it is not fixing 18.08. > > Please do a complete detailed review of this series, so it can be considered for > 18.11. > We missed to do these basic checks, apologies for consuming your time. Naga Suresh has now proactively worked on fixing these issues and running pre checks on patches and addressed in v12. The earlier versions were reviewed by me, Remy and Anatoly . So we request you to consider latest patches for 18.08, until unless they don’t give any last minute surprises. Thanks, Reshma ^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [dpdk-dev] [PATCH v10 0/5] add unit tests for bitrate, latency and pdump libraries 2018-08-03 13:45 ` Pattan, Reshma @ 2018-08-03 14:11 ` Thomas Monjalon 2018-08-03 14:16 ` Parthasarathy, JananeeX M 1 sibling, 0 replies; 32+ messages in thread From: Thomas Monjalon @ 2018-08-03 14:11 UTC (permalink / raw) To: Pattan, Reshma Cc: Somarowthu, Naga SureshX, dev, Burakov, Anatoly, Parthasarathy, JananeeX M 03/08/2018 15:45, Pattan, Reshma: > Hi Thomas, > > From: Thomas Monjalon [mailto:thomas@monjalon.net] > Sent: Wednesday, August 1, 2018 8:52 AM > > > > 01/08/2018 00:18, Reshma Pattan: > > > 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 > > > --- > > > > Sorry, the integration of this patchset is very painful. > > > > After asking for rebase, for clang fix, there are still some basic errors with 32- > > bit compilation: > > > > test_latencystats.c:131:21: error: > > format ‘%ld’ expects argument of type ‘long int’, > > but argument 2 has type ‘uint64_t’ {aka ‘long long unsigned int’} > > > > linkage: > > > > test@test@@dpdk-test@exe/test.c.o:(.data+0x18): undefined > > reference to `test_pdump' > > > > or even MAINTAINERS file: > > > > test/test/sample_packet_forward.c > > test/test/sample_packet_forward.h > > test/test/test_bitratestats.c > > test/test/test_latencystats.c > > > > I have already spent too much time on it, despite it is not fixing 18.08. > > > > Please do a complete detailed review of this series, so it can be considered for > > 18.11. > > > > We missed to do these basic checks, apologies for consuming your time. > Naga Suresh has now proactively worked on fixing these issues and running pre checks on patches and addressed in v12. > The earlier versions were reviewed by me, Remy and Anatoly . So we request you to consider latest patches for 18.08, > until unless they don’t give any last minute surprises. Sorry, I consider it is now too late for such patch in 18.08. It is not fixing any issue. Last days of 18.08 cycle will be really focus on bugs and doc. ^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [dpdk-dev] [PATCH v10 0/5] add unit tests for bitrate, latency and pdump libraries 2018-08-03 13:45 ` Pattan, Reshma 2018-08-03 14:11 ` Thomas Monjalon @ 2018-08-03 14:16 ` Parthasarathy, JananeeX M 2018-08-03 15:01 ` Thomas Monjalon 1 sibling, 1 reply; 32+ messages in thread From: Parthasarathy, JananeeX M @ 2018-08-03 14:16 UTC (permalink / raw) To: Pattan, Reshma, Thomas Monjalon, Somarowthu, Naga SureshX Cc: dev, Burakov, Anatoly Hi Thomas, >-----Original Message----- >From: Pattan, Reshma >Sent: Friday, August 03, 2018 7:15 PM >To: Thomas Monjalon <thomas@monjalon.net>; Somarowthu, Naga SureshX ><naga.sureshx.somarowthu@intel.com> >Cc: dev@dpdk.org; Burakov, Anatoly <anatoly.burakov@intel.com>; >Parthasarathy, JananeeX M <jananeex.m.parthasarathy@intel.com> >Subject: RE: [dpdk-dev] [PATCH v10 0/5] add unit tests for bitrate, latency and >pdump libraries > >Hi Thomas, > >> -----Original Message----- >> From: Thomas Monjalon [mailto:thomas@monjalon.net] >> Sent: Wednesday, August 1, 2018 8:52 AM >> To: Pattan, Reshma <reshma.pattan@intel.com> >> Cc: dev@dpdk.org; Burakov, Anatoly <anatoly.burakov@intel.com>; >> Parthasarathy, JananeeX M <jananeex.m.parthasarathy@intel.com>; >> Somarowthu, Naga SureshX <naga.sureshx.somarowthu@intel.com> >> Subject: Re: [dpdk-dev] [PATCH v10 0/5] add unit tests for bitrate, >> latency and pdump libraries >> >> 01/08/2018 00:18, Reshma Pattan: >> > 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 >> > --- >> >> Sorry, the integration of this patchset is very painful. >> >> After asking for rebase, for clang fix, there are still some basic >> errors with 32- bit compilation: >> >> test_latencystats.c:131:21: error: >> format ‘%ld’ expects argument of type ‘long int’, >> but argument 2 has type ‘uint64_t’ {aka ‘long long unsigned int’} >> >> linkage: >> >> test@test@@dpdk-test@exe/test.c.o:(.data+0x18): undefined >reference >> to `test_pdump' >> >> or even MAINTAINERS file: >> >> test/test/sample_packet_forward.c >> test/test/sample_packet_forward.h >> test/test/test_bitratestats.c >> test/test/test_latencystats.c >> >> I have already spent too much time on it, despite it is not fixing 18.08. >> >> Please do a complete detailed review of this series, so it can be >> considered for 18.11. >> > >We missed to do these basic checks, apologies for consuming your time. > Naga Suresh has now proactively worked on fixing these issues and running >pre checks on patches and addressed in v12. >The earlier versions were reviewed by me, Remy and Anatoly . So we request >you to consider latest patches for 18.08, until unless they don’t give any last >minute surprises. > >Thanks, >Reshma > > > Apologies very much to miss the earlier patch pre-checks. We have gone through the cheatsheet and validated pre-checks in the patch v12. Compiled Successfully in Fedora 27, Fedora 26, CentOS 7.2, CentOS 7.4, Ubuntu for both 32bit/64bit and FreeBSD (64bit) Build using compilers gcc, icc, clang were successful in Fedora. Shared Library builds were successful in Fedora 27, CentOS 7.2 and Ubuntu Executed checkpatch, check-git-log without any errors. Code changes were acknowledged by reviewers. Request to please consider the patch set v12 to be included in RC3 18.08. In case of any info/change please let us know. Thanks for your support. M.P.Jananee -------------------------------------------------------------- Intel Research and Development Ireland Limited Registered in Ireland Registered Office: Collinstown Industrial Park, Leixlip, County Kildare Registered Number: 308263 This e-mail and any attachments may contain confidential material for the sole use of the intended recipient(s). Any review or distribution by others is strictly prohibited. If you are not the intended recipient, please contact the sender and delete all copies. ^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [dpdk-dev] [PATCH v10 0/5] add unit tests for bitrate, latency and pdump libraries 2018-08-03 14:16 ` Parthasarathy, JananeeX M @ 2018-08-03 15:01 ` Thomas Monjalon 0 siblings, 0 replies; 32+ messages in thread From: Thomas Monjalon @ 2018-08-03 15:01 UTC (permalink / raw) To: Parthasarathy, JananeeX M, Pattan, Reshma Cc: dev, Somarowthu, Naga SureshX, Burakov, Anatoly 03/08/2018 16:16, Parthasarathy, JananeeX M: > Hi Thomas, > > From: Pattan, Reshma > > > >Hi Thomas, > > > > From: Thomas Monjalon [mailto:thomas@monjalon.net] > >> 01/08/2018 00:18, Reshma Pattan: > >> > 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 > >> > --- > >> > >> Sorry, the integration of this patchset is very painful. > >> > >> After asking for rebase, for clang fix, there are still some basic > >> errors with 32- bit compilation: > >> > >> test_latencystats.c:131:21: error: > >> format ‘%ld’ expects argument of type ‘long int’, > >> but argument 2 has type ‘uint64_t’ {aka ‘long long unsigned int’} > >> > >> linkage: > >> > >> test@test@@dpdk-test@exe/test.c.o:(.data+0x18): undefined > >reference > >> to `test_pdump' > >> > >> or even MAINTAINERS file: > >> > >> test/test/sample_packet_forward.c > >> test/test/sample_packet_forward.h > >> test/test/test_bitratestats.c > >> test/test/test_latencystats.c > >> > >> I have already spent too much time on it, despite it is not fixing 18.08. > >> > >> Please do a complete detailed review of this series, so it can be > >> considered for 18.11. > >> > > > >We missed to do these basic checks, apologies for consuming your time. > > Naga Suresh has now proactively worked on fixing these issues and running > >pre checks on patches and addressed in v12. > >The earlier versions were reviewed by me, Remy and Anatoly . So we request > >you to consider latest patches for 18.08, until unless they don’t give any last > >minute surprises. > > > >Thanks, > >Reshma > > > > > > > Apologies very much to miss the earlier patch pre-checks. > We have gone through the cheatsheet and validated pre-checks in the patch v12. > Compiled Successfully in Fedora 27, Fedora 26, CentOS 7.2, CentOS 7.4, Ubuntu for both 32bit/64bit and FreeBSD (64bit) > Build using compilers gcc, icc, clang were successful in Fedora. > Shared Library builds were successful in Fedora 27, CentOS 7.2 and Ubuntu > > Executed checkpatch, check-git-log without any errors. > Code changes were acknowledged by reviewers. > > Request to please consider the patch set v12 to be included in RC3 18.08. > > In case of any info/change please let us know. Why are you insisting so much? I have already replied to Reshma that it is too late and not urgent: http://mails.dpdk.org/archives/dev/2018-August/109352.html Please do not make it even more difficult. I just do not want to spend more time on this series now. When I will take time, I will do a better review, and I can promise that I will have some comments. So please consider my earlier comment to avoid burning too much time: "Please do a complete detailed review of this series" After a quick look, I already see some suspicious includes, linkage, and last 2 patches should be integrated with others. To make it clear, the quality was not good and I already burnt too much time. I won't spend more time on it during August. ^ permalink raw reply [flat|nested] 32+ messages in thread
* [dpdk-dev] [PATCH v11 0/6] add unit tests for bitrate, latency and pdump libraries 2018-07-31 22:18 [dpdk-dev] [PATCH v10 0/5] add unit tests for bitrate, latency and pdump libraries Reshma Pattan ` (6 preceding siblings ...) 2018-08-01 7:52 ` Thomas Monjalon @ 2018-08-03 12:05 ` Naga Suresh Somarowthu 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 1/6] test: add helper functions for tests using ring-PMD Rx/Tx Naga Suresh Somarowthu ` (7 more replies) 7 siblings, 8 replies; 32+ messages in thread From: Naga Suresh Somarowthu @ 2018-08-03 12:05 UTC (permalink / raw) To: dev; +Cc: remy.horton, reshma.pattan, Naga Suresh Somarowthu 1/6: add helper functions for tests using ring-PMD Rx/Tx 2/6: unit test cases added for bitrate library 3/6: unit test cases added for latencystats library 4/6: unit test cases added for pdump library 5/6: added new unit tests to autotest list 6/6: updated maintainers for bitrate latency pdump tests Patches 2/6, 3/6 and 4/6 depends on 1/6 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> Reviewed-by: Anatoly Burakov <anatoly.burakov@intel.com> Acked-by: Reshma Pattan <reshma.pattan@intel.com> --- 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 (6): 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 autotest: add new unit tests to autotest list maintainers: add bitrate latency pdump tests MAINTAINERS | 10 +- test/test/Makefile | 9 ++ test/test/autotest_data.py | 18 +++ test/test/process.h | 12 ++ test/test/sample_packet_forward.c | 115 +++++++++++++++++++ test/test/sample_packet_forward.h | 40 +++++++ test/test/test.c | 2 + test/test/test_bitratestats.c | 229 +++++++++++++++++++++++++++++++++++++ test/test/test_latencystats.c | 226 +++++++++++++++++++++++++++++++++++++ test/test/test_pdump.c | 232 ++++++++++++++++++++++++++++++++++++++ test/test/test_pdump.h | 31 +++++ 11 files changed, 923 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] 32+ messages in thread
* [dpdk-dev] [PATCH v11 1/6] test: add helper functions for tests using ring-PMD Rx/Tx 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 0/6] " Naga Suresh Somarowthu @ 2018-08-03 12:05 ` Naga Suresh Somarowthu 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 2/6] test: add unit tests for bitrate library Naga Suresh Somarowthu ` (6 subsequent siblings) 7 siblings, 0 replies; 32+ messages in thread From: Naga Suresh Somarowthu @ 2018-08-03 12:05 UTC (permalink / raw) To: dev; +Cc: remy.horton, reshma.pattan, 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> --- test/test/Makefile | 1 + test/test/sample_packet_forward.c | 115 ++++++++++++++++++++++++++++++++++++++ test/test/sample_packet_forward.h | 40 +++++++++++++ 3 files changed, 156 insertions(+) create mode 100644 test/test/sample_packet_forward.c create mode 100644 test/test/sample_packet_forward.h diff --git a/test/test/Makefile b/test/test/Makefile index e6967bab6..9f7d398e4 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/sample_packet_forward.c b/test/test/sample_packet_forward.c new file mode 100644 index 000000000..3822577b9 --- /dev/null +++ b/test/test/sample_packet_forward.c @@ -0,0 +1,115 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2018 Intel Corporation + */ + +#include <string.h> +#include <errno.h> +#include <time.h> + +#include <rte_memcpy.h> +#include <rte_common.h> +#include <rte_eth_ring.h> +#include <rte_ethdev.h> +#include <rte_mbuf.h> +#include <rte_bus_vdev.h> + +#include "sample_packet_forward.h" +#include "test.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..433bd3ba2 --- /dev/null +++ b/test/test/sample_packet_forward.h @@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2018 Intel Corporation + */ + +#ifndef _SAMPLE_PACKET_FORWARD_H_ +#define _SAMPLE_PACKET_FORWARD_H_ + +/* MACROS to support virtual ring creation */ +#define RING_SIZE 256 +#define NUM_QUEUES 1 +#define NB_MBUF 512 + +#define NUM_PACKETS 10 + +/* 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 [flat|nested] 32+ messages in thread
* [dpdk-dev] [PATCH v11 2/6] test: add unit tests for bitrate library 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 0/6] " Naga Suresh Somarowthu 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 1/6] test: add helper functions for tests using ring-PMD Rx/Tx Naga Suresh Somarowthu @ 2018-08-03 12:05 ` Naga Suresh Somarowthu 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 3/6] test: add unit tests for latencystats library Naga Suresh Somarowthu ` (5 subsequent siblings) 7 siblings, 0 replies; 32+ messages in thread From: Naga Suresh Somarowthu @ 2018-08-03 12:05 UTC (permalink / raw) To: dev; +Cc: remy.horton, reshma.pattan, 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> --- test/test/Makefile | 1 + test/test/test_bitratestats.c | 229 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 230 insertions(+) create mode 100644 test/test/test_bitratestats.c diff --git a/test/test/Makefile b/test/test/Makefile index 9f7d398e4..c619877f0 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/test_bitratestats.c b/test/test/test_bitratestats.c new file mode 100644 index 000000000..38f7da4b5 --- /dev/null +++ b/test/test/test_bitratestats.c @@ -0,0 +1,229 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2018 Intel Corporation + */ + +#include <string.h> +#include <errno.h> +#include <time.h> + +#include <rte_log.h> +#include <rte_lcore.h> +#include <rte_mbuf.h> +#include <rte_memzone.h> +#include <rte_malloc.h> +#include <rte_common.h> +#include <rte_metrics.h> +#include <rte_bitrate.h> + +#include "test.h" +#include "sample_packet_forward.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 [flat|nested] 32+ messages in thread
* [dpdk-dev] [PATCH v11 3/6] test: add unit tests for latencystats library 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 0/6] " Naga Suresh Somarowthu 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 1/6] test: add helper functions for tests using ring-PMD Rx/Tx Naga Suresh Somarowthu 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 2/6] test: add unit tests for bitrate library Naga Suresh Somarowthu @ 2018-08-03 12:05 ` Naga Suresh Somarowthu 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 4/6] test: add unit test for pdump library Naga Suresh Somarowthu ` (4 subsequent siblings) 7 siblings, 0 replies; 32+ messages in thread From: Naga Suresh Somarowthu @ 2018-08-03 12:05 UTC (permalink / raw) To: dev; +Cc: remy.horton, reshma.pattan, 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> --- test/test/Makefile | 1 + test/test/test_latencystats.c | 226 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 227 insertions(+) create mode 100644 test/test/test_latencystats.c diff --git a/test/test/Makefile b/test/test/Makefile index c619877f0..bba3be1be 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/test_latencystats.c b/test/test/test_latencystats.c new file mode 100644 index 000000000..82433033e --- /dev/null +++ b/test/test/test_latencystats.c @@ -0,0 +1,226 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2018 Intel Corporation + */ + +#include <stdio.h> +#include <string.h> +#include <errno.h> +#include <time.h> + +#include <rte_common.h> +#include <rte_metrics.h> +#include <rte_latencystats.h> +#include <rte_eth_ring.h> +#include <rte_ethdev.h> +#include <rte_mbuf.h> +#include "test.h" +#include "sample_packet_forward.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 [flat|nested] 32+ messages in thread
* [dpdk-dev] [PATCH v11 4/6] test: add unit test for pdump library 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 0/6] " Naga Suresh Somarowthu ` (2 preceding siblings ...) 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 3/6] test: add unit tests for latencystats library Naga Suresh Somarowthu @ 2018-08-03 12:05 ` Naga Suresh Somarowthu 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 5/6] autotest: add new unit tests to autotest list Naga Suresh Somarowthu ` (3 subsequent siblings) 7 siblings, 0 replies; 32+ messages in thread From: Naga Suresh Somarowthu @ 2018-08-03 12:05 UTC (permalink / raw) To: dev; +Cc: remy.horton, reshma.pattan, 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> --- test/test/Makefile | 6 ++ test/test/process.h | 12 +++ test/test/test.c | 2 + test/test/test_pdump.c | 232 +++++++++++++++++++++++++++++++++++++++++++++++++ test/test/test_pdump.h | 31 +++++++ 5 files changed, 283 insertions(+) create mode 100644 test/test/test_pdump.c create mode 100644 test/test/test_pdump.h diff --git a/test/test/Makefile b/test/test/Makefile index bba3be1be..3e7baef76 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 @@ -214,6 +215,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/process.h b/test/test/process.h index ba3a18502..c015c9030 100644 --- a/test/test/process.h +++ b/test/test/process.h @@ -18,6 +18,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 +35,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 +66,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..cfdda4d39 --- /dev/null +++ b/test/test/test_pdump.c @@ -0,0 +1,232 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2018 Intel Corporation + */ + +#include <time.h> +#include <stdio.h> +#include <stdint.h> +#include <stdlib.h> +#include <stdarg.h> +#include <inttypes.h> +#include <sys/queue.h> +#include <string.h> +#include <unistd.h> +#include <sys/wait.h> + +#include <rte_common.h> +#include <rte_mbuf.h> +#include <rte_pdump.h> +#include <rte_eth_ctrl.h> +#include <rte_memory.h> +#include <rte_memzone.h> +#include <rte_eal.h> +#include <rte_ring.h> +#include <rte_mempool.h> +#include <rte_eth_ring.h> +#include <rte_ethdev_driver.h> +#include <libgen.h> + +#include "test.h" +#include "sample_packet_forward.h" +#include "test_pdump.h" +#include "process.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 [flat|nested] 32+ messages in thread
* [dpdk-dev] [PATCH v11 5/6] autotest: add new unit tests to autotest list 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 0/6] " Naga Suresh Somarowthu ` (3 preceding siblings ...) 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 4/6] test: add unit test for pdump library Naga Suresh Somarowthu @ 2018-08-03 12:05 ` Naga Suresh Somarowthu 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 6/6] maintainers: add bitrate latency pdump tests Naga Suresh Somarowthu ` (2 subsequent siblings) 7 siblings, 0 replies; 32+ messages in thread From: Naga Suresh Somarowthu @ 2018-08-03 12:05 UTC (permalink / raw) To: dev; +Cc: remy.horton, reshma.pattan, Naga Suresh Somarowthu added bitrate, latency and pdump lib unit tests to autotest list. Signed-off-by: Naga Suresh Somarowthu <naga.sureshx.somarowthu@intel.com> Reviewed-by: Reshma Pattan <reshma.pattan@intel.com> --- test/test/autotest_data.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/test/test/autotest_data.py b/test/test/autotest_data.py index f68d9b111..9a54d0c04 100644 --- a/test/test/autotest_data.py +++ b/test/test/autotest_data.py @@ -482,6 +482,24 @@ "Func": default_autotest, "Report": None, }, + { + "Name": "Bitratestats autotest", + "Command": "bitratestats_autotest", + "Func": default_autotest, + "Report": None, + }, + { + "Name": "Latencystats autotest", + "Command": "latencystats_autotest", + "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! # -- 2.13.6 ^ permalink raw reply [flat|nested] 32+ messages in thread
* [dpdk-dev] [PATCH v11 6/6] maintainers: add bitrate latency pdump tests 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 0/6] " Naga Suresh Somarowthu ` (4 preceding siblings ...) 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 5/6] autotest: add new unit tests to autotest list Naga Suresh Somarowthu @ 2018-08-03 12:05 ` Naga Suresh Somarowthu 2018-08-03 12:34 ` [dpdk-dev] [PATCH v12 0/6] add unit tests for bitrate, latency and pdump libraries Naga Suresh Somarowthu 2018-08-07 8:46 ` [dpdk-dev] [PATCH v11 0/6] add unit tests for bitrate, latency and pdump libraries Burakov, Anatoly 7 siblings, 0 replies; 32+ messages in thread From: Naga Suresh Somarowthu @ 2018-08-03 12:05 UTC (permalink / raw) To: dev; +Cc: remy.horton, reshma.pattan, Naga Suresh Somarowthu Update MAINTAINERSHIP for bitrate, latency, pdump unit tests and sample packet helper functions for unit test. Signed-off-by: Naga Suresh Somarowthu <naga.sureshx.somarowthu@intel.com> Reviewed-by: Reshma Pattan <reshma.pattan@intel.com> --- MAINTAINERS | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/MAINTAINERS b/MAINTAINERS index 3b9fec76f..7b9277404 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1018,7 +1018,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 ---------------- @@ -1144,10 +1145,12 @@ 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> F: lib/librte_latencystats/ +F: test/test/test_latencystats.c BPF - EXPERIMENTAL M: Konstantin Ananyev <konstantin.ananyev@intel.com> @@ -1176,6 +1179,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> -- 2.13.6 ^ permalink raw reply [flat|nested] 32+ messages in thread
* [dpdk-dev] [PATCH v12 0/6] add unit tests for bitrate, latency and pdump libraries 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 0/6] " Naga Suresh Somarowthu ` (5 preceding siblings ...) 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 6/6] maintainers: add bitrate latency pdump tests Naga Suresh Somarowthu @ 2018-08-03 12:34 ` Naga Suresh Somarowthu 2018-08-03 12:34 ` [dpdk-dev] [PATCH v12 1/6] test: add helper functions for tests using ring-PMD Rx/Tx Naga Suresh Somarowthu ` (6 more replies) 2018-08-07 8:46 ` [dpdk-dev] [PATCH v11 0/6] add unit tests for bitrate, latency and pdump libraries Burakov, Anatoly 7 siblings, 7 replies; 32+ messages in thread From: Naga Suresh Somarowthu @ 2018-08-03 12:34 UTC (permalink / raw) To: dev; +Cc: remy.horton, reshma.pattan, Naga Suresh Somarowthu 1/6: add helper functions for tests using ring-PMD Rx/Tx 2/6: unit test cases added for bitrate library 3/6: unit test cases added for latencystats library 4/6: unit test cases added for pdump library 5/6: added new unit tests to autotest list 6/6: updated maintainers for bitrate latency pdump tests Patches 2/6, 3/6 and 4/6 depends on 1/6 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> Reviewed-by: Anatoly Burakov <anatoly.burakov@intel.com> Acked-by: Reshma Pattan <reshma.pattan@intel.com> --- 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 (6): 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 autotest: add new unit tests to autotest list maintainers: add bitrate latency pdump tests MAINTAINERS | 10 +- test/test/Makefile | 9 ++ test/test/autotest_data.py | 18 +++ test/test/process.h | 12 ++ test/test/sample_packet_forward.c | 115 +++++++++++++++++++ test/test/sample_packet_forward.h | 40 +++++++ test/test/test.c | 2 + test/test/test_bitratestats.c | 229 +++++++++++++++++++++++++++++++++++++ test/test/test_latencystats.c | 226 +++++++++++++++++++++++++++++++++++++ test/test/test_pdump.c | 232 ++++++++++++++++++++++++++++++++++++++ test/test/test_pdump.h | 31 +++++ 11 files changed, 923 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] 32+ messages in thread
* [dpdk-dev] [PATCH v12 1/6] test: add helper functions for tests using ring-PMD Rx/Tx 2018-08-03 12:34 ` [dpdk-dev] [PATCH v12 0/6] add unit tests for bitrate, latency and pdump libraries Naga Suresh Somarowthu @ 2018-08-03 12:34 ` Naga Suresh Somarowthu 2018-08-03 12:34 ` [dpdk-dev] [PATCH v12 2/6] test: add unit tests for bitrate library Naga Suresh Somarowthu ` (5 subsequent siblings) 6 siblings, 0 replies; 32+ messages in thread From: Naga Suresh Somarowthu @ 2018-08-03 12:34 UTC (permalink / raw) To: dev; +Cc: remy.horton, reshma.pattan, 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> --- test/test/Makefile | 1 + test/test/sample_packet_forward.c | 115 ++++++++++++++++++++++++++++++++++++++ test/test/sample_packet_forward.h | 40 +++++++++++++ 3 files changed, 156 insertions(+) create mode 100644 test/test/sample_packet_forward.c create mode 100644 test/test/sample_packet_forward.h diff --git a/test/test/Makefile b/test/test/Makefile index e6967bab6..9f7d398e4 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/sample_packet_forward.c b/test/test/sample_packet_forward.c new file mode 100644 index 000000000..3822577b9 --- /dev/null +++ b/test/test/sample_packet_forward.c @@ -0,0 +1,115 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2018 Intel Corporation + */ + +#include <string.h> +#include <errno.h> +#include <time.h> + +#include <rte_memcpy.h> +#include <rte_common.h> +#include <rte_eth_ring.h> +#include <rte_ethdev.h> +#include <rte_mbuf.h> +#include <rte_bus_vdev.h> + +#include "sample_packet_forward.h" +#include "test.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..433bd3ba2 --- /dev/null +++ b/test/test/sample_packet_forward.h @@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2018 Intel Corporation + */ + +#ifndef _SAMPLE_PACKET_FORWARD_H_ +#define _SAMPLE_PACKET_FORWARD_H_ + +/* MACROS to support virtual ring creation */ +#define RING_SIZE 256 +#define NUM_QUEUES 1 +#define NB_MBUF 512 + +#define NUM_PACKETS 10 + +/* 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 [flat|nested] 32+ messages in thread
* [dpdk-dev] [PATCH v12 2/6] test: add unit tests for bitrate library 2018-08-03 12:34 ` [dpdk-dev] [PATCH v12 0/6] add unit tests for bitrate, latency and pdump libraries Naga Suresh Somarowthu 2018-08-03 12:34 ` [dpdk-dev] [PATCH v12 1/6] test: add helper functions for tests using ring-PMD Rx/Tx Naga Suresh Somarowthu @ 2018-08-03 12:34 ` Naga Suresh Somarowthu 2018-08-03 12:34 ` [dpdk-dev] [PATCH v12 3/6] test: add unit tests for latencystats library Naga Suresh Somarowthu ` (4 subsequent siblings) 6 siblings, 0 replies; 32+ messages in thread From: Naga Suresh Somarowthu @ 2018-08-03 12:34 UTC (permalink / raw) To: dev; +Cc: remy.horton, reshma.pattan, 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> --- test/test/Makefile | 1 + test/test/test_bitratestats.c | 229 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 230 insertions(+) create mode 100644 test/test/test_bitratestats.c diff --git a/test/test/Makefile b/test/test/Makefile index 9f7d398e4..c619877f0 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/test_bitratestats.c b/test/test/test_bitratestats.c new file mode 100644 index 000000000..38f7da4b5 --- /dev/null +++ b/test/test/test_bitratestats.c @@ -0,0 +1,229 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2018 Intel Corporation + */ + +#include <string.h> +#include <errno.h> +#include <time.h> + +#include <rte_log.h> +#include <rte_lcore.h> +#include <rte_mbuf.h> +#include <rte_memzone.h> +#include <rte_malloc.h> +#include <rte_common.h> +#include <rte_metrics.h> +#include <rte_bitrate.h> + +#include "test.h" +#include "sample_packet_forward.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 [flat|nested] 32+ messages in thread
* [dpdk-dev] [PATCH v12 3/6] test: add unit tests for latencystats library 2018-08-03 12:34 ` [dpdk-dev] [PATCH v12 0/6] add unit tests for bitrate, latency and pdump libraries Naga Suresh Somarowthu 2018-08-03 12:34 ` [dpdk-dev] [PATCH v12 1/6] test: add helper functions for tests using ring-PMD Rx/Tx Naga Suresh Somarowthu 2018-08-03 12:34 ` [dpdk-dev] [PATCH v12 2/6] test: add unit tests for bitrate library Naga Suresh Somarowthu @ 2018-08-03 12:34 ` Naga Suresh Somarowthu 2018-08-03 12:34 ` [dpdk-dev] [PATCH v12 4/6] test: add unit test for pdump library Naga Suresh Somarowthu ` (3 subsequent siblings) 6 siblings, 0 replies; 32+ messages in thread From: Naga Suresh Somarowthu @ 2018-08-03 12:34 UTC (permalink / raw) To: dev; +Cc: remy.horton, reshma.pattan, 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> --- test/test/Makefile | 1 + test/test/test_latencystats.c | 226 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 227 insertions(+) create mode 100644 test/test/test_latencystats.c diff --git a/test/test/Makefile b/test/test/Makefile index c619877f0..bba3be1be 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/test_latencystats.c b/test/test/test_latencystats.c new file mode 100644 index 000000000..82433033e --- /dev/null +++ b/test/test/test_latencystats.c @@ -0,0 +1,226 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2018 Intel Corporation + */ + +#include <stdio.h> +#include <string.h> +#include <errno.h> +#include <time.h> + +#include <rte_common.h> +#include <rte_metrics.h> +#include <rte_latencystats.h> +#include <rte_eth_ring.h> +#include <rte_ethdev.h> +#include <rte_mbuf.h> +#include "test.h" +#include "sample_packet_forward.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 [flat|nested] 32+ messages in thread
* [dpdk-dev] [PATCH v12 4/6] test: add unit test for pdump library 2018-08-03 12:34 ` [dpdk-dev] [PATCH v12 0/6] add unit tests for bitrate, latency and pdump libraries Naga Suresh Somarowthu ` (2 preceding siblings ...) 2018-08-03 12:34 ` [dpdk-dev] [PATCH v12 3/6] test: add unit tests for latencystats library Naga Suresh Somarowthu @ 2018-08-03 12:34 ` Naga Suresh Somarowthu 2018-08-03 12:34 ` [dpdk-dev] [PATCH v12 5/6] autotest: add new unit tests to autotest list Naga Suresh Somarowthu ` (2 subsequent siblings) 6 siblings, 0 replies; 32+ messages in thread From: Naga Suresh Somarowthu @ 2018-08-03 12:34 UTC (permalink / raw) To: dev; +Cc: remy.horton, reshma.pattan, 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> --- test/test/Makefile | 6 ++ test/test/process.h | 12 +++ test/test/test.c | 2 + test/test/test_pdump.c | 232 +++++++++++++++++++++++++++++++++++++++++++++++++ test/test/test_pdump.h | 31 +++++++ 5 files changed, 283 insertions(+) create mode 100644 test/test/test_pdump.c create mode 100644 test/test/test_pdump.h diff --git a/test/test/Makefile b/test/test/Makefile index bba3be1be..3e7baef76 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 @@ -214,6 +215,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/process.h b/test/test/process.h index ba3a18502..c015c9030 100644 --- a/test/test/process.h +++ b/test/test/process.h @@ -18,6 +18,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 +35,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 +66,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..cfdda4d39 --- /dev/null +++ b/test/test/test_pdump.c @@ -0,0 +1,232 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2018 Intel Corporation + */ + +#include <time.h> +#include <stdio.h> +#include <stdint.h> +#include <stdlib.h> +#include <stdarg.h> +#include <inttypes.h> +#include <sys/queue.h> +#include <string.h> +#include <unistd.h> +#include <sys/wait.h> + +#include <rte_common.h> +#include <rte_mbuf.h> +#include <rte_pdump.h> +#include <rte_eth_ctrl.h> +#include <rte_memory.h> +#include <rte_memzone.h> +#include <rte_eal.h> +#include <rte_ring.h> +#include <rte_mempool.h> +#include <rte_eth_ring.h> +#include <rte_ethdev_driver.h> +#include <libgen.h> + +#include "test.h" +#include "sample_packet_forward.h" +#include "test_pdump.h" +#include "process.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 [flat|nested] 32+ messages in thread
* [dpdk-dev] [PATCH v12 5/6] autotest: add new unit tests to autotest list 2018-08-03 12:34 ` [dpdk-dev] [PATCH v12 0/6] add unit tests for bitrate, latency and pdump libraries Naga Suresh Somarowthu ` (3 preceding siblings ...) 2018-08-03 12:34 ` [dpdk-dev] [PATCH v12 4/6] test: add unit test for pdump library Naga Suresh Somarowthu @ 2018-08-03 12:34 ` Naga Suresh Somarowthu 2018-08-03 12:34 ` [dpdk-dev] [PATCH v12 6/6] maintainers: add bitrate latency pdump tests Naga Suresh Somarowthu 2018-08-24 12:51 ` [dpdk-dev] [PATCH v13 0/4] add unit tests for bitrate, latency and pdump libraries Naga Suresh Somarowthu 6 siblings, 0 replies; 32+ messages in thread From: Naga Suresh Somarowthu @ 2018-08-03 12:34 UTC (permalink / raw) To: dev; +Cc: remy.horton, reshma.pattan, Naga Suresh Somarowthu added bitrate, latency and pdump lib unit tests to autotest list. Signed-off-by: Naga Suresh Somarowthu <naga.sureshx.somarowthu@intel.com> Reviewed-by: Reshma Pattan <reshma.pattan@intel.com> --- test/test/autotest_data.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/test/test/autotest_data.py b/test/test/autotest_data.py index f68d9b111..9a54d0c04 100644 --- a/test/test/autotest_data.py +++ b/test/test/autotest_data.py @@ -482,6 +482,24 @@ "Func": default_autotest, "Report": None, }, + { + "Name": "Bitratestats autotest", + "Command": "bitratestats_autotest", + "Func": default_autotest, + "Report": None, + }, + { + "Name": "Latencystats autotest", + "Command": "latencystats_autotest", + "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! # -- 2.13.6 ^ permalink raw reply [flat|nested] 32+ messages in thread
* [dpdk-dev] [PATCH v12 6/6] maintainers: add bitrate latency pdump tests 2018-08-03 12:34 ` [dpdk-dev] [PATCH v12 0/6] add unit tests for bitrate, latency and pdump libraries Naga Suresh Somarowthu ` (4 preceding siblings ...) 2018-08-03 12:34 ` [dpdk-dev] [PATCH v12 5/6] autotest: add new unit tests to autotest list Naga Suresh Somarowthu @ 2018-08-03 12:34 ` Naga Suresh Somarowthu 2018-08-24 12:51 ` [dpdk-dev] [PATCH v13 0/4] add unit tests for bitrate, latency and pdump libraries Naga Suresh Somarowthu 6 siblings, 0 replies; 32+ messages in thread From: Naga Suresh Somarowthu @ 2018-08-03 12:34 UTC (permalink / raw) To: dev; +Cc: remy.horton, reshma.pattan, Naga Suresh Somarowthu Update MAINTAINERSHIP for bitrate, latency, pdump unit tests and sample packet helper functions for unit test. Signed-off-by: Naga Suresh Somarowthu <naga.sureshx.somarowthu@intel.com> Reviewed-by: Reshma Pattan <reshma.pattan@intel.com> --- MAINTAINERS | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/MAINTAINERS b/MAINTAINERS index 3b9fec76f..7b9277404 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1018,7 +1018,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 ---------------- @@ -1144,10 +1145,12 @@ 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> F: lib/librte_latencystats/ +F: test/test/test_latencystats.c BPF - EXPERIMENTAL M: Konstantin Ananyev <konstantin.ananyev@intel.com> @@ -1176,6 +1179,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> -- 2.13.6 ^ permalink raw reply [flat|nested] 32+ messages in thread
* [dpdk-dev] [PATCH v13 0/4] add unit tests for bitrate, latency and pdump libraries 2018-08-03 12:34 ` [dpdk-dev] [PATCH v12 0/6] add unit tests for bitrate, latency and pdump libraries Naga Suresh Somarowthu ` (5 preceding siblings ...) 2018-08-03 12:34 ` [dpdk-dev] [PATCH v12 6/6] maintainers: add bitrate latency pdump tests Naga Suresh Somarowthu @ 2018-08-24 12:51 ` Naga Suresh Somarowthu 2018-08-24 12:51 ` [dpdk-dev] [PATCH v13 1/4] test: add helper functions for tests using ring-PMD Rx/Tx Naga Suresh Somarowthu ` (3 more replies) 6 siblings, 4 replies; 32+ messages in thread From: Naga Suresh Somarowthu @ 2018-08-24 12:51 UTC (permalink / raw) To: dev; +Cc: reshma.pattan, Naga Suresh Somarowthu From: Naga Suresh Somarowthu <naga.sureshx.somarowthu@intel.com> 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> --- 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 (6): 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] 32+ messages in thread
* [dpdk-dev] [PATCH v13 1/4] test: add helper functions for tests using ring-PMD Rx/Tx 2018-08-24 12:51 ` [dpdk-dev] [PATCH v13 0/4] add unit tests for bitrate, latency and pdump libraries Naga Suresh Somarowthu @ 2018-08-24 12:51 ` Naga Suresh Somarowthu 2018-08-24 12:51 ` [dpdk-dev] [PATCH v13 2/4] test: add unit tests for bitrate library Naga Suresh Somarowthu ` (2 subsequent siblings) 3 siblings, 0 replies; 32+ messages in thread From: Naga Suresh Somarowthu @ 2018-08-24 12:51 UTC (permalink / raw) To: dev; +Cc: reshma.pattan, 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 9fd258fad..e2e0a27da 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1176,6 +1176,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 e6967bab6..9f7d398e4 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 b1dd6eca2..2a7e7d074 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 [flat|nested] 32+ messages in thread
* [dpdk-dev] [PATCH v13 2/4] test: add unit tests for bitrate library 2018-08-24 12:51 ` [dpdk-dev] [PATCH v13 0/4] add unit tests for bitrate, latency and pdump libraries Naga Suresh Somarowthu 2018-08-24 12:51 ` [dpdk-dev] [PATCH v13 1/4] test: add helper functions for tests using ring-PMD Rx/Tx Naga Suresh Somarowthu @ 2018-08-24 12:51 ` Naga Suresh Somarowthu 2018-08-24 12:51 ` [dpdk-dev] [PATCH v13 3/4] test: add unit tests for latencystats library Naga Suresh Somarowthu 2018-08-24 12:51 ` [dpdk-dev] [PATCH v13 4/4] test: add unit test for pdump library Naga Suresh Somarowthu 3 siblings, 0 replies; 32+ messages in thread From: Naga Suresh Somarowthu @ 2018-08-24 12:51 UTC (permalink / raw) To: dev; +Cc: reshma.pattan, 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 e2e0a27da..4e55c97e1 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1144,6 +1144,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 9f7d398e4..c619877f0 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 2a7e7d074..f9fab3109 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', @@ -100,6 +101,7 @@ test_sources = files('commands.c', ) test_deps = ['acl', + 'bitratestats', 'bpf', 'cfgfile', 'cmdline', @@ -112,6 +114,7 @@ test_deps = ['acl', 'hash', 'lpm', 'member', + 'metrics', 'pipeline', 'port', 'reorder', @@ -124,6 +127,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 [flat|nested] 32+ messages in thread
* [dpdk-dev] [PATCH v13 3/4] test: add unit tests for latencystats library 2018-08-24 12:51 ` [dpdk-dev] [PATCH v13 0/4] add unit tests for bitrate, latency and pdump libraries Naga Suresh Somarowthu 2018-08-24 12:51 ` [dpdk-dev] [PATCH v13 1/4] test: add helper functions for tests using ring-PMD Rx/Tx Naga Suresh Somarowthu 2018-08-24 12:51 ` [dpdk-dev] [PATCH v13 2/4] test: add unit tests for bitrate library Naga Suresh Somarowthu @ 2018-08-24 12:51 ` Naga Suresh Somarowthu 2018-08-24 12:51 ` [dpdk-dev] [PATCH v13 4/4] test: add unit test for pdump library Naga Suresh Somarowthu 3 siblings, 0 replies; 32+ messages in thread From: Naga Suresh Somarowthu @ 2018-08-24 12:51 UTC (permalink / raw) To: dev; +Cc: reshma.pattan, 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 4e55c97e1..886646fd1 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1149,6 +1149,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 c619877f0..bba3be1be 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 f9fab3109..d3385a3e2 100644 --- a/test/test/meson.build +++ b/test/test/meson.build @@ -47,6 +47,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', @@ -112,6 +113,7 @@ test_deps = ['acl', 'eventdev', 'flow_classify', 'hash', + 'latencystats', 'lpm', 'member', 'metrics', @@ -170,6 +172,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 [flat|nested] 32+ messages in thread
* [dpdk-dev] [PATCH v13 4/4] test: add unit test for pdump library 2018-08-24 12:51 ` [dpdk-dev] [PATCH v13 0/4] add unit tests for bitrate, latency and pdump libraries Naga Suresh Somarowthu ` (2 preceding siblings ...) 2018-08-24 12:51 ` [dpdk-dev] [PATCH v13 3/4] test: add unit tests for latencystats library Naga Suresh Somarowthu @ 2018-08-24 12:51 ` Naga Suresh Somarowthu 3 siblings, 0 replies; 32+ messages in thread From: Naga Suresh Somarowthu @ 2018-08-24 12:51 UTC (permalink / raw) To: dev; +Cc: reshma.pattan, 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 886646fd1..7999f2d24 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1018,7 +1018,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 bba3be1be..3e7baef76 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 @@ -214,6 +215,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 d3385a3e2..1f9707da7 100644 --- a/test/test/meson.build +++ b/test/test/meson.build @@ -67,6 +67,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', @@ -192,6 +193,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 [flat|nested] 32+ messages in thread
* Re: [dpdk-dev] [PATCH v11 0/6] add unit tests for bitrate, latency and pdump libraries 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 0/6] " Naga Suresh Somarowthu ` (6 preceding siblings ...) 2018-08-03 12:34 ` [dpdk-dev] [PATCH v12 0/6] add unit tests for bitrate, latency and pdump libraries Naga Suresh Somarowthu @ 2018-08-07 8:46 ` Burakov, Anatoly 7 siblings, 0 replies; 32+ messages in thread From: Burakov, Anatoly @ 2018-08-07 8:46 UTC (permalink / raw) To: Naga Suresh Somarowthu, dev; +Cc: remy.horton, reshma.pattan On 03-Aug-18 1:05 PM, Naga Suresh Somarowthu wrote: > 1/6: add helper functions for tests using ring-PMD Rx/Tx > 2/6: unit test cases added for bitrate library > 3/6: unit test cases added for latencystats library > 4/6: unit test cases added for pdump library > 5/6: added new unit tests to autotest list > 6/6: updated maintainers for bitrate latency pdump tests > > Patches 2/6, 3/6 and 4/6 depends on 1/6 > > 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> > Reviewed-by: Anatoly Burakov <anatoly.burakov@intel.com> > Acked-by: Reshma Pattan <reshma.pattan@intel.com> The cover letter "reviewed-by" tags should only be used if someone replied with a series-ack. I did no such thing (did Remy?), i only really reviewed first patch out of the series. Please remove that line from the cover letter. -- Thanks, Anatoly ^ permalink raw reply [flat|nested] 32+ messages in thread
end of thread, other threads:[~2018-08-24 12:52 UTC | newest] Thread overview: 32+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-07-31 22:18 [dpdk-dev] [PATCH v10 0/5] add unit tests for bitrate, latency and pdump libraries Reshma Pattan 2018-07-31 22:18 ` [dpdk-dev] [PATCH v10 1/5] test: add helper functions for tests using ring-PMD Rx/Tx Reshma Pattan 2018-07-31 22:18 ` [dpdk-dev] [PATCH v10 2/5] test: add unit tests for bitrate library Reshma Pattan 2018-07-31 22:18 ` [dpdk-dev] [PATCH v10 3/5] test: add unit tests for latencystats library Reshma Pattan 2018-07-31 22:18 ` [dpdk-dev] [PATCH v10 4/5] test: add unit test for pdump library Reshma Pattan 2018-07-31 22:18 ` [dpdk-dev] [PATCH v10 5/5] autotest: add new unit tests to autotest list Reshma Pattan 2018-07-31 22:30 ` [dpdk-dev] [PATCH v10 0/5] add unit tests for bitrate, latency and pdump libraries Thomas Monjalon 2018-08-01 7:52 ` Thomas Monjalon 2018-08-03 13:45 ` Pattan, Reshma 2018-08-03 14:11 ` Thomas Monjalon 2018-08-03 14:16 ` Parthasarathy, JananeeX M 2018-08-03 15:01 ` Thomas Monjalon 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 0/6] " Naga Suresh Somarowthu 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 1/6] test: add helper functions for tests using ring-PMD Rx/Tx Naga Suresh Somarowthu 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 2/6] test: add unit tests for bitrate library Naga Suresh Somarowthu 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 3/6] test: add unit tests for latencystats library Naga Suresh Somarowthu 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 4/6] test: add unit test for pdump library Naga Suresh Somarowthu 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 5/6] autotest: add new unit tests to autotest list Naga Suresh Somarowthu 2018-08-03 12:05 ` [dpdk-dev] [PATCH v11 6/6] maintainers: add bitrate latency pdump tests Naga Suresh Somarowthu 2018-08-03 12:34 ` [dpdk-dev] [PATCH v12 0/6] add unit tests for bitrate, latency and pdump libraries Naga Suresh Somarowthu 2018-08-03 12:34 ` [dpdk-dev] [PATCH v12 1/6] test: add helper functions for tests using ring-PMD Rx/Tx Naga Suresh Somarowthu 2018-08-03 12:34 ` [dpdk-dev] [PATCH v12 2/6] test: add unit tests for bitrate library Naga Suresh Somarowthu 2018-08-03 12:34 ` [dpdk-dev] [PATCH v12 3/6] test: add unit tests for latencystats library Naga Suresh Somarowthu 2018-08-03 12:34 ` [dpdk-dev] [PATCH v12 4/6] test: add unit test for pdump library Naga Suresh Somarowthu 2018-08-03 12:34 ` [dpdk-dev] [PATCH v12 5/6] autotest: add new unit tests to autotest list Naga Suresh Somarowthu 2018-08-03 12:34 ` [dpdk-dev] [PATCH v12 6/6] maintainers: add bitrate latency pdump tests Naga Suresh Somarowthu 2018-08-24 12:51 ` [dpdk-dev] [PATCH v13 0/4] add unit tests for bitrate, latency and pdump libraries Naga Suresh Somarowthu 2018-08-24 12:51 ` [dpdk-dev] [PATCH v13 1/4] test: add helper functions for tests using ring-PMD Rx/Tx Naga Suresh Somarowthu 2018-08-24 12:51 ` [dpdk-dev] [PATCH v13 2/4] test: add unit tests for bitrate library Naga Suresh Somarowthu 2018-08-24 12:51 ` [dpdk-dev] [PATCH v13 3/4] test: add unit tests for latencystats library Naga Suresh Somarowthu 2018-08-24 12:51 ` [dpdk-dev] [PATCH v13 4/4] test: add unit test for pdump library Naga Suresh Somarowthu 2018-08-07 8:46 ` [dpdk-dev] [PATCH v11 0/6] add unit tests for bitrate, latency and pdump libraries Burakov, Anatoly
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).