test suite reviews and discussions
 help / color / mirror / Atom feed
* [dts] [PATCH V1 01/2] add keep alive test code
@ 2016-08-23  9:26 xu,gang
  2016-08-23  9:26 ` [dts] [PATCH V1 02/2] add keep alive test plan xu,gang
                   ` (11 more replies)
  0 siblings, 12 replies; 18+ messages in thread
From: xu,gang @ 2016-08-23  9:26 UTC (permalink / raw)
  To: dts; +Cc: xu,gang

Signed-off-by: xu,gang <gangx.xu@intel.com>
---
 tests/TestSuite_keep_alive.py | 114 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 114 insertions(+)
 create mode 100644 tests/TestSuite_keep_alive.py

diff --git a/tests/TestSuite_keep_alive.py b/tests/TestSuite_keep_alive.py
new file mode 100644
index 0000000..2ed14f8
--- /dev/null
+++ b/tests/TestSuite_keep_alive.py
@@ -0,0 +1,114 @@
+#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 keep alive
+"""
+
+import dts
+import string
+import time
+import re
+from test_case import TestCase
+from plotting import Plotting 
+from settings import HEADER_SIZE   
+from etgen import IxiaPacketGenerator
+from packet import Packet, sniff_packets, load_sniff_packets
+
+class TestKeepAlive(TestCase):
+
+    def set_up_all(self):
+        """
+        Run at the start of each test suite.
+        """
+        
+        self.dut_ports = self.dut.get_ports(self.nic)
+        self.verify(len(self.dut_ports) >= 2, "Insufficient ports")
+        cores = self.dut.get_core_list("1S/4C/1T")
+        self.coremask = dts.create_mask(cores)
+
+        self.path = "./examples/l2fwd-keepalive/build/l2fwd-keepalive" 
+
+        # build sample app  
+        out = self.dut.build_dpdk_apps("./examples/l2fwd-keepalive")
+        self.verify("Error" not in out, "compilation error 1") 
+        self.verify("No such file" not in out, "compilation error 2")
+         
+    def set_up(self):
+        """
+        Run before each test case.
+        """
+        pass
+
+    def test_keep_alive(self):
+        """
+        Verify netmap compatibility with one port 
+        """ 
+        cmd = self.path + " -c f -n 4 -- -q 8 -p ffff -K 10"
+      
+        self.dut.send_expect(cmd,"Port statistics",60)
+
+        self.scapy_send_packet(2000)
+        out = self.dut.get_session_output(timeout=10)
+        print out
+        p = re.compile(r'\d+')
+        result = p.findall(out)
+        amount = 2000 * len(self.dut_ports)
+        self.verify(str(amount) in result, "Wrong: can't get <%s> package")
+         
+    def scapy_send_packet(self,nu):
+        """
+        Send a packet to port  
+        """
+        for i in range(len(self.dut_ports)):
+            txport = self.tester.get_local_port(self.dut_ports[i])
+            mac = self.dut.get_mac_address(self.dut_ports[i])
+            txItf = self.tester.get_interface(txport)
+            self.tester.scapy_append('sendp([Ether(dst="%s")/IP()/UDP()/Raw(\'X\'*18)], iface="%s",count=%s)' % (mac,txItf,nu))
+            self.tester.scapy_execute()
+
+         
+    def tear_down(self):
+        """
+        Run after each test case.
+        """
+        self.dut.kill_all()
+        time.sleep(2)
+        pass
+
+    def tear_down_all(self):
+        """
+        Run after each test suite.
+        """
+        pass
+
-- 
1.9.3

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

* [dts] [PATCH V1 02/2] add keep alive test plan
  2016-08-23  9:26 [dts] [PATCH V1 01/2] add keep alive test code xu,gang
@ 2016-08-23  9:26 ` xu,gang
  2016-08-23  9:26 ` [dts] [PATCH V1 01/2] add ip_pipeline cfg test code xu,gang
                   ` (10 subsequent siblings)
  11 siblings, 0 replies; 18+ messages in thread
From: xu,gang @ 2016-08-23  9:26 UTC (permalink / raw)
  To: dts; +Cc: xu,gang

Signed-off-by: xu,gang <gangx.xu@intel.com>
---
 test_plans/keep_alive_test_plan.rst | 75 +++++++++++++++++++++++++++++++++++++
 1 file changed, 75 insertions(+)
 create mode 100644 test_plans/keep_alive_test_plan.rst

diff --git a/test_plans/keep_alive_test_plan.rst b/test_plans/keep_alive_test_plan.rst
new file mode 100644
index 0000000..7361ccf
--- /dev/null
+++ b/test_plans/keep_alive_test_plan.rst
@@ -0,0 +1,75 @@
+..  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.
+
+
+ Keep Alive Sample Application
+===============================
+The Keep Alive application is a simple example of a heartbeat/watchdog for packet processing cores. It demonstrates how to detect ‘failed’ DPDK cores and notify a fault management entity of this failure. Its purpose is to ensure the failure of the core does not result in a fault that is not detectable by a management entity.
+
+Overview
+=======
+The application demonstrates how to protect against ‘silent outages’ on packet processing cores. A Keep Alive Monitor Agent Core (master) monitors the state of packet processing cores (worker cores) by dispatching pings at a regular time interval (default is 5ms) and monitoring the state of the cores. Cores states are: Alive, MIA, Dead or Buried. MIA indicates a missed ping, and Dead indicates two missed pings within the specified time interval. When a core is Dead, a callback function is invoked to restart the packet processing core; A real life application might use this callback function to notify a higher level fault management entity of the core failure in order to take the appropriate corrective action.
+
+Note: Only the worker cores are monitored. A local (on the host) mechanism or agent to supervise the Keep Alive Monitor Agent Core DPDK core is required to detect its failure.
+
+Note: This application is based on the L2 Forwarding Sample Application (in Real and Virtualized Environments). As such, the initialization and run-time paths are very similar to those of the L2 forwarding application.
+
+Compiling the Application
+=========================
+To compile the application:
+
+Go to the sample application directory:
+
+export RTE_SDK=/path/to/rte_sdk cd ${RTE_SDK}/examples/keep_alive
+Set the target (a default target is used if not specified). For example:
+
+export RTE_TARGET=x86_64-native-linuxapp-gcc
+See the DPDK Getting Started Guide for possible RTE_TARGET values.
+Build the application:
+
+make
+
+Running the Application
+=======================
+
+The application has a number of command line options::
+
+./build/l2fwd-keepalive [EAL options] -- -p PORTMASK [-q NQ] [-K PERIOD] [-T PERIOD]
+where,
+
+p PORTMASK: A hexadecimal bitmask of the ports to configure
+q NQ: A number of queues (=ports) per lcore (default is 1)
+K PERIOD: Heartbeat check period in ms(5ms default; 86400 max)
+T PERIOD: statistics will be refreshed each PERIOD seconds (0 to disable, 10 default, 86400 maximum).
+To run the application in linuxapp environment with 4 lcores, 16 ports 8 RX queues per lcore and a ping interval of 10ms, issue the command::
+
+    ./build/l2fwd-keepalive -c f -n 4 -- -q 8 -p ffff -K 10
+Refer to the DPDK Getting Started Guide for general information on running applications and the Environment Abstraction Layer (EAL) options.
+
-- 
1.9.3

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

* [dts] [PATCH V1 01/2] add ip_pipeline cfg test code
  2016-08-23  9:26 [dts] [PATCH V1 01/2] add keep alive test code xu,gang
  2016-08-23  9:26 ` [dts] [PATCH V1 02/2] add keep alive test plan xu,gang
@ 2016-08-23  9:26 ` xu,gang
  2016-08-23  9:26 ` [dts] [PATCH V1 02/2] add ip_pipeline cfg test plan xu,gang
                   ` (9 subsequent siblings)
  11 siblings, 0 replies; 18+ messages in thread
From: xu,gang @ 2016-08-23  9:26 UTC (permalink / raw)
  To: dts; +Cc: xu,gang

Signed-off-by: xu,gang <gangx.xu@intel.com>
---
 tests/TestSuite_ip_pipeline_cfg.py | 100 +++++++++++++++++++++++++++++++++++++
 1 file changed, 100 insertions(+)
 create mode 100644 tests/TestSuite_ip_pipeline_cfg.py

diff --git a/tests/TestSuite_ip_pipeline_cfg.py b/tests/TestSuite_ip_pipeline_cfg.py
new file mode 100644
index 0000000..bdeda36
--- /dev/null
+++ b/tests/TestSuite_ip_pipeline_cfg.py
@@ -0,0 +1,100 @@
+#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 Ip_pipeline_cfg.
+"""
+
+import dts
+import string
+import time
+import re
+import os
+import os.path
+from test_case import TestCase
+
+class TestIpPipelineCfg(TestCase):
+
+    def set_up_all(self):
+        """
+        Run at the start of each test suite.
+        """
+        self.dut_ports = self.dut.get_ports(self.nic)
+        self.verify(len(self.dut_ports) >= 2, "Insufficient ports")
+        cores = self.dut.get_core_list("1S/4C/1T")
+        self.coremask = dts.create_mask(cores)
+
+        self.path = "./examples/ip_pipeline/build/ip_pipeline"
+
+        self.dut.session.copy_file_to("dep/ip_pipeline.tar.gz")
+        self.dut.send_expect("tar -zxvf ~/ip_pipeline.tar.gz -C ~","# ",50)
+        # build sample app  
+        out = self.dut.build_dpdk_apps("./examples/ip_pipeline")
+        self.verify("Error" not in out, "compilation error 1") 
+        self.verify("No such file" not in out, "compilation error 2")
+         
+    def set_up(self):
+        """
+        Run before each test case.
+        """
+        pass
+
+    def test_postive(self):
+        rootdir = "dep/ip_pipeline/ip_pipeline_cfg/postive/"
+        for parent,dirnames,filenames in os.walk(rootdir):
+            for filename in filenames:
+                cmd = self.path + " -p 0x3 -f ~/ip_pipeline/ip_pipeline_cfg/postive/%s" % filename
+                self.dut.send_expect(cmd,"[PIPELINE1]",50)
+                out = self.dut.send_expect("quit","# ",10)
+                self.verify("Bye!" in out, "Test failed on %s" % filename)
+        
+    def test_negative(self):
+        rootdir = "dep/ip_pipeline/ip_pipeline_cfg/negative/"
+        for parent,dirnames,filenames in os.walk(rootdir):
+            for filename in filenames:
+                cmd = self.path + " -p 0x3 -f ~/ip_pipeline/ip_pipeline_cfg/negative/%s" % filename
+                out = self.dut.send_expect(cmd,"# ",50)
+                self.verify("error" in out, "Test failed on %s" % filename)
+
+    def tear_down(self):
+        """
+        Run after each test case.
+        """
+        self.dut.kill_all()
+        time.sleep(2)
+
+    def tear_down_all(self):
+        """
+        Run after each test suite.
+        """
+        pass
-- 
1.9.3

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

* [dts] [PATCH V1 02/2] add ip_pipeline cfg test plan
  2016-08-23  9:26 [dts] [PATCH V1 01/2] add keep alive test code xu,gang
  2016-08-23  9:26 ` [dts] [PATCH V1 02/2] add keep alive test plan xu,gang
  2016-08-23  9:26 ` [dts] [PATCH V1 01/2] add ip_pipeline cfg test code xu,gang
@ 2016-08-23  9:26 ` xu,gang
  2016-08-25  5:44   ` Liu, Yong
  2016-08-23  9:26 ` [dts] [PATCH V1 01/2] add ip_pipeline_cpu_utilization test code xu,gang
                   ` (8 subsequent siblings)
  11 siblings, 1 reply; 18+ messages in thread
From: xu,gang @ 2016-08-23  9:26 UTC (permalink / raw)
  To: dts; +Cc: xu,gang

Signed-off-by: xu,gang <gangx.xu@intel.com>
---
 test_plans/ip_pipeline_cfg_test_plan.rst | 352 +++++++++++++++++++++++++++++++
 1 file changed, 352 insertions(+)
 create mode 100644 test_plans/ip_pipeline_cfg_test_plan.rst

diff --git a/test_plans/ip_pipeline_cfg_test_plan.rst b/test_plans/ip_pipeline_cfg_test_plan.rst
new file mode 100644
index 0000000..e608bf4
--- /dev/null
+++ b/test_plans/ip_pipeline_cfg_test_plan.rst
@@ -0,0 +1,352 @@
+.. Copyright (c) <2010,2011>, 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.
+
+ip_pipeline cfg test plan
+=========================
+[cfginfor=cfg]
+defauld=10
+positive=200
+negative=200
+
+[PIPELINE1=DEFAULD]
+core = 1
+pktq_in = RXQ0.0 RXQ1.0
+pktq_out = TXQ0.0 TXQ1.0
+msgq_in = MSGQ0
+msgq_out = MSGQ0
+timer_period = 100
+
+[PIPELINE1=POSITIVE]
+core = 1
+pktq_in = RXQ0.0 RXQ1.0
+pktq_out = TXQ0.0 TXQ1.0
+msgq_in = MSGQ0
+msgq_out = MSGQ0
+timer_period = 100
+
+[PIPELINE1=NEGATIVE]
+core = 1
+pktq_in = RXQ0.0 RXQ1.0
+pktq_out = TXQ0.0 TXQ1.0
+msgq_in = MSGQ0
+msgq_out = MSGQ0
+timer_period = 100
+
+[PASS-THROUGH=DEFAULD]
+dma_size = 16
+dma_dst_offset = 64
+dma_src_offset = 150
+dma_src_mask = 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF
+dma_hash_offset = 80
+[FLOW_CLASSIFICATION=DEFAULD]
+n_flows = 4096
+key_offset = 192
+key_size = 16
+hash_offset = 208
+
+[FLOW_ACTIONS=DEFAULD]
+n_flows = 4096
+flow_id_offset = 286 
+color_offset = 192
+ip_hdr_offset = 270
+n_meters_per_flow = 1
+
+[FIREWALL=DEFAULD]
+n_rules = 1
+pkt_type = ipv4
+
+[ROUTING=DEFAULD]
+n_routes = 4096
+ip_hdr_offset = 270
+
+[PASS-THROUGH=POSITIVE]
+dma_size = 16
+dma_dst_offset = 64
+dma_src_offset = 150
+dma_src_mask = 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF
+dma_hash_offset = 80
+#pkt_type = ipv4|vlan_ipv4|mpls_ipv4|ipv6|vlan_ipv6|mpls_ipv6|ipv4_5tuple|ipv6_5tuple|qinq
+#key_offset_wr=0|4294967295
+#key_offset= 0|4294967295
+#hash_func=simple|crc|aseni
+#hash_offset=0|4294967295
+#lb = off|on
+#check_ip_header=off|on
+
+[PASS-THROUGH=NEGATIVE]
+#key_offset_wr=-1|4294967296
+#hash_func=abcde
+#hash_offset=-1|4294967296
+
+[FLOW_CLASSIFICATION=POSITIVE]
+n_flows = 2|2147483648
+key_offset = 0|4294967295
+key_size = 8|16
+hash_offset =  0|4294967295
+#flow_id_offset=0|4294967295
+#flow_stat=off|on 
+#color_offset=0|4294967295
+#input_color_offset= 0|4294967295
+#meter_type=srtcm|trtcm
+
+[FLOW_CLASSIFICATION=NEGATIVE]
+n_flows = 0|-1|4294967296
+key_offset = -1|4294967296
+key_size = 7
+hash_offset = -1|4294967296
+#flow_id_offset=-1|4294967296
+#flow_stats=abc
+#color_offset=-1|4294967296
+#input_color_offset=-1|4294967296
+#meter_type= abcd
+
+[FLOW_ACTIONS=POSITIVE]
+n_flows = 2|4096
+flow_id_offset = 0|4294967295
+#flow_stats=off|on
+color_offset =  0|4294967295
+ip_hdr_offset = 0|4294967295
+#meter_type =srtcm|trtcm
+n_meters_per_flow = 4
+
+[FLOW_ACTIONS=NEGATIVE]
+n_flows = 0|-1|4294967296
+flow_id_offset = -1|4294967296
+#flow_stats=abc
+color_offset = -1|4294967296
+#meter_type=abcd
+ip_hdr_offset = -1|4294967296
+n_meters_per_flow = 0|5
+
+[FIREWALL=POSITIVE]
+n_rules = 1|4294967295
+pkt_type = vlan_ipv4|qinq_ipv4
+#ipv6|vlan_ipv6|qinq_ipv6
+
+[FIREWALL=NEGATIVE]
+n_rules = -1|4294967296
+pkt_type = abcde
+
+[ROUTING=POSITIVE]
+n_routes = 1|4294967295
+#ip_da_offset=0|1|4294967295
+#n_arp_entries=0|4294967295
+#arp_key_offset=0|4294967295
+#next_hop_type=ipv4|vlan_ipv4|qinq_ipv4|mpls_ipv4|ipv6|vlan_ipv6|qinq_ipv6|mpls_ipv6
+#ttl=off|on
+#color_offset=0|4294967295
+ip_hdr_offset = 0|4294967295
+
+[ROUTING=NEGATIVE]
+n_routes = -1|4294967296
+#ip_da_offset=-1|4294967296
+#n_arp_entries=-1|4294967296
+#arp_key_offset=-1|4294967296
+#next_hop_type=abcd
+#ttl=abcd
+#color_offset=-1|4294967296
+ip_hdr_offset = -1|4294967296
+
+#[MEMPOOL=DEFAULD=PASS-THROUGH]
+#buffer_size=2304
+#pool_size=32768
+#cache_size=256
+#cpu=0
+
+#[NEGATIVE=MEMPOOL]
+#buffer_size=-1|4294967296|abcde
+#pool_size=-1|4294967296|abcde
+#cache_size=-1|4294967296|abcde
+#cpu=-1|4294967296|abcde
+
+#[POSITIVE=MEMPOOL]
+#buffer_size=2304|0|4294967295
+#pool_size=32768|512|4294967295
+#cache_size=256|1|512
+#cpu=0|1|4294967295
+
+#[LINK=DEFAULD=FIREWALL]
+#arp_q=0
+#tcp_sync_local_q=0
+#ip_local_q=0
+#tcp_local_q=0
+#udp_local_q=0
+#sctp_local_q=0
+#promisc=YES
+
+#[NEGATIVE=LINK]
+#arp_q =-1|128|abcde 
+#tcp_sync_local_q =-1|128|abcde
+#ip_local_q=-1|128|abcde
+#tcp_local_q=-1|128|abcde
+#udp_local_q=-1|128|abcde
+#sctp_local_q=-1|128|abcde
+#promisc=YESYES
+
+#[POSITIVE=LINK]
+#arp_q=0|127
+#tcp_sync_local_q=0|127
+#ip_local_q=0|127
+#tcp_local_q=0|127
+#udp_local_q=0|127
+#sctp_local_q=0|127
+#promisc =YES|NO
+
+#[RXQ=DEFAULD=FLOW_ACTIONS]
+#mempool=MEMPOOL0
+#size=128
+#burst=32
+
+#[NEGATIVE=RXQ]
+#mempool=-1|4694967296|abcdedf
+#size=-1|4694967296|abcdedf
+#burst=-1|4694967296|abcdedf
+
+#[POSITIVE=RXQ]
+#mempool=MEMPOOL0|MEMPOOL1|4294967295
+#size=128|0|4294967295
+#burst=32|0|4294967295
+
+#[TXQ=DEFAULD=FLOW_CLASSIFICATION]
+#size=512
+#burst=32
+#dropless=NO
+#n_retries=0
+
+#[NEGATIVE=TXQ]
+#size=0|3|-1|4694967296
+#burst=0|3|-1|4694967296
+#dropless=SSS
+#n_retries=-1|4694967296
+
+#[POSITIVE=TXQ]
+#size=512|64|2147483648
+#burst=32|2|1073741824
+#dropless=YES|NO
+#n_retries=0|1|4294967295
+
+#[SWQ=DEFAULD=PASS-THROUGH]
+#size=512
+#burst_read=256
+#burst_write=256
+#dropless=NO
+#n_retries=0
+#cpu=0
+
+#[NEGATIVE=SWQ]
+#size=3|0|-1|4694967296
+#burst_read=0|3|4694967297
+#burst_write=0|3|4694967297
+#dropless=YESYES
+#n_retries=-1|4694967296
+#cpu=-1|4694967296
+
+#[POSITIVE=SWQ]
+#size=512|2|134217728
+#burst_read=256|2|67108864
+#burst_write=256|2|67108864
+#dropless=NO|YES
+#n_retries=0|1|4294967295
+#cpu=0|1|4294967295|10
+
+#[TM=DEFAULD=PASS-THROUGH]
+#cfg= config-tm_profile.cfg
+#burst_read=64
+#burst_write=32
+
+#[NEGATIVE=TM]
+#cfg=config-tm.cfg
+#burst_read=-1|4294967296
+#write_read=-1|4294967296
+
+#[POSITIVE=TM]
+#cfg=config-tm_profile.cfg
+#burst_read=64|0|4294967295
+#burst_write=32|0|4294967295
+
+#[SOURCE=DEFAULD=PASS-THROUGH]
+#mempool=MEMPOOL0
+#burst=32
+
+#[NEGATIVE=SOURCE]
+#mempool=-1|4294967296|abcde
+#burst=-1|4294967296|abcde
+
+#[POSITIVE=SOURCE]
+#mempool=MEMPOOL0|0|4294967295
+#burst=32|0|4294967295
+
+#[SINK=DEFAULD=PASS-THROUGH]
+#size=64
+#cpu=0
+
+#[NEGATIVE=SINK]
+#size=0|3|-1|4294967296|abcde
+#cpu=-1|4294967296|abcde
+
+#[POSITIVE=SINK]
+#size=64|2|4294967294
+#cpu=0|1|4294967295
+
+#[MSGQ=DEFAULD=PASS-THROUGH]
+#size=64
+#cpu=0
+
+#[NEGATIVE=MSGQ]
+#size=0|3|-1|4294967296|abcde
+#cpu=-1|4294967296|abcde
+
+#[POSITIVE=MSGQ]
+#size=64|2|4294967294
+#cpu=0|1|4294967295
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-- 
1.9.3

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

