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 946CA4367C; Tue, 5 Dec 2023 19:40:07 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2838442DA3; Tue, 5 Dec 2023 19:40:07 +0100 (CET) Received: from mail-pg1-f172.google.com (mail-pg1-f172.google.com [209.85.215.172]) by mails.dpdk.org (Postfix) with ESMTP id 6AC6A40297 for ; Tue, 5 Dec 2023 19:40:05 +0100 (CET) Received: by mail-pg1-f172.google.com with SMTP id 41be03b00d2f7-5c68b5cf14bso1680888a12.0 for ; Tue, 05 Dec 2023 10:40:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iol.unh.edu; s=unh-iol; t=1701801604; x=1702406404; darn=dpdk.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=wUXK47JXe89vQUc1Unf+a5Xpl9/P/ECcyP2lFsBU9aE=; b=MtxPSNx8mevTVljTTWFrQtECx2eEDO03vBspLyIJ4pGQWX9QYsW+HMsKmfHp0A7fqz VLtmsA2esYY5SZhhHYWR3igh2OWk9uPQgvoW6QMhiZ9acmciRY/8lVjb6JfZelUFzGY+ Z9KBGq8F3bO+eH0wrCzpZgx3UqP3KWw0WA3wo= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701801604; x=1702406404; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=wUXK47JXe89vQUc1Unf+a5Xpl9/P/ECcyP2lFsBU9aE=; b=a+cGrrTWC2vLmgFPT6wVEts3jvyWmQpUubNAhdANTG/OVR2V/q3cTsmcz+3EQnj2rt VgZXJLzX8ZbtP4dJc+WcJ74hVjEo8StDlzDVhDSe3AdSzVAYucFfAoinhWvtpmnsPxTQ ydrIrGBbo+auvgIaFACzsuiVUTqnwklXHqoBpnbfO8w3Nst48AHlfZ9DMIt1cghOK+VJ IlFf2DNjhLIjRwD1FLnl98XKLHmvbsOjEmKiCITdrDxKag9AbjWAUPgAhhPIi+nZsnZG njY0tlP26Rl5EOm2MI+EOjbadJo8IVYsjQAleEdjldD3kYFmwAGWomA/6+d/0osKRj7Q kiKw== X-Gm-Message-State: AOJu0Yz0yQDGFS/MCOMRoq1XEbCxqp3PFxn09p/uaij+oivXHovlJbW3 EXpqx4q+/uXrWO9zCDfjAX4eFkk3E2zAifOM87vITw== X-Google-Smtp-Source: AGHT+IFB8Y3DB362nMp7sw1e/TJ0AdTWp40rPVH+YuBWjY/zmD0iDTr+njhd3hiS6fgAkB+knt1x6Gl8D+DGiPudeL8= X-Received: by 2002:a17:90a:43a4:b0:286:6cc1:5fb3 with SMTP id r33-20020a17090a43a400b002866cc15fb3mr1454787pjg.54.1701801604490; Tue, 05 Dec 2023 10:40:04 -0800 (PST) MIME-Version: 1.0 References: <20231123151344.162812-1-juraj.linkes@pantheon.tech> <20231204102429.106709-1-juraj.linkes@pantheon.tech> <20231204102429.106709-22-juraj.linkes@pantheon.tech> In-Reply-To: <20231204102429.106709-22-juraj.linkes@pantheon.tech> From: Jeremy Spewock Date: Tue, 5 Dec 2023 13:39:53 -0500 Message-ID: Subject: Re: [PATCH v9 21/21] dts: test suites docstring update To: =?UTF-8?Q?Juraj_Linke=C5=A1?= Cc: thomas@monjalon.net, Honnappa.Nagarahalli@arm.com, probb@iol.unh.edu, paul.szczepanek@arm.com, yoan.picchi@foss.arm.com, Luca.Vizzarro@arm.com, dev@dpdk.org Content-Type: multipart/alternative; boundary="0000000000001d47f3060bc7909f" X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org --0000000000001d47f3060bc7909f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Reviewed-by: Jeremy Spewock On Mon, Dec 4, 2023 at 5:24=E2=80=AFAM Juraj Linke=C5=A1 wrote: > Format according to the Google format and PEP257, with slight > deviations. > > Signed-off-by: Juraj Linke=C5=A1 > --- > dts/tests/TestSuite_hello_world.py | 16 +++++--- > dts/tests/TestSuite_os_udp.py | 20 ++++++---- > dts/tests/TestSuite_smoke_tests.py | 61 ++++++++++++++++++++++++------ > 3 files changed, 72 insertions(+), 25 deletions(-) > > diff --git a/dts/tests/TestSuite_hello_world.py > b/dts/tests/TestSuite_hello_world.py > index 768ba1cfa8..fd7ff1534d 100644 > --- a/dts/tests/TestSuite_hello_world.py > +++ b/dts/tests/TestSuite_hello_world.py > @@ -1,7 +1,8 @@ > # SPDX-License-Identifier: BSD-3-Clause > # Copyright(c) 2010-2014 Intel Corporation > > -""" > +"""The DPDK hello world app test suite. > + > Run the helloworld example app and verify it prints a message for each > used core. > No other EAL parameters apart from cores are used. > """ > @@ -15,22 +16,25 @@ > > > class TestHelloWorld(TestSuite): > + """DPDK hello world app test suite.""" > + > def set_up_suite(self) -> None: > - """ > + """Set up the test suite. > + > Setup: > Build the app we're about to test - helloworld. > """ > self.app_helloworld_path =3D > self.sut_node.build_dpdk_app("helloworld") > > def test_hello_world_single_core(self) -> None: > - """ > + """Single core test case. > + > Steps: > Run the helloworld app on the first usable logical core. > Verify: > The app prints a message from the used core: > "hello from core " > """ > - > # get the first usable core > lcore_amount =3D LogicalCoreCount(1, 1, 1) > lcores =3D LogicalCoreCountFilter(self.sut_node.lcores, > lcore_amount).filter() > @@ -42,14 +46,14 @@ def test_hello_world_single_core(self) -> None: > ) > > def test_hello_world_all_cores(self) -> None: > - """ > + """All cores test case. > + > Steps: > Run the helloworld app on all usable logical cores. > Verify: > The app prints a message from all used cores: > "hello from core " > """ > - > # get the maximum logical core number > eal_para =3D self.sut_node.create_eal_parameters( > lcore_filter_specifier=3DLogicalCoreList(self.sut_node.lcore= s) > diff --git a/dts/tests/TestSuite_os_udp.py b/dts/tests/TestSuite_os_udp.p= y > index bf6b93deb5..2cf29d37bb 100644 > --- a/dts/tests/TestSuite_os_udp.py > +++ b/dts/tests/TestSuite_os_udp.py > @@ -1,7 +1,8 @@ > # SPDX-License-Identifier: BSD-3-Clause > # Copyright(c) 2023 PANTHEON.tech s.r.o. > > -""" > +"""Basic IPv4 OS routing test suite. > + > Configure SUT node to route traffic from if1 to if2. > Send a packet to the SUT node, verify it comes back on the second port o= n > the TG node. > """ > @@ -13,24 +14,26 @@ > > > class TestOSUdp(TestSuite): > + """IPv4 UDP OS routing test suite.""" > + > def set_up_suite(self) -> None: > - """ > + """Set up the test suite. > + > Setup: > - Configure SUT ports and SUT to route traffic from if1 to if2= . > + Bind the SUT ports to the OS driver, configure the ports and > configure the SUT > + to route traffic from if1 to if2. > """ > - > - # This test uses kernel drivers > self.sut_node.bind_ports_to_driver(for_dpdk=3DFalse) > self.configure_testbed_ipv4() > > def test_os_udp(self) -> None: > - """ > + """Basic UDP IPv4 traffic test case. > + > Steps: > Send a UDP packet. > Verify: > The packet with proper addresses arrives at the other TG por= t. > """ > - > packet =3D Ether() / IP() / UDP() > > received_packets =3D self.send_packet_and_capture(packet) > @@ -40,7 +43,8 @@ def test_os_udp(self) -> None: > self.verify_packets(expected_packet, received_packets) > > def tear_down_suite(self) -> None: > - """ > + """Tear down the test suite. > + > Teardown: > Remove the SUT port configuration configured in setup. > """ > diff --git a/dts/tests/TestSuite_smoke_tests.py > b/dts/tests/TestSuite_smoke_tests.py > index 8958f58dac..5e2bac14bd 100644 > --- a/dts/tests/TestSuite_smoke_tests.py > +++ b/dts/tests/TestSuite_smoke_tests.py > @@ -1,6 +1,17 @@ > # SPDX-License-Identifier: BSD-3-Clause > # Copyright(c) 2023 University of New Hampshire > > +"""Smoke test suite. > + > +Smoke tests are a class of tests which are used for validating a minimal > set of important features. > +These are the most important features without which (or when they're > faulty) the software wouldn't > +work properly. Thus, if any failure occurs while testing these features, > +there isn't that much of a reason to continue testing, as the software i= s > fundamentally broken. > + > +These tests don't have to include only DPDK tests, as the reason for > failures could be > +in the infrastructure (a faulty link between NICs or a misconfiguration)= . > +""" > + > import re > > from framework.config import PortConfig > @@ -11,23 +22,39 @@ > > > class SmokeTests(TestSuite): > + """DPDK and infrastructure smoke test suite. > + > + The test cases validate the most basic DPDK functionality needed for > all other test suites. > + The infrastructure also needs to be tested, as that is also used by > all other test suites. > + > + Attributes: > + is_blocking: This test suite will block the execution of all > other test suites > + in the build target after it. > + nics_in_node: The NICs present on the SUT node. > + """ > + > is_blocking =3D True > # dicts in this list are expected to have two keys: > # "pci_address" and "current_driver" > nics_in_node: list[PortConfig] =3D [] > > def set_up_suite(self) -> None: > - """ > + """Set up the test suite. > + > Setup: > - Set the build directory path and generate a list of NICs in > the SUT node. > + Set the build directory path and a list of NICs in the SUT > node. > """ > self.dpdk_build_dir_path =3D self.sut_node.remote_dpdk_build_dir > self.nics_in_node =3D self.sut_node.config.ports > > def test_unit_tests(self) -> None: > - """ > + """DPDK meson ``fast-tests`` unit tests. > + > + Test that all unit test from the ``fast-tests`` suite pass. > + The suite is a subset with only the most basic tests. > + > Test: > - Run the fast-test unit-test suite through meson. > + Run the ``fast-tests`` unit test suite through meson. > """ > self.sut_node.main_session.send_command( > f"meson test -C {self.dpdk_build_dir_path} --suite fast-test= s > -t 60", > @@ -37,9 +64,14 @@ def test_unit_tests(self) -> None: > ) > > def test_driver_tests(self) -> None: > - """ > + """DPDK meson ``driver-tests`` unit tests. > + > + Test that all unit test from the ``driver-tests`` suite pass. > + The suite is a subset with driver tests. This suite may be run > with virtual devices > + configured in the test run configuration. > + > Test: > - Run the driver-test unit-test suite through meson. > + Run the ``driver-tests`` unit test suite through meson. > """ > vdev_args =3D "" > for dev in self.sut_node.virtual_devices: > @@ -60,9 +92,12 @@ def test_driver_tests(self) -> None: > ) > > def test_devices_listed_in_testpmd(self) -> None: > - """ > + """Testpmd device discovery. > + > + Test that the devices configured in the test run configuration > are found in testpmd. > + > Test: > - Uses testpmd driver to verify that devices have been found b= y > testpmd. > + List all devices found in testpmd and verify the configured > devices are among them. > """ > testpmd_driver =3D > self.sut_node.create_interactive_shell(TestPmdShell, privileged=3DTrue) > dev_list =3D [str(x) for x in testpmd_driver.get_devices()] > @@ -74,10 +109,14 @@ def test_devices_listed_in_testpmd(self) -> None: > ) > > def test_device_bound_to_driver(self) -> None: > - """ > + """Device driver in OS. > + > + Test that the devices configured in the test run configuration > are bound to > + the proper driver. > + > Test: > - Ensure that all drivers listed in the config are bound to th= e > correct > - driver. > + List all devices with the ``dpdk-devbind.py`` script and > verify that > + the configured devices are bound to the proper driver. > """ > path_to_devbind =3D self.sut_node.path_to_devbind_script > > -- > 2.34.1 > > --0000000000001d47f3060bc7909f Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Reviewed-by: Jeremy Spewock <jspewock@iol.unh.edu>

