test suite reviews and discussions
 help / color / mirror / Atom feed
* [dts] [PATCH V2 01/10] add ip_pipeline cfg test code
@ 2016-08-25  8:24 xu,gang
  2016-08-25  8:24 ` [dts] [PATCH V2 02/10] add ip_pipeline cfg test plan xu,gang
                   ` (8 more replies)
  0 siblings, 9 replies; 12+ messages in thread
From: xu,gang @ 2016-08-25  8:24 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] 12+ messages in thread

* [dts] [PATCH V2 02/10] add ip_pipeline cfg test plan
  2016-08-25  8:24 [dts] [PATCH V2 01/10] add ip_pipeline cfg test code xu,gang
@ 2016-08-25  8:24 ` xu,gang
  2016-08-26  1:28   ` Liu, Yong
  2016-08-25  8:24 ` [dts] [PATCH V2 03/10] add ip_pipeline cpu utilization test code xu,gang
                   ` (7 subsequent siblings)
  8 siblings, 1 reply; 12+ messages in thread
From: xu,gang @ 2016-08-25  8:24 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 | 173 +++++++++++++++++++++++++++++++
 1 file changed, 173 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..db8170e
--- /dev/null
+++ b/test_plans/ip_pipeline_cfg_test_plan.rst
@@ -0,0 +1,173 @@
+.. 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
+========================
+
+run ip_pipeline need cfg file,so this case test if ip_pipeline's cfg file 
+changed whrther the ip_pipeline program can run.
+the cfg file as follow:
+
+default-FIREWALL.cfg
+=======================
+;The default values are stored in this file
+[PIPELINE0]
+type = MASTER
+core = 0
+;PIPELINE1 all global variable
+[PIPELINE1]
+core = 1
+pktq_in = RXQ0.0 RXQ1.0
+pktq_out = TXQ0.0 TXQ1.0
+msgq_in = MSGQ0
+msgq_out = MSGQ0
+timer_period = 100
+
+type = FIREWALL
+n_rules = 1
+pkt_type = ipv4
+
+if running successfully,test pass else fail
+-------------------------------------------
+
+default-FLOW_ACTIONS.cfg
+========================
+;The default values are stored in this file
+[PIPELINE0]
+type = MASTER
+core = 0
+;PIPELINE1 all global variable
+[PIPELINE1]
+core = 1
+pktq_in = RXQ0.0 RXQ1.0
+pktq_out = TXQ0.0 TXQ1.0
+msgq_in = MSGQ0
+msgq_out = MSGQ0
+timer_period = 100
+
+type = FLOW_ACTIONS
+n_flows = 4096
+flow_id_offset = 286
+color_offset = 192
+ip_hdr_offset = 270
+n_meters_per_flow = 1
+
+if running successfully,test pass else fail
+-------------------------------------------
+
+default-FLOW_CLASSIFICATION.cfg
+===============================
+;The default values are stored in this file
+[PIPELINE0]
+type = MASTER
+core = 0
+;PIPELINE1 all global variable
+[PIPELINE1]
+core = 1
+pktq_in = RXQ0.0 RXQ1.0
+pktq_out = TXQ0.0 TXQ1.0
+msgq_in = MSGQ0
+msgq_out = MSGQ0
+timer_period = 100
+
+type = FLOW_CLASSIFICATION
+n_flows = 4096
+key_offset = 192
+key_size = 16
+hash_offset = 208
+
+if running successfully,test pass else fail
+-------------------------------------------
+
+default-PASS-THROUGH.cfg   
+========================
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+core = 1
+pktq_in = RXQ0.0 RXQ1.0
+pktq_out = TXQ0.0 TXQ1.0
+msgq_in = MSGQ0
+msgq_out = MSGQ0
+timer_period = 100
+
+type = PASS-THROUGH
+dma_size = 16
+dma_dst_offset = 64
+dma_src_offset = 150
+dma_src_mask = 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF
+dma_hash_offset = 80
+
+if running successfully,test pass else fail
+-------------------------------------------
+
+default-ROUTING.cfg
+===================
+;The default values are stored in this file
+[PIPELINE0]
+type = MASTER
+core = 0
+;PIPELINE1 all global variable
+[PIPELINE1]
+core = 1
+pktq_in = RXQ0.0 RXQ1.0
+pktq_out = TXQ0.0 TXQ1.0
+msgq_in = MSGQ0
+msgq_out = MSGQ0
+timer_period = 100
+
+type = ROUTING
+n_routes = 4096
+ip_hdr_offset = 270
+
+if running successfully,test pass else fail
+-------------------------------------------
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-- 
1.9.3

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

