From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id 3AC715F2B for ; Thu, 20 Sep 2018 16:07:50 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 20 Sep 2018 07:07:48 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,398,1531810800"; d="scan'208";a="72380347" Received: from irsmsx110.ger.corp.intel.com ([163.33.3.25]) by fmsmga008.fm.intel.com with ESMTP; 20 Sep 2018 07:07:44 -0700 Received: from irsmsx103.ger.corp.intel.com ([169.254.3.234]) by irsmsx110.ger.corp.intel.com ([169.254.15.28]) with mapi id 14.03.0319.002; Thu, 20 Sep 2018 15:07:43 +0100 From: "Parthasarathy, JananeeX M" To: "Parthasarathy, JananeeX M" , "dev@dpdk.org" CC: "Pattan, Reshma" , "Chaitanya Babu, TalluriX" , "Richardson, Bruce" Thread-Topic: [dpdk-dev] [PATCH] test: restructure and cleanup ring PMD test Thread-Index: AQHUUOU+CNTDEzG4SkqlgkVSvCZ2V6T5NBuw Date: Thu, 20 Sep 2018 14:07:42 +0000 Message-ID: <7AE31235A30B41498D1C31348DC858BD5B4C0DA4@IRSMSX103.ger.corp.intel.com> References: <1537449810-23573-1-git-send-email-jananeex.m.parthasarathy@intel.com> In-Reply-To: <1537449810-23573-1-git-send-email-jananeex.m.parthasarathy@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [163.33.239.181] Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Subject: Re: [dpdk-dev] [PATCH] test: restructure and cleanup ring PMD test X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 20 Sep 2018 14:07:52 -0000 Adding Bruce in CC Thanks M.P.Jananee >-----Original Message----- >From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Jananee >Parthasarathy >Sent: Thursday, September 20, 2018 6:54 PM >To: dev@dpdk.org >Cc: Pattan, Reshma ; Chaitanya Babu, TalluriX > >Subject: [dpdk-dev] [PATCH] test: restructure and cleanup ring PMD test > >From: Chaitanya Babu Talluri > >Divided main test to smaller logical tests. >Registered with UT framework. >Added cleanup of the resources else ring creation fails during consecutive= test >runs. >Freed the allocated mempool, rings and uninitalized the drivers. > >Signed-off-by: Chaitanya Babu Talluri >--- > test/test/test_pmd_ring.c | 312 ++++++++++++++++++++++++++++-------------= -- >--- > 1 file changed, 188 insertions(+), 124 deletions(-) > >diff --git a/test/test/test_pmd_ring.c b/test/test/test_pmd_ring.c index >19d7d20a0..f7d46d834 100644 >--- a/test/test/test_pmd_ring.c >+++ b/test/test/test_pmd_ring.c >@@ -2,20 +2,22 @@ > * Copyright(c) 2010-2015 Intel Corporation > */ > #include "test.h" >+#include > > #include > > #include > #include >- >-static struct rte_mempool *mp; >-static int tx_porta, rx_portb, rxtx_portc, rxtx_portd, rxtx_porte; >+#include > > #define SOCKET0 0 > #define RING_SIZE 256 > #define NUM_RINGS 2 > #define NB_MBUF 512 > >+static struct rte_mempool *mp; >+struct rte_ring *rxtx[NUM_RINGS]; >+static int tx_porta, rx_portb, rxtx_portc, rxtx_portd, rxtx_porte; > > static int > test_ethdev_configure_port(int port) >@@ -71,21 +73,21 @@ test_send_basic_packets(void) > > if (rte_eth_tx_burst(tx_porta, 0, pbufs, RING_SIZE/2) < RING_SIZE/2) { > printf("Failed to transmit packet burst port %d\n", tx_porta); >- return -1; >+ return TEST_FAILED; > } > > if (rte_eth_rx_burst(rx_portb, 0, pbufs, RING_SIZE) !=3D RING_SIZE/2) { > printf("Failed to receive packet burst on port %d\n", >rx_portb); >- return -1; >+ return TEST_FAILED; > } > > for (i =3D 0; i < RING_SIZE/2; i++) > if (pbufs[i] !=3D &bufs[i]) { > printf("Error: received data does not match that >transmitted\n"); >- return -1; >+ return TEST_FAILED; > } > >- return 0; >+ return TEST_SUCCESS; > } > > static int >@@ -212,7 +214,7 @@ test_stats_reset(int port) } > > static int >-test_pmd_ring_pair_create_attach(int portd, int porte) >+test_pmd_ring_pair_create_attach(void) > { > struct rte_eth_stats stats, stats2; > struct rte_mbuf buf, *pbuf =3D &buf; >@@ -220,185 +222,217 @@ test_pmd_ring_pair_create_attach(int portd, int >porte) > > memset(&null_conf, 0, sizeof(struct rte_eth_conf)); > >- if ((rte_eth_dev_configure(portd, 1, 1, &null_conf) < 0) >- || (rte_eth_dev_configure(porte, 1, 1, &null_conf) < 0)) { >+ if ((rte_eth_dev_configure(rxtx_portd, 1, 1, &null_conf) < 0) >+ || (rte_eth_dev_configure(rxtx_porte, 1, 1, &null_conf) < 0)) { > printf("Configure failed for port\n"); >- return -1; >+ return TEST_FAILED; > } > >- if ((rte_eth_tx_queue_setup(portd, 0, RING_SIZE, SOCKET0, NULL) < 0) >- || (rte_eth_tx_queue_setup(porte, 0, RING_SIZE, SOCKET0, >NULL) < 0)) { >+ if ((rte_eth_tx_queue_setup(rxtx_portd, 0, RING_SIZE, >+ SOCKET0, NULL) < 0) >+ || (rte_eth_tx_queue_setup(rxtx_porte, 0, RING_SIZE, >+ SOCKET0, NULL) < 0)) { > printf("TX queue setup failed\n"); >- return -1; >+ return TEST_FAILED; > } > >- if ((rte_eth_rx_queue_setup(portd, 0, RING_SIZE, SOCKET0, NULL, mp) >< 0) >- || (rte_eth_rx_queue_setup(porte, 0, RING_SIZE, SOCKET0, >NULL, mp) < 0)) { >+ if ((rte_eth_rx_queue_setup(rxtx_portd, 0, RING_SIZE, >+ SOCKET0, NULL, mp) < 0) >+ || (rte_eth_rx_queue_setup(rxtx_porte, 0, RING_SIZE, >+ SOCKET0, NULL, mp) < 0)) { > printf("RX queue setup failed\n"); >- return -1; >+ return TEST_FAILED; > } > >- if ((rte_eth_dev_start(portd) < 0) >- || (rte_eth_dev_start(porte) < 0)) { >+ if ((rte_eth_dev_start(rxtx_portd) < 0) >+ || (rte_eth_dev_start(rxtx_porte) < 0)) { > printf("Error starting port\n"); >- return -1; >+ return TEST_FAILED; > } > >- rte_eth_stats_reset(portd); >+ rte_eth_stats_reset(rxtx_portd); > /* check stats of port, should all be zero */ >- rte_eth_stats_get(portd, &stats); >+ rte_eth_stats_get(rxtx_portd, &stats); > if (stats.ipackets !=3D 0 || stats.opackets !=3D 0 || > stats.ibytes !=3D 0 || stats.obytes !=3D 0 || > stats.ierrors !=3D 0 || stats.oerrors !=3D 0) { >- printf("Error: port %d stats are not zero\n", portd); >- return -1; >+ printf("Error: port %d stats are not zero\n", rxtx_portd); >+ return TEST_FAILED; > } > >- rte_eth_stats_reset(porte); >+ rte_eth_stats_reset(rxtx_porte); > /* check stats of port, should all be zero */ >- rte_eth_stats_get(porte, &stats2); >+ rte_eth_stats_get(rxtx_porte, &stats2); > if (stats2.ipackets !=3D 0 || stats2.opackets !=3D 0 || > stats2.ibytes !=3D 0 || stats2.obytes !=3D 0 || > stats2.ierrors !=3D 0 || stats2.oerrors !=3D 0) { >- printf("Error: port %d stats are not zero\n", porte); >- return -1; >+ printf("Error: port %d stats are not zero\n", rxtx_porte); >+ return TEST_FAILED; > } > > /* >- * send and receive 1 packet (portd -> porte) >+ * send and receive 1 packet (rxtx_portd -> rxtx_porte) > * and check for stats update > */ >- printf("Testing send and receive 1 packet (portd -> porte)\n"); >- if (rte_eth_tx_burst(portd, 0, &pbuf, 1) !=3D 1) { >- printf("Error sending packet to port %d\n", portd); >- return -1; >+ printf("Testing send and receive 1 packet (rxtx_portd -> >rxtx_porte)\n"); >+ if (rte_eth_tx_burst(rxtx_portd, 0, &pbuf, 1) !=3D 1) { >+ printf("Error sending packet to port %d\n", rxtx_portd); >+ return TEST_FAILED; > } > >- if (rte_eth_rx_burst(porte, 0, &pbuf, 1) !=3D 1) { >- printf("Error receiving packet from port %d\n", porte); >- return -1; >+ if (rte_eth_rx_burst(rxtx_porte, 0, &pbuf, 1) !=3D 1) { >+ printf("Error receiving packet from port %d\n", rxtx_porte); >+ return TEST_FAILED; > } > >- rte_eth_stats_get(portd, &stats); >- rte_eth_stats_get(porte, &stats2); >+ rte_eth_stats_get(rxtx_portd, &stats); >+ rte_eth_stats_get(rxtx_porte, &stats2); > if (stats.ipackets !=3D 0 || stats.opackets !=3D 1 || > stats.ibytes !=3D 0 || stats.obytes !=3D 0 || > stats.ierrors !=3D 0 || stats.oerrors !=3D 0) { >- printf("Error: port %d stats are not as expected\n", portd); >- return -1; >+ printf("Error: port %d stats are not as expected\n", >+ rxtx_portd); >+ return TEST_FAILED; > } > > if (stats2.ipackets !=3D 1 || stats2.opackets !=3D 0 || > stats2.ibytes !=3D 0 || stats2.obytes !=3D 0 || > stats2.ierrors !=3D 0 || stats2.oerrors !=3D 0) { >- printf("Error: port %d stats are not as expected\n", porte); >- return -1; >+ printf("Error: port %d stats are not as expected\n", >+ rxtx_porte); >+ return TEST_FAILED; > } > > /* >- * send and receive 1 packet (porte -> portd) >+ * send and receive 1 packet (rxtx_porte -> rxtx_portd) > * and check for stats update > */ >- printf("Testing send and receive 1 packet (porte -> portd)\n"); >- if (rte_eth_tx_burst(porte, 0, &pbuf, 1) !=3D 1) { >- printf("Error sending packet to port %d\n", porte); >- return -1; >+ printf("Testing send and receive 1 packet " >+ "(rxtx_porte -> rxtx_portd)\n"); >+ if (rte_eth_tx_burst(rxtx_porte, 0, &pbuf, 1) !=3D 1) { >+ printf("Error sending packet to port %d\n", rxtx_porte); >+ return TEST_FAILED; > } > >- if (rte_eth_rx_burst(portd, 0, &pbuf, 1) !=3D 1) { >- printf("Error receiving packet from port %d\n", portd); >- return -1; >+ if (rte_eth_rx_burst(rxtx_portd, 0, &pbuf, 1) !=3D 1) { >+ printf("Error receiving packet from port %d\n", rxtx_portd); >+ return TEST_FAILED; > } > >- rte_eth_stats_get(portd, &stats); >- rte_eth_stats_get(porte, &stats2); >+ rte_eth_stats_get(rxtx_portd, &stats); >+ rte_eth_stats_get(rxtx_porte, &stats2); > if (stats.ipackets !=3D 1 || stats.opackets !=3D 1 || > stats.ibytes !=3D 0 || stats.obytes !=3D 0 || > stats.ierrors !=3D 0 || stats.oerrors !=3D 0) { >- printf("Error: port %d stats are not as expected\n", portd); >- return -1; >+ printf("Error: port %d stats are not as expected\n", >+ rxtx_portd); >+ return TEST_FAILED; > } > > if (stats2.ipackets !=3D 1 || stats2.opackets !=3D 1 || > stats2.ibytes !=3D 0 || stats2.obytes !=3D 0 || > stats2.ierrors !=3D 0 || stats2.oerrors !=3D 0) { >- printf("Error: port %d stats are not as expected\n", porte); >- return -1; >+ printf("Error: port %d stats are not as expected\n", >+ rxtx_porte); >+ return TEST_FAILED; > } > > /* >- * send and receive 1 packet (portd -> portd) >+ * send and receive 1 packet (rxtx_portd -> rxtx_portd) > * and check for stats update > */ >- printf("Testing send and receive 1 packet (portd -> portd)\n"); >- if (rte_eth_tx_burst(portd, 0, &pbuf, 1) !=3D 1) { >- printf("Error sending packet to port %d\n", portd); >- return -1; >+ printf("Testing send and receive 1 packet " >+ "(rxtx_portd -> rxtx_portd)\n"); >+ if (rte_eth_tx_burst(rxtx_portd, 0, &pbuf, 1) !=3D 1) { >+ printf("Error sending packet to port %d\n", rxtx_portd); >+ return TEST_FAILED; > } > >- if (rte_eth_rx_burst(portd, 0, &pbuf, 1) !=3D 1) { >- printf("Error receiving packet from port %d\n", porte); >- return -1; >+ if (rte_eth_rx_burst(rxtx_portd, 0, &pbuf, 1) !=3D 1) { >+ printf("Error receiving packet from port %d\n", rxtx_porte); >+ return TEST_FAILED; > } > >- rte_eth_stats_get(portd, &stats); >- rte_eth_stats_get(porte, &stats2); >+ rte_eth_stats_get(rxtx_portd, &stats); >+ rte_eth_stats_get(rxtx_porte, &stats2); > if (stats.ipackets !=3D 2 || stats.opackets !=3D 2 || > stats.ibytes !=3D 0 || stats.obytes !=3D 0 || > stats.ierrors !=3D 0 || stats.oerrors !=3D 0) { >- printf("Error: port %d stats are not as expected\n", portd); >- return -1; >+ printf("Error: port %d stats are not as expected\n", >+ rxtx_portd); >+ return TEST_FAILED; > } > > if (stats2.ipackets !=3D 1 || stats2.opackets !=3D 1 || > stats2.ibytes !=3D 0 || stats2.obytes !=3D 0 || > stats2.ierrors !=3D 0 || stats2.oerrors !=3D 0) { >- printf("Error: port %d stats are not as expected\n", porte); >- return -1; >+ printf("Error: port %d stats are not as expected\n", >+ rxtx_porte); >+ return TEST_FAILED; > } > > /* >- * send and receive 1 packet (porte -> porte) >+ * send and receive 1 packet (rxtx_porte -> rxtx_porte) > * and check for stats update > */ >- printf("Testing send and receive 1 packet (porte -> porte)\n"); >- if (rte_eth_tx_burst(porte, 0, &pbuf, 1) !=3D 1) { >- printf("Error sending packet to port %d\n", porte); >- return -1; >+ printf("Testing send and receive 1 packet " >+ "(rxtx_porte -> rxtx_porte)\n"); >+ if (rte_eth_tx_burst(rxtx_porte, 0, &pbuf, 1) !=3D 1) { >+ printf("Error sending packet to port %d\n", rxtx_porte); >+ return TEST_FAILED; > } > >- if (rte_eth_rx_burst(porte, 0, &pbuf, 1) !=3D 1) { >- printf("Error receiving packet from port %d\n", porte); >- return -1; >+ if (rte_eth_rx_burst(rxtx_porte, 0, &pbuf, 1) !=3D 1) { >+ printf("Error receiving packet from port %d\n", rxtx_porte); >+ return TEST_FAILED; > } > >- rte_eth_stats_get(portd, &stats); >- rte_eth_stats_get(porte, &stats2); >+ rte_eth_stats_get(rxtx_portd, &stats); >+ rte_eth_stats_get(rxtx_porte, &stats2); > if (stats.ipackets !=3D 2 || stats.opackets !=3D 2 || > stats.ibytes !=3D 0 || stats.obytes !=3D 0 || > stats.ierrors !=3D 0 || stats.oerrors !=3D 0) { >- printf("Error: port %d stats are not as expected\n", portd); >- return -1; >+ printf("Error: port %d stats are not as expected\n", >+ rxtx_portd); >+ return TEST_FAILED; > } > > if (stats2.ipackets !=3D 2 || stats2.opackets !=3D 2 || > stats2.ibytes !=3D 0 || stats2.obytes !=3D 0 || > stats2.ierrors !=3D 0 || stats2.oerrors !=3D 0) { >- printf("Error: port %d stats are not as expected\n", porte); >- return -1; >+ printf("Error: port %d stats are not as expected\n", >+ rxtx_porte); >+ return TEST_FAILED; > } > >- rte_eth_dev_stop(portd); >- rte_eth_dev_stop(porte); >+ rte_eth_dev_stop(rxtx_portd); >+ rte_eth_dev_stop(rxtx_porte); > >- return 0; >+ return TEST_SUCCESS; >+} >+ >+static void >+test_cleanup_resources(void) >+{ >+ int itr; >+ for (itr =3D 0; itr < NUM_RINGS; itr++) >+ rte_ring_free(rxtx[itr]); >+ >+ rte_eth_dev_stop(tx_porta); >+ rte_eth_dev_stop(rx_portb); >+ rte_eth_dev_stop(rxtx_portc); >+ >+ rte_mempool_free(mp); >+ rte_vdev_uninit("net_ring_net_ringa"); >+ rte_vdev_uninit("net_ring_net_ringb"); >+ rte_vdev_uninit("net_ring_net_ringc"); >+ rte_vdev_uninit("net_ring_net_ringd"); >+ rte_vdev_uninit("net_ring_net_ringe"); > } > > static int >-test_pmd_ring(void) >+test_pmd_ringcreate_setup(void) > { >- struct rte_ring *rxtx[NUM_RINGS]; >- int port, cmdl_port0 =3D -1; > uint8_t nb_ports; > > nb_ports =3D rte_eth_dev_count_avail(); >@@ -448,32 +482,13 @@ test_pmd_ring(void) > printf(" port exceed max eth ports\n"); > return -1; > } >+ return 0; >+} > >- if (test_ethdev_configure_port(tx_porta) < 0) >- return -1; >- >- if (test_ethdev_configure_port(rx_portb) < 0) >- return -1; >- >- if (test_ethdev_configure_port(rxtx_portc) < 0) >- return -1; >- >- if (test_send_basic_packets() < 0) >- return -1; >- >- if (test_get_stats(rxtx_portc) < 0) >- return -1; >- >- if (test_stats_reset(rxtx_portc) < 0) >- return -1; >- >- rte_eth_dev_stop(tx_porta); >- rte_eth_dev_stop(rx_portb); >- rte_eth_dev_stop(rxtx_portc); >- >- if (test_pmd_ring_pair_create_attach(rxtx_portd, rxtx_porte) < 0) >- return -1; >- >+static int >+test_command_line_ring_port(void) >+{ >+ int port, cmdl_port0 =3D -1; > /* find a port created with the --vdev=3Dnet_ring0 command line option >*/ > RTE_ETH_FOREACH_DEV(port) { > struct rte_eth_dev_info dev_info; >@@ -486,17 +501,66 @@ test_pmd_ring(void) > } > } > if (cmdl_port0 !=3D -1) { >- if (test_ethdev_configure_port(cmdl_port0) < 0) >- return -1; >- if (test_send_basic_packets_port(cmdl_port0) < 0) >- return -1; >- if (test_stats_reset(cmdl_port0) < 0) >- return -1; >- if (test_get_stats(cmdl_port0) < 0) >- return -1; >+ TEST_ASSERT((test_ethdev_configure_port(cmdl_port0) < 0), >+ "test ethdev configure port cmdl_port0 is >failed"); >+ TEST_ASSERT((test_send_basic_packets_port(cmdl_port0) < >0), >+ "test send basic packets port cmdl_port0 is >failed"); >+ TEST_ASSERT((test_stats_reset(cmdl_port0) < 0), >+ "test stats reset cmdl_port0 is failed"); >+ TEST_ASSERT((test_get_stats(cmdl_port0) < 0), >+ "test get stats cmdl_port0 is failed"); > rte_eth_dev_stop(cmdl_port0); > } >- return 0; >+ return TEST_SUCCESS; >+} >+ >+static int >+test_ethdev_configure_ports(void) >+{ >+ TEST_ASSERT((test_ethdev_configure_port(tx_porta) =3D=3D 0), >+ "test ethdev configure ports tx_porta is failed"); >+ TEST_ASSERT((test_ethdev_configure_port(rx_portb) =3D=3D 0), >+ "test ethdev configure ports rx_portb is failed"); >+ TEST_ASSERT((test_ethdev_configure_port(rxtx_portc) =3D=3D 0), >+ "test ethdev configure ports rxtx_portc is failed"); >+ >+ return TEST_SUCCESS; >+} >+ >+static int >+test_get_stats_for_port(void) >+{ >+ TEST_ASSERT(test_get_stats(rxtx_portc) =3D=3D 0, "test get stats failed"= ); >+ return TEST_SUCCESS; >+} >+ >+static int >+test_stats_reset_for_port(void) >+{ >+ TEST_ASSERT(test_stats_reset(rxtx_portc) =3D=3D 0, "test stats reset >failed"); >+ return TEST_SUCCESS; >+} >+ >+static struct >+unit_test_suite test_pmd_ring_suite =3D { >+ .setup =3D test_pmd_ringcreate_setup, >+ .teardown =3D test_cleanup_resources, >+ .suite_name =3D "Test Pmd Ring Unit Test Suite", >+ .unit_test_cases =3D { >+ TEST_CASE(test_ethdev_configure_ports), >+ TEST_CASE(test_send_basic_packets), >+ TEST_CASE(test_get_stats_for_port), >+ TEST_CASE(test_stats_reset_for_port), >+ TEST_CASE(test_pmd_ring_pair_create_attach), >+ TEST_CASE(test_command_line_ring_port), >+ TEST_CASES_END() >+ } >+}; >+ >+static int >+test_pmd_ring(void) >+{ >+ return unit_test_suite_runner(&test_pmd_ring_suite); > } > > REGISTER_TEST_COMMAND(ring_pmd_autotest, test_pmd_ring); >-- >2.13.6 -------------------------------------------------------------- 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 s= ole 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.