test suite reviews and discussions
 help / color / mirror / Atom feed
* [dts] [next][PATCH V2 1/7] tests/checksum_offload use pktgen API replace old module and fix some issue
@ 2019-05-31 17:19 zhaomeijuan
  2019-05-31 17:19 ` [dts] [next][PATCH V2 2/7] tests/distributor " zhaomeijuan
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: zhaomeijuan @ 2019-05-31 17:19 UTC (permalink / raw)
  To: dts; +Cc: zhaomeijuan

*.remove old or unused module and code which
 replace it with pktgen API 
*.fix pep-8 issue 
*.quit task before start another
*.enable pmd verbose function 
*.add enable rx cksum

Signed-off-by: zhaomeijuan <meijuanx.zhao@intel.com>
---
 tests/TestSuite_checksum_offload.py | 63 ++++++++++++++++++++---------
 1 file changed, 44 insertions(+), 19 deletions(-)

diff --git a/tests/TestSuite_checksum_offload.py b/tests/TestSuite_checksum_offload.py
index 6541ba5..db0663e 100644
--- a/tests/TestSuite_checksum_offload.py
+++ b/tests/TestSuite_checksum_offload.py
@@ -37,13 +37,16 @@ Test support of RX/TX Checksum Offload Features by Poll Mode Drivers.
 """
 
 import string
+import os
 import re
-import rst
+from rst import RstReport
 import utils
 
 from test_case import TestCase
 from pmd_output import PmdOutput
 from test_capabilities import DRIVER_TEST_LACK_CAPA
+from pktgen import PacketGeneratorHelper
+
 
 class TestChecksumOffload(TestCase):
 
@@ -59,6 +62,15 @@ class TestChecksumOffload(TestCase):
         self.pmdout = PmdOutput(self.dut)
         self.portMask = utils.create_mask([self.dut_ports[0]])
         self.ports_socket = self.dut.get_numa_id(self.dut_ports[0])
+        # get dts output path
+        if self.logger.log_path.startswith(os.sep):
+            self.output_path = self.logger.log_path
+        else:
+            cur_path = os.path.dirname(
+                                os.path.dirname(os.path.realpath(__file__)))
+            self.output_path = os.sep.join([cur_path, self.logger.log_path])
+        # create an instance to set stream field setting
+        self.pktgen_helper = PacketGeneratorHelper()
 
     def set_up(self):
         """
@@ -86,7 +98,6 @@ class TestChecksumOffload(TestCase):
             self.dut.send_expect("csum set sctp sw %d" % port, "testpmd>")
             self.dut.send_expect("port start all", "testpmd>")
 
-
     def get_chksum_values(self, packets_expected):
         """
         Validate the checksum flags.
@@ -175,16 +186,16 @@ class TestChecksumOffload(TestCase):
         self.tester.send_expect("exit()", "#")
 
         inst = self.tester.tcpdump_sniff_packets(intf=rx_interface, count=len(packets_sent),
-                filters=[{'layer':'ether', 'config':{'src': sniff_src}}])
+                filters=[{'layer': 'ether', 'config': {'src': sniff_src}}])
 
         for packet_type in packets_sent.keys():
             self.tester.scapy_append('sendp([%s], iface="%s")' % (packets_sent[packet_type], tx_interface))
 
         self.tester.scapy_execute()
-	p = self.tester.load_tcpdump_sniff_packets(inst)
-	nr_packets=len(p)
-	reslist = [p[i].pktgen.pkt.sprintf("%IP.chksum%;%TCP.chksum%;%UDP.chksum%;%SCTP.chksum%") for i in range(nr_packets)]
-	out = string.join(reslist, ",")
+        p = self.tester.load_tcpdump_sniff_packets(inst)
+        nr_packets = len(p)
+        reslist = [p[i].pktgen.pkt.sprintf("%IP.chksum%;%TCP.chksum%;%UDP.chksum%;%SCTP.chksum%") for i in range(nr_packets)]
+        out = string.join(reslist, ",")
         packets_received = out.split(',')
         self.verify(len(packets_sent) == len(packets_received), "Unexpected Packets Drop")
 
@@ -224,7 +235,7 @@ class TestChecksumOffload(TestCase):
 
         pktsChkErr = {'IP/UDP': 'Ether(dst="%s", src="52:00:00:00:00:00")/Dot1Q(vlan=1)/IP(chksum=0x0)/UDP(chksum=0xf)/("X"*46)' % mac,
                       'IP/TCP': 'Ether(dst="%s", src="52:00:00:00:00:00")/Dot1Q(vlan=1)/IP(chksum=0x0)/TCP(chksum=0xf)/("X"*46)' % mac,
-		      'IP/SCTP': 'Ether(dst="%s", src="52:00:00:00:00:00")/Dot1Q(vlan=1)/IP(chksum=0x0)/SCTP(chksum=0xf)/("X"*48)' % mac,
+                      'IP/SCTP': 'Ether(dst="%s", src="52:00:00:00:00:00")/Dot1Q(vlan=1)/IP(chksum=0x0)/SCTP(chksum=0xf)/("X"*48)' % mac,
                       'IPv6/UDP': 'Ether(dst="%s", src="52:00:00:00:00:00")/Dot1Q(vlan=1)/IPv6(src="::1")/UDP(chksum=0xf)/("X"*46)' % mac,
                       'IPv6/TCP': 'Ether(dst="%s", src="52:00:00:00:00:00")/Dot1Q(vlan=1)/IPv6(src="::1")/TCP(chksum=0xf)/("X"*46)' % mac}
 
@@ -259,8 +270,8 @@ class TestChecksumOffload(TestCase):
                     'IPv6/TCP': 'Ether(dst="%s", src="52:00:00:00:00:00")/IPv6(src="::1")/TCP()/("X"*46)' % mac}
 
         result = dict()
-        
-	self.checksum_enablehw(self.dut_ports[0])
+
+        self.checksum_enablehw(self.dut_ports[0])
 
         # get the packet checksum value
         result = self.get_chksum_values(pkts_ref)
@@ -279,7 +290,7 @@ class TestChecksumOffload(TestCase):
                     'IPv6/UDP': 'Ether(dst="%s", src="52:00:00:00:00:00")/IPv6(src="::1")/UDP(chksum=0xf)/("X"*46)' % mac,
                     'IPv6/TCP': 'Ether(dst="%s", src="52:00:00:00:00:00")/IPv6(src="::1")/TCP(chksum=0xf)/("X"*46)' % mac}
 
-	if self.kdriver in DRIVER_TEST_LACK_CAPA['sctp_tx_offload']:
+        if self.kdriver in DRIVER_TEST_LACK_CAPA['sctp_tx_offload']:
             del pkts_good['IP/SCTP']
             del pkts_bad['IP/SCTP']
             del pkts_ref['IP/SCTP']
@@ -361,19 +372,33 @@ class TestChecksumOffload(TestCase):
         Pps = dict()
         Pct = dict()
         dmac = self.dut.get_mac_address(self.dut_ports[0])
+        dmac1 = self.dut.get_mac_address(self.dut_ports[1])
 
         result = [2, lcore, ptype, mode]
         for size in size_list:
             flow = flow_format % (dmac, size)
-            self.tester.scapy_append('wrpcap("test.pcap", [%s])' % flow)
+            pcap = os.sep.join([self.output_path, "test.pcap"])
+            self.tester.scapy_append('wrpcap("%s", [%s])' % (pcap, flow))
             self.tester.scapy_execute()
+            flow = flow_format % (dmac1, size)
+            pcap = os.sep.join([self.output_path, "test1.pcap"])
+            self.tester.scapy_append('wrpcap("%s", [%s])' % (pcap, flow))
+            self.tester.scapy_execute()
+
             tgenInput = []
+            pcap = os.sep.join([self.output_path, "test.pcap"])
             tgenInput.append(
-                (self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[1]), "test.pcap"))
+                (self.tester.get_local_port(self.dut_ports[0]), self.tester.get_local_port(self.dut_ports[1]), pcap))
+            pcap = os.sep.join([self.output_path, "test1.pcap"])
             tgenInput.append(
-                (self.tester.get_local_port(self.dut_ports[1]), self.tester.get_local_port(self.dut_ports[0]), "test.pcap"))
-            Bps[str(size)], Pps[
-                str(size)] = self.tester.traffic_generator_throughput(tgenInput)
+                (self.tester.get_local_port(self.dut_ports[1]), self.tester.get_local_port(self.dut_ports[0]), pcap))
+
+            # clear streams before add new streams
+            self.tester.pktgen.clear_streams()
+            # run packet generator
+            streams = self.pktgen_helper.prepare_stream_from_tginput(tgenInput, 100,
+                    None, self.tester.pktgen)
+            Bps[str(size)], Pps[str(size)] = self.tester.pktgen.measure_throughput(stream_ids=streams)
             self.verify(Pps[str(size)] > 0, "No traffic detected")
             Pps[str(size)] /= 1E6
             Pct[str(size)] = (Pps[str(size)] * 100) / \
@@ -390,6 +415,7 @@ class TestChecksumOffload(TestCase):
         """
         # Verify that enough ports are available
         self.verify(len(self.dut_ports) >= 2, "Insufficient ports for testing")
+        self.dut.send_expect("quit", "#")
 
         # sizes = [64, 128, 256, 512, 1024]
         sizes = [64, 128]
@@ -406,16 +432,15 @@ class TestChecksumOffload(TestCase):
         portMask = utils.create_mask([self.dut_ports[0], self.dut_ports[1]])
         for mode in ["sw", "hw"]:
             self.logger.info("%s performance" % mode)
-            rst.write_text(mode + " Performance" + '\r\n')
             tblheader = ["Ports", "S/C/T", "Packet Type", "Mode"]
             for size in sizes:
                 tblheader.append("%sB mpps" % str(size))
                 tblheader.append("%sB %%   " % str(size))
             self.result_table_create(tblheader)
             self.pmdout.start_testpmd(
-                lcore, "--portmask=%s" % self.portMask, socket=self.ports_socket)
+                lcore, "--portmask=%s" % self.portMask + " --enable-rx-cksum " +
+                                  "--port-topology=loop", socket=self.ports_socket)
 
-            self.dut.send_expect("set verbose 1", "testpmd> ")
             self.dut.send_expect("set fwd csum", "testpmd> ")
             if mode == "hw":
                 self.checksum_enablehw(self.dut_ports[0])
-- 
2.17.1


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

* [dts] [next][PATCH V2 2/7] tests/distributor use pktgen API replace old module and fix some issue
  2019-05-31 17:19 [dts] [next][PATCH V2 1/7] tests/checksum_offload use pktgen API replace old module and fix some issue zhaomeijuan
@ 2019-05-31 17:19 ` zhaomeijuan
  2019-05-31 17:19 ` [dts] [next][PATCH V2 3/7] tests/efd use pktgen API replace old module and fix pep8 issue zhaomeijuan
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: zhaomeijuan @ 2019-05-31 17:19 UTC (permalink / raw)
  To: dts; +Cc: zhaomeijuan

*.remove old or unused module and code which 
replace it with pktgen API 
*.overwrite ip method 
*.fix pep8 issue

Signed-off-by: zhaomeijuan <meijuanx.zhao@intel.com>
---
 tests/TestSuite_distributor.py | 57 ++++++++++++++++++++--------------
 1 file changed, 34 insertions(+), 23 deletions(-)

diff --git a/tests/TestSuite_distributor.py b/tests/TestSuite_distributor.py
index a900f5e..c4dfca7 100644
--- a/tests/TestSuite_distributor.py
+++ b/tests/TestSuite_distributor.py
@@ -34,21 +34,19 @@ DPDK Test suite.
 """
 import re
 import utils
+import os
 from test_case import TestCase
-from etgen import IxiaPacketGenerator
+from pktgen import PacketGeneratorHelper
 
 
-class TestDistributor(TestCase, IxiaPacketGenerator):
+class TestDistributor(TestCase):
+
     def set_up_all(self):
         """
         Run at the start of each test suite.
         """
         self.tester.extend_external_packet_generator(TestDistributor, self)
 
-        out = self.dut.send_expect("make -C test -j", "#")
-        self.verify("Error" not in out, "Compilation error")
-        self.verify("No such" not in out, "Compilation error")
-
         # reduce tx queues for enable many workers
         self.dut.send_expect("sed -i -e 's/.*txRings = .*/\\tconst uint16_t rxRings = 1, txRings = 1;/' ./examples/distributor/main.c", "#")
         out = self.dut.build_dpdk_apps("./examples/distributor")
@@ -57,6 +55,15 @@ class TestDistributor(TestCase, IxiaPacketGenerator):
 
         self.dut_ports = self.dut.get_ports()
         self.app = "./examples/distributor/build/distributor_app"
+        # get dts output path
+        if self.logger.log_path.startswith(os.sep):
+            self.output_path = self.logger.log_path
+        else:
+            cur_path = os.path.dirname(
+                                os.path.dirname(os.path.realpath(__file__)))
+            self.output_path = os.sep.join([cur_path, self.logger.log_path])
+        # create an instance to set stream field setting
+        self.pktgen_helper = PacketGeneratorHelper()
 
     def set_up(self):
         """
@@ -107,12 +114,15 @@ class TestDistributor(TestCase, IxiaPacketGenerator):
         cmd_fmt = "%s -c %s -n %d -w %s -- -p 0x1"
         socket = self.dut.get_numa_id(self.dut_ports[0])
 
-        self.tester.scapy_append('wrpcap("distributor.pcap", [Ether()/IP()/("X"*26)])')
+        pcap = os.sep.join([self.output_path, "distributor.pcap"])
+        self.tester.scapy_append('wrpcap("%s", [Ether()/IP()/("X"*26)])' % pcap)
         self.tester.scapy_execute()
         tgen_input = []
         rx_port = self.tester.get_local_port(self.dut_ports[0])
         tx_port = self.tester.get_local_port(self.dut_ports[0])
-        tgen_input.append((tx_port, rx_port, "distributor.pcap"))
+
+        pcap = os.sep.join([self.output_path, "distributor.pcap"])
+        tgen_input.append((tx_port, rx_port, pcap))
 
         self.result_table_create(table_header)
         for worker_num in workers:
@@ -128,8 +138,14 @@ class TestDistributor(TestCase, IxiaPacketGenerator):
 
             self.dut.send_expect(cmd, "doing packet RX", timeout=30)
 
-            self.tester.ixia_packet_gen.hook_transmission_func = self.hook_transmission_func
-            _, pps = self.tester.traffic_generator_throughput(tgen_input, delay=2)
+            self.app_output = self.dut.session.get_session_before(timeout=2)
+
+            # clear streams before add new streams
+            self.tester.pktgen.clear_streams()
+            # run packet generator
+            streams = self.pktgen_helper.prepare_stream_from_tginput(tgen_input, 100,
+                                    None, self.tester.pktgen)
+            _, pps = self.tester.pktgen.measure_throughput(stream_ids=streams)
 
             self.dut.send_expect("^C", "#")
 
@@ -255,19 +271,14 @@ class TestDistributor(TestCase, IxiaPacketGenerator):
         cycles = lines[2].split()[3]
         return int(cycles)
 
-    def ip(self, port, frag, src, proto, tos, dst, chksum, len, options, version, flags, ihl, ttl, id):
-        self.add_tcl_cmd("protocol config -name ip")
-        self.add_tcl_cmd('ip config -sourceIpAddr "%s"' % src)
-        self.add_tcl_cmd("ip config -sourceIpAddrMode ipIdle")
-        self.add_tcl_cmd('ip config -destIpAddr "%s"' % dst)
-        self.add_tcl_cmd("ip config -destIpAddrMode ipRandom")
-        self.add_tcl_cmd("ip config -ttl %d" % ttl)
-        self.add_tcl_cmd("ip config -totalLength %d" % len)
-        self.add_tcl_cmd("ip config -fragment %d" % frag)
-        self.add_tcl_cmd("ip config -ipProtocol ipV4ProtocolReserved255")
-        self.add_tcl_cmd("ip config -identifier %d" % id)
-        self.add_tcl_cmd("stream config -framesize %d" % (len + 18))
-        self.add_tcl_cmd("ip set %d %d %d" % (self.chasId, port['card'], port['port']))
+    def set_fields(self):
+        ''' set ip protocol field behavior '''
+        fields_config = {
+        'ip':  {
+            'dst': {'mask': '255.240.0.0', 'action': 'inc'}
+        }, }
+
+        return fields_config
 
     def tear_down(self):
         """
-- 
2.17.1


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

* [dts] [next][PATCH V2 3/7] tests/efd use pktgen API replace old module and fix pep8 issue
  2019-05-31 17:19 [dts] [next][PATCH V2 1/7] tests/checksum_offload use pktgen API replace old module and fix some issue zhaomeijuan
  2019-05-31 17:19 ` [dts] [next][PATCH V2 2/7] tests/distributor " zhaomeijuan
