Add a physical function NIC capability that checks if the test run is using PFs. Add PF capability requirement to all suites/cases that do not run without error on virtual functions.
Signed-off-by: Dean Marx <dm...@iol.unh.edu> --- dts/framework/remote_session/testpmd_shell.py | 22 +++++++++++++++++++ dts/tests/TestSuite_dynamic_config.py | 3 ++- dts/tests/TestSuite_dynamic_queue_conf.py | 1 + dts/tests/TestSuite_l2fwd.py | 3 ++- dts/tests/TestSuite_mac_filter.py | 1 + dts/tests/TestSuite_pmd_buffer_scatter.py | 1 + dts/tests/TestSuite_port_control.py | 3 ++- dts/tests/TestSuite_port_stats.py | 2 ++ dts/tests/TestSuite_promisc_support.py | 4 +++- dts/tests/TestSuite_softnic.py | 3 ++- dts/tests/TestSuite_uni_pkt.py | 2 ++ 11 files changed, 40 insertions(+), 5 deletions(-) diff --git a/dts/framework/remote_session/testpmd_shell.py b/dts/framework/remote_session/testpmd_shell.py index a035452bcf..4156a289a1 100644 --- a/dts/framework/remote_session/testpmd_shell.py +++ b/dts/framework/remote_session/testpmd_shell.py @@ -2640,6 +2640,23 @@ def get_capabilities_flow_ctrl( else: unsupported_capabilities.add(NicCapability.FLOW_CTRL) + def get_capabilities_physical_function( + self, + supported_capabilities: MutableSet["NicCapability"], + unsupported_capabilities: MutableSet["NicCapability"], + ) -> None: + """Store capability representing a physical function test run. + + Args: + supported_capabilities: Supported capabilities will be added to this set. + unsupported_capabilities: Unsupported capabilities will be added to this set. + """ + ctx = get_ctx() + if ctx.topology.vf_ports == []: + supported_capabilities.add(NicCapability.PHYSICAL_FUNCTION) + else: + unsupported_capabilities.add(NicCapability.PHYSICAL_FUNCTION) + class NicCapability(NoAliasEnum): """A mapping between capability names and the associated :class:`TestPmdShell` methods. @@ -2788,6 +2805,11 @@ class NicCapability(NoAliasEnum): ) #: Device supports flow ctrl. FLOW_CTRL: TestPmdShellNicCapability = (TestPmdShell.get_capabilities_flow_ctrl, None) + #: Device is running on a physical function. + PHYSICAL_FUNCTION: TestPmdShellNicCapability = ( + TestPmdShell.get_capabilities_physical_function, + None, + ) def __call__( self, diff --git a/dts/tests/TestSuite_dynamic_config.py b/dts/tests/TestSuite_dynamic_config.py index 1fce31a0b5..49f295a39a 100644 --- a/dts/tests/TestSuite_dynamic_config.py +++ b/dts/tests/TestSuite_dynamic_config.py @@ -20,11 +20,12 @@ from scapy.packet import Raw from framework.params.testpmd import SimpleForwardingModes -from framework.remote_session.testpmd_shell import TestPmdShell +from framework.remote_session.testpmd_shell import NicCapability, TestPmdShell from framework.test_suite import TestSuite, func_test from framework.testbed_model.capability import TopologyType, requires +@requires(NicCapability.PHYSICAL_FUNCTION) @requires(topology_type=TopologyType.two_links) 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 62da208c45..cd35e73087 100644 --- a/dts/tests/TestSuite_dynamic_queue_conf.py +++ b/dts/tests/TestSuite_dynamic_queue_conf.py @@ -117,6 +117,7 @@ def wrap(self: "TestDynamicQueueConf", is_rx_testing: bool) -> None: return wrap +@requires(NicCapability.PHYSICAL_FUNCTION) class TestDynamicQueueConf(TestSuite): """DPDK dynamic queue configuration test suite. diff --git a/dts/tests/TestSuite_l2fwd.py b/dts/tests/TestSuite_l2fwd.py index 0555d75ed8..5ffa2dcd19 100644 --- a/dts/tests/TestSuite_l2fwd.py +++ b/dts/tests/TestSuite_l2fwd.py @@ -9,7 +9,7 @@ from framework.context import filter_cores from framework.params.testpmd import EthPeer, SimpleForwardingModes -from framework.remote_session.testpmd_shell import TestPmdShell +from framework.remote_session.testpmd_shell import NicCapability, TestPmdShell from framework.test_suite import TestSuite, func_test from framework.testbed_model.capability import requires from framework.testbed_model.cpu import LogicalCoreCount @@ -17,6 +17,7 @@ from framework.utils import generate_random_packets +@requires(NicCapability.PHYSICAL_FUNCTION) @requires(topology_type=TopologyType.two_links) class TestL2fwd(TestSuite): """L2 forwarding test suite.""" diff --git a/dts/tests/TestSuite_mac_filter.py b/dts/tests/TestSuite_mac_filter.py index 9dbfec5da2..2387fdfac2 100644 --- a/dts/tests/TestSuite_mac_filter.py +++ b/dts/tests/TestSuite_mac_filter.py @@ -25,6 +25,7 @@ from framework.testbed_model.capability import requires +@requires(NicCapability.PHYSICAL_FUNCTION) class TestMacFilter(TestSuite): """Mac address allowlist filtering test suite. diff --git a/dts/tests/TestSuite_pmd_buffer_scatter.py b/dts/tests/TestSuite_pmd_buffer_scatter.py index 5e23f28bc6..015163dd11 100644 --- a/dts/tests/TestSuite_pmd_buffer_scatter.py +++ b/dts/tests/TestSuite_pmd_buffer_scatter.py @@ -28,6 +28,7 @@ from framework.testbed_model.capability import NicCapability, requires +@requires(NicCapability.PHYSICAL_FUNCTION) @requires(NicCapability.RX_OFFLOAD_SCATTER) class TestPmdBufferScatter(TestSuite): """DPDK PMD packet scattering test suite. diff --git a/dts/tests/TestSuite_port_control.py b/dts/tests/TestSuite_port_control.py index ad5a09c58e..58783f1d18 100644 --- a/dts/tests/TestSuite_port_control.py +++ b/dts/tests/TestSuite_port_control.py @@ -13,11 +13,12 @@ from scapy.packet import Packet, Raw from framework.params.testpmd import SimpleForwardingModes -from framework.remote_session.testpmd_shell import TestPmdShell +from framework.remote_session.testpmd_shell import NicCapability, TestPmdShell from framework.test_suite import TestSuite, func_test from framework.testbed_model.capability import TopologyType, requires +@requires(NicCapability.PHYSICAL_FUNCTION) @requires(topology_type=TopologyType.two_links) class TestPortControl(TestSuite): """DPDK Port Control Testing Suite.""" diff --git a/dts/tests/TestSuite_port_stats.py b/dts/tests/TestSuite_port_stats.py index 2bb8747399..ddd28623b3 100644 --- a/dts/tests/TestSuite_port_stats.py +++ b/dts/tests/TestSuite_port_stats.py @@ -19,6 +19,7 @@ from framework.params.testpmd import SimpleForwardingModes from framework.remote_session.testpmd_shell import ( + NicCapability, RtePTypes, TestPmdShell, TestPmdVerbosePacket, @@ -27,6 +28,7 @@ from framework.testbed_model.capability import TopologyType, requires +@requires(NicCapability.PHYSICAL_FUNCTION) @requires(topology_type=TopologyType.two_links) 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 445f6e1d69..8a7a7efb57 100644 --- a/dts/tests/TestSuite_promisc_support.py +++ b/dts/tests/TestSuite_promisc_support.py @@ -11,10 +11,12 @@ from scapy.layers.l2 import Ether from scapy.packet import Raw -from framework.remote_session.testpmd_shell import TestPmdShell +from framework.remote_session.testpmd_shell import NicCapability, TestPmdShell from framework.test_suite import TestSuite, func_test +from framework.testbed_model.capability import requires +@requires(NicCapability.PHYSICAL_FUNCTION) class TestPromiscSupport(TestSuite): """Promiscuous mode support test suite.""" diff --git a/dts/tests/TestSuite_softnic.py b/dts/tests/TestSuite_softnic.py index c1873dca4c..27754c08e7 100644 --- a/dts/tests/TestSuite_softnic.py +++ b/dts/tests/TestSuite_softnic.py @@ -9,7 +9,7 @@ from pathlib import Path, PurePath from framework.params.testpmd import EthPeer -from framework.remote_session.testpmd_shell import TestPmdShell +from framework.remote_session.testpmd_shell import NicCapability, TestPmdShell from framework.test_suite import TestSuite, func_test from framework.testbed_model.capability import requires from framework.testbed_model.topology import TopologyType @@ -17,6 +17,7 @@ from framework.utils import generate_random_packets +@requires(NicCapability.PHYSICAL_FUNCTION) @requires(topology_type=TopologyType.two_links) class TestSoftnic(TestSuite): """Softnic test suite.""" diff --git a/dts/tests/TestSuite_uni_pkt.py b/dts/tests/TestSuite_uni_pkt.py index fdb9c29059..690c5d4fd1 100644 --- a/dts/tests/TestSuite_uni_pkt.py +++ b/dts/tests/TestSuite_uni_pkt.py @@ -20,6 +20,7 @@ from scapy.packet import Packet, Raw from framework.remote_session.testpmd_shell import ( + NicCapability, RtePTypes, SimpleForwardingModes, TestPmdShell, @@ -258,6 +259,7 @@ def test_nsh_packet_detect(self) -> None: with TestPmdShell() as testpmd: self.setup_session(testpmd=testpmd, expected_flags=flag_list, packet_list=packet_list) + @requires(NicCapability.PHYSICAL_FUNCTION) @func_test def test_vxlan_tunnel_packet_detect(self) -> None: """Ensure the correct flags are shown in the verbose output when sending VXLAN packets. -- 2.49.0