From ad3c3909ae145dd8e551a949c1bbd1bf2c6762b7 Mon Sep 17 00:00:00 2001 From: Alberto Escolar Piedras Date: Fri, 21 Apr 2023 10:13:33 +0200 Subject: [PATCH] tests/bsim: Add a script to generate coverage reports For users convenience, as it is a typical usecase to want to see the actual coverage of a set of tests. Signed-off-by: Alberto Escolar Piedras --- doc/develop/test/bsim.rst | 7 +++- tests/bsim/README.md | 7 ++++ tests/bsim/generate_coverage_report.sh | 54 ++++++++++++++++++++++++++ tests/bsim/run_parallel.sh | 2 +- 4 files changed, 68 insertions(+), 2 deletions(-) create mode 100755 tests/bsim/generate_coverage_report.sh diff --git a/doc/develop/test/bsim.rst b/doc/develop/test/bsim.rst index e82af016927..ef26e4c1fa4 100644 --- a/doc/develop/test/bsim.rst +++ b/doc/develop/test/bsim.rst @@ -63,7 +63,12 @@ Test coverage and BabbleSim *************************** As the :ref:`nrf52_bsim` is based on the POSIX architecture, you can easily collect test -coverage information. See :ref:`the page on coverage generation ` for more info. +coverage information. + +You can use the script :code:`tests/bsim/generate_coverage_report.sh` to generate an html +coverage report from tests. + +Check :ref:`the page on coverage generation ` for more info. .. _BabbleSim: https://BabbleSim.github.io diff --git a/tests/bsim/README.md b/tests/bsim/README.md index 2a441aa1cf6..1f3894f331d 100644 --- a/tests/bsim/README.md +++ b/tests/bsim/README.md @@ -38,6 +38,13 @@ tests/bsim/net/sockets/echo_test/tests_scripts/echo_test_802154.sh ``` +Generating coverage reports +--------------------------- + +You can use `tests/bsim/generate_coverage_report.sh` to generate a coverage report +of the BabbleSim tests which have been run. Check its help for more info. + + Conventions about these tests scripts ------------------------------------- diff --git a/tests/bsim/generate_coverage_report.sh b/tests/bsim/generate_coverage_report.sh new file mode 100755 index 00000000000..6da1eceefa2 --- /dev/null +++ b/tests/bsim/generate_coverage_report.sh @@ -0,0 +1,54 @@ +#! /usr/bin/env bash +# Copyright 2023 Nordic Semiconductor ASA +# SPDX-License-Identifier: Apache-2.0 + +set -eu + +function display_help(){ + echo "\ +_generate_coverage_report.sh [-help] + Generate an html coverage report for BabbleSim tests + + You can call it from the Zephyr top level as: + tests/bsim/_generate_coverage_report.sh + + Coverage files will be searched for in the folder pointed by + the variable WORK_DIR which by default is + ${ZEPHYR_BASE}/bsim_out + + By default the output will be placed in \${WORK_DIR}/lcov_html/. + You can override this by setting the variable OUTPUT_DIR + + By default it takes all coverage information generated by all run tests + but you can limit the search by setting WORK_DIR to some subfolder + + You can also merge in the twister coverage report by setting + the variable TWISTER_COVERAGE_FILE, for example as: + TWISTER_COVERAGE_FILE=\${ZEPHYR_BASE}/twister-out/coverage.info + after having run twister, for example as + twister -p nrf52_bsim -T tests/bluetooth/ --coverage + + Note: Generating a coverage report for many tests is a lengthy process +" +} + +# Parse command line +if [ $# -ge 1 ]; then + if grep -Eiq "(\?|-\?|-h|help|-help|--help)" <<< $1 ; then + display_help + exit 0 + fi +fi + +WORK_DIR="${WORK_DIR:-${ZEPHYR_BASE}/bsim_out}" +OUTPUT_DIR="${OUTPUT_DIR:-${WORK_DIR}}" +TWISTER_COVERAGE_FILE="${TWISTER_COVERAGE_FILE:-""}" + +lcov --capture --directory ${WORK_DIR} --output-file ${OUTPUT_DIR}/coverage.pre.info \ + -q --rc lcov_branch_coverage=1 +lcov --remove ${OUTPUT_DIR}/coverage.pre.info *generated* \ + --output-file ${OUTPUT_DIR}/coverage.info -q --rc lcov_branch_coverage=1 +genhtml ${OUTPUT_DIR}/coverage.info ${TWISTER_COVERAGE_FILE} --output-directory \ + ${OUTPUT_DIR}/lcov_html -q --ignore-errors source --branch-coverage --highlight --legend + +echo -e "\033[0;32mGenerated: ${OUTPUT_DIR}/lcov_html/index.html\033[0m" diff --git a/tests/bsim/run_parallel.sh b/tests/bsim/run_parallel.sh index 98996f6be6d..9855332f780 100755 --- a/tests/bsim/run_parallel.sh +++ b/tests/bsim/run_parallel.sh @@ -50,7 +50,7 @@ elif [ -n "${TESTS_LIST}" ]; then else SEARCH_PATH="${SEARCH_PATH:-.}" all_cases=`find ${SEARCH_PATH} -name "*.sh" | \ - grep -Ev "(/_|run_parallel|compile.sh)"` + grep -Ev "(/_|run_parallel|compile.sh|generate_coverage_report.sh)"` #we dont run ourselves fi