@ 2019-05-31 17:19 ` zhaomeijuan
  2019-05-31 17:19 ` [dts] [next][PATCH V2 4/7] tests/fm10k_perf use pktgen API replace old module and fix some issue zhaomeijuan
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: zhaomeijuan @ 2019-05-31 17:19 UTC (permalink / raw)
  To: dts; +Cc: zhaomeijuan

*.remove old or unused module and code which 
replace it with pktgen API 
*.overwrite ip method 
*.fix pep8 issue

Signed-off-by: zhaomeijuan <meijuanx.zhao@intel.com>
---
 tests/TestSuite_efd.py | 59 +++++++++++++++++++++++-------------------
 1 file changed, 33 insertions(+), 26 deletions(-)

diff --git a/tests/TestSuite_efd.py b/tests/TestSuite_efd.py
index 2c80464..1da81fd 100644
--- a/tests/TestSuite_efd.py
+++ b/tests/TestSuite_efd.py
@@ -34,21 +34,18 @@ DPDK Test suite.
 """
 import re
 import utils
+import os
 from test_case import TestCase
-from etgen import IxiaPacketGenerator
+from pktgen import PacketGeneratorHelper
 
 
-class TestEFD(TestCase, IxiaPacketGenerator):
+class TestEFD(TestCase):
     def set_up_all(self):
         """
         Run at the start of each test suite.
         """
         self.tester.extend_external_packet_generator(TestEFD, self)
 
-        out = self.dut.send_expect("make -C test -j", "#")
-        self.verify("Error" not in out, "Compilation error")
-        self.verify("No such" not in out, "Compilation error")
-
         out = self.dut.build_dpdk_apps("./examples/server_node_efd")
         self.verify("Error" not in out, "Compilation error")
         self.verify("No such" not in out, "Compilation error")
@@ -57,6 +54,16 @@ class TestEFD(TestCase, IxiaPacketGenerator):
         self.node_app = "./examples/server_node_efd/node/%s/node" % self.target
         self.server_app = "./examples/server_node_efd/server/%s/server" % self.target
 
+        # get dts output path
+        if self.logger.log_path.startswith(os.sep):
+            self.output_path = self.logger.log_path
+        else:
+            cur_path = os.path.dirname(
+                                os.path.dirname(os.path.realpath(__file__)))
+            self.output_path = os.sep.join([cur_path, self.logger.log_path])
+        # create an instance to set stream field setting
+        self.pktgen_helper = PacketGeneratorHelper()
+
     def set_up(self):
         """
         Run before each test case.
@@ -165,22 +172,23 @@ class TestEFD(TestCase, IxiaPacketGenerator):
 
     def _efd_perf_evaluate(self, node_num, flow_num):
         # extended flow number into etgen module
-        self.tester.ixia_packet_gen.flow_num = flow_num
 
         # output port is calculated from overall ports number
         server_cmd_fmt = "%s -c %s -n %d -w %s -w %s -- -p 0x3 -n %d -f %s"
         node_cmd_fmt = "%s -c %s -n %d --proc-type=secondary -- -n %d"
         socket = self.dut.get_numa_id(self.dut_ports[0])
 
-        self.tester.scapy_append('wrpcap("efd.pcap", [Ether()/IP(src="0.0.0.0", dst="0.0.0.0")/("X"*26)])')
+        pcap = os.sep.join([self.output_path, "efd.pcap"])
+        self.tester.scapy_append('wrpcap("%s", [Ether()/IP(src="0.0.0.0", dst="0.0.0.0")/("X"*26)])' % pcap)
         self.tester.scapy_execute()
 
         tgen_input = []
         rx_port = self.tester.get_local_port(self.dut_ports[0])
         tx_port = self.tester.get_local_port(self.dut_ports[1])
 
-        tgen_input.append((tx_port, rx_port, "efd.pcap"))
-        tgen_input.append((rx_port, tx_port, "efd.pcap"))
+        pcap = os.sep.join([self.output_path, "efd.pcap"])
+        tgen_input.append((tx_port, rx_port, pcap))
+        tgen_input.append((rx_port, tx_port, pcap))
 
         cores = self.dut.get_core_list("1S/%dC/1T" % (node_num + 2), socket)
 
@@ -203,7 +211,12 @@ class TestEFD(TestCase, IxiaPacketGenerator):
             node_sessions.append(node_session)
             node_session.send_expect(node_cmd, "Finished Process Init", timeout=30)
 
-        _, pps = self.tester.traffic_generator_throughput(tgen_input, delay=10)
+        # clear streams before add new streams
+        self.tester.pktgen.clear_streams()
+        # run packet generator
+        streams = self.pktgen_helper.prepare_stream_from_tginput(tgen_input, 100,
+                                None, self.tester.pktgen)
+        _, pps = self.tester.pktgen.measure_throughput(stream_ids=streams)
 
         for node_session in node_sessions:
             node_session.send_expect("^C", "#")
@@ -214,21 +227,15 @@ class TestEFD(TestCase, IxiaPacketGenerator):
         pps /= 1000000.0
         return pps
 