* [dts] [PATCH V1 01/2] add ip_pipeline_cpu_utilization test code
  2016-08-23  9:26 [dts] [PATCH V1 01/2] add keep alive test code xu,gang
                   ` (2 preceding siblings ...)
  2016-08-23  9:26 ` [dts] [PATCH V1 02/2] add ip_pipeline cfg test plan xu,gang
@ 2016-08-23  9:26 ` xu,gang
  2016-08-23  9:26 ` [dts] [PATCH V1 02/2] add ip_pipeline cpu utilization test plan xu,gang
                   ` (7 subsequent siblings)
  11 siblings, 0 replies; 18+ messages in thread
From: xu,gang @ 2016-08-23  9:26 UTC (permalink / raw)
  To: dts; +Cc: xu,gang

Signed-off-by: xu,gang <gangx.xu@intel.com>
---
 tests/TestSuite_ip_pipeline_cpu_utilization.py | 106 +++++++++++++++++++++++++
 1 file changed, 106 insertions(+)
 create mode 100644 tests/TestSuite_ip_pipeline_cpu_utilization.py

diff --git a/tests/TestSuite_ip_pipeline_cpu_utilization.py b/tests/TestSuite_ip_pipeline_cpu_utilization.py
new file mode 100644
index 0000000..f267901
--- /dev/null
+++ b/tests/TestSuite_ip_pipeline_cpu_utilization.py
@@ -0,0 +1,106 @@
+#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 CPU utilization
+"""
+
+import dts
+import string
+import time
+import re
+import thread
+from test_case import TestCase
+from plotting import Plotting 
+from settings import HEADER_SIZE   
+from etgen import IxiaPacketGenerator
+from packet import Packet, sniff_packets, load_sniff_packets
+
+class Test_Ip_pipeline_CPU_utilization(TestCase):
+
+    def set_up_all(self):
+        """
+        Run at the start of each test suite.
+        """
+        self.dut_ports = self.dut.get_ports(self.nic)
+        self.verify(len(self.dut_ports) >= 2, "Insufficient ports")
+        cores = self.dut.get_core_list("1S/4C/1T")
+        self.coremask = dts.create_mask(cores)
+
+        self.path = "./build/ip_pipeline" 
+
+        # build sample app  
+        out = self.dut.build_dpdk_apps("./examples/ip_pipeline")
+        self.verify("Error" not in out, "compilation error 1") 
+        self.verify("No such file" not in out, "compilation error 2")
+         
+    def set_up(self):
+        """
+        Run before each test case.
+        """
+        pass
+
+    def scapy_send_package(self,a):
+        """
+        Send a packet to port
+        """
+        txport = self.tester.get_local_port(self.dut_ports[0])
+        mac = self.dut.get_mac_address(self.dut_ports[0])
+        txItf = self.tester.get_interface(txport)
+        self.tester.scapy_append('sendp([Ether(dst="%s")/IP()/UDP()/Raw(\'X\'*18)], iface="%s",count=%s)' % (mac, txItf,a))
+        self.tester.scapy_execute()
+
+    def test_Ip_pipeline_CPU_utilization(self):
+            
+        cmd = self.path + " -p 0xf -f ./config/edge_router_downstream.cfg -s ./config/edge_router_downstream.sh"
+        self.dut.send_expect("cd examples/ip_pipeline/","# ",50)
+        self.dut.send_expect(cmd,"#p 1 route ls",50)
+        self.scapy_send_package(1000)
+        self.dut.send_expect("","pipeline> ",5)
+        out = self.dut.send_expect("t 1 headroom","pipeline> ",10)
+        self.dut.send_expect("quit","# ",10)
+        self.verify(out > "0" , "headroom error")
+
+
+    def tear_down(self):
+        """
+        Run after each test case.
+        """
+        self.dut.kill_all()
+        time.sleep(2)
+
+    def tear_down_all(self):
+        """
+        Run after each test suite.
+        """
+        pass
-- 
1.9.3

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

* [dts] [PATCH V1 02/2] add ip_pipeline cpu utilization test plan
  2016-08-23  9:26 [dts] [PATCH V1 01/2] add keep alive test code xu,gang
                   ` (3 preceding siblings ...)
  2016-08-23  9:26 ` [dts] [PATCH V1 01/2] add ip_pipeline_cpu_utilization test code xu,gang
@ 2016-08-23  9:26 ` xu,gang
  2016-08-25  5:46   ` Liu, Yong
  2016-08-23  9:26 ` [dts] [PATCH V1 01/2] add ip_pipeline link_identification test code xu,gang
                   ` (6 subsequent siblings)
  11 siblings, 1 reply; 18+ messages in thread
From: xu,gang @ 2016-08-23  9:26 UTC (permalink / raw)
  To: dts; +Cc: xu,gang

Signed-off-by: xu,gang <gangx.xu@intel.com>
---
 .../ip_pipeline_cpu_utilization_test_plan.rst      | 42 ++++++++++++++++++++++
 1 file changed, 42 insertions(+)
 create mode 100644 test_plans/ip_pipeline_cpu_utilization_test_plan.rst

diff --git a/test_plans/ip_pipeline_cpu_utilization_test_plan.rst b/test_plans/ip_pipeline_cpu_utilization_test_plan.rst
new file mode 100644
index 0000000..cfe2c2c
--- /dev/null
+++ b/test_plans/ip_pipeline_cpu_utilization_test_plan.rst
@@ -0,0 +1,42 @@
+..  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.
+
+ip_pipeline_cpu_utilization_test_plan
+======================================
+
+make::
+     make -C examples/ip_pipeline/
+running::
+     ./build/ip_pipeline -p 0xf -f ./config/edge_router_downstream.cfg -s ./config/edge_router_downstream.sh
+
+check::
+     first send package to port,then 
+     t 1 headroom
+     check the utilization 
-- 
1.9.3

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

* [dts] [PATCH V1 01/2] add ip_pipeline link_identification test code
  2016-08-23  9:26 [dts] [PATCH V1 01/2] add keep alive test code xu,gang
                   ` (4 preceding siblings ...)
  2016-08-23  9:26 ` [dts] [PATCH V1 02/2] add ip_pipeline cpu utilization test plan xu,gang
@ 2016-08-23  9:26 ` xu,gang
  2016-08-25  5:50   ` Liu, Yong
  2016-08-23  9:26 ` [dts] [PATCH V1 02/2] add ip_pipeline link_identification test plan xu,gang
                   ` (5 subsequent siblings)
  11 siblings, 1 reply; 18+ messages in thread
From: xu,gang @ 2016-08-23  9:26 UTC (permalink / raw)
  To: dts; +Cc: xu,gang

Signed-off-by: xu,gang <gangx.xu@intel.com>
---
 tests/TestSuite_ip_pipeline_link_identification.py | 155 +++++++++++++++++++++
 1 file changed, 155 insertions(+)
 create mode 100644 tests/TestSuite_ip_pipeline_link_identification.py

diff --git a/tests/TestSuite_ip_pipeline_link_identification.py b/tests/TestSuite_ip_pipeline_link_identification.py
new file mode 100644
index 0000000..a21ab28
--- /dev/null
+++ b/tests/TestSuite_ip_pipeline_link_identification.py
@@ -0,0 +1,155 @@
+#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 ip_pipeline_link_identification.
+"""
+
+import dts
+import string
+import time
+import re
+import os
+from test_case import TestCase
+from plotting import Plotting 
+from settings import HEADER_SIZE   
+from etgen import IxiaPacketGenerator
+from packet import Packet, sniff_packets, load_sniff_packets
+
+class Test_ip_pipeline_link_identification(TestCase):
+
+    def set_up_all(self):
+        """
+        Run at the start of each test suite.
+        """
+        self.dut_ports = self.dut.get_ports(self.nic)
+        self.verify(len(self.dut_ports) >= 2, "Insufficient ports")
+        cores = self.dut.get_core_list("1S/4C/1T")
+        self.coremask = dts.create_mask(cores)
+       
+        self.packag_ip_pipeline() 
+        self.dut.session.copy_file_to("dep/ip_pipeline.tar.gz")
+        put = self.dut.send_expect("tar -zxvf ~/ip_pipeline.tar.gz -C ~","#",500)
+        self.verify("Error" not in put, "tar fail")
+        self.path = "./examples/ip_pipeline/build/ip_pipeline" 
+
+        # build sample app  
+        out = self.dut.build_dpdk_apps("./examples/ip_pipeline")
+        self.verify("Error" not in out, "compilation error 1") 
+        self.verify("No such file" not in out, "compilation error 2")
+         
+    def set_up(self):
+        """
+        Run before each test case.
+        """
+        pass
+
+    def replace_pci(self,filename,old,new):
+        try:
+            lines = open(filename,'r').readlines()
+            flen = len(lines) - 1
+            for i in range(flen):
+                if old in lines[i]:
+                    lines[i] = lines[i].replace(old,new)
+            open(filename,'w').writelines(lines)
+        except Exception,e:
+            print e
+
+    def packag_ip_pipeline(self):
+        rootdir = "dep/ip_pipeline/ip_pipeline_link_identification/postive/"
+        for parent,dirnames,filenames in os.walk(rootdir):
+            for filename in filenames:
+                self.replace_pci(parent + filename,"port0","%s" % self.dut.ports_info[0]['pci'])
+                self.replace_pci(parent + filename,"port1","%s" % self.dut.ports_info[1]['pci'])
+                self.replace_pci(parent + filename,"port2","%s" % self.dut.ports_info[2]['pci'])
+                self.replace_pci(parent + filename,"port3","%s" % self.dut.ports_info[3]['pci'])
+        rootdir = "dep/ip_pipeline/ip_pipeline_link_identification/negative/"
+        for parent,dirnames,filenames in os.walk(rootdir):
+            for filename in filenames:
+                self.replace_pci(parent + filename,"port0","%s" % self.dut.ports_info[0]['pci'])
+                self.replace_pci(parent + filename,"port1","%s" % self.dut.ports_info[1]['pci'])
+                self.replace_pci(parent + filename,"port2","%s" % self.dut.ports_info[2]['pci'])
+                self.replace_pci(parent + filename,"port3","%s" % self.dut.ports_info[3]['pci'])
+        self.tester.send_expect("cd dep/","#",10)
+        self.tester.send_expect("rm -rf ip_pipeline.tar.gz","#",10)
+        self.tester.send_expect("tar -czvf ip_pipeline.tar.gz ip_pipeline/","#",10)
+        self.tester.send_expect("cd ../","#",10)
+
+
+    def test_postive(self):
+        rootdir = "dep/ip_pipeline/ip_pipeline_link_identification/postive/"
+        for parent,dirnames,filenames in os.walk(rootdir):
+            for filename in filenames:                                
+                if "_f" in filename:
+                    cmd = self.path + " -f ~/ip_pipeline/ip_pipeline_link_identification/postive/%s" % filename
+                    self.dut.send_expect(cmd,"[PIPELINE1]",50)
+                    out = self.dut.send_expect("quit","# ",10)
+                    self.verify("Bye!" in out, "Test failed on %s" % filename)
+                elif "_pf" in filename:
+                    cmd = self.path + " -p f -f ~/ip_pipeline/ip_pipeline_link_identification/postive/%s" % filename
+                    self.dut.send_expect(cmd,"[PIPELINE1]",50)
+                    out = self.dut.send_expect("quit","# ",10)
+                    self.verify("Bye!" in out, "Test failed on %s" % filename)
+                
+
+    def test_negative(self):
+        rootdir = "dep/ip_pipeline/ip_pipeline_link_identification/negative/"
+        for parent,dirnames,filenames in os.walk(rootdir):
+            for filename in filenames:
+                if "_f" in filename:
+                    cmd = self.path + " -p 0x3 -f ~/ip_pipeline/ip_pipeline_link_identification/negative/%s" % filename
+                    out = self.dut.send_expect(cmd,"# ",50)
+                    self.verify("error" in out, "Test failed on %s" % filename)
+                elif "_1p" in filename:
+                    cmd = self.path + " -p 1 -f ~/ip_pipeline/ip_pipeline_link_identification/negative/%s" % filename
+                    out = self.dut.send_expect(cmd,"# ",50)
+                    self.verify("error" in out, "Test failed on %s" % filename)
+
+                elif "_3p" in filename:
+                    cmd = self.path + " -p 3 -f ~/ip_pipeline/ip_pipeline_link_identification/negative/%s" % filename
+                    out = self.dut.send_expect(cmd,"#",50)
+                    self.verify("error" in out, "Test failed on %s" % filename)
+
+
+    def tear_down(self):
+        """
+        Run after each test case.
+        """
+        self.dut.kill_all()
+        time.sleep(2)
+
+    def tear_down_all(self):
+        """
+        Run after each test suite.
+        """
+        pass
-- 
1.9.3

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

* [dts] [PATCH V1 02/2] add ip_pipeline link_identification test plan
  2016-08-23  9:26 [dts] [PATCH V1 01/2] add keep alive test code xu,gang
                   ` (5 preceding siblings ...)
  2016-08-23  9:26 ` [dts] [PATCH V1 01/2] add ip_pipeline link_identification test code xu,gang
@ 2016-08-23  9:26 ` xu,gang
  2016-08-23  9:26 ` [dts] [PATCH V1 01/2] add ip_pipeline parser_cleanup test code xu,gang
                   ` (4 subsequent siblings)
  11 siblings, 0 replies; 18+ messages in thread
From: xu,gang @ 2016-08-23  9:26 UTC (permalink / raw)
  To: dts; +Cc: xu,gang

Signed-off-by: xu,gang <gangx.xu@intel.com>
---
 .../ip_pipeline_link_identification_test_plan.rst  | 293 +++++++++++++++++++++
 1 file changed, 293 insertions(+)
 create mode 100644 test_plans/ip_pipeline_link_identification_test_plan.rst

diff --git a/test_plans/ip_pipeline_link_identification_test_plan.rst b/test_plans/ip_pipeline_link_identification_test_plan.rst
new file mode 100644
index 0000000..89a9bd7
--- /dev/null
+++ b/test_plans/ip_pipeline_link_identification_test_plan.rst
@@ -0,0 +1,293 @@
+Description
+Link identification has 2 goals, first is to create a brand new option in CFG file's LINK
+section, so a link can be confgiured specific physical port using the PCI address. So the
+user can either use original "-p" option, or the new LINK section item to identify the 
+physical port he/she wants to use; Second is to maintain the original "-p" option as it is.
+That is, the following logic shall be applied so that two ways will not mix.
+
+--------------------------------------------------------------------
+    |a. "-p" cmd option exists      | b. "-p" cmd option not exist
+--------------------------------------------------------------------
+1   |EAL section "pci_whitelist"    |EAL section "pci_whitelist" is
+    |option is allowed and optional |NOT allowed
+--------------------------------------------------------------------
+2       |LINK section "pci_bdf" option  |LINK section "pci_bdf" option
+        |is NOT allowed                                 |is MANDATORY
+---------------------------------------------------------------------------
+1. Regression for all the old CFG files(regression team should cover it)
+---------------------------------------------------------------------------
+
+----------------------------------------------------------------
+2. CFG file containing 1 "pci_whitelist" section with "-p" exist shall work
+([root@dpdk_testserver03 ip_pipeline]# ./build/ip_pipeline -p 1 -f ./config/pt1_2ports_link_iden.cfg  
+Parse error in section "EAL", entry "pci_whitelist": too many elements
+
+Aborted (core dumped))
+----------------------------------------------------------------
+Config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+
+[PIPELINE1]
+type = PASS-THROUGH
+core = s1c1
+pktq_in = RXQ0.0 RXQ1.0
+pktq_out = TXQ1.0 TXQ0.0
+
+[EAL]
+pci_whitelist = 0000:85:00.0
+Run the command ./build/ip_pipeline -p 1 -f ./config/pt1_2ports_link_iden.cfg, check that the app runs successfully
+
+----------------------------------------------------------------
+3. CFG file containing 2 "pci_whitelist" sections with "-p" exists
+([root@dpdk_testserver03 ip_pipeline]# ./build/ip_pipeline -p 3 -f ./config/pt1_2ports_link_iden.cfg 
+Parse error in section "EAL", entry "pci_whitelist": too many elements
+
+Aborted (core dumped))
+----------------------------------------------------------------
+Config file as follows
+
+
+Run the command ./build/ip_pipeline -p 3 -f ./config/pt1_2ports_link_iden.cfg, check that the app runs successfully
+
+----------------------------------------------------------------
+4. CFG file containing 4 "pci_whitelist" sections with "-p" exists
+----------------------------------------------------------------
+Config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+
+[PIPELINE1]
+type = PASS-THROUGH
+core = s1c1
+pktq_in = RXQ0.0 RXQ1.0 RXQ2.0 RXQ3.0
+pktq_out = TXQ0.0 TXQ1.0 TXQ2.0 TXQ3.0
+
+[EAL]
+pci_whitelist = 0000:83:00.0
+pci_whitelist = 0000:83:00.1
+pci_whitelist = 0000:85:00.0
+pci_whitelist = 0000:85:00.1
+Run the command ./build/ip_pipeline -p f -f ./config/pt1_2ports_link_iden.cfg, check that the app runs successfully
+
+----------------------------------------------------------------
+5. CFG file containing "pci_bdf" in LINK section shall NOT work with "-p" exists
+([root@dpdk_testserver03 ip_pipeline]# ./build/ip_pipeline -p 3 -f ./config/pt1_2ports_link_iden.cfg  
+Parse error in section "LINK0", entry "pci_bdf": entry not allowed (port_mask is provided)
+
+Aborted (core dumped))
+----------------------------------------------------------------
+Config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+
+[PIPELINE1]
+type = PASS-THROUGH
+core = s1c1
+pktq_in = RXQ0.0 RXQ1.0 
+pktq_out = TXQ1.0 TXQ0.0
+
+[LINK0]
+pci_bdf = 0000:85:00.0
+
+[LINK1]
+pci_bdf = 0000:85:00.1
+Run the command ./build/ip_pipeline -p 3 -f ./config/pt1_2ports_link_iden.cfg, check that the app runs successfully, if yes, test fail, otherwise, test pass
+
+----------------------------------------------------------------
+6. CFG file containing "pci_bdf" in LINK section and EAL section shall NOT work with "-p" exists(EAL and LINK not matches)
+([root@dpdk_testserver03 ip_pipeline]# ./build/ip_pipeline -p 3 -f ./config/pt1_2ports_link_iden.cfg  
+Parse error in section "LINK0", entry "pci_bdf": entry not allowed (port_mask is provided)
+
+Aborted (core dumped))
+----------------------------------------------------------------
+Config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+
+[PIPELINE1]
+type = PASS-THROUGH
+core = s1c1
+pktq_in = RXQ0.0 RXQ1.0 
+pktq_out = TXQ1.0 TXQ0.0
+
+[EAL]
+pci_whitelist = 0000:83:00.0
+pci_whitelist = 0000:83:00.1
+
+[LINK0]
+pci_bdf = 0000:85:00.0
+
+[LINK1]
+pci_bdf = 0000:85:00.1
+Run the command ./build/ip_pipeline -p 3 -f ./config/pt1_2ports_link_iden.cfg, check that the app runs successfully, if yes, test fail, otherwise, test pass
+
+----------------------------------------------------------------
+7. CFG file containing "pci_bdf" in LINK section and EAL section shall NOT work with "-p" exists(EAL and LINK matches)
+([root@dpdk_testserver03 ip_pipeline]# ./build/ip_pipeline -p 3 -f ./config/pt1_2ports_link_iden.cfg  
+Parse error in section "LINK0", entry "pci_bdf": entry not allowed (port_mask is provided)
+
+Aborted (core dumped))
+----------------------------------------------------------------
+Config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+
+[PIPELINE1]
+type = PASS-THROUGH
+core = s1c1
+pktq_in = RXQ0.0 RXQ1.0 
+pktq_out = TXQ1.0 TXQ0.0
+
+[EAL]
+pci_whitelist = 0000:85:00.0
+pci_whitelist = 0000:85:00.1
+
+[LINK0]
+pci_bdf = 0000:85:00.0
+
+[LINK1]
+pci_bdf = 0000:85:00.1
+Run the command ./build/ip_pipeline -p 3 -f ./config/pt1_2ports_link_iden.cfg, check that the app runs successfully, if yes, test fail, otherwise, test pass
+
+----------------------------------------------------------------
+8. CFG file containing "pci_whitelist" in EAL section shall NOT work with "-p" absence
+([root@dpdk_testserver03 ip_pipeline]# ./build/ip_pipeline -f ./config/pt1_2ports_link_iden.cfg      
+Parse error in section "EAL", entry "pci_whitelist": entry to be generated by the application (port_mask not provided)
+
+Aborted (core dumped))
+----------------------------------------------------------------
+Config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+
+[PIPELINE1]
+type = PASS-THROUGH
+core = s1c1
+pktq_in = RXQ0.0 RXQ1.0 
+pktq_out = TXQ1.0 TXQ0.0
+
+[EAL]
+pci_whitelist = 0000:85:00.0
+pci_whitelist = 0000:85:00.1
+Run the command ./build/ip_pipeline -f ./config/pt1_2ports_link_iden.cfg, check that the app runs successfully, if yes, test fail, otherwise, test pass
+
+
+----------------------------------------------------------------
+9. CFG file containing "pci_bdf" in 1 LINK sections shall work with "-p" absence
+----------------------------------------------------------------
+Config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+
+[PIPELINE1]
+type = PASS-THROUGH
+core = s1c1
+pktq_in = RXQ0.0
+pktq_out = TXQ0.0
+
+[LINK0]
+pci_bdf = 0000:85:00.0
+
+Run the command ./build/ip_pipeline -f ./config/pt1_2ports_link_iden.cfg, check that the app runs successfully, if yes, test pass, otherwise, test fail
+
+----------------------------------------------------------------
+10. CFG file containing "pci_bdf" in 2 LINK sections shall work with "-p" absence
+----------------------------------------------------------------
+Config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+
+[PIPELINE1]
+type = PASS-THROUGH
+core = s1c1
+pktq_in = RXQ0.0 RXQ1.0 
+pktq_out = TXQ1.0 TXQ0.0
+
+[LINK0]
+pci_bdf = 0000:85:00.0
+
+[LINK1]
+pci_bdf = 0000:85:00.1
+Run the command ./build/ip_pipeline -f ./config/pt1_2ports_link_iden.cfg, check that the app runs successfully, if yes, test pass, otherwise, test fail
+
+----------------------------------------------------------------
+11. CFG file containing "pci_bdf" in 4 LINK sections shall work with "-p" absence
+----------------------------------------------------------------
+Config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+
+[PIPELINE1]
+type = PASS-THROUGH
+core = s1c1
+pktq_in = RXQ0.0 RXQ1.0 RXQ2.0 RXQ3.0
+pktq_out = TXQ0.0 TXQ1.0 TXQ2.0 TXQ3.0
+
+[LINK0]
+pci_bdf = 0000:83:00.0
+
+[LINK1]
+pci_bdf = 0000:83:00.1
+
+[LINK2]
+pci_bdf = 0000:85:00.0
+
+[LINK3]
+pci_bdf = 0000:85:00.1
+Run the command ./build/ip_pipeline -f ./config/pt1_2ports_link_iden.cfg, check that the app runs successfully, if yes, test pass, otherwise, test fail
+
+----------------------------------------------------------------
+12. CFG file containing "pci_bdf" in 1 LINK sections and 2 LINKS exists shall work with "-p" absence
+----------------------------------------------------------------
+Config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+
+[PIPELINE1]
+type = PASS-THROUGH     
+core = s1c1
+pktq_in = RXQ0.0 RXQ1.0
+pktq_out = TXQ0.0 TXQ1.0
+
+[LINK0]
+pci_bdf = 0000:85:00.0
+
+[LINK1]
+pci_bdf = 0000:85:00.1
+Run the command ./build/ip_pipeline -f ./config/pt1_2ports_link_iden.cfg, check that the app runs successfully, if yes, test pass, otherwise, test fail
+
+----------------------------------------------------------------
+13. CFG file containing "pci_bdf" in 1 LINK sections and 2 LINKS exists shall NOT work with "-p" exists
+[root@dpdk_testserver03 ip_pipeline]# ./build/ip_pipeline -p 3 -f ~/config/link_identification/link_iden_case_13.cfg
+Parse error in section "LINK0", entry "pci_bdf": entry not allowed (port_mask is provided)
+
+Aborted (core dumped)
+----------------------------------------------------------------
+Config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+
+[PIPELINE1]
+type = PASS-THROUGH
+core = s1c1
+pktq_in = RXQ0.0 RXQ1.0
+pktq_out = TXQ0.0 TXQ1.0
+
+[LINK0]
+pci_bdf = 0000:85:00.0
+
+[LINK1]
+pci_bdf = 0000:85:00.1
+Run the command ./build/ip_pipeline -p 3 -f ./config/pt1_2ports_link_iden.cfg, check that the app runs successfully, if yes, test pass, otherwise, test fail
-- 
1.9.3

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

