From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id CF9FCA09D9; Wed, 11 Nov 2020 10:56:58 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 86778F64; Wed, 11 Nov 2020 10:56:57 +0100 (CET) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by dpdk.org (Postfix) with ESMTP id 0B556DED for ; Wed, 11 Nov 2020 10:56:54 +0100 (CET) IronPort-SDR: 0wYFnq77phdwI+xAmiJfGq4p8pehcdRNt6QhkBsbc3UUjz0+JZsE4FYMTVyuVwxCjZeV9j8Ohb YMkbnyjfFFWw== X-IronPort-AV: E=McAfee;i="6000,8403,9801"; a="149397452" X-IronPort-AV: E=Sophos;i="5.77,469,1596524400"; d="scan'208";a="149397452" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Nov 2020 01:56:49 -0800 IronPort-SDR: ow9ut8HyefDW4LKKYVEbF7rn4n+n89/lhdlPOS/B1dXmnpdCAFW3GgnLoH8zNnuBpteM1jup9c nZ22ebE1h34w== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.77,469,1596524400"; d="scan'208";a="398973656" Received: from unknown (HELO bdcdev09.localdomain) ([10.190.193.143]) by orsmga001.jf.intel.com with ESMTP; 11 Nov 2020 01:56:44 -0800 From: Churchill Khangar To: dts@dpdk.org Cc: cristian.dumitrescu@intel.com, venkata.suresh.kumar.p@intel.com, churchill.khangar@intel.com, yogesh.jangra@intel.com Date: Wed, 11 Nov 2020 04:54:53 -0500 Message-Id: <1605088493-42529-1-git-send-email-churchill.khangar@intel.com> X-Mailer: git-send-email 1.8.3.1 Subject: [dts] [PATCH] tests/pipeline: add pipeline suite X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org Sender: "dts" Add pipeline test cases Signed-off-by: Yogesh Jangra Signed-off-by: Churchill Khangar Tested-by: Venkata Suresh Kumar P --- conf/app_name.cfg | 10 +- dep/pipeline.tar.gz | Bin 0 -> 119666 bytes test_plans/pipeline_test_plan.rst | 122 + tests/TestSuite_pipeline.py | 5833 +++++++++++++++++++++++++++++++++++++ 4 files changed, 5957 insertions(+), 8 deletions(-) create mode 100644 dep/pipeline.tar.gz create mode 100644 test_plans/pipeline_test_plan.rst create mode 100644 tests/TestSuite_pipeline.py diff --git a/conf/app_name.cfg b/conf/app_name.cfg index e1d78d6..ff73bf8 100644 --- a/conf/app_name.cfg +++ b/conf/app_name.cfg @@ -43,6 +43,7 @@ l3fwd-thread=target/examples/dpdk-l3fwd-thread link_status_interrupt=target/examples/dpdk-link_status_interrupt ntb=target/examples/dpdk-ntb packet_ordering=target/examples/dpdk-packet_ordering +pipeline=target/examples/dpdk-pipeline ptpclient=target/examples/dpdk-ptpclient qos_meter=target/examples/dpdk-qos_meter qos_sched=target/examples/dpdk-qos_sched @@ -62,14 +63,6 @@ hotplug_mp=target/examples/dpdk-hotplug_mp mp_server=target/examples/dpdk-mp_server simple_mp=target/examples/dpdk-simple_mp symmetric_mp=target/examples/dpdk-symmetric_mp -cmdline=target/examples/dpdk-cmdline -distributor=target/examples/dpdk-distributor -netmap_compat=target/examples/dpdk-netmap_compat -node=target/examples/dpdk-efd_node -server=target/examples/dpdk-efd_server -testpmd_vf=target/app/dpdk-testpmd-vf -vm_power_manager=target/examples/dpdk-vm_power_manager -guest_cli=target/examples/dpdk-guest_cli [makefile] pdump=target/app/dpdk-pdump proc-info=target/app/dpdk-procinfo @@ -108,6 +101,7 @@ l3fwd-thread=examples/performance-thread/l3fwd-thread/build/app/l3fwd-thread link_status_interrupt=examples/link_status_interrupt/build/app/link_status_interrupt ntb=examples/ntb/build/app/ntb_fwd packet_ordering=examples/packet_ordering/build/app/packet_ordering +pipeline=target/examples/dpdk-pipeline ptpclient=examples/ptpclient/build/app/ptpclient qos_meter=examples/qos_meter/build/app/qos_meter qos_sched=examples/qos_sched/build/app/qos_sched diff --git a/dep/pipeline.tar.gz b/dep/pipeline.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..dae46a130d9ff222e77d5a767ce91582b49a252e GIT binary patch literal 119666 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 Vc@{8u^7Z6@{<-=V(F_}e82~Gz5h(xw literal 0 HcmV?d00001 diff --git a/test_plans/pipeline_test_plan.rst b/test_plans/pipeline_test_plan.rst new file mode 100644 index 0000000..c492fd6 --- /dev/null +++ b/test_plans/pipeline_test_plan.rst @@ -0,0 +1,122 @@ +.. Copyright (c) <2020>, Intel Corporation + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + - Neither the name of Intel Corporation nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + OF THE POSSIBILITY OF SUCH DAMAGE. + +============================= +Pipeline Tests +============================= + +Description +=========== +The "examples/pipeline" application is the main DPDK Packet Framework +application. + +Prerequisites +============== +The DUT must have four 10G Ethernet ports connected to four ports on +Tester that are controlled by the Scapy packet generator:: + + dut_port_0 <---> tester_port_0 + dut_port_1 <---> tester_port_1 + dut_port_2 <---> tester_port_2 + dut_port_3 <---> tester_port_3 + +Assume four DUT 10G Ethernet ports' pci device id is as the following:: + + dut_port_0 : "0000:00:04.0" + dut_port_1 : "0000:00:05.0" + dut_port_2 : "0000:00:06.0" + dut_port_3 : "0000:00:07.0" + +Bind them to dpdk igb_uio driver:: + + ./usertools/dpdk-devbind.py -b igb_uio 0000:00:04.0 0000:00:05.0 0000:00:06.0 0000:00:07.0 + +Supporting Files +================ +All the supporting files for this test suite are maintained in a tar file named "pipeline.tar.gz" +present in the {DTS_SRC_DIR}/dep directory. + +Directory Structure of Each Test Case +===================================== +Within {DTS_SRC_DIR}/dep/pipeline.tar.gz, all files related to a particular test case are maintained +in a separate directory of which the directory structure is shown below: + + test_case_name [directory] + test_case_name.spec + test_case_name.cli + table.txt [applicable for test cases requiring it] + readme.txt + pcap_files [subdirectory] + in_x.txt [x: 1-4; depending on test case] + out_x.txt [x: 1-4; depending on test case] + +For an example, files related to mov_001 test case are maintained as shown below: + + mov_001 [directory] + mov_001.spec + mov_001.cli + readme.txt + pcap_files [subdirectory] + in_1.txt + out_1.txt + +Template of each Test Case +=========================== +1. Edit test_case_name/test_case_name.cli: + change pci device id of LINK0, LINK1, LINK2, LINK3 to pci device id of + dut_port_0, dut_port_1, dut_port_2, dut_port_3 + +2. Run pipeline app as the following:: + + x86_64-native-linuxapp-gcc/examples/dpdk-pipeline -c 0x3 -n 4 -- -s /tmp/pipeline/test_case_name/test_case_name.cli + +3. Send packets at tester side using scapy. The packets to be sent are maintained in pipeline/test_case_name/pcap_files/in_x.txt + +4. Verify the packets received using tcpdump. The expected packets are maintained in pipeline/test_case_name/pcap_files/out_x.txt + +5. Test case is considered as successful if the received packets and the expected packets match for all the port combinations used. + +Example Test Case: test_mov_001 +========================================= +1. Edit mov_001/mov_001.cli: + change pci device id of LINK0, LINK1, LINK2, LINK3 to pci device id of + dut_port_0, dut_port_1, dut_port_2, dut_port_3 + +2. Run pipeline app as the following:: + + x86_64-native-linuxapp-gcc/examples/dpdk-pipeline -c 0x3 -n 4 -- -s /tmp/pipeline/mov_001/mov_001.cli + +3. Send packets at tester side using scapy. The packets to be sent are maintained in pipeline/mov_001/pcap_files/in_1.txt + +4. Verify the packets received using tcpdump. The expected packets are maintained in pipeline/mov_001/pcap_files/out_1.txt + +5. test_mov_001 is considered as successful if the received packets and the expected packets match for all 4 port combinations used. diff --git a/tests/TestSuite_pipeline.py b/tests/TestSuite_pipeline.py new file mode 100644 index 0000000..9b13575 --- /dev/null +++ b/tests/TestSuite_pipeline.py @@ -0,0 +1,5833 @@ +# BSD LICENSE +# +# Copyright(c) 2020 Intel Corporation. All rights reserved. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Intel Corporation nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import utils +import re +import time + +from settings import HEADER_SIZE +from test_case import TestCase +from pmd_output import PmdOutput +from settings import DRIVERS +from crb import Crb + +from virt_dut import VirtDut +from project_dpdk import DPDKdut +from dut import Dut +from packet import Packet + +import os +import random +from exception import VerifyFailure +import scapy.layers.inet +from scapy.utils import rdpcap + +from time import sleep +# from scapy.all import conf +from scapy.utils import wrpcap, rdpcap, hexstr +from scapy.layers.inet import Ether, IP, TCP, UDP, ICMP +from scapy.layers.l2 import Dot1Q, ARP, GRE +from scapy.layers.sctp import SCTP, SCTPChunkData +from scapy.route import * +from scapy.packet import bind_layers, Raw +from scapy.arch import get_if_hwaddr +from scapy.sendrecv import sniff +from scapy.sendrecv import sendp + +import itertools + +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/' + + +class TestPipeline(TestCase): + + def pair_hex_digits(self, iterable, count, fillvalue=None): + args = [iter(iterable)] * count + return itertools.zip_longest(*args, fillvalue=fillvalue) + + def convert_tcpdump_to_text2pcap(self, in_filename, out_filename): + with open(in_filename) as input, open(out_filename, 'w') as output: + output.write('# SPDX-License-Identifier: BSD-3-Clause\n') + output.write('# Copyright(c) 2020 Intel Corporation\n') + output.write('#\n\n') + output.write('# text to pcap: text2pcap packet.txt packet.pcap\n') + output.write('# pcap to text: tcpdump -r packet.pcap -xx\n\n') + + i = 0 + flag_line_completed = 0 + for line in input: + time = TIMESTAMP.match(line) + if time: + # print("time match") + if flag_line_completed == 1: + flag_line_completed = 0 + output.write('\n# Packet {}\n'.format(i)) + else: + output.write('# Packet {}\n'.format(i)) + i += 1 + continue + payload = PAYLOAD.match(line) + if payload: + # print("payload match") + address = payload.group(1) + hex_data = payload.group(2).replace(' ', '') + hex_data = ' '.join(''.join(part) for part in self.pair_hex_digits(hex_data, 2, ' ')) + # print('{} {}'.format(address, hex_data)) + # print(len(hex_data)) + if (len(hex_data) < 47): + output.write('{:0>6} {:<47}\n'.format(address, hex_data)) + output.write('\n') + flag_line_completed = 0 + else: + output.write('{:0>6} {:<47}\n'.format(address, hex_data)) + flag_line_completed = 1 + + if flag_line_completed == 1: + output.write('\n') + + def get_flow_direction_param_of_tcpdump(self): + """ + get flow dirction param depend on tcpdump version + """ + param = "" + direct_param = r"(\s+)\[ (\S+) in\|out\|inout \]" + out = self.tester.send_expect('tcpdump -h', '# ') + for line in out.split('\n'): + m = re.match(direct_param, line) + if m: + opt = re.search("-Q", m.group(2)) + if opt: + param = "-Q" + " in" + else: + opt = re.search("-P", m.group(2)) + if opt: + param = "-P" + " in" + if len(param) == 0: + self.logger.info("tcpdump not support direction choice!!!") + return param + + def tcpdump_start_sniff(self, interface, filters=""): + """ + Starts tcpdump in the background to sniff packets that received by interface. + """ + command = 'rm -f /tmp/tcpdump_{0}.pcap'.format(interface) + self.tester.send_expect(command, '#') + command = 'tcpdump -nn -e {0} -w /tmp/tcpdump_{1}.pcap -i {1} {2} 2>/tmp/tcpdump_{1}.out &'\ + .format(self.param_flow_dir, interface, filters) + self.tester.send_expect(command, '# ') + + def tcpdump_stop_sniff(self): + """ + Stops the tcpdump process running in the background. + """ + self.tester.send_expect('killall tcpdump', '# ') + # For the [pid]+ Done tcpdump... message after killing the process + sleep(1) + self.tester.send_expect('echo "Cleaning buffer"', '# ') + sleep(1) + + def write_pcap_file(self, pcap_file, pkts): + try: + wrpcap(pcap_file, pkts) + except: + raise Exception("write pcap error") + + def read_pcap_file(self, pcap_file): + pcap_pkts = [] + try: + pcap_pkts = rdpcap(pcap_file) + except: + raise Exception("write pcap error") + + return pcap_pkts + + def send_and_sniff_pkts(self, from_port, to_port, in_pcap_file, out_pcap_file, filters=""): + """ + Sent pkts that read from the pcap_file. + Return the sniff pkts. + """ + tx_port = self.tester.get_local_port(self.dut_ports[from_port]) + rx_port = self.tester.get_local_port(self.dut_ports[to_port]) + + tx_interface = self.tester.get_interface(tx_port) + rx_interface = self.tester.get_interface(rx_port) + + self.tester.send_expect('rm -f /tmp/*.txt /tmp/*.pcap /tmp/*.out', '# ') + self.tcpdump_start_sniff(rx_interface, filters) + + # 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() + self.tcpdump_stop_sniff() + self.tester.send_expect( + 'tcpdump -n -r /tmp/tcpdump_{}.pcap -xx > /tmp/packet_rx.txt'.format(rx_interface), '# ') + 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: + self.dut.send_expect('^C', '# ') + self.verify("are identical" in out, "Output pcap files mismatch error") + + def setup_env(self, port_nums, driver): + """ + This is to set up vf environment. + The pf is bound to dpdk driver. + """ + self.dut.send_expect("modprobe vfio-pci", "# ") + if driver == 'default': + for port_id in self.dut_ports: + port = self.dut.ports_info[port_id]['port'] + port.bind_driver() + # one PF generate one VF + for port_num in range(port_nums): + self.dut.generate_sriov_vfs_by_port(self.dut_ports[port_num], 1, driver) + self.sriov_vfs_port.append(self.dut.ports_info[self.dut_ports[port_num]]['vfs_port']) + if driver == 'default': + self.dut.send_expect("ip link set %s vf 0 mac %s" % (self.pf0_interface, self.vf0_mac), "# ", 3) + self.dut.send_expect("ip link set %s vf 0 mac %s" % (self.pf1_interface, self.vf1_mac), "# ", 3) + self.dut.send_expect("ip link set %s vf 0 mac %s" % (self.pf2_interface, self.vf2_mac), "# ", 3) + self.dut.send_expect("ip link set %s vf 0 mac %s" % (self.pf3_interface, self.vf3_mac), "# ", 3) + self.dut.send_expect("ip link set %s vf 0 spoofchk off" % self.pf0_interface, "# ", 3) + self.dut.send_expect("ip link set %s vf 0 spoofchk off" % self.pf1_interface, "# ", 3) + self.dut.send_expect("ip link set %s vf 0 spoofchk off" % self.pf2_interface, "# ", 3) + self.dut.send_expect("ip link set %s vf 0 spoofchk off" % self.pf3_interface, "# ", 3) + + try: + for port_num in range(port_nums): + for port in self.sriov_vfs_port[port_num]: + port.bind_driver(driver="vfio-pci") + except Exception as e: + self.destroy_env(port_nums, driver) + raise Exception(e) + + def destroy_env(self, port_nums, driver): + """ + This is to stop testpmd and destroy vf environment. + """ + cmd = "^C" + self.session_secondary.send_expect(cmd, "# ", 20) + time.sleep(5) + if driver == self.drivername: + self.dut.send_expect("quit", "# ") + time.sleep(5) + for port_num in range(port_nums): + self.dut.destroy_sriov_vfs_by_port(self.dut_ports[port_num]) + + def set_up_all(self): + """ + Run at the start of each test suite. + """ + self.dut_ports = self.dut.get_ports() + self.port_nums = 4 + self.verify(len(self.dut_ports) >= self.port_nums, + "Insufficient ports for speed testing") + + self.dut_p0_pci = self.dut.get_port_pci(self.dut_ports[0]) + self.dut_p1_pci = self.dut.get_port_pci(self.dut_ports[1]) + self.dut_p2_pci = self.dut.get_port_pci(self.dut_ports[2]) + self.dut_p3_pci = self.dut.get_port_pci(self.dut_ports[3]) + + self.dut_p0_mac = self.dut.get_mac_address(self.dut_ports[0]) + self.dut_p1_mac = self.dut.get_mac_address(self.dut_ports[1]) + self.dut_p2_mac = self.dut.get_mac_address(self.dut_ports[2]) + self.dut_p3_mac = self.dut.get_mac_address(self.dut_ports[3]) + + self.pf0_interface = self.dut.ports_info[self.dut_ports[0]]['intf'] + self.pf1_interface = self.dut.ports_info[self.dut_ports[1]]['intf'] + self.pf2_interface = self.dut.ports_info[self.dut_ports[2]]['intf'] + self.pf3_interface = self.dut.ports_info[self.dut_ports[3]]['intf'] + + self.vf0_mac = "00:11:22:33:44:55" + self.vf1_mac = "00:11:22:33:44:56" + self.vf2_mac = "00:11:22:33:44:57" + self.vf3_mac = "00:11:22:33:44:58" + + self.sriov_vfs_port = [] + self.session_secondary = self.dut.new_session() + + out = self.dut.build_dpdk_apps("./examples/pipeline") + self.verify("Error" not in out, "Compilation error") + self.app_pipeline_path = self.dut.apps_name['pipeline'] + 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' + self.tester.send_expect('rm -rf /tmp/pipeline', '# ') + self.tester.send_expect('tar -zxf {} --directory /tmp'.format(P4_PIPILINE_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) + self.session_secondary.copy_file_to('dep/pipeline.tar.gz', '/tmp/') + self.dut.send_expect('tar -zxf /tmp/pipeline.tar.gz --directory /tmp', "# ", 20) + + def set_up(self): + """ + Run before each test case. + """ + 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + # 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_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' + + 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + # 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_extract_emit_002(self): + + cli_file = '/tmp/pipeline/extract_emit_002/extract_emit_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_extract_emit_003(self): + + cli_file = '/tmp/pipeline/extract_emit_003/extract_emit_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_extract_emit_004(self): + + cli_file = '/tmp/pipeline/extract_emit_004/extract_emit_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_extract_emit_005(self): + + cli_file = '/tmp/pipeline/extract_emit_005/extract_emit_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_extract_emit_006(self): + + cli_file = '/tmp/pipeline/extract_emit_006/extract_emit_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_extract_emit_007(self): + + cli_file = '/tmp/pipeline/extract_emit_007/extract_emit_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_extract_emit_008(self): + + cli_file = '/tmp/pipeline/extract_emit_008/extract_emit_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_extract_emit_009(self): + + cli_file = '/tmp/pipeline/extract_emit_009/extract_emit_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_and_001(self): + + cli_file = '/tmp/pipeline/and_001/and_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_and_002(self): + + cli_file = '/tmp/pipeline/and_002/and_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_and_003(self): + + cli_file = '/tmp/pipeline/and_003/and_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_and_004(self): + + cli_file = '/tmp/pipeline/and_004/and_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_and_005(self): + + cli_file = '/tmp/pipeline/and_005/and_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_and_006(self): + + cli_file = '/tmp/pipeline/and_006/and_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_and_007(self): + + cli_file = '/tmp/pipeline/and_007/and_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_and_008(self): + + cli_file = '/tmp/pipeline/and_008/and_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_or_001(self): + + cli_file = '/tmp/pipeline/or_001/or_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_or_002(self): + + cli_file = '/tmp/pipeline/or_002/or_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_or_003(self): + + cli_file = '/tmp/pipeline/or_003/or_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_or_004(self): + + cli_file = '/tmp/pipeline/or_004/or_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_or_005(self): + + cli_file = '/tmp/pipeline/or_005/or_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_or_006(self): + + cli_file = '/tmp/pipeline/or_006/or_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_or_007(self): + + cli_file = '/tmp/pipeline/or_007/or_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_or_008(self): + + cli_file = '/tmp/pipeline/or_008/or_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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, 3, 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_xor_001(self): + + cli_file = '/tmp/pipeline/xor_001/xor_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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, 3, in_pcap_file, out_pcap_file, filters) + + # rule 3 test + sniff_pkts = self.send_and_sniff_pkts(3, 2, in_pcap_file, out_pcap_file, filters) + + sleep(1) + cmd = "^C" + self.dut.send_expect(cmd, "# ", 20) + + def test_xor_002(self): + + cli_file = '/tmp/pipeline/xor_002/xor_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_xor_003(self): + + cli_file = '/tmp/pipeline/xor_003/xor_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_xor_004(self): + + cli_file = '/tmp/pipeline/xor_004/xor_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_xor_005(self): + + cli_file = '/tmp/pipeline/xor_005/xor_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_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/xor_006/xor_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + in_pcap_file = 'pipeline/xor_006/pcap_files/in_1.txt' + out_pcap_file = 'pipeline/xor_006/pcap_files/out_1.txt' + filters = "tcp" + + # rule 0 test + sniff_pkts = self.send_and_sniff_pkts(0, 1, 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, 3, in_pcap_file, out_pcap_file, filters) + + # rule 3 test + sniff_pkts = self.send_and_sniff_pkts(3, 2, in_pcap_file, out_pcap_file, filters) + + sleep(1) + cmd = "^C" + self.dut.send_expect(cmd, "# ", 20) + + 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. + """ + + cli_file = '/tmp/pipeline/xor_007/xor_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + in_pcap_file = 'pipeline/xor_007/pcap_files/in_1.txt' + out_pcap_file = 'pipeline/xor_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, 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_xor_008(self): + + cli_file = '/tmp/pipeline/xor_008/xor_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_add_001(self): + + cli_file = '/tmp/pipeline/add_001/add_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_add_002(self): + + cli_file = '/tmp/pipeline/add_002/add_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_add_003(self): + + cli_file = '/tmp/pipeline/add_003/add_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # rule 1 test + sniff_pkts = self.send_and_sniff_pkts(1, 2, in_pcap_file, out_pcap_file, filters) + + # rule 2 test + sniff_pkts = self.send_and_sniff_pkts(2, 3, in_pcap_file, out_pcap_file, filters) + + sleep(1) + cmd = "^C" + self.dut.send_expect(cmd, "# ", 20) + + def test_add_004(self): + + cli_file = '/tmp/pipeline/add_004/add_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_add_005(self): + + cli_file = '/tmp/pipeline/add_005/add_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_add_006(self): + + cli_file = '/tmp/pipeline/add_006/add_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_add_007(self): + + cli_file = '/tmp/pipeline/add_007/add_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_add_008(self): + + cli_file = '/tmp/pipeline/add_008/add_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_shl_001(self): + + cli_file = '/tmp/pipeline/shl_001/shl_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_shl_002(self): + + cli_file = '/tmp/pipeline/shl_002/shl_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_shl_003(self): + + cli_file = '/tmp/pipeline/shl_003/shl_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_shl_004(self): + + cli_file = '/tmp/pipeline/shl_004/shl_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_shl_005(self): + + cli_file = '/tmp/pipeline/shl_005/shl_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_shl_006(self): + + cli_file = '/tmp/pipeline/shl_006/shl_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_shl_007(self): + + cli_file = '/tmp/pipeline/shl_007/shl_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_shl_008(self): + + cli_file = '/tmp/pipeline/shl_008/shl_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_shr_001(self): + + 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + def test_shr_002(self): + + cli_file = '/tmp/pipeline/shr_002/shr_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_shr_003(self): + + cli_file = '/tmp/pipeline/shr_003/shr_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + # 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_shr_005(self): + + cli_file = '/tmp/pipeline/shr_005/shr_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_shr_006(self): + + cli_file = '/tmp/pipeline/shr_006/shr_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_shr_007(self): + + cli_file = '/tmp/pipeline/shr_007/shr_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_shr_008(self): + + cli_file = '/tmp/pipeline/shr_008/shr_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_001(self): + + cli_file = '/tmp/pipeline/sub_001/sub_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_002(self): + + cli_file = '/tmp/pipeline/sub_002/sub_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_003(self): + + cli_file = '/tmp/pipeline/sub_003/sub_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, cli_file) + self.dut.send_expect(cmd, "PIPELINE0 enable", 60) + + # 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) + + # 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_004(self): + + cli_file = '/tmp/pipeline/sub_004/sub_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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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) + + DUT_PORTS = " -w {0} -w {1} -w {2} -w {3} "\ + .format(self.dut_p0_pci, self.dut_p1_pci, self.dut_p2_pci, self.dut_p3_pci) + + cmd = "{0} -c 0x3 -n 4 {1} -- -s {2}".format(self.app_pipeline_path, DUT_PORTS, 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 tear_down(self): + """ + Run after each test case. + """ + pass + + def tear_down_all(self): + """ + Run after each test suite. + """ + self.dut.close_session(self.session_secondary) + self.dut.kill_all() + -- 1.8.3.1