From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 85265A04FF; Thu, 28 Apr 2022 09:41:28 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 80651410FB; Thu, 28 Apr 2022 09:41:28 +0200 (CEST) Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by mails.dpdk.org (Postfix) with ESMTP id F2745410DC for ; Thu, 28 Apr 2022 09:41:26 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1651131687; x=1682667687; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=vY5zraKENl1h5ILY+IAN7yDuuDVdD1olvS51qt1eqsE=; b=UyAaPsOog1CRG8qFntJv1AIsyzaLzuQbPmZmLYYcJrTNSSq774wfhozo VN3ejz7x3L4GnCrnRl0KQZf4iVQCByfK9qTNfLhct5OGjOCROMBlIeR/n 9Qtjgen+68ZP7yAmBImlOuw8ELNklZsADImMDlb41RHbbx5CbpkpRrblB t5lOOpwFz1+g1XLZhEMLENVHpfQ0J0ggXhB7kuVr9CzyI+UopagZ3ZF/E +b/QPmDUh452UcQmwzMStKKKJusE3zw5AYrux7fGVhNwelq1UUEqvI5AM n0h1VvKNYQcwyLuf3Kd/DJQT7c6nMTLcEbJM7+dTVZHk6+G+iSJHfY1S0 w==; X-IronPort-AV: E=McAfee;i="6400,9594,10330"; a="326686402" X-IronPort-AV: E=Sophos;i="5.90,295,1643702400"; d="scan'208";a="326686402" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Apr 2022 00:41:26 -0700 X-IronPort-AV: E=Sophos;i="5.90,295,1643702400"; d="scan'208";a="731265023" Received: from unknown (HELO localhost.localdomain) ([10.239.251.222]) by orsmga005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Apr 2022 00:41:24 -0700 From: Wei Ling To: dts@dpdk.org Cc: Wei Ling Subject: [dts][PATCH V2 2/2] tests/vdev_primary_secondary: add automation testcase2 sync with testplan Date: Thu, 28 Apr 2022 07:41:10 +0000 Message-Id: <20220428074110.42287-1-weix.ling@intel.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org 1. Change testcase1 testpmd fwd mode from `set fwd txonly` and `start` to `set fwd mac` and `start tx_first` take VM and testpmd can loop the traffic. 2. Add automation testcase2 sync with testplan and optimize code. Signed-off-by: Wei Ling --- tests/TestSuite_vdev_primary_secondary.py | 148 ++++++++++++++-------- 1 file changed, 95 insertions(+), 53 deletions(-) diff --git a/tests/TestSuite_vdev_primary_secondary.py b/tests/TestSuite_vdev_primary_secondary.py index 7f054cda..4c9dba8e 100644 --- a/tests/TestSuite_vdev_primary_secondary.py +++ b/tests/TestSuite_vdev_primary_secondary.py @@ -47,6 +47,7 @@ import time import framework.utils as utils from framework.test_case import TestCase from framework.virt_common import VM +from framework.pmd_output import PmdOutput class TestVdevPrimarySecondary(TestCase): @@ -59,14 +60,16 @@ class TestVdevPrimarySecondary(TestCase): self.dut_ports = self.dut.get_ports(self.nic) self.verify(len(self.dut_ports) >= 1, "Insufficient ports for testing") self.ports_socket = self.dut.get_numa_id(self.dut_ports[0]) - cores = self.dut.get_core_list("1S/12C/1T", socket=self.ports_socket) - self.coremask = utils.create_mask(cores) - self.verify(len(self.coremask) >= 6, "The machine has too few cores.") + self.cores = self.dut.get_core_list("all", socket=self.ports_socket) + self.vhost_cores = self.cores[0:6] + self.verify(len(self.vhost_cores) >= 6, "The machine has too few cores.") self.base_dir = self.dut.base_dir.replace("~", "/root") - self.pci_info = self.dut.ports_info[0]["pci"] self.app_testpmd_path = self.dut.apps_name["test-pmd"] self.app_symmetric_mp_path = self.dut.apps_name["symmetric_mp"] + self.app_hotplug_mp_path = self.dut.apps_name["hotplug_mp"] self.testpmd_name = self.app_testpmd_path.split("/")[-1] + self.vhost_user = self.dut.create_session("vhost-user") + self.vhost_user_pmd = PmdOutput(self.dut, self.vhost_user) def set_up(self): """ @@ -89,7 +92,7 @@ class TestVdevPrimarySecondary(TestCase): vm_params["opt_mac"] = "%s%d" % (self.virtio_mac, i + 2) vm_params["opt_queue"] = self.queues vm_params["opt_server"] = "server" - vm_params["opt_settings"] = "mrg_rxbuf=on,mq=on,vectors=%d" % ( + vm_params["opt_settings"] = "mrg_rxbuf=on,csum=on,mq=on,vectors=%d" % ( 2 * self.queues + 2 ) self.vm.set_vm_device(**vm_params) @@ -103,33 +106,14 @@ class TestVdevPrimarySecondary(TestCase): return True - def launch_testpmd(self): + def launch_testpmd(self, param, eal_param): """ launch testpmd """ - testcmd = self.app_testpmd_path + " " - vdev1 = " --vdev 'net_vhost0,iface=%s/vhost-net0,queues=%d,client=1'" % ( - self.base_dir, - self.queues, - ) - vdev2 = " --vdev 'net_vhost1,iface=%s/vhost-net1,queues=%d,client=1'" % ( - self.base_dir, - self.queues, - ) - eal_params = self.dut.create_eal_parameters( - cores="1S/12C/1T", prefix="vhost", ports=[self.pci_info] - ) - para = " -- -i --nb-cores=4 --rxq=%d --txq=%d --txd=1024 --rxd=1024" % ( - self.queues, - self.queues, - ) - start_cmd = testcmd + eal_params + vdev1 + vdev2 + para - self.dut.send_expect(start_cmd, "testpmd> ", 120) - self.dut.send_expect("set fwd txonly", "testpmd> ", 120) - self.dut.send_expect("start", "testpmd> ", 120) + self.vhost_user_pmd.start_testpmd(cores=self.vhost_cores, param=param, eal_param=eal_param, prefix='vhost', fixed_prefix=True, no_pci=True) - def launch_examples(self): - example_cmd_auto = ( + def launch_symmetric_mp(self): + example_cmd_primary = ( self.app_symmetric_mp_path + " -l 0 -n %d --proc-type=auto -- -p 3 --num-procs=%d --proc-id=0" ) @@ -137,53 +121,111 @@ class TestVdevPrimarySecondary(TestCase): self.app_symmetric_mp_path + " -l 1 -n %d --proc-type=secondary -- -p 3 --num-procs=%d --proc-id=1" ) - final_cmd_first = example_cmd_auto % (self.mem_channels, self.queues) + final_cmd_primary = example_cmd_primary % (self.mem_channels, self.queues) + final_cmd_secondary = example_cmd_secondary % (self.mem_channels, self.queues) + self.vm_primary.send_expect(final_cmd_primary, "Lcore", 120) + time.sleep(3) + self.vm_secondary.send_expect(final_cmd_secondary, "Lcore", 120) + + def launch_hotplug_mp(self): + example_cmd_primary = ( + self.app_hotplug_mp_path + + " -l 0 -n %d --proc-type=auto -- -p 3 --num-procs=%d --proc-id=0" + ) + example_cmd_secondary = ( + self.app_hotplug_mp_path + + " -l 1 -n %d --proc-type=secondary -- -p 3 --num-procs=%d --proc-id=1" + ) + final_cmd_primary = example_cmd_primary % (self.mem_channels, self.queues) final_cmd_secondary = example_cmd_secondary % (self.mem_channels, self.queues) - self.vhost_first.send_expect(final_cmd_first, "Lcore", 120) + self.vm_primary.send_expect(final_cmd_primary, "example>", 120) time.sleep(3) - self.vhost_secondary.send_expect(final_cmd_secondary, "Lcore", 120) + self.vm_secondary.send_expect(final_cmd_secondary, "example>", 120) + + def check_etherdev(self, dev_list): + primary_out = self.vm_primary.send_expect("list", "example", 120) + for dev in dev_list: + self.verify(dev in primary_out, "dev {} not in the list") + secondary_out = self.vm_secondary.send_expect("list", "example", 120) + for dev in dev_list: + self.verify(dev in secondary_out, "dev {} not in the list") + + def detach_etherdev_from_primary(self, dev_pci): + self.vm_primary.send_expect("detach {}".format(dev_pci), "example", 120) + + def attach_etherdev_from_secondary(self, dev_pci): + self.vm_secondary.send_expect("attach {}".format(dev_pci), "example", 120) def prepare_symmetric_mp(self): out = self.vm_dut.build_dpdk_apps("./examples/multi_process/symmetric_mp") self.verify("Error" not in out, "compilation symmetric_mp error") - def close_session(self): - self.vm_dut.close_session(self.vhost_first) - self.vm_dut.close_session(self.vhost_secondary) + def prepare_hotplug_mp(self): + out = self.vm_dut.build_dpdk_apps("./examples/multi_process/hotplug_mp") + self.verify("Error" not in out, "compilation hotplug_mp error") - def test_Virtio_primary_and_secondary_process(self): - # start testpmd - self.launch_testpmd() + def close_session(self): + self.vm_dut.close_session(self.vm_primary) + self.vm_dut.close_session(self.vm_secondary) + self.dut.close_session(self.vhost_user) + + def test_virtio_primary_and_secondary_process(self): + vhost_eal_param = "--vdev 'net_vhost,iface=vhost-net0,queues=2,client=1' --vdev 'net_vhost1,iface=vhost-net1,queues=2,client=1'" + vhost_param = "--nb-cores=4 --rxq=2 --txq=2 --txd=1024 --rxd=1024" + self.launch_testpmd(param=vhost_param, eal_param=vhost_eal_param) self.setup_vm_env() - # Modify code self.prepare_symmetric_mp() - # create 2 new session - self.vhost_first = self.vm_dut.new_session(suite="vhost_first") - self.vhost_secondary = self.vm_dut.new_session(suite="vhsot_secondary") - # start symmetric_mp - self.launch_examples() + self.vm_primary = self.vm_dut.new_session(suite="vm_primary") + self.vm_secondary = self.vm_dut.new_session(suite="vm_secondary") + self.launch_symmetric_mp() + self.vhost_user_pmd.execute_cmd("set fwd mac") + self.vhost_user_pmd.execute_cmd("start tx_first") time.sleep(3) - vhost_first_out = self.vhost_first.send_expect("^c", "#", 15) - print(vhost_first_out) + vm_primary_out = self.vm_primary.send_expect("^c", "#", 15) + print(vm_primary_out) time.sleep(3) - vhost_secondary_out = self.vhost_secondary.send_expect("^c", "#", 15) - print(vhost_secondary_out) - result_first = re.findall(r"Port \d: RX - (\w+)", vhost_first_out) - result_secondary = re.findall(r"Port \d: RX - (\w+)", vhost_secondary_out) + vm_secondary_out = self.vm_secondary.send_expect("^c", "#", 15) + print(vm_secondary_out) + result_primary = re.findall(r"Port \d: RX - (\w+)", vm_primary_out) + result_secondary = re.findall(r"Port \d: RX - (\w+)", vm_secondary_out) self.verify( - len(result_first[0]) != 0 - and len(result_first[1]) != 0 + len(result_primary[0]) != 0 + and len(result_primary[1]) != 0 and len(result_secondary[0]) != 0 and len(result_secondary[1]) != 0, "RX no data", ) self.dut.send_expect("quit", "#", 15) + def test_virtio_primay_and_secondary_process_hotplug(self): + vhost_eal_param = "--vdev 'net_vhost0,iface=vhost-net0,queues=2,client=1' --vdev 'net_vhost1,iface=vhost-net1,queues=2,client=1'" + vhost_param = "--nb-cores=4 --rxq=2 --txq=2 --txd=1024 --rxd=1024" + self.launch_testpmd(param=vhost_param, eal_param=vhost_eal_param) + self.vhost_user_pmd.execute_cmd("set fwd txonly") + self.vhost_user_pmd.execute_cmd("start") + self.setup_vm_env() + self.prepare_hotplug_mp() + self.vm_primary = self.vm_dut.new_session(suite="vm_primary") + self.vm_secondary = self.vm_dut.new_session(suite="vm_secondary") + self.launch_hotplug_mp() + vm_ports = [] + for pci_info in self.vm_dut.ports_info: + vm_ports.append(pci_info['pci']) + self.check_etherdev(dev_list=vm_ports) + detach_pci = vm_ports[0] + for _ in range(2): + self.detach_etherdev_from_primary(dev_pci=detach_pci) + vm_ports.remove(detach_pci) + self.check_etherdev(dev_list=vm_ports) + self.attach_etherdev_from_secondary(dev_pci=detach_pci) + vm_ports.append(detach_pci) + self.check_etherdev(dev_list=vm_ports) + self.dut.send_expect("quit", "#", 15) + def tear_down(self): """ Run after each test case. """ - self.close_session() self.vm_dut.kill_all() self.dut.kill_all() self.vm.stop() @@ -195,4 +237,4 @@ class TestVdevPrimarySecondary(TestCase): """ Run after each test suite. """ - pass + self.close_session() -- 2.34.1