* [dts] [PATCH V1 01/2] add ip_pipeline parser_cleanup test code
  2016-08-23  9:26 [dts] [PATCH V1 01/2] add keep alive test code xu,gang
                   ` (6 preceding siblings ...)
  2016-08-23  9:26 ` [dts] [PATCH V1 02/2] add ip_pipeline link_identification test plan xu,gang
@ 2016-08-23  9:26 ` xu,gang
  2016-08-23  9:26 ` [dts] [PATCH V1 2/2] add ip_pipeline parser_cleanup test plan xu,gang
                   ` (3 subsequent siblings)
  11 siblings, 0 replies; 18+ messages in thread
From: xu,gang @ 2016-08-23  9:26 UTC (permalink / raw)
  To: dts; +Cc: xu,gang

Signed-off-by: xu,gang <gangx.xu@intel.com>
---
 tests/TestSuite_ip_pipeline_parser_cleanup.py | 105 ++++++++++++++++++++++++++
 1 file changed, 105 insertions(+)
 create mode 100644 tests/TestSuite_ip_pipeline_parser_cleanup.py

diff --git a/tests/TestSuite_ip_pipeline_parser_cleanup.py b/tests/TestSuite_ip_pipeline_parser_cleanup.py
new file mode 100644
index 0000000..4e7dd8d
--- /dev/null
+++ b/tests/TestSuite_ip_pipeline_parser_cleanup.py
@@ -0,0 +1,105 @@
+#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 Ip_pipeline_parser_cleanup.
+"""
+
+import dts
+import string
+import time
+import re
+import os
+from test_case import TestCase
+from plotting import Plotting 
+from settings import HEADER_SIZE   
+from etgen import IxiaPacketGenerator
+from packet import Packet, sniff_packets, load_sniff_packets
+
+class Test_Ip_pipeline_parser_cleanup(TestCase):
+
+    def set_up_all(self):
+        """
+        Run at the start of each test suite.
+        """
+        self.dut_ports = self.dut.get_ports(self.nic)
+        self.verify(len(self.dut_ports) >= 2, "Insufficient ports")
+        cores = self.dut.get_core_list("1S/4C/1T")
+        self.coremask = dts.create_mask(cores)
+
+        self.path = "./examples/ip_pipeline/build/ip_pipeline" 
+
+        self.dut.session.copy_file_to("dep/ip_pipeline.tar.gz")
+        
+        self.dut.send_expect("tar -zxvf ~/ip_pipeline.tar.gz -C ~","#",50)
+
+        # build sample app  
+        out = self.dut.build_dpdk_apps("./examples/ip_pipeline")
+        self.verify("Error" not in out, "compilation error 1") 
+        self.verify("No such file" not in out, "compilation error 2")
+         
+    def set_up(self):
+        """
+        Run before each test case.
+        """
+        pass
+
+    def test_postive(self):
+        rootdir = "dep/ip_pipeline/ip_pipeline_parser_cleanup/postive/"
+        for parent,dirnames,filenames in os.walk(rootdir):
+            for filename in filenames:
+                cmd = self.path + " -p 0x3 -f ~/ip_pipeline/ip_pipeline_parser_cleanup/postive/%s" % filename
+                self.dut.send_expect(cmd,"[PIPELINE1]",50)
+                out = self.dut.send_expect("quit","# ",10)
+                self.verify("Bye!" in out, "Test failed on %s" % filename)
+
+    def test_negative(self):
+        rootdir = "dep/ip_pipeline/ip_pipeline_parser_cleanup/negative/"
+        for parent,dirnames,filenames in os.walk(rootdir):
+            for filename in filenames:
+                cmd = self.path + " -p 0x3 -f ~/ip_pipeline/ip_pipeline_parser_cleanup/negative/%s" % filename
+                out = self.dut.send_expect(cmd,"# ",50)
+                self.verify("error" in out, "Test failed on %s" % filename)
+
+    def tear_down(self):
+        """
+        Run after each test case.
+        """
+        self.dut.kill_all()
+        time.sleep(2)
+
+    def tear_down_all(self):
+        """
+        Run after each test suite.
+        """
+        pass
-- 
1.9.3

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

* [dts] [PATCH V1 2/2] add ip_pipeline parser_cleanup test plan
  2016-08-23  9:26 [dts] [PATCH V1 01/2] add keep alive test code xu,gang
                   ` (7 preceding siblings ...)
  2016-08-23  9:26 ` [dts] [PATCH V1 01/2] add ip_pipeline parser_cleanup test code xu,gang
@ 2016-08-23  9:26 ` xu,gang
  2016-08-25  2:41   ` Liu, Yong
  2016-08-23  9:26 ` [dts] [PATCH V1 1/2] add ip_pipeline source_sink test code xu,gang
                   ` (2 subsequent siblings)
  11 siblings, 1 reply; 18+ messages in thread
From: xu,gang @ 2016-08-23  9:26 UTC (permalink / raw)
  To: dts; +Cc: xu,gang

Signed-off-by: xu,gang <gangx.xu@intel.com>
---
 .../ip_pipeline_parser_cleanup_test_plan.rst       | 373 +++++++++++++++++++++
 1 file changed, 373 insertions(+)
 create mode 100644 test_plans/ip_pipeline_parser_cleanup_test_plan.rst

diff --git a/test_plans/ip_pipeline_parser_cleanup_test_plan.rst b/test_plans/ip_pipeline_parser_cleanup_test_plan.rst
new file mode 100644
index 0000000..51b5d55
--- /dev/null
+++ b/test_plans/ip_pipeline_parser_cleanup_test_plan.rst
@@ -0,0 +1,373 @@
+1. Test config parser for pipeline passthrough
+
+2. Test config parser for pipeline flow classification(need to test based on bugs raised)
+
+3. Test config parser for pipeline flow action
+
+4. Test config parser for pipeline firewall
+
+5. Test config parser for pipeline routing
+
+6. Add multiple whitespaces between argumetns in pktq_in/out and msgq_in/out section
+
+7. Create cfg files with all kinds of errors(like the section not supposed to be there, or out of range value)
+
+8. In pipeline specific cfg section, write n_rules=4k/64k/512k/16M and check if the table memory have the same size of n_rules=4096/65536... exact values
+(problems is how to check the table memory, need to check with dev???)
+
+--------------------------------------------------
+1. An invalid entry should be recognized(negative)
+--------------------------------------------------
+Config file as follows, pipeline is passthrough
+[PIPELINE0]
+type = MASTER
+core = 0
+
+[PIPELINE1]
+type = PASS-THROUGH
+core = s1c1
+pktq_in = RXQ0.0 RXQ1.0
+pktq_out = TXQ1.0 TXQ0.0
+dma_src_offset = 278; mbuf (128) + headroom (128) + 1st ethertype offset (14) + ttl offset within ip header = 278 (ipv4)
+dma_dst_offset = 128; mbuf (128)
+dma_size = 16
+dma_src_mask = 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF
+dma_hash_offset = 144; (dma_dst_offset+dma_size)
+lb = hash
+test = 123
+Command to run: ./build/ip_pipeline -p 3 -f ./config/parsercleanup/pt1_mesgq_2ports.cfg
+check that an invalid entry is recognized by config parser, "lb" is not a recognized entry, it should report the error, if yes, test pass, otherwise, test fail
+
+pipeline> [APP] Initializing PIPELINE1 ...
+[PIPELINE1] Pass-through
+Parse error in section "PIPELINE1": invalid entry "test"
+PANIC in app_init_pipelines():
+Pipeline instance "PIPELINE1" back-end init error
+7: [./build/ip_pipeline() [0x432615]]
+6: [/lib64/libc.so.6(__libc_start_main+0xf5) [0x33dca21d65]]
+5: [./build/ip_pipeline(main+0x5f) [0x43187f]]
+4: [./build/ip_pipeline(app_init+0x15b8) [0x4419e8]]
+3: [./build/ip_pipeline() [0x43f85b]]
+2: [./build/ip_pipeline(__rte_panic+0xc9) [0x42c33c]]
+1: [./build/ip_pipeline(rte_dump_stack+0x1a) [0x4d5dca]]
+Aborted (core dumped)
+
+--------------------------------------------------------------
+2. Multiple whitespaces between arguments in pktq_in entry
+--------------------------------------------------------------
+Config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+
+[PIPELINE1]
+type = PASS-THROUGH
+core = s1c1
+pktq_in = RXQ0.0  RXQ1.0
+pktq_out = TXQ1.0 TXQ0.0
+dma_src_offset = 278; mbuf (128) + headroom (128) + 1st ethertype offset (14) + ttl offset within ip header = 278 (ipv4)
+dma_dst_offset = 128; mbuf (128)
+dma_size = 16
+dma_src_mask = 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF
+dma_hash_offset = 144; (dma_dst_offset+dma_size)
+Command to run: ./build/ip_pipeline -p 3 -f ./config/parsercleanup/pt1_mesgq_2ports.cfg
+Check that the config parser can recognize the multiple whitespaces between each argument of pktq_in. If yes, test passed, otherwise, test failed.
+
+--------------------------------------------------------------
+3. Multiple whitespaces between arguments in pktq_out entry
+--------------------------------------------------------------
+Config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+
+[PIPELINE1]
+type = PASS-THROUGH
+core = s1c1
+pktq_in = RXQ0.0 RXQ1.0
+pktq_out = TXQ1.0  TXQ0.0
+dma_src_offset = 278; mbuf (128) + headroom (128) + 1st ethertype offset (14) + ttl offset within ip header = 278 (ipv4)
+dma_dst_offset = 128; mbuf (128)
+dma_size = 16
+dma_src_mask = 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF
+dma_hash_offset = 144; (dma_dst_offset+dma_size)
+;lb = hash
+Command to run: ./build/ip_pipeline -p 3 -f ./config/parsercleanup/pt1_mesgq_2ports.cfg
+Check that the config parser can recognize the multiple whitespaces between each argument of pktq_out. If yes, test passed, otherwise, test failed.
+
+--------------------------------------------------------------
+4. Multiple whitespaces between arguments in msgq_in entry
+--------------------------------------------------------------
+Config file as follows
+[PIPELINE0]
+type = MASTER
+core = s0c0
+;msgq_in = MSGQ-REQ-PIPELINE0 ; for customer in .cfg.out, can not assign in .cfg file, because these are used as the communication for master and other pipeline.
+;msgq_out = MSGQ-RSP-PIPELINE0
+timer_period = 1
+
+[PIPELINE1]
+type = PASS-THROUGH
+core = s0c1
+pktq_in = RXQ0.0 RXQ1.0
+pktq_out = TXQ0.0 TXQ1.0
+msgq_in = MSGQ0  MSGQ1 MSGQ2 MSGQ3 ;MSGQ-REQ-PIPELINE1, dev will confirm on how to use it
+msgq_out = MSGQ0 MSGQ1 MSGQ2 MSGQ3 ;MSGQ-RSP-PIPELINE1
+timer_period = 100
+
+Command to run: ./build/ip_pipeline -p 3 -f ./config/parsercleanup/pt1_mesgq_2ports.cfg
+Check that the config parser can recognize the multiple whitespaces between each argument of msgq_in. If yes, test passed, otherwise, test failed.
+
+--------------------------------------------------------------
+5. Multiple whitespaces between arguments in msgq_out entry
+--------------------------------------------------------------
+Config file as follows
+[PIPELINE0]
+type = MASTER
+core = s0c0
+;msgq_in = MSGQ-REQ-PIPELINE0
+;msgq_out = MSGQ-RSP-PIPELINE0
+timer_period = 1
+
+[PIPELINE1]
+type = PASS-THROUGH
+core = s0c1
+pktq_in = RXQ0.0 RXQ1.0
+pktq_out = TXQ0.0 TXQ1.0
+msgq_in = MSGQ0 MSGQ1 MSGQ2 MSGQ3 ;MSGQ-REQ-PIPELINE1
+msgq_out = MSGQ0        MSGQ1 MSGQ2 MSGQ3 ;MSGQ-RSP-PIPELINE1
+timer_period = 100
+
+Command to run: ./build/ip_pipeline -p 3 -f ./config/parsercleanup/pt1_mesgq_2ports.cfg
+Check that the config parser can recognize the multiple whitespaces between each argument of msgq_in. If yes, test passed, otherwise, test failed.
+
+-----------------------------------
+6. Not recognized section(negative)
+-----------------------------------
+Config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+
+[PIPELINE1]
+type = PASS-THROUGH
+core = s1c1
+pktq_in = RXQ0.0 RXQ1.0
+pktq_out = TXQ1.0 TXQ0.0
+dma_src_offset = 278; mbuf (128) + headroom (128) + 1st ethertype offset (14) + ttl offset within ip header = 278 (ipv4)
+dma_dst_offset = 128; mbuf (128)
+dma_size = 16
+dma_src_mask = 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF
+dma_hash_offset = 144; (dma_dst_offset+dma_size)
+;lb = hash
+
+[TESTSECTION]
+type = flow classification
+
+Command to run: ./build/ip_pipeline -p 3 -f ./config/parsercleanup/pt1_2ports.cfg
+Check that the config parser can report out the invalid section and print out "CFG:....." messages. If yes, test passed, otherwise, test failed.
+
+---------------------------------
+7. Not recognized entry(negative)
+---------------------------------
+Config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+
+[PIPELINE1]
+type = PASS-THROUGH
+core = s1c1
+pktq_in = RXQ0.0 RXQ1.0
+pktq_out = TXQ1.0 TXQ0.0
+dma_src_offset = 278; mbuf (128) + headroom (128) + 1st ethertype offset (14) + ttl offset within ip header = 278 (ipv4)
+dma_dst_offset = 128; mbuf (128)
+dma_size = 16
+dma_src_mask = 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF
+dma_hash_offset = 144; (dma_dst_offset+dma_size)
+;lb = hash
+test = value
+
+Command to run: ./build/ip_pipeline -p 3 -f ./config/parsercleanup/pt1_2ports.cfg
+Check that the config parser can report out the invalid section and print out "CFG:....." messages. If yes, test passed, otherwise, test failed.
+
+--------------------------------------------------------------
+8. Check that the n_rules can equal to 4k and the table memory have the same size of n_rules=4096(need to check with dev how to check the table memory)
+firewall can not be seem, use flow classifcaion, n_flows, check table size
+[PIPELINE2] Flow classification
+TABLE: rte_table_hash_create_key16_ext: Hash table memory footprint is 397440 bytes
+--------------------------------------------------------------
+Config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+
+[PIPELINE1]
+type = PASS-THROUGH
+core = s1c1
+pktq_in = RXQ0.0 RXQ1.0
+pktq_out = SWQ0 SWQ1
+dma_size = 16
+dma_dst_offset = 192; mbuf (128) + 64
+dma_src_offset = 278; mbuf (128) + headroom (128) + ethernet header (14) + ttl offset within ip header (8) = 278
+dma_src_mask = 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF; ipv4 5-tuple
+dma_hash_offset = 208; dma_dst_offset + dma_size
+
+[PIPELINE2]
+type = FLOW_CLASSIFICATION
+core = s1c2
+pktq_in = SWQ0 SWQ1
+pktq_out = TXQ1.0 TXQ0.0
+n_flows = 4k
+key_offset = 192; dma_dst_offset
+key_size = 16; dma_size
+hash_offset = 208; dma_hash_offset = 80
+
+Command to run: ./build/ip_pipeline -p 3 -f ./config/parsercleanup/fc_2ports.cfg
+Check that app runs successfully and the table memory have the same size of n_flows=4096 If yes, test passed, otherwise, test failed.
+
+--------------------------------------------------------------
+9. Check that the n_rules can equal to 64k and the table memory have the same size of n_rules=65536(need to check with dev how to check the table memory)
+[PIPELINE2] Flow classification
+TABLE: rte_table_hash_create_key16_ext: Hash table memory footprint is 6357120 bytes
+--------------------------------------------------------------
+Config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+
+[PIPELINE1]
+type = PASS-THROUGH
+core = s1c1
+pktq_in = RXQ0.0 RXQ1.0
+pktq_out = SWQ0 SWQ1
+dma_size = 16
+dma_dst_offset = 192; mbuf (128) + 64
+dma_src_offset = 278; mbuf (128) + headroom (128) + ethernet header (14) + ttl offset within ip header (8) = 278
+dma_src_mask = 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF; ipv4 5-tuple
+dma_hash_offset = 208; dma_dst_offset + dma_size
+
+[PIPELINE2]
+type = FLOW_CLASSIFICATION
+core = s1c2
+pktq_in = SWQ0 SWQ1
+pktq_out = TXQ1.0 TXQ0.0
+n_flows = 64k
+key_offset = 192; dma_dst_offset
+key_size = 16; dma_size
+hash_offset = 208; dma_hash_offset = 80
+
+Command to run: ./build/ip_pipeline -p 3 -f ./config/parsercleanup/fc_2ports.cfg
+Check that app runs successfully and the table memory have the same size of n_rules=65536 If yes, test passed, otherwise, test failed.
+
+--------------------------------------------------------------
+10. Check that the n_rules can equal to 512k and the table memory have the same size of n_rules=524288(need to check with dev how to check the table memory)
+[PIPELINE2] Flow classification
+TABLE: rte_table_hash_create_key16_ext: Hash table memory footprint is 50856064 bytes
+--------------------------------------------------------------
+Config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+
+[PIPELINE1]
+type = PASS-THROUGH
+core = s1c1
+pktq_in = RXQ0.0 RXQ1.0
+pktq_out = SWQ0 SWQ1
+dma_size = 16
+dma_dst_offset = 192; mbuf (128) + 64
+dma_src_offset = 278; mbuf (128) + headroom (128) + ethernet header (14) + ttl offset within ip header (8) = 278
+dma_src_mask = 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF; ipv4 5-tuple
+dma_hash_offset = 208; dma_dst_offset + dma_size
+
+[PIPELINE2]
+type = FLOW_CLASSIFICATION
+core = s1c2
+pktq_in = SWQ0 SWQ1
+pktq_out = TXQ1.0 TXQ0.0
+n_flows = 512k
+key_offset = 192; dma_dst_offset
+key_size = 16; dma_size
+hash_offset = 208; dma_hash_offset = 80
+
+Command to run: ./build/ip_pipeline -p 3 -f ./config/parsercleanup/fc_2ports.cfg
+Check that app runs successfully and the table memory have the same size of n_rules=524288 If yes, test passed, otherwise, test failed.
+
+--------------------------------------------------------------
+11. Check that the n_rules can equal to 16M and the table memory have the same size of n_rules=16777216(need to check with dev how to check the table memory), maximum is 2^32, use 2^32+1 to test out of range
+[PIPELINE2] Flow classification
+TABLE: rte_table_hash_create_key16_ext: Hash table memory footprint is 1627390080 bytes
+--------------------------------------------------------------
+Config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+
+[PIPELINE1]
+type = PASS-THROUGH
+core = s1c1
+pktq_in = RXQ0.0 RXQ1.0
+pktq_out = SWQ0 SWQ1
+dma_size = 16
+dma_dst_offset = 192; mbuf (128) + 64
+dma_src_offset = 278; mbuf (128) + headroom (128) + ethernet header (14) + ttl offset within ip header (8) = 278
+dma_src_mask = 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF; ipv4 5-tuple
+dma_hash_offset = 208; dma_dst_offset + dma_size
+
+[PIPELINE2]
+type = FLOW_CLASSIFICATION
+core = s1c2
+pktq_in = SWQ0 SWQ1
+pktq_out = TXQ1.0 TXQ0.0
+n_flows = 16M
+key_offset = 192; dma_dst_offset
+key_size = 16; dma_size
+hash_offset = 208; dma_hash_offset = 80
+
+Command to run: ./build/ip_pipeline -p 3 -f ./config/parsercleanup/fc_2ports.cfg
+Check that app runs successfully and the table memory have the same size of n_rules=16777216 If yes, test passed, otherwise, test failed.
+
+--------------------------------------------------------------
+12. Check that the n_rules can equal to 16M+1 and the table memory have the same size of n_rules=16777216(need to check with dev how to check the table memory), maximum is 2^32, use 2^32+1 to test out of range
+[PIPELINE2] Flow classification
+Parse error in section "PIPELINE2": entry "n_flows" has invalid value ("16M+1")
+PANIC in app_init_pipelines():
+Pipeline instance "PIPELINE2" back-end init error
+7: [./build/ip_pipeline() [0x431925]]
+6: [/lib64/libc.so.6(__libc_start_main+0xf5) [0x33dca21d65]]
+5: [./build/ip_pipeline(main+0x5f) [0x4304ff]]
+4: [./build/ip_pipeline(app_init+0x13fb) [0x43f3bb]]
+3: [./build/ip_pipeline() [0x43d449]]
+2: [./build/ip_pipeline(__rte_panic+0xc9) [0x42af1a]]
+1: [./build/ip_pipeline(rte_dump_stack+0x1a) [0x4c8c6a]]
+Aborted (core dumped)
+--------------------------------------------------------------
+Config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+
+[PIPELINE1]
+type = PASS-THROUGH
+core = s1c1
+pktq_in = RXQ0.0 RXQ1.0
+pktq_out = SWQ0 SWQ1
+dma_size = 16
+dma_dst_offset = 192; mbuf (128) + 64
+dma_src_offset = 278; mbuf (128) + headroom (128) + ethernet header (14) + ttl offset within ip header (8) = 278
+dma_src_mask = 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF; ipv4 5-tuple
+dma_hash_offset = 208; dma_dst_offset + dma_size
+
+[PIPELINE2]
+type = FLOW_CLASSIFICATION
+core = s1c2
+pktq_in = SWQ0 SWQ1
+pktq_out = TXQ1.0 TXQ0.0
+n_flows = 16M+1
+key_offset = 192; dma_dst_offset
+key_size = 16; dma_size
+hash_offset = 208; dma_hash_offset = 80
+
+Command to run: ./build/ip_pipeline -p 3 -f ./config/parsercleanup/fc_2ports.cfg
+Check that app reports errors, if yes, test pass, otherwise, test fail
-- 
1.9.3

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

* [dts] [PATCH V1 1/2] add ip_pipeline source_sink test code
  2016-08-23  9:26 [dts] [PATCH V1 01/2] add keep alive test code xu,gang
                   ` (8 preceding siblings ...)
  2016-08-23  9:26 ` [dts] [PATCH V1 2/2] add ip_pipeline parser_cleanup test plan xu,gang
@ 2016-08-23  9:26 ` xu,gang
  2016-08-25  2:36   ` Liu, Yong
  2016-08-23  9:26 ` [dts] [PATCH V1 2/2] add ip_pipeline source_sink test plan xu,gang
  2016-08-25  5:38 ` [dts] [PATCH V1 01/2] add keep alive test code Liu, Yong
  11 siblings, 1 reply; 18+ messages in thread
From: xu,gang @ 2016-08-23  9:26 UTC (permalink / raw)
  To: dts; +Cc: xu,gang

Signed-off-by: xu,gang <gangx.xu@intel.com>
---
 tests/TestSuite_ip_pipeline_source_sink.py | 194 +++++++++++++++++++++++++++++
 1 file changed, 194 insertions(+)
 create mode 100644 tests/TestSuite_ip_pipeline_source_sink.py

diff --git a/tests/TestSuite_ip_pipeline_source_sink.py b/tests/TestSuite_ip_pipeline_source_sink.py
new file mode 100644
index 0000000..f60c75c
--- /dev/null
+++ b/tests/TestSuite_ip_pipeline_source_sink.py
@@ -0,0 +1,194 @@
+#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 ip_pipeline_source_sink.
+"""
+
+import dts
+import string
+import time
+import re
+import os
+from test_case import TestCase
+from plotting import Plotting 
+from settings import HEADER_SIZE   
+from etgen import IxiaPacketGenerator
+from packet import Packet, sniff_packets, load_sniff_packets
+
+class Test_ip_pipeline_source_sink(TestCase):
+
+    def set_up_all(self):
+        """
+        Run at the start of each test suite.
+        """
+        self.dut_ports = self.dut.get_ports(self.nic)
+        self.verify(len(self.dut_ports) >= 2, "Insufficient ports")
+        cores = self.dut.get_core_list("1S/4C/1T")
+        self.coremask = dts.create_mask(cores)
+
+        self.path = "./examples/ip_pipeline/build/ip_pipeline" 
+        
+        put = self.dut.send_expect("sed -n '510,520p' config/common_base","Compile librte_table",30)
+        self.verify("CONFIG_RTE_PORT_PCAP=y" in put, "CONFIG_RTE_PORT_PCAP=n")
+
+        self.dut.session.copy_file_to("dep/ip_pipeline.tar.gz -C ~")
+        self.dut.send_expect("tar -zxvf ~/ip_pipeline.tar.gz","#",50)
+
+        # build sample app  
+        out = self.dut.build_dpdk_apps("./examples/ip_pipeline")
+        self.verify("Error" not in out, "compilation error 1") 
+        self.verify("No such file" not in out, "compilation error 2")
+        self.dut.send_expect("cp -a -f ~/ip_pipeline/eth1.1.pcap ~/ip_pipeline/eth1.pcap ~/ip_pipeline/eth2.1.pcap \
+                             ~/ip_pipeline/eth2.pcap ~/ip_pipeline/eth3.1.pacp ~/ip_pipeline/eth3.pcap \
+                             ~/ip_pipeline/eth4.1.pcap ~/ip_pipeline/eth4.pcap ~","# ",50)
+         
+    def set_up(self):
+        """
+        Run before each test case.
+        """
+        pass
+
+    def test_postive(self):
+        rootdir = "dep/ip_pipeline/ip_pipeline_source_sink/postive/"
+        for parent,dirnames,filenames in os.walk(rootdir):
+            for filename in filenames:
+                cmd = self.path + " -f ~/ip_pipeline/ip_pipeline_source_sink/postive/%s" % filename
+                self.dut.send_expect(cmd,"[PIPELINE1]",50)
+                out = self.dut.send_expect("quit","# ",10)
+                self.verify("Bye!" in out, "Test failed on %s" % filename)
+
+    def test_negative(self):
+        rootdir = "dep/ip_pipeline/ip_pipeline_source_sink/negative/"
+        for parent,dirnames,filenames in os.walk(rootdir):
+            for filename in filenames:
+                cmd = self.path + " -f ~/ip_pipeline/ip_pipeline_source_sink/negative/%s" % filename
+                out = self.dut.send_expect(cmd,"# ",50)
+                self.verify("error" in out, "Test failed on %s" % filename)
+
+
+
+    def check_pacp_frame(self,pcapfile):
+        self.dut.send_expect("scapy","Welcome to Scapy",50)
+        self.dut.send_expect("p=rdpcap('%s')"% pcapfile,">>> ",500)
+        out = self.dut.send_expect("p",">>> ",50)
+        self.dut.send_expect("quit()","#",50)
+        list1 = out.split()
+        list2 = list1[1].split(":")
+        return list2[1]
+        
+    def test_source_sink_3(self):
+
+        cmd = self.path + " -f ~/ip_pipeline/ip_pipeline_source_sink/source_sink_3.cfg"
+        out1=self.dut.send_expect(cmd,"[PIPELINE1]",50)
+        time.sleep(10)
+        out = self.dut.send_expect("quit","# ",10)
+        eth1_1 = self.check_pacp_frame("/root/eth1.1.pcap")
+        eth2_1 = self.check_pacp_frame("/root/eth2.1.pcap")
+        self.verify("80" in eth1_1 and "200" in eth2_1, "test FAILED")
+        
+
+    def test_source_sink_4(self):
+        cmd = self.path + " -f ~/ip_pipeline/ip_pipeline_source_sink/source_sink_4.cfg"
+        self.dut.send_expect(cmd,"[PIPELINE1]",50)
+        time.sleep(10)
+        out = self.dut.send_expect("quit","# ",10)
+        eth1_1 = self.check_pacp_frame("/root/eth1.1.pcap")
+        eth2_1 = self.check_pacp_frame("/root/eth2.1.pcap")
+        self.verify("80" in eth1_1 and "80" in eth1_1, "test FAILED")
+
+    def test_source_sink_5(self):
+        cmd = self.path + " -f ~/ip_pipeline/ip_pipeline_source_sink/source_sink_5.cfg"
+        self.dut.send_expect(cmd,"[PIPELINE1]",50)
+        time.sleep(10)
+        out = self.dut.send_expect("quit","# ",10)
+        eth1_1 = self.check_pacp_frame("/root/eth1.1.pcap")
+        self.verify("200" in eth1_1, "test FAILED")
+
+    def test_source_sink_7(self):
+        cmd = self.path + " -f ~/ip_pipeline/ip_pipeline_source_sink/source_sink_7.cfg"
+        self.dut.send_expect(cmd,"[PIPELINE1]",50)
+        time.sleep(10)
+        out = self.dut.send_expect("quit","# ",10)
+        eth1_1 = self.check_pacp_frame("/root/eth1.1.pcap")
+        eth2_1 = self.check_pacp_frame("/root/eth2.1.pcap")
+        eth3_1 = self.check_pacp_frame("/root/eth3.1.pcap")
+        eth4_1 = self.check_pacp_frame("/root/eth4.1.pcap")
+
+        self.verify("80" in eth1_1 and "200" in eth2_1 and "80" in eth3_1 and "200" in eth4_1, "test FAILED")
+
+    def test_source_sink_8(self):
+        cmd = self.path + " -f ~/ip_pipeline/ip_pipeline_source_sink/source_sink_8.cfg"
+        self.dut.send_expect(cmd,"[PIPELINE1]",50)
+        time.sleep(10)
+        out = self.dut.send_expect("quit","# ",10)
+        eth1_1 = self.check_pacp_frame("/root/eth1.1.pcap")
+        eth2_1 = self.check_pacp_frame("/root/eth2.1.pcap")
+        eth3_1 = self.check_pacp_frame("/root/eth3.1.pcap")
+        eth4_1 = self.check_pacp_frame("/root/eth4.1.pcap")
+
+        self.verify("80" in eth1_1 and "200" in eth2_1 and "80" in eth3_1 and "200" in eth4_1, "test FAILED")
+
+
+    def test_source_sink_19(self):
+        cmd = self.path + " -f ~/ip_pipeline/ip_pipeline_source_sink/source_sink_19.cfg"
+        self.dut.send_expect(cmd,"[PIPELINE1]",50)
+        time.sleep(10)
+        out = self.dut.send_expect("quit","# ",100)
+        eth1_1 = self.check_pacp_frame("/root/eth1.1.pcap")
+        self.verify("80" in eth1_1 , "test FAILED")
+
+    def test_source_sink_6(self):
+        cmd = self.path + " -f ~/ip_pipeline/ip_pipeline_source_sink/source_sink_6.cfg"
+        self.dut.send_expect(cmd,"[PIPELINE1]",100)
+        time.sleep(30)
+        out = self.dut.send_expect("quit","# ",600)
+        eth1_1 = self.check_pacp_frame("/root/eth1.1.pcap")
+        eth2_1 = self.check_pacp_frame("/root/eth2.1.pcap")
+        self.verify("80" in eth1_1 and "200" in eth2_1, "test FAILED")
+
+
+    def tear_down(self):
+        """
+        Run after each test case.
+        """
+        self.dut.send_expect("rm -rf ~/eth1.1.pcap ~/eth1.pcap ~/eth2.1.pcap ~/eth2.pcap ~/eth3.1.pacp ~/eth3.pcap ~/eth4.1.pcap ~/eth4.pcap","# ",50)
+        self.dut.send_expect("cp -a -f ~/ip_pipeline/eth1.1.pcap ~/ip_pipeline/eth1.pcap ~/ip_pipeline/eth2.1.pcap ~/ip_pipeline/eth2.pcap ~/ip_pipeline/eth3.1.pacp ~/ip_pipeline/eth3.pcap ~/ip_pipeline/eth4.1.pcap ~/ip_pipeline/eth4.pcap ~","# ",50) 
+        self.dut.kill_all()
+        time.sleep(2)
+
+    def tear_down_all(self):
+        """
+        Run after each test suite.
+        """
+        pass
-- 
1.9.3

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

* [dts] [PATCH V1 2/2] add ip_pipeline source_sink test plan
  2016-08-23  9:26 [dts] [PATCH V1 01/2] add keep alive test code xu,gang
                   ` (9 preceding siblings ...)
  2016-08-23  9:26 ` [dts] [PATCH V1 1/2] add ip_pipeline source_sink test code xu,gang
@ 2016-08-23  9:26 ` xu,gang
  2016-08-25  5:38 ` [dts] [PATCH V1 01/2] add keep alive test code Liu, Yong
  11 siblings, 0 replies; 18+ messages in thread
From: xu,gang @ 2016-08-23  9:26 UTC (permalink / raw)
  To: dts; +Cc: xu,gang

Signed-off-by: xu,gang <gangx.xu@intel.com>
---
 test_plans/ip_pipeline_source_sink_test_plan.rst | 1106 ++++++++++++++++++++++
 1 file changed, 1106 insertions(+)
 create mode 100644 test_plans/ip_pipeline_source_sink_test_plan.rst

diff --git a/test_plans/ip_pipeline_source_sink_test_plan.rst b/test_plans/ip_pipeline_source_sink_test_plan.rst
new file mode 100644
index 0000000..7d8a656
--- /dev/null
+++ b/test_plans/ip_pipeline_source_sink_test_plan.rst
@@ -0,0 +1,1106 @@
+==========
+Prequisite
+==========
+1. change the CONFIG_RTE_PORT_PCAP compiler option lies in config/common_base
+2. config file should be use source and sink not rxq and txq, config file as follows
+[PIPELINE1]
+type = PASS-THROUGH
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+pcap_file_rd = /root/eth1.pcap /root/eth2.pcap
+pcap_bytes_rd_per_pkt = 0 64
+pcap_file_wr = /root/eth1.1.pcap /root/eth2.1.pcap
+pcap_n_pkt_wr = 80 0
+3. Since there is only source/sink port in the config file, there is no physical port, so it should be no -p in the command line, command should be as follows
+./build/ip_pipeline -f ./config/config_file_name.cfg
+4. change the folder/file to the pcap file to be root, for example, pcap is installed in the folder /home/anna/file.pcap, then should use linux command 
+chmod 777 /home
+chmod 777 /anna
+chmod 777 file.pcap
+5. pcap_bytes_rd_per_pkt can be 0 or anyother value, 0 means read whole frame, which takes more memory, if only need IP header, then it can be 64, 
+which saves lots of memory
+
+===========
+Test cases
+===========
+----------------------------------------------------------
+1. Functional test for source port on passthrough pipeline
+----------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = PASS-THROUGH
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+pcap_file_rd = /root/eth1.pcap /root/eth2.pcap
+pcap_bytes_rd_per_pkt = 64 0
+Command to run
+./build/ip_pipeline -f ./config/source_port.cfg
+The app sends the packets by reading the eth1.pcap and eth2.pcap file and drops the packets, check that the app runs successfully and quit
+normally, then test pass
+
+--------------------------------------------------------
+2. Functional test for sink port on passthrough pipeline
+--------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = PASS-THROUGH
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+pcap_file_wr = /root/eth1.1.pcap /root/eth2.1.pcap
+pcap_n_pkt_wr = 80 0
+Command to run
+./build/ip_pipeline -f ./config/sink_port.cfg
+After the app finished runing, since the app send null frames from the source port, check that the pcap file size is 0, and check the 
+time stamp when the app finished runing, compare with the eth1.pcap and eth2.pcap last modified time, if it's the same, test pass, 
+otherwise, test fail
+---------------------------------------------------------------
+3. Functional test for source+sink port on passthrough pipeline
+---------------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = PASS-THROUGH
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+pcap_file_rd = /root/eth1.pcap /root/eth2.pcap
+pcap_bytes_rd_per_pkt = 0 64
+pcap_file_wr = /home/eth1.1.pcap /home/eth2.1.pcap
+pcap_n_pkt_wr = 80 200
+command to run
+./build/ip_pipeline -f ./config/source_sink_port.cfg
+After the app finished running, eth1.pcap and eth1.1.pcap should have the same size, eth2.pcap and eth2.1.pcap should have the same size, and,
+in eth2.1.pcap, the first frame and the 101 frame should have the same frame which is the first 64 byte of 1st frame in eth2.pcap.
+
+-------------------------------------------------
+4. Same pcap read file, different pcap write file
+-------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = PASS-THROUGH
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+pcap_file_rd = /root/eth1.pcap /root/eth1.pcap
+pcap_bytes_rd_per_pkt = 0 64
+pcap_file_wr = /root/eth1.1.pcap /root/eth2.1.pcap
+pcap_n_pkt_wr = 80 81
+command to run
+./build/ip_pipeline -f ./config/source_sink_port_1.cfg
+
+After the app finsihed runing, check that the eth1.1.pcap and eth2.1.pcap have the same first 80 frames, and check that the eth2.1.pcap have 81 frames
+1st frame and 81th frame should be the same frame, which is the first 64 bytes of 1st frame of eth1.pcap file.
+
+--------------------------------------------------
+5. Same pcap write file, different pcap read file
+--------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = PASS-THROUGH
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+pcap_file_rd = /root/eth1.pcap /root/eth2.pcap
+pcap_bytes_rd_per_pkt = 0 64
+pcap_file_wr = /root/eth1.1.pcap /root/eth1.1.pcap
+pcap_n_pkt_wr = 80 200
+comand to run
+./build/ip_pipeline -f ./config/source_sink_port_2.cfg
+After the app finished runing, check that the eth1.1.pcap should have 200?(280?) frames, check that the app finished runing correctly
+
+-----------------------------------------------------
+6. pcap_n_pkt_wr equals 0, continuous write sink file
+-----------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = PASS-THROUGH
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+pcap_file_rd = /root/eth1.pcap /root/eth2.pcap
+pcap_bytes_rd_per_pkt = 0 64
+pcap_file_wr = /root/eth1.1.pcap /root/eth2.1.pcap
+pcap_n_pkt_wr = 0 200
+command to run
+./build/ip_pipeline -f ./config/source_sink_port_3.cfg
+After the app finished running, check that the eth1.pcap should have more than 80 frames, check that the eth2.1.pcap have 200 frames
+
+--------------------------------
+7. 4 source port and 4 sink port
+--------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = PASS-THROUGH
+core = 1
+pktq_in = SOURCE0 SOURCE1 SOURCE2 SOURCE3
+pktq_out = SINK0 SINK1 SINK2 SINK3
+pcap_file_rd = /root/eth1.pcap /root/eth2.pcap /root/eth1.pcap /root/eth1.1.pcap
+pcap_bytes_rd_per_pkt = 0 64 0 64
+pcap_file_wr = /root/eth1.1.pcap /root/eth2.1.pcap /root/eth3.1.pcap /root/eth4.1.pcap
+pcap_n_pkt_wr = 80 200 80 200
+command to run
+./build/ip_pipeline -f ./config/source_sink_port_4.cfg
+After the app finished running, check that the eth1.1.pcap and eth5.pcap should have the same size and frames, eth2.1.pcap and eth6.pcap should
+have the sme size and frames
+
+----------------------------------------------------------------
+8. Add source and sink into the EDGE_ROUTER_DOWNSTREAM.CFG, need to check with zhang, fan about which pipeline to add the SOURCE/SINK
+----------------------------------------------------------------
+[PIPELINE0]
+type = MASTER
+core = 0
+
+[PIPELINE1]
+type = ROUTING
+core = 1
+pktq_in = SOURCE0 SOURCE1 SOURCE2 SOURCE3
+pktq_out = SWQ0 SWQ1 SWQ2 SWQ3
+encap = ethernet_qinq
+qinq_sched = test
+ip_hdr_offset = 270; mbuf (128) + headroom (128) + ethernet header (14) = 270
+pcap_file_rd = /root/eth1.pcap /root/eth2.pcap /root/eth1.pcap /root/eth1.1.pcap
+pcap_bytes_rd_per_pkt = 0 64 0 64
+
+[PIPELINE2]
+type = PASS-THROUGH
+core = 2
+pktq_in = SWQ0 SWQ1 SWQ2 SWQ3
+pktq_out = SWQ4 SWQ5 SWQ6 SWQ7
+
+[PIPELINE3]
+type = PASS-THROUGH
+core = 3
+pktq_in = SWQ4 SWQ5 SWQ6 SWQ7
+pktq_out = SINK0 SINK1 SINK2 SINK3
+pcap_file_wr = /root/eth1.1.pcap /root/eth2.1.pcap /root/eth3.1.pcap /root/eth4.1.pcap
+pcap_n_pkt_wr = 80 200 80 200
+
+[MEMPOOL0]
+pool_size = 512
+
+only use 1 or 2 ports pcap_n_pkt_wr = 80
+---------------------------------------
+9. Source port and sink port not paired, negative
+---------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = PASS-THROUGH
+core = 1
+pktq_in = SOURCE0 SOURCE1 SOURCE2
+pktq_out = SINK0 SINK1
+pcap_file_rd = /root/eth1.pcap /root/eth2.pcap
+pcap_bytes_rd_per_pkt = 64 0
+Command to run
+./build/ip_pipeline -f ./config/source_port.cfg
+The app sends the packets by reading the eth1.pcap and eth2.pcap file and drops the packets, check that the app report errors successfully and quit
+normally, then test pass
+
+-----------------------------------------
+10. Source port and pcap file read not paired, negative
+-----------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = PASS-THROUGH
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+pcap_file_rd = /root/eth1.pcap
+pcap_bytes_rd_per_pkt = 64 0
+pcap_file_wr = /root/eth1.1.pcap /root/eth2.1.pcap
+pcap_n_pkt_wr = 0 200
+Command to run
+./build/ip_pipeline -f ./config/source_port.cfg
+The app sends the packets by reading the eth1.pcap drops the packets, check that the app report errors successfully and quit
+normally, then test pass
+
+-----------------------------------------------------
+11. Source port and pcap bytes read per packet not paired, negative
+-----------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = PASS-THROUGH
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+pcap_file_rd = /root/eth1.pcap /root/eth2.pcap
+pcap_bytes_rd_per_pkt = 64
+Command to run
+./build/ip_pipeline -f ./config/source_port.cfg
+The app sends the packets by reading the eth1.pcap and eth2.pcap file and drops the packets, check that the app report errors successfully and quit
+normally, then test pass
+
+--------------------------------------------
+12. Sink port and pcap file write not paired, negative
+--------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = PASS-THROUGH
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+pcap_file_wr = /root/eth1.1.pcap 
+pcap_n_pkt_wr = 80 0
+Command to run
+./build/ip_pipeline -f ./config/sink_port.cfg
+After the app finished runing, since the app send null frames from the source port, check that the pcap file size is 0, and check the 
+time stamp when the app finished runing, compare with the eth1.pcap last modified time, if it's the same, test pass, 
+otherwise, test fail
+
+------------------------------------------------
+13. Sink port and pcap n packet write not paired, negative
+------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = PASS-THROUGH
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+pcap_file_wr = /root/eth1.1.pcap /root/eth2.1.pcap
+pcap_n_pkt_wr = 80
+Command to run
+./build/ip_pipeline -f ./config/sink_port.cfg
+After the app finished runing, since the app send null frames from the source port, check that the pcap file size is 0, and check the 
+time stamp when the app finished runing, compare with the eth1.pcap and eth2.pcaplast modified time, if it's the same, test pass, 
+otherwise, test fail
+
+-------------------------------------------------------------------
+14. Functional test for source port on flow classification pipeline (Fan will double check it)
+-------------------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = FLOW_CLASSIFICATION
+core = s1c2
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+n_flows = 512
+key_offset = 192; dma_dst_offset
+key_size = 16; dma_size
+hash_offset = 208; dma_hash_offset = 80
+pcap_file_rd = /root/eth1.pcap /root/eth2.pcap
+pcap_bytes_rd_per_pkt = 64 0
+Command to run
+./build/ip_pipeline -f ./config/source_port.cfg
+The app sends the packets by reading the eth1.pcap and eth2.pcap file and drops the packets, check that the app runs successfully and quit
+normally, then test pass
+
+-----------------------------------------------------------------
+15. Functional test for sink port on flow classification pipeline
+-----------------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = FLOW_CLASSIFICATION
+core = s1c2
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+n_flows = 512
+key_offset = 192; dma_dst_offset
+key_size = 16; dma_size
+hash_offset = 208; dma_hash_offset = 80
+pcap_file_wr = /root/eth1.pcap /root/eth2.pcap
+pcap_n_pkt_wr = 80 0
+Command to run
+./build/ip_pipeline -f ./config/sink_port.cfg
+After the app finished runing, since the app send null frames from the source port, check that the pcap file size is 0, and check the 
+time stamp when the app finished runing, compare with the eth1.pcap and eth2.pcap last modified time, if it's the same, test pass, 
+otherwise, test fail
+------------------------------------------------------------------------
+16. Functional test for source+sink port on flow classification pipeline(need to run with rules)
+------------------------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = FLOW_CLASSIFICATION
+core = s1c2
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+n_flows = 512
+key_offset = 192; dma_dst_offset
+key_size = 16; dma_size
+hash_offset = 208; dma_hash_offset = 80
+pcap_file_rd = /root/eth1.pcap /root/eth2.pcap
+pcap_bytes_rd_per_pkt = 0 64
+pcap_file_wr = /root/eth1.1.pcap /root/eth2.1.pcap
+pcap_n_pkt_wr = 80 200
+command to run
+./build/ip_pipeline -f ./config/source_sink_port.cfg
+After the app finished running, eth1.pcap and eth1.1.pcap should have the same size, eth2.pcap and eth2.1.pcap should have the same size, and,
+in eth2.1.pcap, the first frame and the 101 frame should have the same frame which is the first 64 byte of 1st frame in eth2.pcap.
+
+-----------------------------------------------------------
+17. Functional test for source port on flow action pipeline
+-----------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = FLOW_ACTIONS
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+n_flows = 16
+n_meters_per_flow = 1
+flow_id_offset = 286; mbuf (128) + headroom (128) + ethernet (14) + ip dst offset (16) 
+ip_hdr_offset = 270; mbuf (128) + headroom (128) + ethernet (14) = 270
+color_offset = 192; mbuf (128) + 64
+pcap_file_rd = /root/eth1.pcap /root/eth2.pcap
+pcap_bytes_rd_per_pkt = 64 0
+Command to run
+./build/ip_pipeline -f ./config/source_port.cfg
+The app sends the packets by reading the eth1.pcap and eth2.pcap file and drops the packets, check that the app runs successfully and quit
+normally, then test pass
+
+---------------------------------------------------------
+18. Functional test for sink port on flow action pipeline
+---------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = FLOW_ACTIONS
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+n_flows = 16
+n_meters_per_flow = 1
+flow_id_offset = 286; mbuf (128) + headroom (128) + ethernet (14) + ip dst offset (16) 
+ip_hdr_offset = 270; mbuf (128) + headroom (128) + ethernet (14) = 270
+color_offset = 192; mbuf (128) + 64
+pcap_file_wr = /root/eth1.1.pcap /root/eth2.1.pcap
+pcap_n_pkt_wr = 80 0
+Command to run
+./build/ip_pipeline -f ./config/sink_port.cfg
+After the app finished runing, since the app send null frames from the source port, check that the pcap file size is 0, and check the 
+time stamp when the app finished runing, compare with the eth1.pcap and eth2.pcap last modified time, if it's the same, test pass, 
+otherwise, test fail
+----------------------------------------------------------------
+19. Functional test for source+sink port on flow action pipeline
+----------------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = FLOW_ACTIONS
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+n_flows = 16
+n_meters_per_flow = 1
+flow_id_offset = 286; mbuf (128) + headroom (128) + ethernet (14) + ip dst offset (16) 
+ip_hdr_offset = 270; mbuf (128) + headroom (128) + ethernet (14) = 270
+color_offset = 192; mbuf (128) + 64
+pcap_file_rd = /root/eth1.pcap /root/eth2.pcap
+pcap_bytes_rd_per_pkt = 0 64
+pcap_file_wr = /root/eth1.1.pcap /root/eth2.1.pcap
+pcap_n_pkt_wr = 80 200
+command to run
+./build/ip_pipeline -f ./config/source_sink_port.cfg
+After the app finished running, eth1.pcap and eth1.1.pcap should have the same size, eth2.pcap and eth2.1.pcap should have the same size, and,
+in eth2.1.pcap, the first frame and the 101 frame should have the same frame which is the first 64 byte of 1st frame in eth2.pcap.
+
+-----------------------------------------------------------
+20. Functional test for source port on rt arp on pipeline
+-----------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = ROUTING
+core = s1c1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+n_arp_entries = 1024
+ip_hdr_offset = 270; mbuf (128) + headroom (128) + ethernet header (14) = 270
+arp_key_offset = 192; mbuf (128) + 64
+pcap_file_rd = /root/eth1.pcap /root/eth2.pcap
+pcap_bytes_rd_per_pkt = 64 0
+Command to run
+./build/ip_pipeline -f ./config/source_port.cfg
+The app sends the packets by reading the eth1.pcap and eth2.pcap file and drops the packets, check that the app runs successfully and quit
+normally, then test pass
+
+---------------------------------------------------------
+21. Functional test for sink port on rt arp on pipeline
+---------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = ROUTING
+core = s1c1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+n_arp_entries = 1024
+ip_hdr_offset = 270; mbuf (128) + headroom (128) + ethernet header (14) = 270
+arp_key_offset = 192; mbuf (128) + 64
+pcap_file_wr = /root/eth1.1.pcap /root/eth2.1.pcap
+pcap_n_pkt_wr = 80 0
+Command to run
+./build/ip_pipeline -f ./config/sink_port.cfg
+After the app finished runing, since the app send null frames from the source port, check that the pcap file size is 0, and check the 
+time stamp when the app finished runing, compare with the eth1.pcap and eth2.pcap last modified time, if it's the same, test pass, 
+otherwise, test fail
+----------------------------------------------------------------
+22. Functional test for source+sink port on rt arp on pipeline
+----------------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = ROUTING
+core = s1c1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+n_arp_entries = 1024
+ip_hdr_offset = 270; mbuf (128) + headroom (128) + ethernet header (14) = 270
+arp_key_offset = 192; mbuf (128) + 64
+pcap_file_rd = /root/eth1.pcap /root/eth2.pcap
+pcap_bytes_rd_per_pkt = 0 64
+pcap_file_wr = /root/eth1.1.pcap /root/eth2.1.pcap
+pcap_n_pkt_wr = 80 200
+command to run
+./build/ip_pipeline -f ./config/source_sink_port.cfg
+After the app finished running, eth1.pcap and eth1.1.pcap should have the same size, eth2.pcap and eth2.1.pcap should have the same size, and,
+in eth2.1.pcap, the first frame and the 101 frame should have the same frame which is the first 64 byte of 1st frame in eth2.pcap.
+
+-----------------------------------------------------------
+23. Functional test for source port on rt arp off pipeline
+-----------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = ROUTING
+core = s1c1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+n_routes = 4096
+;ip_hdr_offset = 142; headroom (128) + ethernet header (14) = 142
+ip_hdr_offset = 270; headroom (128) + ethernet header (14) = 142
+pcap_file_rd = /root/eth1.pcap /root/eth2.pcap
+pcap_bytes_rd_per_pkt = 64 0
+Command to run
+./build/ip_pipeline -f ./config/source_port.cfg
+The app sends the packets by reading the eth1.pcap and eth2.pcap file and drops the packets, check that the app runs successfully and quit
+normally, then test pass
+
+---------------------------------------------------------
+24. Functional test for sink port on rt arp off pipeline
+---------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = ROUTING
+core = s1c1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+n_routes = 4096
+;ip_hdr_offset = 142; headroom (128) + ethernet header (14) = 142
+ip_hdr_offset = 270; headroom (128) + ethernet header (14) = 142
+pcap_file_wr = /root/eth1.1.pcap /root/eth2.1.pcap
+pcap_n_pkt_wr = 80 0
+Command to run
+./build/ip_pipeline -f ./config/sink_port.cfg
+After the app finished runing, since the app send null frames from the source port, check that the pcap file size is 0, and check the 
+time stamp when the app finished runing, compare with the eth1.pcap and eth2.pcap last modified time, if it's the same, test pass, 
+otherwise, test fail
+----------------------------------------------------------------
+25. Functional test for source+sink port on rt arp off pipeline
+----------------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = ROUTING
+core = s1c1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+n_routes = 4096
+;ip_hdr_offset = 142; headroom (128) + ethernet header (14) = 142
+ip_hdr_offset = 270; headroom (128) + ethernet header (14) = 142
+pcap_file_rd = /root/eth1.pcap /root/eth2.pcap
+pcap_bytes_rd_per_pkt = 0 64
+pcap_file_wr = /root/eth1.1.pcap /root/eth2.1.pcap
+pcap_n_pkt_wr = 80 200
+command to run
+./build/ip_pipeline -f ./config/source_sink_port.cfg
+After the app finished running, eth1.pcap and eth1.1.pcap should have the same size, eth2.pcap and eth2.1.pcap should have the same size, and,
+in eth2.1.pcap, the first frame and the 101 frame should have the same frame which is the first 64 byte of 1st frame in eth2.pcap.
+
+-----------------------------------------------------------
+26. Functional test for source port on rt mpls arp off pipeline
+-----------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = ROUTING
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+n_routes = 4096
+encap = ethernet_mpls
+;ip_hdr_offset = 142; headroom (128) + ethernet header (14) = 142
+ip_hdr_offset = 270; headroom (128) + ethernet header (14) = 142
+pcap_file_rd = /root/eth1.pcap /root/eth1.pcap
+pcap_bytes_rd_per_pkt = 0 0
+;pcap_file_wr = /home/fanzhan2/eth3.pcap /home/fanzhan2/eth2.pcap 
+;pcap_n_pkt_wr = 80 0 
+Command to run
+./build/ip_pipeline -f ./config/source_port.cfg
+The app sends the packets by reading the eth1.pcap and eth2.pcap file and drops the packets, check that the app runs successfully and quit
+normally, then test pass
+
+---------------------------------------------------------
+27. Functional test for sink port on rt mpls arp off pipeline
+---------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = ROUTING
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+n_routes = 4096
+encap = ethernet_mpls
+;ip_hdr_offset = 142; headroom (128) + ethernet header (14) = 142
+ip_hdr_offset = 270; headroom (128) + ethernet header (14) = 142
+;pcap_file_rd = /root/eth1.pcap /root/eth1.pcap
+;pcap_bytes_rd_per_pkt = 0 0
+pcap_file_wr = /root/eth1.1.pcap /root/eth2.1.pcap 
+pcap_n_pkt_wr = 80 0 
+Command to run
+./build/ip_pipeline -f ./config/sink_port.cfg
+After the app finished runing, since the app send null frames from the source port, check that the pcap file size is 0, and check the 
+time stamp when the app finished runing, compare with the eth1.pcap and eth2.pcap last modified time, if it's the same, test pass, 
+otherwise, test fail
+----------------------------------------------------------------
+28. Functional test for source+sink port on rt mpls arp off pipeline
+----------------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = ROUTING
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+n_routes = 4096
+encap = ethernet_mpls
+;ip_hdr_offset = 142; headroom (128) + ethernet header (14) = 142
+ip_hdr_offset = 270; headroom (128) + ethernet header (14) = 142
+pcap_file_rd = /root/eth1.pcap /root/eth1.pcap
+pcap_bytes_rd_per_pkt = 0 0
+pcap_file_wr = /root/eth1.1.pcap /root/eth2.1.pcap 
+pcap_n_pkt_wr = 80 0 
+command to run
+./build/ip_pipeline -f ./config/source_sink_port.cfg
+After the app finished running, eth1.pcap and eth1.1.pcap should have the same size, eth2.pcap and eth2.1.pcap should have the same size, and,
+in eth2.1.pcap, the first frame and the 101 frame should have the same frame which is the first 64 byte of 1st frame in eth2.pcap.
+
+-----------------------------------------------------------
+29. Functional test for source port on rt mpls arp on pipeline
+-----------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = ROUTING
+core = s1c1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+n_arp_entries = 1024
+encap = ethernet_mpls
+mpls_color_mark = no
+ip_hdr_offset = 270; mbuf (128) + headroom (128) + ethernet header (14) = 270
+arp_key_offset = 192; mbuf (128) + 64
+;color_offset = 256; mbuf (128) + headroom (128) = 256
+pcap_file_rd = /root/eth1.pcap /root/eth2.pcap
+pcap_bytes_rd_per_pkt = 64 0
+Command to run
+./build/ip_pipeline -f ./config/source_port.cfg
+The app sends the packets by reading the eth1.pcap and eth2.pcap file and drops the packets, check that the app runs successfully and quit
+normally, then test pass
+
+---------------------------------------------------------
+30. Functional test for sink port on rt mpls arp on pipeline
+---------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = ROUTING
+core = s1c1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+n_arp_entries = 1024
+encap = ethernet_mpls
+mpls_color_mark = no
+ip_hdr_offset = 270; mbuf (128) + headroom (128) + ethernet header (14) = 270
+arp_key_offset = 192; mbuf (128) + 64
+;color_offset = 256; mbuf (128) + headroom (128) = 256
+;pcap_file_rd = /root/eth1.pcap /root/eth2.pcap
+;pcap_bytes_rd_per_pkt = 64 0
+pcap_file_wr = /root/eth1.1.pcap /root/eth2.1.pcap 
+pcap_n_pkt_wr = 80 0 
+Command to run
+./build/ip_pipeline -f ./config/sink_port.cfg
+After the app finished runing, since the app send null frames from the source port, check that the pcap file size is 0, and check the 
+time stamp when the app finished runing, compare with the eth1.pcap and eth2.pcap last modified time, if it's the same, test pass, 
+otherwise, test fail
+----------------------------------------------------------------
+31. Functional test for source+sink port on rt mpls arp on pipeline
+----------------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = ROUTING
+core = s1c1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+n_arp_entries = 1024
+encap = ethernet_mpls
+mpls_color_mark = no
+ip_hdr_offset = 270; mbuf (128) + headroom (128) + ethernet header (14) = 270
+arp_key_offset = 192; mbuf (128) + 64
+;color_offset = 256; mbuf (128) + headroom (128) = 256
+pcap_file_rd = /root/eth1.pcap /root/eth2.pcap
+pcap_bytes_rd_per_pkt = 64 0
+pcap_file_wr = /root/eth1.1.pcap /root/eth2.1.pcap 
+pcap_n_pkt_wr = 80 0 
+command to run
+./build/ip_pipeline -f ./config/source_sink_port.cfg
+After the app finished running, eth1.pcap and eth1.1.pcap should have the same size, eth2.pcap and eth2.1.pcap should have the same size, and,
+in eth2.1.pcap, the first frame and the 101 frame should have the same frame which is the first 64 byte of 1st frame in eth2.pcap.
+
+-----------------------------------------------------------
+32. Functional test for source port on rt qinq arp off pipeline
+-----------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = ROUTING
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+n_routes = 4096
+encap = ethernet_qinq
+;ip_hdr_offset = 142; headroom (128) + ethernet header (14) = 142
+ip_hdr_offset = 270; headroom (128) + ethernet header (14) = 142
+pcap_file_rd = /root/eth1.pcap /root/eth1.pcap
+pcap_bytes_rd_per_pkt = 0 0
+;pcap_file_wr = /home/fanzhan2/eth3.pcap /home/fanzhan2/eth2.pcap 
+;pcap_n_pkt_wr = 80 0 
+Command to run
+./build/ip_pipeline -f ./config/source_port.cfg
+The app sends the packets by reading the eth1.pcap and eth2.pcap file and drops the packets, check that the app runs successfully and quit
+normally, then test pass
+
+---------------------------------------------------------
+33. Functional test for sink port on rt qinq arp off pipeline
+---------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = ROUTING
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+n_routes = 4096
+encap = ethernet_qinq
+;ip_hdr_offset = 142; headroom (128) + ethernet header (14) = 142
+ip_hdr_offset = 270; headroom (128) + ethernet header (14) = 142
+;pcap_file_rd = /root/eth1.pcap /root/eth1.pcap
+;pcap_bytes_rd_per_pkt = 0 0
+pcap_file_wr = /root/eth1.1.pcap /root/eth2.1.pcap 
+pcap_n_pkt_wr = 80 0 
+Command to run
+./build/ip_pipeline -f ./config/sink_port.cfg
+After the app finished runing, since the app send null frames from the source port, check that the pcap file size is 0, and check the 
+time stamp when the app finished runing, compare with the eth1.pcap and eth2.pcap last modified time, if it's the same, test pass, 
+otherwise, test fail
+----------------------------------------------------------------
+34. Functional test for source+sink port on rt qinq arp off pipeline
+----------------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = ROUTING
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+n_routes = 4096
+encap = ethernet_qinq
+;ip_hdr_offset = 142; headroom (128) + ethernet header (14) = 142
+ip_hdr_offset = 270; headroom (128) + ethernet header (14) = 142
+pcap_file_rd = /root/eth1.pcap /root/eth1.pcap
+pcap_bytes_rd_per_pkt = 0 0
+pcap_file_wr = /root/eth1.1.pcap /root/eth2.1.pcap 
+pcap_n_pkt_wr = 80 0 
+command to run
+./build/ip_pipeline -f ./config/source_sink_port.cfg
+After the app finished running, eth1.pcap and eth1.1.pcap should have the same size, eth2.pcap and eth2.1.pcap should have the same size, and,
+in eth2.1.pcap, the first frame and the 101 frame should have the same frame which is the first 64 byte of 1st frame in eth2.pcap.
+
+-----------------------------------------------------------
+35. Functional test for source port on rt qinq arp on pipeline
+-----------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = ROUTING
+core = s1c1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+n_arp_entries = 1024
+encap = ethernet_qinq
+qinq_sched = no
+ip_hdr_offset = 270; mbuf (128) + headroom (128) + ethernet header (14) = 270
+arp_key_offset = 192; mbuf (128) + 64 = 192
+pcap_file_rd = /root/eth1.pcap /root/eth2.pcap
+pcap_bytes_rd_per_pkt = 64 0
+Command to run
+./build/ip_pipeline -f ./config/source_port.cfg
+The app sends the packets by reading the eth1.pcap and eth2.pcap file and drops the packets, check that the app runs successfully and quit
+normally, then test pass
+
+---------------------------------------------------------
+36. Functional test for sink port on rt qinq arp on pipeline
+---------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = ROUTING
+core = s1c1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+n_arp_entries = 1024
+encap = ethernet_qinq
+qinq_sched = no
+ip_hdr_offset = 270; mbuf (128) + headroom (128) + ethernet header (14) = 270
+arp_key_offset = 192; mbuf (128) + 64 = 192
+;pcap_file_rd = /root/eth1.pcap /root/eth2.pcap
+;pcap_bytes_rd_per_pkt = 64 0
+pcap_file_wr = /root/eth1.1.pcap /root/eth2.1.pcap
+pcap_n_pkt_wr = 80 0
+Command to run
+./build/ip_pipeline -f ./config/sink_port.cfg
+After the app finished runing, since the app send null frames from the source port, check that the pcap file size is 0, and check the 
+time stamp when the app finished runing, compare with the eth1.pcap and eth2.pcap last modified time, if it's the same, test pass, 
+otherwise, test fail
+----------------------------------------------------------------
+37. Functional test for source+sink port on rt qinq arp on pipeline
+----------------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = ROUTING
+core = s1c1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+n_arp_entries = 1024
+encap = ethernet_qinq
+qinq_sched = no
+ip_hdr_offset = 270; mbuf (128) + headroom (128) + ethernet header (14) = 270
+arp_key_offset = 192; mbuf (128) + 64 = 192
+pcap_file_rd = /root/eth1.pcap /root/eth2.pcap
+pcap_bytes_rd_per_pkt = 0 64
+pcap_file_wr = /root/eth1.1.pcap /root/eth2.1.pcap
+pcap_n_pkt_wr = 80 200
+command to run
+./build/ip_pipeline -f ./config/source_sink_port.cfg
+After the app finished running, eth1.pcap and eth1.1.pcap should have the same size, eth2.pcap and eth2.1.pcap should have the same size, and,
+in eth2.1.pcap, the first frame and the 101 frame should have the same frame which is the first 64 byte of 1st frame in eth2.pcap.
+
+----------------------------------------------------------
+38. Functional test for source port on passthrough pipeline for pcap_file_rd
+----------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = PASS-THROUGH
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+pcap_file_rd = /root/eth1.pcap /root/eth2.pcap
+;pcap_bytes_rd_per_pkt = 64 0
+Command to run
+./build/ip_pipeline -f ./config/source_port.cfg
+The app sends the packets by reading the eth1.pcap and eth2.pcap file and drops the packets, check that the app runs successfully and quit
+normally, then test pass
+----------------------------------------------------------
+39. Functional test for source port on passthrough pipeline for pcap_file_rd and pcap_bytes_rd_per_pkt(negative)
+----------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = PASS-THROUGH
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+;pcap_file_rd = /root/eth1.pcap /root/eth2.pcap
+;pcap_bytes_rd_per_pkt = 64 0
+Command to run
+./build/ip_pipeline -f ./config/source_port.cfg
+Check that the app reports parser errors successfully and quit, then test pass, otherwise, test fail
+----------------------------------------------------------
+40. Functional test for source port on passthrough pipeline for pcap_file_rd_per_pkt(negative)
+----------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = PASS-THROUGH
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+;pcap_file_rd = /root/eth1.pcap /root/eth2.pcap
+pcap_bytes_rd_per_pkt = 64 0
+Command to run
+./build/ip_pipeline -f ./config/source_port.cfg
+Check that the app reports parser errors successfully and quit, then test pass, otherwise, test fail
+
+--------------------------------------------------------
+41. Functional test for sink port on passthrough pipeline for pcap_file_wr
+--------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = PASS-THROUGH
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+pcap_file_wr = /root/eth1.1.pcap /root/eth2.1.pcap
+;pcap_n_pkt_wr = 80 0
+Command to run
+./build/ip_pipeline -f ./config/sink_port.cfg
+After the app finished runing, since the app send null frames from the source port, check that the pcap file size is 0, and check the 
+time stamp when the app finished runing, compare with the eth1.pcap and eth2.pcap last modified time, if it's the same, test pass, 
+otherwise, test fail
+--------------------------------------------------------
+42. Functional test for sink port on passthrough pipeline for pcap_file_wr and pcap_n_pkt_wr
+--------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = PASS-THROUGH
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+;pcap_file_wr = /root/eth1.1.pcap /root/eth2.1.pcap
+;pcap_n_pkt_wr = 80 0
+Command to run
+./build/ip_pipeline -f ./config/sink_port.cfg
+After the app finished runing, since the app send null frames from the source port, check that the pcap file size is 0, and check the 
+time stamp when the app finished runing, compare with the eth1.pcap and eth2.pcap last modified time, if it's the same, test pass, 
+otherwise, test fail
+--------------------------------------------------------
+43. Functional test for sink port on passthrough pipeline for pcap_n_pkt_wr
+--------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = PASS-THROUGH
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+;pcap_file_wr = /root/eth1.1.pcap /root/eth2.1.pcap
+pcap_n_pkt_wr = 80 0
+Command to run
+./build/ip_pipeline -f ./config/sink_port.cfg
+After the app finished runing, since the app send null frames from the source port, check that the pcap file size is 0, and check the 
+time stamp when the app finished runing, compare with the eth1.pcap and eth2.pcap last modified time, if it's the same, test pass, 
+otherwise, test fail
+
+CONFIG_RTE_PORT_PCAP=n
+----------------------------------------------------------
+44. Functional test for source port on passthrough pipeline for pcap_file_rd(negative)
+----------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = PASS-THROUGH
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+pcap_file_rd = /root/eth1.pcap /root/eth2.pcap
+;pcap_bytes_rd_per_pkt = 64 0
+Command to run
+./build/ip_pipeline -f ./config/source_port.cfg
+Check that the app reports errors successfully and quit normally, then test pass, otherwise, test fail
+----------------------------------------------------------
+45. Functional test for source port on passthrough pipeline for pcap_file_rd and pcap_bytes_rd_per_pkt
+----------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = PASS-THROUGH
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+pcap_file_rd = /root/eth1.pcap /root/eth2.pcap
+pcap_bytes_rd_per_pkt = 64 0
+Command to run
+./build/ip_pipeline -f ./config/source_port.cfg
+Check that the app runs successfully and quit, then test pass, otherwise, test fail
+----------------------------------------------------------
+46. Functional test for source port on passthrough pipeline for pcap_file_rd_per_pkt
+----------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = PASS-THROUGH
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+;pcap_file_rd = /root/eth1.pcap /root/eth2.pcap
+pcap_bytes_rd_per_pkt = 64 0
+Command to run
+./build/ip_pipeline -f ./config/source_port.cfg
+Check that the app runs successfully and quit, then test pass, otherwise, test fail
+
+--------------------------------------------------------
+47. Functional test for sink port on passthrough pipeline for pcap_file_wr(negative)
+--------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = PASS-THROUGH
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+pcap_file_wr = /root/eth1.1.pcap /root/eth2.1.pcap
+;pcap_n_pkt_wr = 80 0
+Command to run
+./build/ip_pipeline -f ./config/sink_port.cfg
+Check the app reports parser errors successfully, then test pass, otherwise, test fail
+--------------------------------------------------------
+48. Functional test for sink port on passthrough pipeline for pcap_file_wr and pcap_n_pkt_wr
+--------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = PASS-THROUGH
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+;pcap_file_wr = /root/eth1.1.pcap /root/eth2.1.pcap
+;pcap_n_pkt_wr = 80 0
+Command to run
+./build/ip_pipeline -f ./config/sink_port.cfg
+After the app finished runing, since the app send null frames from the source port, check that the pcap file size is 0, and check the 
+time stamp when the app finished runing, compare with the eth1.pcap and eth2.pcap last modified time, if it's the same, test pass, 
+otherwise, test fail
+--------------------------------------------------------
+49. Functional test for sink port on passthrough pipeline for pcap_n_pkt_wr(negative)
+--------------------------------------------------------
+config file as follows
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type = PASS-THROUGH
+core = 1
+pktq_in = SOURCE0 SOURCE1
+pktq_out = SINK0 SINK1
+;pcap_file_wr = /root/eth1.1.pcap /root/eth2.1.pcap
+pcap_n_pkt_wr = 80 0
+Command to run
+./build/ip_pipeline -f ./config/sink_port.cfg
+Check that the app reports parser errors successfully, then test pass, otherwise, test fail
-- 
1.9.3

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

* Re: [dts] [PATCH V1 1/2] add ip_pipeline source_sink test code
  2016-08-23  9:26 ` [dts] [PATCH V1 1/2] add ip_pipeline source_sink test code xu,gang
