Recheck-request: iol-unit-arm64-testing

On Fri, Oct 23, 2026 at 5:04 PM Koushik Bhargav Nimoji <[email protected]>
wrote:

> Previously, users were unable to run both functional and performance
> test suites in a single DTS run due to driver binding conflicts.
> This patch separates traffic generator setup by test suite, in
> order to allow running functional and performance test suites in
> the same DTS run.
>
> Signed-off-by: Koushik Bhargav Nimoji <[email protected]>
> ---
> v2:
>      *Added TRex TG teardown to re-bind ports
>       to kernel driver
> v3:
>      *Added topology-based port binding upon
>       TRex setup to preserve internal port
>       config state, removed all manual bindings
> ---
>  dts/api/test_suite.py                         | 40 +++++++++++++++++++
>  dts/framework/test_run.py                     | 24 ++++++++---
>  dts/framework/testbed_model/linux_session.py  |  6 ++-
>  .../testbed_model/traffic_generator/trex.py   |  1 +
>  dts/tests/TestSuite_blocklist.py              |  3 +-
>  dts/tests/TestSuite_buffer_scatter.py         |  3 +-
>  dts/tests/TestSuite_checksum_offload.py       |  3 +-
>  dts/tests/TestSuite_cryptodev_latency.py      |  3 +-
>  dts/tests/TestSuite_cryptodev_throughput.py   |  3 +-
>  dts/tests/TestSuite_dual_vlan.py              |  3 +-
>  dts/tests/TestSuite_dynamic_config.py         |  3 +-
>  dts/tests/TestSuite_dynamic_queue_conf.py     |  3 +-
>  dts/tests/TestSuite_flow_offload.py           |  3 +-
>  dts/tests/TestSuite_hello_world.py            |  3 +-
>  dts/tests/TestSuite_l2fwd.py                  |  3 +-
>  dts/tests/TestSuite_mac_filter.py             |  3 +-
>  dts/tests/TestSuite_mtu.py                    |  3 +-
>  dts/tests/TestSuite_packet_capture.py         |  3 +-
>  dts/tests/TestSuite_port_control.py           |  3 +-
>  ...stSuite_port_restart_config_persistency.py |  3 +-
>  dts/tests/TestSuite_port_stats.py             |  3 +-
>  dts/tests/TestSuite_promisc_support.py        |  3 +-
>  dts/tests/TestSuite_qinq.py                   |  3 +-
>  dts/tests/TestSuite_queue_toggle.py           |  3 +-
>  dts/tests/TestSuite_rss.py                    |  3 +-
>  dts/tests/TestSuite_rx_split.py               |  3 +-
>  dts/tests/TestSuite_rx_tx_offload.py          |  3 +-
>  .../TestSuite_single_core_forward_perf.py     |  3 +-
>  dts/tests/TestSuite_smoke_tests.py            |  3 +-
>  dts/tests/TestSuite_softnic.py                |  3 +-
>  dts/tests/TestSuite_speed_capabilities.py     |  3 +-
>  dts/tests/TestSuite_unified_packet.py         |  3 +-
>  dts/tests/TestSuite_virtio_forward.py         |  3 +-
>  dts/tests/TestSuite_vlan.py                   |  3 +-
>  34 files changed, 123 insertions(+), 38 deletions(-)
>
> diff --git a/dts/api/test_suite.py b/dts/api/test_suite.py
> index c30d447135..11027344d0 100644
> --- a/dts/api/test_suite.py
> +++ b/dts/api/test_suite.py
> @@ -44,6 +44,17 @@ class BaseConfig(FrozenModel):
>      """Base for a custom test suite configuration."""
>
>
> +class TestSuiteType(Enum):
> +    """Enum to specify test suite type."""
> +
> +    FUNC = auto()
> +    PERF = auto()
> +    CRYPTO = auto()
> +
> +
> +TestSuiteClassType = TypeVar("TestSuiteClassType",
> bound=type["TestSuite"])
> +
> +
>  class TestSuite(TestProtocol):
>      """The base class with building blocks needed by most test cases.
>
> @@ -84,6 +95,30 @@ class TestSuite(TestProtocol):
>      _sut_ip_address_egress: Union[IPv4Interface, IPv6Interface]
>      _tg_ip_address_ingress: Union[IPv4Interface, IPv6Interface]
>      _tg_ip_address_egress: Union[IPv4Interface, IPv6Interface]
> +    test_suite_type: ClassVar[TestSuiteType]
> +
> +    @classmethod
> +    def make_decorator(
> +        cls, test_suite_type: TestSuiteType
> +    ) -> Callable[[TestSuiteClassType], TestSuiteClassType]:
> +        """Creates a decorator for test suites.
> +
> +        The decorator casts the decorated function as :class:`TestSuite`,
> +        sets it as `testsuite_type` and initializes a variable to
> +        determine the type of test suite.
> +
> +        Args:
> +            test_suite_type: A functional, performance, or cryptodev test
> suite.
> +
> +        Returns:
> +            The decorator of a functional, performance, or cryptodev test
> suite.
> +        """
> +
> +        def _decorator(test_suite_cls: TestSuiteClassType) ->
> TestSuiteClassType:
> +            test_suite_cls.test_suite_type = test_suite_type
> +            return test_suite_cls
> +
> +        return _decorator
>
>      def __init__(self, config: BaseConfig) -> None:
>          """Initialize the test suite testbed information and basic
> configuration.
> @@ -269,6 +304,11 @@ def _adjust_addresses(self, packets: list[Packet],
> expected: bool = False) -> li
>          return ret_packets
>
>
> +#: Test suite type decorators
> +func_suite: Callable[[Any], type["TestSuite"]] =
> TestSuite.make_decorator(TestSuiteType.FUNC)
> +perf_suite: Callable[[Any], type["TestSuite"]] =
> TestSuite.make_decorator(TestSuiteType.PERF)
> +crypto_suite: Callable[[Any], type["TestSuite"]] =
> TestSuite.make_decorator(TestSuiteType.CRYPTO)
> +
>  #: The generic type for a method of an instance of TestSuite
>  TestSuiteMethodType = TypeVar("TestSuiteMethodType",
> bound=Callable[[TestSuite], None])
>
> diff --git a/dts/framework/test_run.py b/dts/framework/test_run.py
> index 210ff25af7..3890606512 100644
> --- a/dts/framework/test_run.py
> +++ b/dts/framework/test_run.py
> @@ -110,7 +110,7 @@
>  from api.capabilities import LinkTopology
>  from api.context import Context, init_ctx
>  from api.exception import InternalError, SkippedTestException,
> TestCaseVerifyError
> -from api.test_suite import BaseConfig, TestCase, TestCaseType, TestSuite
> +from api.test_suite import BaseConfig, TestCase, TestCaseType, TestSuite,
> TestSuiteType
>  from api.testbed_model.capability import (
>      Capability,
>      get_supported_capabilities,
> @@ -375,11 +375,6 @@ def next(self) -> State | None:
>              ctx.topology.bind_cryptodevs("dpdk")
>
>          ctx.topology.configure_ports("sut", "dpdk")
> -        if ctx.func_tg and ctx.topology.type is not LinkTopology.NO_LINK:
> -            ctx.func_tg.setup(ctx.topology)
> -        if ctx.perf_tg and ctx.topology.type is not LinkTopology.NO_LINK:
> -            ctx.perf_tg.setup(ctx.topology)
> -
>          self.result.ports = [
>              port.to_dict() for port in ctx.topology.sut_ports +
> ctx.topology.tg_ports
>          ]
> @@ -512,6 +507,23 @@ def before(self) -> None:
>          super().before()
>          self.logger.set_custom_log_file(self.test_suite.name)
>
> +        ctx = self.test_run.ctx
> +        test_suite_type = self.test_suite.test_suite_type
> +        if (
> +            ctx.topology.type is not LinkTopology.NO_LINK
> +            and test_suite_type is not TestSuiteType.CRYPTO
> +        ):
> +            if test_suite_type == TestSuiteType.FUNC:
> +                required_tg, other_tg = ctx.func_tg, ctx.perf_tg
> +            else:
> +                required_tg, other_tg = ctx.perf_tg, ctx.func_tg
> +
> +            if other_tg and other_tg.is_setup:
> +                other_tg.teardown()
> +
> +            if required_tg and not required_tg.is_setup:
> +                required_tg.setup(ctx.topology)
> +
>      @property
>      def description(self) -> str:
>          """State description."""
> diff --git a/dts/framework/testbed_model/linux_session.py
> b/dts/framework/testbed_model/linux_session.py
> index 8cc0d09d01..fe3f1a8fc3 100644
> --- a/dts/framework/testbed_model/linux_session.py
> +++ b/dts/framework/testbed_model/linux_session.py
> @@ -278,7 +278,8 @@ def bind_ports_to_driver(self, ports: list[Port],
> driver_name: str) -> None:
>              verify=True,
>          )
>
> -        del self._lshw_net_info
> +        if self._lshw_net_info:
> +            del self._lshw_net_info
>
>      def bring_up_link(self, ports: Iterable[Port]) -> None:
>          """Overrides :meth:`~.os_session.OSSession.bring_up_link`."""
> @@ -287,7 +288,8 @@ def bring_up_link(self, ports: Iterable[Port]) -> None:
>                  f"ip link set dev {port.logical_name} up",
> privileged=True, verify=True
>              )
>
> -        del self._lshw_net_info
> +        if self._lshw_net_info:
> +            del self._lshw_net_info
>
>      def set_interface_link_up(self, name: str) -> None:
>          """Overrides
> :meth:`~.os_session.OSSession.set_interface_link_up`."""
> diff --git a/dts/framework/testbed_model/traffic_generator/trex.py
> b/dts/framework/testbed_model/traffic_generator/trex.py
> index 7ce1d40d79..055c22e121 100644
> --- a/dts/framework/testbed_model/traffic_generator/trex.py
> +++ b/dts/framework/testbed_model/traffic_generator/trex.py
> @@ -110,6 +110,7 @@ def __init__(self, tg_node: Node, config:
> TrexTrafficGeneratorConfig) -> None:
>      def setup(self, topology: Topology):
>          """Initialize and start a TRex server process."""
>          super().setup(topology)
> +        topology.configure_ports("tg", "dpdk")
>          self._topology = topology
>
>          self._shell = PythonShell(self._tg_node, "TRex-client",
> privileged=True)
> diff --git a/dts/tests/TestSuite_blocklist.py
> b/dts/tests/TestSuite_blocklist.py
> index 31e69c0de9..e32f31b383 100644
> --- a/dts/tests/TestSuite_blocklist.py
> +++ b/dts/tests/TestSuite_blocklist.py
> @@ -11,11 +11,12 @@
>      requires_link_topology,
>  )
>  from api.test import verify
> -from api.test_suite import TestSuite, func_test
> +from api.test_suite import TestSuite, func_suite, func_test
>  from api.testbed_model.port import Port
>  from api.testpmd import TestPmd
>
>
> +@func_suite
>  class TestBlocklist(TestSuite):
>      """DPDK device blocklisting test suite."""
>
> diff --git a/dts/tests/TestSuite_buffer_scatter.py
> b/dts/tests/TestSuite_buffer_scatter.py
> index cd1a52ad5e..adc8e41700 100644
> --- a/dts/tests/TestSuite_buffer_scatter.py
> +++ b/dts/tests/TestSuite_buffer_scatter.py
> @@ -28,13 +28,14 @@
>  )
>  from api.packet import send_packet_and_capture
>  from api.test import verify
> -from api.test_suite import TestSuite, func_test
> +from api.test_suite import TestSuite, func_suite, func_test
>  from api.testpmd import TestPmd
>  from api.testpmd.config import SimpleForwardingModes
>
>
>  @requires_nic_capability(NicCapability.PHYSICAL_FUNCTION)
>  @requires_nic_capability(NicCapability.PORT_RX_OFFLOAD_SCATTER)
> +@func_suite
>  class TestBufferScatter(TestSuite):
>      """DPDK PMD packet scattering test suite.
>
> diff --git a/dts/tests/TestSuite_checksum_offload.py
> b/dts/tests/TestSuite_checksum_offload.py
> index a2ea13991b..8c16706f1b 100644
> --- a/dts/tests/TestSuite_checksum_offload.py
> +++ b/dts/tests/TestSuite_checksum_offload.py
> @@ -25,7 +25,7 @@
>  )
>  from api.packet import send_packet_and_capture
>  from api.test import verify
> -from api.test_suite import TestSuite, func_test
> +from api.test_suite import TestSuite, func_suite, func_test
>  from api.testpmd import TestPmd
>  from api.testpmd.config import SimpleForwardingModes
>  from api.testpmd.types import ChecksumOffloadOptions, PacketOffloadFlag
> @@ -34,6 +34,7 @@
>  @requires_nic_capability(NicCapability.PORT_RX_OFFLOAD_IPV4_CKSUM)
>  @requires_nic_capability(NicCapability.PORT_RX_OFFLOAD_UDP_CKSUM)
>  @requires_nic_capability(NicCapability.PORT_RX_OFFLOAD_TCP_CKSUM)
> +@func_suite
>  class TestChecksumOffload(TestSuite):
>      """Checksum offload test suite.
>
> diff --git a/dts/tests/TestSuite_cryptodev_latency.py
> b/dts/tests/TestSuite_cryptodev_latency.py
> index 444a5b282c..bf3b9b5761 100644
> --- a/dts/tests/TestSuite_cryptodev_latency.py
> +++ b/dts/tests/TestSuite_cryptodev_latency.py
> @@ -31,7 +31,7 @@
>      CryptodevResults,
>  )
>  from api.test import skip, verify
> -from api.test_suite import BaseConfig, TestSuite, crypto_test
> +from api.test_suite import BaseConfig, TestSuite, crypto_suite,
> crypto_test
>  from api.testbed_model.virtual_device import VirtualDevice
>
>  config_list: list[dict[str, int | float | str]] = [
> @@ -73,6 +73,7 @@ class Config(BaseConfig):
>
>
>  @requires_link_topology(LinkTopology.NO_LINK)
> +@crypto_suite
>  class TestCryptodevLatency(TestSuite):
>      """DPDK Crypto Device Testing Suite."""
>
> diff --git a/dts/tests/TestSuite_cryptodev_throughput.py
> b/dts/tests/TestSuite_cryptodev_throughput.py
> index 59f64f2cd7..7a364a1dc4 100644
> --- a/dts/tests/TestSuite_cryptodev_throughput.py
> +++ b/dts/tests/TestSuite_cryptodev_throughput.py
> @@ -31,7 +31,7 @@
>      CryptodevResults,
>  )
>  from api.test import skip, verify
> -from api.test_suite import BaseConfig, TestSuite, crypto_test
> +from api.test_suite import BaseConfig, TestSuite, crypto_suite,
> crypto_test
>  from api.testbed_model.virtual_device import VirtualDevice
>
>  config_list: list[dict[str, int | float | str]] = [
> @@ -74,6 +74,7 @@ class Config(BaseConfig):
>
>
>  @requires_link_topology(LinkTopology.NO_LINK)
> +@crypto_suite
>  class TestCryptodevThroughput(TestSuite):
>      """DPDK Crypto Device Testing Suite."""
>
> diff --git a/dts/tests/TestSuite_dual_vlan.py
> b/dts/tests/TestSuite_dual_vlan.py
> index f3347a6d52..6038899c5c 100644
> --- a/dts/tests/TestSuite_dual_vlan.py
> +++ b/dts/tests/TestSuite_dual_vlan.py
> @@ -21,11 +21,12 @@
>  from api.capabilities import LinkTopology, requires_link_topology
>  from api.packet import send_packet_and_capture
>  from api.test import verify
> -from api.test_suite import TestSuite, func_test
> +from api.test_suite import TestSuite, func_suite, func_test
>  from api.testpmd import TestPmd
>  from api.testpmd.config import SimpleForwardingModes
>
>
> +@func_suite
>  class TestDualVlan(TestSuite):
>      """DPDK Dual VLAN test suite.
>
> diff --git a/dts/tests/TestSuite_dynamic_config.py
> b/dts/tests/TestSuite_dynamic_config.py
> index b9e2c30da1..e071e63a6d 100644
> --- a/dts/tests/TestSuite_dynamic_config.py
> +++ b/dts/tests/TestSuite_dynamic_config.py
> @@ -27,13 +27,14 @@
>  )
>  from api.packet import send_packet_and_capture
>  from api.test import verify
> -from api.test_suite import TestSuite, func_test
> +from api.test_suite import TestSuite, func_suite, func_test
>  from api.testpmd import TestPmd
>  from api.testpmd.config import SimpleForwardingModes
>
>
>  @requires_nic_capability(NicCapability.PHYSICAL_FUNCTION)
>  @requires_link_topology(LinkTopology.TWO_LINKS)
> +@func_suite
>  class TestDynamicConfig(TestSuite):
>      """Dynamic config suite.
>
> diff --git a/dts/tests/TestSuite_dynamic_queue_conf.py
> b/dts/tests/TestSuite_dynamic_queue_conf.py
> index 24584c7d60..bc11d1ce1f 100644
> --- a/dts/tests/TestSuite_dynamic_queue_conf.py
> +++ b/dts/tests/TestSuite_dynamic_queue_conf.py
> @@ -38,7 +38,7 @@
>  from api.exception import InteractiveCommandExecutionError
>  from api.packet import send_packets
>  from api.test import fail, verify
> -from api.test_suite import TestSuite, func_test
> +from api.test_suite import TestSuite, func_suite, func_test
>  from api.testpmd import TestPmd
>  from api.testpmd.config import PortTopology, SimpleForwardingModes
>
> @@ -121,6 +121,7 @@ def _wrap(self: "TestDynamicQueueConf", is_rx_testing:
> bool) -> None:
>
>
>  @requires_nic_capability(NicCapability.PHYSICAL_FUNCTION)
> +@func_suite
>  class TestDynamicQueueConf(TestSuite):
>      """DPDK dynamic queue configuration test suite.
>
> diff --git a/dts/tests/TestSuite_flow_offload.py
> b/dts/tests/TestSuite_flow_offload.py
> index 09384b1983..624ff93b17 100644
> --- a/dts/tests/TestSuite_flow_offload.py
> +++ b/dts/tests/TestSuite_flow_offload.py
> @@ -28,7 +28,7 @@
>  )
>  from api.packet import send_packet_and_capture
>  from api.test import fail, log, verify
> -from api.test_suite import TestSuite, func_test
> +from api.test_suite import TestSuite, func_suite, func_test
>  from api.testpmd import TestPmd
>  from api.testpmd.types import FlowRule
>
> @@ -402,6 +402,7 @@ def generate(
>
>
>  @requires_nic_capability(NicCapability.FLOW_CTRL)
> +@func_suite
>  class TestFlowOffload(TestSuite):
>      """Flow offload test suite.
>
> diff --git a/dts/tests/TestSuite_hello_world.py
> b/dts/tests/TestSuite_hello_world.py
> index cd62eb8f3e..9bc555aa08 100644
> --- a/dts/tests/TestSuite_hello_world.py
> +++ b/dts/tests/TestSuite_hello_world.py
> @@ -9,7 +9,7 @@
>  """
>
>  from api.test import log
> -from api.test_suite import BaseConfig, TestSuite, func_test
> +from api.test_suite import BaseConfig, TestSuite, func_suite, func_test
>  from api.testpmd import TestPmd
>
>
> @@ -20,6 +20,7 @@ class Config(BaseConfig):
>      msg: str = "Hello World!"
>
>
> +@func_suite
>  class TestHelloWorld(TestSuite):
>      """Hello World test suite. One test case, which starts and stops a
> testpmd session."""
>
> diff --git a/dts/tests/TestSuite_l2fwd.py b/dts/tests/TestSuite_l2fwd.py
> index f237821a04..b987efbebf 100644
> --- a/dts/tests/TestSuite_l2fwd.py
> +++ b/dts/tests/TestSuite_l2fwd.py
> @@ -19,7 +19,7 @@
>      match_all_packets,
>      send_packets_and_capture,
>  )
> -from api.test_suite import TestSuite, func_test
> +from api.test_suite import TestSuite, func_suite, func_test
>  from api.testbed_model.cpu import LogicalCoreCount
>  from api.testpmd import TestPmd
>  from api.testpmd.config import EthPeer, SimpleForwardingModes
> @@ -28,6 +28,7 @@
>
>  @requires_nic_capability(NicCapability.PHYSICAL_FUNCTION)
>  @requires_link_topology(LinkTopology.TWO_LINKS)
> +@func_suite
>  class TestL2fwd(TestSuite):
>      """L2 forwarding test suite."""
>
> diff --git a/dts/tests/TestSuite_mac_filter.py
> b/dts/tests/TestSuite_mac_filter.py
> index eb1413f336..f244203593 100644
> --- a/dts/tests/TestSuite_mac_filter.py
> +++ b/dts/tests/TestSuite_mac_filter.py
> @@ -26,11 +26,12 @@
>  from api.exception import InteractiveCommandExecutionError
>  from api.packet import send_packet_and_capture
>  from api.test import fail, verify
> -from api.test_suite import TestSuite, func_test
> +from api.test_suite import TestSuite, func_suite, func_test
>  from api.testpmd import TestPmd
>
>
>  @requires_nic_capability(NicCapability.PHYSICAL_FUNCTION)
> +@func_suite
>  class TestMacFilter(TestSuite):
>      """Mac address allowlist filtering test suite.
>
> diff --git a/dts/tests/TestSuite_mtu.py b/dts/tests/TestSuite_mtu.py
> index c264db299e..f834be1818 100644
> --- a/dts/tests/TestSuite_mtu.py
> +++ b/dts/tests/TestSuite_mtu.py
> @@ -23,7 +23,7 @@
>  )
>  from api.packet import send_packet_and_capture
>  from api.test import verify
> -from api.test_suite import TestSuite, func_test
> +from api.test_suite import TestSuite, func_suite, func_test
>  from api.testpmd import TestPmd
>
>  STANDARD_FRAME = 1518  # --max-pkt-len will subtract l2 information at a
> minimum of 18 bytes.
> @@ -37,6 +37,7 @@
>
>
>  @requires_nic_capability(NicCapability.PHYSICAL_FUNCTION)
> +@func_suite
>  class TestMtu(TestSuite):
>      """DPDK PMD jumbo frames and MTU update test suite.
>
> diff --git a/dts/tests/TestSuite_packet_capture.py
> b/dts/tests/TestSuite_packet_capture.py
> index 07bfabb30b..f319d99ede 100644
> --- a/dts/tests/TestSuite_packet_capture.py
> +++ b/dts/tests/TestSuite_packet_capture.py
> @@ -37,7 +37,7 @@
>  )
>  from api.params import Params
>  from api.test import verify
> -from api.test_suite import TestSuite, func_test
> +from api.test_suite import TestSuite, func_suite, func_test
>  from api.testbed_model.cpu import LogicalCoreList
>  from api.testbed_model.traffic_generator.capturing_traffic_generator
> import PacketFilteringConfig
>  from api.testpmd import TestPmd
> @@ -65,6 +65,7 @@ class DumpcapParams(Params):
>
>
>  @requires_link_topology(LinkTopology.TWO_LINKS)
> +@func_suite
>  class TestPacketCapture(TestSuite):
>      """Packet Capture TestSuite.
>
> diff --git a/dts/tests/TestSuite_port_control.py
> b/dts/tests/TestSuite_port_control.py
> index c2f2de3493..2aa613bc25 100644
> --- a/dts/tests/TestSuite_port_control.py
> +++ b/dts/tests/TestSuite_port_control.py
> @@ -18,12 +18,13 @@
>  )
>  from api.packet import send_packets_and_capture
>  from api.test import verify
> -from api.test_suite import TestSuite, func_test
> +from api.test_suite import TestSuite, func_suite, func_test
>  from api.testpmd import TestPmd
>  from api.testpmd.config import SimpleForwardingModes
>
>
>  @requires_nic_capability(NicCapability.PHYSICAL_FUNCTION)
> +@func_suite
>  class TestPortControl(TestSuite):
>      """DPDK Port Control Testing Suite."""
>
> diff --git a/dts/tests/TestSuite_port_restart_config_persistency.py
> b/dts/tests/TestSuite_port_restart_config_persistency.py
> index 88df35d33c..626baa2097 100644
> --- a/dts/tests/TestSuite_port_restart_config_persistency.py
> +++ b/dts/tests/TestSuite_port_restart_config_persistency.py
> @@ -14,7 +14,7 @@
>      requires_nic_capability,
>  )
>  from api.test import verify
> -from api.test_suite import TestSuite, func_test
> +from api.test_suite import TestSuite, func_suite, func_test
>  from api.testpmd import TestPmd
>  from api.testpmd.types import TestPmdPortFlowCtrl
>
> @@ -23,6 +23,7 @@
>  ALTERNATIVE_MAC_ADDRESS: str = "42:A6:B7:9E:B4:81"
>
>
> +@func_suite
>  class TestPortRestartConfigPersistency(TestSuite):
>      """Port config persistency test suite."""
>
> diff --git a/dts/tests/TestSuite_port_stats.py
> b/dts/tests/TestSuite_port_stats.py
> index 0328c6718c..e2980d8d61 100644
> --- a/dts/tests/TestSuite_port_stats.py
> +++ b/dts/tests/TestSuite_port_stats.py
> @@ -25,7 +25,7 @@
>  )
>  from api.packet import send_packet_and_capture
>  from api.test import verify
> -from api.test_suite import TestSuite, func_test
> +from api.test_suite import TestSuite, func_suite, func_test
>  from api.testpmd import TestPmd
>  from api.testpmd.config import SimpleForwardingModes
>  from api.testpmd.types import RtePTypes, TestPmdVerbosePacket
> @@ -33,6 +33,7 @@
>
>  @requires_nic_capability(NicCapability.PHYSICAL_FUNCTION)
>  @requires_link_topology(LinkTopology.TWO_LINKS)
> +@func_suite
>  class TestPortStats(TestSuite):
>      """DPDK Port statistics testing suite.
>
> diff --git a/dts/tests/TestSuite_promisc_support.py
> b/dts/tests/TestSuite_promisc_support.py
> index c59c8c6078..adbdf77631 100644
> --- a/dts/tests/TestSuite_promisc_support.py
> +++ b/dts/tests/TestSuite_promisc_support.py
> @@ -21,11 +21,12 @@
>      send_packets_and_capture,
>  )
>  from api.test import verify
> -from api.test_suite import TestSuite, func_test
> +from api.test_suite import TestSuite, func_suite, func_test
>  from api.testpmd import TestPmd
>
>
>  @requires_nic_capability(NicCapability.PHYSICAL_FUNCTION)
> +@func_suite
>  class TestPromiscSupport(TestSuite):
>      """Promiscuous mode support test suite."""
>
> diff --git a/dts/tests/TestSuite_qinq.py b/dts/tests/TestSuite_qinq.py
> index 5dde37d4db..67884a113c 100644
> --- a/dts/tests/TestSuite_qinq.py
> +++ b/dts/tests/TestSuite_qinq.py
> @@ -18,10 +18,11 @@
>  from api.capabilities import NicCapability, requires_nic_capability
>  from api.packet import send_packet_and_capture
>  from api.test import log, verify
> -from api.test_suite import TestSuite, func_test
> +from api.test_suite import TestSuite, func_suite, func_test
>  from api.testpmd import TestPmd
>
>
> +@func_suite
>  class TestQinq(TestSuite):
>      """QinQ test suite.
>
> diff --git a/dts/tests/TestSuite_queue_toggle.py
> b/dts/tests/TestSuite_queue_toggle.py
> index a9ea356b22..0ad362d233 100644
> --- a/dts/tests/TestSuite_queue_toggle.py
> +++ b/dts/tests/TestSuite_queue_toggle.py
> @@ -24,7 +24,7 @@
>  )
>  from api.packet import send_packet_and_capture
>  from api.test import verify
> -from api.test_suite import TestSuite, func_test
> +from api.test_suite import TestSuite, func_suite, func_test
>  from api.testpmd import TestPmd
>  from api.testpmd.config import SimpleForwardingModes
>
> @@ -32,6 +32,7 @@
>  @requires_link_topology(LinkTopology.TWO_LINKS)
>  @requires_nic_capability(NicCapability.RUNTIME_RX_QUEUE_SETUP)
>  @requires_nic_capability(NicCapability.RUNTIME_TX_QUEUE_SETUP)
> +@func_suite
>  class TestQueueToggle(TestSuite):
>      """DPDK Queue start/stop test suite.
>
> diff --git a/dts/tests/TestSuite_rss.py b/dts/tests/TestSuite_rss.py
> index b538e93af9..289c69d225 100644
> --- a/dts/tests/TestSuite_rss.py
> +++ b/dts/tests/TestSuite_rss.py
> @@ -23,7 +23,7 @@
>  from api.exception import InteractiveCommandExecutionError
>  from api.packet import send_packets_and_capture
>  from api.test import verify
> -from api.test_suite import BaseConfig, TestSuite, func_test
> +from api.test_suite import BaseConfig, TestSuite, func_suite, func_test
>  from api.testpmd import TestPmd
>  from api.testpmd.config import SimpleForwardingModes
>  from api.testpmd.types import (
> @@ -55,6 +55,7 @@ class HashAlgorithm(StrEnum):
>
>  @requires_link_topology(LinkTopology.ONE_LINK)
>  @requires_nic_capability(NicCapability.PORT_RX_OFFLOAD_RSS_HASH)
> +@func_suite
>  class TestRss(TestSuite):
>      """RSS test suite."""
>
> diff --git a/dts/tests/TestSuite_rx_split.py
> b/dts/tests/TestSuite_rx_split.py
> index 3b3e4cd620..eac377e93e 100644
> --- a/dts/tests/TestSuite_rx_split.py
> +++ b/dts/tests/TestSuite_rx_split.py
> @@ -21,7 +21,7 @@
>  from api.exception import InteractiveCommandExecutionError
>  from api.packet import adjust_addresses, send_packet_and_capture
>  from api.test import fail, verify
> -from api.test_suite import TestSuite, func_test
> +from api.test_suite import TestSuite, func_suite, func_test
>  from api.testpmd import TestPmd
>  from api.testpmd.config import SimpleForwardingModes
>  from api.testpmd.types import RxOffloadCapability, TxOffloadCapability
> @@ -35,6 +35,7 @@
>
>  @requires_nic_capability(NicCapability.PORT_RX_OFFLOAD_BUFFER_SPLIT)
>  @requires_nic_capability(NicCapability.SELECTIVE_RX)
> +@func_suite
>  class TestRxSplit(TestSuite):
>      """Rx split test suite.
>
> diff --git a/dts/tests/TestSuite_rx_tx_offload.py
> b/dts/tests/TestSuite_rx_tx_offload.py
> index c8d24baaae..cbf9a249b4 100644
> --- a/dts/tests/TestSuite_rx_tx_offload.py
> +++ b/dts/tests/TestSuite_rx_tx_offload.py
> @@ -13,7 +13,7 @@
>      requires_nic_capability,
>  )
>  from api.test import verify
> -from api.test_suite import TestSuite, func_test
> +from api.test_suite import TestSuite, func_suite, func_test
>  from api.testpmd import TestPmd
>  from api.testpmd.types import (
>      OffloadConfiguration,
> @@ -22,6 +22,7 @@
>
>
>  @requires_link_topology(LinkTopology.ONE_LINK)
> +@func_suite
>  class TestRxTxOffload(TestSuite):
>      """RX/TX offload test suite."""
>
> diff --git a/dts/tests/TestSuite_single_core_forward_perf.py
> b/dts/tests/TestSuite_single_core_forward_perf.py
> index 4b22c5d091..c96411cf18 100644
> --- a/dts/tests/TestSuite_single_core_forward_perf.py
> +++ b/dts/tests/TestSuite_single_core_forward_perf.py
> @@ -23,7 +23,7 @@
>  from api.packet import assess_performance_by_packet
>  from api.params.types import TestPmdParamsDict
>  from api.test import verify, write_performance_json
> -from api.test_suite import BaseConfig, TestSuite, perf_test
> +from api.test_suite import BaseConfig, TestSuite, perf_suite, perf_test
>  from api.testpmd import TestPmd
>  from api.testpmd.config import RXRingParams, TXRingParams
>
> @@ -42,6 +42,7 @@ class Config(BaseConfig):
>      delta_tolerance: float = 0.05
>
>
> +@perf_suite
>  @requires_link_topology(LinkTopology.TWO_LINKS)
>  class TestSingleCoreForwardPerf(TestSuite):
>      """Single core forwarding performance test suite."""
> diff --git a/dts/tests/TestSuite_smoke_tests.py
> b/dts/tests/TestSuite_smoke_tests.py
> index b3eb325fc0..993620641c 100644
> --- a/dts/tests/TestSuite_smoke_tests.py
> +++ b/dts/tests/TestSuite_smoke_tests.py
> @@ -19,7 +19,7 @@
>      requires_link_topology,
>  )
>  from api.test import verify
> -from api.test_suite import TestSuite, func_test
> +from api.test_suite import TestSuite, func_suite, func_test
>  from api.testbed_model.linux_session import LinuxSession
>  from api.testpmd import TestPmd
>  from api.utils import REGEX_FOR_PCI_ADDRESS
> @@ -28,6 +28,7 @@
>
>
>  @requires_link_topology(LinkTopology.NO_LINK)
> +@func_suite
>  class TestSmokeTests(TestSuite):
>      """DPDK and infrastructure smoke test suite.
>
> diff --git a/dts/tests/TestSuite_softnic.py
> b/dts/tests/TestSuite_softnic.py
> index 05a6d3aa18..f601130d56 100644
> --- a/dts/tests/TestSuite_softnic.py
> +++ b/dts/tests/TestSuite_softnic.py
> @@ -18,7 +18,7 @@
>      match_all_packets,
>      send_packets_and_capture,
>  )
> -from api.test_suite import TestSuite, func_test
> +from api.test_suite import TestSuite, func_suite, func_test
>  from api.testbed_model.virtual_device import VirtualDevice
>  from api.testpmd import TestPmd
>  from api.testpmd.config import EthPeer
> @@ -27,6 +27,7 @@
>
>  @requires_nic_capability(NicCapability.PHYSICAL_FUNCTION)
>  @requires_link_topology(LinkTopology.TWO_LINKS)
> +@func_suite
>  class TestSoftnic(TestSuite):
>      """Softnic test suite."""
>
> diff --git a/dts/tests/TestSuite_speed_capabilities.py
> b/dts/tests/TestSuite_speed_capabilities.py
> index c9b0f74feb..56c0d0a51a 100644
> --- a/dts/tests/TestSuite_speed_capabilities.py
> +++ b/dts/tests/TestSuite_speed_capabilities.py
> @@ -13,7 +13,7 @@
>      requires_link_topology,
>  )
>  from api.test import verify
> -from api.test_suite import BaseConfig, TestSuite, func_test
> +from api.test_suite import BaseConfig, TestSuite, func_suite, func_test
>  from api.testpmd import TestPmd
>
>
> @@ -39,6 +39,7 @@ class Config(BaseConfig):
>
>
>  @requires_link_topology(LinkTopology.ONE_LINK)
> +@func_suite
>  class TestSpeedCapabilities(TestSuite):
>      """Speed capabilities test suite."""
>
> diff --git a/dts/tests/TestSuite_unified_packet.py
> b/dts/tests/TestSuite_unified_packet.py
> index bf3654f0d7..006f124d19 100644
> --- a/dts/tests/TestSuite_unified_packet.py
> +++ b/dts/tests/TestSuite_unified_packet.py
> @@ -25,12 +25,13 @@
>  )
>  from api.packet import send_packet_and_capture
>  from api.test import verify
> -from api.test_suite import TestSuite, func_test
> +from api.test_suite import TestSuite, func_suite, func_test
>  from api.testpmd import TestPmd
>  from api.testpmd.config import SimpleForwardingModes
>  from api.testpmd.types import RtePTypes, TestPmdVerbosePacket
>
>
> +@func_suite
>  class TestUnifiedPacket(TestSuite):
>      """DPDK Unified packet test suite.
>
> diff --git a/dts/tests/TestSuite_virtio_forward.py
> b/dts/tests/TestSuite_virtio_forward.py
> index a52c1a4402..52889a844b 100644
> --- a/dts/tests/TestSuite_virtio_forward.py
> +++ b/dts/tests/TestSuite_virtio_forward.py
> @@ -12,13 +12,14 @@
>  from api.capabilities import LinkTopology, requires_link_topology
>  from api.packet import send_packets_and_capture
>  from api.test import log, verify
> -from api.test_suite import TestSuite, func_test
> +from api.test_suite import TestSuite, func_suite, func_test
>  from api.testbed_model.linux_session import LinuxSession
>  from api.testbed_model.virtual_device import VirtualDevice
>  from api.testpmd import TestPmd
>  from api.testpmd.config import PortTopology, SimpleForwardingModes
>
>
> +@func_suite
>  class TestVirtioForward(TestSuite):
>      """Virtio forwarding test suite."""
>
> diff --git a/dts/tests/TestSuite_vlan.py b/dts/tests/TestSuite_vlan.py
> index 975e87b128..edd93e3487 100644
> --- a/dts/tests/TestSuite_vlan.py
> +++ b/dts/tests/TestSuite_vlan.py
> @@ -23,12 +23,13 @@
>  )
>  from api.packet import send_packet_and_capture
>  from api.test import verify
> -from api.test_suite import TestSuite, func_test
> +from api.test_suite import TestSuite, func_suite, func_test
>  from api.testpmd import TestPmd
>  from api.testpmd.config import SimpleForwardingModes
>
>
>  @requires_nic_capability(NicCapability.PORT_RX_OFFLOAD_VLAN_FILTER)
> +@func_suite
>  class TestVlan(TestSuite):
>      """DPDK VLAN test suite.
>
> --
> 2.56.0
>
>

Reply via email to