f-stack/dpdk/dts/framework/dts.py

68 lines
2.1 KiB
Python

# 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
import traceback
from collections.abc import Iterable
from framework.testbed_model.node import Node
from .config import CONFIGURATION
from .logger import DTSLOG, getLogger
from .utils import check_dts_python_version
dts_logger: DTSLOG | None = None
def run_all() -> None:
"""
Main process of DTS, it will run all test suites in the config file.
"""
global dts_logger
# check the python version of the server that run dts
check_dts_python_version()
dts_logger = 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.
try:
# for all Execution sections
for execution in CONFIGURATION.executions:
sut_config = execution.system_under_test
if sut_config.name not in nodes:
node = Node(sut_config)
nodes[sut_config.name] = node
node.send_command("echo Hello World")
except Exception as e:
# sys.exit() doesn't produce a stack trace, need to print it explicitly
traceback.print_exc()
raise e
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 dts_logger is not None:
dts_logger.info("DTS execution has ended.")
sys.exit(0)