* [dts] [PATCH V2 03/10] add ip_pipeline cpu utilization test code
  2016-08-25  8:24 [dts] [PATCH V2 01/10] add ip_pipeline cfg test code xu,gang
  2016-08-25  8:24 ` [dts] [PATCH V2 02/10] add ip_pipeline cfg test plan xu,gang
@ 2016-08-25  8:24 ` xu,gang
  2016-08-25  8:24 ` [dts] [PATCH V2 04/10] add ip_pipeline cpu utilization test plan xu,gang
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 12+ messages in thread
From: xu,gang @ 2016-08-25  8:24 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] 12+ messages in thread

* [dts] [PATCH V2 04/10] add ip_pipeline cpu utilization test plan
  2016-08-25  8:24 [dts] [PATCH V2 01/10] add ip_pipeline cfg test code xu,gang
  2016-08-25  8:24 ` [dts] [PATCH V2 02/10] add ip_pipeline cfg test plan xu,gang
  2016-08-25  8:24 ` [dts] [PATCH V2 03/10] add ip_pipeline cpu utilization test code xu,gang
@ 2016-08-25  8:24 ` xu,gang
  2016-08-25  8:24 ` [dts] [PATCH V2 05/10] add ip_pipeline link_identification test code xu,gang
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 12+ messages in thread
From: xu,gang @ 2016-08-25  8:24 UTC (permalink / raw)
  To: dts; +Cc: xu,gang

Signed-off-by: xu,gang <gangx.xu@intel.com>
---
 .../ip_pipeline_cpu_utilization_test_plan.rst      | 50 ++++++++++++++++++++++
 1 file changed, 50 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..d7ae39a
--- /dev/null
+++ b/test_plans/ip_pipeline_cpu_utilization_test_plan.rst
@@ -0,0 +1,50 @@
+..  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
+======================================
+
+the ip_pipeline_cpu_utilization is test ip_pipeline cpu tx/rx packet utilization.
+steps as follow:
+
+make::
+     make -C examples/ip_pipeline/
+running::
+     ./build/ip_pipeline -p 0xf -f ./config/edge_router_downstream.cfg -s ./config/edge_router_downstream.sh
+
+send packet::
+     with the tools you can send a packet
+check:: 
+    ip_pipeline> t 1 headroom
+
+check the log ,if 100% the test pass ,else fail
+
+
+
-- 
1.9.3

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

* [dts] [PATCH V2 05/10] add ip_pipeline link_identification test code
  2016-08-25  8:24 [dts] [PATCH V2 01/10] add ip_pipeline cfg test code xu,gang
                   ` (2 preceding siblings ...)
  2016-08-25  8:24 ` [dts] [PATCH V2 04/10] add ip_pipeline cpu utilization test plan xu,gang
@ 2016-08-25  8:24 ` xu,gang
  2016-08-25  8:24 ` [dts] [PATCH V2 06/10] add ip_pipeline link_identification test plan xu,gang
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 12+ messages in thread
From: xu,gang @ 2016-08-25  8:24 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..49227e7
--- /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) >= 4, "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] 12+ messages in thread

* [dts] [PATCH V2 06/10] add ip_pipeline link_identification test plan
  2016-08-25  8:24 [dts] [PATCH V2 01/10] add ip_pipeline cfg test code xu,gang
                   ` (3 preceding siblings ...)
  2016-08-25  8:24 ` [dts] [PATCH V2 05/10] add ip_pipeline link_identification test code xu,gang
@ 2016-08-25  8:24 ` xu,gang
  2016-08-26  2:19   ` Liu, Yong
  2016-08-25  8:24 ` [dts] [dst][PATCH V2 07/10] add ip_pipeline parser_cleanup test code xu,gang
                   ` (3 subsequent siblings)
  8 siblings, 1 reply; 12+ messages in thread
From: xu,gang @ 2016-08-25  8:24 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] 12+ messages in thread

* [dts] [dst][PATCH V2 07/10] add ip_pipeline parser_cleanup test code
  2016-08-25  8:24 [dts] [PATCH V2 01/10] add ip_pipeline cfg test code xu,gang
                   ` (4 preceding siblings ...)
  2016-08-25  8:24 ` [dts] [PATCH V2 06/10] add ip_pipeline link_identification test plan xu,gang
@ 2016-08-25  8:24 ` xu,gang
  2016-08-25  8:24 ` [dts] [PATCH V2 08/10] add ip_pipeline parser_cleanup test plan xu,gang
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 12+ messages in thread
From: xu,gang @ 2016-08-25  8:24 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] 12+ messages in thread

* [dts] [PATCH V2 08/10] add ip_pipeline parser_cleanup test plan
  2016-08-25  8:24 [dts] [PATCH V2 01/10] add ip_pipeline cfg test code xu,gang
                   ` (5 preceding siblings ...)
  2016-08-25  8:24 ` [dts] [dst][PATCH V2 07/10] add ip_pipeline parser_cleanup test code xu,gang
@ 2016-08-25  8:24 ` xu,gang
  2016-08-25  8:24 ` [dts] [PATCH V2 09/10] add ip_pipeline source_sink test code xu,gang
  2016-08-25  8:24 ` [dts] [PATCH V2 10/10] add ip_pipeline source_sink test plan xu,gang
  8 siblings, 0 replies; 12+ messages in thread
