test suite reviews and discussions
 help / color / mirror / Atom feed
* [dts] [PATCH 0/2] add pipeline new features test scenarios
@ 2021-04-21 10:17 Churchill Khangar
  2021-04-21 10:17 ` [dts] [PATCH 1/2] dep: add pipeline test suite new feature dependencies Churchill Khangar
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Churchill Khangar @ 2021-04-21 10:17 UTC (permalink / raw)
  To: dts
  Cc: cristian.dumitrescu, venkata.suresh.kumar.p, churchill.khangar,
	yogesh.jangra

This patch series has the changes to support test suite
for pipeline application new features. Also changes to
improve existing test cases logic to cover different operand
lengths, endianness issues and additional test cases for
existing features.

Following are the details of new features and
existing test cases enhancements
     1. Framework enhancements to improve overall execution time.
     2. RING I/O port type
     3. WCM table match
     4. Register Array
     5. trTCM
     6. Enhancement to existing test cases to verify
          a. Endianness issue
          b. Operands with variable size values
     7. Additional tests to provide more coverage for table match and actions
     8. Additional tests to cover customer common use cases

Patch details
     1. Patch1 - pipeline dependencies archive and compressed
        file pipeline.tar.gz modified for all new features.
     2. Patch2 - add new features test coverage.

Churchill Khangar (2):
  dep: add pipeline test suite new feature dependencies
  tests/pipeline: add new features test coverage

 dep/pipeline.tar.gz         |  Bin 49082 -> 74543 bytes
 tests/TestSuite_pipeline.py | 8416 +++++++++++++++++++------------------------
 2 files changed, 3661 insertions(+), 4755 deletions(-)

-- 
1.8.3.1


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

* [dts] [PATCH 1/2] dep: add pipeline test suite new feature dependencies
  2021-04-21 10:17 [dts] [PATCH 0/2] add pipeline new features test scenarios Churchill Khangar
@ 2021-04-21 10:17 ` Churchill Khangar
  2021-04-21 10:17 ` [dts] [PATCH 2/2] tests/pipeline: add new features test coverage Churchill Khangar
  2021-04-29  8:56 ` [dts] [PATCH 0/2] add pipeline new features test scenarios Tu, Lijuan
  2 siblings, 0 replies; 4+ messages in thread
From: Churchill Khangar @ 2021-04-21 10:17 UTC (permalink / raw)
  To: dts
  Cc: cristian.dumitrescu, venkata.suresh.kumar.p, churchill.khangar,
	yogesh.jangra

This patch has the pipeline test suite dependencies
required to run PIPELINE new features
     1. RING I/O port type
     2. WCM table match
     3. Register Array
     4. trTCM
     5. Enhancement to existing test cases to verify
     	     a. Endianness issue
	     b. Operands with variable size values
     6. Additional tests to provide more coverage for table match and actions
     7. Additional tests to cover customer common use cases

Signed-off-by: Churchill Khangar <churchill.khangar@intel.com>
Signed-off-by: Yogesh Jangra <yogesh.jangra@intel.com>
Tested-by: Venkata Suresh Kumar P <venkata.suresh.kumar.p@intel.com>
---
 dep/pipeline.tar.gz | Bin 49082 -> 74543 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)

diff --git a/dep/pipeline.tar.gz b/dep/pipeline.tar.gz
index 667e2698b618982af7bd6ef552503bc07e46a236..fb2849ee21e692756ef6b60f9a4f581b390c8c2e 100644
GIT binary patch
literal 74543
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

literal 49082
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

-- 
1.8.3.1


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

