test suite reviews and discussions
 help / color / mirror / Atom feed
From: Xiao Qimai <qimaix.xiao@intel.com>
To: dts@dpdk.org
Cc: Xiao Qimai <qimaix.xiao@intel.com>
Subject: [dts] [PATCH V1 2/2]tests/rte_flow_common: add new methods for passthru
Date: Wed, 18 Mar 2020 16:31:24 +0800	[thread overview]
Message-ID: <1584520284-299370-2-git-send-email-qimaix.xiao@intel.com> (raw)
In-Reply-To: <1584520284-299370-1-git-send-email-qimaix.xiao@intel.com>

*. add new methods for cvl_fdir update

Signed-off-by: Xiao Qimai <qimaix.xiao@intel.com>
---
 tests/rte_flow_common.py | 170 ++++++++++++++++++++++++++++++++---------------
 1 file changed, 118 insertions(+), 52 deletions(-)

diff --git a/tests/rte_flow_common.py b/tests/rte_flow_common.py
index 7592114..873d4c0 100644
--- a/tests/rte_flow_common.py
+++ b/tests/rte_flow_common.py
@@ -34,61 +34,66 @@ import time
 import re
 from utils import GREEN, RED
 
+
 # switch filter common functions
-def get_packet_number(out,match_string):
+def get_packet_number(out, match_string):
     """
     get the rx packets number.
     """
-    out_lines=out.splitlines()
-    pkt_num =0
+    out_lines = out.splitlines()
+    pkt_num = 0
     for i in range(len(out_lines)):
-        if  match_string in out_lines[i]:
+        if match_string in out_lines[i]:
             result_scanner = r'RX-packets:\s?(\d+)'
             scanner = re.compile(result_scanner, re.DOTALL)
-            m = scanner.search(out_lines[i+1])
+            m = scanner.search(out_lines[i + 1])
             pkt_num = int(m.group(1))
             break
     return pkt_num
 
-def get_port_rx_packets_number(out,port_num):
+
+def get_port_rx_packets_number(out, port_num):
     """
     get the port rx packets number.
     """
-    match_string="---------------------- Forward statistics for port %d" % port_num
-    pkt_num = get_packet_number(out,match_string)
+    match_string = "---------------------- Forward statistics for port %d" % port_num
+    pkt_num = get_packet_number(out, match_string)
     return pkt_num
 
+
 def get_queue_rx_packets_number(out, port_num, queue_id):
     """
     get the queue rx packets number.
     """
-    match_string="------- Forward Stats for RX Port= %d/Queue= %d" % (port_num, queue_id)
-    pkt_num = get_packet_number(out,match_string)
+    match_string = "------- Forward Stats for RX Port= %d/Queue= %d" % (port_num, queue_id)
+    pkt_num = get_packet_number(out, match_string)
     return pkt_num
 
+
 def check_output_log_in_queue(out, func_param, expect_results):
     """
     check if the expect queue received the expected number packets.
     """
-    #parse input parameters
+    # parse input parameters
     expect_port = func_param["expect_port"]
     expect_queue = func_param["expect_queues"]
     expect_pkts = expect_results["expect_pkts"]
 
-    pkt_num = get_queue_rx_packets_number(out,expect_port,expect_queue)
+    pkt_num = get_queue_rx_packets_number(out, expect_port, expect_queue)
     log_msg = ""
-    #check the result
+    # check the result
     if pkt_num == expect_pkts:
         return True, log_msg
     else:
         log_msg = "Port= %d/Queue= %d receive %d packets" % (expect_port, expect_queue, pkt_num)
         return False, log_msg
 
+
 def check_output_log_queue_region(out, func_param, expect_results):
     """
     Check if the expect queues received the expected number packets.
     """
-    #parse input parameters
+    # parse input parameters
     expect_port = func_param["expect_port"]
     expect_queues = func_param["expect_queues"]
     expect_pkts = expect_results["expect_pkts"]
