test suite reviews and discussions
 help / color / mirror / Atom feed
* [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).