@ 2016-08-25  2:36   ` Liu, Yong
  0 siblings, 0 replies; 18+ messages in thread
From: Liu, Yong @ 2016-08-25  2:36 UTC (permalink / raw)
  To: xu,gang, dts

Thanks, gang. Few comments.

On 08/23/2016 05:26 PM, xu,gang wrote:
> Signed-off-by: xu,gang <gangx.xu@intel.com>
> ---
>   tests/TestSuite_ip_pipeline_source_sink.py | 194 +++++++++++++++++++++++++++++
>   1 file changed, 194 insertions(+)
>   create mode 100644 tests/TestSuite_ip_pipeline_source_sink.py
>
> diff --git a/tests/TestSuite_ip_pipeline_source_sink.py b/tests/TestSuite_ip_pipeline_source_sink.py
> new file mode 100644
> index 0000000..f60c75c
> --- /dev/null
> +++ b/tests/TestSuite_ip_pipeline_source_sink.py
> @@ -0,0 +1,194 @@
> +#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 ip_pipeline_source_sink.
> +"""
> +
> +import dts
> +import string
> +import time
> +import re
> +import os
> +from test_case import TestCase
> +from plotting import Plotting
> +from settings import HEADER_SIZE
> +from etgen import IxiaPacketGenerator
> +from packet import Packet, sniff_packets, load_sniff_packets
> +
> +class Test_ip_pipeline_source_sink(TestCase):
> +
> +    def set_up_all(self):
> +        """
> +        Run at the start of each test suite.
> +        """
> +        self.dut_ports = self.dut.get_ports(self.nic)
> +        self.verify(len(self.dut_ports) >= 2, "Insufficient ports")
> +        cores = self.dut.get_core_list("1S/4C/1T")
> +        self.coremask = dts.create_mask(cores)
> +
> +        self.path = "./examples/ip_pipeline/build/ip_pipeline"
> +
> +        put = self.dut.send_expect("sed -n '510,520p' config/common_base","Compile librte_table",30)
> +        self.verify("CONFIG_RTE_PORT_PCAP=y" in put, "CONFIG_RTE_PORT_PCAP=n")
> +
Line number may changed in different version, no need to user line number.

> +        self.dut.session.copy_file_to("dep/ip_pipeline.tar.gz -C ~")
> +        self.dut.send_expect("tar -zxvf ~/ip_pipeline.tar.gz","#",50)
> +
> +        # build sample app
> +        out = self.dut.build_dpdk_apps("./examples/ip_pipeline")
> +        self.verify("Error" not in out, "compilation error 1")
> +        self.verify("No such file" not in out, "compilation error 2")
> +        self.dut.send_expect("cp -a -f ~/ip_pipeline/eth1.1.pcap ~/ip_pipeline/eth1.pcap ~/ip_pipeline/eth2.1.pcap \
> +                             ~/ip_pipeline/eth2.pcap ~/ip_pipeline/eth3.1.pacp ~/ip_pipeline/eth3.pcap \
> +                             ~/ip_pipeline/eth4.1.pcap ~/ip_pipeline/eth4.pcap ~","# ",50)
Suggest to use list for so many pcap files.

> +
> +    def set_up(self):
> +        """
> +        Run before each test case.
> +        """
> +        pass
> +
> +    def test_postive(self):
> +        rootdir = "dep/ip_pipeline/ip_pipeline_source_sink/postive/"
> +        for parent,dirnames,filenames in os.walk(rootdir):
> +            for filename in filenames:
> +                cmd = self.path + " -f ~/ip_pipeline/ip_pipeline_source_sink/postive/%s" % filename
> +                self.dut.send_expect(cmd,"[PIPELINE1]",50)
> +                out = self.dut.send_expect("quit","# ",10)
> +                self.verify("Bye!" in out, "Test failed on %s" % filename)
> +
> +    def test_negative(self):
> +        rootdir = "dep/ip_pipeline/ip_pipeline_source_sink/negative/"
> +        for parent,dirnames,filenames in os.walk(rootdir):
> +            for filename in filenames:
> +                cmd = self.path + " -f ~/ip_pipeline/ip_pipeline_source_sink/negative/%s" % filename
> +                out = self.dut.send_expect(cmd,"# ",50)
> +                self.verify("error" in out, "Test failed on %s" % filename)
> +
> +
> +
> +    def check_pacp_frame(self,pcapfile):
> +        self.dut.send_expect("scapy","Welcome to Scapy",50)
> +        self.dut.send_expect("p=rdpcap('%s')"% pcapfile,">>> ",500)
> +        out = self.dut.send_expect("p",">>> ",50)
> +        self.dut.send_expect("quit()","#",50)
> +        list1 = out.split()
> +        list2 = list1[1].split(":")
> +        return list2[1]
> +
> +    def test_source_sink_3(self):
> +
> +        cmd = self.path + " -f ~/ip_pipeline/ip_pipeline_source_sink/source_sink_3.cfg"
> +        out1=self.dut.send_expect(cmd,"[PIPELINE1]",50)
> +        time.sleep(10)
> +        out = self.dut.send_expect("quit","# ",10)
> +        eth1_1 = self.check_pacp_frame("/root/eth1.1.pcap")
> +        eth2_1 = self.check_pacp_frame("/root/eth2.1.pcap")
> +        self.verify("80" in eth1_1 and "200" in eth2_1, "test FAILED")
> +
> +
> +    def test_source_sink_4(self):
> +        cmd = self.path + " -f ~/ip_pipeline/ip_pipeline_source_sink/source_sink_4.cfg"
> +        self.dut.send_expect(cmd,"[PIPELINE1]",50)
> +        time.sleep(10)
> +        out = self.dut.send_expect("quit","# ",10)
> +        eth1_1 = self.check_pacp_frame("/root/eth1.1.pcap")
> +        eth2_1 = self.check_pacp_frame("/root/eth2.1.pcap")
> +        self.verify("80" in eth1_1 and "80" in eth1_1, "test FAILED")
> +
> +    def test_source_sink_5(self):
> +        cmd = self.path + " -f ~/ip_pipeline/ip_pipeline_source_sink/source_sink_5.cfg"
> +        self.dut.send_expect(cmd,"[PIPELINE1]",50)
> +        time.sleep(10)
> +        out = self.dut.send_expect("quit","# ",10)
> +        eth1_1 = self.check_pacp_frame("/root/eth1.1.pcap")
> +        self.verify("200" in eth1_1, "test FAILED")
> +
> +    def test_source_sink_7(self):
> +        cmd = self.path + " -f ~/ip_pipeline/ip_pipeline_source_sink/source_sink_7.cfg"
> +        self.dut.send_expect(cmd,"[PIPELINE1]",50)
> +        time.sleep(10)
> +        out = self.dut.send_expect("quit","# ",10)
> +        eth1_1 = self.check_pacp_frame("/root/eth1.1.pcap")
> +        eth2_1 = self.check_pacp_frame("/root/eth2.1.pcap")
> +        eth3_1 = self.check_pacp_frame("/root/eth3.1.pcap")
> +        eth4_1 = self.check_pacp_frame("/root/eth4.1.pcap")
> +
> +        self.verify("80" in eth1_1 and "200" in eth2_1 and "80" in eth3_1 and "200" in eth4_1, "test FAILED")
> +
> +    def test_source_sink_8(self):
> +        cmd = self.path + " -f ~/ip_pipeline/ip_pipeline_source_sink/source_sink_8.cfg"
> +        self.dut.send_expect(cmd,"[PIPELINE1]",50)
> +        time.sleep(10)
> +        out = self.dut.send_expect("quit","# ",10)
> +        eth1_1 = self.check_pacp_frame("/root/eth1.1.pcap")
> +        eth2_1 = self.check_pacp_frame("/root/eth2.1.pcap")
> +        eth3_1 = self.check_pacp_frame("/root/eth3.1.pcap")
> +        eth4_1 = self.check_pacp_frame("/root/eth4.1.pcap")
> +
> +        self.verify("80" in eth1_1 and "200" in eth2_1 and "80" in eth3_1 and "200" in eth4_1, "test FAILED")
> +
> +
> +    def test_source_sink_19(self):
> +        cmd = self.path + " -f ~/ip_pipeline/ip_pipeline_source_sink/source_sink_19.cfg"
> +        self.dut.send_expect(cmd,"[PIPELINE1]",50)
> +        time.sleep(10)
> +        out = self.dut.send_expect("quit","# ",100)
> +        eth1_1 = self.check_pacp_frame("/root/eth1.1.pcap")
> +        self.verify("80" in eth1_1 , "test FAILED")
> +
> +    def test_source_sink_6(self):
> +        cmd = self.path + " -f ~/ip_pipeline/ip_pipeline_source_sink/source_sink_6.cfg"
> +        self.dut.send_expect(cmd,"[PIPELINE1]",100)
> +        time.sleep(30)
> +        out = self.dut.send_expect("quit","# ",600)
> +        eth1_1 = self.check_pacp_frame("/root/eth1.1.pcap")
> +        eth2_1 = self.check_pacp_frame("/root/eth2.1.pcap")
> +        self.verify("80" in eth1_1 and "200" in eth2_1, "test FAILED")
> +
> +
> +    def tear_down(self):
> +        """
> +        Run after each test case.
> +        """
> +        self.dut.send_expect("rm -rf ~/eth1.1.pcap ~/eth1.pcap ~/eth2.1.pcap ~/eth2.pcap ~/eth3.1.pacp ~/eth3.pcap ~/eth4.1.pcap ~/eth4.pcap","# ",50)
> +        self.dut.send_expect("cp -a -f ~/ip_pipeline/eth1.1.pcap ~/ip_pipeline/eth1.pcap ~/ip_pipeline/eth2.1.pcap ~/ip_pipeline/eth2.pcap ~/ip_pipeline/eth3.1.pacp ~/ip_pipeline/eth3.pcap ~/ip_pipeline/eth4.1.pcap ~/ip_pipeline/eth4.pcap ~","# ",50)
Suggest to use list for so many pcap files.

> +        self.dut.kill_all()
> +        time.sleep(2)
> +
> +    def tear_down_all(self):
> +        """
> +        Run after each test suite.
> +        """
> +        pass

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

* Re: [dts] [PATCH V1 2/2] add ip_pipeline parser_cleanup test plan
  2016-08-23  9:26 ` [dts] [PATCH V1 2/2] add ip_pipeline parser_cleanup test plan xu,gang
