[dts] [PATCH] tests/dynamic_queue: add dynamic queue test suite
Xueqin Lin
xueqin.lin at intel.com
Tue Aug 7 06:23:49 CEST 2018
From: "xueqin.lin" <xueqin.lin at intel.com>
Signed-off-by: Xueqin Lin <xueqin.lin at intel.com>
---
tests/TestSuite_dynamic_queue.py | 180 +++++++++++++++++++++++++++++++++++++++
1 file changed, 180 insertions(+)
create mode 100644 tests/TestSuite_dynamic_queue.py
diff --git a/tests/TestSuite_dynamic_queue.py b/tests/TestSuite_dynamic_queue.py
new file mode 100644
index 0000000..880d421
--- /dev/null
+++ b/tests/TestSuite_dynamic_queue.py
@@ -0,0 +1,180 @@
+# <COPYRIGHT_TAG>
+
+import time
+import re
+import utils
+from test_case import TestCase
+from pmd_output import PmdOutput
+from settings import get_nic_name
+from packet import Packet, sniff_packets, load_sniff_packets
+import random
+
+
+class TestDynamicQueue(TestCase):
+
+ def set_up_all(self):
+ self.dut_ports = self.dut.get_ports(self.nic)
+ self.verify(len(self.dut_ports) >= 1, "Insufficient ports")
+ out = self.dut.send_expect("cat config/common_base", "]# ", 10)
+ self.PF_Q_strip = 'CONFIG_RTE_LIBRTE_I40E_QUEUE_NUM_PER_PF'
+ pattern = "%s=(\d*)" % self.PF_Q_strip
+ self.PF_QUEUE = self.element_strip(out, pattern)
+ self.used_dut_port = self.dut_ports[0]
+ tester_port = self.tester.get_local_port(self.used_dut_port)
+ self.tester_intf = self.tester.get_interface(tester_port)
+ self.dut_testpmd = PmdOutput(self.dut)
+
+ def set_up(self):
+ self.dut_testpmd.start_testpmd(
+ "Default", "--port-topology=chained --txq=%s --rxq=%s"
+ % (self.PF_QUEUE, self.PF_QUEUE))
+
+ def element_strip(self, out, pattern):
+ """
+ Strip and get queue number.
+ """
+ s = re.compile(pattern, re.DOTALL)
+ res = s.search(out)
+ if res is None:
+ print utils.RED('Fail to search number.')
+ return None
+ else:
+ result = res.group(1)
+ return int(result)
+
+ def send_packet(self):
+ """
+ Generate packets and send them to dut
+ """
+ mac = self.dut.get_mac_address(0)
+ for i in range(self.PF_QUEUE * 2):
+ pkt = Packet(pkt_type='IP_RAW')
+ pkt.config_layer('ether', {'dst': mac})
+ pkt.config_layer(
+ 'ipv4', {'dst': '192.168.0.%d' % i, 'src': '191.168.0.1'})
+ pkt.send_pkt(tx_port=self.tester_intf)
+
+ def rxq_setup_test(self, chgflag=0):
+ """
+ Dynamic to setup rxq and reconfigure ring size at runtime.
+ chgflag: reconfigure ring size flag
+ 1:reconfigure Rx ring size
+ 0:no change on Rx ring size
+ """
+ queue = range(3)
+ for i in range(3):
+ queue[i] = random.randint(1, self.PF_QUEUE - 1)
+ self.dut_testpmd.execute_cmd('port 0 rxq %d stop' % queue[i])
+ self.dut_testpmd.execute_cmd('set fwd rxonly')
+ self.dut_testpmd.execute_cmd('start')
+ self.send_packet()
+ self.dut.get_session_output(timeout=10)
+ out = self.dut_testpmd.execute_cmd('stop')
+ for i in range(3):
+ self.verify(
+ "Forward Stats for RX Port= 0/Queue=%2d" % queue[i] not in out,
+ "Fail to verify rxq stop!")
+ if chgflag == 1:
+ for i in range(3):
+ out = self.dut_testpmd.execute_cmd(
+ 'show rxq info 0 %d' % queue[i])
+ qring_strip = 'Number of RXDs: '
+ pattern = "%s([0-9]+)" % qring_strip
+ qringsize = self.element_strip(out, pattern)
+ chg_qringsize = qringsize % 1024 + 256
+ self.dut_testpmd.execute_cmd(
+ 'port config 0 rxq %d ring_size %d'
+ % (queue[i], chg_qringsize))
+ self.dut_testpmd.execute_cmd('port 0 rxq %d setup' % queue[i])
+ out = self.dut_testpmd.execute_cmd(
+ 'show rxq info 0 %d' % queue[i])
+ chk_qringsize = self.element_strip(out, pattern)
+ self.verify(chk_qringsize == chg_qringsize,
+ "Fail to change ring size at runtime!")
+ for i in range(3):
+ if chgflag == 0:
+ self.dut_testpmd.execute_cmd('port 0 rxq %d setup' % queue[i])
+ self.dut_testpmd.execute_cmd('port 0 rxq %d start' % queue[i])
+ self.dut_testpmd.execute_cmd('start')
+ self.send_packet()
+ self.dut.get_session_output(timeout=10)
+ out = self.dut_testpmd.execute_cmd('stop')
+ for i in range(3):
+ self.verify("Forward Stats for RX Port= 0/Queue=%2d"
+ % queue[i] in out, "Fail to setup rxq %d at runtime"
+ % queue[i])
+
+ def txq_setup_test(self, chgflag=0):
+ """
+ Dynamic to setup txq and reconfigure ring size at runtime.
+ chgflag: reconfigure ring size flag
+ 1:reconfigure Tx ring size
+ 0:no change on Tx ring size
+ """
+ for i in range(3):
+ queue = random.randint(1, self.PF_QUEUE - 1)
+ out = self.dut_testpmd.execute_cmd('show txq info 0 %d' % queue)
+ qring_strip = 'Number of TXDs: '
+ pattern = "%s([0-9]+)" % qring_strip
+ qringsize = self.element_strip(out, pattern)
+ self.dut_testpmd.execute_cmd('port 0 txq %d stop' % queue)
+ self.dut_testpmd.execute_cmd('set fwd txonly')
+ self.dut_testpmd.execute_cmd('start')
+ time.sleep(10)
+ out = self.dut_testpmd.execute_cmd('stop')
+ tx_num = qringsize - 1
+ self.verify("TX-packets: %d" % tx_num in out,
+ "Fail to stop txq at runtime")
+ if chgflag == 1:
+ chg_qringsize = qringsize % 1024 + 256
+ self.dut_testpmd.execute_cmd(
+ 'port config 0 txq %d ring_size %d'
+ % (queue, chg_qringsize))
+ self.dut_testpmd.execute_cmd('port 0 txq %d setup' % queue)
+ out = self.dut_testpmd.execute_cmd(
+ 'show txq info 0 %d' % queue)
+ chk_qringsize = self.element_strip(out, pattern)
+ self.verify(chk_qringsize == chg_qringsize,
+ "Fail to change ring size at runtime!")
+ if chgflag == 0:
+ self.dut_testpmd.execute_cmd('port 0 txq %d setup' % queue)
+ self.dut_testpmd.execute_cmd('port 0 txq %d start' % queue)
+ self.dut_testpmd.execute_cmd('start')
+ time.sleep(10)
+ out = self.dut_testpmd.execute_cmd('stop')
+ self.verify("TX-packets: %d" % tx_num not in out,
+ "Fail to setup txq at runtime")
+ if chgflag == 1:
+ chgtx_num = chg_qringsize - 1
+ self.verify("TX-packets: %d" % chgtx_num not in out,
+ "Fail to change txq ring size at runtime")
+
+ def test_rxq_setup(self):
+ """
+ Dynamic to setup rxq test
+ """
+ self.rxq_setup_test()
+
+ def test_rxq_chgring_setup(self):
+ """
+ Dynamic to setup rxq and change ring size test
+ """
+ self.rxq_setup_test(chgflag=1)
+
+ def test_txq_setup(self):
+ """
+ Dynamic to setup txq test
+ """
+ self.txq_setup_test()
+
+ def test_txq_chgring_setup(self):
+ """
+ Dynamic to setup txq and change ring size test
+ """
+ self.txq_setup_test(chgflag=1)
+
+ def tear_down(self):
+ self.dut_testpmd.quit()
+
+ def tear_down_all(self):
+ pass
--
2.7.5
More information about the dts
mailing list