-    def ip(self, port, frag, src, proto, tos, dst, chksum, len, options, version, flags, ihl, ttl, id):
-        self.add_tcl_cmd("protocol config -name ip")
-        self.add_tcl_cmd('ip config -sourceIpAddr "%s"' % src)
-        self.add_tcl_cmd("ip config -sourceIpAddrMode ipIdle")
-        self.add_tcl_cmd('ip config -destIpAddr "%s"' % dst)
-        self.add_tcl_cmd("ip config -destIpAddrMode ipIncrHost")
-        # increase number equal to flow number
-        self.add_tcl_cmd("ip config -destIpAddrRepeatCount %d" % self.flow_num)
-        self.add_tcl_cmd("ip config -ttl %d" % ttl)
-        self.add_tcl_cmd("ip config -totalLength %d" % len)
-        self.add_tcl_cmd("ip config -fragment %d" % frag)
-        self.add_tcl_cmd("ip config -ipProtocol ipV4ProtocolReserved255")
-        self.add_tcl_cmd("ip config -identifier %d" % id)
-        self.add_tcl_cmd("stream config -framesize %d" % (len + 18))
-        self.add_tcl_cmd("ip set %d %d %d" % (self.chasId, port['card'], port['port']))
+    def set_fields(self):
+        ''' set ip protocol field behavior '''
+        fields_config = {
+        'ip':  {
+            # self.flow_num not used by this suite
+            # 'dst': {'range': self.flow_num, 'action': 'inc'}
+            'dst': {'range': 64, 'action': 'inc'}
+        }, }
+        return fields_config
 
     def tear_down(self):
         """
-- 
2.17.1


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

* [dts] [next][PATCH V2 4/7] tests/fm10k_perf use pktgen API replace old module and fix some issue
  2019-05-31 17:19 [dts] [next][PATCH V2 1/7] tests/checksum_offload use pktgen API replace old module and fix some issue zhaomeijuan
  2019-05-31 17:19 ` [dts] [next][PATCH V2 2/7] tests/distributor " zhaomeijuan
  2019-05-31 17:19 ` [dts] [next][PATCH V2 3/7] tests/efd use pktgen API replace old module and fix pep8 issue zhaomeijuan
@ 2019-05-31 17:19 ` zhaomeijuan
  2019-05-31 17:19 ` [dts] [next][PATCH V2 5/7] tests/ipfrag " zhaomeijuan
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: zhaomeijuan @ 2019-05-31 17:19 UTC (permalink / raw)
  To: dts; +Cc: zhaomeijuan

*.remove old or unuse module and code  which 
replace it with pktgen API 
*.fix syntax error 
*.overwrite ip method 
*.fix pep8 issue

Signed-off-by: zhaomeijuan <meijuanx.zhao@intel.com>
---
 tests/TestSuite_fm10k_perf.py | 176 +++++++++++++++++++++-------------
 1 file changed, 111 insertions(+), 65 deletions(-)

diff --git a/tests/TestSuite_fm10k_perf.py b/tests/TestSuite_fm10k_perf.py
index b358f8a..b18d0d5 100644
--- a/tests/TestSuite_fm10k_perf.py
+++ b/tests/TestSuite_fm10k_perf.py
@@ -1,6 +1,6 @@
 # BSD LICENSE
 #
-# Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
+# Copyright(c) 2010-2019 Intel Corporation. All rights reserved.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -37,13 +37,14 @@ Layer-3 forwarding test script.
 import utils
 import string
 import re
+import os
 from test_case import TestCase
 from exception import VerifyFailure
 from settings import HEADER_SIZE
-from etgen import IxiaPacketGenerator
 from utils import *
+from pktgen import PacketGeneratorHelper
 
-class TestFM10kL3fwd(TestCase, IxiaPacketGenerator):
+class TestFM10kL3fwd(TestCase):
 
     path = "./examples/l3fwd/build/"
 
@@ -110,11 +111,10 @@ class TestFM10kL3fwd(TestCase, IxiaPacketGenerator):
         self.tester.extend_external_packet_generator(TestFM10kL3fwd, self)
         # Verify that enough ports are available
         self.verify(len(ports) >= 2, "Insufficient ports for speed testing")
-        
+
         netdev = self.dut.ports_info[ports[0]]['port']
-        
-        self.port_socket = netdev.socket
 
+        self.port_socket = netdev.socket
 
         # Verify that enough threads are available
         cores = self.dut.get_core_list("2S/8C/2T")
@@ -122,7 +122,7 @@ class TestFM10kL3fwd(TestCase, IxiaPacketGenerator):
 
         global valports
         valports = [_ for _ in ports if self.tester.get_local_port(_) != -1]
-        
+
         self.verify(len(valports) >= 2, "Insufficient active ports for speed testing")
 
         self.main_file = "examples/l3fwd/main.c"
@@ -132,14 +132,23 @@ class TestFM10kL3fwd(TestCase, IxiaPacketGenerator):
             self.dut.send_expect("sed -i -e 's/FM10K_TQDLOC_BASE_32_DESC/FM10K_TQDLOC_BASE_128_DESC/' %s" % self.pf_file, "# ")
             self.dut.send_expect("sed -i -e 's/FM10K_TQDLOC_SIZE_32_DESC/FM10K_TQDLOC_SIZE_128_DESC/' %s" % self.pf_file, "# ")
             self.dut.send_expect("sed -i -e 's/FM10K_TDLEN_ITR_SCALE_GEN3;$/FM10K_TDLEN_ITR_SCALE_GEN3 * 2;/' %s" % self.pf_file, "# ")
-            
+
             self.dut.build_install_dpdk(self.target)
 
         self.l3fwd_test_results = {'header': [],
-                                   'data': []}
 
         self.rebuild_l3fwd()
 
+        # get dts output path
+        if self.logger.log_path.startswith(os.sep):
+            self.output_path = self.logger.log_path
+        else:
+            cur_path = os.path.dirname(
+                                os.path.dirname(os.path.realpath(__file__)))
+            self.output_path = os.sep.join([cur_path, self.logger.log_path])
+        # create an instance to set stream field setting
+        self.pktgen_helper = PacketGeneratorHelper()
+
     def rebuild_l3fwd(self):
         pat = re.compile("P([0123])")
         # Prepare long prefix match table, replace P(x) port pattern
@@ -173,7 +182,7 @@ class TestFM10kL3fwd(TestCase, IxiaPacketGenerator):
         Return a list of packets that implements the flows described in the
         l3fwd test plan.
 
-        """   
+        """
         return [
             'IP(src="1.2.3.4",dst="11.100.0.1")',
             'IP(src="1.2.3.4",dst="11.101.0.1")',
@@ -236,9 +245,9 @@ class TestFM10kL3fwd(TestCase, IxiaPacketGenerator):
 
     def test_perf_fm10k_legacy_perf(self):
         # add setting for scatter
-        #self.dut.send_expect("sed -i -e '/.hw_ip_checksum = .*$/a\\.enable_scatter = 0,' %s" % self.main_file, "# ")
+        # self.dut.send_expect("sed -i -e '/.hw_ip_checksum = .*$/a\\.enable_scatter = 0,' %s" % self.main_file, "# ")
 
-#        mode_settings = [{'rxmode': 'default', 'txmode': 'default'}, {'rxmode': 'vector', 'txmode': 'vector'}]
+        # mode_settings = [{'rxmode': 'default', 'txmode': 'default'}, {'rxmode': 'vector', 'txmode': 'vector'}]
         mode_settings = [{'rxmode': 'default', 'txmode': 'default'}]
         for mode in mode_settings:
             self.fm10k_rxmode_set(mode = mode['rxmode'])
@@ -251,7 +260,7 @@ class TestFM10kL3fwd(TestCase, IxiaPacketGenerator):
                 for key in TestFM10kL3fwd.test_cases_2_ports.keys():
                     TestFM10kL3fwd.test_cases_2_ports[key].replace(" --enable-jumbo", "")
 
-            print GREEN("Performance test for rxmode %s txmode %s" %(mode['rxmode'], mode['txmode']))
+            print GREEN("Performance test for rxmode %s txmode %s" % (mode['rxmode'], mode['txmode']))
             self.perf_l3fwd_2ports()
 
         # remove setting for scatter
@@ -259,9 +268,9 @@ class TestFM10kL3fwd(TestCase, IxiaPacketGenerator):
 
     def test_perf_fm10k_vec_perf(self):
         # add setting for scatter
-        #self.dut.send_expect("sed -i -e '/.hw_ip_checksum = .*$/a\\.enable_scatter = 0,' %s" % self.main_file, "# ")
+        # self.dut.send_expect("sed -i -e '/.hw_ip_checksum = .*$/a\\.enable_scatter = 0,' %s" % self.main_file, "# ")
 
-#        mode_settings = [{'rxmode': 'default', 'txmode': 'default'}, {'rxmode': 'vector', 'txmode': 'vector'}]
+        # mode_settings = [{'rxmode': 'default', 'txmode': 'default'}, {'rxmode': 'vector', 'txmode': 'vector'}]
         mode_settings = [{'rxmode': 'vector', 'txmode': 'vector'}]
         for mode in mode_settings:
             self.fm10k_rxmode_set(mode = mode['rxmode'])
@@ -274,13 +283,12 @@ class TestFM10kL3fwd(TestCase, IxiaPacketGenerator):
                 for key in TestFM10kL3fwd.test_cases_2_ports.keys():
                     TestFM10kL3fwd.test_cases_2_ports[key].replace(" --enable-jumbo", "")
 
-            print GREEN("Performance test for rxmode %s txmode %s" %(mode['rxmode'], mode['txmode']))
+            print GREEN("Performance test for rxmode %s txmode %s" % (mode['rxmode'], mode['txmode']))
             self.perf_l3fwd_2ports()
 
         # remove setting for scatter
         self.dut.send_expect("sed -i -e '/.enable_scatter= .*$/d' %s" % self.main_file, "# ")
 
-
     def perf_l3fwd_2ports(self):
         """
         L3fwd main 2 ports.
@@ -288,31 +296,43 @@ class TestFM10kL3fwd(TestCase, IxiaPacketGenerator):
 
         header_row = ["Frame", "mode", "S/C/T", "Mpps", "% linerate", "latency_max(us)", "latency_min(us)", "latency_avg(us)"]
         self.l3fwd_test_results['header'] = header_row
-        utils.result_table_create(header_row)
+        self.result_table_create(header_row)
         self.l3fwd_test_results['data'] = []
 
-	mac = ["02:00:00:00:00:00", "02:00:00:00:00:01"]
+        mac = ["02:00:00:00:00:00", "02:00:00:00:00:01"]
         for frame_size in TestFM10kL3fwd.frame_sizes:
 
             # Prepare traffic flow
             payload_size = frame_size -  \
                 HEADER_SIZE['ip'] - HEADER_SIZE['eth']
+            flows = []
+            pcaps = {}
             for _port in range(2):
                 dmac = self.dut.get_mac_address(valports[_port])
-                flows = ['Ether(dst="%s", src="%s")/%s/("X"*%d)' % (dmac, mac[_port], flow, payload_size) for flow in self.flows()[_port *2:(_port +1)*2]]
-                self.tester.scapy_append('wrpcap("dst%d.pcap", [%s])' %(valports[_port],string.join(flows,',')))
-            self.tester.scapy_execute() 
+                cnt = 0
+                for layer in self.flows()[_port * 2: (_port + 1) * 2]:
+                    flow = 'Ether(dst="%s", src="%s")/%s/("X"*%d)' % (
+                                        dmac, mac[_port], flow, payload_size)
+                    flows.append(flow)
+                    pcap = os.sep.join([
+                                self.output_path,
+                                "dst{0}_{1}.pcap".format(valports[_port], cnt)])
+                    self.tester.scapy_append('wrpcap("%s", [%s])' % (pcap, flow))
+                    self.tester.scapy_execute()
+                    if valports[_port] not in pcaps:
+                        pcaps[valports[_port]] = []
+                    pcaps[valports[_port]].append(pcap)
+                    cnt += 1
 
             self.rst_report("Flows for 2 ports, %d frame size.\n" % (frame_size),
                        annex=True)
             self.rst_report("%s" % string.join(flows, '\n'),
                        frame=True, annex=True)
 
-
             # Prepare the command line
             global corelist
             pat = re.compile("P([0123]),([01234567]),(C\{\d.\d.\d\})")
-            
+
             pat2 = re.compile("C\{\d")
             repl1 = "C{" + str(self.port_socket)
 
@@ -322,7 +342,7 @@ class TestFM10kL3fwd(TestCase, IxiaPacketGenerator):
                 corelist = []
                 while pat.search(rtCmdLines[key]):
                     # Change the socket to the NIC's socket
-                    if key.find('1S')>=0:
+                    if key.find('1S') >= 0:
                         rtCmdLines[key] = pat2.sub(repl1, rtCmdLines[key])
                     rtCmdLines[key] = pat.sub(self.repl, rtCmdLines[key])
 
@@ -330,7 +350,7 @@ class TestFM10kL3fwd(TestCase, IxiaPacketGenerator):
                 coreMask[key] = utils.create_mask(set(corelist))
 
             # measure by two different mode
-            #methods = TestFM10kL3fwd.methods
+            # methods = TestFM10kL3fwd.methods
 
             for mode in TestFM10kL3fwd.methods:
 
@@ -365,17 +385,30 @@ class TestFM10kL3fwd(TestCase, IxiaPacketGenerator):
                             txIntf = self.tester.get_local_port(valports[rxPort - 1])
 
                         rxIntf = self.tester.get_local_port(valports[rxPort])