@ 2016-08-25  2:41   ` Liu, Yong
  0 siblings, 0 replies; 18+ messages in thread
From: Liu, Yong @ 2016-08-25  2:41 UTC (permalink / raw)
  To: xu,gang, dts

Gang, this plan seem not match with suite, what's the problem?

On 08/23/2016 05:26 PM, xu,gang wrote:
> Signed-off-by: xu,gang <gangx.xu@intel.com>
> ---
>   .../ip_pipeline_parser_cleanup_test_plan.rst       | 373 +++++++++++++++++++++
>   1 file changed, 373 insertions(+)
>   create mode 100644 test_plans/ip_pipeline_parser_cleanup_test_plan.rst
>
> diff --git a/test_plans/ip_pipeline_parser_cleanup_test_plan.rst b/test_plans/ip_pipeline_parser_cleanup_test_plan.rst
> new file mode 100644
> index 0000000..51b5d55
> --- /dev/null
> +++ b/test_plans/ip_pipeline_parser_cleanup_test_plan.rst
> @@ -0,0 +1,373 @@
> +1. Test config parser for pipeline passthrough
> +
> +2. Test config parser for pipeline flow classification(need to test based on bugs raised)
> +
> +3. Test config parser for pipeline flow action
> +
> +4. Test config parser for pipeline firewall
> +
> +5. Test config parser for pipeline routing
> +
> +6. Add multiple whitespaces between argumetns in pktq_in/out and msgq_in/out section
> +
> +7. Create cfg files with all kinds of errors(like the section not supposed to be there, or out of range value)
> +
> +8. In pipeline specific cfg section, write n_rules=4k/64k/512k/16M and check if the table memory have the same size of n_rules=4096/65536... exact values
> +(problems is how to check the table memory, need to check with dev???)
> +
> +--------------------------------------------------
> +1. An invalid entry should be recognized(negative)
> +--------------------------------------------------
> +Config file as follows, pipeline is passthrough
> +[PIPELINE0]
> +type = MASTER
> +core = 0
> +
> +[PIPELINE1]
> +type = PASS-THROUGH
> +core = s1c1
> +pktq_in = RXQ0.0 RXQ1.0
> +pktq_out = TXQ1.0 TXQ0.0
> +dma_src_offset = 278; mbuf (128) + headroom (128) + 1st ethertype offset (14) + ttl offset within ip header = 278 (ipv4)
> +dma_dst_offset = 128; mbuf (128)
> +dma_size = 16
> +dma_src_mask = 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF
> +dma_hash_offset = 144; (dma_dst_offset+dma_size)
> +lb = hash
> +test = 123
> +Command to run: ./build/ip_pipeline -p 3 -f ./config/parsercleanup/pt1_mesgq_2ports.cfg
> +check that an invalid entry is recognized by config parser, "lb" is not a recognized entry, it should report the error, if yes, test pass, otherwise, test fail
> +
> +pipeline> [APP] Initializing PIPELINE1 ...
> +[PIPELINE1] Pass-through
> +Parse error in section "PIPELINE1": invalid entry "test"
> +PANIC in app_init_pipelines():
> +Pipeline instance "PIPELINE1" back-end init error
> +7: [./build/ip_pipeline() [0x432615]]
> +6: [/lib64/libc.so.6(__libc_start_main+0xf5) [0x33dca21d65]]
> +5: [./build/ip_pipeline(main+0x5f) [0x43187f]]
> +4: [./build/ip_pipeline(app_init+0x15b8) [0x4419e8]]
> +3: [./build/ip_pipeline() [0x43f85b]]
> +2: [./build/ip_pipeline(__rte_panic+0xc9) [0x42c33c]]
> +1: [./build/ip_pipeline(rte_dump_stack+0x1a) [0x4d5dca]]
> +Aborted (core dumped)
> +
> +--------------------------------------------------------------
> +2. Multiple whitespaces between arguments in pktq_in entry
> +--------------------------------------------------------------
> +Config file as follows
> +[PIPELINE0]
> +type = MASTER
> +core = 0
> +
> +[PIPELINE1]
> +type = PASS-THROUGH
> +core = s1c1
> +pktq_in = RXQ0.0  RXQ1.0
> +pktq_out = TXQ1.0 TXQ0.0
> +dma_src_offset = 278; mbuf (128) + headroom (128) + 1st ethertype offset (14) + ttl offset within ip header = 278 (ipv4)
> +dma_dst_offset = 128; mbuf (128)
> +dma_size = 16
> +dma_src_mask = 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF
> +dma_hash_offset = 144; (dma_dst_offset+dma_size)
> +Command to run: ./build/ip_pipeline -p 3 -f ./config/parsercleanup/pt1_mesgq_2ports.cfg
> +Check that the config parser can recognize the multiple whitespaces between each argument of pktq_in. If yes, test passed, otherwise, test failed.
> +
> +--------------------------------------------------------------
> +3. Multiple whitespaces between arguments in pktq_out entry
> +--------------------------------------------------------------
> +Config file as follows
> +[PIPELINE0]
> +type = MASTER
> +core = 0
> +
> +[PIPELINE1]
> +type = PASS-THROUGH
> +core = s1c1
> +pktq_in = RXQ0.0 RXQ1.0
> +pktq_out = TXQ1.0  TXQ0.0
> +dma_src_offset = 278; mbuf (128) + headroom (128) + 1st ethertype offset (14) + ttl offset within ip header = 278 (ipv4)
> +dma_dst_offset = 128; mbuf (128)
> +dma_size = 16
> +dma_src_mask = 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF
> +dma_hash_offset = 144; (dma_dst_offset+dma_size)
> +;lb = hash
> +Command to run: ./build/ip_pipeline -p 3 -f ./config/parsercleanup/pt1_mesgq_2ports.cfg
> +Check that the config parser can recognize the multiple whitespaces between each argument of pktq_out. If yes, test passed, otherwise, test failed.
> +
> +--------------------------------------------------------------
> +4. Multiple whitespaces between arguments in msgq_in entry
> +--------------------------------------------------------------
> +Config file as follows
> +[PIPELINE0]
> +type = MASTER
> +core = s0c0
> +;msgq_in = MSGQ-REQ-PIPELINE0 ; for customer in .cfg.out, can not assign in .cfg file, because these are used as the communication for master and other pipeline.
> +;msgq_out = MSGQ-RSP-PIPELINE0
> +timer_period = 1
> +
> +[PIPELINE1]
> +type = PASS-THROUGH
> +core = s0c1
> +pktq_in = RXQ0.0 RXQ1.0
> +pktq_out = TXQ0.0 TXQ1.0
> +msgq_in = MSGQ0  MSGQ1 MSGQ2 MSGQ3 ;MSGQ-REQ-PIPELINE1, dev will confirm on how to use it
> +msgq_out = MSGQ0 MSGQ1 MSGQ2 MSGQ3 ;MSGQ-RSP-PIPELINE1
> +timer_period = 100
> +
> +Command to run: ./build/ip_pipeline -p 3 -f ./config/parsercleanup/pt1_mesgq_2ports.cfg
> +Check that the config parser can recognize the multiple whitespaces between each argument of msgq_in. If yes, test passed, otherwise, test failed.
> +
> +--------------------------------------------------------------
> +5. Multiple whitespaces between arguments in msgq_out entry
> +--------------------------------------------------------------
> +Config file as follows
> +[PIPELINE0]
> +type = MASTER
> +core = s0c0
> +;msgq_in = MSGQ-REQ-PIPELINE0
> +;msgq_out = MSGQ-RSP-PIPELINE0
> +timer_period = 1
> +
> +[PIPELINE1]
> +type = PASS-THROUGH
> +core = s0c1
> +pktq_in = RXQ0.0 RXQ1.0
> +pktq_out = TXQ0.0 TXQ1.0
> +msgq_in = MSGQ0 MSGQ1 MSGQ2 MSGQ3 ;MSGQ-REQ-PIPELINE1
> +msgq_out = MSGQ0        MSGQ1 MSGQ2 MSGQ3 ;MSGQ-RSP-PIPELINE1
> +timer_period = 100
> +
> +Command to run: ./build/ip_pipeline -p 3 -f ./config/parsercleanup/pt1_mesgq_2ports.cfg
> +Check that the config parser can recognize the multiple whitespaces between each argument of msgq_in. If yes, test passed, otherwise, test failed.
> +
> +-----------------------------------
> +6. Not recognized section(negative)
> +-----------------------------------
> +Config file as follows
> +[PIPELINE0]
> +type = MASTER
> +core = 0
> +
> +[PIPELINE1]
> +type = PASS-THROUGH
> +core = s1c1
> +pktq_in = RXQ0.0 RXQ1.0
> +pktq_out = TXQ1.0 TXQ0.0
> +dma_src_offset = 278; mbuf (128) + headroom (128) + 1st ethertype offset (14) + ttl offset within ip header = 278 (ipv4)
> +dma_dst_offset = 128; mbuf (128)
> +dma_size = 16
> +dma_src_mask = 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF
> +dma_hash_offset = 144; (dma_dst_offset+dma_size)
> +;lb = hash
> +
> +[TESTSECTION]
> +type = flow classification
> +
> +Command to run: ./build/ip_pipeline -p 3 -f ./config/parsercleanup/pt1_2ports.cfg
> +Check that the config parser can report out the invalid section and print out "CFG:....." messages. If yes, test passed, otherwise, test failed.
> +
> +---------------------------------
> +7. Not recognized entry(negative)
> +---------------------------------
> +Config file as follows
> +[PIPELINE0]
> +type = MASTER
> +core = 0
> +
> +[PIPELINE1]
> +type = PASS-THROUGH
> +core = s1c1
> +pktq_in = RXQ0.0 RXQ1.0
> +pktq_out = TXQ1.0 TXQ0.0
> +dma_src_offset = 278; mbuf (128) + headroom (128) + 1st ethertype offset (14) + ttl offset within ip header = 278 (ipv4)
> +dma_dst_offset = 128; mbuf (128)
> +dma_size = 16
> +dma_src_mask = 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF
> +dma_hash_offset = 144; (dma_dst_offset+dma_size)
> +;lb = hash
> +test = value
> +
> +Command to run: ./build/ip_pipeline -p 3 -f ./config/parsercleanup/pt1_2ports.cfg
> +Check that the config parser can report out the invalid section and print out "CFG:....." messages. If yes, test passed, otherwise, test failed.
> +
> +--------------------------------------------------------------
> +8. Check that the n_rules can equal to 4k and the table memory have the same size of n_rules=4096(need to check with dev how to check the table memory)
> +firewall can not be seem, use flow classifcaion, n_flows, check table size
> +[PIPELINE2] Flow classification
> +TABLE: rte_table_hash_create_key16_ext: Hash table memory footprint is 397440 bytes
> +--------------------------------------------------------------
> +Config file as follows
> +[PIPELINE0]
> +type = MASTER
> +core = 0
> +
> +[PIPELINE1]
> +type = PASS-THROUGH
> +core = s1c1
> +pktq_in = RXQ0.0 RXQ1.0
> +pktq_out = SWQ0 SWQ1
> +dma_size = 16
> +dma_dst_offset = 192; mbuf (128) + 64
> +dma_src_offset = 278; mbuf (128) + headroom (128) + ethernet header (14) + ttl offset within ip header (8) = 278
> +dma_src_mask = 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF; ipv4 5-tuple
> +dma_hash_offset = 208; dma_dst_offset + dma_size
> +
> +[PIPELINE2]
> +type = FLOW_CLASSIFICATION
> +core = s1c2
> +pktq_in = SWQ0 SWQ1
> +pktq_out = TXQ1.0 TXQ0.0
> +n_flows = 4k
> +key_offset = 192; dma_dst_offset
> +key_size = 16; dma_size
> +hash_offset = 208; dma_hash_offset = 80
> +
> +Command to run: ./build/ip_pipeline -p 3 -f ./config/parsercleanup/fc_2ports.cfg
> +Check that app runs successfully and the table memory have the same size of n_flows=4096 If yes, test passed, otherwise, test failed.
> +
> +--------------------------------------------------------------
> +9. Check that the n_rules can equal to 64k and the table memory have the same size of n_rules=65536(need to check with dev how to check the table memory)
> +[PIPELINE2] Flow classification
> +TABLE: rte_table_hash_create_key16_ext: Hash table memory footprint is 6357120 bytes
> +--------------------------------------------------------------
> +Config file as follows
> +[PIPELINE0]
> +type = MASTER
> +core = 0
> +
> +[PIPELINE1]
> +type = PASS-THROUGH
> +core = s1c1
> +pktq_in = RXQ0.0 RXQ1.0
> +pktq_out = SWQ0 SWQ1
> +dma_size = 16
> +dma_dst_offset = 192; mbuf (128) + 64
> +dma_src_offset = 278; mbuf (128) + headroom (128) + ethernet header (14) + ttl offset within ip header (8) = 278
> +dma_src_mask = 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF; ipv4 5-tuple
> +dma_hash_offset = 208; dma_dst_offset + dma_size
> +
> +[PIPELINE2]
> +type = FLOW_CLASSIFICATION
> +core = s1c2
> +pktq_in = SWQ0 SWQ1
> +pktq_out = TXQ1.0 TXQ0.0
> +n_flows = 64k
> +key_offset = 192; dma_dst_offset
> +key_size = 16; dma_size
> +hash_offset = 208; dma_hash_offset = 80
> +
> +Command to run: ./build/ip_pipeline -p 3 -f ./config/parsercleanup/fc_2ports.cfg
> +Check that app runs successfully and the table memory have the same size of n_rules=65536 If yes, test passed, otherwise, test failed.
> +
> +--------------------------------------------------------------
> +10. Check that the n_rules can equal to 512k and the table memory have the same size of n_rules=524288(need to check with dev how to check the table memory)
> +[PIPELINE2] Flow classification
> +TABLE: rte_table_hash_create_key16_ext: Hash table memory footprint is 50856064 bytes
> +--------------------------------------------------------------
> +Config file as follows
> +[PIPELINE0]
> +type = MASTER
> +core = 0
> +
> +[PIPELINE1]
> +type = PASS-THROUGH
> +core = s1c1
> +pktq_in = RXQ0.0 RXQ1.0
> +pktq_out = SWQ0 SWQ1
> +dma_size = 16
> +dma_dst_offset = 192; mbuf (128) + 64
> +dma_src_offset = 278; mbuf (128) + headroom (128) + ethernet header (14) + ttl offset within ip header (8) = 278
> +dma_src_mask = 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF; ipv4 5-tuple
> +dma_hash_offset = 208; dma_dst_offset + dma_size
> +
> +[PIPELINE2]
> +type = FLOW_CLASSIFICATION
> +core = s1c2
> +pktq_in = SWQ0 SWQ1
> +pktq_out = TXQ1.0 TXQ0.0
> +n_flows = 512k
> +key_offset = 192; dma_dst_offset
> +key_size = 16; dma_size
> +hash_offset = 208; dma_hash_offset = 80
> +
> +Command to run: ./build/ip_pipeline -p 3 -f ./config/parsercleanup/fc_2ports.cfg
> +Check that app runs successfully and the table memory have the same size of n_rules=524288 If yes, test passed, otherwise, test failed.
> +
> +--------------------------------------------------------------
> +11. Check that the n_rules can equal to 16M and the table memory have the same size of n_rules=16777216(need to check with dev how to check the table memory), maximum is 2^32, use 2^32+1 to test out of range
> +[PIPELINE2] Flow classification
> +TABLE: rte_table_hash_create_key16_ext: Hash table memory footprint is 1627390080 bytes
> +--------------------------------------------------------------
> +Config file as follows
> +[PIPELINE0]
> +type = MASTER
> +core = 0
> +
> +[PIPELINE1]
> +type = PASS-THROUGH
> +core = s1c1
> +pktq_in = RXQ0.0 RXQ1.0
> +pktq_out = SWQ0 SWQ1
> +dma_size = 16
> +dma_dst_offset = 192; mbuf (128) + 64
> +dma_src_offset = 278; mbuf (128) + headroom (128) + ethernet header (14) + ttl offset within ip header (8) = 278
> +dma_src_mask = 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF; ipv4 5-tuple
> +dma_hash_offset = 208; dma_dst_offset + dma_size
> +
> +[PIPELINE2]
> +type = FLOW_CLASSIFICATION
> +core = s1c2
> +pktq_in = SWQ0 SWQ1
> +pktq_out = TXQ1.0 TXQ0.0
> +n_flows = 16M
> +key_offset = 192; dma_dst_offset
> +key_size = 16; dma_size
> +hash_offset = 208; dma_hash_offset = 80
> +
> +Command to run: ./build/ip_pipeline -p 3 -f ./config/parsercleanup/fc_2ports.cfg
> +Check that app runs successfully and the table memory have the same size of n_rules=16777216 If yes, test passed, otherwise, test failed.
> +
> +--------------------------------------------------------------
> +12. Check that the n_rules can equal to 16M+1 and the table memory have the same size of n_rules=16777216(need to check with dev how to check the table memory), maximum is 2^32, use 2^32+1 to test out of range
> +[PIPELINE2] Flow classification
> +Parse error in section "PIPELINE2": entry "n_flows" has invalid value ("16M+1")
> +PANIC in app_init_pipelines():
> +Pipeline instance "PIPELINE2" back-end init error
> +7: [./build/ip_pipeline() [0x431925]]
> +6: [/lib64/libc.so.6(__libc_start_main+0xf5) [0x33dca21d65]]
> +5: [./build/ip_pipeline(main+0x5f) [0x4304ff]]
> +4: [./build/ip_pipeline(app_init+0x13fb) [0x43f3bb]]
> +3: [./build/ip_pipeline() [0x43d449]]
> +2: [./build/ip_pipeline(__rte_panic+0xc9) [0x42af1a]]
> +1: [./build/ip_pipeline(rte_dump_stack+0x1a) [0x4c8c6a]]
> +Aborted (core dumped)
> +--------------------------------------------------------------
> +Config file as follows
> +[PIPELINE0]
> +type = MASTER
> +core = 0
> +
> +[PIPELINE1]
> +type = PASS-THROUGH
> +core = s1c1
> +pktq_in = RXQ0.0 RXQ1.0
> +pktq_out = SWQ0 SWQ1
> +dma_size = 16
> +dma_dst_offset = 192; mbuf (128) + 64
> +dma_src_offset = 278; mbuf (128) + headroom (128) + ethernet header (14) + ttl offset within ip header (8) = 278
> +dma_src_mask = 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF; ipv4 5-tuple
> +dma_hash_offset = 208; dma_dst_offset + dma_size
> +
> +[PIPELINE2]
> +type = FLOW_CLASSIFICATION
> +core = s1c2
> +pktq_in = SWQ0 SWQ1
> +pktq_out = TXQ1.0 TXQ0.0
> +n_flows = 16M+1
> +key_offset = 192; dma_dst_offset
> +key_size = 16; dma_size
> +hash_offset = 208; dma_hash_offset = 80
> +
> +Command to run: ./build/ip_pipeline -p 3 -f ./config/parsercleanup/fc_2ports.cfg
> +Check that app reports errors, if yes, test pass, otherwise, test fail

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

* Re: [dts] [PATCH V1 01/2] add keep alive test code
  2016-08-23  9:26 [dts] [PATCH V1 01/2] add keep alive test code xu,gang
                   ` (10 preceding siblings ...)
  2016-08-23  9:26 ` [dts] [PATCH V1 2/2] add ip_pipeline source_sink test plan xu,gang
@ 2016-08-25  5:38 ` Liu, Yong
  11 siblings, 0 replies; 18+ messages in thread