@@ -98,7 +103,7 @@ def check_output_log_queue_region(out, func_param, expect_results):
         pkt_num = get_queue_rx_packets_number(out, expect_port, queue_id)
         packet_sumnum += pkt_num
 
-    #check the result
+    # check the result
     log_msg = ""
     if packet_sumnum == expect_pkts:
         return True, log_msg
@@ -106,24 +111,26 @@ def check_output_log_queue_region(out, func_param, expect_results):
         log_msg = "queue region: Not all packets are received in expect_queues"
         return False, log_msg
 
+
 def check_output_log_queue_region_mismatched(out, func_param, expect_results):
     """
     when the action is queue region, check the expect port received the expect
     number packets, while the corresponding queues not receive any packets.
     """
-    #parse input parameters
+    # parse input parameters
     expect_port = func_param["expect_port"]
     expect_queues = func_param["expect_queues"]
     expect_pkts = expect_results["expect_pkts"]
 
     log_msg = ""
-    #check expect_port received expect number packets
+    # check expect_port received expect number packets
     pkt_num = get_port_rx_packets_number(out, expect_port)
     if pkt_num != expect_pkts:
-        log_msg = "queue region mismatched: port %d receive %d packets, not receive %d packet" % (expect_port, pkt_num, expect_pkts)
+        log_msg = "queue region mismatched: port %d receive %d packets, not receive %d packet" % (
+            expect_port, pkt_num, expect_pkts)
         return False, log_msg
     else:
-        #check expect queues not received packets
+        # check expect queues not received packets
         packet_sumnum = 0
         for queue_id in expect_queues:
             pkt_num = get_queue_rx_packets_number(out, expect_port, queue_id)
@@ -136,39 +143,42 @@ def check_output_log_queue_region_mismatched(out, func_param, expect_results):
             log_msg = "queue region mismatched: expect queues should receive 0 packets, but it received %d packets" % packet_sumnum
             return False, log_msg
 
+
 def check_output_log_in_queue_mismatched(out, func_param, expect_results):
     """
     when the action is to queue, check the expect port received the expect
     number packets, while the corresponding queue not receive any packets.
     """
-    #parse input parameters
+    # parse input parameters
     expect_port = func_param["expect_port"]
     expect_queue = func_param["expect_queues"]
     expect_pkts = expect_results["expect_pkts"]
 
     log_msg = ""
-    #check expect_port received expect number packets
+    # check expect_port received expect number packets
     pkt_num = get_port_rx_packets_number(out, expect_port)
     if pkt_num != expect_pkts:
         log_msg = "mismatched: port %d receive %d packets, not receive %d packet" % (expect_port, pkt_num, expect_pkts)
         return False, log_msg
     else:
-        #check expect queue not received packets
+        # check expect queue not received packets
         pkt_num = get_queue_rx_packets_number(out, expect_port, expect_queue)
         log_msg = ""
         if pkt_num == 0:
             return True, log_msg
         else:
-            log_msg = "mismatched: expect queue Port= %d/Queue= %d should receive 0 packets, but it received %d packets" % (expect_port, expect_queue, pkt_num)
+            log_msg = "mismatched: expect queue Port= %d/Queue= %d should receive 0 packets, but it received %d packets" % (
+                expect_port, expect_queue, pkt_num)
             return False, log_msg
 
+
 def check_output_log_drop(out, func_param, expect_results):
     """
     check the expect port not receive any packets.
     """
-    #parse input parameters
+    # parse input parameters
     expect_port = func_param["expect_port"]
-    #check expect_port not received the packets
+    # check expect_port not received the packets
     pkt_num = get_port_rx_packets_number(out, expect_port)
 
     log_msg = ""
@@ -178,33 +188,36 @@ def check_output_log_drop(out, func_param, expect_results):
         log_msg = "Port %d packets not dropped, received %d packets" % (expect_port, pkt_num)
         return False, log_msg
 