-                        if rxPort % 2 == 0: 
-                            tgenInput.append((txIntf, rxIntf, "dst%d.pcap" %valports[rxPort+1]))
-                        else: 
-                            tgenInput.append((txIntf, rxIntf, "dst%d.pcap" %valports[rxPort-1]))
+                        port_id = valports[rxPort+1] if rxPort % 2 == 0 else \
+                                  valports[rxPort-1]
+                        for pcap in pcaps[port_id]:
+                            tgenInput.append((txIntf, rxIntf, pcap))
+
+                    vm_config = self.set_fields()
+                    # clear streams before add new streams
+                    self.tester.pktgen.clear_streams()
+                    # run packet generator
+                    streams = self.pktgen_helper.prepare_stream_from_tginput(tgenInput, 100,
+                                            vm_config, self.tester.pktgen)
+                    _, pps = self.tester.pktgen.measure_throughput(stream_ids=streams)
 
-                    _, pps = self.tester.traffic_generator_throughput(tgenInput)
                     self.verify(pps > 0, "No traffic detected")
                     pps /= 1000000.0
                     linerate = self.wirespeed(self.nic, frame_size, 2)
                     pct = pps * 100 / linerate
-                    latencys = self.tester.traffic_generator_latency(tgenInput)
+
+                    # clear streams before add new streams
+                    self.tester.pktgen.clear_streams()
+                    # run packet generator
+                    streams = self.pktgen_helper.prepare_stream_from_tginput(tgenInput, 100,
+                                                 vm_config, self.tester.pktgen)
+                    latencys = self.tester.pktgen.measure_latency(stream_ids=streams)
 
                     index += 1
 
@@ -403,18 +436,32 @@ class TestFM10kL3fwd(TestCase, IxiaPacketGenerator):
             # Prepare traffic flow
             payload_size = frame_size -  \
                 HEADER_SIZE['ip'] - HEADER_SIZE['eth']
+            pcaps = {}
+            flows = []
             for _port in range(2):
-                dmac = self.dut.get_mac_address(valports[_port])
-                flows = ['Ether(dst="%s")/%s/("X"*%d)' % (dmac, flow, payload_size) for flow in self.flows()[_port *2:(_port +1)*2]]
-                self.tester.scapy_append('wrpcap("dst%d.pcap", [%s])' %(valports[_port],string.join(flows,',')))
-            self.tester.scapy_execute()
+                index = valports[_port]
+                dmac = self.dut.get_mac_address(index)
+                cnt = 0
+                for layer in self.flows()[_port * 2: (_port + 1) * 2]:
+                    flow = 'Ether(dst="%s")/%s/("X"*%d)' % (
+                                                    dmac, layer, payload_size)
+                    flows.append(flow)
+                    pcap = os.sep.join([
+                                self.output_path,
+                                "dst{0}_{1}.pcap".format(index, cnt)])
+                    self.tester.scapy_append('wrpcap("%s", [%s])' % (
+                                                pcap, flow))
+                    self.tester.scapy_execute()
+                    if index not in pcaps:
+                        pcaps[index] = []
+                    pcaps[index].append(pcap)
+                    cnt += 1
 
             self.rst_report("Flows for 2 ports, %d frame size.\n" % (frame_size),
                        annex=True)
             self.rst_report("%s" % string.join(flows, '\n'),
                        frame=True, annex=True)
 
-
             # Prepare the command line
             global corelist
             pat = re.compile("P([0123]),([0123]),(C\{\d.\d.\d\})")
@@ -428,7 +475,7 @@ class TestFM10kL3fwd(TestCase, IxiaPacketGenerator):
                 corelist = []
                 while pat.search(rtCmdLines[key]):
                     # Change the socket to the NIC's socket
-                    if key.find('1S')>=0:
+                    if key.find('1S') >= 0:
                         rtCmdLines[key] = pat2.sub(repl1, rtCmdLines[key])
                     rtCmdLines[key] = pat.sub(self.repl, rtCmdLines[key])
 
@@ -443,7 +490,7 @@ class TestFM10kL3fwd(TestCase, IxiaPacketGenerator):
                 subtitle = []
                 for cores in rtCmdLines.keys():
 
-                    #in order to save time, only some of the cases will be run.
+                    # in order to save time, only some of the cases will be run.
                     if mode == "lpm" and (cores == "1S/1C/1T" or cores == "1S/4C/1T"):
                         info = "Executing l3fwd using %s mode, 2 ports, %s and %d frame size.\n" % (
                                mode, cores, frame_size)
@@ -451,13 +498,11 @@ class TestFM10kL3fwd(TestCase, IxiaPacketGenerator):
                         self.logger.info(info)
                         self.rst_report(info, annex=True)
 
-
                         subtitle.append(cores)
                         cmdline = rtCmdLines[cores] % (TestFM10kL3fwd.path + "l3fwd_" + mode, coreMask[cores],
-                                                       self.dut.get_memory_channels(), utils.create_mask(valports[:2]))
 
                         if frame_size > 1518:
-                            cmdline = cmdline + "  --max-pkt-len %d" % frame_size
+                            cmdline = cmdline + "--max-pkt-len %d" % frame_size
                         self.rst_report(cmdline + "\n", frame=True, annex=True)
 
                         out = self.dut.send_expect(cmdline, "L3FWD:", 120)
@@ -472,12 +517,22 @@ class TestFM10kL3fwd(TestCase, IxiaPacketGenerator):
                                 txIntf = self.tester.get_local_port(valports[rxPort - 1])
 
                             rxIntf = self.tester.get_local_port(valports[rxPort])
-                            if rxPort % 2 == 0:
-                                tgenInput.append((txIntf, rxIntf, "dst%d.pcap" %valports[rxPort+1]))
-                            else:
-                                tgenInput.append((txIntf, rxIntf, "dst%d.pcap" %valports[rxPort-1]))
 
-                        zero_loss_rate, tx_pkts, rx_pkts = self.tester.run_rfc2544(tgenInput, delay=5, permit_loss_rate=0.01)
+                            port_id = valports[rxPort+1] if rxPort % 2 == 0 else \
+                                      valports[rxPort-1]
+                            for pcap in pcaps[port_id]:
+                                tgenInput.append((txIntf, rxIntf, pcap))
+
+                        vm_config = self.set_fields()
+                        # clear streams before add new streams
+                        self.tester.pktgen.clear_streams()
+                        # run packet generator
+                        streams = self.pktgen_helper.prepare_stream_from_tginput(tgenInput,
+                                            100, vm_config, self.tester.pktgen)
+                        # set traffic option
+                        traffic_opt = {'pdr': 0.01, 'duration': 5}
+                        zero_loss_rate, tx_pkts, rx_pkts = self.tester.pktgen.measure_rfc2544(stream_ids=streams, options=traffic_opt)
+
                         loss_pkts = tx_pkts - rx_pkts
                         self.dut.send_expect("^C", "#")
 
@@ -498,7 +553,7 @@ class TestFM10kL3fwd(TestCase, IxiaPacketGenerator):
     def test_perf_rfc2544_vec(self):
         # add setting for scatter
 
-        #mode_settings = [{'rxmode': 'default', 'txmode': 'default'}, {'rxmode': 'vector', 'txmode': 'vector'}]
+        # mode_settings = [{'rxmode': 'default', 'txmode': 'default'}, {'rxmode': 'vector', 'txmode': 'vector'}]
         mode_settings = [{'rxmode': 'vector', 'txmode': 'vector'}]
         for mode in mode_settings:
             self.fm10k_rxmode_set(mode = mode['rxmode'])
@@ -511,7 +566,7 @@ class TestFM10kL3fwd(TestCase, IxiaPacketGenerator):
                 for key in TestFM10kL3fwd.test_cases_2_ports.keys():
                     TestFM10kL3fwd.test_cases_2_ports[key].replace(" --enable-jumbo", "")
 
-            print GREEN("Performance test for rxmode %s txmode %s" %(mode['rxmode'], mode['txmode']))
+            print GREEN("Performance test for rxmode %s txmode %s" % (mode['rxmode'], mode['txmode']))
             self.perf_rfc2544()
 
         # remove setting for scatter
@@ -520,7 +575,7 @@ class TestFM10kL3fwd(TestCase, IxiaPacketGenerator):
     def test_perf_rfc2544_legacy(self):
         # add setting for scatter
 
-        #mode_settings = [{'rxmode': 'default', 'txmode': 'default'}, {'rxmode': 'vector', 'txmode': 'vector'}]
+        # mode_settings = [{'rxmode': 'default', 'txmode': 'default'}, {'rxmode': 'vector', 'txmode': 'vector'}]
         mode_settings = [{'rxmode': 'default', 'txmode': 'default'}]
         for mode in mode_settings:
             self.fm10k_rxmode_set(mode = mode['rxmode'])
@@ -533,26 +588,17 @@ class TestFM10kL3fwd(TestCase, IxiaPacketGenerator):
                 for key in TestFM10kL3fwd.test_cases_2_ports.keys():
                     TestFM10kL3fwd.test_cases_2_ports[key].replace(" --enable-jumbo", "")
 
-            print GREEN("Performance test for rxmode %s txmode %s" %(mode['rxmode'], mode['txmode']))
+            print GREEN("Performance test for rxmode %s txmode %s" % (mode['rxmode'], mode['txmode']))
             self.perf_rfc2544()
 
         # remove setting for scatter
         self.dut.send_expect("sed -i -e '/.enable_scatter= .*$/d' %s" % self.main_file, "# ")
 
