From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0BA14C5AC7C for ; Thu, 6 Aug 2026 17:51:10 +0000 (UTC) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4A76940658; Thu, 6 Aug 2026 19:51:09 +0200 (CEST) Received: from mail-qk1-f177.google.com (mail-qk1-f177.google.com [209.85.222.177]) by mails.dpdk.org (Postfix) with ESMTP id A315440664 for ; Thu, 6 Aug 2026 19:51:07 +0200 (CEST) Received: by mail-qk1-f177.google.com with SMTP id af79cd13be357-92ed19f4d60so84837985a.0 for ; Thu, 06 Aug 2026 10:51:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iol.unh.edu; s=unh-iol; t=1786038667; x=1786643467; darn=dpdk.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=2ODYEvBWimpLK3pqG57y641SPAgIHdvZwn5HQ53JPnw=; b=eUA3O+jXO55wRVHsoTbvOGdlL4iCFEBdBF6adh3f7+UQ2t5Gnc2k0ZVILm7AIDR3KW Uuke6SRuOdfQcWvm85LkaCxsDoc5Cn8FgqgFMSOvB8JLX6K7Ak6EZOIBymOo9pXYapNA ZB7HIrcd7hv5IY0g6L7uZlBTcUOdVoHhHD4ZA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786038667; x=1786643467; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=2ODYEvBWimpLK3pqG57y641SPAgIHdvZwn5HQ53JPnw=; b=eolhIkLXXu6ze3KYZ4zV/gBAgzCoJpMN7M+hxVs3jJlIDLfh3paSi0ZpwQcxw6MMWV IakdzxolLghHmen5/cetSTp0TboMqHFgbDFSz7r1LSG4Z5PvvQszwv494QhgeL+16DTQ Ve3joRWvOyJMUYqBB9ZLxAWMbSNOQufrsef+gm3dILeCucE5bgPbos9rAxiSG3lPLtcW I2KbwyOAFsTRmyqrvLH68fMXQgtcCxO6K+d580Ms+LQBKqv3WK4dX3o7ldQsgblLudTR TDaozOQ8fue1wjQ1+UhIbEZiIb4aKm36yNN49oAZE4fZKPlRy9Yxkmr9HHCBqEFYlkPQ rhsw== X-Gm-Message-State: AOJu0YzK54wBNUFZL3fPwjlBfvi+57VvgjEyEgKC7vKjhZPxvs4aSN+e 4gWyC2XVYRcsysAshthln7gAV5aFbFK+b/pL3tikM4/4lvv0GfxcplnNtfwQuSWCCdnW1Md52SN lAXRd+tSrz1QSt5F9eXRr82MCsQ7RIP38qUbdQrv7tAA1qS1TR9aRxe5Ouczyp4eU8YLNQ2nti3 Nb6C5CrMKPmZ5z272CVfRf6/AUfCM= X-Gm-Gg: AR+sD11nAFAKjkaIeH138raYyvCrJ1LmJSkOyc3ojXXTSnZ1ILd3bZwgJgWawyBKood Hj99oAwo/QcFHBEu/uTJQ5Zc0SqZEiJFMi2yNPxpMjRJpmAKXUK5IR46c+hIdvtgfKFbOm2uKgL yxYo1CsYZdNiHFCUCqNUf/reZwflTQ/3Bg2caccfhg9V5rVCTe+oeITkzJg/eRF1LpZ+UdF71bx s72M1J/iuKa1esuihA0XZU3ereq87LXmMeFpsGkRqu1LUX6fiBj02cJPuuIHMJ7rEHIvEyAbs2B H+GXHdZyOHAebhbzYc2Crbc9zS4s+eqQ7+T+btwM9pv2OMsSl8QFga5wK3eCxXLmjkbn5WyCP2O nCQteuk7q1Ei/UX1Wb0gdJOelZjG7lGaO0qkKIGjB70ruIluyeLvYVaXQGqRyBjarN70vMC0VyS 5I+LundwGXb9BE4DVejjRYkqGpXIZFkJbsOfHKfMndv1yHZBYqE0iTS7p/UoqoFlVukMlQoVegh 5OeAkOrSXjBgBmdyN//Tma3kbrUkfsPSBxeJB3t X-Received: by 2002:a05:620a:4006:b0:934:a1e4:cfee with SMTP id af79cd13be357-9365df06bb6mr611886085a.11.1786038666613; Thu, 06 Aug 2026 10:51:06 -0700 (PDT) Received: from syn-2603-7083-bff0-a0d0-0000-0000-0000-1a64.res6.spectrum.com ([2606:4100:3880:1257::1039]) by smtp.gmail.com with ESMTPSA id af79cd13be357-93657688090sm317311285a.27.2026.08.06.10.51.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Aug 2026 10:51:06 -0700 (PDT) From: Andrew Bailey To: dev@dpdk.org, luca.vizzarro@arm.com, patrickrobb1997@gmail.com Cc: knimoji@iol.unh.edu, lylavoie@iol.unh.edu, dladd@iol.unh.edu, Andrew Bailey , Dean Marx Subject: [PATCH v6 3/7] dts: move context from framework to API Date: Thu, 6 Aug 2026 13:50:20 -0400 Message-ID: <20260806175024.13655-4-abailey@iol.unh.edu> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260806175024.13655-1-abailey@iol.unh.edu> References: <20260806135346.568766-1-abailey@iol.unh.edu> <20260806175024.13655-1-abailey@iol.unh.edu> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org A couple test suites import and get the run context during execution. Move this to the API. Signed-off-by: Dean Marx Signed-off-by: Andrew Bailey --- .../dts/{framework.context.rst => api.context.rst} | 2 +- doc/api/dts/index.rst | 2 +- dts/api/artifact.py | 2 +- dts/{framework => api}/context.py | 0 dts/api/cryptodev/__init__.py | 2 +- dts/api/packet.py | 4 ++-- dts/api/test.py | 2 +- dts/api/testpmd/__init__.py | 2 +- dts/framework/remote_session/blocking_app.py | 2 +- dts/framework/remote_session/dpdk.py | 2 +- dts/framework/remote_session/dpdk_shell.py | 2 +- dts/framework/remote_session/interactive_shell.py | 2 +- dts/framework/test_run.py | 2 +- dts/framework/test_suite.py | 4 ++-- dts/framework/testbed_model/node.py | 2 +- dts/framework/testbed_model/topology.py | 14 +++++++------- dts/tests/TestSuite_cryptodev_latency.py | 2 +- dts/tests/TestSuite_cryptodev_throughput.py | 2 +- dts/tests/TestSuite_l2fwd.py | 2 +- 19 files changed, 26 insertions(+), 26 deletions(-) rename doc/api/dts/{framework.context.rst => api.context.rst} (80%) rename dts/{framework => api}/context.py (100%) diff --git a/doc/api/dts/framework.context.rst b/doc/api/dts/api.context.rst similarity index 80% rename from doc/api/dts/framework.context.rst rename to doc/api/dts/api.context.rst index 925c160360..65b4ab9a47 100644 --- a/doc/api/dts/framework.context.rst +++ b/doc/api/dts/api.context.rst @@ -3,6 +3,6 @@ context - DTS execution context =============================== -.. automodule:: framework.context +.. automodule:: api.context :members: :show-inheritance: diff --git a/doc/api/dts/index.rst b/doc/api/dts/index.rst index 783270f6e9..98269d6e80 100644 --- a/doc/api/dts/index.rst +++ b/doc/api/dts/index.rst @@ -32,7 +32,7 @@ Modules framework.test_suite framework.test_result framework.settings - framework.context + api.context framework.logger framework.parser api.utils diff --git a/dts/api/artifact.py b/dts/api/artifact.py index 7d04c7ab49..f3dd07de56 100644 --- a/dts/api/artifact.py +++ b/dts/api/artifact.py @@ -86,7 +86,7 @@ def make_file_path( path /= custom_path else: - from framework.context import get_ctx + from api.context import get_ctx try: ctx = get_ctx() diff --git a/dts/framework/context.py b/dts/api/context.py similarity index 100% rename from dts/framework/context.py rename to dts/api/context.py diff --git a/dts/api/cryptodev/__init__.py b/dts/api/cryptodev/__init__.py index 335b811620..198607696f 100644 --- a/dts/api/cryptodev/__init__.py +++ b/dts/api/cryptodev/__init__.py @@ -14,6 +14,7 @@ from typing_extensions import Unpack +from api.context import get_ctx from api.cryptodev.config import CryptoPmdParams, TestType from api.cryptodev.types import ( CryptodevResults, @@ -23,7 +24,6 @@ VerifyResults, ) from api.exception import RemoteCommandExecutionError, SkippedTestException -from framework.context import get_ctx from framework.remote_session.dpdk_shell import compute_eal_params if TYPE_CHECKING: diff --git a/dts/api/packet.py b/dts/api/packet.py index 98f995deb5..dda3087df4 100644 --- a/dts/api/packet.py +++ b/dts/api/packet.py @@ -27,10 +27,10 @@ from scapy.layers.l2 import Ether from scapy.packet import Packet, Padding, raw +from api.context import get_ctx from api.exception import InternalError from api.test import fail, log_debug from api.utils import get_packet_summaries -from framework.context import get_ctx from framework.testbed_model.traffic_generator.capturing_traffic_generator import ( PacketFilteringConfig, ) @@ -82,7 +82,7 @@ def send_packets_and_capture( Returns: A list of received packets. """ - from framework.context import get_ctx + from api.context import get_ctx from framework.testbed_model.traffic_generator.capturing_traffic_generator import ( CapturingTrafficGenerator, ) diff --git a/dts/api/test.py b/dts/api/test.py index 29d6842111..b6caf5c1ae 100644 --- a/dts/api/test.py +++ b/dts/api/test.py @@ -11,8 +11,8 @@ from api.artifact import Artifact from api.capabilities import LinkTopology +from api.context import get_ctx from api.exception import InternalError, SkippedTestException, TestCaseVerifyError -from framework.context import get_ctx from framework.logger import DTSLogger diff --git a/dts/api/testpmd/__init__.py b/dts/api/testpmd/__init__.py index fef7430cb8..ce41408eb6 100644 --- a/dts/api/testpmd/__init__.py +++ b/dts/api/testpmd/__init__.py @@ -32,6 +32,7 @@ from typing_extensions import Unpack from api.capabilities import LinkTopology, NicCapability +from api.context import get_ctx from api.exception import InteractiveCommandExecutionError, InternalError from api.testpmd.config import PortTopology, SimpleForwardingModes, TestPmdParams from api.testpmd.types import ( @@ -55,7 +56,6 @@ TxOffloadConfiguration, VLANOffloadFlag, ) -from framework.context import get_ctx from framework.params.types import TestPmdParamsDict from framework.remote_session.dpdk_shell import DPDKShell from framework.remote_session.interactive_shell import only_active diff --git a/dts/framework/remote_session/blocking_app.py b/dts/framework/remote_session/blocking_app.py index c3b02dcc62..07db6dfeb0 100644 --- a/dts/framework/remote_session/blocking_app.py +++ b/dts/framework/remote_session/blocking_app.py @@ -30,7 +30,7 @@ from typing_extensions import Self -from framework.context import get_ctx +from api.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 diff --git a/dts/framework/remote_session/dpdk.py b/dts/framework/remote_session/dpdk.py index ba91c88d11..ee34eb567d 100644 --- a/dts/framework/remote_session/dpdk.py +++ b/dts/framework/remote_session/dpdk.py @@ -14,6 +14,7 @@ from typing import ClassVar, Final from api.capabilities import LinkTopology +from api.context import get_ctx from api.exception import ConfigurationError, RemoteFileNotFoundError from api.utils import MesonArgs, TarCompressionFormat from framework.config.test_run import ( @@ -27,7 +28,6 @@ RemoteDPDKTarballLocation, RemoteDPDKTreeLocation, ) -from framework.context import get_ctx from framework.logger import DTSLogger, get_dts_logger from framework.params.eal import EalParams from framework.remote_session.remote_session import CommandResult diff --git a/dts/framework/remote_session/dpdk_shell.py b/dts/framework/remote_session/dpdk_shell.py index 269c2cada4..a8f169787c 100644 --- a/dts/framework/remote_session/dpdk_shell.py +++ b/dts/framework/remote_session/dpdk_shell.py @@ -10,7 +10,7 @@ from abc import ABC, abstractmethod from pathlib import PurePath -from framework.context import get_ctx +from api.context import get_ctx from framework.params.eal import EalParams from framework.remote_session.interactive_shell import ( InteractiveShell, diff --git a/dts/framework/remote_session/interactive_shell.py b/dts/framework/remote_session/interactive_shell.py index 367a01714d..362bc2a352 100644 --- a/dts/framework/remote_session/interactive_shell.py +++ b/dts/framework/remote_session/interactive_shell.py @@ -29,12 +29,12 @@ from paramiko import Channel, channel from typing_extensions import Self +from api.context import get_ctx from api.exception import ( InteractiveCommandExecutionError, InteractiveSSHSessionDeadError, InteractiveSSHTimeoutError, ) -from framework.context import get_ctx from framework.logger import DTSLogger, get_dts_logger from framework.params import Params from framework.settings import SETTINGS diff --git a/dts/framework/test_run.py b/dts/framework/test_run.py index 75d82c1104..8b9ae4a49a 100644 --- a/dts/framework/test_run.py +++ b/dts/framework/test_run.py @@ -108,9 +108,9 @@ from typing import ClassVar, Protocol, Union from api.capabilities import LinkTopology +from api.context import Context, init_ctx from api.exception import InternalError, SkippedTestException, TestCaseVerifyError from framework.config.test_run import TestRunConfiguration -from framework.context import Context, init_ctx from framework.logger import DTSLogger, get_dts_logger from framework.remote_session.dpdk import DPDKBuildEnvironment, DPDKRuntimeEnvironment from framework.settings import SETTINGS diff --git a/dts/framework/test_suite.py b/dts/framework/test_suite.py index 426c98fdf6..6066f7a77a 100644 --- a/dts/framework/test_suite.py +++ b/dts/framework/test_suite.py @@ -38,7 +38,7 @@ from .logger import DTSLogger, get_dts_logger if TYPE_CHECKING: - from framework.context import Context + from api.context import Context class BaseConfig(FrozenModel): @@ -92,7 +92,7 @@ def __init__(self, config: BaseConfig) -> None: Args: config: The test suite configuration. """ - from framework.context import get_ctx + from api.context import get_ctx self.config = config self._ctx = get_ctx() diff --git a/dts/framework/testbed_model/node.py b/dts/framework/testbed_model/node.py index 4f42bf6aeb..40dd7f0666 100644 --- a/dts/framework/testbed_model/node.py +++ b/dts/framework/testbed_model/node.py @@ -242,7 +242,7 @@ def get_node(node_identifier: NodeIdentifier) -> Node | None: if node_identifier == "local": return None - from framework.context import get_ctx + from api.context import get_ctx ctx = get_ctx() if node_identifier == "sut": diff --git a/dts/framework/testbed_model/topology.py b/dts/framework/testbed_model/topology.py index 002faf0b7f..6b8c5edee5 100644 --- a/dts/framework/testbed_model/topology.py +++ b/dts/framework/testbed_model/topology.py @@ -98,7 +98,7 @@ def node_and_ports_from_id(self, node_identifier: NodeIdentifier) -> tuple[Node, Raises: InternalError: If the given `node_identifier` is invalid. """ - from framework.context import get_ctx + from api.context import get_ctx ctx = get_ctx() match node_identifier: @@ -188,7 +188,7 @@ def instantiate_crypto_ports(self) -> None: Raises: InternalError: If crypto virtual functions could not be created on a port. """ - from framework.context import get_ctx + from api.context import get_ctx ctx = get_ctx() for port in ctx.sut_node.cryptodevs: @@ -214,7 +214,7 @@ def instantiate_vf_ports(self) -> None: Raises: InternalError: If virtual function creation fails. """ - from framework.context import get_ctx + from api.context import get_ctx ctx = get_ctx() @@ -243,7 +243,7 @@ def instantiate_vf_ports(self) -> None: def delete_vf_ports(self) -> None: """Delete virtual functions from the SUT node during test run teardown.""" - from framework.context import get_ctx + from api.context import get_ctx ctx = get_ctx() @@ -254,7 +254,7 @@ def delete_vf_ports(self) -> None: def delete_crypto_vf_ports(self) -> None: """Delete crypto virtual functions from the SUT node during test run teardown.""" - from framework.context import get_ctx + from api.context import get_ctx ctx = get_ctx() @@ -267,7 +267,7 @@ def bind_cryptodevs(self, driver: DriverKind): Args: driver: The driver to bind the crypto functions """ - from framework.context import get_ctx + from api.context import get_ctx self._bind_ports_to_drivers(get_ctx().sut_node, self.crypto_vf_ports, driver) @@ -326,7 +326,7 @@ def _prepare_devbind_script(self) -> None: Raises: InternalError: If dpdk-devbind.py could not be found. """ - from framework.context import get_ctx + from api.context import get_ctx local_script_path = Path("..", "usertools", "dpdk-devbind.py").resolve() valid_script_path = local_script_path.exists() diff --git a/dts/tests/TestSuite_cryptodev_latency.py b/dts/tests/TestSuite_cryptodev_latency.py index 4e7d814faa..ed6423eb26 100644 --- a/dts/tests/TestSuite_cryptodev_latency.py +++ b/dts/tests/TestSuite_cryptodev_latency.py @@ -13,6 +13,7 @@ LinkTopology, requires_link_topology, ) +from api.context import get_ctx from api.cryptodev import Cryptodev from api.cryptodev.config import ( AeadAlgName, @@ -30,7 +31,6 @@ CryptodevResults, ) from api.test import skip, verify -from framework.context import get_ctx from framework.test_suite import BaseConfig, TestSuite, crypto_test from framework.testbed_model.virtual_device import VirtualDevice diff --git a/dts/tests/TestSuite_cryptodev_throughput.py b/dts/tests/TestSuite_cryptodev_throughput.py index 53682f35fa..d69714e1fa 100644 --- a/dts/tests/TestSuite_cryptodev_throughput.py +++ b/dts/tests/TestSuite_cryptodev_throughput.py @@ -13,6 +13,7 @@ LinkTopology, requires_link_topology, ) +from api.context import get_ctx from api.cryptodev import Cryptodev from api.cryptodev.config import ( AeadAlgName, @@ -30,7 +31,6 @@ CryptodevResults, ) from api.test import skip, verify -from framework.context import get_ctx from framework.test_suite import BaseConfig, TestSuite, crypto_test from framework.testbed_model.virtual_device import VirtualDevice diff --git a/dts/tests/TestSuite_l2fwd.py b/dts/tests/TestSuite_l2fwd.py index 1e99b82b8c..574842e2e4 100644 --- a/dts/tests/TestSuite_l2fwd.py +++ b/dts/tests/TestSuite_l2fwd.py @@ -13,6 +13,7 @@ requires_link_topology, requires_nic_capability, ) +from api.context import filter_cores from api.packet import ( get_expected_packets, match_all_packets, @@ -21,7 +22,6 @@ from api.testpmd import TestPmd from api.testpmd.config import EthPeer, SimpleForwardingModes from api.utils import generate_random_packets -from framework.context import filter_cores from framework.test_suite import TestSuite, func_test from framework.testbed_model.cpu import LogicalCoreCount -- 2.55.0