From: xu,gang @ 2016-08-25  8:24 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] 12+ messages in thread

* [dts] [PATCH V2 09/10] add ip_pipeline source_sink test code
  2016-08-25  8:24 [dts] [PATCH V2 01/10] add ip_pipeline cfg test code xu,gang
                   ` (6 preceding siblings ...)
  2016-08-25  8:24 ` [dts] [PATCH V2 08/10] add ip_pipeline parser_cleanup test plan xu,gang
@ 2016-08-25  8:24 ` xu,gang
  2016-08-25  8:24 ` [dts] [PATCH V2 10/10] add ip_pipeline source_sink test plan xu,gang
  8 siblings, 0 replies; 12+ messages in thread
From: xu,gang @ 2016-08-25  8:24 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] 12+ messages in thread

* [dts] [PATCH V2 10/10] add ip_pipeline source_sink test plan
  2016-08-25  8:24 [dts] [PATCH V2 01/10] add ip_pipeline cfg test code xu,gang
                   ` (7 preceding siblings ...)
  2016-08-25  8:24 ` [dts] [PATCH V2 09/10] add ip_pipeline source_sink test code xu,gang
@ 2016-08-25  8:24 ` xu,gang
  8 siblings, 0 replies; 12+ messages in thread
From: xu,gang @ 2016-08-25  8:24 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] 12+ messages in thread

* Re: [dts] [PATCH V2 02/10] add ip_pipeline cfg test plan
  2016-08-25  8:24 ` [dts] [PATCH V2 02/10] add ip_pipeline cfg test plan xu,gang