From: Liu, Yong @ 2016-08-25  5:38 UTC (permalink / raw)
  To: xu,gang, dts

Thanks gang, applied.

On 08/23/2016 05:26 PM, xu,gang wrote:
> Signed-off-by: xu,gang <gangx.xu@intel.com>
> ---
>   tests/TestSuite_keep_alive.py | 114 ++++++++++++++++++++++++++++++++++++++++++
>   1 file changed, 114 insertions(+)
>   create mode 100644 tests/TestSuite_keep_alive.py
>
> diff --git a/tests/TestSuite_keep_alive.py b/tests/TestSuite_keep_alive.py
> new file mode 100644
> index 0000000..2ed14f8
> --- /dev/null
> +++ b/tests/TestSuite_keep_alive.py
> @@ -0,0 +1,114 @@
> +#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 keep alive
> +"""
> +
> +import dts
> +import string
> +import time
> +import re
> +from test_case import TestCase
> +from plotting import Plotting
> +from settings import HEADER_SIZE
> +from etgen import IxiaPacketGenerator
> +from packet import Packet, sniff_packets, load_sniff_packets
> +
> +class TestKeepAlive(TestCase):
> +
> +    def set_up_all(self):
> +        """
> +        Run at the start of each test suite.
> +        """
> +
> +        self.dut_ports = self.dut.get_ports(self.nic)
> +        self.verify(len(self.dut_ports) >= 2, "Insufficient ports")
> +        cores = self.dut.get_core_list("1S/4C/1T")
> +        self.coremask = dts.create_mask(cores)
> +
> +        self.path = "./examples/l2fwd-keepalive/build/l2fwd-keepalive"
> +
> +        # build sample app
> +        out = self.dut.build_dpdk_apps("./examples/l2fwd-keepalive")
> +        self.verify("Error" not in out, "compilation error 1")
> +        self.verify("No such file" not in out, "compilation error 2")
> +
> +    def set_up(self):
> +        """
> +        Run before each test case.
> +        """
> +        pass
> +
> +    def test_keep_alive(self):
> +        """
> +        Verify netmap compatibility with one port
> +        """
> +        cmd = self.path + " -c f -n 4 -- -q 8 -p ffff -K 10"
> +
> +        self.dut.send_expect(cmd,"Port statistics",60)
> +
> +        self.scapy_send_packet(2000)
> +        out = self.dut.get_session_output(timeout=10)
> +        print out
> +        p = re.compile(r'\d+')
> +        result = p.findall(out)
> +        amount = 2000 * len(self.dut_ports)
> +        self.verify(str(amount) in result, "Wrong: can't get <%s> package")
> +
> +    def scapy_send_packet(self,nu):
> +        """
> +        Send a packet to port
> +        """
> +        for i in range(len(self.dut_ports)):
> +            txport = self.tester.get_local_port(self.dut_ports[i])
> +            mac = self.dut.get_mac_address(self.dut_ports[i])
> +            txItf = self.tester.get_interface(txport)
> +            self.tester.scapy_append('sendp([Ether(dst="%s")/IP()/UDP()/Raw(\'X\'*18)], iface="%s",count=%s)' % (mac,txItf,nu))
> +            self.tester.scapy_execute()
> +
> +
> +    def tear_down(self):
> +        """
> +        Run after each test case.
> +        """
> +        self.dut.kill_all()
> +        time.sleep(2)
> +        pass
> +
> +    def tear_down_all(self):
> +        """
> +        Run after each test suite.
> +        """
> +        pass
> +

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

* Re: [dts] [PATCH V1 02/2] add ip_pipeline cfg test plan
  2016-08-23  9:26 ` [dts] [PATCH V1 02/2] add ip_pipeline cfg test plan xu,gang
@ 2016-08-25  5:44   ` Liu, Yong
  0 siblings, 0 replies; 18+ messages in thread
From: Liu, Yong @ 2016-08-25  5:44 UTC (permalink / raw)
  To: xu,gang, dts

Hi gang, you need add more descriptions in this test plan. At least 
should describe what is negative in the configuration file.
For you detail description of ip_pipeline configuration, you can add 
ip_pipeline user guide link in the test plan.

On 08/23/2016 05:26 PM, xu,gang wrote:
> Signed-off-by: xu,gang <gangx.xu@intel.com>
> ---
>   test_plans/ip_pipeline_cfg_test_plan.rst | 352 +++++++++++++++++++++++++++++++
>   1 file changed, 352 insertions(+)
>   create mode 100644 test_plans/ip_pipeline_cfg_test_plan.rst
>
> diff --git a/test_plans/ip_pipeline_cfg_test_plan.rst b/test_plans/ip_pipeline_cfg_test_plan.rst
> new file mode 100644
> index 0000000..e608bf4
> --- /dev/null
> +++ b/test_plans/ip_pipeline_cfg_test_plan.rst
> @@ -0,0 +1,352 @@
> +.. Copyright (c) <2010,2011>, 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.
> +
> +ip_pipeline cfg test plan
> +=========================
> +[cfginfor=cfg]
> +defauld=10
> +positive=200
> +negative=200
> +
> +[PIPELINE1=DEFAULD]
> +core = 1
> +pktq_in = RXQ0.0 RXQ1.0
> +pktq_out = TXQ0.0 TXQ1.0
> +msgq_in = MSGQ0
> +msgq_out = MSGQ0
> +timer_period = 100
> +
> +[PIPELINE1=POSITIVE]
> +core = 1
> +pktq_in = RXQ0.0 RXQ1.0
> +pktq_out = TXQ0.0 TXQ1.0
> +msgq_in = MSGQ0
> +msgq_out = MSGQ0
> +timer_period = 100
> +
> +[PIPELINE1=NEGATIVE]
> +core = 1
> +pktq_in = RXQ0.0 RXQ1.0
> +pktq_out = TXQ0.0 TXQ1.0
> +msgq_in = MSGQ0
> +msgq_out = MSGQ0
> +timer_period = 100
> +
> +[PASS-THROUGH=DEFAULD]
> +dma_size = 16
> +dma_dst_offset = 64
> +dma_src_offset = 150
> +dma_src_mask = 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF
> +dma_hash_offset = 80
> +[FLOW_CLASSIFICATION=DEFAULD]
> +n_flows = 4096
> +key_offset = 192
> +key_size = 16
> +hash_offset = 208
> +
> +[FLOW_ACTIONS=DEFAULD]
> +n_flows = 4096
> +flow_id_offset = 286
> +color_offset = 192
> +ip_hdr_offset = 270
> +n_meters_per_flow = 1
> +
> +[FIREWALL=DEFAULD]
> +n_rules = 1
> +pkt_type = ipv4
> +
> +[ROUTING=DEFAULD]
> +n_routes = 4096
> +ip_hdr_offset = 270
> +
> +[PASS-THROUGH=POSITIVE]
> +dma_size = 16
> +dma_dst_offset = 64
> +dma_src_offset = 150
> +dma_src_mask = 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF
> +dma_hash_offset = 80
> +#pkt_type = ipv4|vlan_ipv4|mpls_ipv4|ipv6|vlan_ipv6|mpls_ipv6|ipv4_5tuple|ipv6_5tuple|qinq
> +#key_offset_wr=0|4294967295
> +#key_offset= 0|4294967295
> +#hash_func=simple|crc|aseni
> +#hash_offset=0|4294967295
> +#lb = off|on
> +#check_ip_header=off|on
> +
> +[PASS-THROUGH=NEGATIVE]
> +#key_offset_wr=-1|4294967296
> +#hash_func=abcde
> +#hash_offset=-1|4294967296
> +
> +[FLOW_CLASSIFICATION=POSITIVE]
> +n_flows = 2|2147483648
> +key_offset = 0|4294967295
> +key_size = 8|16
> +hash_offset =  0|4294967295
> +#flow_id_offset=0|4294967295
> +#flow_stat=off|on
> +#color_offset=0|4294967295
> +#input_color_offset= 0|4294967295
> +#meter_type=srtcm|trtcm
> +
> +[FLOW_CLASSIFICATION=NEGATIVE]
> +n_flows = 0|-1|4294967296
> +key_offset = -1|4294967296
> +key_size = 7
> +hash_offset = -1|4294967296
> +#flow_id_offset=-1|4294967296
> +#flow_stats=abc
> +#color_offset=-1|4294967296
> +#input_color_offset=-1|4294967296
> +#meter_type= abcd
> +
> +[FLOW_ACTIONS=POSITIVE]
> +n_flows = 2|4096
> +flow_id_offset = 0|4294967295
> +#flow_stats=off|on
> +color_offset =  0|4294967295
> +ip_hdr_offset = 0|4294967295
> +#meter_type =srtcm|trtcm
> +n_meters_per_flow = 4
> +
> +[FLOW_ACTIONS=NEGATIVE]
> +n_flows = 0|-1|4294967296
> +flow_id_offset = -1|4294967296
> +#flow_stats=abc
> +color_offset = -1|4294967296
> +#meter_type=abcd
> +ip_hdr_offset = -1|4294967296
> +n_meters_per_flow = 0|5
> +
> +[FIREWALL=POSITIVE]
> +n_rules = 1|4294967295
> +pkt_type = vlan_ipv4|qinq_ipv4
> +#ipv6|vlan_ipv6|qinq_ipv6
> +
> +[FIREWALL=NEGATIVE]
> +n_rules = -1|4294967296
> +pkt_type = abcde
> +
> +[ROUTING=POSITIVE]
> +n_routes = 1|4294967295
> +#ip_da_offset=0|1|4294967295
> +#n_arp_entries=0|4294967295
> +#arp_key_offset=0|4294967295
> +#next_hop_type=ipv4|vlan_ipv4|qinq_ipv4|mpls_ipv4|ipv6|vlan_ipv6|qinq_ipv6|mpls_ipv6
> +#ttl=off|on
> +#color_offset=0|4294967295
> +ip_hdr_offset = 0|4294967295
> +
> +[ROUTING=NEGATIVE]
> +n_routes = -1|4294967296
> +#ip_da_offset=-1|4294967296
> +#n_arp_entries=-1|4294967296
> +#arp_key_offset=-1|4294967296
> +#next_hop_type=abcd
> +#ttl=abcd
> +#color_offset=-1|4294967296
> +ip_hdr_offset = -1|4294967296
> +
> +#[MEMPOOL=DEFAULD=PASS-THROUGH]
> +#buffer_size=2304
> +#pool_size=32768
> +#cache_size=256
> +#cpu=0
> +
> +#[NEGATIVE=MEMPOOL]
> +#buffer_size=-1|4294967296|abcde
> +#pool_size=-1|4294967296|abcde
> +#cache_size=-1|4294967296|abcde
> +#cpu=-1|4294967296|abcde
> +
> +#[POSITIVE=MEMPOOL]
> +#buffer_size=2304|0|4294967295
> +#pool_size=32768|512|4294967295
> +#cache_size=256|1|512
> +#cpu=0|1|4294967295
> +
> +#[LINK=DEFAULD=FIREWALL]
> +#arp_q=0
> +#tcp_sync_local_q=0
> +#ip_local_q=0
> +#tcp_local_q=0
> +#udp_local_q=0
> +#sctp_local_q=0
> +#promisc=YES
> +
> +#[NEGATIVE=LINK]
> +#arp_q =-1|128|abcde
> +#tcp_sync_local_q =-1|128|abcde
> +#ip_local_q=-1|128|abcde
> +#tcp_local_q=-1|128|abcde
> +#udp_local_q=-1|128|abcde
> +#sctp_local_q=-1|128|abcde
> +#promisc=YESYES
> +
> +#[POSITIVE=LINK]
> +#arp_q=0|127
> +#tcp_sync_local_q=0|127
> +#ip_local_q=0|127
> +#tcp_local_q=0|127
> +#udp_local_q=0|127
> +#sctp_local_q=0|127
> +#promisc =YES|NO
> +
> +#[RXQ=DEFAULD=FLOW_ACTIONS]
> +#mempool=MEMPOOL0
> +#size=128
> +#burst=32
> +
> +#[NEGATIVE=RXQ]
> +#mempool=-1|4694967296|abcdedf
> +#size=-1|4694967296|abcdedf
> +#burst=-1|4694967296|abcdedf
> +
> +#[POSITIVE=RXQ]
> +#mempool=MEMPOOL0|MEMPOOL1|4294967295
> +#size=128|0|4294967295
> +#burst=32|0|4294967295
> +
> +#[TXQ=DEFAULD=FLOW_CLASSIFICATION]
> +#size=512
> +#burst=32
> +#dropless=NO
> +#n_retries=0
> +
> +#[NEGATIVE=TXQ]
> +#size=0|3|-1|4694967296
> +#burst=0|3|-1|4694967296
> +#dropless=SSS
> +#n_retries=-1|4694967296
> +
> +#[POSITIVE=TXQ]
> +#size=512|64|2147483648
> +#burst=32|2|1073741824
> +#dropless=YES|NO
> +#n_retries=0|1|4294967295
> +
> +#[SWQ=DEFAULD=PASS-THROUGH]
> +#size=512
> +#burst_read=256
> +#burst_write=256
> +#dropless=NO
> +#n_retries=0
> +#cpu=0
> +
> +#[NEGATIVE=SWQ]
> +#size=3|0|-1|4694967296
> +#burst_read=0|3|4694967297
> +#burst_write=0|3|4694967297
> +#dropless=YESYES
> +#n_retries=-1|4694967296
> +#cpu=-1|4694967296
> +
> +#[POSITIVE=SWQ]
> +#size=512|2|134217728
> +#burst_read=256|2|67108864
> +#burst_write=256|2|67108864
> +#dropless=NO|YES
> +#n_retries=0|1|4294967295
> +#cpu=0|1|4294967295|10
> +
> +#[TM=DEFAULD=PASS-THROUGH]
> +#cfg= config-tm_profile.cfg
> +#burst_read=64
> +#burst_write=32
> +
> +#[NEGATIVE=TM]
> +#cfg=config-tm.cfg
> +#burst_read=-1|4294967296
> +#write_read=-1|4294967296
> +
> +#[POSITIVE=TM]
> +#cfg=config-tm_profile.cfg
> +#burst_read=64|0|4294967295
> +#burst_write=32|0|4294967295
> +
> +#[SOURCE=DEFAULD=PASS-THROUGH]
> +#mempool=MEMPOOL0
> +#burst=32
> +
> +#[NEGATIVE=SOURCE]
> +#mempool=-1|4294967296|abcde
> +#burst=-1|4294967296|abcde
> +
> +#[POSITIVE=SOURCE]
> +#mempool=MEMPOOL0|0|4294967295
> +#burst=32|0|4294967295
> +
> +#[SINK=DEFAULD=PASS-THROUGH]
> +#size=64
> +#cpu=0
> +
> +#[NEGATIVE=SINK]
> +#size=0|3|-1|4294967296|abcde
> +#cpu=-1|4294967296|abcde
> +
> +#[POSITIVE=SINK]
> +#size=64|2|4294967294
> +#cpu=0|1|4294967295
> +
> +#[MSGQ=DEFAULD=PASS-THROUGH]
> +#size=64
> +#cpu=0
> +
> +#[NEGATIVE=MSGQ]
> +#size=0|3|-1|4294967296|abcde
> +#cpu=-1|4294967296|abcde
> +
> +#[POSITIVE=MSGQ]
> +#size=64|2|4294967294
> +#cpu=0|1|4294967295
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +

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

* Re: [dts] [PATCH V1 02/2] add ip_pipeline cpu utilization test plan
  2016-08-23  9:26 ` [dts] [PATCH V1 02/2] add ip_pipeline cpu utilization test plan xu,gang
@ 2016-08-25  5:46   ` Liu, Yong
  0 siblings, 0 replies; 18+ messages in thread
From: Liu, Yong @ 2016-08-25  5:46 UTC (permalink / raw)
  To: xu,gang, dts

Hi gang, this plan need more descriptions, have no idea about what is 
testing from below text.

+check::
+     first send package to port,then
+     t 1 headroom
+     check the utilization



On 08/23/2016 05:26 PM, xu,gang wrote:
> Signed-off-by: xu,gang <gangx.xu@intel.com>
> ---
>   .../ip_pipeline_cpu_utilization_test_plan.rst      | 42 ++++++++++++++++++++++
>   1 file changed, 42 insertions(+)
>   create mode 100644 test_plans/ip_pipeline_cpu_utilization_test_plan.rst
>
> diff --git a/test_plans/ip_pipeline_cpu_utilization_test_plan.rst b/test_plans/ip_pipeline_cpu_utilization_test_plan.rst
> new file mode 100644
> index 0000000..cfe2c2c
> --- /dev/null
> +++ b/test_plans/ip_pipeline_cpu_utilization_test_plan.rst
> @@ -0,0 +1,42 @@
> +..  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.
> +
> +ip_pipeline_cpu_utilization_test_plan
> +======================================
> +
> +make::
> +     make -C examples/ip_pipeline/
> +running::
> +     ./build/ip_pipeline -p 0xf -f ./config/edge_router_downstream.cfg -s ./config/edge_router_downstream.sh
> +
> +check::
> +     first send package to port,then
> +     t 1 headroom
> +     check the utilization

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

* Re: [dts] [PATCH V1 01/2] add ip_pipeline link_identification test code
  2016-08-23  9:26 ` [dts] [PATCH V1 01/2] add ip_pipeline link_identification test code xu,gang
@ 2016-08-25  5:50   ` Liu, Yong
  0 siblings, 0 replies; 18+ messages in thread
From: Liu, Yong @ 2016-08-25  5:50 UTC (permalink / raw)
  To: xu,gang, dts

Gang, this suite seem not match the test plan. And one comment below.

On 08/23/2016 05:26 PM, xu,gang wrote:
> Signed-off-by: xu,gang <gangx.xu@intel.com>
> ---
>   tests/TestSuite_ip_pipeline_link_identification.py | 155 +++++++++++++++++++++
>   1 file changed, 155 insertions(+)
>   create mode 100644 tests/TestSuite_ip_pipeline_link_identification.py
>
> diff --git a/tests/TestSuite_ip_pipeline_link_identification.py b/tests/TestSuite_ip_pipeline_link_identification.py
> new file mode 100644
> index 0000000..a21ab28
> --- /dev/null
> +++ b/tests/TestSuite_ip_pipeline_link_identification.py
> @@ -0,0 +1,155 @@
> +#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 ip_pipeline_link_identification.
> +"""
> +
> +import dts
> +import string
> +import time
> +import re
> +import os
> +from test_case import TestCase
> +from plotting import Plotting
> +from settings import HEADER_SIZE
> +from etgen import IxiaPacketGenerator
> +from packet import Packet, sniff_packets, load_sniff_packets
> +
> +class Test_ip_pipeline_link_identification(TestCase):
> +
> +    def set_up_all(self):
> +        """
> +        Run at the start of each test suite.
> +        """
> +        self.dut_ports = self.dut.get_ports(self.nic)
> +        self.verify(len(self.dut_ports) >= 2, "Insufficient ports")
> +        cores = self.dut.get_core_list("1S/4C/1T")
> +        self.coremask = dts.create_mask(cores)
> +
> +        self.packag_ip_pipeline()
> +        self.dut.session.copy_file_to("dep/ip_pipeline.tar.gz")
> +        put = self.dut.send_expect("tar -zxvf ~/ip_pipeline.tar.gz -C ~","#",500)
> +        self.verify("Error" not in put, "tar fail")
> +        self.path = "./examples/ip_pipeline/build/ip_pipeline"
> +
> +        # build sample app
> +        out = self.dut.build_dpdk_apps("./examples/ip_pipeline")
> +        self.verify("Error" not in out, "compilation error 1")
> +        self.verify("No such file" not in out, "compilation error 2")
> +
> +    def set_up(self):
> +        """
> +        Run before each test case.
> +        """
> +        pass
> +
> +    def replace_pci(self,filename,old,new):
> +        try:
> +            lines = open(filename,'r').readlines()
> +            flen = len(lines) - 1
> +            for i in range(flen):
> +                if old in lines[i]:
> +                    lines[i] = lines[i].replace(old,new)
> +            open(filename,'w').writelines(lines)
> +        except Exception,e:
> +            print e
> +
> +    def packag_ip_pipeline(self):
> +        rootdir = "dep/ip_pipeline/ip_pipeline_link_identification/postive/"
> +        for parent,dirnames,filenames in os.walk(rootdir):
> +            for filename in filenames:
> +                self.replace_pci(parent + filename,"port0","%s" % self.dut.ports_info[0]['pci'])
> +                self.replace_pci(parent + filename,"port1","%s" % self.dut.ports_info[1]['pci'])
> +                self.replace_pci(parent + filename,"port2","%s" % self.dut.ports_info[2]['pci'])
> +                self.replace_pci(parent + filename,"port3","%s" % self.dut.ports_info[3]['pci'])

