[RFC PATCH] dts: resolve trex driver binding issue
Koushik Bhargav Nimoji
knimoji at iol.unh.edu
Tue Aug 11 20:55:09 CEST 2026
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 <knimoji at iol.unh.edu>
---
dts/framework/test_result.py | 1 +
dts/framework/test_run.py | 29 +++++++++++---
dts/framework/test_suite.py | 40 +++++++++++++++++++
dts/framework/testbed_model/linux_session.py | 6 ++-
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, 128 insertions(+), 38 deletions(-)
diff --git a/dts/framework/test_result.py b/dts/framework/test_result.py
index 21faa55dc1..13ed8f671c 100644
--- a/dts/framework/test_result.py
+++ b/dts/framework/test_result.py
@@ -117,6 +117,7 @@ class ResultNode(BaseModel):
label: str
children: list[Union["ResultNode", ResultLeaf]] = Field(default_factory=list)
parent: Union["ResultNode", None] = None
+ ports: list[dict[str, str]] | None = None
def add_child(self, label: str) -> "ResultNode":
"""Creates and append a child node to the model.
diff --git a/dts/framework/test_run.py b/dts/framework/test_run.py
index c20a0fa885..b23930b953 100644
--- a/dts/framework/test_run.py
+++ b/dts/framework/test_run.py
@@ -115,7 +115,7 @@
from framework.remote_session.dpdk import DPDKBuildEnvironment, DPDKRuntimeEnvironment
from framework.settings import SETTINGS
from framework.test_result import Result, ResultNode, TestRunResult
-from framework.test_suite import BaseConfig, TestCase, TestCaseType, TestSuite
+from framework.test_suite import BaseConfig, TestCase, TestCaseType, TestSuite, TestSuiteType
from framework.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
]
@@ -506,12 +501,34 @@ class TestSuiteSetup(TestSuiteState):
"""Test suite setup."""
logger_name: ClassVar[str] = "test_suite_setup"
+ test_run: TestRun
def before(self) -> None:
"""Hook before the state is processed."""
super().before()
self.logger.set_custom_log_file(self.test_suite.name)
+ ctx = self.test_run.ctx
+ testsuite_type = self.test_suite.testsuite_type
+ if (
+ ctx.topology.type is not LinkTopology.NO_LINK
+ and testsuite_type is not TestSuiteType.CRYPTO
+ ):
+ if testsuite_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 testsuite_type == TestSuiteType.FUNC and ctx.tg_node:
+ for port in ctx.topology.tg_ports:
+ ctx.tg_node.main_session.bind_ports_to_driver([port], port.config.os_driver)
+
+ 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/test_suite.py b/dts/framework/test_suite.py
index 69ce26040a..554fe3a475 100644
--- a/dts/framework/test_suite.py
+++ b/dts/framework/test_suite.py
@@ -45,6 +45,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.
@@ -85,6 +96,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]
+ testsuite_type: ClassVar[TestSuiteType]
+
+ @classmethod
+ def make_decorator(
+ cls, testsuite_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:
+ testsuite_type: A functional, performance, or cryptodev test suite.
+
+ Returns:
+ The decorator of a functional, performance, or cryptodev test suite.
+ """
+
+ def _decorator(testsuite_cls: TestSuiteClassType) -> TestSuiteClassType:
+ testsuite_cls.testsuite_type = testsuite_type
+ return testsuite_cls
+
+ return _decorator
def __init__(self, config: BaseConfig) -> None:
"""Initialize the test suite testbed information and basic configuration.
@@ -270,6 +305,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/testbed_model/linux_session.py b/dts/framework/testbed_model/linux_session.py
index c118f803b6..861b09e413 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/tests/TestSuite_blocklist.py b/dts/tests/TestSuite_blocklist.py
index c57231de22..46c5ff57cb 100644
--- a/dts/tests/TestSuite_blocklist.py
+++ b/dts/tests/TestSuite_blocklist.py
@@ -12,10 +12,11 @@
)
from api.test import verify
from api.testpmd import TestPmd
-from framework.test_suite import TestSuite, func_test
+from framework.test_suite import TestSuite, func_suite, func_test
from framework.testbed_model.port import Port
+ at 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 539082f2e4..b9064e8022 100644
--- a/dts/tests/TestSuite_buffer_scatter.py
+++ b/dts/tests/TestSuite_buffer_scatter.py
@@ -30,11 +30,12 @@
from api.test import verify
from api.testpmd import TestPmd
from api.testpmd.config import SimpleForwardingModes
-from framework.test_suite import TestSuite, func_test
+from framework.test_suite import TestSuite, func_suite, func_test
@requires_nic_capability(NicCapability.PHYSICAL_FUNCTION)
@requires_nic_capability(NicCapability.PORT_RX_OFFLOAD_SCATTER)
+ at 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 90ca798e56..2a9d4ef631 100644
--- a/dts/tests/TestSuite_checksum_offload.py
+++ b/dts/tests/TestSuite_checksum_offload.py
@@ -28,12 +28,13 @@
from api.testpmd import TestPmd
from api.testpmd.config import SimpleForwardingModes
from api.testpmd.types import ChecksumOffloadOptions, PacketOffloadFlag
-from framework.test_suite import TestSuite, func_test
+from framework.test_suite import TestSuite, func_suite, func_test
@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)
+ at 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 4e7d814faa..e63c43a12b 100644
--- a/dts/tests/TestSuite_cryptodev_latency.py
+++ b/dts/tests/TestSuite_cryptodev_latency.py
@@ -31,7 +31,7 @@
)
from api.test import skip, verify
from framework.context import get_ctx
-from framework.test_suite import BaseConfig, TestSuite, crypto_test
+from framework.test_suite import BaseConfig, TestSuite, crypto_suite, crypto_test
from framework.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)
+ at 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 2fc0d8779a..93727d90d4 100644
--- a/dts/tests/TestSuite_cryptodev_throughput.py
+++ b/dts/tests/TestSuite_cryptodev_throughput.py
@@ -32,7 +32,7 @@
from api.test import verify
from framework.context import get_ctx
from framework.exception import SkippedTestException
-from framework.test_suite import BaseConfig, TestSuite, crypto_test
+from framework.test_suite import BaseConfig, TestSuite, crypto_suite, crypto_test
from framework.testbed_model.virtual_device import VirtualDevice
config_list: list[dict[str, int | float | str]] = [
@@ -75,6 +75,7 @@ class Config(BaseConfig):
@requires_link_topology(LinkTopology.NO_LINK)
+ at 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 1b77dd2b47..8676a65c80 100644
--- a/dts/tests/TestSuite_dual_vlan.py
+++ b/dts/tests/TestSuite_dual_vlan.py
@@ -23,9 +23,10 @@
from api.test import verify
from api.testpmd import TestPmd
from api.testpmd.config import SimpleForwardingModes
-from framework.test_suite import TestSuite, func_test
+from framework.test_suite import TestSuite, func_suite, func_test
+ at 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 7204ec4f73..94554a735e 100644
--- a/dts/tests/TestSuite_dynamic_config.py
+++ b/dts/tests/TestSuite_dynamic_config.py
@@ -29,11 +29,12 @@
from api.test import verify
from api.testpmd import TestPmd
from api.testpmd.config import SimpleForwardingModes
-from framework.test_suite import TestSuite, func_test
+from framework.test_suite import TestSuite, func_suite, func_test
@requires_nic_capability(NicCapability.PHYSICAL_FUNCTION)
@requires_link_topology(LinkTopology.TWO_LINKS)
+ at 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 5ac85bee7d..c92edc7306 100644
--- a/dts/tests/TestSuite_dynamic_queue_conf.py
+++ b/dts/tests/TestSuite_dynamic_queue_conf.py
@@ -40,7 +40,7 @@
from api.testpmd import TestPmd
from api.testpmd.config import PortTopology, SimpleForwardingModes
from framework.exception import InteractiveCommandExecutionError
-from framework.test_suite import TestSuite, func_test
+from framework.test_suite import TestSuite, func_suite, func_test
def setup_and_teardown_test(
@@ -121,6 +121,7 @@ def _wrap(self: "TestDynamicQueueConf", is_rx_testing: bool) -> None:
@requires_nic_capability(NicCapability.PHYSICAL_FUNCTION)
+ at 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 be11d09875..d955eb7d7d 100644
--- a/dts/tests/TestSuite_flow_offload.py
+++ b/dts/tests/TestSuite_flow_offload.py
@@ -30,7 +30,7 @@
SkippedTestException,
TestCaseVerifyError,
)
-from framework.test_suite import TestSuite, func_test
+from framework.test_suite import TestSuite, func_suite, func_test
@dataclass
@@ -402,6 +402,7 @@ def generate(
@requires_nic_capability(NicCapability.FLOW_CTRL)
+ at 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 bf1a93c782..0beb144644 100644
--- a/dts/tests/TestSuite_hello_world.py
+++ b/dts/tests/TestSuite_hello_world.py
@@ -10,7 +10,7 @@
from api.test import log
from api.testpmd import TestPmd
-from framework.test_suite import BaseConfig, TestSuite, func_test
+from framework.test_suite import BaseConfig, TestSuite, func_suite, func_test
class Config(BaseConfig):
@@ -20,6 +20,7 @@ class Config(BaseConfig):
msg: str = "Hello World!"
+ at 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 596b892730..3f9f1dd12d 100644
--- a/dts/tests/TestSuite_l2fwd.py
+++ b/dts/tests/TestSuite_l2fwd.py
@@ -21,13 +21,14 @@
from api.testpmd import TestPmd
from api.testpmd.config import EthPeer, SimpleForwardingModes
from framework.context import filter_cores
-from framework.test_suite import TestSuite, func_test
+from framework.test_suite import TestSuite, func_suite, func_test
from framework.testbed_model.cpu import LogicalCoreCount
from framework.utils import generate_random_packets
@requires_nic_capability(NicCapability.PHYSICAL_FUNCTION)
@requires_link_topology(LinkTopology.TWO_LINKS)
+ at 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 a7e24b37d5..def0b97856 100644
--- a/dts/tests/TestSuite_mac_filter.py
+++ b/dts/tests/TestSuite_mac_filter.py
@@ -27,10 +27,11 @@
from api.test import fail, verify
from api.testpmd import TestPmd
from framework.exception import InteractiveCommandExecutionError
-from framework.test_suite import TestSuite, func_test
+from framework.test_suite import TestSuite, func_suite, func_test
@requires_nic_capability(NicCapability.PHYSICAL_FUNCTION)
+ at 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 8355495d33..06de6c9c1a 100644
--- a/dts/tests/TestSuite_mtu.py
+++ b/dts/tests/TestSuite_mtu.py
@@ -24,7 +24,7 @@
from api.packet import send_packet_and_capture
from api.test import verify
from api.testpmd import TestPmd
-from framework.test_suite import TestSuite, func_test
+from framework.test_suite import TestSuite, func_suite, func_test
STANDARD_FRAME = 1518 # --max-pkt-len will subtract l2 information at a minimum of 18 bytes.
JUMBO_FRAME = 9018
@@ -37,6 +37,7 @@
@requires_nic_capability(NicCapability.PHYSICAL_FUNCTION)
+ at 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 4bd15e2401..f26b03f46f 100644
--- a/dts/tests/TestSuite_packet_capture.py
+++ b/dts/tests/TestSuite_packet_capture.py
@@ -40,7 +40,7 @@
from framework.params import Params
from framework.remote_session.blocking_app import BlockingApp
from framework.remote_session.dpdk_shell import compute_eal_params
-from framework.test_suite import TestSuite, func_test
+from framework.test_suite import TestSuite, func_suite, func_test
from framework.testbed_model.cpu import LogicalCoreList
from framework.testbed_model.traffic_generator.capturing_traffic_generator import (
PacketFilteringConfig,
@@ -67,6 +67,7 @@ class DumpcapParams(Params):
@requires_link_topology(LinkTopology.TWO_LINKS)
+ at 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 b51fdc2959..858ab3af8b 100644
--- a/dts/tests/TestSuite_port_control.py
+++ b/dts/tests/TestSuite_port_control.py
@@ -20,10 +20,11 @@
from api.test import verify
from api.testpmd import TestPmd
from api.testpmd.config import SimpleForwardingModes
-from framework.test_suite import TestSuite, func_test
+from framework.test_suite import TestSuite, func_suite, func_test
@requires_nic_capability(NicCapability.PHYSICAL_FUNCTION)
+ at 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 4ea22b6d70..646e80651b 100644
--- a/dts/tests/TestSuite_port_restart_config_persistency.py
+++ b/dts/tests/TestSuite_port_restart_config_persistency.py
@@ -16,13 +16,14 @@
from api.test import verify
from api.testpmd import TestPmd
from api.testpmd.types import TestPmdPortFlowCtrl
-from framework.test_suite import TestSuite, func_test
+from framework.test_suite import TestSuite, func_suite, func_test
ALTERNATIVE_MTU: int = 800
STANDARD_MTU: int = 1500
ALTERNATIVE_MAC_ADDRESS: str = "42:A6:B7:9E:B4:81"
+ at 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 3dc045f847..a737c17fb0 100644
--- a/dts/tests/TestSuite_port_stats.py
+++ b/dts/tests/TestSuite_port_stats.py
@@ -28,11 +28,12 @@
from api.testpmd import TestPmd
from api.testpmd.config import SimpleForwardingModes
from api.testpmd.types import RtePTypes, TestPmdVerbosePacket
-from framework.test_suite import TestSuite, func_test
+from framework.test_suite import TestSuite, func_suite, func_test
@requires_nic_capability(NicCapability.PHYSICAL_FUNCTION)
@requires_link_topology(LinkTopology.TWO_LINKS)
+ at 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 a0c65dc662..1907e779f8 100644
--- a/dts/tests/TestSuite_promisc_support.py
+++ b/dts/tests/TestSuite_promisc_support.py
@@ -22,10 +22,11 @@
)
from api.test import verify
from api.testpmd import TestPmd
-from framework.test_suite import TestSuite, func_test
+from framework.test_suite import TestSuite, func_suite, func_test
@requires_nic_capability(NicCapability.PHYSICAL_FUNCTION)
+ at 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 505d71dbc8..8fa4db2ab6 100644
--- a/dts/tests/TestSuite_qinq.py
+++ b/dts/tests/TestSuite_qinq.py
@@ -19,9 +19,10 @@
from api.packet import send_packet_and_capture
from api.test import log, verify
from api.testpmd import TestPmd
-from framework.test_suite import TestSuite, func_test
+from framework.test_suite import TestSuite, func_suite, func_test
+ at 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 e4edc89123..97e80965d8 100644
--- a/dts/tests/TestSuite_queue_toggle.py
+++ b/dts/tests/TestSuite_queue_toggle.py
@@ -26,12 +26,13 @@
from api.test import verify
from api.testpmd import TestPmd
from api.testpmd.config import SimpleForwardingModes
-from framework.test_suite import TestSuite, func_test
+from framework.test_suite import TestSuite, func_suite, func_test
@requires_link_topology(LinkTopology.TWO_LINKS)
@requires_nic_capability(NicCapability.RUNTIME_RX_QUEUE_SETUP)
@requires_nic_capability(NicCapability.RUNTIME_TX_QUEUE_SETUP)
+ at 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 2747c8a36c..062b2d8891 100644
--- a/dts/tests/TestSuite_rss.py
+++ b/dts/tests/TestSuite_rss.py
@@ -30,7 +30,7 @@
TestPmdVerbosePacket,
)
from framework.exception import InteractiveCommandExecutionError
-from framework.test_suite import BaseConfig, TestSuite, func_test
+from framework.test_suite import BaseConfig, TestSuite, func_suite, func_test
from framework.utils import StrEnum
@@ -55,6 +55,7 @@ class HashAlgorithm(StrEnum):
@requires_link_topology(LinkTopology.ONE_LINK)
@requires_nic_capability(NicCapability.PORT_RX_OFFLOAD_RSS_HASH)
+ at 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 5117a569e2..8b9cf38095 100644
--- a/dts/tests/TestSuite_rx_split.py
+++ b/dts/tests/TestSuite_rx_split.py
@@ -24,7 +24,7 @@
from api.testpmd.config import SimpleForwardingModes
from api.testpmd.types import RxOffloadCapability, TxOffloadCapability
from framework.exception import InteractiveCommandExecutionError
-from framework.test_suite import TestSuite, func_test
+from framework.test_suite import TestSuite, func_suite, func_test
PAYLOAD = bytes(range(256))
ETHER_HDR_LEN = len(Ether(dst="00:00:00:00:00:00"))
@@ -35,6 +35,7 @@
@requires_nic_capability(NicCapability.PORT_RX_OFFLOAD_BUFFER_SPLIT)
@requires_nic_capability(NicCapability.SELECTIVE_RX)
+ at 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 b0da627d3c..4a4607c685 100644
--- a/dts/tests/TestSuite_rx_tx_offload.py
+++ b/dts/tests/TestSuite_rx_tx_offload.py
@@ -18,10 +18,11 @@
OffloadConfiguration,
RxTxLiteralSwitch,
)
-from framework.test_suite import TestSuite, func_test
+from framework.test_suite import TestSuite, func_suite, func_test
@requires_link_topology(LinkTopology.ONE_LINK)
+ at 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 57aecdf7a4..f30a5322a0 100644
--- a/dts/tests/TestSuite_single_core_forward_perf.py
+++ b/dts/tests/TestSuite_single_core_forward_perf.py
@@ -25,7 +25,7 @@
from api.testpmd import TestPmd
from api.testpmd.config import RXRingParams, TXRingParams
from framework.params.types import TestPmdParamsDict
-from framework.test_suite import BaseConfig, TestSuite, perf_test
+from framework.test_suite import BaseConfig, TestSuite, perf_suite, perf_test
class Config(BaseConfig):
@@ -42,6 +42,7 @@ class Config(BaseConfig):
delta_tolerance: float = 0.05
+ at 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 271ad4301c..368614e7ed 100644
--- a/dts/tests/TestSuite_smoke_tests.py
+++ b/dts/tests/TestSuite_smoke_tests.py
@@ -22,12 +22,13 @@
from api.testpmd import TestPmd
from framework.config.node import PortConfig
from framework.settings import SETTINGS
-from framework.test_suite import TestSuite, func_test
+from framework.test_suite import TestSuite, func_suite, func_test
from framework.testbed_model.linux_session import LinuxSession
from framework.utils import REGEX_FOR_PCI_ADDRESS
@requires_link_topology(LinkTopology.NO_LINK)
+ at 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 fa91f7ee2f..07da406a2d 100644
--- a/dts/tests/TestSuite_softnic.py
+++ b/dts/tests/TestSuite_softnic.py
@@ -20,13 +20,14 @@
)
from api.testpmd import TestPmd
from api.testpmd.config import EthPeer
-from framework.test_suite import TestSuite, func_test
+from framework.test_suite import TestSuite, func_suite, func_test
from framework.testbed_model.virtual_device import VirtualDevice
from framework.utils import generate_random_packets
@requires_nic_capability(NicCapability.PHYSICAL_FUNCTION)
@requires_link_topology(LinkTopology.TWO_LINKS)
+ at 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 9cbd6f1ef7..5fbe1fe5c3 100644
--- a/dts/tests/TestSuite_speed_capabilities.py
+++ b/dts/tests/TestSuite_speed_capabilities.py
@@ -14,7 +14,7 @@
)
from api.test import verify
from api.testpmd import TestPmd
-from framework.test_suite import BaseConfig, TestSuite, func_test
+from framework.test_suite import BaseConfig, TestSuite, func_suite, func_test
class Config(BaseConfig):
@@ -39,6 +39,7 @@ class Config(BaseConfig):
@requires_link_topology(LinkTopology.ONE_LINK)
+ at 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 fcc7f7fbbb..05f52d5690 100644
--- a/dts/tests/TestSuite_unified_packet.py
+++ b/dts/tests/TestSuite_unified_packet.py
@@ -28,9 +28,10 @@
from api.testpmd import TestPmd
from api.testpmd.config import SimpleForwardingModes
from api.testpmd.types import RtePTypes, TestPmdVerbosePacket
-from framework.test_suite import TestSuite, func_test
+from framework.test_suite import TestSuite, func_suite, func_test
+ at 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 6efaa4e156..c2a4a4612e 100644
--- a/dts/tests/TestSuite_virtio_forward.py
+++ b/dts/tests/TestSuite_virtio_forward.py
@@ -14,12 +14,13 @@
from api.test import log, verify
from api.testpmd import TestPmd
from api.testpmd.config import PortTopology, SimpleForwardingModes
-from framework.test_suite import TestSuite, func_test
+from framework.test_suite import TestSuite, func_suite, func_test
from framework.testbed_model.capability import requires
from framework.testbed_model.linux_session import LinuxSession
from framework.testbed_model.virtual_device import VirtualDevice
+ at func_suite
class TestVirtioForward(TestSuite):
"""Virtio forwarding test suite."""
diff --git a/dts/tests/TestSuite_vlan.py b/dts/tests/TestSuite_vlan.py
index 898673fc86..14011da087 100644
--- a/dts/tests/TestSuite_vlan.py
+++ b/dts/tests/TestSuite_vlan.py
@@ -25,10 +25,11 @@
from api.test import verify
from api.testpmd import TestPmd
from api.testpmd.config import SimpleForwardingModes
-from framework.test_suite import TestSuite, func_test
+from framework.test_suite import TestSuite, func_suite, func_test
@requires_nic_capability(NicCapability.PORT_RX_OFFLOAD_VLAN_FILTER)
+ at func_suite
class TestVlan(TestSuite):
"""DPDK VLAN test suite.
--
2.55.0
More information about the dev
mailing list