From patchwork Wed Jun 8 02:34:23 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "Jiale, SongX" X-Patchwork-Id: 112513 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 6DF64A0548; Wed, 8 Jun 2022 04:34:33 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6523D4021F; Wed, 8 Jun 2022 04:34:33 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by mails.dpdk.org (Postfix) with ESMTP id 15C904021D for ; Wed, 8 Jun 2022 04:34:30 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1654655671; x=1686191671; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=VKIVfKZpBQgl+lz53q/tvbDgeQOz6VGBcDsnMrzBetE=; b=G8OJv4RkvPUZ6g4xKcEg7LlX2D0T9Qr1Wiv7ZerOWN27GIF2b+cCVDMF sZ7Z4y6q75OqY7qdQuBoWHAFkM4yvcTbO7ytk3tgackHzDLvvvMpowajT FJtOdtds9OuZsFfzDY5XlsfIvYZBzuQDjDzBnTDBy3fr5C58x1LONvMgV gNtpmNEu06rK+15r4iKm7HJBa6T0x/d86cqqplXW/a4QT+Uz9/IS0X6gb Yot4l0RmLpSEgccC9u/+zFUgc9EoT4ilAAaKO2iTP5jCGGD7kknko8jRo 6l0/BIBzvTb6LyADybboSlOenZtdZFfnpGWP9RywDTP79zuFzZLPX2EH6 A==; X-IronPort-AV: E=McAfee;i="6400,9594,10371"; a="259860544" X-IronPort-AV: E=Sophos;i="5.91,284,1647327600"; d="scan'208";a="259860544" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Jun 2022 19:34:29 -0700 X-IronPort-AV: E=Sophos;i="5.91,285,1647327600"; d="scan'208";a="584558243" Received: from unknown (HELO daily-regression-131.intel.com) ([10.239.251.131]) by fmsmga007-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Jun 2022 19:34:28 -0700 From: Jiale Song To: dts@dpdk.org Cc: Jiale Song Subject: [dts] [PATCH V5] tests/userspace_ethtool: add method wait port link up and add checklist Date: Wed, 8 Jun 2022 10:34:23 +0800 Message-Id: <20220608023423.455712-1-songx.jiale@intel.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 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 fix 4 issue: 1.check and wait for the port status of the tester and dut to be up and delete some unnecessary delays. 2.700 Series not support port disconnect by tools of linux, add 'I40E_10G-10G_BASE_T_X722' and 'I40E_10G-10G_BASE_T_BC'. 3.ensure that the dpdk app has exited and rebind the driver. 4.'IGC-I225_LM' not suport this case, add to checklist. Signed-off-by: Jiale Song --- conf/test_case_checklist.json | 7 +++-- tests/TestSuite_userspace_ethtool.py | 46 ++++++++++++++++++---------- 2 files changed, 34 insertions(+), 19 deletions(-) diff --git a/conf/test_case_checklist.json b/conf/test_case_checklist.json index 053841ce..db94c446 100644 --- a/conf/test_case_checklist.json +++ b/conf/test_case_checklist.json @@ -2131,13 +2131,14 @@ "I40E_10G-SFP_X722", "I40E_10G-10G_BASE_T_X722", "IAVF_10G-X722_VF", - "I40E_10G-10G_BASE_T_BC" + "I40E_10G-10G_BASE_T_BC", + "IGC-I225_LM" ], "Target": [ "ALL" ], - "Bug ID": "", - "Comments": "Know dpdk issue, DPDK-2513" + "Bug ID": "DPDK-2513, DPDK-30123", + "Comments": "the driver not suport this case" } ], "multicast_mode": [ diff --git a/tests/TestSuite_userspace_ethtool.py b/tests/TestSuite_userspace_ethtool.py index adbba999..7129301e 100644 --- a/tests/TestSuite_userspace_ethtool.py +++ b/tests/TestSuite_userspace_ethtool.py @@ -28,7 +28,7 @@ class TestUserspaceEthtool(TestCase): """ self.ports = self.dut.get_ports() self.verify(len(self.ports) >= 2, "No ports found for " + self.nic) - + self.other_700_nic = ["I40E_10G-10G_BASE_T_X722", "I40E_10G-10G_BASE_T_BC"] # build sample app out = self.dut.build_dpdk_apps("examples/ethtool") self.verify("Error" not in out, "compilation error 1") @@ -263,18 +263,25 @@ class TestUserspaceEthtool(TestCase): portinfo["net_dev"].bind_driver(portinfo["ori_driver"]) self.dut.send_expect(self.cmd, "EthApp>", 60) + for port in self.ports: + tester_port = self.tester.get_local_port(port) + intf = self.tester.get_interface(tester_port) + self.tester.is_interface_up(intf) # ethtool doesn't support port disconnect by tools of linux # only detect physical link disconnect status verify_pass = True verify_msg = "" - if not (self.is_eth_series_nic(700) or self.is_eth_series_nic(800)): + if not ( + self.is_eth_series_nic(700) + or self.other_700_nic + or self.is_eth_series_nic(800) + ): # check link status dump function for port in self.ports: tester_port = self.tester.get_local_port(port) intf = self.tester.get_interface(tester_port) self.tester.send_expect("ip link set dev %s down" % intf, "# ") - # wait for link stable - time.sleep(5) + self.tester.is_interface_down(intf) out = self.dut.send_expect("link", "EthApp>", 60) link_pattern = r"Port (\d+): (.*)" @@ -299,8 +306,7 @@ class TestUserspaceEthtool(TestCase): tester_port = self.tester.get_local_port(port) intf = self.tester.get_interface(tester_port) self.tester.send_expect("ip link set dev %s up" % intf, "# ") - # wait for link stable - time.sleep(5) + self.tester.is_interface_up(intf) # check port stats function pkt = Packet(pkt_type="UDP") @@ -447,12 +453,13 @@ class TestUserspaceEthtool(TestCase): ) pkt = Packet(pkt_type="UDP") tester_port = self.tester.get_local_port(port) + intf = self.tester.get_interface(tester_port) + self.tester.is_interface_up(intf) self.verify( self.ethapp_check_link_status(index, "Up") == True, "Fail to Open port{}".format(index), ) - - intf = self.tester.get_interface(tester_port) + time.sleep(1) pkt.send_pkt(self.tester, tx_port=intf, count=4) rx_pkts, tx_pkts = self.strip_portstats(index) self.verify( @@ -512,8 +519,14 @@ class TestUserspaceEthtool(TestCase): for index in range(len(self.ports)): port = self.ports[index] ori_rx_pkts, _ = self.strip_portstats(index) - # add sleep time for update link status with IntelĀ® Ethernet 700 Series nic - time.sleep(10) + # check port link status is up + tester_port = self.tester.get_local_port(port) + intf = self.tester.get_interface(tester_port) + self.tester.is_interface_up(intf) + self.verify( + self.ethapp_check_link_status(index, "Up") == True, + "Fail to Open port{}".format(index), + ) # stop port self.dut.send_expect("stop %d" % index, "EthApp>") # about ICE_25G-E810C_SFP(8086:1593),there have a kernel driver link status issue @@ -530,13 +543,12 @@ class TestUserspaceEthtool(TestCase): ) # check packet not forwarded when port is stop pkt = Packet(pkt_type="UDP") - tester_port = self.tester.get_local_port(port) - intf = self.tester.get_interface(tester_port) pkt.send_pkt(self.tester, tx_port=intf, count=4) rx_pkts, tx_pkts = self.strip_portstats(index) self.verify(rx_pkts == ori_rx_pkts, "Failed to stop port") # restart port and check packet can normally forwarded self.dut.send_expect("open %d" % index, "EthApp>") + self.tester.is_interface_up(intf) self.verify( self.ethapp_check_link_status(index, "Up") == True, "Fail to Open port{}".format(index), @@ -575,7 +587,6 @@ class TestUserspaceEthtool(TestCase): # IntelĀ® Ethernet 800 Series should stop port before set mtu if self.nic in ["ICE_25G-E810C_SFP", "ICE_100G-E810C_QSFP"]: self.dut.send_expect("stop %s" % index, "EthApp>") - # The mtu threshold is 2022,When it is greater than 2022, the open/stop port is required. if mtu > mtu_threshold: if self.nic in [ @@ -592,7 +603,11 @@ class TestUserspaceEthtool(TestCase): if self.nic in ["ICE_25G-E810C_SFP", "ICE_100G-E810C_QSFP"]: self.dut.send_expect("open %s" % index, "EthApp>") - time.sleep(5) + self.tester.is_interface_up(intf) + self.verify( + self.ethapp_check_link_status(index, "Up") == True, + "Fail to Open port{}".format(index), + ) ori_rx_pkts, _ = self.strip_portstats(index) pkt_size = mtu + HEADER_SIZE["eth"] + offset pkt = Packet(pkt_type="UDP", pkt_len=pkt_size) @@ -677,9 +692,8 @@ class TestUserspaceEthtool(TestCase): """ Run after each test case. """ - self.dut.bind_interfaces_linux(self.drivername) self.dut.kill_all() - pass + self.dut.bind_interfaces_linux(self.drivername) def tear_down_all(self): """