On Mon, Dec 4, 2023 at 5:24=E2=80= =AFAM Juraj Linke=C5=A1 <juraj.linkes@pantheon.tech> wrote:
=
Format according to the G= oogle format and PEP257, with slight
deviations.

Signed-off-by: Juraj Linke=C5=A1 <juraj.linkes@pantheon.tech>
---
=C2=A0dts/tests/TestSuite_hello_world.py | 16 +++++---
=C2=A0dts/tests/TestSuite_os_udp.py=C2=A0 =C2=A0 =C2=A0 | 20 ++++++----
=C2=A0dts/tests/TestSuite_smoke_tests.py | 61 ++++++++++++++++++++++++-----= -
=C2=A03 files changed, 72 insertions(+), 25 deletions(-)

diff --git a/dts/tests/TestSuite_hello_world.py b/dts/tests/TestSuite_hello= _world.py
index 768ba1cfa8..fd7ff1534d 100644
--- a/dts/tests/TestSuite_hello_world.py
+++ b/dts/tests/TestSuite_hello_world.py
@@ -1,7 +1,8 @@
=C2=A0# SPDX-License-Identifier: BSD-3-Clause
=C2=A0# Copyright(c) 2010-2014 Intel Corporation

-"""
+"""The DPDK hello world app test suite.
+
=C2=A0Run the helloworld example app and verify it prints a message for eac= h used core.
=C2=A0No other EAL parameters apart from cores are used.
=C2=A0"""
@@ -15,22 +16,25 @@


=C2=A0class TestHelloWorld(TestSuite):
+=C2=A0 =C2=A0 """DPDK hello world app test suite."&quo= t;"
+
=C2=A0 =C2=A0 =C2=A0def set_up_suite(self) -> None:
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 """
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 """Set up the test suite.
+
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Setup:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Build the app we're abo= ut to test - helloworld.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"""
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0self.app_helloworld_path =3D self.sut_nod= e.build_dpdk_app("helloworld")

