From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 8542E45C9D; Wed, 6 Nov 2024 19:11:22 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3658342E93; Wed, 6 Nov 2024 19:11:06 +0100 (CET) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mails.dpdk.org (Postfix) with ESMTP id EB18A42E82 for ; Wed, 6 Nov 2024 19:11:03 +0100 (CET) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 4434E497; Wed, 6 Nov 2024 10:11:33 -0800 (PST) Received: from localhost.localdomain (JR4XG4HTQC.cambridge.arm.com [10.1.30.24]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id BE6393F66E; Wed, 6 Nov 2024 10:11:02 -0800 (PST) From: Luca Vizzarro To: dev@dpdk.org Cc: Paul Szczepanek , Patrick Robb , Luca Vizzarro , Nicholas Pratte Subject: [PATCH v5 3/8] dts: refactor build and node info classes Date: Wed, 6 Nov 2024 18:09:15 +0000 Message-ID: <20241106180921.4038458-4-luca.vizzarro@arm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241106180921.4038458-1-luca.vizzarro@arm.com> References: <20240822163941.1390326-1-luca.vizzarro@arm.com> <20241106180921.4038458-1-luca.vizzarro@arm.com> 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 The DPDKBuildInfo and NodeInfo classes, representing information gathered in runtime, were erroneously placed in the configuration package. This moves them in more appropriate modules. NodeInfo, specifically, is moved to os_session instead of node mostly as a consequence of circular dependencies. And given os_session is the top-most module to reference it, it appears to be the most suitable place outside of node. Finally NodeInfo, is better renamed to OSSessionInfo as it represents the information on the target OS session. Signed-off-by: Luca Vizzarro Reviewed-by: Paul Szczepanek Reviewed-by: Nicholas Pratte --- dts/framework/config/__init__.py | 31 -------------------- dts/framework/test_result.py | 6 ++-- dts/framework/testbed_model/os_session.py | 23 +++++++++++++-- dts/framework/testbed_model/posix_session.py | 8 ++--- dts/framework/testbed_model/sut_node.py | 22 ++++++++++---- 5 files changed, 46 insertions(+), 44 deletions(-) diff --git a/dts/framework/config/__init__.py b/dts/framework/config/__init__.py index d0d95d00c7..7403ccbf14 100644 --- a/dts/framework/config/__init__.py +++ b/dts/framework/config/__init__.py @@ -318,24 +318,6 @@ class TGNodeConfiguration(NodeConfiguration): traffic_generator: TrafficGeneratorConfig -@dataclass(slots=True, frozen=True) -class NodeInfo: - """Supplemental node information. - - Attributes: - os_name: The name of the running operating system of - the :class:`~framework.testbed_model.node.Node`. - os_version: The version of the running operating system of - the :class:`~framework.testbed_model.node.Node`. - kernel_version: The kernel version of the running operating system of - the :class:`~framework.testbed_model.node.Node`. - """ - - os_name: str - os_version: str - kernel_version: str - - @dataclass(slots=True, frozen=True) class DPDKBuildConfiguration: """DPDK build configuration. @@ -493,19 +475,6 @@ def from_dict(cls, d: DPDKConfigurationDict) -> Self: ) -@dataclass(slots=True, frozen=True) -class DPDKBuildInfo: - """Various versions and other information about a DPDK build. - - Attributes: - dpdk_version: The DPDK version that was built. - compiler_version: The version of the compiler used to build DPDK. - """ - - dpdk_version: str | None - compiler_version: str | None - - @dataclass(slots=True, frozen=True) class TestSuiteConfig: """Test suite configuration. diff --git a/dts/framework/test_result.py b/dts/framework/test_result.py index 00263ad69e..6014d281b5 100644 --- a/dts/framework/test_result.py +++ b/dts/framework/test_result.py @@ -30,11 +30,13 @@ from framework.testbed_model.capability import Capability -from .config import DPDKBuildInfo, NodeInfo, TestRunConfiguration, TestSuiteConfig +from .config import TestRunConfiguration, TestSuiteConfig from .exception import DTSError, ErrorSeverity from .logger import DTSLogger from .settings import SETTINGS from .test_suite import TestCase, TestSuite +from .testbed_model.os_session import OSSessionInfo +from .testbed_model.sut_node import DPDKBuildInfo @dataclass(slots=True, frozen=True) @@ -421,7 +423,7 @@ def test_suites_with_cases(self, test_suites_with_cases: list[TestSuiteWithCases ) self._test_suites_with_cases = test_suites_with_cases - def add_sut_info(self, sut_info: NodeInfo) -> None: + def add_sut_info(self, sut_info: OSSessionInfo) -> None: """Add SUT information gathered at runtime. Args: diff --git a/dts/framework/testbed_model/os_session.py b/dts/framework/testbed_model/os_session.py index 6194ddb989..db37424954 100644 --- a/dts/framework/testbed_model/os_session.py +++ b/dts/framework/testbed_model/os_session.py @@ -24,11 +24,12 @@ """ from abc import ABC, abstractmethod from collections.abc import Iterable +from dataclasses import dataclass from ipaddress import IPv4Interface, IPv6Interface from pathlib import Path, PurePath, PurePosixPath from typing import Union -from framework.config import Architecture, NodeConfiguration, NodeInfo +from framework.config import Architecture, NodeConfiguration from framework.logger import DTSLogger from framework.remote_session import ( InteractiveRemoteSession, @@ -44,6 +45,24 @@ from .port import Port +@dataclass(slots=True, frozen=True) +class OSSessionInfo: + """Supplemental OS session information. + + Attributes: + os_name: The name of the running operating system of + the :class:`~framework.testbed_model.node.Node`. + os_version: The version of the running operating system of + the :class:`~framework.testbed_model.node.Node`. + kernel_version: The kernel version of the running operating system of + the :class:`~framework.testbed_model.node.Node`. + """ + + os_name: str + os_version: str + kernel_version: str + + class OSSession(ABC): """OS-unaware to OS-aware translation API definition. @@ -482,7 +501,7 @@ def get_compiler_version(self, compiler_name: str) -> str: """ @abstractmethod - def get_node_info(self) -> NodeInfo: + def get_node_info(self) -> OSSessionInfo: """Collect additional information about the node. Returns: diff --git a/dts/framework/testbed_model/posix_session.py b/dts/framework/testbed_model/posix_session.py index 5ab7c18fb7..d7a1f38cad 100644 --- a/dts/framework/testbed_model/posix_session.py +++ b/dts/framework/testbed_model/posix_session.py @@ -15,7 +15,7 @@ from collections.abc import Iterable from pathlib import Path, PurePath, PurePosixPath -from framework.config import Architecture, NodeInfo +from framework.config import Architecture from framework.exception import DPDKBuildError, RemoteCommandExecutionError from framework.settings import SETTINGS from framework.utils import ( @@ -26,7 +26,7 @@ extract_tarball, ) -from .os_session import OSSession +from .os_session import OSSession, OSSessionInfo class PosixSession(OSSession): @@ -386,11 +386,11 @@ def get_compiler_version(self, compiler_name: str) -> str: case _: raise ValueError(f"Unknown compiler {compiler_name}") - def get_node_info(self) -> NodeInfo: + def get_node_info(self) -> OSSessionInfo: """Overrides :meth:`~.os_session.OSSession.get_node_info`.""" os_release_info = self.send_command( "awk -F= '$1 ~ /^NAME$|^VERSION$/ {print $2}' /etc/os-release", SETTINGS.timeout, ).stdout.split("\n") kernel_version = self.send_command("uname -r", SETTINGS.timeout).stdout - return NodeInfo(os_release_info[0].strip(), os_release_info[1].strip(), kernel_version) + return OSSessionInfo(os_release_info[0].strip(), os_release_info[1].strip(), kernel_version) diff --git a/dts/framework/testbed_model/sut_node.py b/dts/framework/testbed_model/sut_node.py index e160386324..5474d436a1 100644 --- a/dts/framework/testbed_model/sut_node.py +++ b/dts/framework/testbed_model/sut_node.py @@ -14,13 +14,12 @@ import os import time +from dataclasses import dataclass from pathlib import PurePath from framework.config import ( DPDKBuildConfiguration, - DPDKBuildInfo, DPDKLocation, - NodeInfo, SutNodeConfiguration, TestRunConfiguration, ) @@ -30,10 +29,23 @@ from framework.utils import MesonArgs, TarCompressionFormat from .node import Node -from .os_session import OSSession +from .os_session import OSSession, OSSessionInfo from .virtual_device import VirtualDevice +@dataclass(slots=True, frozen=True) +class DPDKBuildInfo: + """Various versions and other information about a DPDK build. + + Attributes: + dpdk_version: The DPDK version that was built. + compiler_version: The version of the compiler used to build DPDK. + """ + + dpdk_version: str | None + compiler_version: str | None + + class SutNode(Node): """The system under test node. @@ -63,7 +75,7 @@ class SutNode(Node): _app_compile_timeout: float _dpdk_kill_session: OSSession | None _dpdk_version: str | None - _node_info: NodeInfo | None + _node_info: OSSessionInfo | None _compiler_version: str | None _path_to_devbind_script: PurePath | None _ports_bound_to_dpdk: bool @@ -125,7 +137,7 @@ def dpdk_version(self) -> str | None: return self._dpdk_version @property - def node_info(self) -> NodeInfo: + def node_info(self) -> OSSessionInfo: """Additional node information.""" if self._node_info is None: self._node_info = self.main_session.get_node_info() -- 2.43.0