test suite reviews and discussions
 help / color / mirror / Atom feed
* [dts] [PATCH 1/2] test_plans: add mempool external handler test plan
@ 2016-10-26  9:03 Marvin Liu
  2016-10-26  9:03 ` [dts] [PATCH 2/2] tests: add test suite for mempool external handler Marvin Liu
  0 siblings, 1 reply; 2+ messages in thread
From: Marvin Liu @ 2016-10-26  9:03 UTC (permalink / raw)
  To: dts

External Mempool Handler feature is an extension to the mempool API that
allows users to add and use an alternative mempool handler.
This test plan will cover internal defined mempoool handlers and stack
mempool handler.

Signed-off-by: Marvin Liu <yong.liu@intel.com>

diff --git a/test_plans/mempool_exthandler_test_plan.rst b/test_plans/mempool_exthandler_test_plan.rst
new file mode 100644
index 0000000..8c26317
--- /dev/null
+++ b/test_plans/mempool_exthandler_test_plan.rst
@@ -0,0 +1,67 @@
+.. Copyright (c) <2016>, Intel Corporation
+      All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+
+   - Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+
+   - Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in
+     the documentation and/or other materials provided with the
+     distribution.
+
+   - Neither the name of Intel Corporation nor the names of its
+     contributors may be used to endorse or promote products derived
+     from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+   COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+   INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+   SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+   STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+   OF THE POSSIBILITY OF SUCH DAMAGE.
+
+========================
+External mempool handler
+========================
+
+External Mempool Handler feature is an extension to the mempool API that
+allows users to add and use an alternative mempool handler, which allows
+external memory subsystems such as external hardware memory management
+systems and software based memory allocators to be used with DPDK.
+
+Test Case 1: Multiple producers and multiple consumers mempool handler
+======================================================================
+1. Change default mempool operation to "ring_mp_mc"
+2. Run l2fwd and check packet forwarding normally with this mempool handler.
+
+Test Case 2: Single producer and Single consumer mempool handler
+================================================================
+1. Change default mempool operation to "ring_sp_sc"
+2. Run l2fwd and check packet forwarding normally with this mempool handler.
+
+Test Case 3: Single producer and Multiple consumers mempool handler
+===================================================================
+1. Change default mempool operation to "ring_sp_mc"
+2. Run l2fwd and check packet forwarding normally with this mempool handler.
+
+Test Case 4: Multiple producers and single consumer mempool handler
+===================================================================
+1. Change default mempool operation to "ring_mp_sc"
+2. Run l2fwd and check packet forwarding normally with this mempool handler.
+
+Test Case 5: External stack mempool handler
+===========================================
+1. Change default mempool operation to "stack"
+2. Run l2fwd and check packet forwarding normally with this mempool handler.
+
+
-- 
1.9.3

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

* [dts] [PATCH 2/2] tests: add test suite for mempool external handler
  2016-10-26  9:03 [dts] [PATCH 1/2] test_plans: add mempool external handler test plan Marvin Liu
@ 2016-10-26  9:03 ` Marvin Liu
  0 siblings, 0 replies; 2+ messages in thread
From: Marvin Liu @ 2016-10-26  9:03 UTC (permalink / raw)
  To: dts

Signed-off-by: Marvin Liu <yong.liu@intel.com>