-
-    def ip(self, port, frag, src, proto, tos, dst, chksum, len, options, version, flags, ihl, ttl, id):
-        self.add_tcl_cmd("protocol config -name ip")
-        self.add_tcl_cmd('ip config -sourceIpAddr "%s"' % src)
-        self.add_tcl_cmd("ip config -sourceIpAddrMode ipRandom")
-        self.add_tcl_cmd('ip config -destIpAddr "%s"' % dst)
-        self.add_tcl_cmd("ip config -destIpAddrMode ipIdle")
-        self.add_tcl_cmd("ip config -ttl %d" % ttl)
-        self.add_tcl_cmd("ip config -totalLength %d" % len)
-        self.add_tcl_cmd("ip config -fragment %d" % frag)
-        self.add_tcl_cmd("ip config -ipProtocol ipV4ProtocolReserved255")
-        self.add_tcl_cmd("ip config -identifier %d" % id)
-        self.add_tcl_cmd("stream config -framesize %d" % (len + 18))
-        self.add_tcl_cmd("ip set %d %d %d" % (self.chasId, port['card'], port['port']))
+    def set_fields(self):
+        ''' set ip protocol field behavior '''
+        fields_config = {
+        'ip':  {'src': {'action': 'random'}}, }
+        return fields_config
 
     def tear_down(self):
         """
-- 
2.17.1


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

* [dts] [next][PATCH V2 5/7] tests/ipfrag use pktgen API replace old module and fix some issue
  2019-05-31 17:19 [dts] [next][PATCH V2 1/7] tests/checksum_offload use pktgen API replace old module and fix some issue zhaomeijuan
                   ` (2 preceding siblings ...)
  2019-05-31 17:19 ` [dts] [next][PATCH V2 4/7] tests/fm10k_perf use pktgen API replace old module and fix some issue zhaomeijuan
@ 2019-05-31 17:19 ` zhaomeijuan
  2019-05-31 17:19 ` [dts] [next][PATCH V2 6/7] tests/kni " zhaomeijuan
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: zhaomeijuan @ 2019-05-31 17:19 UTC (permalink / raw)
  To: dts; +Cc: zhaomeijuan

*.remove old or unused module and code  which 
replace it with pktgen API 
*.change max framesize as 1518 
*.quit task before start another
*.fix pep8 issue

Signed-off-by: zhaomeijuan <meijuanx.zhao@intel.com>
---
 tests/TestSuite_ipfrag.py | 67 +++++++++++++++++++++++++--------------
 1 file changed, 44 insertions(+), 23 deletions(-)

diff --git a/tests/TestSuite_ipfrag.py b/tests/TestSuite_ipfrag.py
index 9f47a2c..a77049c 100644
--- a/tests/TestSuite_ipfrag.py
+++ b/tests/TestSuite_ipfrag.py
@@ -38,8 +38,12 @@ import utils
 import string
 import re
 import time
+import os
 from settings import HEADER_SIZE
 from packet import Packet
+from pktgen import PacketGeneratorHelper
+from test_case import TestCase
+
 
 lpm_table_ipv4 = [
     "{IPv4(100,10,0,0), 16, P1}",
@@ -63,8 +67,6 @@ lpm_table_ipv6 = [
     "{{8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, 48, P0}",
 ]
 
-from test_case import TestCase
-
 
 class TestIpfrag(TestCase):
 
@@ -84,7 +86,6 @@ class TestIpfrag(TestCase):
 
         # Based on h/w type, choose how many ports to use
         ports = self.dut.get_ports()
-        print ports
 
         # Verify that enough ports are available
         self.verify(len(ports) >= 2, "Insufficient ports for testing")
@@ -109,14 +110,12 @@ l3fwd_ipv4_route_array[] = {\\\n"
             rtLpmTbl[idx] = pat.sub(self.portRepl, rtLpmTbl[idx])
             lpmStr_ipv4 = lpmStr_ipv4 + ' ' * 4 + rtLpmTbl[idx] + ",\\\n"
         lpmStr_ipv4 = lpmStr_ipv4 + "};"
-        print lpmStr_ipv4
         lpmStr_ipv6 = "static struct l3fwd_ipv6_route l3fwd_ipv6_route_array[] = {\\\n"
         rtLpmTbl = list(lpm_table_ipv6)
         for idx in range(len(rtLpmTbl)):
             rtLpmTbl[idx] = pat.sub(self.portRepl, rtLpmTbl[idx])
             lpmStr_ipv6 = lpmStr_ipv6 + ' ' * 4 + rtLpmTbl[idx] + ",\\\n"
         lpmStr_ipv6 = lpmStr_ipv6 + "};"
-        print lpmStr_ipv6
         self.dut.send_expect(r"sed -i '/l3fwd_ipv4_route_array\[\].*{/,/^\}\;/c\\%s' examples/ip_fragmentation/main.c" % lpmStr_ipv4, "# ")
         self.dut.send_expect(r"sed -i '/l3fwd_ipv6_route_array\[\].*{/,/^\}\;/c\\%s' examples/ip_fragmentation/main.c" % lpmStr_ipv6, "# ")
         # make application
@@ -140,6 +139,16 @@ l3fwd_ipv4_route_array[] = {\\\n"
         self.rxItf = self.tester.get_interface(self.tester.get_local_port(P1))
         self.dmac = self.dut.get_mac_address(P0)
 
+        # get dts output path
+        if self.logger.log_path.startswith(os.sep):
+            self.output_path = self.logger.log_path
+        else:
+            cur_path = os.path.dirname(
+                                os.path.dirname(os.path.realpath(__file__)))
+            self.output_path = os.sep.join([cur_path, self.logger.log_path])
+        # create an instance to set stream field setting
+        self.pktgen_helper = PacketGeneratorHelper()
+
     def functional_check_ipv4(self, pkt_sizes, burst=1, flag=None):
         """
         Perform functional fragmentation checks.