@ 2016-08-26  1:28   ` Liu, Yong
  0 siblings, 0 replies; 12+ messages in thread
From: Liu, Yong @ 2016-08-26  1:28 UTC (permalink / raw)
  To: Xu, GangX, dts; +Cc: Xu, GangX

Gang, please rewrite the description, it will help us known that what will be tested in this suite.
Please send out your suites one by one, thus we can review them more effective.

> -----Original Message-----
> From: dts [mailto:dts-bounces@dpdk.org] On Behalf Of xu,gang
> Sent: Thursday, August 25, 2016 4:24 PM
> To: dts@dpdk.org
> Cc: Xu, GangX
> Subject: [dts] [PATCH V2 02/10] add ip_pipeline cfg test plan
> 
> Signed-off-by: xu,gang <gangx.xu@intel.com>
> ---
>  test_plans/ip_pipeline_cfg_test_plan.rst | 173
> +++++++++++++++++++++++++++++++
>  1 file changed, 173 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..db8170e
> --- /dev/null
> +++ b/test_plans/ip_pipeline_cfg_test_plan.rst
> @@ -0,0 +1,173 @@
> +.. 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
> +========================
> +
> +run ip_pipeline need cfg file,so this case test if ip_pipeline's cfg file
> +changed whrther the ip_pipeline program can run.
> +the cfg file as follow:
> +

Gang, your description has invalid syntax issue and also has some typo errors.
Please check about it first.

Please add some basic descriptions for below configuration files. 
Like firewall cfg will create what kind of scenario.

> +default-FIREWALL.cfg
> +=======================
> +;The default values are stored in this file
> +[PIPELINE0]
> +type = MASTER
> +core = 0
> +;PIPELINE1 all global variable
> +[PIPELINE1]
> +core = 1
> +pktq_in = RXQ0.0 RXQ1.0
> +pktq_out = TXQ0.0 TXQ1.0
> +msgq_in = MSGQ0
> +msgq_out = MSGQ0
> +timer_period = 100
> +
> +type = FIREWALL
> +n_rules = 1
> +pkt_type = ipv4
> +
> +if running successfully,test pass else fail
> +-------------------------------------------
> +
> +default-FLOW_ACTIONS.cfg
> +========================
> +;The default values are stored in this file
> +[PIPELINE0]
> +type = MASTER
> +core = 0
> +;PIPELINE1 all global variable
> +[PIPELINE1]
> +core = 1
> +pktq_in = RXQ0.0 RXQ1.0
> +pktq_out = TXQ0.0 TXQ1.0
> +msgq_in = MSGQ0
> +msgq_out = MSGQ0
> +timer_period = 100
> +
> +type = FLOW_ACTIONS
> +n_flows = 4096
> +flow_id_offset = 286
> +color_offset = 192
> +ip_hdr_offset = 270
> +n_meters_per_flow = 1
> +
> +if running successfully,test pass else fail
> +-------------------------------------------
> +
> +default-FLOW_CLASSIFICATION.cfg
> +===============================
> +;The default values are stored in this file
> +[PIPELINE0]
> +type = MASTER
> +core = 0
> +;PIPELINE1 all global variable
> +[PIPELINE1]
> +core = 1
> +pktq_in = RXQ0.0 RXQ1.0
> +pktq_out = TXQ0.0 TXQ1.0
> +msgq_in = MSGQ0
> +msgq_out = MSGQ0
> +timer_period = 100
> +
> +type = FLOW_CLASSIFICATION
> +n_flows = 4096
> +key_offset = 192
> +key_size = 16
> +hash_offset = 208
> +
> +if running successfully,test pass else fail
> +-------------------------------------------
> +
> +default-PASS-THROUGH.cfg
> +========================
> +[PIPELINE0]
> +type = MASTER
> +core = 0
> +[PIPELINE1]
> +core = 1
> +pktq_in = RXQ0.0 RXQ1.0
> +pktq_out = TXQ0.0 TXQ1.0
> +msgq_in = MSGQ0
> +msgq_out = MSGQ0
> +timer_period = 100
> +
> +type = PASS-THROUGH
> +dma_size = 16
> +dma_dst_offset = 64
> +dma_src_offset = 150
> +dma_src_mask = 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF
> +dma_hash_offset = 80
> +
> +if running successfully,test pass else fail
> +-------------------------------------------
> +
> +default-ROUTING.cfg
> +===================
> +;The default values are stored in this file
> +[PIPELINE0]
> +type = MASTER
> +core = 0
> +;PIPELINE1 all global variable
> +[PIPELINE1]
> +core = 1
> +pktq_in = RXQ0.0 RXQ1.0
> +pktq_out = TXQ0.0 TXQ1.0
> +msgq_in = MSGQ0
> +msgq_out = MSGQ0
> +timer_period = 100
> +
> +type = ROUTING
> +n_routes = 4096
> +ip_hdr_offset = 270
> +
> +if running successfully,test pass else fail
> +-------------------------------------------
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +
> --
> 1.9.3

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

* Re: [dts] [PATCH V2 06/10] add ip_pipeline link_identification test plan
  2016-08-25  8:24 ` [dts] [PATCH V2 06/10] add ip_pipeline link_identification test plan xu,gang