+
 def check_output_log_drop_mismatched(out, func_param, expect_results):
     """
     check the expect port received the mismatched packets.
     """
-    #parse input parameters
+    # parse input parameters
     expect_port = func_param["expect_port"]
     expect_pkts = expect_results["expect_pkts"]
 
     log_msg = ""
-    #check expect_port received expect number packets
+    # check expect_port received expect number packets
     pkt_num = get_port_rx_packets_number(out, expect_port)
     if pkt_num == expect_pkts:
         return True, log_msg
     else:
-        log_msg = "drop mismatched: port %d receive %d packets, should receive %d packet" % (expect_port, pkt_num, expect_pkts)
+        log_msg = "drop mismatched: port %d receive %d packets, should receive %d packet" % (
+            expect_port, pkt_num, expect_pkts)
         return False, log_msg
 
+
 def check_rule_in_list_by_id(out, rule_num, only_last=True):
     """
     check if the rule with ID "rule_num" is in list, after
     executing the command "flow list 0".
     """
-    out_lines=out.splitlines()
+    out_lines = out.splitlines()
     if len(out_lines) == 1:
         return False
     if only_last:
-        last_rule = out_lines[len(out_lines)-1]
+        last_rule = out_lines[len(out_lines) - 1]
         last_rule_list = last_rule.split('\t')
         rule_id = int(last_rule_list[0])
         if rule_id == rule_num:
@@ -212,10 +225,10 @@ def check_rule_in_list_by_id(out, rule_num, only_last=True):
         else:
             return False
     else:
-        #check the list for the rule
+        # check the list for the rule
         for i in range(len(out_lines)):
             if "ID" in out_lines[i]:
-                rules_list = out_lines[i+1:]
+                rules_list = out_lines[i + 1:]
                 break
         for per_rule in rules_list:
             per_rule_list = per_rule.split('\t')
@@ -230,6 +243,7 @@ def verify(passed, description):
     if not passed:
         raise AssertionError(description)
 
+
 def check_queue(out, pkt_num, check_param, stats=True):
     port_id = check_param["port_id"] if check_param.get("port_id") is not None else 0
     queue = check_param["queue"]
@@ -240,22 +254,27 @@ def check_queue(out, pkt_num, check_param, stats=True):
         res_queue = [int(i[0]) for i in res]
         pkt_li = [int(i[1]) for i in res]
         res_num = sum(pkt_li)
-        verify(res_num == pkt_num, "fail: got wrong number of packets, expect pakcet number %s, got %s." % (pkt_num, res_num))
+        verify(res_num == pkt_num,
+               "fail: got wrong number of packets, expect pakcet number %s, got %s." % (pkt_num, res_num))
         if stats:
             if isinstance(queue, int):
-                verify(all(q == queue for q in res_queue), "fail: queue id not matched, expect queue %s, got %s" % (queue, res_queue))
+                verify(all(q == queue for q in res_queue),
+                       "fail: queue id not matched, expect queue %s, got %s" % (queue, res_queue))
                 print((GREEN("pass: queue id %s matched" % res_queue)))
             elif isinstance(queue, list):
-                verify(all(q in queue for q in res_queue), "fail: queue id not matched, expect queue %s, got %s" % (queue, res_queue))
+                verify(all(q in queue for q in res_queue),
+                       "fail: queue id not matched, expect queue %s, got %s" % (queue, res_queue))
                 print((GREEN("pass: queue id %s matched" % res_queue)))
             else:
                 raise Exception("wrong queue value, expect int or list")
         else:
             if isinstance(queue, int):
-                verify(not any(q == queue for q in res_queue), "fail: queue id should not matched, expect queue %s, got %s" % (queue, res_queue))
+                verify(not any(q == queue for q in res_queue),
+                       "fail: queue id should not matched, expect queue %s, got %s" % (queue, res_queue))
                 print((GREEN("pass: queue id %s not matched" % res_queue)))
             elif isinstance(queue, list):