@@ -200,9 +209,9 @@ l3fwd_ipv4_route_array[] = {\\\n"
         for size in pkt_sizes[::burst]:
             # simulate to set TG properties
             if flag == 'frag':
-                # each packet max len: 1522 - 18 (eth) - 40 (ipv6) - 8 (ipv6 ext hdr) = 1456
-                expPkts = (size - HEADER_SIZE['eth'] - HEADER_SIZE['ipv6']) / 1456
-                if (size - HEADER_SIZE['eth'] - HEADER_SIZE['ipv6']) % 1456:
+                # each packet max len: 1518 - 18 (eth) - 40 (ipv6) - 8 (ipv6 ext hdr) = 1452
+                expPkts = (size - HEADER_SIZE['eth'] - HEADER_SIZE['ipv6']) / 1452
+                if (size - HEADER_SIZE['eth'] - HEADER_SIZE['ipv6']) % 1452:
                     expPkts += 1
                 val = 0
             else:
@@ -296,35 +305,47 @@ l3fwd_ipv4_route_array[] = {\\\n"
 
         portmask = utils.create_mask([P0, P1])
 
+        self.dut.send_expect("^c", "# ", 120)
         self.dut.send_expect("examples/ip_fragmentation/build/ip_fragmentation -c %s -n %d -- -p %s -q %s" % (
             core_mask, self.dut.get_memory_channels(), portmask, num_pthreads), "IP_FRAG:", 120)
 
         result = [2, lcore, num_pthreads]
         for size in size_list:
             dmac = self.dut.get_mac_address(P0)
-            flows = ['Ether(dst="%s")/IP(src="1.2.3.4", dst="100.10.0.1", flags=0)/("X"*%d)' % (dmac, size - 38),
-                     'Ether(dst="%s")/IP(src="1.2.3.4", dst="100.20.0.1", flags=0)/("X"*%d)' % (dmac, size - 38),
-                     'Ether(dst="%s")/IPv6(dst="101:101:101:101:101:101:101:101",src="ee80:ee80:ee80:ee80:ee80:ee80:ee80:ee80")/Raw(load="X"*%d)' % (dmac, size - 58),
-                     'Ether(dst="%s")/IPv6(dst="201:101:101:101:101:101:101:101",src="ee80:ee80:ee80:ee80:ee80:ee80:ee80:ee80")/Raw(load="X"*%d)' % (dmac, size - 58)]
-            self.tester.scapy_append('wrpcap("test1.pcap", [%s])' % string.join(flows, ','))
+            flows_p0 = ['Ether(dst="%s")/IP(src="1.2.3.4", dst="100.10.0.1", flags=0)/("X"*%d)' % (dmac, size - 38),
+                        'Ether(dst="%s")/IP(src="1.2.3.4", dst="100.20.0.1", flags=0)/("X"*%d)' % (dmac, size - 38),
+                        'Ether(dst="%s")/IPv6(dst="101:101:101:101:101:101:101:101",src="ee80:ee80:ee80:ee80:ee80:ee80:ee80:ee80")/Raw(load="X"*%d)' % (dmac, size - 58),
+                        'Ether(dst="%s")/IPv6(dst="201:101:101:101:101:101:101:101",src="ee80:ee80:ee80:ee80:ee80:ee80:ee80:ee80")/Raw(load="X"*%d)' % (dmac, size - 58)]
 
             # reserved for rx/tx bidirection test
             dmac = self.dut.get_mac_address(P1)
-            flows = ['Ether(dst="%s")/IP(src="1.2.3.4", dst="100.30.0.1", flags=0)/("X"*%d)' % (dmac, size - 38),
-                     'Ether(dst="%s")/IP(src="1.2.3.4", dst="100.40.0.1", flags=0)/("X"*%d)' % (dmac, size - 38),
-                     'Ether(dst="%s")/IPv6(dst="301:101:101:101:101:101:101:101",src="ee80:ee80:ee80:ee80:ee80:ee80:ee80:ee80")/Raw(load="X"*%d)' % (dmac, size - 58),
-                     'Ether(dst="%s")/IPv6(dst="401:101:101:101:101:101:101:101",src="ee80:ee80:ee80:ee80:ee80:ee80:ee80:ee80")/Raw(load="X"*%d)' % (dmac, size - 58)]
-            self.tester.scapy_append('wrpcap("test2.pcap", [%s])' % string.join(flows, ','))
+            flows_p1 = ['Ether(dst="%s")/IP(src="1.2.3.4", dst="100.30.0.1", flags=0)/("X"*%d)' % (dmac, size - 38),
+                        'Ether(dst="%s")/IP(src="1.2.3.4", dst="100.40.0.1", flags=0)/("X"*%d)' % (dmac, size - 38),
+                        'Ether(dst="%s")/IPv6(dst="301:101:101:101:101:101:101:101",src="ee80:ee80:ee80:ee80:ee80:ee80:ee80:ee80")/Raw(load="X"*%d)' % (dmac, size - 58),
+                        'Ether(dst="%s")/IPv6(dst="401:101:101:101:101:101:101:101",src="ee80:ee80:ee80:ee80:ee80:ee80:ee80:ee80")/Raw(load="X"*%d)' % (dmac, size - 58)]
+            flow_len = len(flows_p0)
+            tgenInput = []
+            for i in range(flow_len):
 
-            self.tester.scapy_execute()
+                pcap0 = os.sep.join([self.output_path, "p0_{}.pcap".format(i)])
+                self.tester.scapy_append('wrpcap("%s", [%s])' % (pcap0, flows_p0[i]))
+                pcap1 = os.sep.join([self.output_path, "p1_{}.pcap".format(i)])
+                self.tester.scapy_append('wrpcap("%s", [%s])' % (pcap1, flows_p1[i]))
+                self.tester.scapy_execute()
 
-            tgenInput = []
-            tgenInput.append((self.tester.get_local_port(P0), self.tester.get_local_port(P1), "test1.pcap"))
-            tgenInput.append((self.tester.get_local_port(P1), self.tester.get_local_port(P0), "test2.pcap"))
+                tgenInput.append((self.tester.get_local_port(P0), self.tester.get_local_port(P1), pcap0))
+                tgenInput.append((self.tester.get_local_port(P1), self.tester.get_local_port(P0), pcap1))
 
             factor = (size + 1517) / 1518
             # wireSpd = 2 * 10000.0 / ((20 + size) * 8)
-            Bps[str(size)], Pps[str(size)] = self.tester.traffic_generator_throughput(tgenInput)
+
+            # clear streams before add new streams
+            self.tester.pktgen.clear_streams()
+            # run packet generator
+            streams = self.pktgen_helper.prepare_stream_from_tginput(tgenInput, 100,
+                                    None, self.tester.pktgen)
+            Bps[str(size)], Pps[str(size)] = self.tester.pktgen.measure_throughput(stream_ids=streams)
+
             self.verify(Pps[str(size)] > 0, "No traffic detected")
             Pps[str(size)] *= 1.0 / factor / 1000000
             Pct[str(size)] = (1.0 * Bps[str(size)] * 100) / (2 * 10000000000)
-- 
2.17.1


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

* [dts] [next][PATCH V2 6/7] tests/kni use pktgen API replace old module and fix some issue
  2019-05-31 17:19 [dts] [next][PATCH V2 1/7] tests/checksum_offload use pktgen API replace old module and fix some issue zhaomeijuan
                   ` (3 preceding siblings ...)
  2019-05-31 17:19 ` [dts] [next][PATCH V2 5/7] tests/ipfrag " zhaomeijuan
@ 2019-05-31 17:19 ` zhaomeijuan
  2019-05-31 17:19 ` [dts] [next][PATCH V2 7/7] tests/l2fwd use pktgen API replace old module and fix pep8 issue zhaomeijuan
  2019-06-05  1:40 ` [dts] [next][PATCH V2 1/7] tests/checksum_offload use pktgen API replace old module and fix some issue Tu, Lijuan
  6 siblings, 0 replies; 8+ messages in thread
From: zhaomeijuan @ 2019-05-31 17:19 UTC (permalink / raw)
  To: dts; +Cc: zhaomeijuan

*.remove old or unused module and code which 
replace it with pktgen API 
*.fix syntax error 
*.replace print with logger 
*.fix pep8 issue

Signed-off-by: zhaomeijuan <meijuanx.zhao@intel.com>
---
 tests/TestSuite_kni.py | 160 +++++++++++++++++++++++++++--------------
 1 file changed, 106 insertions(+), 54 deletions(-)

diff --git a/tests/TestSuite_kni.py b/tests/TestSuite_kni.py
index 2581802..0faa719 100644
--- a/tests/TestSuite_kni.py
+++ b/tests/TestSuite_kni.py
@@ -1,7 +1,7 @@
 # <COPYRIGHT_TAG>
 # BSD LICENSE
 #
-# Copyright(c) 2010-2015 Intel Corporation. All rights reserved.
+# Copyright(c) 2010-2019 Intel Corporation. All rights reserved.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -38,8 +38,11 @@ Test Kernel NIC Interface.
 
 import utils
 import re
+import os
 import time
 from random import randint
+from pktgen import PacketGeneratorHelper
+from test_case import TestCase
 
 dut_ports = []
 port_virtual_interaces = []
@@ -231,9 +234,6 @@ stress_modes_output = [{'lo_mode': None, 'kthread_mode': None,
                         'output': 'KNI.* Incognizant parameter, loopback disabled'}
                        ]
 
-
-from test_case import TestCase
-
 #
 #
 # Test class.
@@ -271,6 +271,16 @@ class TestKni(TestCase):
         self.dut.send_expect("service iptables stop", "# ")
         self.dut.send_expect("service firewalld stop", "# ")
 
+        # get dts output path
+        if self.logger.log_path.startswith(os.sep):
+            self.output_path = self.logger.log_path
+        else:
+            cur_path = os.path.dirname(
+                                os.path.dirname(os.path.realpath(__file__)))
+            self.output_path = os.sep.join([cur_path, self.logger.log_path])
+        # create an instance to set stream field setting
+        self.pktgen_helper = PacketGeneratorHelper()
+
     def set_up(self):
         """
         Run before each test case.
@@ -316,9 +326,9 @@ class TestKni(TestCase):
         if kthread_mode == 'single':
             kthread_mask = utils.create_mask(self.config['kernel_cores'])
             out = self.dut.send_expect(
-                "taskset -p %s `pgrep -fl kni_single | awk '{print $1}'`" % kthread_mask, "#")
+                "taskset -p `pgrep -fl kni_single | awk '{print $1}'`", "#")
             self.verify(
-                'new affinity mask' in out, 'Unable to set core affinity')
+                'current affinity mask' in out, 'Unable to set core affinity')
 
         return out_kni
 
@@ -594,13 +604,13 @@ class TestKni(TestCase):
             # remove ip from tester
             self.tester.send_expect(
                  "ip addr del 192.168.%d.2 dev %s" % (port, tx_interface), "# ")
-          
+
         for port in self.config['ports']:
             tx_port = self.tester.get_local_port(port)
             tx_interface = self.tester.get_interface(tx_port)
             self.tester.disable_ipv6(tx_interface)
             time.sleep(1)
-        
+
     def test_tcpdump(self):
         """
         Tcpdump support KNI.
@@ -677,7 +687,7 @@ class TestKni(TestCase):
                         "'ethtool -i' not supported")
 
             # Request pause parameters
-            with open("/usr/include/linux/ethtool.h","r") as ethtool_h:
+            with open("/usr/include/linux/ethtool.h", "r") as ethtool_h:
                 ethtool_contents = ethtool_h.read()
                 GSET = "ETHTOOL_GLINKSETTINGS"
                 SSET = "ETHTOOL_SLINKSETTINGS"
@@ -724,7 +734,7 @@ class TestKni(TestCase):
             out = self.dut.send_expect("ethtool -d %s" % virtual_interface,
                                        "# ")
             expectstring = "0x00000: CTRL.*0x00008: STATUS"
-            self.verify(len(re.findall(expectstring, out , re.DOTALL)) > 0, "'ethtool -d' not supported")
+            self.verify(len(re.findall(expectstring, out, re.DOTALL)) > 0, "'ethtool -d' not supported")
             self.verify("Operation not supported" not in out,
                         "'ethtool -d' not supported")
 
@@ -767,22 +777,22 @@ class TestKni(TestCase):
             self.tester.scapy_append('srcmac = "%s"' % tx_mac)
 
             self.tester.scapy_append(
-                'sendp([Ether(src = srcmac,dst=dstmac)/IP()/UDP()/("X"*28)],iface="%s")' % tx_interface)
+                'sendp([Ether(src = srcmac,dst=dstmac)/IP()/UDP()/("X"*28)],iface="%s",count=200)' % tx_interface)
             self.tester.scapy_append(
-                'sendp([Ether(src = srcmac,dst=dstmac)/IP()/TCP()/("X"*28)],iface="%s")' % tx_interface)
+                'sendp([Ether(src = srcmac,dst=dstmac)/IP()/TCP()/("X"*28)],iface="%s",count=200)' % tx_interface)
             self.tester.scapy_append(
-                'sendp([Ether(src = srcmac,dst=dstmac)/IP()/ICMP()/("X"*28)],iface="%s")' % tx_interface)
+                'sendp([Ether(src = srcmac,dst=dstmac)/IP()/ICMP()/("X"*28)],iface="%s",count=200)' % tx_interface)
             self.tester.scapy_append(
-                'sendp([Ether(src = srcmac,dst=dstmac)/IP()/("X"*38)],iface="%s")' % tx_interface)
+                'sendp([Ether(src = srcmac,dst=dstmac)/IP()/("X"*38)],iface="%s",count=200)' % tx_interface)
             self.tester.scapy_append(
-                'sendp([Ether(src = srcmac,dst=dstmac)/("X"*46)],iface="%s")' % tx_interface)
+                'sendp([Ether(src = srcmac,dst=dstmac)/("X"*46)],iface="%s",count=200)' % tx_interface)
             self.tester.scapy_execute()
 
             out = self.dut.send_expect("ifconfig %s" % virtual_interface, "# ")
             m = re.search(rx_match, out)
             rx_packets = int(m.group(1))
 
-            self.verify(rx_packets == (previous_rx_packets + 5),
+            self.verify(rx_packets == (previous_rx_packets + 1000),
                         "Rx statistics error in iface %s" % virtual_interface)
 
         self.dut.kill_all()
@@ -836,7 +846,7 @@ class TestKni(TestCase):
             total_cores = len(self.config['tx_cores'] + self.config[
                               'rx_cores'] + self.config['kernel_cores'])
             if total_cores > self.dut_physical_cores():
-                print utils.RED("Skiping step %s (%d cores needed, got %d)" %
+                self.logger.info("Skiping step %s (%d cores needed, got %d)" %
                               (step['config'], total_cores,
                                self.dut_physical_cores())
                               )
@@ -862,14 +872,20 @@ class TestKni(TestCase):
                     self.tester.scapy_append('dstmac = "%s"' % rx_mac)
                     self.tester.scapy_append(
                         'flows = [Ether(dst=dstmac)/IP()/("X"*%d)]' % payload_size)
-                    self.tester.scapy_append(
-                        'wrpcap("tester%d.pcap",flows)' % tx_port)
+                    pcap = os.sep.join([self.output_path, "tester{0}.pcap".format(tx_port)])
+                    self.tester.scapy_append('wrpcap("%s",flows)' % pcap)
                     self.tester.scapy_execute()
-                    tgen_input.append(
-                        (tx_port, tx_port, "tester%d.pcap" % tx_port))
+                    tgen_input.append((tx_port, tx_port, pcap))
 
                 time.sleep(1)
-                _, pps = self.tester.traffic_generator_throughput(tgen_input)
+
+                # clear streams before add new streams
+                self.tester.pktgen.clear_streams()
+                # run packet generator
+                streams = self.pktgen_helper.prepare_stream_from_tginput(tgen_input, 100,
+                                        None, self.tester.pktgen)
+                _, pps = self.tester.pktgen.measure_throughput(stream_ids=streams)
+
                 pps_results.append(float(pps) / 1000000)
 
             ports_number = len(self.config['ports'])
@@ -888,8 +904,9 @@ class TestKni(TestCase):
         self.result_table_create(bridge_perf_results_header)
 
         self.tester.scapy_append('srcmac="00:00:00:00:00:01"')
+        pcap = os.sep.join([self.output_path, "kni.pcap"])
         self.tester.scapy_append(
-            'wrpcap("kni.pcap", [Ether(src=srcmac, dst="ff:ff:ff:ff:ff:ff")/IP(len=46)/UDP()/("X"*18)])')
+            'wrpcap("%s", [Ether(src=srcmac, dst="ff:ff:ff:ff:ff:ff")/IP(len=46)/UDP()/("X"*18)])' % pcap)
         self.tester.scapy_execute()
 
         for step in bridge_performance_steps:
@@ -899,7 +916,7 @@ class TestKni(TestCase):
             total_cores = len(self.config['tx_cores'] + self.config[
                               'rx_cores'] + self.config['kernel_cores'])
             if total_cores > self.dut_physical_cores():
-                print utils.RED("Skiping step %s (%d cores needed, got %d)" %
+                self.logger.info("Skiping step %s (%d cores needed, got %d)" %
                               (step['config'], total_cores,
                                self.dut_physical_cores())
                               )
@@ -933,13 +950,18 @@ class TestKni(TestCase):
             rx_port = self.tester.get_local_port(self.config['ports'][1])
 
             tgenInput = []
-            tgenInput.append((tx_port, rx_port, "kni.pcap"))
+            tgenInput.append((tx_port, rx_port, pcap))
 
             if step['flows'] == 2:
-                tgenInput.append((rx_port, tx_port, "kni.pcap"))
-
+                tgenInput.append((rx_port, tx_port, pcap))
             time.sleep(1)
-            _, pps = self.tester.traffic_generator_throughput(tgenInput)
+
+            # clear streams before add new streams
+            self.tester.pktgen.clear_streams()
+            # run packet generator
+            streams = self.pktgen_helper.prepare_stream_from_tginput(tgenInput, 100,
+                                    None, self.tester.pktgen)
+            _, pps = self.tester.pktgen.measure_throughput(stream_ids=streams)
             step['pps'] = float(pps) / 10 ** 6
 
             results_row = [step['kthread_mode'], step['flows'],
@@ -963,8 +985,9 @@ class TestKni(TestCase):
         dut_ports = self.dut.get_ports(self.nic)
 
         self.tester.scapy_append('srcmac="00:00:00:00:00:01"')
+        pcap = os.sep.join([self.output_path, "kni.pcap"])
         self.tester.scapy_append(
-            'wrpcap("kni.pcap", [Ether(src=srcmac, dst="ff:ff:ff:ff:ff:ff")/IP(len=46)/UDP()/("X"*18)])')
+            'wrpcap("%s", [Ether(src=srcmac, dst="ff:ff:ff:ff:ff:ff")/IP(len=46)/UDP()/("X"*18)])' % pcap)
         self.tester.scapy_execute()
 
         white_list = self.make_white_list(self.target, self.nic)
@@ -993,13 +1016,19 @@ class TestKni(TestCase):
         rx_port = self.tester.get_local_port(dut_ports[1])
 
         for flows in range(1, flows_without_kni + 1):
-            tgenInput = []
-            tgenInput.append((tx_port, rx_port, "kni.pcap"))
+            tgen_input = []
+            tgen_input.append((tx_port, rx_port, pcap))
 
             if flows == 2:
-                tgenInput.append((rx_port, tx_port, "kni.pcap"))
+                tgen_input.append((rx_port, tx_port, pcap))
+
+            # clear streams before add new streams
+            self.tester.pktgen.clear_streams()
+            # run packet generator
+            streams = self.pktgen_helper.prepare_stream_from_tginput(tgen_input, 100,
+                                    None, self.tester.pktgen)
+            _, pps = self.tester.pktgen.measure_throughput(stream_ids=streams)
 
-            _, pps = self.tester.traffic_generator_throughput(tgenInput)
             self.result_table_add([flows, float(pps) / 10 ** 6])
 
         self.dut.send_expect("ifconfig br1 down", "# ")
@@ -1071,10 +1100,9 @@ class TestKni(TestCase):
                 # Test one port
                 tx_port = self.tester.get_local_port(self.config['ports'][0])
                 rx_mac = self.dut.get_mac_address(self.config['ports'][0])
-                self.tester.scapy_append('flows = []')
 
-                self.tester.scapy_append('flows = []')
                 port_iterator = 0
+                cnt = 0
                 for port in self.config['port_details']:
                     port_number = port['port']
 
@@ -1091,18 +1119,26 @@ class TestKni(TestCase):
                             src_ip_subnet + 1) % num_interfaces_per_port
                         dst_ip_subnet += port_iterator * \
                             num_interfaces_per_port
+                        self.tester.scapy_append('flows = []')
                         self.tester.scapy_append(
                             'flows.append(Ether(dst="%s")/IP(src="192.170.%d.2",dst="192.170.%d.2")/("X"*%d))' %
                             (rx_mac, src_ip_subnet, dst_ip_subnet, payload_size))
                         src_ip_subnet += 1
+                        pcap = os.sep.join([self.output_path,
+                                            "routePerf_{0}.pcap".format(cnt)])
+                        self.tester.scapy_append('wrpcap("%s",flows)' % pcap)
+                        self.tester.scapy_execute()
+                        tgen_input.append((tx_port, tx_port, pcap))
+                        cnt += 1
+                        time.sleep(1)
+
+                # clear streams before add new streams
+                self.tester.pktgen.clear_streams()
+                # run packet generator
+                streams = self.pktgen_helper.prepare_stream_from_tginput(tgen_input, 100,
+                                        None, self.tester.pktgen)
+                _, pps = self.tester.pktgen.measure_throughput(stream_ids=streams)
 
-                    tgen_input.append((tx_port, tx_port, "routePerf.pcap"))
-
-                self.tester.scapy_append('wrpcap("routePerf.pcap",flows)')
-                self.tester.scapy_execute()
-
-                time.sleep(1)
-                _, pps = self.tester.traffic_generator_throughput(tgen_input)
                 resutls_row.append(float(pps) / 10 ** 6)
 
             self.result_table_add(resutls_row)
@@ -1136,7 +1172,6 @@ class TestKni(TestCase):
             # Enables the interfaces
             information = self.dut.send_expect(
                 "./usertools/dpdk-devbind.py --status | grep '%s'" % port, "# ")
-            print information
             data = information.split(' ')
             for field in data:
                 if field.rfind("if=") != -1:
@@ -1169,33 +1204,50 @@ class TestKni(TestCase):
             self.tester.scapy_append('flows = []')
             self.tester.scapy_append(
                 'flows.append(Ether(dst="%s")/IP(src="192.170.100.2",dst="192.170.100.2")/("X"*%d))' % (rx_mac, payload_size))
-            self.tester.scapy_append('wrpcap("routePerf_1.pcap",flows)')
+            pcap = os.sep.join([self.output_path, "routePerf_1.pcap"])
+            self.tester.scapy_append('wrpcap("%s",flows)' % pcap)
             self.tester.scapy_execute()
 
             tgen_input = []
-            tgen_input.append((tx_port, tx_port, "routePerf_1.pcap"))
+            tgen_input.append((tx_port, tx_port, pcap))
 
             # Get throughput with 1 port
-            _, pps = self.tester.traffic_generator_throughput(tgen_input)
+
+            # clear streams before add new streams
+            self.tester.pktgen.clear_streams()
+            # run packet generator
+            streams = self.pktgen_helper.prepare_stream_from_tginput(tgen_input, 100,
+                                    None, self.tester.pktgen)
+            _, pps = self.tester.pktgen.measure_throughput(stream_ids=streams)
+
             one_port_resutls_row.append(float(pps) / 10 ** 6)
             self.result_table_add(one_port_resutls_row)
 
             # Prepare test with 'ports_without_kni' ports
-            self.tester.scapy_append('flows = []')
+            cnt = 0
             for port in range(ports_without_kni):
                 rx_mac = self.dut.get_mac_address(dut_ports[port])
                 tx_port = self.tester.get_local_port(dut_ports[port])
+                self.tester.scapy_append('flows = []')
                 self.tester.scapy_append(
                     'flows.append(Ether(dst="%s")/IP(src="192.170.%d.2",dst="192.170.%d.2")/("X"*%d))' %
-                    (rx_mac, 100 + port, 100 + (port + 1) % ports_without_kni, payload_size))
-                tgen_input.append((tx_port, tx_port, "routePerf_%d.pcap" % ports_without_kni))
-
-            self.tester.scapy_append(
-                'wrpcap("routePerf_%d.pcap",flows)' % ports_without_kni)
-            self.tester.scapy_execute()
+                    (rx_mac, 100 + port, 100 + (port + 1) % ports_without_kni,
+                     payload_size))
+                pcap = os.sep.join([self.output_path,
+                    "routePerf_{0}_{1}.pcap".format(ports_without_kni, cnt)])
+                tgen_input.append((tx_port, tx_port, pcap))
+                self.tester.scapy_append('wrpcap("%s",flows)' % pcap)
+                self.tester.scapy_execute()
+                cnt += 1
 
             # Get throughput with 'ports_without_kni' ports
-            _, pps = self.tester.traffic_generator_throughput(tgen_input)
+            # clear streams before add new streams
+            self.tester.pktgen.clear_streams()
+            # run packet generator
+            streams = self.pktgen_helper.prepare_stream_from_tginput(tgen_input, 100,
+                                    None, self.tester.pktgen)
+            _, pps = self.tester.pktgen.measure_throughput(stream_ids=streams)
+
             two_port_resutls_row.append(float(pps) / 10 ** 6)
             self.result_table_add(two_port_resutls_row)
 
-- 
2.17.1


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

* [dts] [next][PATCH V2 7/7] tests/l2fwd use pktgen API replace old module and fix pep8 issue
  2019-05-31 17:19 [dts] [next][PATCH V2 1/7] tests/checksum_offload use pktgen API replace old module and fix some issue zhaomeijuan
                   ` (4 preceding siblings ...)
  2019-05-31 17:19 ` [dts] [next][PATCH V2 6/7] tests/kni " zhaomeijuan
@ 2019-05-31 17:19 ` zhaomeijuan
  2019-06-05  1:40 ` [dts] [next][PATCH V2 1/7] tests/checksum_offload use pktgen API replace old module and fix some issue Tu, Lijuan
  6 siblings, 0 replies; 8+ messages in thread
From: zhaomeijuan @ 2019-05-31 17:19 UTC (permalink / raw)
  To: dts; +Cc: zhaomeijuan

*.remove old or unused module and code  which 
replace it with pktgen API 
*.fix pep8 issue

Signed-off-by: zhaomeijuan <meijuanx.zhao@intel.com>
---
 tests/TestSuite_l2fwd.py | 40 ++++++++++++++++++++++++++++++----------
 1 file changed, 30 insertions(+), 10 deletions(-)

diff --git a/tests/TestSuite_l2fwd.py b/tests/TestSuite_l2fwd.py
index 659d5f7..4908fb7 100644
--- a/tests/TestSuite_l2fwd.py
+++ b/tests/TestSuite_l2fwd.py
@@ -1,6 +1,6 @@
 # BSD LICENSE
 #
-# Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
+# Copyright(c) 2010-2019 Intel Corporation. All rights reserved.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -28,15 +28,16 @@
 # 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.
-
 """
 DPDK Test suite.
 Test Layer-2 Forwarding support
 """
-
+import os
+import time
 import utils
 from test_case import TestCase
 from settings import HEADER_SIZE
+from pktgen import PacketGeneratorHelper
 
 
 class TestL2fwd(TestCase):
@@ -79,6 +80,16 @@ class TestL2fwd(TestCase):
 
         self.result_table_create(self.table_header)
 
+        # get dts output path
+        if self.logger.log_path.startswith(os.sep):
+            self.output_path = self.logger.log_path
+        else:
+            cur_path = os.path.dirname(
+                                os.path.dirname(os.path.realpath(__file__)))
+            self.output_path = os.sep.join([cur_path, self.logger.log_path])
+        # create an instance to set stream field setting
+        self.pktgen_helper = PacketGeneratorHelper()
+
     def set_up(self):
         """
         Run before each test case.
@@ -163,16 +174,18 @@ class TestL2fwd(TestCase):
             payload_size = frame_size - self.headers_size
 
             tgen_input = []
+            cnt = 1
             for port in xrange(self.number_of_ports):
                 rx_port = self.tester.get_local_port(self.dut_ports[port % self.number_of_ports])
                 tx_port = self.tester.get_local_port(self.dut_ports[(port + 1) % self.number_of_ports])
                 destination_mac = self.dut.get_mac_address(self.dut_ports[(port + 1) % self.number_of_ports])
-                self.tester.scapy_append('wrpcap("l2fwd_%d.pcap", [Ether(dst="%s")/IP()/UDP()/("X"*%d)])' % (
-                    port, destination_mac, payload_size))
-
-                tgen_input.append((tx_port, rx_port, "l2fwd_%d.pcap" % port))
-
-            self.tester.scapy_execute()
+                pcap = os.sep.join([self.output_path, "l2fwd_{0}_{1}.pcap".format(port, cnt)])
+                self.tester.scapy_append('wrpcap("%s", [Ether(dst="%s")/IP()/UDP()/("X"*%d)])' % (
+                    pcap, destination_mac, payload_size))
+                tgen_input.append((tx_port, rx_port, pcap))
+                time.sleep(3)
+                self.tester.scapy_execute()
+                cnt += 1
 
             for queues in self.test_queues:
 
@@ -189,7 +202,14 @@ class TestL2fwd(TestCase):
                 self.logger.info(info)
                 self.rst_report(info, annex=True)
                 self.rst_report(command_line + "\n\n", frame=True, annex=True)
-                _, pps = self.tester.traffic_generator_throughput(tgen_input)
+
+                # clear streams before add new streams
+                self.tester.pktgen.clear_streams()
+                # run packet generator
+                streams = self.pktgen_helper.prepare_stream_from_tginput(tgen_input, 100,
+                                                    None, self.tester.pktgen)
+                _, pps = self.tester.pktgen.measure_throughput(stream_ids=streams)
+
                 Mpps = pps / 1000000.0
                 queues['Mpps'][frame_size] = Mpps
                 queues['pct'][frame_size] = Mpps * 100 / float(self.wirespeed(
-- 
2.17.1


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

* Re: [dts] [next][PATCH V2 1/7] tests/checksum_offload use pktgen API replace old module and fix some issue
  2019-05-31 17:19 [dts] [next][PATCH V2 1/7] tests/checksum_offload use pktgen API replace old module and fix some issue zhaomeijuan
                   ` (5 preceding siblings ...)
  2019-05-31 17:19 ` [dts] [next][PATCH V2 7/7] tests/l2fwd use pktgen API replace old module and fix pep8 issue zhaomeijuan
@ 2019-06-05  1:40 ` Tu, Lijuan
  6 siblings, 0 replies; 8+ messages in thread
From: Tu, Lijuan @ 2019-06-05  1:40 UTC (permalink / raw)
  To: Zhao, MeijuanX, dts; +Cc: Zhao, MeijuanX

Applied the series into next branch, thanks

> -----Original Message-----
> From: dts [mailto:dts-bounces@dpdk.org] On Behalf Of zhaomeijuan
> Sent: Saturday, June 1, 2019 1:20 AM
> To: dts@dpdk.org
> Cc: Zhao, MeijuanX <meijuanx.zhao@intel.com>
> Subject: [dts] [next][PATCH V2 1/7] tests/checksum_offload use pktgen API
> replace old module and fix some issue
> 
> *.remove old or unused module and code which  replace it with pktgen API
> *.fix pep-8 issue *.quit task before start another *.enable pmd verbose
> function *.add enable rx cksum
> 
> Signed-off-by: zhaomeijuan <meijuanx.zhao@intel.com>
> ---
>  tests/TestSuite_checksum_offload.py | 63 ++++++++++++++++++++---------
>  1 file changed, 44 insertions(+), 19 deletions(-)
> 
> diff --git a/tests/TestSuite_checksum_offload.py
> b/tests/TestSuite_checksum_offload.py
> index 6541ba5..db0663e 100644
> --- a/tests/TestSuite_checksum_offload.py
> +++ b/tests/TestSuite_checksum_offload.py
> @@ -37,13 +37,16 @@ Test support of RX/TX Checksum Offload Features by
> Poll Mode Drivers.
>  """
> 
>  import string
> +import os
>  import re
> -import rst
> +from rst import RstReport
>  import utils
> 
>  from test_case import TestCase
>  from pmd_output import PmdOutput
>  from test_capabilities import DRIVER_TEST_LACK_CAPA
> +from pktgen import PacketGeneratorHelper
> +
> 
>  class TestChecksumOffload(TestCase):
> 
> @@ -59,6 +62,15 @@ class TestChecksumOffload(TestCase):
>          self.pmdout = PmdOutput(self.dut)
>          self.portMask = utils.create_mask([self.dut_ports[0]])
>          self.ports_socket = self.dut.get_numa_id(self.dut_ports[0])
> +        # get dts output path
> +        if self.logger.log_path.startswith(os.sep):
> +            self.output_path = self.logger.log_path
> +        else:
> +            cur_path = os.path.dirname(
> +                                os.path.dirname(os.path.realpath(__file__)))
> +            self.output_path = os.sep.join([cur_path, self.logger.log_path])
> +        # create an instance to set stream field setting
> +        self.pktgen_helper = PacketGeneratorHelper()
> 
>      def set_up(self):
>          """
> @@ -86,7 +98,6 @@ class TestChecksumOffload(TestCase):
>              self.dut.send_expect("csum set sctp sw %d" % port, "testpmd>")
>              self.dut.send_expect("port start all", "testpmd>")
> 
> -
>      def get_chksum_values(self, packets_expected):
>          """
>          Validate the checksum flags.
> @@ -175,16 +186,16 @@ class TestChecksumOffload(TestCase):
>          self.tester.send_expect("exit()", "#")
> 
>          inst = self.tester.tcpdump_sniff_packets(intf=rx_interface,
> count=len(packets_sent),
> -                filters=[{'layer':'ether', 'config':{'src': sniff_src}}])
> +                filters=[{'layer': 'ether', 'config': {'src':
> + sniff_src}}])
> 
>          for packet_type in packets_sent.keys():
>              self.tester.scapy_append('sendp([%s], iface="%s")' %
> (packets_sent[packet_type], tx_interface))
> 
>          self.tester.scapy_execute()
> -	p = self.tester.load_tcpdump_sniff_packets(inst)
> -	nr_packets=len(p)
> -	reslist =
> [p[i].pktgen.pkt.sprintf("%IP.chksum%;%TCP.chksum%;%UDP.chksum%;%SCTP.
> chksum%") for i in range(nr_packets)]
> -	out = string.join(reslist, ",")
> +        p = self.tester.load_tcpdump_sniff_packets(inst)
> +        nr_packets = len(p)
> +        reslist =
> [p[i].pktgen.pkt.sprintf("%IP.chksum%;%TCP.chksum%;%UDP.chksum%;%SCTP.
> chksum%") for i in range(nr_packets)]
> +        out = string.join(reslist, ",")
>          packets_received = out.split(',')
>          self.verify(len(packets_sent) == len(packets_received), "Unexpected
> Packets Drop")
> 
> @@ -224,7 +235,7 @@ class TestChecksumOffload(TestCase):
> 
>          pktsChkErr = {'IP/UDP': 'Ether(dst="%s",
> src="52:00:00:00:00:00")/Dot1Q(vlan=1)/IP(chksum=0x0)/UDP(chksum=0xf)/("
> X"*46)' % mac,
>                        'IP/TCP': 'Ether(dst="%s",
> src="52:00:00:00:00:00")/Dot1Q(vlan=1)/IP(chksum=0x0)/TCP(chksum=0xf)/("X
> "*46)' % mac,
> -		      'IP/SCTP': 'Ether(dst="%s",
> src="52:00:00:00:00:00")/Dot1Q(vlan=1)/IP(chksum=0x0)/SCTP(chksum=0xf)/("
> X"*48)' % mac,
> +                      'IP/SCTP': 'Ether(dst="%s",
> + src="52:00:00:00:00:00")/Dot1Q(vlan=1)/IP(chksum=0x0)/SCTP(chksum=0xf)
> + /("X"*48)' % mac,
>                        'IPv6/UDP': 'Ether(dst="%s",
> src="52:00:00:00:00:00")/Dot1Q(vlan=1)/IPv6(src="::1")/UDP(chksum=0xf)/("X"
> *46)' % mac,
>                        'IPv6/TCP': 'Ether(dst="%s",
> src="52:00:00:00:00:00")/Dot1Q(vlan=1)/IPv6(src="::1")/TCP(chksum=0xf)/("X"
> *46)' % mac}
> 
> @@ -259,8 +270,8 @@ class TestChecksumOffload(TestCase):
>                      'IPv6/TCP': 'Ether(dst="%s",
> src="52:00:00:00:00:00")/IPv6(src="::1")/TCP()/("X"*46)' % mac}
> 
>          result = dict()
> -
> -	self.checksum_enablehw(self.dut_ports[0])
> +
> +        self.checksum_enablehw(self.dut_ports[0])
> 
>          # get the packet checksum value
>          result = self.get_chksum_values(pkts_ref) @@ -279,7 +290,7 @@ class
> TestChecksumOffload(TestCase):
>                      'IPv6/UDP': 'Ether(dst="%s",
> src="52:00:00:00:00:00")/IPv6(src="::1")/UDP(chksum=0xf)/("X"*46)' % mac,
>                      'IPv6/TCP': 'Ether(dst="%s",
> src="52:00:00:00:00:00")/IPv6(src="::1")/TCP(chksum=0xf)/("X"*46)' % mac}
> 
> -	if self.kdriver in DRIVER_TEST_LACK_CAPA['sctp_tx_offload']:
> +        if self.kdriver in DRIVER_TEST_LACK_CAPA['sctp_tx_offload']:
>              del pkts_good['IP/SCTP']
>              del pkts_bad['IP/SCTP']
>              del pkts_ref['IP/SCTP']
> @@ -361,19 +372,33 @@ class TestChecksumOffload(TestCase):
>          Pps = dict()
>          Pct = dict()
>          dmac = self.dut.get_mac_address(self.dut_ports[0])
> +        dmac1 = self.dut.get_mac_address(self.dut_ports[1])
> 
>          result = [2, lcore, ptype, mode]
>          for size in size_list:
>              flow = flow_format % (dmac, size)
> -            self.tester.scapy_append('wrpcap("test.pcap", [%s])' % flow)
> +            pcap = os.sep.join([self.output_path, "test.pcap"])
> +            self.tester.scapy_append('wrpcap("%s", [%s])' % (pcap,
> + flow))
>              self.tester.scapy_execute()
> +            flow = flow_format % (dmac1, size)
> +            pcap = os.sep.join([self.output_path, "test1.pcap"])
> +            self.tester.scapy_append('wrpcap("%s", [%s])' % (pcap, flow))
> +            self.tester.scapy_execute()
> +
>              tgenInput = []
> +            pcap = os.sep.join([self.output_path, "test.pcap"])
>              tgenInput.append(
> -                (self.tester.get_local_port(self.dut_ports[0]),
> self.tester.get_local_port(self.dut_ports[1]), "test.pcap"))
> +                (self.tester.get_local_port(self.dut_ports[0]),
> self.tester.get_local_port(self.dut_ports[1]), pcap))
> +            pcap = os.sep.join([self.output_path, "test1.pcap"])
>              tgenInput.append(
> -                (self.tester.get_local_port(self.dut_ports[1]),
> self.tester.get_local_port(self.dut_ports[0]), "test.pcap"))
> -            Bps[str(size)], Pps[
> -                str(size)] = self.tester.traffic_generator_throughput(tgenInput)
> +                (self.tester.get_local_port(self.dut_ports[1]),
> + self.tester.get_local_port(self.dut_ports[0]), pcap))
> +
> +            # clear streams before add new streams
> +            self.tester.pktgen.clear_streams()
> +            # run packet generator
> +            streams =
> self.pktgen_helper.prepare_stream_from_tginput(tgenInput, 100,
> +                    None, self.tester.pktgen)
> +            Bps[str(size)], Pps[str(size)] =
> + self.tester.pktgen.measure_throughput(stream_ids=streams)
>              self.verify(Pps[str(size)] > 0, "No traffic detected")
>              Pps[str(size)] /= 1E6
>              Pct[str(size)] = (Pps[str(size)] * 100) / \ @@ -390,6 +415,7 @@ class
> TestChecksumOffload(TestCase):
>          """
>          # Verify that enough ports are available
>          self.verify(len(self.dut_ports) >= 2, "Insufficient ports for testing")
> +        self.dut.send_expect("quit", "#")
> 
>          # sizes = [64, 128, 256, 512, 1024]
>          sizes = [64, 128]
> @@ -406,16 +432,15 @@ class TestChecksumOffload(TestCase):
>          portMask = utils.create_mask([self.dut_ports[0], self.dut_ports[1]])
>          for mode in ["sw", "hw"]:
>              self.logger.info("%s performance" % mode)
> -            rst.write_text(mode + " Performance" + '\r\n')
>              tblheader = ["Ports", "S/C/T", "Packet Type", "Mode"]
>              for size in sizes:
>                  tblheader.append("%sB mpps" % str(size))
>                  tblheader.append("%sB %%   " % str(size))
>              self.result_table_create(tblheader)
>              self.pmdout.start_testpmd(
> -                lcore, "--portmask=%s" % self.portMask, socket=self.ports_socket)
> +                lcore, "--portmask=%s" % self.portMask + " --enable-rx-cksum " +
> +                                  "--port-topology=loop",
> + socket=self.ports_socket)
> 
> -            self.dut.send_expect("set verbose 1", "testpmd> ")
>              self.dut.send_expect("set fwd csum", "testpmd> ")
>              if mode == "hw":
>                  self.checksum_enablehw(self.dut_ports[0])
> --
> 2.17.1


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

end of thread, other threads:[~2019-06-05  1:40 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-31 17:19 [dts] [next][PATCH V2 1/7] tests/checksum_offload use pktgen API replace old module and fix some issue zhaomeijuan
2019-05-31 17:19 ` [dts] [next][PATCH V2 2/7] tests/distributor " zhaomeijuan
2019-05-31 17:19 ` [dts] [next][PATCH V2 3/7] tests/efd use pktgen API replace old module and fix pep8 issue zhaomeijuan
2019-05-31 17:19 ` [dts] [next][PATCH V2 4/7] tests/fm10k_perf use pktgen API replace old module and fix some issue zhaomeijuan
2019-05-31 17:19 ` [dts] [next][PATCH V2 5/7] tests/ipfrag " zhaomeijuan
2019-05-31 17:19 ` [dts] [next][PATCH V2 6/7] tests/kni " zhaomeijuan
2019-05-31 17:19 ` [dts] [next][PATCH V2 7/7] tests/l2fwd use pktgen API replace old module and fix pep8 issue zhaomeijuan
2019-06-05  1:40 ` [dts] [next][PATCH V2 1/7] tests/checksum_offload use pktgen API replace old module and fix some issue Tu, Lijuan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).