If this suite required at least four ports, please check the number in 
set_up_all function.

> +        rootdir = "dep/ip_pipeline/ip_pipeline_link_identification/negative/"
> +        for parent,dirnames,filenames in os.walk(rootdir):
> +            for filename in filenames:
> +                self.replace_pci(parent + filename,"port0","%s" % self.dut.ports_info[0]['pci'])
> +                self.replace_pci(parent + filename,"port1","%s" % self.dut.ports_info[1]['pci'])
> +                self.replace_pci(parent + filename,"port2","%s" % self.dut.ports_info[2]['pci'])
> +                self.replace_pci(parent + filename,"port3","%s" % self.dut.ports_info[3]['pci'])
> +        self.tester.send_expect("cd dep/","#",10)
> +        self.tester.send_expect("rm -rf ip_pipeline.tar.gz","#",10)
> +        self.tester.send_expect("tar -czvf ip_pipeline.tar.gz ip_pipeline/","#",10)
> +        self.tester.send_expect("cd ../","#",10)
> +
> +
> +    def test_postive(self):
> +        rootdir = "dep/ip_pipeline/ip_pipeline_link_identification/postive/"
> +        for parent,dirnames,filenames in os.walk(rootdir):
> +            for filename in filenames:
> +                if "_f" in filename:
> +                    cmd = self.path + " -f ~/ip_pipeline/ip_pipeline_link_identification/postive/%s" % filename
> +                    self.dut.send_expect(cmd,"[PIPELINE1]",50)
> +                    out = self.dut.send_expect("quit","# ",10)
> +                    self.verify("Bye!" in out, "Test failed on %s" % filename)
> +                elif "_pf" in filename:
> +                    cmd = self.path + " -p f -f ~/ip_pipeline/ip_pipeline_link_identification/postive/%s" % filename
> +                    self.dut.send_expect(cmd,"[PIPELINE1]",50)
> +                    out = self.dut.send_expect("quit","# ",10)
> +                    self.verify("Bye!" in out, "Test failed on %s" % filename)
> +
> +
> +    def test_negative(self):
> +        rootdir = "dep/ip_pipeline/ip_pipeline_link_identification/negative/"
> +        for parent,dirnames,filenames in os.walk(rootdir):
> +            for filename in filenames:
> +                if "_f" in filename:
> +                    cmd = self.path + " -p 0x3 -f ~/ip_pipeline/ip_pipeline_link_identification/negative/%s" % filename
> +                    out = self.dut.send_expect(cmd,"# ",50)
> +                    self.verify("error" in out, "Test failed on %s" % filename)
> +                elif "_1p" in filename:
> +                    cmd = self.path + " -p 1 -f ~/ip_pipeline/ip_pipeline_link_identification/negative/%s" % filename
> +                    out = self.dut.send_expect(cmd,"# ",50)
> +                    self.verify("error" in out, "Test failed on %s" % filename)
> +
> +                elif "_3p" in filename:
> +                    cmd = self.path + " -p 3 -f ~/ip_pipeline/ip_pipeline_link_identification/negative/%s" % filename
> +                    out = self.dut.send_expect(cmd,"#",50)
> +                    self.verify("error" in out, "Test failed on %s" % filename)
> +
> +
> +    def tear_down(self):
> +        """
> +        Run after each test case.
> +        """
> +        self.dut.kill_all()
> +        time.sleep(2)
> +
> +    def tear_down_all(self):
> +        """
> +        Run after each test suite.
> +        """
> +        pass

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