* [dts] [PATCH 2/2] tests/pipeline: add new features test coverage
  2021-04-21 10:17 [dts] [PATCH 0/2] add pipeline new features test scenarios Churchill Khangar
  2021-04-21 10:17 ` [dts] [PATCH 1/2] dep: add pipeline test suite new feature dependencies Churchill Khangar
@ 2021-04-21 10:17 ` Churchill Khangar
  2021-04-29  8:56 ` [dts] [PATCH 0/2] add pipeline new features test scenarios Tu, Lijuan
  2 siblings, 0 replies; 4+ messages in thread
From: Churchill Khangar @ 2021-04-21 10:17 UTC (permalink / raw)
  To: dts
  Cc: cristian.dumitrescu, venkata.suresh.kumar.p, churchill.khangar,
	yogesh.jangra

This patch has the pipeline test suite changes to cover
the new features and enhancements to existing tests.
Following are the details of new features and
existing test cases enhancements
     1. Framework enhancements to improve overall execution time.
     2. RING I/O port type
     3. WCM table match
     4. Register Array
     5. trTCM
     6. Enhancement to existing test cases to verify
          a. Endianness issue
          b. Operands with variable size values
     7. Additional tests to provide more coverage for table match and actions
     8. Additional tests to cover customer common use cases

Signed-off-by: Churchill Khangar <churchill.khangar@intel.com>
Signed-off-by: Yogesh Jangra <yogesh.jangra@intel.com>
Tested-by: Venkata Suresh Kumar P <venkata.suresh.kumar.p@intel.com>
---
 tests/TestSuite_pipeline.py | 8416 +++++++++++++++++++------------------------
 1 file changed, 3661 insertions(+), 4755 deletions(-)

diff --git a/tests/TestSuite_pipeline.py b/tests/TestSuite_pipeline.py
index 9597896..d1f4d50 100644
--- a/tests/TestSuite_pipeline.py
+++ b/tests/TestSuite_pipeline.py
@@ -65,12 +65,17 @@ from scapy.sendrecv import sendp
 
 import itertools
 
+MODE = 1  # 0: Development, 1: Release
+
 TIMESTAMP = re.compile(r'\d{2}\:\d{2}\:\d{2}\.\d{6}')
 PAYLOAD = re.compile(r'\t0x([0-9a-fA-F]+):  ([0-9a-fA-F ]+)')
 
 FILE_DIR = os.path.dirname(os.path.abspath(__file__)).split(os.path.sep)
 DEP_DIR = os.path.sep.join(FILE_DIR[:-1]) + '/dep/'
 
+BUFFER_SIZE = 1024
+CLI_SERVER_CONNECT_DELAY = 1
+
 
 class TestPipeline(TestCase):
 
@@ -200,9 +205,52 @@ class TestPipeline(TestCase):
         self.convert_tcpdump_to_text2pcap('/tmp/packet_rx.txt', '/tmp/packet_rx_rcv.txt')
         out = self.tester.send_command(
             'diff -sqw /tmp/packet_rx_rcv.txt {}'.format('/tmp/' + out_pcap_file), timeout=0.5)
-        if "differ" in out:
+        if "are identical" not in out:
+            self.dut.send_expect('^C', '# ')
+            self.verify(False, "Output pcap files mismatch error")
+
+    def send_and_sniff_multiple(self, from_port, to_port, in_pcap, out_pcap, filters, rate=0):
+
+        self.tester.send_expect('rm -f /tmp/*.txt /tmp/*.pcap /tmp/*.out', '# ')
+        tx_count = len(from_port)
+        rx_count = len(to_port)
+        tx_port, rx_port, tx_inf, rx_inf = ([] for i in range(4))
+
+        for i in range(tx_count):
+            tx_port.append(self.tester.get_local_port(self.dut_ports[from_port[i]]))
+            tx_inf.append(self.tester.get_interface(tx_port[i]))
+
+        for i in range(rx_count):
+            rx_port.append(self.tester.get_local_port(self.dut_ports[to_port[i]]))
+            rx_inf.append(self.tester.get_interface(rx_port[i]))
+            self.tcpdump_start_sniff(rx_inf[i], filters[i])
+
+        self.tester.scapy_foreground()
+        for i in range(tx_count):
+            self.tester.send_expect(
+                'text2pcap -q {} /tmp/tx_{}.pcap'.format('/tmp/' + in_pcap[i], tx_inf[i]), '# ')
+            self.tester.scapy_append('pkt = rdpcap("/tmp/tx_{}.pcap")'.format(tx_inf[i]))
+            if rate:
+                self.tester.scapy_append(
+                    'sendp(pkt, iface="{}", count=1, inter=1./{})'.format(tx_inf[i], rate))
+            else:
+                self.tester.scapy_append('sendp(pkt, iface="{}", count=1)'.format(tx_inf[i]))
+
+        self.tester.scapy_execute()
+        self.tcpdump_stop_sniff()
+        mismatch_count = 0
+        for i in range(rx_count):
+            self.tester.send_expect(
+                'tcpdump -n -r /tmp/tcpdump_{}.pcap -xx > /tmp/packet_rx.txt'.format(rx_inf[i]), '# ')
+            self.convert_tcpdump_to_text2pcap(
+                '/tmp/packet_rx.txt', '/tmp/packet_rx_rcv_{}.txt'.format(rx_inf[i]))
+            cmd = 'diff -sqw /tmp/packet_rx_rcv_{}.txt {}'.format(rx_inf[i], '/tmp/' + out_pcap[i])
+            out = self.tester.send_command(cmd, timeout=0.5)
+            if "are identical" not in out:
+                mismatch_count += 1
+        if mismatch_count:
             self.dut.send_expect('^C', '# ')
-        self.verify("are identical" in out, "Output pcap files mismatch error")
+            self.verify(False, "Output pcap files mismatch error")
 
     def setup_env(self, port_nums, driver):
         """
@@ -279,7 +327,7 @@ class TestPipeline(TestCase):
         self.vf3_mac = "00:11:22:33:44:58"
 
         ports = [self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci]
-        self.eal_para = self.dut.create_eal_parameters(cores=list(range(2)), ports=ports)
+        self.eal_para = self.dut.create_eal_parameters(cores=list(range(4)), ports=ports)
         self.sriov_vfs_port = []
         self.session_secondary = self.dut.new_session()
 
@@ -289,10 +337,13 @@ class TestPipeline(TestCase):
         self.app_testpmd_path = self.dut.apps_name['test-pmd']
         self.param_flow_dir = self.get_flow_direction_param_of_tcpdump()
 
-        # update the ./dep/pipeline.tar.gz file for any new changes
-        P4_PIPILINE_TAR_FILE = DEP_DIR + 'pipeline.tar.gz'
+        # update the ./dep/pipeline.tar.gz file
+        PIPELINE_TAR_FILE = DEP_DIR + 'pipeline.tar.gz'
         self.tester.send_expect('rm -rf /tmp/pipeline', '# ')
-        self.tester.send_expect('tar -zxf {} --directory /tmp'.format(P4_PIPILINE_TAR_FILE), "# ", 20)
+        if MODE == 0:  # Development
+            self.tester.send_expect('rm -rf {}'.format(PIPELINE_TAR_FILE), '# ')
+            self.tester.send_expect('tar -czf {} -C {} pipeline/'.format(PIPELINE_TAR_FILE, DEP_DIR), '# ')
+        self.tester.send_expect('tar -zxf {} --directory /tmp'.format(PIPELINE_TAR_FILE), "# ", 20)
 
         # copy the ./dep/pipeline.tar.gz file to DUT
         self.dut.send_expect('rm -rf /tmp/pipeline.tar.gz /tmp/pipeline', "# ", 20)
@@ -305,47 +356,44 @@ class TestPipeline(TestCase):
         """
         pass
 
-    def test_rx_tx_001(self):
-        """
-        rx_tx_001: revert the received packet on the same port without any change
-        """
-        cli_file = '/tmp/pipeline/rx_tx_001/rx_tx_001.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/rx_tx_001/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/rx_tx_001/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+    def connect_cli_server(self):
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        SERVER_IP = '192.168.122.216'
+        SERVER_PORT = 8086
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+        try:
+            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+            try:
+                s.connect((SERVER_IP, SERVER_PORT))
+                sleep(1)
+                msg = s.recv(BUFFER_SIZE)
+                response = msg.decode()
+                # print('Rxd: ' + response)
+                if "pipeline>" not in response:
+                    s.close()
+                    self.verify(0, "CLI Response Error")
+                else:
+                    return s
+            except socket.error as err:
+                print("Socket connection failed with error %s" % (err))
+                self.verify(0, "Failed to connect to server")
+        except socket.error as err:
+            print("Socket creation failed with error %s" % (err))
+            self.verify(0, "Failed to create socket")
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+    def socket_send_cmd(self, socket, cmd, expected_rsp):
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        socket.send(cmd.encode('utf-8'))
+        sleep(0.1)
+        msg = socket.recv(BUFFER_SIZE)
+        response = msg.decode()
+        print('Rxd: ' + response)
+        if expected_rsp not in response:
+            socket.close()
+            self.dut.send_expect("^C", "# ", 20)
+            self.verify(0, "CLI Response Error")
 
-    def test_extract_emit_001(self):
-        """
-        extract_emit_001: revert the received packet on the same port without any change
-        """
-        cli_file = '/tmp/pipeline/extract_emit_001/extract_emit_001.cli'
+    def run_dpdk_app(self, cli_file):
 
         cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
         self.dut.send_expect(cmd, "# ", 20)
@@ -355,5249 +403,4107 @@ class TestPipeline(TestCase):
         self.dut.send_expect(cmd, "# ", 20)
         cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
         self.dut.send_expect(cmd, "# ", 20)
-
         cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/extract_emit_001/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/extract_emit_001/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        self.dut.send_expect(cmd, "PIPELINE0 enable", 75)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+    def send_pkts(self, from_port, to_port, in_pcap_file):
+        """
+        Send pkts read from the input pcap file.
+        """
+        tx_port = self.tester.get_local_port(self.dut_ports[from_port])
+        rx_port = self.tester.get_local_port(self.dut_ports[to_port])
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+        tx_interface = self.tester.get_interface(tx_port)
+        rx_interface = self.tester.get_interface(rx_port)
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        self.tester.send_expect('rm -f /tmp/*.txt /tmp/*.pcap /tmp/*.out', '# ')
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        # Prepare the pkts to be sent
+        self.tester.scapy_foreground()
+        self.tester.send_expect('text2pcap -q {} /tmp/packet_tx.pcap'.format('/tmp/' + in_pcap_file), '# ')
+        self.tester.scapy_append('pkt = rdpcap("/tmp/packet_tx.pcap")')
+        self.tester.scapy_append('sendp(pkt, iface="{}", count=1)'.format(tx_interface))
+        self.tester.scapy_execute()
 
-    def test_extract_emit_002(self):
+    def test_rx_tx_001(self):
 
-        cli_file = '/tmp/pipeline/extract_emit_002/extract_emit_002.cli'
+        cli_file = '/tmp/pipeline/rx_tx_001/rx_tx_001.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/rx_tx_001/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/rx_tx_001/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_extract_emit_001(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/extract_emit_002/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/extract_emit_002/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/extract_emit_001/extract_emit_001.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/extract_emit_001/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/extract_emit_001/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+    def test_extract_emit_002(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/extract_emit_002/extract_emit_002.cli'
+        self.run_dpdk_app(cli_file)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/extract_emit_002/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/extract_emit_002/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
     def test_extract_emit_003(self):
 
         cli_file = '/tmp/pipeline/extract_emit_003/extract_emit_003.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/extract_emit_003/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/extract_emit_003/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_extract_emit_004(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/extract_emit_003/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/extract_emit_003/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/extract_emit_004/extract_emit_004.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/extract_emit_004/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/extract_emit_004/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+    def test_extract_emit_005(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/extract_emit_005/extract_emit_005.cli'
+        self.run_dpdk_app(cli_file)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/extract_emit_005/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/extract_emit_005/pcap_files/out_1.txt'] * 4
+        filters = ["vlan"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-    def test_extract_emit_004(self):
+    def test_extract_emit_006(self):
 
-        cli_file = '/tmp/pipeline/extract_emit_004/extract_emit_004.cli'
+        cli_file = '/tmp/pipeline/extract_emit_006/extract_emit_006.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/extract_emit_006/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/extract_emit_006/pcap_files/out_1.txt'] * 4
+        filters = ["udp port 4789"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_extract_emit_007(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/extract_emit_004/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/extract_emit_004/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/extract_emit_007/extract_emit_007.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/extract_emit_007/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/extract_emit_007/pcap_files/out_1.txt'] * 4
+        filters = ["udp port 4789"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+    def test_extract_emit_008(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/extract_emit_008/extract_emit_008.cli'
+        self.run_dpdk_app(cli_file)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/extract_emit_008/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/extract_emit_008/pcap_files/out_1.txt'] * 4
+        filters = ["udp port 4789"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-    def test_extract_emit_005(self):
+    def test_extract_emit_009(self):
 
-        cli_file = '/tmp/pipeline/extract_emit_005/extract_emit_005.cli'
+        cli_file = '/tmp/pipeline/extract_emit_009/extract_emit_009.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/extract_emit_009/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/extract_emit_009/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_and_001(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/extract_emit_005/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/extract_emit_005/pcap_files/out_1.txt'
-        filters = "vlan"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/and_001/and_001.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/and_001/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/and_001/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+    def test_and_002(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/and_002/and_002.cli'
+        self.run_dpdk_app(cli_file)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = 'pipeline/and_002/pcap_files/in_1.txt'
+        out_pcap = 'pipeline/and_002/pcap_files/out_1.txt'
+        self.send_and_sniff_pkts(0, 0, in_pcap, out_pcap, "tcp")
+        self.send_and_sniff_pkts(1, 0, in_pcap, out_pcap, "tcp")
+        self.send_and_sniff_pkts(2, 0, in_pcap, out_pcap, "tcp")
+        self.send_and_sniff_pkts(3, 0, in_pcap, out_pcap, "tcp")
+        self.dut.send_expect("^C", "# ", 20)
 
-    def test_extract_emit_006(self):
+    def test_and_003(self):
 
-        cli_file = '/tmp/pipeline/extract_emit_006/extract_emit_006.cli'
+        cli_file = '/tmp/pipeline/and_003/and_003.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/and_003/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/and_003/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_and_004(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/extract_emit_006/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/extract_emit_006/pcap_files/out_1.txt'
-        filters = "udp port 4789"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/and_004/and_004.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/and_004/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/and_004/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+    def test_and_005(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/and_005/and_005.cli'
+        self.run_dpdk_app(cli_file)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/and_005/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/and_005/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-    def test_extract_emit_007(self):
+    def test_and_006(self):
 
-        cli_file = '/tmp/pipeline/extract_emit_007/extract_emit_007.cli'
+        cli_file = '/tmp/pipeline/and_006/and_006.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/and_006/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/and_006/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_and_007(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/extract_emit_007/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/extract_emit_007/pcap_files/out_1.txt'
-        filters = "udp port 4789"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/and_007/and_007.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/and_007/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/and_007/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+    def test_and_008(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/and_008/and_008.cli'
+        self.run_dpdk_app(cli_file)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/and_008/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/and_008/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-    def test_extract_emit_008(self):
+    def test_or_001(self):
 
-        cli_file = '/tmp/pipeline/extract_emit_008/extract_emit_008.cli'
+        cli_file = '/tmp/pipeline/or_001/or_001.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/or_001/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/or_001/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_or_002(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/extract_emit_008/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/extract_emit_008/pcap_files/out_1.txt'
-        filters = "udp port 4789"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/or_002/or_002.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/or_002/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/or_002/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+    def test_or_003(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/or_003/or_003.cli'
+        self.run_dpdk_app(cli_file)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/or_003/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/or_003/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-    def test_extract_emit_009(self):
+    def test_or_004(self):
 
-        cli_file = '/tmp/pipeline/extract_emit_009/extract_emit_009.cli'
+        cli_file = '/tmp/pipeline/or_004/or_004.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/or_004/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/or_004/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_or_005(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/extract_emit_009/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/extract_emit_009/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/or_005/or_005.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/or_005/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/or_005/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+    def test_or_006(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/or_006/or_006.cli'
+        self.run_dpdk_app(cli_file)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/or_006/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/or_006/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-    def test_and_001(self):
+    def test_or_007(self):
 
-        cli_file = '/tmp/pipeline/and_001/and_001.cli'
+        cli_file = '/tmp/pipeline/or_007/or_007.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/or_007/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/or_007/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_or_008(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/and_001/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/and_001/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/or_008/or_008.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        in_pcap = 'pipeline/or_008/pcap_files/in_1.txt'
+        out_pcap = 'pipeline/or_008/pcap_files/out_1.txt'
+        self.send_and_sniff_pkts(0, 1, in_pcap, out_pcap, "tcp")
+        self.send_and_sniff_pkts(1, 1, in_pcap, out_pcap, "tcp")
+        self.send_and_sniff_pkts(2, 3, in_pcap, out_pcap, "tcp")
+        self.send_and_sniff_pkts(3, 3, in_pcap, out_pcap, "tcp")
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+    def test_xor_001(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/xor_001/xor_001.cli'
+        self.run_dpdk_app(cli_file)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/xor_001/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/xor_001/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [1, 0, 3, 2]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-    def test_and_002(self):
+    def test_xor_002(self):
 
-        cli_file = '/tmp/pipeline/and_002/and_002.cli'
+        cli_file = '/tmp/pipeline/xor_002/xor_002.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/xor_002/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/xor_002/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_xor_003(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/and_002/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/and_002/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/xor_003/xor_003.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 0, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/xor_003/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/xor_003/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 0, in_pcap_file, out_pcap_file, filters)
+    def test_xor_004(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/xor_004/xor_004.cli'
+        self.run_dpdk_app(cli_file)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/xor_004/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/xor_004/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-    def test_and_003(self):
+    def test_xor_005(self):
 
-        cli_file = '/tmp/pipeline/and_003/and_003.cli'
+        cli_file = '/tmp/pipeline/xor_005/xor_005.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/xor_005/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/xor_005/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_xor_006(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/and_003/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/and_003/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/xor_006/xor_006.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/xor_006/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/xor_006/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [1, 0, 3, 2]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+    def test_xor_007(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/xor_007/xor_007.cli'
+        self.run_dpdk_app(cli_file)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/xor_007/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/xor_007/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-    def test_and_004(self):
+    def test_xor_008(self):
 
-        cli_file = '/tmp/pipeline/and_004/and_004.cli'
+        cli_file = '/tmp/pipeline/xor_008/xor_008.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/xor_008/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/xor_008/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_add_001(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/and_004/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/and_004/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/add_001/add_001.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/add_001/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/add_001/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+    def test_add_002(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/add_002/add_002.cli'
+        self.run_dpdk_app(cli_file)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/add_002/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/add_002/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-    def test_and_005(self):
+    def test_add_003(self):
 
-        cli_file = '/tmp/pipeline/and_005/and_005.cli'
+        cli_file = '/tmp/pipeline/add_003/add_003.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/add_003/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/add_003/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2]
+        rx_port = [1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_add_004(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/and_005/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/and_005/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/add_004/add_004.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/add_004/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/add_004/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+    def test_add_005(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/add_005/add_005.cli'
+        self.run_dpdk_app(cli_file)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/add_005/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/add_005/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-    def test_and_006(self):
+    def test_add_006(self):
 
-        cli_file = '/tmp/pipeline/and_006/and_006.cli'
+        cli_file = '/tmp/pipeline/add_006/add_006.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/add_006/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/add_006/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_add_007(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/and_006/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/and_006/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/add_007/add_007.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/add_007/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/add_007/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+    def test_add_008(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/add_008/add_008.cli'
+        self.run_dpdk_app(cli_file)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/add_008/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/add_008/pcap_files/out_1.txt'] * 4
+        filters = ["udp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-    def test_and_007(self):
+    def test_shl_001(self):
 
-        cli_file = '/tmp/pipeline/and_007/and_007.cli'
+        cli_file = '/tmp/pipeline/shl_001/shl_001.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/shl_001/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/shl_001/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_shl_002(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/and_007/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/and_007/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/shl_002/shl_002.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/shl_002/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/shl_002/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+    def test_shl_003(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/shl_003/shl_003.cli'
+        self.run_dpdk_app(cli_file)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/shl_003/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/shl_003/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-    def test_and_008(self):
+    def test_shl_004(self):
 
-        cli_file = '/tmp/pipeline/and_008/and_008.cli'
+        cli_file = '/tmp/pipeline/shl_004/shl_004.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/shl_004/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/shl_004/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_shl_005(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/and_008/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/and_008/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/shl_005/shl_005.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/shl_005/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/shl_005/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+    def test_shl_006(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/shl_006/shl_006.cli'
+        self.run_dpdk_app(cli_file)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/shl_006/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/shl_006/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-    def test_or_001(self):
+    def test_shl_007(self):
 
-        cli_file = '/tmp/pipeline/or_001/or_001.cli'
+        cli_file = '/tmp/pipeline/shl_007/shl_007.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/shl_007/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/shl_007/pcap_files/out_1.txt'] * 4
+        filters = ["udp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_shl_008(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/or_001/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/or_001/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/shl_008/shl_008.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/shl_008/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/shl_008/pcap_files/out_1.txt'] * 4
+        filters = ["udp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+    def test_shr_001(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/shr_001/shr_001.cli'
+        self.run_dpdk_app(cli_file)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/shr_001/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/shr_001/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-    def test_or_002(self):
+    def test_shr_002(self):
 
-        cli_file = '/tmp/pipeline/or_002/or_002.cli'
+        cli_file = '/tmp/pipeline/shr_002/shr_002.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/shr_002/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/shr_002/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_shr_003(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/or_002/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/or_002/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/shr_003/shr_003.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/shr_003/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/shr_003/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+    def test_shr_004(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/shr_004/shr_004.cli'
+        self.run_dpdk_app(cli_file)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/shr_004/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/shr_004/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-    def test_or_003(self):
+    def test_shr_005(self):
 
-        cli_file = '/tmp/pipeline/or_003/or_003.cli'
+        cli_file = '/tmp/pipeline/shr_005/shr_005.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/shr_005/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/shr_005/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_shr_006(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/or_003/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/or_003/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/shr_006/shr_006.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/shr_006/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/shr_006/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+    def test_shr_007(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/shr_007/shr_007.cli'
+        self.run_dpdk_app(cli_file)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/shr_007/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/shr_007/pcap_files/out_1.txt'] * 4
+        filters = ["udp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-    def test_or_004(self):
+    def test_shr_008(self):
 
-        cli_file = '/tmp/pipeline/or_004/or_004.cli'
+        cli_file = '/tmp/pipeline/shr_008/shr_008.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/shr_008/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/shr_008/pcap_files/out_1.txt'] * 4
+        filters = ["udp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_sub_001(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/or_004/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/or_004/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/sub_001/sub_001.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/sub_001/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/sub_001/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+    def test_sub_002(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/sub_002/sub_002.cli'
+        self.run_dpdk_app(cli_file)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/sub_002/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/sub_002/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-    def test_or_005(self):
+    def test_sub_003(self):
 
-        cli_file = '/tmp/pipeline/or_005/or_005.cli'
+        cli_file = '/tmp/pipeline/sub_003/sub_003.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/sub_003/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/sub_003/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_sub_004(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/or_005/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/or_005/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/sub_004/sub_004.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/sub_004/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/sub_004/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+    def test_sub_005(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/sub_005/sub_005.cli'
+        self.run_dpdk_app(cli_file)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/sub_005/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/sub_005/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-    def test_or_006(self):
+    def test_sub_006(self):
 
-        cli_file = '/tmp/pipeline/or_006/or_006.cli'
+        cli_file = '/tmp/pipeline/sub_006/sub_006.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/sub_006/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/sub_006/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_sub_007(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/or_006/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/or_006/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/sub_007/sub_007.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/sub_007/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/sub_007/pcap_files/out_1.txt'] * 4
+        filters = ["udp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+    def test_sub_008(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/sub_008/sub_008.cli'
+        self.run_dpdk_app(cli_file)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/sub_008/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/sub_008/pcap_files/out_1.txt'] * 4
+        filters = ["udp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-    def test_or_007(self):
+    def test_mov_001(self):
 
-        cli_file = '/tmp/pipeline/or_007/or_007.cli'
+        cli_file = '/tmp/pipeline/mov_001/mov_001.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/mov_001/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/mov_001/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_mov_002(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/or_007/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/or_007/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/mov_002/mov_002.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/mov_002/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/mov_002/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+    def test_mov_003(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/mov_003/mov_003.cli'
+        self.run_dpdk_app(cli_file)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/mov_003/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/mov_003/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-    def test_or_008(self):
+    def test_mov_004(self):
 
-        cli_file = '/tmp/pipeline/or_008/or_008.cli'
+        cli_file = '/tmp/pipeline/mov_004/mov_004.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/mov_004/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/mov_004/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_mov_005(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/or_008/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/or_008/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 1, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/mov_005/mov_005.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        in_pcap = 'pipeline/mov_005/pcap_files/in_1.txt'
+        out_pcap = 'pipeline/mov_005/pcap_files/out_1.txt'
+        self.send_and_sniff_pkts(0, 0, in_pcap, out_pcap, "tcp")
+        self.send_and_sniff_pkts(1, 0, in_pcap, out_pcap, "tcp")
+        self.send_and_sniff_pkts(2, 0, in_pcap, out_pcap, "tcp")
+        self.send_and_sniff_pkts(3, 0, in_pcap, out_pcap, "tcp")
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 3, in_pcap_file, out_pcap_file, filters)
+    def test_mov_007(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/mov_007/mov_007.cli'
+        self.run_dpdk_app(cli_file)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/mov_007/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/mov_007/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-    def test_xor_001(self):
+    def test_mov_008(self):
 
-        cli_file = '/tmp/pipeline/xor_001/xor_001.cli'
+        cli_file = '/tmp/pipeline/mov_008/mov_008.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/mov_008/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/mov_008/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_table_001(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/xor_001/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/xor_001/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 1, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/table_001/table_001.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 0, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/table_001/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/table_001/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 3, in_pcap_file, out_pcap_file, filters)
+    def test_vxlan_001(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 2, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/vxlan_001/vxlan_001.cli'
+        self.run_dpdk_app(cli_file)
+
+        in_pcap_0 = 'pipeline/vxlan_001/pcap_files/in_1.txt'
+        in_pcap_1 = 'pipeline/vxlan_001/pcap_files/in_2.txt'
+        in_pcap_2 = 'pipeline/vxlan_001/pcap_files/in_3.txt'
+        in_pcap_3 = 'pipeline/vxlan_001/pcap_files/in_4.txt'
+        out_pcap_0 = 'pipeline/vxlan_001/pcap_files/out_1.txt'
+        out_pcap_1 = 'pipeline/vxlan_001/pcap_files/out_2.txt'
+        out_pcap_2 = 'pipeline/vxlan_001/pcap_files/out_3.txt'
+        out_pcap_3 = 'pipeline/vxlan_001/pcap_files/out_4.txt'
+
+        in_pcap = [in_pcap_0, in_pcap_1, in_pcap_2, in_pcap_3]
+        out_pcap = [out_pcap_0, out_pcap_1, out_pcap_2, out_pcap_3]
+        filters = ["udp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+    def test_dma_001(self):
 
-    def test_xor_002(self):
+        cli_file = '/tmp/pipeline/dma_001/dma_001.cli'
+        self.run_dpdk_app(cli_file)
 
-        cli_file = '/tmp/pipeline/xor_002/xor_002.cli'
+        in_pcap = ['pipeline/dma_001/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/dma_001/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+    def test_dma_002(self):
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+        cli_file = '/tmp/pipeline/dma_002/dma_002.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/xor_002/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/xor_002/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/dma_002/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/dma_002/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+    def test_dma_003(self):
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/dma_003/dma_003.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/dma_003/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/dma_003/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+    def test_dma_004(self):
 
-    def test_xor_003(self):
+        cli_file = '/tmp/pipeline/dma_004/dma_004.cli'
+        self.run_dpdk_app(cli_file)
 
-        cli_file = '/tmp/pipeline/xor_003/xor_003.cli'
+        in_pcap = ['pipeline/dma_004/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/dma_004/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+    def test_dma_005(self):
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+        cli_file = '/tmp/pipeline/dma_005/dma_005.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/xor_003/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/xor_003/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/dma_005/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/dma_005/pcap_files/out_1.txt'] * 4
+        filters = ["vlan"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+    def test_dma_006(self):
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/dma_006/dma_006.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/dma_006/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/dma_006/pcap_files/out_1.txt'] * 4
+        filters = ["udp port 4532"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+    def test_dma_007(self):
 
-    def test_xor_004(self):
+        cli_file = '/tmp/pipeline/dma_007/dma_007.cli'
+        self.run_dpdk_app(cli_file)
 
-        cli_file = '/tmp/pipeline/xor_004/xor_004.cli'
+        in_pcap = ['pipeline/dma_007/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/dma_007/pcap_files/out_1.txt'] * 4
+        filters = ["udp port 4532"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+    def test_dma_008(self):
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+        cli_file = '/tmp/pipeline/dma_008/dma_008.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/xor_004/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/xor_004/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/dma_008/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/dma_008/pcap_files/out_1.txt'] * 4
+        filters = ["udp port 4532"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+    def test_jump_001(self):
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/jump_001/jump_001.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/jump_001/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_001/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+    def test_jump_002(self):
 
-    def test_xor_005(self):
+        cli_file = '/tmp/pipeline/jump_002/jump_002.cli'
+        self.run_dpdk_app(cli_file)
 
-        cli_file = '/tmp/pipeline/xor_005/xor_005.cli'
+        in_pcap = ['pipeline/jump_002/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_002/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+    def test_jump_003(self):
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+        cli_file = '/tmp/pipeline/jump_003/jump_003.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/xor_005/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/xor_005/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/jump_003/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_003/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+    def test_jump_004(self):
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/jump_004/jump_004.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/jump_004/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_004/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+    def test_jump_005(self):
 
-    def test_xor_006(self):
-        """
-        find entry in the table based on the des mac address,
-        then update the src mac address to the mac address in the table.
-        """
+        cli_file = '/tmp/pipeline/jump_005/jump_005.cli'
+        self.run_dpdk_app(cli_file)
 
-        cli_file = '/tmp/pipeline/xor_006/xor_006.cli'
+        in_pcap = ['pipeline/jump_005/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_005/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+    def test_jump_006(self):
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+        cli_file = '/tmp/pipeline/jump_006/jump_006.cli'
+        self.run_dpdk_app(cli_file)
 
-        in_pcap_file = 'pipeline/xor_006/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/xor_006/pcap_files/out_1.txt'
-        filters = "tcp"
+        in_pcap = ['pipeline/jump_006/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_006/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 0 test
-        sniff_pkts = self.send_and_sniff_pkts(0, 1, in_pcap_file, out_pcap_file, filters)
+    def test_jump_007(self):
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/jump_007/jump_007.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 3, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/jump_007/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_007/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 2, in_pcap_file, out_pcap_file, filters)
+    def test_jump_008(self):
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        cli_file = '/tmp/pipeline/jump_008/jump_008.cli'
+        self.run_dpdk_app(cli_file)
 
-    def test_xor_007(self):
-        """
-        find entry in the table based on the des mac address,
-        then update the src mac address to the mac address in the table.
-        """
+        in_pcap = ['pipeline/jump_008/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_008/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cli_file = '/tmp/pipeline/xor_007/xor_007.cli'
+    def test_jump_009(self):
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        cli_file = '/tmp/pipeline/jump_009/jump_009.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+        in_pcap = ['pipeline/jump_009/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_009/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        in_pcap_file = 'pipeline/xor_007/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/xor_007/pcap_files/out_1.txt'
-        filters = "tcp"
+    def test_jump_010(self):
 
-        # rule 0 test
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/jump_010/jump_010.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/jump_010/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_010/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+    def test_jump_011(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/jump_011/jump_011.cli'
+        self.run_dpdk_app(cli_file)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/jump_011/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_011/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-    def test_xor_008(self):
+    def test_jump_012(self):
 
-        cli_file = '/tmp/pipeline/xor_008/xor_008.cli'
+        cli_file = '/tmp/pipeline/jump_012/jump_012.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/jump_012/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_012/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_jump_013(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/xor_008/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/xor_008/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/jump_013/jump_013.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/jump_013/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_013/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+    def test_jump_014(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/jump_014/jump_014.cli'
+        self.run_dpdk_app(cli_file)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/jump_014/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_014/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-    def test_add_001(self):
+    def test_jump_015(self):
 
-        cli_file = '/tmp/pipeline/add_001/add_001.cli'
+        cli_file = '/tmp/pipeline/jump_015/jump_015.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/jump_015/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_015/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_jump_016(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/add_001/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/add_001/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/jump_016/jump_016.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/jump_016/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_016/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+    def test_jump_017(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/jump_017/jump_017.cli'
+        self.run_dpdk_app(cli_file)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/jump_017/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_017/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-    def test_add_002(self):
+    def test_jump_018(self):
 
-        cli_file = '/tmp/pipeline/add_002/add_002.cli'
+        cli_file = '/tmp/pipeline/jump_018/jump_018.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/jump_018/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_018/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_jump_019(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/add_002/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/add_002/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/jump_019/jump_019.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/jump_019/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_019/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+    def test_jump_020(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/jump_020/jump_020.cli'
+        self.run_dpdk_app(cli_file)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/jump_020/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_020/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-    def test_add_003(self):
+    def test_jump_021(self):
 
-        cli_file = '/tmp/pipeline/add_003/add_003.cli'
+        cli_file = '/tmp/pipeline/jump_021/jump_021.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/jump_021/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_021/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_jump_022(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/add_003/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/add_003/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 1, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/jump_022/jump_022.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 2, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/jump_022/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_022/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 3, in_pcap_file, out_pcap_file, filters)
+    def test_jump_023(self):
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        cli_file = '/tmp/pipeline/jump_023/jump_023.cli'
+        self.run_dpdk_app(cli_file)
 
-    def test_add_004(self):
+        in_pcap = ['pipeline/jump_023/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_023/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cli_file = '/tmp/pipeline/add_004/add_004.cli'
+    def test_jump_024(self):
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        cli_file = '/tmp/pipeline/jump_024/jump_024.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+        in_pcap = ['pipeline/jump_024/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_024/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/add_004/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/add_004/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+    def test_jump_025(self):
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/jump_025/jump_025.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/jump_025/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_025/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+    def test_jump_026(self):
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        cli_file = '/tmp/pipeline/jump_026/jump_026.cli'
+        self.run_dpdk_app(cli_file)
 
-    def test_add_005(self):
+        in_pcap = ['pipeline/jump_026/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_026/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cli_file = '/tmp/pipeline/add_005/add_005.cli'
+    def test_jump_027(self):
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        cli_file = '/tmp/pipeline/jump_027/jump_027.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+        in_pcap = ['pipeline/jump_027/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_027/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/add_005/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/add_005/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+    def test_jump_028(self):
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/jump_028/jump_028.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/jump_028/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_028/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+    def test_jump_029(self):
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        cli_file = '/tmp/pipeline/jump_029/jump_029.cli'
+        self.run_dpdk_app(cli_file)
 
-    def test_add_006(self):
+        in_pcap = ['pipeline/jump_029/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_029/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cli_file = '/tmp/pipeline/add_006/add_006.cli'
+    def test_jump_030(self):
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        cli_file = '/tmp/pipeline/jump_030/jump_030.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+        in_pcap = ['pipeline/jump_030/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_030/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/add_006/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/add_006/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+    def test_jump_031(self):
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/jump_031/jump_031.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/jump_031/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_031/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+    def test_jump_032(self):
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        cli_file = '/tmp/pipeline/jump_032/jump_032.cli'
+        self.run_dpdk_app(cli_file)
 
-    def test_add_007(self):
+        in_pcap = ['pipeline/jump_032/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_032/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cli_file = '/tmp/pipeline/add_007/add_007.cli'
+    def test_jump_033(self):
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        cli_file = '/tmp/pipeline/jump_033/jump_033.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+        in_pcap = ['pipeline/jump_033/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_033/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/add_007/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/add_007/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+    def test_jump_034(self):
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/jump_034/jump_034.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/jump_034/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_034/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+    def test_jump_035(self):
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        cli_file = '/tmp/pipeline/jump_035/jump_035.cli'
+        self.run_dpdk_app(cli_file)
 
-    def test_add_008(self):
+        in_pcap = ['pipeline/jump_035/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_035/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cli_file = '/tmp/pipeline/add_008/add_008.cli'
+    def test_jump_036(self):
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        cli_file = '/tmp/pipeline/jump_036/jump_036.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+        in_pcap = ['pipeline/jump_036/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_036/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/add_008/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/add_008/pcap_files/out_1.txt'
-        filters = "udp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+    def test_jump_037(self):
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/jump_037/jump_037.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/jump_037/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_037/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+    def test_jump_038(self):
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        cli_file = '/tmp/pipeline/jump_038/jump_038.cli'
+        self.run_dpdk_app(cli_file)
 
-    def test_shl_001(self):
+        in_pcap = ['pipeline/jump_038/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_038/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cli_file = '/tmp/pipeline/shl_001/shl_001.cli'
+    def test_jump_039(self):
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        cli_file = '/tmp/pipeline/jump_039/jump_039.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+        in_pcap = ['pipeline/jump_039/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_039/pcap_files/out_1.txt'] * 4
+        filters = [""] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/shl_001/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/shl_001/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+    def test_jump_040(self):
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/jump_040/jump_040.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/jump_040/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_040/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+    def test_jump_041(self):
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        cli_file = '/tmp/pipeline/jump_041/jump_041.cli'
+        self.run_dpdk_app(cli_file)
 
-    def test_shl_002(self):
+        in_pcap = ['pipeline/jump_041/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_041/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cli_file = '/tmp/pipeline/shl_002/shl_002.cli'
+    def test_jump_042(self):
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        cli_file = '/tmp/pipeline/jump_042/jump_042.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+        in_pcap = ['pipeline/jump_042/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_042/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/shl_002/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/shl_002/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+    def test_jump_043(self):
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/jump_043/jump_043.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/jump_043/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_043/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+    def test_jump_044(self):
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        cli_file = '/tmp/pipeline/jump_044/jump_044.cli'
+        self.run_dpdk_app(cli_file)
 
-    def test_shl_003(self):
+        in_pcap = ['pipeline/jump_044/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_044/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cli_file = '/tmp/pipeline/shl_003/shl_003.cli'
+    def test_jump_045(self):
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        cli_file = '/tmp/pipeline/jump_045/jump_045.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+        in_pcap = ['pipeline/jump_045/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_045/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/shl_003/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/shl_003/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+    def test_jump_046(self):
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/jump_046/jump_046.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/jump_046/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_046/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+    def test_jump_047(self):
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        cli_file = '/tmp/pipeline/jump_047/jump_047.cli'
+        self.run_dpdk_app(cli_file)
 
-    def test_shl_004(self):
+        in_pcap = ['pipeline/jump_047/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_047/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cli_file = '/tmp/pipeline/shl_004/shl_004.cli'
+    def test_jump_048(self):
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        cli_file = '/tmp/pipeline/jump_048/jump_048.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+        in_pcap = ['pipeline/jump_048/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_048/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/shl_004/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/shl_004/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+    def test_jump_049(self):
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/jump_049/jump_049.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/jump_049/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_049/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+    def test_jump_050(self):
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        cli_file = '/tmp/pipeline/jump_050/jump_050.cli'
+        self.run_dpdk_app(cli_file)
 
-    def test_shl_005(self):
+        in_pcap = ['pipeline/jump_050/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_050/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cli_file = '/tmp/pipeline/shl_005/shl_005.cli'
+    def test_jump_051(self):
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        cli_file = '/tmp/pipeline/jump_051/jump_051.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+        in_pcap = ['pipeline/jump_051/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_051/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/shl_005/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/shl_005/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+    def test_jump_052(self):
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/jump_052/jump_052.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/jump_052/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_052/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+    def test_jump_053(self):
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        cli_file = '/tmp/pipeline/jump_053/jump_053.cli'
+        self.run_dpdk_app(cli_file)
 
-    def test_shl_006(self):
+        in_pcap = ['pipeline/jump_053/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_053/pcap_files/out_1.txt'] * 4
+        filters = [""] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cli_file = '/tmp/pipeline/shl_006/shl_006.cli'
+    def test_jump_054(self):
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        cli_file = '/tmp/pipeline/jump_054/jump_054.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+        in_pcap = ['pipeline/jump_054/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_054/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/shl_006/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/shl_006/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+    def test_jump_055(self):
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/jump_055/jump_055.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/jump_055/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/jump_055/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+    def test_ckadd_001(self):
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        cli_file = '/tmp/pipeline/ckadd_001/ckadd_001.cli'
+        self.run_dpdk_app(cli_file)
 
-    def test_shl_007(self):
+        in_pcap = ['pipeline/ckadd_001/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/ckadd_001/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cli_file = '/tmp/pipeline/shl_007/shl_007.cli'
+    def test_ckadd_009(self):
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        cli_file = '/tmp/pipeline/ckadd_009/ckadd_009.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+        in_pcap = ['pipeline/ckadd_009/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/ckadd_009/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/shl_007/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/shl_007/pcap_files/out_1.txt'
-        filters = "udp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+    def test_ckadd_010(self):
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/ckadd_010/ckadd_010.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/ckadd_010/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/ckadd_010/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+    def test_cksub_001(self):
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        cli_file = '/tmp/pipeline/cksub_001/cksub_001.cli'
+        self.run_dpdk_app(cli_file)
 
-    def test_shl_008(self):
+        in_pcap = ['pipeline/cksub_001/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/cksub_001/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        cli_file = '/tmp/pipeline/shl_008/shl_008.cli'
+    def test_invalidate_001(self):
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        cli_file = '/tmp/pipeline/invalidate_001/invalidate_001.cli'
+        self.run_dpdk_app(cli_file)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+        in_pcap = ['pipeline/invalidate_001/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/invalidate_001/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/shl_008/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/shl_008/pcap_files/out_1.txt'
-        filters = "udp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+    def test_validate_001(self):
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/validate_001/validate_001.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/validate_001/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/validate_001/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+    def test_table_002(self):
 
+        cli_file = '/tmp/pipeline/table_002/table_002.cli'
+        self.run_dpdk_app(cli_file)
         sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        s = self.connect_cli_server()
 
-    def test_shr_001(self):
+        # empty table scenario
+        in_pcap = ['pipeline/table_002/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/table_002/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
 
-        cli_file = '/tmp/pipeline/shr_001/shr_001.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/shr_001/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/shr_001/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        # single rule scenario
+        CMD_FILE = '/tmp/pipeline/table_002/cmd_files/cmd_2.txt'
+        CLI_CMD = 'pipeline PIPELINE0 table table_002_table update {} none none\n'.format(CMD_FILE)
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
 
-    def test_shr_002(self):
+        in_pcap = ['pipeline/table_002/pcap_files/in_2.txt'] * 4
+        out_pcap = ['pipeline/table_002/pcap_files/out_2.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
 
-        cli_file = '/tmp/pipeline/shr_002/shr_002.cli'
+        # two rules scenario
+        CMD_FILE = '/tmp/pipeline/table_002/cmd_files/cmd_3.txt'
+        CLI_CMD = 'pipeline PIPELINE0 table table_002_table update {} none none\n'.format(CMD_FILE)
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/table_002/pcap_files/in_3.txt'] * 4
+        out_pcap = ['pipeline/table_002/pcap_files/out_3.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+        # delete one rule scenario
+        CMD_FILE = '/tmp/pipeline/table_002/cmd_files/cmd_4_1.txt'
+        CLI_CMD = 'pipeline PIPELINE0 table table_002_table update none {} none\n'.format(CMD_FILE)
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/shr_002/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/shr_002/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/table_002/pcap_files/in_4_1.txt'] * 4
+        out_pcap = ['pipeline/table_002/pcap_files/out_4_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        # delete all rules scenario
+        CMD_FILE = '/tmp/pipeline/table_002/cmd_files/cmd_4_2.txt'
+        CLI_CMD = 'pipeline PIPELINE0 table table_002_table update none {} none\n'.format(CMD_FILE)
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/table_002/pcap_files/in_4_2.txt'] * 4
+        out_pcap = ['pipeline/table_002/pcap_files/out_4_2.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        # action update scenario (restore one of the previously deleted rules and check the update)
+        CMD_FILE = '/tmp/pipeline/table_002/cmd_files/cmd_5_1.txt'
+        CLI_CMD = 'pipeline PIPELINE0 table table_002_table update {} none none\n'.format(CMD_FILE)
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = 'pipeline/table_002/pcap_files/in_5_1.txt'
+        out_pcap = 'pipeline/table_002/pcap_files/out_5_1.txt'
+        self.send_and_sniff_pkts(0, 0, in_pcap, out_pcap, "tcp")
 
-    def test_shr_003(self):
+        # action update scenario (change the action of restored rule and check the update)
+        CMD_FILE = '/tmp/pipeline/table_002/cmd_files/cmd_5_2.txt'
+        CLI_CMD = 'pipeline PIPELINE0 table table_002_table update {} none none\n'.format(CMD_FILE)
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
 
-        cli_file = '/tmp/pipeline/shr_003/shr_003.cli'
+        in_pcap = ['pipeline/table_002/pcap_files/in_5_1.txt'] * 4
+        out_pcap = ['pipeline/table_002/pcap_files/out_5_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        # deafult action scenario [empty table]
+        CMD_FILE = '/tmp/pipeline/table_002/cmd_files/cmd_6_1.txt'  # delete the previously added rule
+        CLI_CMD = 'pipeline PIPELINE0 table table_002_table update none {} none\n'.format(CMD_FILE)
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+        in_pcap = ['pipeline/table_002/pcap_files/in_6_1.txt'] * 4
+        out_pcap = ['pipeline/table_002/pcap_files/out_6_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/shr_003/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/shr_003/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        # deafult action scenario [table with one rule]
+        '''
+        Add key A => Lookup HIT for the right packet with the specific key associated action executed
+                     Lookup MISS for any other packets with default action executed
+        '''
+        CMD_FILE = '/tmp/pipeline/table_002/cmd_files/cmd_6_2.txt'  # add a new rule
+        CLI_CMD = 'pipeline PIPELINE0 table table_002_table update {} none none\n'.format(CMD_FILE)
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/table_002/pcap_files/in_6_2.txt'] * 4
+        out_pcap = ['pipeline/table_002/pcap_files/out_6_2.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+    def test_table_003(self):
 
+        cli_file = '/tmp/pipeline/table_003/table_003.cli'
+        self.run_dpdk_app(cli_file)
         sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_shr_004(self):
-
-        cli_file = '/tmp/pipeline/shr_004/shr_004.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/shr_004/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/shr_004/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+        s = self.connect_cli_server()
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        # Empty table scenario
+        in_pcap = ['pipeline/table_003/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/table_003/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        # Single rule scenario
+        CMD_FILE = '/tmp/pipeline/table_003/cmd_files/cmd_2.txt'
+        CLI_CMD = 'pipeline PIPELINE0 table table_003_table update {} none none\n'.format(CMD_FILE)
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
 
-    def test_shr_005(self):
+        in_pcap = ['pipeline/table_003/pcap_files/in_2.txt'] * 4
+        out_pcap = ['pipeline/table_003/pcap_files/out_2.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
 
-        cli_file = '/tmp/pipeline/shr_005/shr_005.cli'
+        # test two rules scenario
+        CMD_FILE = '/tmp/pipeline/table_003/cmd_files/cmd_3.txt'
+        CLI_CMD = 'pipeline PIPELINE0 table table_003_table update {} none none\n'.format(CMD_FILE)
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = ['pipeline/table_003/pcap_files/in_3.txt'] * 4
+        out_pcap = ['pipeline/table_003/pcap_files/out_3.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+        # delete one rule scenario
+        CMD_FILE = '/tmp/pipeline/table_003/cmd_files/cmd_4_1.txt'
+        CLI_CMD = 'pipeline PIPELINE0 table table_003_table update none {} none\n'.format(CMD_FILE)
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/shr_005/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/shr_005/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/table_003/pcap_files/in_4_1.txt'] * 4
+        out_pcap = ['pipeline/table_003/pcap_files/out_4_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        # delete all rules scenario
+        CMD_FILE = '/tmp/pipeline/table_003/cmd_files/cmd_4_2.txt'
+        CLI_CMD = 'pipeline PIPELINE0 table table_003_table update none {} none\n'.format(CMD_FILE)
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/table_003/pcap_files/in_4_2.txt'] * 4
+        out_pcap = ['pipeline/table_003/pcap_files/out_4_2.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        # action update scenario (restore one of the previously deleted rules and check the update)
+        CMD_FILE = '/tmp/pipeline/table_003/cmd_files/cmd_5_1.txt'
+        CLI_CMD = 'pipeline PIPELINE0 table table_003_table update {} none none\n'.format(CMD_FILE)
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        in_pcap = 'pipeline/table_003/pcap_files/in_5_1.txt'
+        out_pcap = 'pipeline/table_003/pcap_files/out_5_1.txt'
+        self.send_and_sniff_pkts(0, 0, in_pcap, out_pcap, "tcp")
 
-    def test_shr_006(self):
+        # action update scenario (change the action of restored rule and check the update)
+        CMD_FILE = '/tmp/pipeline/table_003/cmd_files/cmd_5_2.txt'
+        CLI_CMD = 'pipeline PIPELINE0 table table_003_table update {} none none\n'.format(CMD_FILE)
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+
+        in_pcap = ['pipeline/table_003/pcap_files/in_5_1.txt'] * 4
+        out_pcap = ['pipeline/table_003/pcap_files/out_5_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+
+        # Default action scenario [Empty table]
+        CMD_FILE = '/tmp/pipeline/table_003/cmd_files/cmd_6_1_1.txt'  # delete the previously added rule
+        CMD_FILE_2 = '/tmp/pipeline/table_003/cmd_files/cmd_6_1_2.txt'  # change the default action of table
+        CLI_CMD = 'pipeline PIPELINE0 table table_003_table update none {} {} \n'.format(CMD_FILE, CMD_FILE_2)
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+
+        in_pcap = ['pipeline/table_003/pcap_files/in_6_1.txt'] * 4
+        out_pcap = ['pipeline/table_003/pcap_files/out_6_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+
+        # Default action scenario [Table with one rule]
+        '''
+        Add key A => Lookup HIT for the right packet with the specific key associated action executed
+                     Lookup MISS for any other packets with default action executed
+        '''
+        CMD_FILE = '/tmp/pipeline/table_003/cmd_files/cmd_6_2.txt'  # add a new rule
+        CLI_CMD = 'pipeline PIPELINE0 table table_003_table update {} none none\n'.format(CMD_FILE)
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
 
-        cli_file = '/tmp/pipeline/shr_006/shr_006.cli'
+        in_pcap = ['pipeline/table_003/pcap_files/in_6_2.txt'] * 4
+        out_pcap = ['pipeline/table_003/pcap_files/out_6_2.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+    def test_table_004(self):
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/shr_006/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/shr_006/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/table_004/table_004.cli'
+        self.run_dpdk_app(cli_file)
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        in_pcap = ['pipeline/table_004/pcap_files/in_1.txt'] * 4
+        out_pcap = ['pipeline/table_004/pcap_files/out_1.txt'] * 4
+        filters = ["tcp"] * 4
+        tx_port = [0, 1, 2, 3]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+    def test_reg_001(self):
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        cli_file = '/tmp/pipeline/reg_001/reg_001.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        # Read default initial value
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x0\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12\npipeline> ")
 
-    def test_shr_007(self):
+        # Update the register array location
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x0 0xab\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
 
-        cli_file = '/tmp/pipeline/shr_007/shr_007.cli'
+        # Verify updated value
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x0\n'
+        self.socket_send_cmd(s, CLI_CMD, "0xab\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12\npipeline> ")
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_002(self):
+
+        cli_file = '/tmp/pipeline/reg_002/reg_002.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Update the register array locations with required values
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xa1a2 0x123456789012\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xb1b2 0x12345678\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xc1 0x1234\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xd1 0x12\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        s.close()
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+        # Read updated values through packet
+        in_pcap_file = 'pipeline/reg_002/pcap_files/in_1.txt'
+        out_pcap_file = 'pipeline/reg_002/pcap_files/out_1.txt'
+        self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, "tcp")
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_003(self):
+
+        cli_file = '/tmp/pipeline/reg_003/reg_003.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Update the register array locations with required values
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x1a1a2a3 0x123456789012\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fb1b2 0x12345678\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fc1 0x1234\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7f 0x12\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        s.close()
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/shr_007/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/shr_007/pcap_files/out_1.txt'
-        filters = "udp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        # Read updated values through packet
+        in_pcap_file = 'pipeline/reg_003/pcap_files/in_1.txt'
+        out_pcap_file = 'pipeline/reg_003/pcap_files/out_1.txt'
+        self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, "tcp")
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_004(self):
+
+        cli_file = '/tmp/pipeline/reg_004/reg_004.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Update the register array locations with required values
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x1a1a2a3 0x123456789012\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fb1b2 0x12345678\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fc1 0x1234\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7f 0x12\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        s.close()
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        # Read updated values through packet
+        in_pcap_file = 'pipeline/reg_004/pcap_files/in_1.txt'
+        out_pcap_file = 'pipeline/reg_004/pcap_files/out_1.txt'
+        self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, "tcp")
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_005(self):
+
+        cli_file = '/tmp/pipeline/reg_005/reg_005.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Update the register array locations with required values
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x1a1a2a3 0x123456789012\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fb1b2 0x12345678\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fc1 0x1234\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7f 0x12\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        s.close()
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+        # Read updated values through packet
+        in_pcap_file = 'pipeline/reg_005/pcap_files/in_1.txt'
+        out_pcap_file = 'pipeline/reg_005/pcap_files/out_1.txt'
+        self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, "tcp")
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_006(self):
+
+        cli_file = '/tmp/pipeline/reg_006/reg_006.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Update the register array locations with required values
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xa1a2 0x123456789012\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xb1b2 0x12345678\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xc1 0x1234\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xd1 0x12\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+
+        # Send a packet to trigger the execution of apply block
+        in_pcap_file = 'pipeline/reg_006/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify written vs read values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xa3a4\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x123456789012\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xb3b4\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12345678\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xc2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1234\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xd2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12\npipeline> ")
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_007(self):
+
+        cli_file = '/tmp/pipeline/reg_007/reg_007.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Update the register array locations with required values
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xa1a2 0x123456789012\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xb1b2 0x12345678\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xc1 0x1234\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xd1 0x12\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+
+        # Send a packet to trigger the execution of apply block
+        in_pcap_file = 'pipeline/reg_007/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify written vs read values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xa3a4\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x123456789012\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xb3b4\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12345678\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xc2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1234\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xd2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12\npipeline> ")
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_008(self):
+
+        cli_file = '/tmp/pipeline/reg_008/reg_008.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Update the register array locations with required values
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x1a1a2a3 0x123456789012\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fb1b2 0x12345678\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fc1 0x1234\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7f 0x12\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+
+        # Send a packet to trigger the execution of apply block
+        in_pcap_file = 'pipeline/reg_008/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify written vs read values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xa3a4\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x123456789012\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xb3b4\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12345678\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xc2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1234\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xd2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12\npipeline> ")
 
-    def test_shr_008(self):
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_009(self):
+
+        cli_file = '/tmp/pipeline/reg_009/reg_009.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Update the register array locations with required values
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x1a1a2a3 0x123456789012\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fb1b2 0x12345678\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fc1 0x1234\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7f 0x12\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+
+        # Send a packet to trigger the execution of apply block
+        in_pcap_file = 'pipeline/reg_009/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify written vs read values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xa3a4\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x123456789012\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xb3b4\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12345678\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xc2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1234\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xd2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12\npipeline> ")
 
-        cli_file = '/tmp/pipeline/shr_008/shr_008.cli'
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_010(self):
+
+        cli_file = '/tmp/pipeline/reg_010/reg_010.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Verify the default initial values of zero
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xa1a2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xd1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_010/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xa1a2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x123456789012\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12345678\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1234\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xd1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x6\npipeline> ")
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_011(self):
+
+        cli_file = '/tmp/pipeline/reg_011/reg_011.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Verify the default initial values of zero
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xa1a2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xd1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_011/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xa1a2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x123456789012\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12345678\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1234\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xd1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x6\npipeline> ")
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_012(self):
+
+        cli_file = '/tmp/pipeline/reg_012/reg_012.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Verify the default initial values of zero
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xa1a2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xd1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_012/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xa1a2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x123456789012\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12345678\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1234\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xd1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12\npipeline> ")
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/shr_008/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/shr_008/pcap_files/out_1.txt'
-        filters = "udp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_013(self):
+
+        cli_file = '/tmp/pipeline/reg_013/reg_013.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Verify the default initial values of zero
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xa1a2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xd1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x06\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_013/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xa1a2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x123456789012\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12345678\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1234\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xd1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x6\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x06\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x9876543210987654\npipeline> ")
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_014(self):
+
+        cli_file = '/tmp/pipeline/reg_014/reg_014.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Verify the default initial values of zero
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xa1a2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xd1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_014/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xa1a2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x123456789012\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12345678\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1234\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xd1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x6\npipeline> ")
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_015(self):
+
+        cli_file = '/tmp/pipeline/reg_015/reg_015.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Verify the default initial values of zero
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xa1a2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xd1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_015/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xa1a2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x123456789012\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12345678\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1234\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xd1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x6\npipeline> ")
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_016(self):
+
+        cli_file = '/tmp/pipeline/reg_016/reg_016.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Verify the default initial values of zero
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x1a1a2a3\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7f\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xf7\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_016/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x1a1a2a3\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1234567890123456\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x123456789012\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12345678\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7f\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1234\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xf7\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12\npipeline> ")
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_017(self):
+
+        cli_file = '/tmp/pipeline/reg_017/reg_017.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Verify the default initial values of zero
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x1a1a2a3\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7f\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xf7\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_017/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x1a1a2a3\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1234567890123456\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x123456789012\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12345678\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7f\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1234\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xf7\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12\npipeline> ")
 
-    def test_sub_001(self):
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_018(self):
+
+        cli_file = '/tmp/pipeline/reg_018/reg_018.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Verify the default initial values of zero
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x1a1a2a3\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7f\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xf7\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_018/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x1a1a2a3\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1234567890123456\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x123456789012\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12345678\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7f\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1234\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xf7\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12\npipeline> ")
 
-        cli_file = '/tmp/pipeline/sub_001/sub_001.cli'
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_019(self):
+
+        cli_file = '/tmp/pipeline/reg_019/reg_019.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Verify the default initial values of zero
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x1a1a2a3\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7f\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xf7\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_019/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x1a1a2a3\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1234567890123456\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x123456789012\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12345678\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7f\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1234\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xf7\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12\npipeline> ")
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_020(self):
+
+        cli_file = '/tmp/pipeline/reg_020/reg_020.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Verify the default initial values of zero
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xa1a2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xd1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_020/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xa1a2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1234567890123456\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x123456789012\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12345678\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xd1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1234\npipeline> ")
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_021(self):
+
+        cli_file = '/tmp/pipeline/reg_021/reg_021.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Verify the default initial values of zero
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x1a1a2a3\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7f\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xf7\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_021/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x1a1a2a3\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1234567890123456\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x123456789012\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12345678\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7f\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1234\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xf7\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12\npipeline> ")
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/sub_001/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/sub_001/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_022(self):
+
+        cli_file = '/tmp/pipeline/reg_022/reg_022.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Verify the default initial values of zero
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x1a1a2a3\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7f\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_022/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x1a1a2a3\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x123456789012\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12345678\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1234\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7f\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x6\npipeline> ")
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_023(self):
+
+        cli_file = '/tmp/pipeline/reg_023/reg_023.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Verify the default initial values of zero
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x1a1a2a3\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7f\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xf7\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_023/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x1a1a2a3\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1234567890123456\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x123456789012\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12345678\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7f\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1234\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xf7\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12\npipeline> ")
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_024(self):
+
+        cli_file = '/tmp/pipeline/reg_024/reg_024.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Verify the default initial values of zero
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x1a1a2a3\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7f\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xf7\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_024/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x1a1a2a3\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1234567890123456\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x123456789012\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12345678\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7f\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1234\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xf7\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12\npipeline> ")
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_025(self):
+
+        cli_file = '/tmp/pipeline/reg_025/reg_025.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Verify the default initial values of zero
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xa1a2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xd1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x0\npipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_025/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xa1a2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1234567890123456\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x123456789012\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12345678\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xd1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1234\npipeline> ")
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_026(self):
+
+        cli_file = '/tmp/pipeline/reg_026/reg_026.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Initialize the register array locations with required values
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xa1a2 0xff23456789012\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xb1b2 0xff5678\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xc1 0xff234\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xd1 0xff2\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_026/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xa1a2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x100468acf12024\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1333acf0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x100468\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xd1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0xff8\npipeline> ")
 
-    def test_sub_002(self):
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_027(self):
+
+        cli_file = '/tmp/pipeline/reg_027/reg_027.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Initialize the register array locations with required values
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xa1a2 0xff23456789012\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xb1b2 0xff5678\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xc1 0xff234\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xd1 0xff2\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_027/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xa1a2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x100468acf12024\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1333acf0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x100468\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xd1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0xff8\npipeline> ")
 
-        cli_file = '/tmp/pipeline/sub_002/sub_002.cli'
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_028(self):
+
+        cli_file = '/tmp/pipeline/reg_028/reg_028.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Initialize the register array locations with required values
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xa1a2 0xff23456789012\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xb1b2 0xff5678\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xc1 0xff234\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xd1 0xff2\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_028/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xa1a2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x100468acf12024\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1333acf0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x100468\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xd1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0xff8\npipeline> ")
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_029(self):
+
+        cli_file = '/tmp/pipeline/reg_029/reg_029.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Initialize the register array locations with required values
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xa1a2 0xff23456789012\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xb1b2 0xff5678\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xc1 0xff234\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xd1 0xff2\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_029/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xa1a2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x100468acf12024\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1333acf0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x100468\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xd1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0xff8\npipeline> ")
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_030(self):
+
+        cli_file = '/tmp/pipeline/reg_030/reg_030.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Initialize the register array locations with required values
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xa1a2 0xff23456789012\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xb1b2 0xff5678\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xc1 0xff234\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xd1 0xff2\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_030/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xa1a2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x100468acf12024\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1333acf0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x100468\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xd1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0xff8\npipeline> ")
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/sub_002/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/sub_002/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_031(self):
+
+        cli_file = '/tmp/pipeline/reg_031/reg_031.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Initialize the register array locations with required values
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x1a1a2a3 0xff23456789012\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fb1b2 0xff5678\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fc1 0xff234\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7f 0xff2\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_031/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x1a1a2a3\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x100468acf12024\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1333acf0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x100468\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7f\n'
+        self.socket_send_cmd(s, CLI_CMD, "0xff8\npipeline> ")
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_032(self):
+
+        cli_file = '/tmp/pipeline/reg_032/reg_032.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Initialize the register array locations with required values
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x1a1a2a3 0xff23456789012\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fb1b2 0xff5678\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fc1 0xff234\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7f 0xff2\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xf7 0x1f\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_032/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x1a1a2a3\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x124448ace68ac468\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12345777e68a\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x124448ac\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7f\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x10f1\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xf7\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x25\npipeline> ")
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_033(self):
+
+        cli_file = '/tmp/pipeline/reg_033/reg_033.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Initialize the register array locations with required values
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x1a1a2a3 0xff23456789012\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fb1b2 0xff5678\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fc1 0xff234\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7f 0xff2\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xf7 0x1f\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_033/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x1a1a2a3\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x124448ace68ac468\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12345777e68a\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x124448ac\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7f\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x10f1\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xf7\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x25\npipeline> ")
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_034(self):
+
+        cli_file = '/tmp/pipeline/reg_034/reg_034.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Initialize the register array locations with required values
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x1a1a2a3 0xff23456789012\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fb1b2 0xff5678\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fc1 0xff234\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7f 0xff2\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xf7 0x1f\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_034/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x1a1a2a3\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x124448ace68ac468\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12345777e68a\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x124448ac\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7f\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x10f1\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xf7\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x25\npipeline> ")
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_035(self):
+
+        cli_file = '/tmp/pipeline/reg_035/reg_035.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Initialize the register array locations with required values
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x1a1a2a3 0xff23456789012\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fb1b2 0xff5678\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fc1 0xff234\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7f 0xff2\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xf7 0x1f\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_035/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x1a1a2a3\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x124448ace68ac468\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12345777e68a\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x124448ac\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7f\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x10f1\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xf7\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x25\npipeline> ")
 
-    def test_sub_003(self):
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_036(self):
+
+        cli_file = '/tmp/pipeline/reg_036/reg_036.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Initialize the register array locations with required values
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x1a1a2a3 0xff23456789012\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fb1b2 0xff5678\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fc1 0xff234\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7f 0xff2\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xf7 0x1f\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_036/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x1a1a2a3\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x124448ace68ac468\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12345777e68a\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x124448ac\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7f\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x10f1\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xf7\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x25\npipeline> ")
 
-        cli_file = '/tmp/pipeline/sub_003/sub_003.cli'
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_037(self):
+
+        cli_file = '/tmp/pipeline/reg_037/reg_037.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Initialize the register array locations with required values
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x1a1a2a3 0xff23456789012\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fb1b2 0xff5678\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fc1 0xff234\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7f 0xff2\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xf7 0x1f\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_037/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x1a1a2a3\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x124448ace68ac468\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12345777e68a\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x124448ac\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7f\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x10f1\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xf7\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x25\npipeline> ")
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_038(self):
+
+        cli_file = '/tmp/pipeline/reg_038/reg_038.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Initialize the register array locations with required values
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xa1a2 0xff23456789012\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xb1b2 0xff5678\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xc1 0xff234\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xd1 0xff2\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_038/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xa1a2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x100468acf12024\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1333acf0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x100468\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xd1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0xff8\npipeline> ")
 
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_039(self):
+
+        cli_file = '/tmp/pipeline/reg_039/reg_039.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Initialize the register array locations with required values
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x1a1a2a3 0xff23456789012\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fb1b2 0xff5678\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fc1 0xff234\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7f 0xff2\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xf7 0x1f\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_039/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x1a1a2a3\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x124448ace68ac468\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12345777e68a\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x124448ac\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7f\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x10f1\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xf7\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x25\npipeline> ")
 
-        # rule 0 test
-        in_pcap_file = 'pipeline/sub_003/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/sub_003/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_040(self):
+
+        cli_file = '/tmp/pipeline/reg_040/reg_040.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Initialize the register array locations with required values
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x1a1a2a3 0xff23456789012\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fb1b2 0xff5678\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fc1 0xff234\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7f 0xff2\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xf7 0x1f\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_040/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x1a1a2a3\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x124448ace68ac468\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12345777e68a\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x124448ac\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7f\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x10f1\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xf7\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x25\npipeline> ")
 
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_041(self):
+
+        cli_file = '/tmp/pipeline/reg_041/reg_041.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Initialize the register array locations with required values
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x1a1a2a3 0xff23456789012\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fb1b2 0xff5678\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fc1 0xff234\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7f 0xff2\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xf7 0x1f\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_041/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Update the register array locations with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x1a1a2a3\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x124448ace68ac468\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x12345777e68a\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x124448ac\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7f\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x10f1\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xf7\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x25\npipeline> ")
 
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_042(self):
+
+        cli_file = '/tmp/pipeline/reg_042/reg_042.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Initialize the register array locations with required values
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xa1a2 0xff23456789012\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xb1b2 0xff5678\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xc1 0xff234\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xd1 0xff2\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_042/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xa1a2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x100468acf12024\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1333acf0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x100468\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xd1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0xff8\npipeline> ")
 
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_043(self):
+
+        cli_file = '/tmp/pipeline/reg_043/reg_043.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Initialize the register array locations with required values
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xa1a2 0xff23456789012\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xb1b2 0xff5678\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xc1 0xff234\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xd1 0xff2\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_043/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xa1a2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x100468acf12024\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1333acf0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x100468\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xd1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0xff8\npipeline> ")
 
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_044(self):
+
+        cli_file = '/tmp/pipeline/reg_044/reg_044.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Initialize the register array locations with required values
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x1a1a2a3 0xff23456789012\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fb1b2 0xff5678\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7fc1 0xff234\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0x7f 0xff2\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_044/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x1a1a2a3\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x100468acf12024\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1333acf0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7fc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x100468\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0x7f\n'
+        self.socket_send_cmd(s, CLI_CMD, "0xff8\npipeline> ")
 
-    def test_sub_004(self):
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_reg_045(self):
+
+        cli_file = '/tmp/pipeline/reg_045/reg_045.cli'
+        self.run_dpdk_app(cli_file)
+        sleep(CLI_SERVER_CONNECT_DELAY)
+        s = self.connect_cli_server()
+
+        # Initialize the register array locations with required values
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xa1a2 0xff23456789012\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xb1b2 0xff5678\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xc1 0xff234\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regwr REG_ARR_1 0xd1 0xff2\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+
+        # Send packet to DUT to update the register array
+        in_pcap_file = 'pipeline/reg_045/pcap_files/in_1.txt'
+        self.send_pkts(0, 0, in_pcap_file)
+
+        # Verify whether the register array is updated with required values
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xa1a2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x100468acf12024\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xb1b2\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x1333acf0\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xc1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0x100468\npipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 regrd REG_ARR_1 0xd1\n'
+        self.socket_send_cmd(s, CLI_CMD, "0xff8\npipeline> ")
 
-        cli_file = '/tmp/pipeline/sub_004/sub_004.cli'
+        s.close()
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_met_001(self):
+
+        cli_file = '/tmp/pipeline/met_001/met_001.cli'
+        self.run_dpdk_app(cli_file)
+
+        # Platinum Profile with High Packet Transmission Rate
+        in_pcap = ['pipeline/met_001/pcap_files/in_1.txt']
+        out_pcap_1 = 'pipeline/met_001/pcap_files/out_11.txt'
+        out_pcap_2 = 'pipeline/met_001/pcap_files/out_12.txt'
+        out_pcap_3 = 'pipeline/met_001/pcap_files/out_13.txt'
+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]
+        filters = ["tcp"] * 3
+        tx_port = [0]
+        rx_port = [0, 1, 2]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters, 1000)
+
+        # Platinum Profile with Low Packet Transmission Rate
+        out_pcap_1 = 'pipeline/met_001/pcap_files/out_21.txt'
+        out_pcap_2 = 'pipeline/met_001/pcap_files/out_22.txt'
+        out_pcap_3 = 'pipeline/met_001/pcap_files/out_23.txt'
+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters, 10)
+
+        # Gold Profile with High Packet Transmission Rate
+        s = self.connect_cli_server()
+        CLI_CMD = 'pipeline PIPELINE0 meter profile gold add cir 460 pir 1380 cbs 100 pbs 150\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 meter MET_ARRAY_1 from 0 to 0 set profile gold\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        CLI_CMD = 'pipeline PIPELINE0 meter profile platinum delete\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+
+        out_pcap_1 = 'pipeline/met_001/pcap_files/out_31.txt'
+        out_pcap_2 = 'pipeline/met_001/pcap_files/out_32.txt'
+        out_pcap_3 = 'pipeline/met_001/pcap_files/out_33.txt'
+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]
+        tx_port = [0]
+        rx_port = [0, 1, 2]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters, 1000)
+
+        # Default Profile with High Packet Transmission Rate
+        CLI_CMD = 'pipeline PIPELINE0 meter MET_ARRAY_1 from 0 to 0 reset\n'
+        self.socket_send_cmd(s, CLI_CMD, "pipeline> ")
+        s.close()
 
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/sub_004/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/sub_004/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_sub_005(self):
-
-        cli_file = '/tmp/pipeline/sub_005/sub_005.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/sub_005/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/sub_005/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_sub_006(self):
-
-        cli_file = '/tmp/pipeline/sub_006/sub_006.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/sub_006/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/sub_006/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_sub_007(self):
-
-        cli_file = '/tmp/pipeline/sub_007/sub_007.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/sub_007/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/sub_007/pcap_files/out_1.txt'
-        filters = "udp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_sub_008(self):
-
-        cli_file = '/tmp/pipeline/sub_008/sub_008.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/sub_008/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/sub_008/pcap_files/out_1.txt'
-        filters = "udp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_mov_001(self):
-
-        cli_file = '/tmp/pipeline/mov_001/mov_001.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/mov_001/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/mov_001/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_mov_002(self):
-        """
-        mov_002: swap destination and source MAC address of packets received on port
-        """
-        cli_file = '/tmp/pipeline/mov_002/mov_002.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/mov_002/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/mov_002/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_mov_003(self):
-
-        cli_file = '/tmp/pipeline/mov_003/mov_003.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/mov_003/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/mov_003/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_mov_004(self):
-        """
-        find entry in the table based on the des mac address,
-        then update the src mac address to the mac address in the table.
-        """
-
-        cli_file = '/tmp/pipeline/mov_004/mov_004.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        in_pcap_file = 'pipeline/mov_004/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/mov_004/pcap_files/out_1.txt'
-        filters = "tcp"
-
-        # rule 0 test
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_mov_005(self):
-        """
-        find entry in the table based on the des mac address,
-        then update the src mac address to the mac address in the table.
-        """
-
-        cli_file = '/tmp/pipeline/mov_005/mov_005.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        in_pcap_file = 'pipeline/mov_005/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/mov_005/pcap_files/out_1.txt'
-        filters = "tcp"
-
-        # rule 0 test
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 0, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_mov_007(self):
-        """
-        find entry in the table based on the des mac address,
-        then update the src mac address to the mac address in the table.
-        """
-
-        cli_file = '/tmp/pipeline/mov_007/mov_007.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        in_pcap_file = 'pipeline/mov_007/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/mov_007/pcap_files/out_1.txt'
-        filters = "tcp"
-
-        # rule 0 test
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 0, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_mov_008(self):
-        """
-        find entry in the table based on the des mac address,
-        then update the src mac address to the mac address in the table.
-        """
-
-        cli_file = '/tmp/pipeline/mov_008/mov_008.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        in_pcap_file = 'pipeline/mov_008/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/mov_008/pcap_files/out_1.txt'
-        filters = "tcp"
-
-        # rule 0 test
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_table_001(self):
-
-        cli_file = '/tmp/pipeline/table_001/table_001.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/table_001/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/table_001/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_vxlan_001(self):
-        """
-        example application: vxlan pipeline
-        """
-        cli_file = '/tmp/pipeline/vxlan_001/vxlan_001.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/vxlan_001/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/vxlan_001/pcap_files/out_1.txt'
-        filters = "udp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        in_pcap_file = 'pipeline/vxlan_001/pcap_files/in_2.txt'
-        out_pcap_file = 'pipeline/vxlan_001/pcap_files/out_2.txt'
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        in_pcap_file = 'pipeline/vxlan_001/pcap_files/in_3.txt'
-        out_pcap_file = 'pipeline/vxlan_001/pcap_files/out_3.txt'
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        in_pcap_file = 'pipeline/vxlan_001/pcap_files/in_4.txt'
-        out_pcap_file = 'pipeline/vxlan_001/pcap_files/out_4.txt'
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_dma_001(self):
-        """
-        example application: vxlan pipeline
-        """
-        cli_file = '/tmp/pipeline/dma_001/dma_001.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/dma_001/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/dma_001/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_dma_002(self):
-
-        cli_file = '/tmp/pipeline/dma_002/dma_002.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/dma_002/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/dma_002/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_dma_003(self):
-
-        cli_file = '/tmp/pipeline/dma_003/dma_003.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/dma_003/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/dma_003/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_dma_004(self):
-
-        cli_file = '/tmp/pipeline/dma_004/dma_004.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/dma_004/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/dma_004/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_dma_005(self):
-
-        cli_file = '/tmp/pipeline/dma_005/dma_005.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/dma_005/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/dma_005/pcap_files/out_1.txt'
-        filters = "vlan"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_dma_006(self):
-
-        cli_file = '/tmp/pipeline/dma_006/dma_006.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/dma_006/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/dma_006/pcap_files/out_1.txt'
-        filters = "udp port 4532"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_dma_007(self):
-
-        cli_file = '/tmp/pipeline/dma_007/dma_007.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/dma_007/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/dma_007/pcap_files/out_1.txt'
-        filters = "udp port 4532"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_dma_008(self):
-
-        cli_file = '/tmp/pipeline/dma_008/dma_008.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/dma_008/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/dma_008/pcap_files/out_1.txt'
-        filters = "udp port 4532"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_001(self):
-
-        cli_file = '/tmp/pipeline/jump_001/jump_001.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_001/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_001/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_002(self):
-
-        cli_file = '/tmp/pipeline/jump_002/jump_002.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_002/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_002/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_003(self):
-
-        cli_file = '/tmp/pipeline/jump_003/jump_003.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_003/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_003/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_004(self):
-
-        cli_file = '/tmp/pipeline/jump_004/jump_004.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_004/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_004/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_005(self):
-
-        cli_file = '/tmp/pipeline/jump_005/jump_005.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_005/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_005/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_006(self):
-
-        cli_file = '/tmp/pipeline/jump_006/jump_006.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_006/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_006/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_007(self):
-
-        cli_file = '/tmp/pipeline/jump_007/jump_007.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_007/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_007/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_008(self):
-
-        cli_file = '/tmp/pipeline/jump_008/jump_008.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_008/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_008/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_009(self):
-
-        cli_file = '/tmp/pipeline/jump_009/jump_009.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_009/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_009/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_010(self):
-
-        cli_file = '/tmp/pipeline/jump_010/jump_010.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_010/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_010/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_011(self):
-
-        cli_file = '/tmp/pipeline/jump_011/jump_011.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_011/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_011/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_012(self):
-
-        cli_file = '/tmp/pipeline/jump_012/jump_012.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_012/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_012/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_013(self):
-
-        cli_file = '/tmp/pipeline/jump_013/jump_013.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_013/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_013/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_014(self):
-
-        cli_file = '/tmp/pipeline/jump_014/jump_014.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_014/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_014/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_015(self):
-
-        cli_file = '/tmp/pipeline/jump_015/jump_015.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_015/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_015/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_016(self):
-
-        cli_file = '/tmp/pipeline/jump_016/jump_016.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_016/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_016/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_017(self):
-
-        cli_file = '/tmp/pipeline/jump_017/jump_017.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_017/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_017/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_018(self):
-
-        cli_file = '/tmp/pipeline/jump_018/jump_018.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_018/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_018/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_019(self):
-
-        cli_file = '/tmp/pipeline/jump_019/jump_019.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_019/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_019/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_020(self):
-
-        cli_file = '/tmp/pipeline/jump_020/jump_020.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_020/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_020/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_021(self):
-
-        cli_file = '/tmp/pipeline/jump_021/jump_021.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_021/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_021/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_022(self):
-
-        cli_file = '/tmp/pipeline/jump_022/jump_022.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_022/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_022/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_023(self):
-
-        cli_file = '/tmp/pipeline/jump_023/jump_023.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_023/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_023/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_024(self):
-
-        cli_file = '/tmp/pipeline/jump_024/jump_024.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_024/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_024/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_025(self):
-
-        cli_file = '/tmp/pipeline/jump_025/jump_025.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_025/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_025/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_026(self):
-
-        cli_file = '/tmp/pipeline/jump_026/jump_026.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_026/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_026/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_027(self):
-
-        cli_file = '/tmp/pipeline/jump_027/jump_027.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_027/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_027/pcap_files/out_1.txt'
-        filters = ""
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_028(self):
-
-        cli_file = '/tmp/pipeline/jump_028/jump_028.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_028/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_028/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_029(self):
-
-        cli_file = '/tmp/pipeline/jump_029/jump_029.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_029/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_029/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_030(self):
-
-        cli_file = '/tmp/pipeline/jump_030/jump_030.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_030/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_030/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_031(self):
-
-        cli_file = '/tmp/pipeline/jump_031/jump_031.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_031/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_031/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_032(self):
-
-        cli_file = '/tmp/pipeline/jump_032/jump_032.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_032/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_032/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_033(self):
-
-        cli_file = '/tmp/pipeline/jump_033/jump_033.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_033/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_033/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_034(self):
-
-        cli_file = '/tmp/pipeline/jump_034/jump_034.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_034/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_034/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_035(self):
-
-        cli_file = '/tmp/pipeline/jump_035/jump_035.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_035/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_035/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_036(self):
-
-        cli_file = '/tmp/pipeline/jump_036/jump_036.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_036/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_036/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_037(self):
-
-        cli_file = '/tmp/pipeline/jump_037/jump_037.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_037/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_037/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_038(self):
-
-        cli_file = '/tmp/pipeline/jump_038/jump_038.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_038/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_038/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_039(self):
-
-        cli_file = '/tmp/pipeline/jump_039/jump_039.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_039/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_039/pcap_files/out_1.txt'
-        filters = ""
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_040(self):
-
-        cli_file = '/tmp/pipeline/jump_040/jump_040.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_040/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_040/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_041(self):
-
-        cli_file = '/tmp/pipeline/jump_041/jump_041.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_041/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_041/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_042(self):
-
-        cli_file = '/tmp/pipeline/jump_042/jump_042.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_042/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_042/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_043(self):
-
-        cli_file = '/tmp/pipeline/jump_043/jump_043.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_043/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_043/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_044(self):
-
-        cli_file = '/tmp/pipeline/jump_044/jump_044.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_044/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_044/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_045(self):
-
-        cli_file = '/tmp/pipeline/jump_045/jump_045.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_045/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_045/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_046(self):
-
-        cli_file = '/tmp/pipeline/jump_046/jump_046.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_046/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_046/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_047(self):
-
-        cli_file = '/tmp/pipeline/jump_047/jump_047.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_047/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_047/pcap_files/out_1.txt'
-        filters = ""
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_048(self):
-
-        cli_file = '/tmp/pipeline/jump_048/jump_048.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_048/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_048/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_049(self):
-
-        cli_file = '/tmp/pipeline/jump_049/jump_049.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_049/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_049/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_050(self):
-
-        cli_file = '/tmp/pipeline/jump_050/jump_050.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_050/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_050/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_051(self):
-
-        cli_file = '/tmp/pipeline/jump_051/jump_051.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_051/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_051/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_052(self):
-
-        cli_file = '/tmp/pipeline/jump_052/jump_052.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_052/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_052/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_053(self):
-
-        cli_file = '/tmp/pipeline/jump_053/jump_053.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_053/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_053/pcap_files/out_1.txt'
-        filters = ""
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_054(self):
-
-        cli_file = '/tmp/pipeline/jump_054/jump_054.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_054/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_054/pcap_files/out_1.txt'
-        filters = ""
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_jump_055(self):
-
-        cli_file = '/tmp/pipeline/jump_055/jump_055.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/jump_055/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/jump_055/pcap_files/out_1.txt'
-        filters = ""
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_ckadd_001(self):
-
-        cli_file = '/tmp/pipeline/ckadd_001/ckadd_001.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/ckadd_001/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/ckadd_001/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_ckadd_009(self):
-
-        cli_file = '/tmp/pipeline/ckadd_009/ckadd_009.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/ckadd_009/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/ckadd_009/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_ckadd_010(self):
-
-        cli_file = '/tmp/pipeline/ckadd_010/ckadd_010.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/ckadd_010/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/ckadd_010/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_cksub_001(self):
-
-        cli_file = '/tmp/pipeline/cksub_001/cksub_001.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/cksub_001/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/cksub_001/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_invalidate_001(self):
-
-        cli_file = '/tmp/pipeline/invalidate_001/invalidate_001.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/invalidate_001/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/invalidate_001/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_validate_001(self):
-
-        cli_file = '/tmp/pipeline/validate_001/validate_001.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        # rule 0 test
-        in_pcap_file = 'pipeline/validate_001/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/validate_001/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # rule 1 test
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-
-        # rule 2 test
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-
-        # rule 3 test
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
-
-    def test_table_002(self):
-
-        cli_file = '/tmp/pipeline/table_002/table_002.cli'
-
-        cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci
-        self.dut.send_expect(cmd, "# ", 20)
-        cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci
-        self.dut.send_expect(cmd, "# ", 20)
-
-        cmd = "{0} {1} -- -s {2}".format(self.app_pipeline_path, self.eal_para, cli_file)
-        self.dut.send_expect(cmd, "PIPELINE0 enable", 60)
-
-        sleep(2)
-
-        # create TCP connection to the server
-        SERVER_IP = '192.168.122.216'
-        SERVER_PORT = 8086
-        BUFFER_SIZE = 1024
-
-        try:
-            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-        except socket.error as err:
-            print("socket creation failed with error %s" % (err))
-
-        try:
-            s.connect((SERVER_IP, SERVER_PORT))
-        except socket.error as err:
-            print("socket connection failed with error %s" % (err))
-
-        sleep(0.1)
-        msg = s.recv(BUFFER_SIZE)
-        response = msg.decode()
-        # print('Rxd: ' + response)
-        if "pipeline>" not in response:
-            s.close()
-            self.verify(0, "CLI response error")
-
-        # test empty table scenario
-        in_pcap_file = 'pipeline/table_002/pcap_files/in_1.txt'
-        out_pcap_file = 'pipeline/table_002/pcap_files/out_1.txt'
-        filters = "tcp"
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        # test single rule scenario
-        CMD_FILE = '/tmp/pipeline/table_002/cmd_files/cmd_2.txt'
-        CLI_CMD = 'pipeline PIPELINE0 table table_002_table update {} none none\n'.format(CMD_FILE)
-        s.send(CLI_CMD.encode('utf-8'))
-        sleep(0.1)
-        msg = s.recv(BUFFER_SIZE)
-        response = msg.decode()
-        # print('Rxd: ' + response)
-        if "pipeline>" not in response:
-            s.close()
-            self.verify(0, "CLI response error")
-        filters = "tcp"
-        in_pcap_file = 'pipeline/table_002/pcap_files/in_2.txt'
-        out_pcap_file = 'pipeline/table_002/pcap_files/out_2.txt'
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        # test two rules scenario
-        CMD_FILE = '/tmp/pipeline/table_002/cmd_files/cmd_3.txt'
-        CLI_CMD = 'pipeline PIPELINE0 table table_002_table update {} none none\n'.format(CMD_FILE)
-        s.send(CLI_CMD.encode('utf-8'))
-        sleep(0.1)
-        msg = s.recv(BUFFER_SIZE)
-        response = msg.decode()
-        # print('Rxd: ' + response)
-        if "pipeline>" not in response:
-            s.close()
-            self.verify(0, "CLI response error")
-        filters = "tcp"
-        in_pcap_file = 'pipeline/table_002/pcap_files/in_3.txt'
-        out_pcap_file = 'pipeline/table_002/pcap_files/out_3.txt'
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        # delete one rule scenario
-        CMD_FILE = '/tmp/pipeline/table_002/cmd_files/cmd_4_1.txt'
-        CLI_CMD = 'pipeline PIPELINE0 table table_002_table update none {} none\n'.format(CMD_FILE)
-        s.send(CLI_CMD.encode('utf-8'))
-        sleep(0.1)
-        msg = s.recv(BUFFER_SIZE)
-        response = msg.decode()
-        # print('Rxd: ' + response)
-        if "pipeline>" not in response:
-            s.close()
-            self.verify(0, "CLI response error")
-        filters = "tcp"
-        in_pcap_file = 'pipeline/table_002/pcap_files/in_4_1.txt'
-        out_pcap_file = 'pipeline/table_002/pcap_files/out_4_1.txt'
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        # delete all rules scenario
-        CMD_FILE = '/tmp/pipeline/table_002/cmd_files/cmd_4_2.txt'
-        CLI_CMD = 'pipeline PIPELINE0 table table_002_table update none {} none\n'.format(CMD_FILE)
-        s.send(CLI_CMD.encode('utf-8'))
-        sleep(0.1)
-        msg = s.recv(BUFFER_SIZE)
-        response = msg.decode()
-        # print('Rxd: ' + response)
-        if "pipeline>" not in response:
-            s.close()
-            self.verify(0, "CLI response error")
-        filters = "tcp"
-        in_pcap_file = 'pipeline/table_002/pcap_files/in_4_2.txt'
-        out_pcap_file = 'pipeline/table_002/pcap_files/out_4_2.txt'
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        # action update scenario (restore one of the previously deleted rules and check the update)
-        CMD_FILE = '/tmp/pipeline/table_002/cmd_files/cmd_5_1.txt'
-        CLI_CMD = 'pipeline PIPELINE0 table table_002_table update {} none none\n'.format(CMD_FILE)
-        s.send(CLI_CMD.encode('utf-8'))
-        sleep(0.1)
-        msg = s.recv(BUFFER_SIZE)
-        response = msg.decode()
-        print('Rxd: ' + response)
-        if "pipeline>" not in response:
-            s.close()
-            self.verify(0, "CLI response error")
-        filters = "tcp"
-        in_pcap_file = 'pipeline/table_002/pcap_files/in_5_1.txt'
-        out_pcap_file = 'pipeline/table_002/pcap_files/out_5_1.txt'
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-
-        # action update scenario (change the action of restored rule and check the update)
-        CMD_FILE = '/tmp/pipeline/table_002/cmd_files/cmd_5_2.txt'
-        CLI_CMD = 'pipeline PIPELINE0 table table_002_table update {} none none\n'.format(CMD_FILE)
-        s.send(CLI_CMD.encode('utf-8'))
-        sleep(0.1)
-        msg = s.recv(BUFFER_SIZE)
-        response = msg.decode()
-        print('Rxd: ' + response)
-        if "pipeline>" not in response:
-            s.close()
-            self.verify(0, "CLI response error")
-        filters = "tcp"
-        in_pcap_file = 'pipeline/table_002/pcap_files/in_5_1.txt'
-        out_pcap_file = 'pipeline/table_002/pcap_files/out_5_1.txt'
-        sniff_pkts = self.send_and_sniff_pkts(0, 1, in_pcap_file, out_pcap_file, filters)
-        sniff_pkts = self.send_and_sniff_pkts(1, 0, in_pcap_file, out_pcap_file, filters)
-        sniff_pkts = self.send_and_sniff_pkts(2, 3, in_pcap_file, out_pcap_file, filters)
-        sniff_pkts = self.send_and_sniff_pkts(3, 2, in_pcap_file, out_pcap_file, filters)
-
-        # deafult action scenario [empty table]
-        '''
-        Empty table => Lookup MISS with default action executed
-        '''
-        CMD_FILE = '/tmp/pipeline/table_002/cmd_files/cmd_6_1.txt'  # delete the previously added rule
-        CLI_CMD = 'pipeline PIPELINE0 table table_002_table update none {} none\n'.format(CMD_FILE)
-        s.send(CLI_CMD.encode('utf-8'))
-        sleep(0.1)
-        msg = s.recv(BUFFER_SIZE)
-        response = msg.decode()
-        print('Rxd: ' + response)
-        if "pipeline>" not in response:
-            s.close()
-            self.verify(0, "CLI response error")
-        filters = "tcp"
-        in_pcap_file = 'pipeline/table_002/pcap_files/in_6_1.txt'
-        out_pcap_file = 'pipeline/table_002/pcap_files/out_6_1.txt'
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        # deafult action scenario [table with one rule]
-        '''
-        Add key A => Lookup HIT for the right packet with the specific key associated action executed
-                     Lookup MISS for any other packets with default action executed
-        '''
-        CMD_FILE = '/tmp/pipeline/table_002/cmd_files/cmd_6_2.txt'  # add a new rule
-        CLI_CMD = 'pipeline PIPELINE0 table table_002_table update {} none none\n'.format(CMD_FILE)
-        s.send(CLI_CMD.encode('utf-8'))
-        sleep(0.1)
-        msg = s.recv(BUFFER_SIZE)
-        response = msg.decode()
-        print('Rxd: ' + response)
-        if "pipeline>" not in response:
-            s.close()
-            self.verify(0, "CLI response error")
-        filters = "tcp"
-        in_pcap_file = 'pipeline/table_002/pcap_files/in_6_2.txt'
-        out_pcap_file = 'pipeline/table_002/pcap_files/out_6_2.txt'
-        sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters)
-        sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters)
-        sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters)
-        sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters)
-
-        s.close()
-        sleep(1)
-        cmd = "^C"
-        self.dut.send_expect(cmd, "# ", 20)
+        out_pcap_1 = 'pipeline/met_001/pcap_files/out_41.txt'
+        out_pcap_2 = 'pipeline/met_001/pcap_files/out_42.txt'
+        out_pcap_3 = 'pipeline/met_001/pcap_files/out_43.txt'
+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters, 1000)
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_met_002(self):
+
+        cli_file = '/tmp/pipeline/met_002/met_002.cli'
+        self.run_dpdk_app(cli_file)
+
+        in_pcap = ['pipeline/met_002/pcap_files/in_1.txt']
+        out_pcap_1 = 'pipeline/met_002/pcap_files/out_11.txt'
+        out_pcap_2 = 'pipeline/met_002/pcap_files/out_12.txt'
+        out_pcap_3 = 'pipeline/met_002/pcap_files/out_13.txt'
+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]
+        filters = ["tcp"] * 3
+        tx_port = [0]
+        rx_port = [0, 1, 2]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters, 1000)
+
+        out_pcap_1 = 'pipeline/met_002/pcap_files/out_21.txt'
+        out_pcap_2 = 'pipeline/met_002/pcap_files/out_22.txt'
+        out_pcap_3 = 'pipeline/met_002/pcap_files/out_23.txt'
+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters, 10)
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_met_003(self):
+
+        cli_file = '/tmp/pipeline/met_003/met_003.cli'
+        self.run_dpdk_app(cli_file)
+
+        in_pcap = ['pipeline/met_003/pcap_files/in_1.txt']
+        out_pcap_1 = 'pipeline/met_003/pcap_files/out_11.txt'
+        out_pcap_2 = 'pipeline/met_003/pcap_files/out_12.txt'
+        out_pcap_3 = 'pipeline/met_003/pcap_files/out_13.txt'
+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]
+        filters = ["tcp"] * 3
+        tx_port = [0]
+        rx_port = [0, 1, 2]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters, 1000)
+
+        out_pcap_1 = 'pipeline/met_003/pcap_files/out_21.txt'
+        out_pcap_2 = 'pipeline/met_003/pcap_files/out_22.txt'
+        out_pcap_3 = 'pipeline/met_003/pcap_files/out_23.txt'
+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters, 10)
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_met_004(self):
+
+        cli_file = '/tmp/pipeline/met_004/met_004.cli'
+        self.run_dpdk_app(cli_file)
+
+        in_pcap = ['pipeline/met_004/pcap_files/in_1.txt']
+        out_pcap_1 = 'pipeline/met_004/pcap_files/out_11.txt'
+        out_pcap_2 = 'pipeline/met_004/pcap_files/out_12.txt'
+        out_pcap_3 = 'pipeline/met_004/pcap_files/out_13.txt'
+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]
+        filters = ["tcp"] * 3
+        tx_port = [0]
+        rx_port = [0, 1, 2]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters, 1000)
+
+        out_pcap_1 = 'pipeline/met_004/pcap_files/out_21.txt'
+        out_pcap_2 = 'pipeline/met_004/pcap_files/out_22.txt'
+        out_pcap_3 = 'pipeline/met_004/pcap_files/out_23.txt'
+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters, 10)
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_met_005(self):
+
+        cli_file = '/tmp/pipeline/met_005/met_005.cli'
+        self.run_dpdk_app(cli_file)
+
+        in_pcap = ['pipeline/met_005/pcap_files/in_1.txt']
+        out_pcap_1 = 'pipeline/met_005/pcap_files/out_11.txt'
+        out_pcap_2 = 'pipeline/met_005/pcap_files/out_12.txt'
+        out_pcap_3 = 'pipeline/met_005/pcap_files/out_13.txt'
+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]
+        filters = ["tcp"] * 3
+        tx_port = [0]
+        rx_port = [0, 1, 2]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters, 1000)
+
+        out_pcap_1 = 'pipeline/met_005/pcap_files/out_21.txt'
+        out_pcap_2 = 'pipeline/met_005/pcap_files/out_22.txt'
+        out_pcap_3 = 'pipeline/met_005/pcap_files/out_23.txt'
+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters, 10)
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_met_006(self):
+
+        cli_file = '/tmp/pipeline/met_006/met_006.cli'
+        self.run_dpdk_app(cli_file)
+
+        in_pcap = ['pipeline/met_006/pcap_files/in_1.txt']
+        out_pcap_1 = 'pipeline/met_006/pcap_files/out_11.txt'
+        out_pcap_2 = 'pipeline/met_006/pcap_files/out_12.txt'
+        out_pcap_3 = 'pipeline/met_006/pcap_files/out_13.txt'
+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]
+        filters = ["tcp"] * 3
+        tx_port = [0]
+        rx_port = [0, 1, 2]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters, 1000)
+
+        out_pcap_1 = 'pipeline/met_006/pcap_files/out_21.txt'
+        out_pcap_2 = 'pipeline/met_006/pcap_files/out_22.txt'
+        out_pcap_3 = 'pipeline/met_006/pcap_files/out_23.txt'
+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters, 10)
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_met_007(self):
+
+        cli_file = '/tmp/pipeline/met_007/met_007.cli'
+        self.run_dpdk_app(cli_file)
+
+        in_pcap = ['pipeline/met_007/pcap_files/in_1.txt']
+        out_pcap_1 = 'pipeline/met_007/pcap_files/out_11.txt'
+        out_pcap_2 = 'pipeline/met_007/pcap_files/out_12.txt'
+        out_pcap_3 = 'pipeline/met_007/pcap_files/out_13.txt'
+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]
+        filters = ["tcp"] * 3
+        tx_port = [0]
+        rx_port = [0, 1, 2]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters, 1000)
+
+        out_pcap_1 = 'pipeline/met_007/pcap_files/out_21.txt'
+        out_pcap_2 = 'pipeline/met_007/pcap_files/out_22.txt'
+        out_pcap_3 = 'pipeline/met_007/pcap_files/out_23.txt'
+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters, 10)
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_met_008(self):
+
+        cli_file = '/tmp/pipeline/met_008/met_008.cli'
+        self.run_dpdk_app(cli_file)
+
+        in_pcap = ['pipeline/met_008/pcap_files/in_1.txt']
+        out_pcap_1 = 'pipeline/met_008/pcap_files/out_11.txt'
+        out_pcap_2 = 'pipeline/met_008/pcap_files/out_12.txt'
+        out_pcap_3 = 'pipeline/met_008/pcap_files/out_13.txt'
+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]
+        filters = ["tcp"] * 3
+        tx_port = [0]
+        rx_port = [0, 1, 2]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters, 1000)
+
+        out_pcap_1 = 'pipeline/met_008/pcap_files/out_21.txt'
+        out_pcap_2 = 'pipeline/met_008/pcap_files/out_22.txt'
+        out_pcap_3 = 'pipeline/met_008/pcap_files/out_23.txt'
+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters, 10)
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_met_009(self):
+
+        cli_file = '/tmp/pipeline/met_009/met_009.cli'
+        self.run_dpdk_app(cli_file)
+
+        in_pcap = ['pipeline/met_009/pcap_files/in_1.txt']
+        out_pcap_1 = 'pipeline/met_009/pcap_files/out_11.txt'
+        out_pcap_2 = 'pipeline/met_009/pcap_files/out_12.txt'
+        out_pcap_3 = 'pipeline/met_009/pcap_files/out_13.txt'
+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]
+        filters = ["tcp"] * 3
+        tx_port = [0]
+        rx_port = [0, 1, 2]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters, 1000)
+
+        out_pcap_1 = 'pipeline/met_009/pcap_files/out_21.txt'
+        out_pcap_2 = 'pipeline/met_009/pcap_files/out_22.txt'
+        out_pcap_3 = 'pipeline/met_009/pcap_files/out_23.txt'
+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters, 10)
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_met_010(self):
+
+        cli_file = '/tmp/pipeline/met_010/met_010.cli'
+        self.run_dpdk_app(cli_file)
+
+        in_pcap = ['pipeline/met_010/pcap_files/in_1.txt']
+        out_pcap_1 = 'pipeline/met_010/pcap_files/out_11.txt'
+        out_pcap_2 = 'pipeline/met_010/pcap_files/out_12.txt'
+        out_pcap_3 = 'pipeline/met_010/pcap_files/out_13.txt'
+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]
+        filters = ["tcp"] * 3
+        tx_port = [0]
+        rx_port = [0, 1, 2]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters, 1000)
+
+        out_pcap_1 = 'pipeline/met_010/pcap_files/out_21.txt'
+        out_pcap_2 = 'pipeline/met_010/pcap_files/out_22.txt'
+        out_pcap_3 = 'pipeline/met_010/pcap_files/out_23.txt'
+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters, 10)
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_met_011(self):
+
+        cli_file = '/tmp/pipeline/met_011/met_011.cli'
+        self.run_dpdk_app(cli_file)
+
+        in_pcap = ['pipeline/met_011/pcap_files/in_1.txt']
+        out_pcap_1 = 'pipeline/met_011/pcap_files/out_11.txt'
+        out_pcap_2 = 'pipeline/met_011/pcap_files/out_12.txt'
+        out_pcap_3 = 'pipeline/met_011/pcap_files/out_13.txt'
+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]
+        filters = ["tcp"] * 3
+        tx_port = [0]
+        rx_port = [0, 1, 2]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters, 1000)
+
+        out_pcap_1 = 'pipeline/met_011/pcap_files/out_21.txt'
+        out_pcap_2 = 'pipeline/met_011/pcap_files/out_22.txt'
+        out_pcap_3 = 'pipeline/met_011/pcap_files/out_23.txt'
+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters, 10)
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_met_012(self):
+
+        cli_file = '/tmp/pipeline/met_012/met_012.cli'
+        self.run_dpdk_app(cli_file)
+
+        in_pcap = ['pipeline/met_012/pcap_files/in_1.txt']
+        out_pcap_1 = 'pipeline/met_012/pcap_files/out_11.txt'
+        out_pcap_2 = 'pipeline/met_012/pcap_files/out_12.txt'
+        out_pcap_3 = 'pipeline/met_012/pcap_files/out_13.txt'
+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]
+        filters = ["tcp"] * 3
+        tx_port = [0]
+        rx_port = [0, 1, 2]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters, 1000)
+
+        out_pcap_1 = 'pipeline/met_012/pcap_files/out_21.txt'
+        out_pcap_2 = 'pipeline/met_012/pcap_files/out_22.txt'
+        out_pcap_3 = 'pipeline/met_012/pcap_files/out_23.txt'
+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters, 10)
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_met_013(self):
+
+        cli_file = '/tmp/pipeline/met_013/met_013.cli'
+        self.run_dpdk_app(cli_file)
+
+        in_pcap = ['pipeline/met_013/pcap_files/in_1.txt']
+        out_pcap_1 = 'pipeline/met_013/pcap_files/out_11.txt'
+        out_pcap_2 = 'pipeline/met_013/pcap_files/out_12.txt'
+        out_pcap_3 = 'pipeline/met_013/pcap_files/out_13.txt'
+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]
+        filters = ["tcp"] * 3
+        tx_port = [0]
+        rx_port = [0, 1, 2]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters, 1000)
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_met_014(self):
+
+        cli_file = '/tmp/pipeline/met_014/met_014.cli'
+        self.run_dpdk_app(cli_file)
+
+        in_pcap = ['pipeline/met_014/pcap_files/in_1.txt']
+        out_pcap_1 = 'pipeline/met_014/pcap_files/out_11.txt'
+        out_pcap_2 = 'pipeline/met_014/pcap_files/out_12.txt'
+        out_pcap_3 = 'pipeline/met_014/pcap_files/out_13.txt'
+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]
+        filters = ["tcp"] * 3
+        tx_port = [0]
+        rx_port = [0, 1, 2]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters, 1000)
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_met_015(self):
+
+        cli_file = '/tmp/pipeline/met_015/met_015.cli'
+        self.run_dpdk_app(cli_file)
+
+        in_pcap = ['pipeline/met_015/pcap_files/in_1.txt']
+        out_pcap_1 = 'pipeline/met_015/pcap_files/out_11.txt'
+        out_pcap_2 = 'pipeline/met_015/pcap_files/out_12.txt'
+        out_pcap_3 = 'pipeline/met_015/pcap_files/out_13.txt'
+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]
+        filters = ["tcp"] * 3
+        tx_port = [0]
+        rx_port = [0, 1, 2]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters, 1000)
+        self.dut.send_expect("^C", "# ", 20)
+
+    '''
+    def test_tap_port_001(self):
+
+        cli_file = '/tmp/pipeline/tap_port_001/tap_port_001.cli'
+        self.run_dpdk_app(cli_file)
+
+        in_pcap = 'pipeline/tap_port_001/pcap_files/in_1.txt'
+        out_pcap = 'pipeline/tap_port_001/pcap_files/out_1.txt'
+        self.send_and_sniff_pkts(0, 0, in_pcap, out_pcap, "udp")
+        self.dut.send_expect("^C", "# ", 20)
+    '''
+
+    def test_ring_port_001(self):
+
+        cli_file = '/tmp/pipeline/ring_port_001/ring_port_001.cli'
+        self.run_dpdk_app(cli_file)
+
+        in_pcap = 'pipeline/ring_port_001/pcap_files/in_1.txt'
+        out_pcap = 'pipeline/ring_port_001/pcap_files/out_1.txt'
+        self.send_and_sniff_pkts(0, 1, in_pcap, out_pcap, "udp")
+        self.dut.send_expect("^C", "# ", 20)
+
+    def test_tencent_001(self):
+
+        cli_file = '/tmp/pipeline/tencent_001/tencent_001.cli'
+        self.run_dpdk_app(cli_file)
+        base_dir = 'pipeline/tencent_001/pcap_files/'
+
+        # TCP Packets
+        in_pcap = ['in_1.txt']
+        in_pcap = [base_dir + s for s in in_pcap]
+        out_pcap = ['out_11.txt', 'out_12.txt', 'out_13.txt', 'out_14.txt']
+        out_pcap = [base_dir + s for s in out_pcap]
+        filters = ["tcp"] * 4
+        tx_port = [0]
+        rx_port = [0, 1, 2, 3]
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+
+        # UDP Packets
+        in_pcap = ['in_2.txt']
+        in_pcap = [base_dir + s for s in in_pcap]
+        out_pcap = ['out_21.txt', 'out_22.txt', 'out_23.txt', 'out_24.txt']
+        out_pcap = [base_dir + s for s in out_pcap]
+        filters = ["udp port 200"] * 4
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+
+        # ICMP Packets
+        in_pcap = ['in_3.txt']
+        in_pcap = [base_dir + s for s in in_pcap]
+        out_pcap = ['out_31.txt', 'out_32.txt', 'out_33.txt', 'out_34.txt']
+        out_pcap = [base_dir + s for s in out_pcap]
+        filters = ["icmp"] * 4
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+
+        # IGMP Packets
+        in_pcap = ['in_4.txt']
+        in_pcap = [base_dir + s for s in in_pcap]
+        out_pcap = ['out_41.txt', 'out_42.txt', 'out_43.txt', 'out_44.txt']
+        out_pcap = [base_dir + s for s in out_pcap]
+        filters = ["igmp"] * 4
+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)
+        self.dut.send_expect("^C", "# ", 20)
 
     def tear_down(self):
         """
-- 
1.8.3.1


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

* Re: [dts] [PATCH 0/2] add pipeline new features test scenarios
  2021-04-21 10:17 [dts] [PATCH 0/2] add pipeline new features test scenarios Churchill Khangar
  2021-04-21 10:17 ` [dts] [PATCH 1/2] dep: add pipeline test suite new feature dependencies Churchill Khangar
  2021-04-21 10:17 ` [dts] [PATCH 2/2] tests/pipeline: add new features test coverage Churchill Khangar
@ 2021-04-29  8:56 ` Tu, Lijuan
  2 siblings, 0 replies; 4+ messages in thread
