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 13C91A00C4; Thu, 28 Jul 2022 12:01:49 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8ACCB42B9D; Thu, 28 Jul 2022 12:01:05 +0200 (CEST) Received: from lb.pantheon.sk (lb.pantheon.sk [46.229.239.20]) by mails.dpdk.org (Postfix) with ESMTP id EC73342BAE for ; Thu, 28 Jul 2022 12:00:56 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by lb.pantheon.sk (Postfix) with ESMTP id 05624131236; Thu, 28 Jul 2022 12:00:55 +0200 (CEST) X-Virus-Scanned: amavisd-new at siecit.sk Received: from lb.pantheon.sk ([127.0.0.1]) by localhost (lb.pantheon.sk [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id xA5dlFyqTK_B; Thu, 28 Jul 2022 12:00:54 +0200 (CEST) Received: from entguard.lab.pantheon.local (unknown [46.229.239.141]) by lb.pantheon.sk (Postfix) with ESMTP id BE483131239; Thu, 28 Jul 2022 12:00:49 +0200 (CEST) From: =?UTF-8?q?Juraj=20Linke=C5=A1?= To: thomas@monjalon.net, david.marchand@redhat.com, ronan.randles@intel.com, Honnappa.Nagarahalli@arm.com, ohilyard@iol.unh.edu, lijuan.tu@intel.com Cc: dev@dpdk.org, =?UTF-8?q?Juraj=20Linke=C5=A1?= Subject: [PATCH v3 8/9] dts: add dts workflow module Date: Thu, 28 Jul 2022 10:00:43 +0000 Message-Id: <20220728100044.1318484-9-juraj.linkes@pantheon.tech> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220728100044.1318484-1-juraj.linkes@pantheon.tech> References: <20220711145126.295427-1-juraj.linkes@pantheon.tech> <20220728100044.1318484-1-juraj.linkes@pantheon.tech> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 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 module implements methods needed to run DTS. It handles the creation of objects and eventually the whole DTS workflow, such as running node setups, test gathering, setup and execution and various cleanups. Signed-off-by: Owen Hilyard Signed-off-by: Juraj Linkeš --- dts/framework/dts.py | 70 +++++++++++++++++++++++++++++++++++++++ dts/framework/settings.py | 11 ++++++ 2 files changed, 81 insertions(+) create mode 100644 dts/framework/dts.py diff --git a/dts/framework/dts.py b/dts/framework/dts.py new file mode 100644 index 0000000000..1938ea6af8 --- /dev/null +++ b/dts/framework/dts.py @@ -0,0 +1,70 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2010-2019 Intel Corporation +# Copyright(c) 2022 PANTHEON.tech s.r.o. +# Copyright(c) 2022 University of New Hampshire +# + +import sys +from typing import Iterable, Optional + +import framework.logger as logger + +from .config import CONFIGURATION +from .logger import getLogger +from .node import Node +from .settings import SETTINGS +from .utils import check_dts_python_version + +log_handler: Optional[logger.DTSLOG] = None + + +def run_all() -> None: + """ + Main process of DTS, it will run all test suites in the config file. + """ + + global log_handler + + # check the python version of the server that run dts + check_dts_python_version() + + # init log_handler handler + if SETTINGS.verbose is True: + logger.set_verbose() + + log_handler = getLogger("dts") + + nodes = {} + # This try/finally block means "Run the try block, if there is an exception, + # run the finally block before passing it upward. If there is not an exception, + # run the finally block after the try block is finished." This helps avoid the + # problem of python's interpreter exit context, which essentially prevents you + # from making certain system calls. This makes cleaning up resources difficult, + # since most of the resources in DTS are network-based, which is restricted. + # + # An except block SHOULD NOT be added to this. A failure at this level should + # deliver a full stack trace for debugging, since the only place that exceptions + # should be caught and handled is in the testing code. + try: + # for all Execution sections + for execution in CONFIGURATION.executions: + sut_config = execution.system_under_test + if sut_config.name not in nodes: + nodes[sut_config.name] = Node(sut_config) + + finally: + quit_execution(nodes.values()) + + +def quit_execution(sut_nodes: Iterable[Node]) -> None: + """ + Close session to SUT and TG before quit. + Return exit status when failure occurred. + """ + for sut_node in sut_nodes: + # close all session + sut_node.node_exit() + + if log_handler is not None: + log_handler.info("DTS ended") + sys.exit(0) diff --git a/dts/framework/settings.py b/dts/framework/settings.py index 07952b9f9e..c9621d4e3d 100644 --- a/dts/framework/settings.py +++ b/dts/framework/settings.py @@ -41,6 +41,7 @@ def wrapper(**kwargs) -> _EnvironmentArgument: class _Settings: config_file_path: str timeout: float + verbose: bool def _get_parser() -> argparse.ArgumentParser: @@ -62,6 +63,15 @@ def _get_parser() -> argparse.ArgumentParser: help="[DTS_TIMEOUT] The default timeout for all DTS operations except for compiling DPDK.", ) + parser.add_argument( + "-v", + "--verbose", + action=_env_arg("DTS_VERBOSE"), + default="N", + required=False, + help="[DTS_VERBOSE] Set to 'Y' to enable verbose output, logging all messages to the console.", + ) + return parser @@ -70,6 +80,7 @@ def _get_settings() -> _Settings: return _Settings( config_file_path=args.config_file, timeout=float(args.timeout), + verbose=(args.verbose == "Y"), ) -- 2.30.2