test suite reviews and discussions
 help / color / mirror / Atom feed
From: lihong <lihongx.ma@intel.com>
To: dts@dpdk.org
Cc: lihong <lihongx.ma@intel.com>
Subject: [dts] [PATCH V1] tests/vm2vm_virtio_pmd: update testcase according to plan
Date: Tue, 16 Jul 2019 07:21:06 +0800	[thread overview]
Message-ID: <1563232866-19164-1-git-send-email-lihongx.ma@intel.com> (raw)

Signed-off-by: lihong <lihongx.ma@intel.com>
---
 tests/TestSuite_vm2vm_virtio_pmd.py | 153 ++++++++++++++++++++++++++++++------
 1 file changed, 128 insertions(+), 25 deletions(-)

diff --git a/tests/TestSuite_vm2vm_virtio_pmd.py b/tests/TestSuite_vm2vm_virtio_pmd.py
index 9a62ac8..ca97d4d 100644
--- a/tests/TestSuite_vm2vm_virtio_pmd.py
+++ b/tests/TestSuite_vm2vm_virtio_pmd.py
@@ -33,12 +33,16 @@
 DPDK Test suite.
 
 Test cases for Vhost-user/Virtio-pmd VM2VM
+Test cases for vhost/virtio-pmd(0.95/1.0) VM2VM test with 3 rx/tx paths,
+includes mergeable, normal, vector_rx.
+About mergeable path check the large packet payload.
 """
 import re
 import time
 import utils
 from virt_common import VM
 from test_case import TestCase
+from packet import load_pcapfile
 
 
 class TestVM2VMVirtioPMD(TestCase):
@@ -53,13 +57,14 @@ class TestVM2VMVirtioPMD(TestCase):
         self.coremask = utils.create_mask(self.cores)
         self.memory_channel = self.dut.get_memory_channels()
         self.vm_num = 2
+        self.dump_pcap = "/root/pdump-rx.pcap"
 
     def set_up(self):
         """
         run before each test case.
         """
         self.table_header = ["FrameSize(B)", "Mode",
-                            "Throughput(Mpps)", "Path"]
+                            "Throughput(Mpps)", "Queue Number", "Path"]
         self.result_table_create(self.table_header)
         self.dut.send_expect("killall -s INT testpmd", "#")
         self.dut.send_expect("killall -s INT qemu-system-x86_64", "#")
@@ -68,6 +73,20 @@ class TestVM2VMVirtioPMD(TestCase):
         self.vm_dut = []
         self.vm = []
 
+    def enable_pcap_lib_in_dpdk(self, client_dut):
+        """
+        enable pcap lib in dpdk code and recompile
+        """
+        client_dut.send_expect("sed -i 's/CONFIG_RTE_LIBRTE_PMD_PCAP=n$/CONFIG_RTE_LIBRTE_PMD_PCAP=y/' config/common_base", "#")
+        client_dut.build_install_dpdk(self.target)
+
+    def disable_pcap_lib_in_dpdk(self, client_dut):
+        """
+        reset pcap lib in dpdk and recompile
+        """
+        client_dut.send_expect("sed -i 's/CONFIG_RTE_LIBRTE_PMD_PCAP=y$/CONFIG_RTE_LIBRTE_PMD_PCAP=n/' config/common_base", "#")
+        client_dut.build_install_dpdk(self.target)
+
     def start_vhost_testpmd(self):
         """
         launch the testpmd on vhost side
@@ -84,22 +103,32 @@ class TestVM2VMVirtioPMD(TestCase):
         self.vhost.send_expect("set fwd mac", "testpmd> ", 30)
         self.vhost.send_expect("start", "testpmd> ", 30)
 
-    def start_vm_testpmd(self, vm_client, path_mode):
+    def start_vm_testpmd(self, vm_client, path_mode, extern_param=""):
         """
         launch the testpmd in vm
         """
         if path_mode == "mergeable":
-            command = self.dut.target + "/app/testpmd " + \
-                        "-c 0x3 -n 4 -- -i --tx-offloads=0x00 " + \
-                        "--enable-hw-vlan-strip --txd=1024 --rxd=1024"
+            command = self.dut.target + "/app/testpmd -c 0x3 -n 4 " + \
+                        "--file-prefix=virtio -- -i --tx-offloads=0x00 " + \
+                        "--enable-hw-vlan-strip --txd=1024 --rxd=1024 %s"
         elif path_mode == "normal":
-            command = self.dut.target + "/app/testpmd " + \
-                        "-c 0x3 -n 4 -- -i --tx-offloads=0x00 " + \
-                        "--enable-hw-vlan-strip --txd=1024 --rxd=1024"
+            command = self.dut.target + "/app/testpmd -c 0x3 -n 4 " + \
+                        "--file-prefix=virtio -- -i --tx-offloads=0x00 " + \
+                        "--enable-hw-vlan-strip --txd=1024 --rxd=1024 %s"
         elif path_mode == "vector_rx":
