* [dts] [PATCH 0/2] Add pipeline additional table tests @ 2020-11-23 9:49 Churchill Khangar 2020-11-23 9:49 ` [dts] [PATCH 1/2] dep: add pipeline additional table tests dependencies Churchill Khangar 2020-11-23 9:49 ` [dts] [PATCH 2/2] tests/pipeline: add table default and normal rule tests Churchill Khangar 0 siblings, 2 replies; 3+ messages in thread From: Churchill Khangar @ 2020-11-23 9:49 UTC (permalink / raw) To: dts Cc: cristian.dumitrescu, venkata.suresh.kumar.p, churchill.khangar, yogesh.jangra This patch series has the changes to add additional pipeline table test scenarios. Patch Details Patch1 - Pipeline additional table tests dependencies Patch2 - Pipeline additional table tests logic implementation Churchill Khangar (2): dep: add pipeline additional table tests dependencies tests/pipeline: add table default and normal rule tests dep/pipeline.tar.gz | Bin 0 -> 49082 bytes tests/TestSuite_pipeline.py | 215 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 215 insertions(+) -- 1.8.3.1 ^ permalink raw reply [flat|nested] 3+ messages in thread
* [dts] [PATCH 1/2] dep: add pipeline additional table tests dependencies 2020-11-23 9:49 [dts] [PATCH 0/2] Add pipeline additional table tests Churchill Khangar @ 2020-11-23 9:49 ` Churchill Khangar 2020-11-23 9:49 ` [dts] [PATCH 2/2] tests/pipeline: add table default and normal rule tests Churchill Khangar 1 sibling, 0 replies; 3+ messages in thread From: Churchill Khangar @ 2020-11-23 9:49 UTC (permalink / raw) To: dts Cc: cristian.dumitrescu, venkata.suresh.kumar.p, churchill.khangar, yogesh.jangra This patch has the pipeline additional table default and normal rule test cases dependencies required for run the tests. Signed-off-by: Churchill Khangar <churchill.khangar@intel.com> Tested-by: Venkata Suresh Kumar P <venkata.suresh.kumar.p@intel.com> --- dep/pipeline.tar.gz | Bin 0 -> 49082 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/dep/pipeline.tar.gz b/dep/pipeline.tar.gz index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..667e2698b618982af7bd6ef552503bc07e46a236 100644 GIT binary patch literal 49082 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 literal 0 HcmV?d00001 -- 1.8.3.1 ^ permalink raw reply [flat|nested] 3+ messages in thread
* [dts] [PATCH 2/2] tests/pipeline: add table default and normal rule tests 2020-11-23 9:49 [dts] [PATCH 0/2] Add pipeline additional table tests Churchill Khangar 2020-11-23 9:49 ` [dts] [PATCH 1/2] dep: add pipeline additional table tests dependencies Churchill Khangar @ 2020-11-23 9:49 ` Churchill Khangar 1 sibling, 0 replies; 3+ messages in thread From: Churchill Khangar @ 2020-11-23 9:49 UTC (permalink / raw) To: dts Cc: cristian.dumitrescu, venkata.suresh.kumar.p, churchill.khangar, yogesh.jangra Add additional pipeline table test scenarios to verify the behavior of pipeline library when table is populated with normal rules, default rule and action. Signed-off-by: Churchill Khangar <churchill.khangar@intel.com> Tested-by: Venkata Suresh Kumar P <venkata.suresh.kumar.p@intel.com> --- tests/TestSuite_pipeline.py | 215 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 215 insertions(+) diff --git a/tests/TestSuite_pipeline.py b/tests/TestSuite_pipeline.py index 9b13575..9933fd7 100644 --- a/tests/TestSuite_pipeline.py +++ b/tests/TestSuite_pipeline.py @@ -32,6 +32,7 @@ import utils import re import time +import socket from settings import HEADER_SIZE from test_case import TestCase @@ -5818,6 +5819,220 @@ class TestPipeline(TestCase): cmd = "^C" self.dut.send_expect(cmd, "# ", 20) + def test_table_002(self): + + cli_file = '/tmp/pipeline/table_002/table_002.cli' + + cmd = "sed -i -e 's/0000:00:04.0/%s/' {}".format(cli_file) % self.dut_p0_pci + self.dut.send_expect(cmd, "# ", 20) + cmd = "sed -i -e 's/0000:00:05.0/%s/' {}".format(cli_file) % self.dut_p1_pci + self.dut.send_expect(cmd, "# ", 20) + cmd = "sed -i -e 's/0000:00:06.0/%s/' {}".format(cli_file) % self.dut_p2_pci + self.dut.send_expect(cmd, "# ", 20) + cmd = "sed -i -e 's/0000:00:07.0/%s/' {}".format(cli_file) % self.dut_p3_pci + self.dut.send_expect(cmd, "# ", 20) + + 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) + + sleep(2) + + # create TCP connection to the server + SERVER_IP = '192.168.122.216' + SERVER_PORT = 8086 + BUFFER_SIZE = 1024 + + try: + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + except socket.error as err: + print("socket creation failed with error %s" % (err)) + + try: + s.connect((SERVER_IP, SERVER_PORT)) + except socket.error as err: + print("socket connection failed with error %s" % (err)) + + sleep(0.1) + msg = s.recv(BUFFER_SIZE) + response = msg.decode() + # print('Rxd: ' + response) + if "pipeline>" not in response: + s.close() + self.verify(0, "CLI response error") + + # test empty table scenario + in_pcap_file = 'pipeline/table_002/pcap_files/in_1.txt' + out_pcap_file = 'pipeline/table_002/pcap_files/out_1.txt' + filters = "tcp" + sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters) + sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters) + sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters) + sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters) + + # test single rule scenario + CMD_FILE = '/tmp/pipeline/table_002/cmd_files/cmd_2.txt' + CLI_CMD = 'pipeline PIPELINE0 table table_002_table update {} none none\n'.format(CMD_FILE) + s.send(CLI_CMD.encode('utf-8')) + sleep(0.1) + msg = s.recv(BUFFER_SIZE) + response = msg.decode() + # print('Rxd: ' + response) + if "pipeline>" not in response: + s.close() + self.verify(0, "CLI response error") + filters = "tcp" + in_pcap_file = 'pipeline/table_002/pcap_files/in_2.txt' + out_pcap_file = 'pipeline/table_002/pcap_files/out_2.txt' + sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters) + sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters) + sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters) + sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters) + + # test two rules scenario + CMD_FILE = '/tmp/pipeline/table_002/cmd_files/cmd_3.txt' + CLI_CMD = 'pipeline PIPELINE0 table table_002_table update {} none none\n'.format(CMD_FILE) + s.send(CLI_CMD.encode('utf-8')) + sleep(0.1) + msg = s.recv(BUFFER_SIZE) + response = msg.decode() + # print('Rxd: ' + response) + if "pipeline>" not in response: + s.close() + self.verify(0, "CLI response error") + filters = "tcp" + in_pcap_file = 'pipeline/table_002/pcap_files/in_3.txt' + out_pcap_file = 'pipeline/table_002/pcap_files/out_3.txt' + sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters) + sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters) + sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters) + sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters) + + # delete one rule scenario + CMD_FILE = '/tmp/pipeline/table_002/cmd_files/cmd_4_1.txt' + CLI_CMD = 'pipeline PIPELINE0 table table_002_table update none {} none\n'.format(CMD_FILE) + s.send(CLI_CMD.encode('utf-8')) + sleep(0.1) + msg = s.recv(BUFFER_SIZE) + response = msg.decode() + # print('Rxd: ' + response) + if "pipeline>" not in response: + s.close() + self.verify(0, "CLI response error") + filters = "tcp" + in_pcap_file = 'pipeline/table_002/pcap_files/in_4_1.txt' + out_pcap_file = 'pipeline/table_002/pcap_files/out_4_1.txt' + sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters) + sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters) + sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters) + sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters) + + # delete all rules scenario + CMD_FILE = '/tmp/pipeline/table_002/cmd_files/cmd_4_2.txt' + CLI_CMD = 'pipeline PIPELINE0 table table_002_table update none {} none\n'.format(CMD_FILE) + s.send(CLI_CMD.encode('utf-8')) + sleep(0.1) + msg = s.recv(BUFFER_SIZE) + response = msg.decode() + # print('Rxd: ' + response) + if "pipeline>" not in response: + s.close() + self.verify(0, "CLI response error") + filters = "tcp" + in_pcap_file = 'pipeline/table_002/pcap_files/in_4_2.txt' + out_pcap_file = 'pipeline/table_002/pcap_files/out_4_2.txt' + sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters) + sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters) + sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters) + sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters) + + # action update scenario (restore one of the previously deleted rules and check the update) + CMD_FILE = '/tmp/pipeline/table_002/cmd_files/cmd_5_1.txt' + CLI_CMD = 'pipeline PIPELINE0 table table_002_table update {} none none\n'.format(CMD_FILE) + s.send(CLI_CMD.encode('utf-8')) + sleep(0.1) + msg = s.recv(BUFFER_SIZE) + response = msg.decode() + print('Rxd: ' + response) + if "pipeline>" not in response: + s.close() + self.verify(0, "CLI response error") + filters = "tcp" + in_pcap_file = 'pipeline/table_002/pcap_files/in_5_1.txt' + out_pcap_file = 'pipeline/table_002/pcap_files/out_5_1.txt' + sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters) + + # action update scenario (change the action of restored rule and check the update) + CMD_FILE = '/tmp/pipeline/table_002/cmd_files/cmd_5_2.txt' + CLI_CMD = 'pipeline PIPELINE0 table table_002_table update {} none none\n'.format(CMD_FILE) + s.send(CLI_CMD.encode('utf-8')) + sleep(0.1) + msg = s.recv(BUFFER_SIZE) + response = msg.decode() + print('Rxd: ' + response) + if "pipeline>" not in response: + s.close() + self.verify(0, "CLI response error") + filters = "tcp" + in_pcap_file = 'pipeline/table_002/pcap_files/in_5_1.txt' + out_pcap_file = 'pipeline/table_002/pcap_files/out_5_1.txt' + sniff_pkts = self.send_and_sniff_pkts(0, 1, in_pcap_file, out_pcap_file, filters) + sniff_pkts = self.send_and_sniff_pkts(1, 0, in_pcap_file, out_pcap_file, filters) + sniff_pkts = self.send_and_sniff_pkts(2, 3, in_pcap_file, out_pcap_file, filters) + sniff_pkts = self.send_and_sniff_pkts(3, 2, in_pcap_file, out_pcap_file, filters) + + # deafult action scenario [empty table] + ''' + Empty table => Lookup MISS with default action executed + ''' + CMD_FILE = '/tmp/pipeline/table_002/cmd_files/cmd_6_1.txt' # delete the previously added rule + CLI_CMD = 'pipeline PIPELINE0 table table_002_table update none {} none\n'.format(CMD_FILE) + s.send(CLI_CMD.encode('utf-8')) + sleep(0.1) + msg = s.recv(BUFFER_SIZE) + response = msg.decode() + print('Rxd: ' + response) + if "pipeline>" not in response: + s.close() + self.verify(0, "CLI response error") + filters = "tcp" + in_pcap_file = 'pipeline/table_002/pcap_files/in_6_1.txt' + out_pcap_file = 'pipeline/table_002/pcap_files/out_6_1.txt' + sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters) + sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters) + sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters) + sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters) + + # deafult action scenario [table with one rule] + ''' + Add key A => Lookup HIT for the right packet with the specific key associated action executed + Lookup MISS for any other packets with default action executed + ''' + CMD_FILE = '/tmp/pipeline/table_002/cmd_files/cmd_6_2.txt' # add a new rule + CLI_CMD = 'pipeline PIPELINE0 table table_002_table update {} none none\n'.format(CMD_FILE) + s.send(CLI_CMD.encode('utf-8')) + sleep(0.1) + msg = s.recv(BUFFER_SIZE) + response = msg.decode() + print('Rxd: ' + response) + if "pipeline>" not in response: + s.close() + self.verify(0, "CLI response error") + filters = "tcp" + in_pcap_file = 'pipeline/table_002/pcap_files/in_6_2.txt' + out_pcap_file = 'pipeline/table_002/pcap_files/out_6_2.txt' + sniff_pkts = self.send_and_sniff_pkts(0, 0, in_pcap_file, out_pcap_file, filters) + sniff_pkts = self.send_and_sniff_pkts(1, 1, in_pcap_file, out_pcap_file, filters) + sniff_pkts = self.send_and_sniff_pkts(2, 2, in_pcap_file, out_pcap_file, filters) + sniff_pkts = self.send_and_sniff_pkts(3, 3, in_pcap_file, out_pcap_file, filters) + + s.close() + sleep(1) + cmd = "^C" + self.dut.send_expect(cmd, "# ", 20) + def tear_down(self): """ Run after each test case. -- 1.8.3.1 ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2020-11-23 9:52 UTC | newest] Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-11-23 9:49 [dts] [PATCH 0/2] Add pipeline additional table tests Churchill Khangar 2020-11-23 9:49 ` [dts] [PATCH 1/2] dep: add pipeline additional table tests dependencies Churchill Khangar 2020-11-23 9:49 ` [dts] [PATCH 2/2] tests/pipeline: add table default and normal rule tests Churchill Khangar
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).