-                verify(not any(q in queue for q in res_queue), "fail: each queue in %s should not in queue %s" % (res_queue, queue))
+                verify(not any(q in queue for q in res_queue),
+                       "fail: each queue in %s should not in queue %s" % (res_queue, queue))
                 print((GREEN("pass: queue id %s not matched" % res_queue)))
             else:
                 raise Exception("wrong action value, expect queue_index or queue_group")
@@ -271,11 +290,13 @@ def check_drop(out, pkt_num, check_param, stats=True):
     pkt_li = p.findall(out)
     if pkt_li:
         res = {k: v for k, v in zip(title_li, list(map(int, list(pkt_li[0]))))}
-        verify(pkt_num == res["rx-total"], "failed: get wrong amount of packet %d, expected %d" % (res["rx-total"], pkt_num))
+        verify(pkt_num == res["rx-total"],
+               "failed: get wrong amount of packet %d, expected %d" % (res["rx-total"], pkt_num))
         if stats:
             verify(res["rx-dropped"] == pkt_num, "failed: dropped packets number %s not match" % res["rx-dropped"])
         else:
-            verify(res["rx-dropped"] == 0 and res["rx-packets"] == pkt_num, "failed: dropped packets number should be 0")
+            verify(res["rx-dropped"] == 0 and res["rx-packets"] == pkt_num,
+                   "failed: dropped packets number should be 0")
     else:
         raise Exception("got wrong output, not match pattern %s" % p.pattern)
 
@@ -289,7 +310,7 @@ def check_mark(out, pkt_num, check_param, stats=True):
             mark_list = [i[0] for i in res]
             verify(len(res) == pkt_num, "get wrong number of packet with mark_id")
             verify(all([int(i, 16) == check_param["mark_id"] for i in res]),
-                        "failed: some packet mark id of %s not match" % mark_list)
+                   "failed: some packet mark id of %s not match" % mark_list)
         else:
             check_drop(out[1], pkt_num, check_param, stats)
             verify(not res, "should has no mark_id in %s" % res)
@@ -300,6 +321,45 @@ def check_mark(out, pkt_num, check_param, stats=True):
             check_drop(out[1], pkt_num, check_param, stats)
         verify(not res, "should has no mark_id in %s" % res)
 
+
+def verify_directed_by_rss(out, rxq=64, stats=True):
+    p = re.compile('RSS\shash=(\w+)\s-\sRSS\squeue=(\w+)')
+    pkt_info = p.findall(out)
+    if stats:
+        verify(all([int(i[0], 16) % rxq == int(i[1], 16) for i in pkt_info]), 'some pkt not directed by rss.')
+    else:
+        verify(not any([int(i[0], 16) % rxq == int(i[1], 16) for i in pkt_info]), 'some pkt directed by rss')
+
+
+def check_passthru(out, pkt_num, check_param, stats=True):
+    port_id = check_param["port_id"] if check_param.get("port_id") is not None else 0
+    rxq = check_param['rxq'] if check_param.get("rxq") is not None else 64
+    fdir_scanner = re.compile("FDIR matched ID=(0x\w+)")
+    fdir_flag = fdir_scanner.search(out[0])
+    p = re.compile(
+        r"Forward Stats for RX Port= %s/Queue=(\s?\d+)\s.*\n.*RX-packets:(\s?\d+)\s+TX-packets" % port_id)
+    res = p.findall(out[1])
+    if res:
+        pkt_li = [int(i[1]) for i in res]
+        pkt_queue = [int(i[0]) for i in res]
+        res_num = sum(pkt_li)
+        verify(res_num == pkt_num,
+               "fail: got wrong number of packets, expect pakcet number %s, got %s." % (pkt_num, res_num))
+    else:
+        raise Exception("got wrong output, not match pattern %s" % p.pattern)
+    if stats:
+        if check_param.get("mark_id") == "NOT_SHOW":
+            verify(not fdir_flag, 'FDIR exists')
+        elif "mark_id" in check_param:
+            verify(int(fdir_flag.group(1), 16) == check_param["mark_id"], "FDIR ID not matched")
+        else:
+            verify(fdir_flag, 'FDIR not exists')
+    else:
+        verify(not fdir_flag, 'FDIR exists')
+    verify_directed_by_rss(out[0], rxq=rxq, stats=True)
+    return pkt_queue
+
+
 # rss common functions
 def check_packets_of_each_queue(out):
     """
@@ -309,15 +369,15 @@ def check_packets_of_each_queue(out):
     queueid_rxpackets_list = []
     log_msg = ""
     for q in queue_result:
-        queue_id =get_queue_id(q[0])
-        rx_packets=get_rxpackets(q[1])
+        queue_id = get_queue_id(q[0])
+        rx_packets = get_rxpackets(q[1])
         if (queue_id != -1):
             queueid_rxpackets_list.append([queue_id, rx_packets])
 
     if (len(queueid_rxpackets_list) == 10):
         if (queueid_rxpackets_list > 0):
             return True, log_msg
-        else :
+        else:
             log_msg = "The queue is rx-packets" % id
             return False, log_msg
 
@@ -331,6 +391,7 @@ def check_packets_of_each_queue(out):
     else:
         return False, "queue %s out of range %s" % (queue_set, verify_set)
 
+
 def check_symmetric_queue(out):
     """
     check each packets in which queue