=C2=A0 =C2=A0 =C2=A0def test_hello_world_single_core(self) -> None:
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 """
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 """Single core test case.
+
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Steps:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Run the helloworld app on t= he first usable logical core.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Verify:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0The app prints a message fr= om the used core:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"hello from core <c= ore_id>"
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"""
-
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0# get the first usable core
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0lcore_amount =3D LogicalCoreCount(1, 1, 1= )
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0lcores =3D LogicalCoreCountFilter(self.su= t_node.lcores, lcore_amount).filter()
@@ -42,14 +46,14 @@ def test_hello_world_single_core(self) -> None:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0)

=C2=A0 =C2=A0 =C2=A0def test_hello_world_all_cores(self) -> None:
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 """
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 """All cores test case.
+
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Steps:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Run the helloworld app on a= ll usable logical cores.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Verify:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0The app prints a message fr= om all used cores:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"hello from core <c= ore_id>"
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"""
-
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0# get the maximum logical core number
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0eal_para =3D self.sut_node.create_eal_par= ameters(
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0lcore_filter_specifier=3DLo= gicalCoreList(self.sut_node.lcores)
diff --git a/dts/tests/TestSuite_os_udp.py b/dts/tests/TestSuite_os_udp.py<= br> index bf6b93deb5..2cf29d37bb 100644
--- a/dts/tests/TestSuite_os_udp.py
+++ b/dts/tests/TestSuite_os_udp.py
@@ -1,7 +1,8 @@
=C2=A0# SPDX-License-Identifier: BSD-3-Clause
=C2=A0# Copyright(c) 2023 PANTHEON.tech s.r.o.

-"""
+"""Basic IPv4 OS routing test suite.
+
=C2=A0Configure SUT node to route traffic from if1 to if2.
=C2=A0Send a packet to the SUT node, verify it comes back on the second por= t on the TG node.
=C2=A0"""
@@ -13,24 +14,26 @@


=C2=A0class TestOSUdp(TestSuite):
+=C2=A0 =C2=A0 """IPv4 UDP OS routing test suite.""= ;"
+
=C2=A0 =C2=A0 =C2=A0def set_up_suite(self) -> None:
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 """
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 """Set up the test suite.
+
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Setup:
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Configure SUT ports and SUT to r= oute traffic from if1 to if2.
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Bind the SUT ports to the OS dri= ver, configure the ports and configure the SUT
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 to route traffic from if1 to if2= .
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"""
-
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 # This test uses kernel drivers
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0self.sut_node.bind_ports_to_driver(for_dp= dk=3DFalse)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0self.configure_testbed_ipv4()

=C2=A0 =C2=A0 =C2=A0def test_os_udp(self) -> None:
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 """
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 """Basic UDP IPv4 traffic test = case.
+
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Steps:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Send a UDP packet.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Verify:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0The packet with proper addr= esses arrives at the other TG port.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"""
-
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0packet =3D Ether() / IP() / UDP()

=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0received_packets =3D self.send_packet_and= _capture(packet)
@@ -40,7 +43,8 @@ def test_os_udp(self) -> None:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0self.verify_packets(expected_packet, rece= ived_packets)

=C2=A0 =C2=A0 =C2=A0def tear_down_suite(self) -> None:
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 """
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 """Tear down the test suite. +
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Teardown:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Remove the SUT port configu= ration configured in setup.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"""
diff --git a/dts/tests/TestSuite_smoke_tests.py b/dts/tests/TestSuite_smoke= _tests.py
index 8958f58dac..5e2bac14bd 100644
--- a/dts/tests/TestSuite_smoke_tests.py
+++ b/dts/tests/TestSuite_smoke_tests.py
@@ -1,6 +1,17 @@
=C2=A0# SPDX-License-Identifier: BSD-3-Clause
=C2=A0# Copyright(c) 2023 University of New Hampshire

+"""Smoke test suite.
+
+Smoke tests are a class of tests which are used for validating a minimal s= et of important features.
+These are the most important features without which (or when they're f= aulty) the software wouldn't
+work properly. Thus, if any failure occurs while testing these features, +there isn't that much of a reason to continue testing, as the software= is fundamentally broken.
+
+These tests don't have to include only DPDK tests, as the reason for f= ailures could be
+in the infrastructure (a faulty link between NICs or a misconfiguration).<= br> +"""
+
=C2=A0import re

=C2=A0from framework.config import PortConfig
@@ -11,23 +22,39 @@


=C2=A0class SmokeTests(TestSuite):
+=C2=A0 =C2=A0 """DPDK and infrastructure smoke test suite.<= br> +
+=C2=A0 =C2=A0 The test cases validate the most basic DPDK functionality ne= eded for all other test suites.
+=C2=A0 =C2=A0 The infrastructure also needs to be tested, as that is also = used by all other test suites.
+
+=C2=A0 =C2=A0 Attributes:
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 is_blocking: This test suite will block the ex= ecution of all other test suites
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 in the build target after it. +=C2=A0 =C2=A0 =C2=A0 =C2=A0 nics_in_node: The NICs present on the SUT node= .
+=C2=A0 =C2=A0 """
+
=C2=A0 =C2=A0 =C2=A0is_blocking =3D True
=C2=A0 =C2=A0 =C2=A0# dicts in this list are expected to have two keys:
=C2=A0 =C2=A0 =C2=A0# "pci_address" and "current_driver"= ;
=C2=A0 =C2=A0 =C2=A0nics_in_node: list[PortConfig] =3D []

=C2=A0 =C2=A0 =C2=A0def set_up_suite(self) -> None:
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 """
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 """Set up the test suite.
+
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Setup:
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Set the build directory path and= generate a list of NICs in the SUT node.
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Set the build directory path and= a list of NICs in the SUT node.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"""
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0self.dpdk_build_dir_path =3D self.sut_nod= e.remote_dpdk_build_dir
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0self.nics_in_node =3D self.sut_node.confi= g.ports

=C2=A0 =C2=A0 =C2=A0def test_unit_tests(self) -> None:
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 """
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 """DPDK meson ``fast-tests`` un= it tests.
+
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 Test that all unit test from the ``fast-tests`= ` suite pass.
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 The suite is a subset with only the most basic= tests.
+
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Test:
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Run the fast-test unit-test suit= e through meson.
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Run the ``fast-tests`` unit test= suite through meson.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"""
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0self.sut_node.main_session.send_command(<= br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0f"meson test -C {self.= dpdk_build_dir_path} --suite fast-tests -t 60",
@@ -37,9 +64,14 @@ def test_unit_tests(self) -> None:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0)

=C2=A0 =C2=A0 =C2=A0def test_driver_tests(self) -> None:
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 """
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 """DPDK meson ``driver-tests`` = unit tests.
+
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 Test that all unit test from the ``driver-test= s`` suite pass.
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 The suite is a subset with driver tests. This = suite may be run with virtual devices
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 configured in the test run configuration.
+
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Test:
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Run the driver-test unit-test su= ite through meson.
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Run the ``driver-tests`` unit te= st suite through meson.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"""
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0vdev_args =3D ""
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0for dev in self.sut_node.virtual_devices:=
@@ -60,9 +92,12 @@ def test_driver_tests(self) -> None:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0)

=C2=A0 =C2=A0 =C2=A0def test_devices_listed_in_testpmd(self) -> None: -=C2=A0 =C2=A0 =C2=A0 =C2=A0 """
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 """Testpmd device discovery. +
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 Test that the devices configured in the test r= un configuration are found in testpmd.
+
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Test:
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Uses testpmd driver to verify th= at devices have been found by testpmd.
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 List all devices found in testpm= d and verify the configured devices are among them.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"""
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0testpmd_driver =3D self.sut_node.create_i= nteractive_shell(TestPmdShell, privileged=3DTrue)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0dev_list =3D [str(x) for x in testpmd_dri= ver.get_devices()]
@@ -74,10 +109,14 @@ def test_devices_listed_in_testpmd(self) -> None: =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0)

=C2=A0 =C2=A0 =C2=A0def test_device_bound_to_driver(self) -> None:
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 """
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 """Device driver in OS.
+
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 Test that the devices configured in the test r= un configuration are bound to
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 the proper driver.
+
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Test:
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Ensure that all drivers listed i= n the config are bound to the correct
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 driver.
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 List all devices with the ``dpdk= -devbind.py`` script and verify that
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 the configured devices are bound= to the proper driver.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"""
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0path_to_devbind =3D self.sut_node.path_to= _devbind_script

--
2.34.1

--0000000000001d47f3060bc7909f--