end of thread, other threads:[~2016-08-25  5:46 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-08-23  9:26 [dts] [PATCH V1 01/2] add keep alive test code xu,gang
2016-08-23  9:26 ` [dts] [PATCH V1 02/2] add keep alive test plan xu,gang
2016-08-23  9:26 ` [dts] [PATCH V1 01/2] add ip_pipeline cfg test code xu,gang
2016-08-23  9:26 ` [dts] [PATCH V1 02/2] add ip_pipeline cfg test plan xu,gang
2016-08-25  5:44   ` Liu, Yong
2016-08-23  9:26 ` [dts] [PATCH V1 01/2] add ip_pipeline_cpu_utilization test code xu,gang
2016-08-23  9:26 ` [dts] [PATCH V1 02/2] add ip_pipeline cpu utilization test plan xu,gang
2016-08-25  5:46   ` Liu, Yong
2016-08-23  9:26 ` [dts] [PATCH V1 01/2] add ip_pipeline link_identification test code xu,gang
2016-08-25  5:50   ` Liu, Yong
2016-08-23  9:26 ` [dts] [PATCH V1 02/2] add ip_pipeline link_identification test plan xu,gang
2016-08-23  9:26 ` [dts] [PATCH V1 01/2] add ip_pipeline parser_cleanup test code xu,gang
2016-08-23  9:26 ` [dts] [PATCH V1 2/2] add ip_pipeline parser_cleanup test plan xu,gang
2016-08-25  2:41   ` Liu, Yong
2016-08-23  9:26 ` [dts] [PATCH V1 1/2] add ip_pipeline source_sink test code xu,gang
2016-08-25  2:36   ` Liu, Yong
2016-08-23  9:26 ` [dts] [PATCH V1 2/2] add ip_pipeline source_sink test plan xu,gang
2016-08-25  5:38 ` [dts] [PATCH V1 01/2] add keep alive test code Liu, Yong

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