@@ -340,10 +401,11 @@ def check_symmetric_queue(out):
     log_msg = ""
     for i in range(m - 1):
         if queue_list[i] == queue_list[i + 1]:
-           return True, log_msg
+            return True, log_msg
         else:
-           log_msg = "packets not in same queue and cause to fail"
-           return False, log_msg
+            log_msg = "packets not in same queue and cause to fail"
+            return False, log_msg
+
 
 def check_simplexor_queue(out):
     """
@@ -354,17 +416,19 @@ def check_simplexor_queue(out):
     log_msg = ""
     for i in range(m - 1):
         if queue_list[i] == queue_list[i + 1]:
-           return True, log_msg
+            return True, log_msg
         else:
-           log_msg = "packets not in same queue and cause to fail"
-           return False, log_msg
+            log_msg = "packets not in same queue and cause to fail"
+            return False, log_msg
+
 
 def check_rx_tx_packets_match(out, count):
     rx_stats = int(re.findall('RX-total:\s+(\d*)', out)[0])
-    if rx_stats == count :
-       return True, "The Rx packets has matched to the Tx packets"
+    if rx_stats == count:
+        return True, "The Rx packets has matched to the Tx packets"
     else:
-       return False, "rx and tx packets error!"
+        return False, "rx and tx packets error!"
+
 
 def get_queue_id(line1):
     try:
@@ -373,6 +437,7 @@ def get_queue_id(line1):
     except:
         return -1
 
+
 def get_rxpackets(line2):
     try:
         result = re.search(r"RX-packets:\s*(\d*)", line2)
@@ -380,6 +445,7 @@ def get_rxpackets(line2):
     except:
         return -1
 
+
 def find_queueid_rxpackets_list(id, q_rx_list):
     for item in q_rx_list:
         if (int(item[0]) == id):
-- 
1.8.3.1


  reply	other threads:[~2020-03-18  8:36 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-18  8:31 [dts] [PATCH V1 1/2]tests/TestSuite_cvl_fdir: update script according to testplan Xiao Qimai
2020-03-18  8:31 ` Xiao Qimai [this message]
2020-03-18  8:39   ` [dts] [PATCH V1 2/2]tests/rte_flow_common: add new methods for passthru Xiao, QimaiX

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1584520284-299370-2-git-send-email-qimaix.xiao@intel.com \
    --to=qimaix.xiao@intel.com \
    --cc=dts@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).