-            command = self.dut.target + "/app/testpmd " + \
-                        "-c 0x3 -n 4 -- -i --txd=1024 --rxd=1024"
-        vm_client.send_expect(command, "testpmd> ", 20)
+            command = self.dut.target + "/app/testpmd -c 0x3 -n 4 " + \
+                        "--file-prefix=virtio -- -i --txd=1024 --rxd=1024 %s"
+        vm_client.send_expect(command % extern_param, "testpmd> ", 20)
+
+    def launch_pdump_in_vm(self, vm_client):
+        """
+        bootup pdump in VM
+        """
+        self.vm_dump = vm_client.new_session(suite="pdump")
+        command_line = self.target + "/app/dpdk-pdump " + \
+                    "-v --file-prefix=virtio -- " + \
+                    "--pdump  'port=0,queue=*,rx-dev=%s,mbuf-size=8000'"
+        self.vm_dump.send_expect(command_line % self.dump_pcap, 'Port')
 
     def start_vms(self, mode=0, mergeable=True):
         """
@@ -153,6 +182,7 @@ class TestVM2VMVirtioPMD(TestCase):
         results_row = [frame_size]
         results_row.append(case_info)
         results_row.append(Mpps)
+        results_row.append(1)
         results_row.append(path)
         self.result_table_add(results_row)
 
@@ -170,34 +200,51 @@ class TestVM2VMVirtioPMD(TestCase):
         self.update_table_info(mode, 64, Mpps, path)
         self.result_table_print()
 
+    def check_packet_payload_valid(self, vm_dut):
+        """
+        check the payload is valid
+        """
+        # stop pdump
+        self.vm_dump.send_expect('^c', '# ', 60)
+        # quit testpmd
+        vm_dut.send_expect('quit', '#', 60)
+        time.sleep(2)
+        vm_dut.session.copy_file_from(src="%s" % self.dump_pcap, dst="%s" % self.dump_pcap)
+        pkts = load_pcapfile(self.dump_pcap)
+        self.verify(len(pkts) == 10, "The vm0 do not capture all the packets")
+        data = str(pkts[0].pktgen.pkt['Raw'])
+        for i in range(1, 10):
+            value = str(pkts[i].pktgen.pkt['Raw'])
+            self.verify(data == value, "the payload in receive packets has been changed")
+
     def stop_all_apps(self):
         for i in range(len(self.vm)):
             self.vm_dut[i].send_expect("quit", "#", 20)
             self.vm[i].stop()
         self.vhost.send_expect("quit", "#", 30)
 
-    def test_vhost_vm2vm_virito_pmd_with_mergeable_path(self):
+    def test_vhost_vm2vm_virtio_pmd_with_normal_path(self):
         """
-        vhost-user + virtio-pmd with mergeable path
+        vhost-user + virtio-pmd with normal path
         """
-        path_mode = "mergeable"
+        path_mode = "normal"
         self.start_vhost_testpmd()
-        self.start_vms(mode=0, mergeable=True)
+        self.start_vms(mode=0, mergeable=False)
         self.start_vm_testpmd(self.vm_dut[0], path_mode)
         self.start_vm_testpmd(self.vm_dut[1], path_mode)
-        self.send_and_verify(mode="virtio 0.95", path=path_mode)
+        self.send_and_verify(mode="virtio 0.95 normal path", path=path_mode)
         self.stop_all_apps()
 
-    def test_vhost_vm2vm_virtio_pmd_with_normal_path(self):
+    def test_vhost_vm2vm_virito_10_pmd_with_normal_path(self):
         """