From: Tu, Lijuan @ 2021-04-29  8:56 UTC (permalink / raw)
  To: Khangar, Churchill, dts
  Cc: Dumitrescu, Cristian, P, Venkata Suresh Kumar, Khangar,
	Churchill, Jangra, Yogesh



> -----Original Message-----
> From: dts <dts-bounces@dpdk.org> On Behalf Of Churchill Khangar
> Sent: 2021年4月21日 18:17
> To: dts@dpdk.org
> Cc: Dumitrescu, Cristian <cristian.dumitrescu@intel.com>; P, Venkata Suresh
> Kumar <venkata.suresh.kumar.p@intel.com>; Khangar, Churchill
> <churchill.khangar@intel.com>; Jangra, Yogesh <yogesh.jangra@intel.com>
> Subject: [dts] [PATCH 0/2] add pipeline new features test scenarios
> 
> This patch series has the changes to support test suite for pipeline application
> new features. Also changes to improve existing test cases logic to cover
> different operand lengths, endianness issues and additional test cases for
> existing features.
> 
> Following are the details of new features and existing test cases enhancements
>      1. Framework enhancements to improve overall execution time.
>      2. RING I/O port type
>      3. WCM table match
>      4. Register Array
>      5. trTCM
>      6. Enhancement to existing test cases to verify
>           a. Endianness issue
>           b. Operands with variable size values
>      7. Additional tests to provide more coverage for table match and actions
>      8. Additional tests to cover customer common use cases
> 
> Patch details
>      1. Patch1 - pipeline dependencies archive and compressed
>         file pipeline.tar.gz modified for all new features.
>      2. Patch2 - add new features test coverage.
> 
> Churchill Khangar (2):
>   dep: add pipeline test suite new feature dependencies
>   tests/pipeline: add new features test coverage
> 
>  dep/pipeline.tar.gz         |  Bin 49082 -> 74543 bytes
>  tests/TestSuite_pipeline.py | 8416 +++++++++++++++++++------------------------
>  2 files changed, 3661 insertions(+), 4755 deletions(-)
> 
> --
> 1.8.3.1

Applied the series, thanks


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

end of thread, other threads:[~2021-04-29  8:56 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-21 10:17 [dts] [PATCH 0/2] add pipeline new features test scenarios Churchill Khangar
2021-04-21 10:17 ` [dts] [PATCH 1/2] dep: add pipeline test suite new feature dependencies Churchill Khangar
2021-04-21 10:17 ` [dts] [PATCH 2/2] tests/pipeline: add new features test coverage Churchill Khangar
2021-04-29  8:56 ` [dts] [PATCH 0/2] add pipeline new features test scenarios Tu, Lijuan

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