diff --git a/tests/TestSuite_mempool_exthandler.py b/tests/TestSuite_mempool_exthandler.py
new file mode 100644
index 0000000..bbd8761
--- /dev/null
+++ b/tests/TestSuite_mempool_exthandler.py
@@ -0,0 +1,172 @@
+# BSD LICENSE
+#
+# Copyright(c) 2010-2016 Intel Corporation. All rights reserved.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#   * Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+#   * Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in
+#     the documentation and/or other materials provided with the
+#     distribution.
+#   * Neither the name of Intel Corporation nor the names of its
+#     contributors may be used to endorse or promote products derived
+#     from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""
+DPDK Test suite.
+Test internal and external mempool handler
+"""
+
+import utils
+from test_case import TestCase
+
+
+class TestMemExthandler(TestCase):
+
+    def set_up_all(self):
+        """
+        Run at the start of each test suite.
+        """
+        # only one port is enought for this case
+        self.dut_ports = self.dut.get_ports()
+        self.verify(len(self.dut_ports) >= 1,
+                    "Not enough ports for " + self.nic)
+
+        self.core_mask = utils.create_mask(self.dut.get_core_list("1S/4C/1T"))
+        self.port_mask = utils.create_mask([self.dut_ports[0]])
+
+        self.path = "./examples/l2fwd/build/app/l2fwd"
+
+        # strip mempool size
+        self.main_path = "./examples/l2fwd/main.c"
+        out = self.dut.send_expect(
+            "cat %s | grep \"#define NB_MBUF\"" % self.main_path, "# ")
+        mp_str = utils.regexp(out, r"#define NB_MBUF   (\d+)")
+        if mp_str is None:
+            mp_size = 8192
+        else:
+            mp_size = int(mp_str)
+
+        # make sure packets more than 2*mempool size
+        self.pkts = mp_size * 2 + 1000
+
+    def set_up(self):
+        """
+        Run before each test case.
+        """
+        pass
+
+    def setup_mempool_handler(self, name):
+        """
+        Prepare testing environment for specified mempool handler
+        """
+        config = "CONFIG_RTE_MBUF_DEFAULT_MEMPOOL_OPS"
+        conf_file = "./config/common_base"
+        # change default mempool handler operations
+        self.dut.send_expect(
+            "sed -i 's/%s=.*$/%s=\"%s\"/' %s" % (config, config, name, conf_file), "# ")
+        # rebuild dpdk target
+        self.dut.skip_setup = False
+        self.dut.build_install_dpdk(self.target)
+        # rebuild l2fwd
+        out = self.dut.build_dpdk_apps("./examples/l2fwd")
+        self.verify("Error" not in out, "Compilation error")
+
+    def verify_mempool_hander(self):
+        """
+        Verify all packets recevied and transmitted normally.
+        """
+        # start l2fwd
+        command_line = "%s -n %d -c %s -- -q 4 -p %s" % \
+            (self.path, self.dut.get_memory_channels(),
+             self.core_mask, self.port_mask)
+        # send packets over 2 * mempool size
+        self.dut.send_expect(command_line, "L2FWD: entering main loop", 60)
+
+        # verify forwarded packets
+        traffic_flow = []
+        tx_port = self.tester.get_local_port(self.dut_ports[0])
+        rx_port = self.tester.get_local_port(self.dut_ports[0])
+        traffic_flow.append((tx_port, rx_port))
+
+        result = self.tester.check_random_pkts(traffic_flow,
+                                               pktnum=self.pkts,
+                                               allow_miss=False)
+
+        self.verify(result is True, "Packet integrity check failed")
+
+        # strip rx/tx statistic from l2fwd output
+        out = self.dut.get_session_output()
+        sent_list = utils.regexp(out, r"Total packets sent:(\s+)(\d+)", allString=True)
+        total_sent = int(sent_list[-1][1])
+        rcv_list = utils.regexp(out, r"Total packets received:(\s+)(\d+)", allString=True)
+        total_recv = int(rcv_list[-1][1])
+
+        self.verify(total_recv == self.pkts, "L2fwd sample not receive expected packets")
+        self.verify(total_sent == self.pkts, "L2fwd sample not transmit expected packets")
+
+    def test_mempool_stackhandler(self):
+        """
+        Check packet rx/tx work with mempool stack handler.
+        """
+        self.setup_mempool_handler("stack")
+        self.verify_mempool_hander()
+
+    def test_mempool_spsc(self):
+        """
+        Check packet rx/tx work with single producer/single consumer.
+        """
+        self.setup_mempool_handler("ring_sp_sc")
+        self.verify_mempool_hander()
+
+    def test_mempool_spmc(self):
+        """
+        Check packet rx/tx work with single producer/multi consumers.
+        """
+        self.setup_mempool_handler("ring_sp_mc")
+        self.verify_mempool_hander()
+
+    def test_mempool_mpsc(self):
+        """
+        Check packet rx/tx work with multi producers/single consumer.
+        """
+        self.setup_mempool_handler("ring_mp_sc")
+        self.verify_mempool_hander()
+
+    def test_mempool_mpmc(self):
+        """
+        Check packet rx/tx work with multi producers/multi consumers.
+        """
+        self.setup_mempool_handler("ring_mp_mc")
+        self.verify_mempool_hander()
+
+    def tear_down(self):
+        """
+        Run after each test case.
+        """
+        self.dut.kill_all()
+        pass
+
+    def tear_down_all(self):
+        """
+        Run after each test suite.
+        """
+        self.setup_mempool_handler("ring_mp_mc")
+        pass
-- 
1.9.3

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

end of thread, other threads:[~2016-10-26  9:03 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-10-26  9:03 [dts] [PATCH 1/2] test_plans: add mempool external handler test plan Marvin Liu
2016-10-26  9:03 ` [dts] [PATCH 2/2] tests: add test suite for mempool external handler Marvin Liu

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).