-        vhost-user + virtio-pmd with normal path
+        vhost-user + virtio1.0-pmd with normal path
         """
         path_mode = "normal"
         self.start_vhost_testpmd()
-        self.start_vms(mode=0, mergeable=False)
+        self.start_vms(mode=1, mergeable=False)
         self.start_vm_testpmd(self.vm_dut[0], path_mode)
         self.start_vm_testpmd(self.vm_dut[1], path_mode)
-        self.send_and_verify(mode="virtio 0.95", path=path_mode)
+        self.send_and_verify(mode="virtio 1.0 normal path", path=path_mode)
         self.stop_all_apps()
 
     def test_vhost_vm2vm_virtio_pmd_with_vector_rx_path(self):
@@ -209,19 +256,75 @@ class TestVM2VMVirtioPMD(TestCase):
         self.start_vms(mode=0, mergeable=False)
         self.start_vm_testpmd(self.vm_dut[0], path_mode)
         self.start_vm_testpmd(self.vm_dut[1], path_mode)
-        self.send_and_verify(mode="virtio 0.95", path=path_mode)
+        self.send_and_verify(mode="virtio 0.95 vector_rx", path=path_mode)
+        self.stop_all_apps()
+
+    def test_vhost_vm2vm_virtioi10_pmd_with_vector_rx_path(self):
+        """
+        vhost-user + virtio1.0-pmd with vector_rx path
+        """
+        path_mode = "vector_rx"
+        self.start_vhost_testpmd()
+        self.start_vms(mode=1, mergeable=False)
+        self.start_vm_testpmd(self.vm_dut[0], path_mode)
+        self.start_vm_testpmd(self.vm_dut[1], path_mode)
+        self.send_and_verify(mode="virtio 1.0 vector_rx", path=path_mode)
+        self.stop_all_apps()
+
+    def test_vhost_vm2vm_virito_pmd_with_mergeable_path(self):
+        """
+        vhost-user + virtio-pmd with mergeable path test with payload check
+        """
+        path_mode = "mergeable"
+        extern_param = '--max-pkt-len=9600'
+        self.start_vhost_testpmd()
+        self.start_vms(mode=0, mergeable=True)
+        # enable pcap in VM0
+        self.enable_pcap_lib_in_dpdk(self.vm_dut[0])
+        # git the vm enough huge to run pdump
+        self.vm_dut[0].set_huge_pages(2048)
+        # start testpmd and pdump in VM0
+        self.start_vm_testpmd(self.vm_dut[0], path_mode, extern_param)
+        self.vm_dut[0].send_expect('set fwd rxonly', 'testpmd> ', 30)
+        self.vm_dut[0].send_expect('start', 'testpmd> ', 30)
+        self.launch_pdump_in_vm(self.vm_dut[0])
+        # start testpmd in VM1 and start to send packet
+        self.start_vm_testpmd(self.vm_dut[1], path_mode, extern_param)
+        self.vm_dut[1].send_expect('set txpkts 2000,2000,2000,2000', 'testpmd> ', 30)
+        self.vm_dut[1].send_expect('set burst 1', 'testpmd> ', 30)
+        self.vm_dut[1].send_expect('start tx_first 10', 'testpmd> ', 30)
+         # check the packet in vm0
+        self.check_packet_payload_valid(self.vm_dut[0])
+        # reset the evn in vm
+        self.disable_pcap_lib_in_dpdk(self.vm_dut[0])
         self.stop_all_apps()
 
     def test_vhost_vm2vm_virito_10_pmd_with_mergeable_path(self):
         """
-        vhost-user + virtio1.0-pmd with mergeable path
+        vhost-user + virtio1.0-pmd with mergeable path test with payload check
         """
         path_mode = "mergeable"
+        extern_param = '--max-pkt-len=9600'
         self.start_vhost_testpmd()
         self.start_vms(mode=1, mergeable=True)
-        self.start_vm_testpmd(self.vm_dut[0], path_mode)
-        self.start_vm_testpmd(self.vm_dut[1], path_mode)
-        self.send_and_verify(mode="virtio 1.0", path=path_mode)
+        # enable pcap in VM0
+        self.enable_pcap_lib_in_dpdk(self.vm_dut[0])
+        # git the vm enough huge to run pdump
+        self.vm_dut[0].set_huge_pages(2048)
+        # start testpmd and pdump in VM0
+        self.start_vm_testpmd(self.vm_dut[0], path_mode, extern_param)
+        self.vm_dut[0].send_expect('set fwd rxonly', 'testpmd> ', 30)
+        self.vm_dut[0].send_expect('start', 'testpmd> ', 30)
+        self.launch_pdump_in_vm(self.vm_dut[0])
+        # start testpmd in VM1 and start to send packet
+        self.start_vm_testpmd(self.vm_dut[1], path_mode, extern_param)
+        self.vm_dut[1].send_expect('set txpkts 2000,2000,2000,2000', 'testpmd> ', 30)
+        self.vm_dut[1].send_expect('set burst 1', 'testpmd> ', 30)
+        self.vm_dut[1].send_expect('start tx_first 10', 'testpmd> ', 30)
+         # check the packet in vm0
+        self.check_packet_payload_valid(self.vm_dut[0])
+        # reset the evn in vm
+        self.disable_pcap_lib_in_dpdk(self.vm_dut[0])
         self.stop_all_apps()
 
     def tear_down(self):
-- 
2.7.4


             reply	other threads:[~2019-07-16  6:43 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-07-15 23:21 lihong [this message]
2019-08-07  3:43 ` Tu, Lijuan

Reply instructions:

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

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

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

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

  git send-email \
    --in-reply-to=1563232866-19164-1-git-send-email-lihongx.ma@intel.com \
    --to=lihongx.ma@intel.com \
    --cc=dts@dpdk.org \
    /path/to/YOUR_REPLY

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

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).