Previously, DTS had no code coverage. This patch adds a command line argument in order to build DPDK with code coverage enabled. This allows users to create and view code coverage reports of what code and functions were called during a DTS run.
Signed-off-by: Koushik Bhargav Nimoji <[email protected]> --- .mailmap | 1 + dts/framework/remote_session/dpdk.py | 4 ++++ dts/framework/settings.py | 10 ++++++++++ dts/framework/utils.py | 8 ++++++++ 4 files changed, 23 insertions(+) diff --git a/.mailmap b/.mailmap index 0e0d83e1c6..3b0ffb689c 100644 --- a/.mailmap +++ b/.mailmap @@ -868,6 +868,7 @@ Klaus Degner <[email protected]> Kommula Shiva Shankar <[email protected]> Konstantin Ananyev <[email protected]> <[email protected]> Konstantin Ananyev <[email protected]> <[email protected]> +Koushik Bhargav Nimoji <[email protected]> Krishna Murthy <[email protected]> Krzysztof Galazka <[email protected]> Krzysztof Kanas <[email protected]> <[email protected]> diff --git a/dts/framework/remote_session/dpdk.py b/dts/framework/remote_session/dpdk.py index c3575cfcaf..d5813eec00 100644 --- a/dts/framework/remote_session/dpdk.py +++ b/dts/framework/remote_session/dpdk.py @@ -29,6 +29,7 @@ from framework.logger import DTSLogger, get_dts_logger from framework.params.eal import EalParams from framework.remote_session.remote_session import CommandResult +from framework.settings import SETTINGS 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 @@ -272,6 +273,9 @@ def _build_dpdk(self) -> None: else: meson_args = MesonArgs(default_library="static", libdir="lib") + if SETTINGS.code_coverage: + meson_args._add_arg("-Db_coverage=true") + self._session.build_dpdk( self._env_vars, meson_args, diff --git a/dts/framework/settings.py b/dts/framework/settings.py index b08373b7ea..7df535bd84 100644 --- a/dts/framework/settings.py +++ b/dts/framework/settings.py @@ -159,6 +159,8 @@ class Settings: re_run: int = 0 #: random_seed: int | None = None + #: + code_coverage: bool = False SETTINGS: Settings = Settings() @@ -489,6 +491,14 @@ def _get_parser() -> _DTSArgumentParser: ) _add_env_var_to_action(action) + action = parser.add_argument( + "--code-coverage", + action="store_true", + default=False, + help="Used to build DPDK with code coverage enabled.", + ) + _add_env_var_to_action(action) + return parser diff --git a/dts/framework/utils.py b/dts/framework/utils.py index 9917ffbfaa..38da88cd9c 100644 --- a/dts/framework/utils.py +++ b/dts/framework/utils.py @@ -125,6 +125,14 @@ def __str__(self) -> str: """The actual args.""" return " ".join(f"{self._default_library} {self._dpdk_args}".split()) + def _add_arg(self, arg: str): + """Used to add a meson build argument to the DPDK build. + + Args: + arg: The meson build argument to be added. + """ + self._dpdk_args = self._dpdk_args + " " + arg + class TarCompressionFormat(StrEnum): """Compression formats that tar can use. -- 2.53.0