@ 2016-08-26  2:19   ` Liu, Yong
  0 siblings, 0 replies; 12+ messages in thread
From: Liu, Yong @ 2016-08-26  2:19 UTC (permalink / raw)
  To: Xu, GangX, dts; +Cc: Xu, GangX, Wan, Qun

Gang, some suggestions for create efficiency test plan, please check my comments below.

> -----Original Message-----
> From: dts [mailto:dts-bounces@dpdk.org] On Behalf Of xu,gang
> Sent: Thursday, August 25, 2016 4:24 PM
> To: dts@dpdk.org
> Cc: Xu, GangX
> Subject: [dts] [PATCH V2 06/10] add ip_pipeline link_identification test
> plan
> 
> 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.

Please segment this description, it's too long for reading.

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

Large table is not kind for reading. Please add line feeds to make sure table length in 79 characters.


> +
> +----------------------------------------------------------------
> +2. CFG file containing 1 "pci_whitelist" section with "-p" exist shall
> work

Case name should be more abstractive, like "Test: cfg whitelist co-existed with portmask param"

Add test logic description just after test case definition.  It will look like

"Add pci whitelist in cfg file and start ip_pipeline with one port masked. Ip_pipline will startup normally with cfg file specified port"

> +([root@dpdk_testserver03 ip_pipeline]# ./build/ip_pipeline -p 1 -
> f ./config/pt1_2ports_link_iden.cfg

Remove your own platform information, only keep command line here.


> +Parse error in section "EAL", entry "pci_whitelist": too many elements
> +
> +Aborted (core dumped))

No need to record this kind of output log, one description like below is enough.
"Ip_pipeline will be aborted for ..."

> +----------------------------------------------------------------
> +Config file as follows

No need to attach everything in the test plan. If only option pci_whitelist is care in this suite,
list this option is enough.

> +[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
> +
The description not match previous one. Please check it.

> +----------------------------------------------------------------
> +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] 12+ messages in thread

end of thread, other threads:[~2016-08-26  2:19 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-08-25  8:24 [dts] [PATCH V2 01/10] add ip_pipeline cfg test code xu,gang
2016-08-25  8:24 ` [dts] [PATCH V2 02/10] add ip_pipeline cfg test plan xu,gang
2016-08-26  1:28   ` Liu, Yong
2016-08-25  8:24 ` [dts] [PATCH V2 03/10] add ip_pipeline cpu utilization test code xu,gang
2016-08-25  8:24 ` [dts] [PATCH V2 04/10] add ip_pipeline cpu utilization test plan xu,gang
2016-08-25  8:24 ` [dts] [PATCH V2 05/10] add ip_pipeline link_identification test code xu,gang
2016-08-25  8:24 ` [dts] [PATCH V2 06/10] add ip_pipeline link_identification test plan xu,gang
2016-08-26  2:19   ` Liu, Yong
2016-08-25  8:24 ` [dts] [dst][PATCH V2 07/10] add ip_pipeline parser_cleanup test code xu,gang
2016-08-25  8:24 ` [dts] [PATCH V2 08/10] add ip_pipeline parser_cleanup test plan xu,gang
2016-08-25  8:24 ` [dts] [PATCH V2 09/10] add ip_pipeline source_sink test code xu,gang
2016-08-25  8:24 ` [dts] [PATCH V2 10/10] add ip_pipeline source_sink test plan xu,gang

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