[PATCH v1 2/8] dts: move testbed model from framework to API
Dean Marx
dmarx at iol.unh.edu
Thu Apr 23 19:03:14 CEST 2026
Multiple test suites import modules from testbed model
in the framework. Move this directory to the API.
Signed-off-by: Dean Marx <dmarx at iol.unh.edu>
---
dts/api/artifact.py | 2 +-
dts/api/capabilities.py | 8 ++++----
dts/api/packet.py | 14 +++++++-------
dts/api/test_suite.py | 4 ++--
dts/{framework => api}/testbed_model/__init__.py | 0
.../testbed_model/capability.py | 12 ++++++------
dts/{framework => api}/testbed_model/cpu.py | 4 ++--
.../testbed_model/linux_session.py | 6 +++---
dts/{framework => api}/testbed_model/node.py | 2 +-
.../testbed_model/os_session.py | 8 ++++----
dts/{framework => api}/testbed_model/port.py | 2 +-
.../testbed_model/posix_session.py | 6 +++---
dts/{framework => api}/testbed_model/topology.py | 6 +++---
.../testbed_model/traffic_generator/__init__.py | 4 ++--
.../capturing_traffic_generator.py | 4 ++--
.../performance_traffic_generator.py | 0
.../testbed_model/traffic_generator/scapy.py | 14 +++++++-------
.../traffic_generator/traffic_generator.py | 8 ++++----
.../testbed_model/traffic_generator/trex.py | 16 ++++++++--------
.../testbed_model/virtual_device.py | 0
dts/framework/config/node.py | 16 ++++++++--------
dts/framework/config/test_run.py | 2 +-
dts/framework/context.py | 10 +++++-----
dts/framework/params/eal.py | 6 +++---
dts/framework/params/types.py | 6 +++---
dts/framework/remote_session/blocking_app.py | 2 +-
dts/framework/remote_session/dpdk.py | 8 ++++----
dts/framework/remote_session/dpdk_shell.py | 2 +-
.../remote_session/interactive_shell.py | 2 +-
dts/framework/runner.py | 2 +-
dts/framework/test_result.py | 2 +-
dts/framework/test_run.py | 16 ++++++++--------
dts/tests/TestSuite_blocklist.py | 2 +-
dts/tests/TestSuite_cryptodev_throughput.py | 2 +-
dts/tests/TestSuite_l2fwd.py | 2 +-
dts/tests/TestSuite_packet_capture.py | 8 ++++----
dts/tests/TestSuite_smoke_tests.py | 2 +-
dts/tests/TestSuite_softnic.py | 2 +-
dts/tests/TestSuite_virtio_fwd.py | 6 +++---
39 files changed, 109 insertions(+), 109 deletions(-)
rename dts/{framework => api}/testbed_model/__init__.py (100%)
rename dts/{framework => api}/testbed_model/capability.py (98%)
rename dts/{framework => api}/testbed_model/cpu.py (99%)
rename dts/{framework => api}/testbed_model/linux_session.py (99%)
rename dts/{framework => api}/testbed_model/node.py (99%)
rename dts/{framework => api}/testbed_model/os_session.py (99%)
rename dts/{framework => api}/testbed_model/port.py (98%)
rename dts/{framework => api}/testbed_model/posix_session.py (99%)
rename dts/{framework => api}/testbed_model/topology.py (98%)
rename dts/{framework => api}/testbed_model/traffic_generator/__init__.py (95%)
rename dts/{framework => api}/testbed_model/traffic_generator/capturing_traffic_generator.py (98%)
rename dts/{framework => api}/testbed_model/traffic_generator/performance_traffic_generator.py (100%)
rename dts/{framework => api}/testbed_model/traffic_generator/scapy.py (98%)
rename dts/{framework => api}/testbed_model/traffic_generator/traffic_generator.py (91%)
rename dts/{framework => api}/testbed_model/traffic_generator/trex.py (96%)
rename dts/{framework => api}/testbed_model/virtual_device.py (100%)
diff --git a/dts/api/artifact.py b/dts/api/artifact.py
index 24a2b05063..025c87bbfa 100644
--- a/dts/api/artifact.py
+++ b/dts/api/artifact.py
@@ -47,10 +47,10 @@
from paramiko import SFTPClient, SFTPFile
from typing_extensions import Buffer
+from api.testbed_model.node import Node, NodeIdentifier, get_node
from framework.exception import InternalError
from framework.logger import DTSLogger, get_dts_logger
from framework.settings import SETTINGS
-from framework.testbed_model.node import Node, NodeIdentifier, get_node
TextMode: TypeAlias = (
Literal["r", "r+", "w", "w+", "a", "a+", "x", "x+"]
diff --git a/dts/api/capabilities.py b/dts/api/capabilities.py
index 8569cacbd2..a4d6b2b424 100644
--- a/dts/api/capabilities.py
+++ b/dts/api/capabilities.py
@@ -23,7 +23,7 @@
.. code:: python
from api.test_suite import TestSuite, func_test
- from framework.testbed_model.capability import LinkTopology, requires_link_topology
+ from api.testbed_model.capability import LinkTopology, requires_link_topology
# The whole test suite (each test case within) doesn't require any links.
@requires_link_topology(LinkTopology.NO_LINK)
@func_test
@@ -34,7 +34,7 @@ def hello_world_single_core(self):
.. code:: python
from api.test_suite import TestSuite, func_test
- from framework.testbed_model.capability import NicCapability, requires_nic_capability
+ from api.testbed_model.capability import NicCapability, requires_nic_capability
class TestPmdBufferScatter(TestSuite):
# only the test case requires the SCATTERED_RX_ENABLED capability
# other test cases may not require it
@@ -235,7 +235,7 @@ def requires_link_topology(
Returns:
The decorated test case or test suite.
"""
- from framework.testbed_model.capability import TopologyCapability
+ from api.testbed_model.capability import TopologyCapability
def add_required_topology(
test_case_or_suite: type["TestProtocol"],
@@ -258,7 +258,7 @@ def requires_nic_capability(
Returns:
The decorated test case or test suite.
"""
- from framework.testbed_model.capability import DecoratedNicCapability
+ from api.testbed_model.capability import DecoratedNicCapability
def add_required_capability(
test_case_or_suite: type["TestProtocol"],
diff --git a/dts/api/packet.py b/dts/api/packet.py
index fc2be931fe..d30d455485 100644
--- a/dts/api/packet.py
+++ b/dts/api/packet.py
@@ -28,14 +28,14 @@
from scapy.packet import Packet, Padding, raw
from api.test import fail, log_debug
-from framework.context import get_ctx
-from framework.exception import InternalError
-from framework.testbed_model.traffic_generator.capturing_traffic_generator import (
+from api.testbed_model.traffic_generator.capturing_traffic_generator import (
PacketFilteringConfig,
)
-from framework.testbed_model.traffic_generator.performance_traffic_generator import (
+from api.testbed_model.traffic_generator.performance_traffic_generator import (
PerformanceTrafficStats,
)
+from framework.context import get_ctx
+from framework.exception import InternalError
from framework.utils import get_packet_summaries
@@ -82,10 +82,10 @@ def send_packets_and_capture(
Returns:
A list of received packets.
"""
- from framework.context import get_ctx
- from framework.testbed_model.traffic_generator.capturing_traffic_generator import (
+ from api.testbed_model.traffic_generator.capturing_traffic_generator import (
CapturingTrafficGenerator,
)
+ from framework.context import get_ctx
assert isinstance(
get_ctx().func_tg, CapturingTrafficGenerator
@@ -340,7 +340,7 @@ def assess_performance_by_packet(
Returns:
Performance statistics of the generated test.
"""
- from framework.testbed_model.traffic_generator.performance_traffic_generator import (
+ from api.testbed_model.traffic_generator.performance_traffic_generator import (
PerformanceTrafficGenerator,
)
diff --git a/dts/api/test_suite.py b/dts/api/test_suite.py
index f107b1cd2c..ebb07a9cae 100644
--- a/dts/api/test_suite.py
+++ b/dts/api/test_suite.py
@@ -29,11 +29,11 @@
from scapy.packet import Packet
from typing_extensions import Self
+from api.testbed_model.capability import TestProtocol
+from api.testbed_model.topology import Topology
from framework.config.common import FrozenModel
from framework.exception import ConfigurationError, InternalError
from framework.logger import DTSLogger, get_dts_logger
-from framework.testbed_model.capability import TestProtocol
-from framework.testbed_model.topology import Topology
from framework.utils import to_pascal_case
if TYPE_CHECKING:
diff --git a/dts/framework/testbed_model/__init__.py b/dts/api/testbed_model/__init__.py
similarity index 100%
rename from dts/framework/testbed_model/__init__.py
rename to dts/api/testbed_model/__init__.py
diff --git a/dts/framework/testbed_model/capability.py b/dts/api/testbed_model/capability.py
similarity index 98%
rename from dts/framework/testbed_model/capability.py
rename to dts/api/testbed_model/capability.py
index 39f6f3c0df..95583261d8 100644
--- a/dts/framework/testbed_model/capability.py
+++ b/dts/api/testbed_model/capability.py
@@ -26,7 +26,7 @@
.. code:: python
from api.test_suite import TestSuite, func_test
- from framework.testbed_model.capability import LinkTopology, requires
+ from api.testbed_model.capability import LinkTopology, requires
# The whole test suite (each test case within) doesn't require any links.
@requires_link_topology(LinkTopology.NO_LINK)
@func_test
@@ -37,7 +37,7 @@ def hello_world_single_core(self):
.. code:: python
from api.test_suite import TestSuite, func_test
- from framework.testbed_model.capability import NicCapability, requires
+ from api.testbed_model.capability import NicCapability, requires
class TestPmdBufferScatter(TestSuite):
# only the test case requires the SCATTERED_RX_ENABLED capability
# other test cases may not require it
@@ -64,11 +64,11 @@ def test_scatter_mbuf_2048(self):
from typing_extensions import Self
from api.capabilities import LinkTopology, NicCapability
-from framework.exception import ConfigurationError, InternalError, SkippedTestException
+from api.exception import ConfigurationError, InternalError, SkippedTestException
+from api.testbed_model.node import Node
+from api.testbed_model.port import DriverKind
+from api.testbed_model.topology import Topology
from framework.logger import get_dts_logger
-from framework.testbed_model.node import Node
-from framework.testbed_model.port import DriverKind
-from framework.testbed_model.topology import Topology
if TYPE_CHECKING:
from api.test_suite import TestCase
diff --git a/dts/framework/testbed_model/cpu.py b/dts/api/testbed_model/cpu.py
similarity index 99%
rename from dts/framework/testbed_model/cpu.py
rename to dts/api/testbed_model/cpu.py
index 6e2ecca080..ee754f5844 100644
--- a/dts/framework/testbed_model/cpu.py
+++ b/dts/api/testbed_model/cpu.py
@@ -24,12 +24,12 @@
from dataclasses import dataclass
from enum import auto, unique
-from framework.utils import StrEnum, expand_range
+from api.utils import StrEnum, expand_range
@unique
class Architecture(StrEnum):
- r"""The supported architectures of :class:`~framework.testbed_model.node.Node`\s."""
+ r"""The supported architectures of :class:`~api.testbed_model.node.Node`\s."""
#:
i686 = auto()
diff --git a/dts/framework/testbed_model/linux_session.py b/dts/api/testbed_model/linux_session.py
similarity index 99%
rename from dts/framework/testbed_model/linux_session.py
rename to dts/api/testbed_model/linux_session.py
index ee943462c2..7307b2abe2 100644
--- a/dts/framework/testbed_model/linux_session.py
+++ b/dts/api/testbed_model/linux_session.py
@@ -18,13 +18,13 @@
from typing_extensions import NotRequired
-from framework.exception import (
+from api.exception import (
ConfigurationError,
InternalError,
RemoteCommandExecutionError,
)
-from framework.testbed_model.port import PortInfo
-from framework.utils import expand_range
+from api.testbed_model.port import PortInfo
+from api.utils import expand_range
from .cpu import LogicalCore
from .port import Port
diff --git a/dts/framework/testbed_model/node.py b/dts/api/testbed_model/node.py
similarity index 99%
rename from dts/framework/testbed_model/node.py
rename to dts/api/testbed_model/node.py
index 67a96ef4e5..4f42bf6aeb 100644
--- a/dts/framework/testbed_model/node.py
+++ b/dts/api/testbed_model/node.py
@@ -17,11 +17,11 @@
from pathlib import PurePath
from typing import Literal, TypeAlias
+from api.exception import ConfigurationError, InternalError
from framework.config.node import (
OS,
NodeConfiguration,
)
-from framework.exception import ConfigurationError, InternalError
from framework.logger import DTSLogger, get_dts_logger
from .cpu import Architecture, LogicalCore
diff --git a/dts/framework/testbed_model/os_session.py b/dts/api/testbed_model/os_session.py
similarity index 99%
rename from dts/framework/testbed_model/os_session.py
rename to dts/api/testbed_model/os_session.py
index 2c267afed1..b1e0538ac9 100644
--- a/dts/framework/testbed_model/os_session.py
+++ b/dts/api/testbed_model/os_session.py
@@ -29,12 +29,12 @@
from enum import Flag, auto
from pathlib import Path, PurePath, PurePosixPath
+from api.utils import MesonArgs, TarCompressionFormat
from framework.config.node import NodeConfiguration
from framework.logger import DTSLogger
from framework.remote_session.interactive_remote_session import InteractiveRemoteSession
from framework.remote_session.remote_session import CommandResult, RemoteSession
from framework.settings import SETTINGS
-from framework.utils import MesonArgs, TarCompressionFormat
from .cpu import Architecture, LogicalCore
from .port import Port, PortInfo
@@ -73,11 +73,11 @@ class OSSessionInfo:
Attributes:
os_name: The name of the running operating system of
- the :class:`~framework.testbed_model.node.Node`.
+ the :class:`~api.testbed_model.node.Node`.
os_version: The version of the running operating system of
- the :class:`~framework.testbed_model.node.Node`.
+ the :class:`~api.testbed_model.node.Node`.
kernel_version: The kernel version of the running operating system of
- the :class:`~framework.testbed_model.node.Node`.
+ the :class:`~api.testbed_model.node.Node`.
"""
os_name: str
diff --git a/dts/framework/testbed_model/port.py b/dts/api/testbed_model/port.py
similarity index 98%
rename from dts/framework/testbed_model/port.py
rename to dts/api/testbed_model/port.py
index d81bc4cda0..aea3e59c25 100644
--- a/dts/framework/testbed_model/port.py
+++ b/dts/api/testbed_model/port.py
@@ -12,8 +12,8 @@
from functools import cached_property
from typing import TYPE_CHECKING, Any, Final, Literal, NamedTuple
+from api.exception import InternalError
from framework.config.node import PortConfig
-from framework.exception import InternalError
if TYPE_CHECKING:
from .node import Node
diff --git a/dts/framework/testbed_model/posix_session.py b/dts/api/testbed_model/posix_session.py
similarity index 99%
rename from dts/framework/testbed_model/posix_session.py
rename to dts/api/testbed_model/posix_session.py
index dec952685a..61c634dad1 100644
--- a/dts/framework/testbed_model/posix_session.py
+++ b/dts/api/testbed_model/posix_session.py
@@ -16,15 +16,15 @@
from collections.abc import Iterable
from pathlib import Path, PurePath, PurePosixPath
-from framework.exception import DPDKBuildError, RemoteCommandExecutionError
-from framework.settings import SETTINGS
-from framework.utils import (
+from api.exception import DPDKBuildError, RemoteCommandExecutionError
+from api.utils import (
MesonArgs,
TarCompressionFormat,
convert_to_list_of_string,
create_tarball,
extract_tarball,
)
+from framework.settings import SETTINGS
from .cpu import Architecture
from .os_session import FilePermissions, OSSession, OSSessionInfo
diff --git a/dts/framework/testbed_model/topology.py b/dts/api/testbed_model/topology.py
similarity index 98%
rename from dts/framework/testbed_model/topology.py
rename to dts/api/testbed_model/topology.py
index 34862c4d2e..5b8fe03836 100644
--- a/dts/framework/testbed_model/topology.py
+++ b/dts/api/testbed_model/topology.py
@@ -18,9 +18,9 @@
from typing_extensions import Self
from api.capabilities import LinkTopology
-from framework.exception import ConfigurationError, InternalError
-from framework.testbed_model.linux_session import LinuxSession
-from framework.testbed_model.node import Node, NodeIdentifier
+from api.exception import ConfigurationError, InternalError
+from api.testbed_model.linux_session import LinuxSession
+from api.testbed_model.node import Node, NodeIdentifier
from .port import DriverKind, Port, PortConfig
diff --git a/dts/framework/testbed_model/traffic_generator/__init__.py b/dts/api/testbed_model/traffic_generator/__init__.py
similarity index 95%
rename from dts/framework/testbed_model/traffic_generator/__init__.py
rename to dts/api/testbed_model/traffic_generator/__init__.py
index fca251f534..11fa25448a 100644
--- a/dts/framework/testbed_model/traffic_generator/__init__.py
+++ b/dts/api/testbed_model/traffic_generator/__init__.py
@@ -14,13 +14,13 @@
and a capturing traffic generator is required.
"""
+from api.exception import ConfigurationError
+from api.testbed_model.node import Node
from framework.config.test_run import (
ScapyTrafficGeneratorConfig,
TrafficGeneratorConfig,
TrexTrafficGeneratorConfig,
)
-from framework.exception import ConfigurationError
-from framework.testbed_model.node import Node
from .scapy import ScapyTrafficGenerator
from .traffic_generator import TrafficGenerator
diff --git a/dts/framework/testbed_model/traffic_generator/capturing_traffic_generator.py b/dts/api/testbed_model/traffic_generator/capturing_traffic_generator.py
similarity index 98%
rename from dts/framework/testbed_model/traffic_generator/capturing_traffic_generator.py
rename to dts/api/testbed_model/traffic_generator/capturing_traffic_generator.py
index 7655751d7e..db274e5e82 100644
--- a/dts/framework/testbed_model/traffic_generator/capturing_traffic_generator.py
+++ b/dts/api/testbed_model/traffic_generator/capturing_traffic_generator.py
@@ -17,8 +17,8 @@
from scapy.packet import Packet
from api.artifact import Artifact
-from framework.testbed_model.port import Port
-from framework.utils import get_packet_summaries
+from api.testbed_model.port import Port
+from api.utils import get_packet_summaries
from .traffic_generator import TrafficGenerator
diff --git a/dts/framework/testbed_model/traffic_generator/performance_traffic_generator.py b/dts/api/testbed_model/traffic_generator/performance_traffic_generator.py
similarity index 100%
rename from dts/framework/testbed_model/traffic_generator/performance_traffic_generator.py
rename to dts/api/testbed_model/traffic_generator/performance_traffic_generator.py
diff --git a/dts/framework/testbed_model/traffic_generator/scapy.py b/dts/api/testbed_model/traffic_generator/scapy.py
similarity index 98%
rename from dts/framework/testbed_model/traffic_generator/scapy.py
rename to dts/api/testbed_model/traffic_generator/scapy.py
index c6e9006205..215c57f93d 100644
--- a/dts/framework/testbed_model/traffic_generator/scapy.py
+++ b/dts/api/testbed_model/traffic_generator/scapy.py
@@ -25,16 +25,16 @@
from scapy.layers.l2 import Ether
from scapy.packet import Packet
+from api.exception import InteractiveSSHSessionDeadError, InternalError
+from api.testbed_model.node import Node
+from api.testbed_model.port import Port
+from api.testbed_model.topology import Topology
+from api.testbed_model.traffic_generator.capturing_traffic_generator import (
+ PacketFilteringConfig,
+)
from framework.config.node import OS
from framework.config.test_run import ScapyTrafficGeneratorConfig
-from framework.exception import InteractiveSSHSessionDeadError, InternalError
from framework.remote_session.python_shell import PythonShell
-from framework.testbed_model.node import Node
-from framework.testbed_model.port import Port
-from framework.testbed_model.topology import Topology
-from framework.testbed_model.traffic_generator.capturing_traffic_generator import (
- PacketFilteringConfig,
-)
from .capturing_traffic_generator import CapturingTrafficGenerator
diff --git a/dts/framework/testbed_model/traffic_generator/traffic_generator.py b/dts/api/testbed_model/traffic_generator/traffic_generator.py
similarity index 91%
rename from dts/framework/testbed_model/traffic_generator/traffic_generator.py
rename to dts/api/testbed_model/traffic_generator/traffic_generator.py
index cdda5a7c08..5fd68e5144 100644
--- a/dts/framework/testbed_model/traffic_generator/traffic_generator.py
+++ b/dts/api/testbed_model/traffic_generator/traffic_generator.py
@@ -13,11 +13,11 @@
from scapy.packet import Packet
+from api.testbed_model.node import Node
+from api.testbed_model.port import Port
+from api.testbed_model.topology import Topology
from framework.config.test_run import TrafficGeneratorConfig
from framework.logger import DTSLogger, get_dts_logger
-from framework.testbed_model.node import Node
-from framework.testbed_model.port import Port
-from framework.testbed_model.topology import Topology
class TrafficGenerator(ABC):
@@ -25,7 +25,7 @@ class TrafficGenerator(ABC):
Exposes the common public methods of all traffic generators and defines private methods
that must implement the traffic generation logic in subclasses. This class also extends from
- :class:`framework.utils.MultiInheritanceBaseClass` to allow subclasses the ability to inherit
+ :class:`api.utils.MultiInheritanceBaseClass` to allow subclasses the ability to inherit
from multiple classes to fulfil the traffic generating functionality without breaking
single inheritance.
"""
diff --git a/dts/framework/testbed_model/traffic_generator/trex.py b/dts/api/testbed_model/traffic_generator/trex.py
similarity index 96%
rename from dts/framework/testbed_model/traffic_generator/trex.py
rename to dts/api/testbed_model/traffic_generator/trex.py
index 22cd20dea9..d97ed934c9 100644
--- a/dts/framework/testbed_model/traffic_generator/trex.py
+++ b/dts/api/testbed_model/traffic_generator/trex.py
@@ -11,19 +11,19 @@
from scapy.packet import Packet
+from api.testbed_model.node import Node, create_session
+from api.testbed_model.os_session import OSSession
+from api.testbed_model.topology import Topology
+from api.testbed_model.traffic_generator.performance_traffic_generator import (
+ PerformanceTrafficGenerator,
+ PerformanceTrafficStats,
+)
+from api.utils import StrEnum
from framework.config.node import OS, NodeConfiguration
from framework.config.test_run import TrexTrafficGeneratorConfig
from framework.parser import TextParser
from framework.remote_session.blocking_app import BlockingApp
from framework.remote_session.python_shell import PythonShell
-from framework.testbed_model.node import Node, create_session
-from framework.testbed_model.os_session import OSSession
-from framework.testbed_model.topology import Topology
-from framework.testbed_model.traffic_generator.performance_traffic_generator import (
- PerformanceTrafficGenerator,
- PerformanceTrafficStats,
-)
-from framework.utils import StrEnum
@dataclass(slots=True)
diff --git a/dts/framework/testbed_model/virtual_device.py b/dts/api/testbed_model/virtual_device.py
similarity index 100%
rename from dts/framework/testbed_model/virtual_device.py
rename to dts/api/testbed_model/virtual_device.py
diff --git a/dts/framework/config/node.py b/dts/framework/config/node.py
index 792290f11f..63062a31b5 100644
--- a/dts/framework/config/node.py
+++ b/dts/framework/config/node.py
@@ -21,7 +21,7 @@
@unique
class OS(StrEnum):
- r"""The supported operating systems of :class:`~framework.testbed_model.node.Node`\s."""
+ r"""The supported operating systems of :class:`~api.testbed_model.node.Node`\s."""
#:
linux = auto()
@@ -32,7 +32,7 @@ class OS(StrEnum):
class HugepageConfiguration(FrozenModel):
- r"""The hugepage configuration of :class:`~framework.testbed_model.node.Node`\s."""
+ r"""The hugepage configuration of :class:`~api.testbed_model.node.Node`\s."""
#: The number of hugepages to allocate.
number_of: int
@@ -41,7 +41,7 @@ class HugepageConfiguration(FrozenModel):
class PortConfig(FrozenModel):
- r"""The port configuration of :class:`~framework.testbed_model.node.Node`\s."""
+ r"""The port configuration of :class:`~api.testbed_model.node.Node`\s."""
#: An identifier for the port. May contain letters, digits, underscores, hyphens and spaces.
name: str = Field(pattern=REGEX_FOR_IDENTIFIER)
@@ -54,17 +54,17 @@ class PortConfig(FrozenModel):
class NodeConfiguration(FrozenModel):
- r"""The configuration of :class:`~framework.testbed_model.node.Node`\s."""
+ r"""The configuration of :class:`~api.testbed_model.node.Node`\s."""
- #: The name of the :class:`~framework.testbed_model.node.Node`.
+ #: The name of the :class:`~api.testbed_model.node.Node`.
name: str = Field(pattern=REGEX_FOR_IDENTIFIER)
- #: The hostname of the :class:`~framework.testbed_model.node.Node`. Can also be an IP address.
+ #: The hostname of the :class:`~api.testbed_model.node.Node`. Can also be an IP address.
hostname: str
- #: The name of the user used to connect to the :class:`~framework.testbed_model.node.Node`.
+ #: The name of the user used to connect to the :class:`~api.testbed_model.node.Node`.
user: str
#: The password of the user. The use of passwords is heavily discouraged, please use SSH keys.
password: str | None = None
- #: The operating system of the :class:`~framework.testbed_model.node.Node`.
+ #: The operating system of the :class:`~api.testbed_model.node.Node`.
os: OS
#: An optional hugepage configuration.
hugepages: HugepageConfiguration | None = Field(None, alias="hugepages_2mb")
diff --git a/dts/framework/config/test_run.py b/dts/framework/config/test_run.py
index 75737418a8..2c16a712eb 100644
--- a/dts/framework/config/test_run.py
+++ b/dts/framework/config/test_run.py
@@ -38,7 +38,7 @@
@unique
class Compiler(StrEnum):
- r"""The supported compilers of :class:`~framework.testbed_model.node.Node`\s."""
+ r"""The supported compilers of :class:`~api.testbed_model.node.Node`\s."""
#:
gcc = auto()
diff --git a/dts/framework/context.py b/dts/framework/context.py
index 86745ab56b..618eb3dda7 100644
--- a/dts/framework/context.py
+++ b/dts/framework/context.py
@@ -8,18 +8,18 @@
from dataclasses import MISSING, dataclass, field, fields
from typing import TYPE_CHECKING, Any, Optional, ParamSpec, Union
+from api.testbed_model.cpu import LogicalCoreCount, LogicalCoreList
+from api.testbed_model.node import Node
+from api.testbed_model.topology import Topology
from framework.exception import InternalError
from framework.remote_session.shell_pool import ShellPool
from framework.settings import SETTINGS
-from framework.testbed_model.cpu import LogicalCoreCount, LogicalCoreList
-from framework.testbed_model.node import Node
-from framework.testbed_model.topology import Topology
if TYPE_CHECKING:
from api.test_suite import TestCase, TestSuite
+ from api.testbed_model.capability import TestProtocol
+ from api.testbed_model.traffic_generator.traffic_generator import TrafficGenerator
from framework.remote_session.dpdk import DPDKBuildEnvironment, DPDKRuntimeEnvironment
- from framework.testbed_model.capability import TestProtocol
- from framework.testbed_model.traffic_generator.traffic_generator import TrafficGenerator
P = ParamSpec("P")
diff --git a/dts/framework/params/eal.py b/dts/framework/params/eal.py
index e84a20f02f..86bfd3fcc6 100644
--- a/dts/framework/params/eal.py
+++ b/dts/framework/params/eal.py
@@ -6,12 +6,12 @@
from dataclasses import dataclass, field
from typing import TYPE_CHECKING, Literal
+from api.testbed_model.cpu import LogicalCoreList
+from api.testbed_model.virtual_device import VirtualDevice
from framework.params import Params, Switch
-from framework.testbed_model.cpu import LogicalCoreList
-from framework.testbed_model.virtual_device import VirtualDevice
if TYPE_CHECKING:
- from framework.testbed_model.port import Port
+ from api.testbed_model.port import Port
def _port_to_pci(port: "Port") -> str:
diff --git a/dts/framework/params/types.py b/dts/framework/params/types.py
index 3c7650474c..f2fa69f8b8 100644
--- a/dts/framework/params/types.py
+++ b/dts/framework/params/types.py
@@ -32,6 +32,9 @@ def create_testpmd(**kwargs: Unpack[TestPmdParamsDict]):
TestType,
TLSVersion,
)
+from api.testbed_model.cpu import LogicalCoreList
+from api.testbed_model.port import Port
+from api.testbed_model.virtual_device import VirtualDevice
from api.testpmd.config import (
AnonMempoolAllocationMode,
EthPeer,
@@ -54,9 +57,6 @@ def create_testpmd(**kwargs: Unpack[TestPmdParamsDict]):
TxUDPPortPair,
)
from framework.params import Switch, YesNoSwitch
-from framework.testbed_model.cpu import LogicalCoreList
-from framework.testbed_model.port import Port
-from framework.testbed_model.virtual_device import VirtualDevice
class EalParamsDict(TypedDict, total=False):
diff --git a/dts/framework/remote_session/blocking_app.py b/dts/framework/remote_session/blocking_app.py
index c3b02dcc62..4181c20e43 100644
--- a/dts/framework/remote_session/blocking_app.py
+++ b/dts/framework/remote_session/blocking_app.py
@@ -30,12 +30,12 @@
from typing_extensions import Self
+from api.testbed_model.node import Node
from framework.context import get_ctx
from framework.params import Params
from framework.params.eal import EalParams
from framework.remote_session.dpdk_shell import compute_eal_params
from framework.remote_session.interactive_shell import InteractiveShell
-from framework.testbed_model.node import Node
P = TypeVar("P", bound=Params)
diff --git a/dts/framework/remote_session/dpdk.py b/dts/framework/remote_session/dpdk.py
index c3575cfcaf..c955f4def2 100644
--- a/dts/framework/remote_session/dpdk.py
+++ b/dts/framework/remote_session/dpdk.py
@@ -13,6 +13,10 @@
from pathlib import Path, PurePath
from typing import ClassVar, Final
+from api.testbed_model.cpu import LogicalCore, LogicalCoreCount, LogicalCoreList, lcore_filter
+from api.testbed_model.node import Node
+from api.testbed_model.os_session import OSSession
+from api.testbed_model.virtual_device import VirtualDevice
from framework.config.test_run import (
DPDKBuildConfiguration,
DPDKBuildOptionsConfiguration,
@@ -29,10 +33,6 @@
from framework.logger import DTSLogger, get_dts_logger
from framework.params.eal import EalParams
from framework.remote_session.remote_session import CommandResult
-from framework.testbed_model.cpu import LogicalCore, LogicalCoreCount, LogicalCoreList, lcore_filter
-from framework.testbed_model.node import Node
-from framework.testbed_model.os_session import OSSession
-from framework.testbed_model.virtual_device import VirtualDevice
from framework.utils import MesonArgs, TarCompressionFormat
diff --git a/dts/framework/remote_session/dpdk_shell.py b/dts/framework/remote_session/dpdk_shell.py
index 269c2cada4..ac89ec0459 100644
--- a/dts/framework/remote_session/dpdk_shell.py
+++ b/dts/framework/remote_session/dpdk_shell.py
@@ -10,13 +10,13 @@
from abc import ABC, abstractmethod
from pathlib import PurePath
+from api.testbed_model.cpu import LogicalCoreList
from framework.context import get_ctx
from framework.params.eal import EalParams
from framework.remote_session.interactive_shell import (
InteractiveShell,
only_active,
)
-from framework.testbed_model.cpu import LogicalCoreList
def compute_eal_params(
diff --git a/dts/framework/remote_session/interactive_shell.py b/dts/framework/remote_session/interactive_shell.py
index a65cbce209..23d05fbdff 100644
--- a/dts/framework/remote_session/interactive_shell.py
+++ b/dts/framework/remote_session/interactive_shell.py
@@ -29,6 +29,7 @@
from paramiko import Channel, channel
from typing_extensions import Self
+from api.testbed_model.node import Node
from framework.context import get_ctx
from framework.exception import (
InteractiveCommandExecutionError,
@@ -38,7 +39,6 @@
from framework.logger import DTSLogger, get_dts_logger
from framework.params import Params
from framework.settings import SETTINGS
-from framework.testbed_model.node import Node
P = ParamSpec("P")
T = TypeVar("T", bound="InteractiveShell")
diff --git a/dts/framework/runner.py b/dts/framework/runner.py
index 6ea4749ff4..0e245a515b 100644
--- a/dts/framework/runner.py
+++ b/dts/framework/runner.py
@@ -12,10 +12,10 @@
import sys
import textwrap
+from api.testbed_model.node import Node
from framework.config.common import ValidationContext
from framework.exception import ConfigurationError
from framework.test_run import TestRun
-from framework.testbed_model.node import Node
from .config import Configuration, load_config
from .logger import DTSLogger, get_dts_logger
diff --git a/dts/framework/test_result.py b/dts/framework/test_result.py
index 21faa55dc1..e2efff8681 100644
--- a/dts/framework/test_result.py
+++ b/dts/framework/test_result.py
@@ -35,9 +35,9 @@
)
from typing_extensions import OrderedDict
+from api.testbed_model.os_session import OSSessionInfo
from framework.remote_session.dpdk import DPDKBuildInfo
from framework.settings import SETTINGS
-from framework.testbed_model.os_session import OSSessionInfo
from .exception import DTSError, ErrorSeverity, InternalError
diff --git a/dts/framework/test_run.py b/dts/framework/test_run.py
index 037ae6c9fb..14c04d1ce0 100644
--- a/dts/framework/test_run.py
+++ b/dts/framework/test_run.py
@@ -107,6 +107,14 @@
from typing import ClassVar, Protocol, Union
from api.test_suite import BaseConfig, TestCase, TestCaseType, TestSuite
+from api.testbed_model.capability import (
+ Capability,
+ get_supported_capabilities,
+ test_if_supported,
+)
+from api.testbed_model.node import Node
+from api.testbed_model.topology import PortLink, Topology
+from api.testbed_model.traffic_generator import create_traffic_generator
from framework.config.test_run import TestRunConfiguration
from framework.context import Context, init_ctx
from framework.exception import InternalError, SkippedTestException, TestCaseVerifyError
@@ -114,14 +122,6 @@
from framework.remote_session.dpdk import DPDKBuildEnvironment, DPDKRuntimeEnvironment
from framework.settings import SETTINGS
from framework.test_result import Result, ResultNode, TestRunResult
-from framework.testbed_model.capability import (
- Capability,
- get_supported_capabilities,
- test_if_supported,
-)
-from framework.testbed_model.node import Node
-from framework.testbed_model.topology import PortLink, Topology
-from framework.testbed_model.traffic_generator import create_traffic_generator
TestScenario = tuple[type[TestSuite], BaseConfig, deque[type[TestCase]]]
diff --git a/dts/tests/TestSuite_blocklist.py b/dts/tests/TestSuite_blocklist.py
index 05bfe951fd..31e69c0de9 100644
--- a/dts/tests/TestSuite_blocklist.py
+++ b/dts/tests/TestSuite_blocklist.py
@@ -12,8 +12,8 @@
)
from api.test import verify
from api.test_suite import TestSuite, func_test
+from api.testbed_model.port import Port
from api.testpmd import TestPmd
-from framework.testbed_model.port import Port
class TestBlocklist(TestSuite):
diff --git a/dts/tests/TestSuite_cryptodev_throughput.py b/dts/tests/TestSuite_cryptodev_throughput.py
index 3f046ad87e..83ce94d4df 100644
--- a/dts/tests/TestSuite_cryptodev_throughput.py
+++ b/dts/tests/TestSuite_cryptodev_throughput.py
@@ -31,9 +31,9 @@
)
from api.test import verify
from api.test_suite import BaseConfig, TestSuite, crypto_test
+from api.testbed_model.virtual_device import VirtualDevice
from framework.context import get_ctx
from framework.exception import SkippedTestException
-from framework.testbed_model.virtual_device import VirtualDevice
config_list: list[dict[str, int | float | str]] = [
{"buff_size": 64, "Gbps": 1.00},
diff --git a/dts/tests/TestSuite_l2fwd.py b/dts/tests/TestSuite_l2fwd.py
index 44fee58775..63f771d594 100644
--- a/dts/tests/TestSuite_l2fwd.py
+++ b/dts/tests/TestSuite_l2fwd.py
@@ -19,10 +19,10 @@
send_packets_and_capture,
)
from api.test_suite import TestSuite, func_test
+from api.testbed_model.cpu import LogicalCoreCount
from api.testpmd import TestPmd
from api.testpmd.config import EthPeer, SimpleForwardingModes
from framework.context import filter_cores
-from framework.testbed_model.cpu import LogicalCoreCount
from framework.utils import generate_random_packets
diff --git a/dts/tests/TestSuite_packet_capture.py b/dts/tests/TestSuite_packet_capture.py
index d37796954d..fd5cef5268 100644
--- a/dts/tests/TestSuite_packet_capture.py
+++ b/dts/tests/TestSuite_packet_capture.py
@@ -37,14 +37,14 @@
)
from api.test import verify
from api.test_suite import TestSuite, 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
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.testbed_model.cpu import LogicalCoreList
-from framework.testbed_model.traffic_generator.capturing_traffic_generator import (
- PacketFilteringConfig,
-)
@dataclass(kw_only=True)
diff --git a/dts/tests/TestSuite_smoke_tests.py b/dts/tests/TestSuite_smoke_tests.py
index 38ed2234cd..157dec7585 100644
--- a/dts/tests/TestSuite_smoke_tests.py
+++ b/dts/tests/TestSuite_smoke_tests.py
@@ -20,10 +20,10 @@
)
from api.test import verify
from api.test_suite import TestSuite, func_test
+from api.testbed_model.linux_session import LinuxSession
from api.testpmd import TestPmd
from framework.config.node import PortConfig
from framework.settings import SETTINGS
-from framework.testbed_model.linux_session import LinuxSession
from framework.utils import REGEX_FOR_PCI_ADDRESS
diff --git a/dts/tests/TestSuite_softnic.py b/dts/tests/TestSuite_softnic.py
index 263a915745..0696933053 100644
--- a/dts/tests/TestSuite_softnic.py
+++ b/dts/tests/TestSuite_softnic.py
@@ -19,9 +19,9 @@
send_packets_and_capture,
)
from api.test_suite import TestSuite, func_test
+from api.testbed_model.virtual_device import VirtualDevice
from api.testpmd import TestPmd
from api.testpmd.config import EthPeer
-from framework.testbed_model.virtual_device import VirtualDevice
from framework.utils import generate_random_packets
diff --git a/dts/tests/TestSuite_virtio_fwd.py b/dts/tests/TestSuite_virtio_fwd.py
index fd1fc476cc..2c10478df3 100644
--- a/dts/tests/TestSuite_virtio_fwd.py
+++ b/dts/tests/TestSuite_virtio_fwd.py
@@ -13,11 +13,11 @@
from api.packet import send_packets_and_capture
from api.test import log, verify
from api.test_suite import TestSuite, func_test
+from api.testbed_model.capability import requires
+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
-from framework.testbed_model.capability import requires
-from framework.testbed_model.linux_session import LinuxSession
-from framework.testbed_model.virtual_device import VirtualDevice
class TestVirtioFwd(TestSuite):
--
2.52.0
More information about the dev
mailing list