From 08e0bfacae9b15239028ec60c2fb36e9d7075825 Mon Sep 17 00:00:00 2001 From: Hsin-Yi Chen Date: Thu, 22 Aug 2024 16:21:25 +0800 Subject: [PATCH] ANDROID: Collect coverage data from KUnit kunit.sh supports --gcov. It invokes bazel and TradeFed with additional parameters. It outputs coverage data that lcov can analyze. Test: common/tools/testing/android/bin/kunit.sh --gcov \ -d $PWD/out/kunit/dist Bug: 358439710 Change-Id: If9d406ab3809f405e99508ce455f3c640a09dc01 Signed-off-by: Hsin-Yi Chen --- tools/testing/android/bin/kselftest.sh | 2 ++ tools/testing/android/bin/kunit.sh | 31 +++++++++++++++++++++++--- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/tools/testing/android/bin/kselftest.sh b/tools/testing/android/bin/kselftest.sh index 2ef15040a26b..68c1932ce441 100755 --- a/tools/testing/android/bin/kselftest.sh +++ b/tools/testing/android/bin/kselftest.sh @@ -121,6 +121,8 @@ while test $# -gt 0; do shift ;; *) + echo "unknown argument: $1" + exit 1 ;; esac done diff --git a/tools/testing/android/bin/kunit.sh b/tools/testing/android/bin/kunit.sh index c6c87a9eed29..bd6acdd3d9e5 100755 --- a/tools/testing/android/bin/kunit.sh +++ b/tools/testing/android/bin/kunit.sh @@ -26,6 +26,7 @@ print_help() { echo " If serial is specified, virtual device launch will be skipped" echo " -t, --test=TEST_NAME The test target name. Can be repeated" echo " If test is not specified, all tests will be run" + echo " --gcov Collect coverage data from the test result" echo " -h, --help Display this help message and exit" echo "" echo "Examples:" @@ -44,6 +45,7 @@ SERIAL_NUMBER= MODULE_NAME="kunit" TEST_FILTERS= SELECTED_TESTS= +GCOV=false while test $# -gt 0; do case "$1" in @@ -114,15 +116,28 @@ while test $# -gt 0; do TEST_FILTERS+="--include-filter '$MODULE_NAME $TEST_NAME'" shift ;; + --gcov) + GCOV=true + shift + ;; *) + echo "unknown argument: $1" + exit 1 ;; esac done +# Kernel and modules must be built with the same flags. +BUILD_FLAGS= +if $GCOV; then + BUILD_FLAGS+=" --gcov" +fi + if $BUILD_KERNEL; then echo "Building kernel..." # TODO: add support to build kernel for physical device - $BAZEL run //common-modules/virtual-device:virtual_device_x86_64_dist -- --dist_dir=$DIST_DIR + $BAZEL run $BUILD_FLAGS //common-modules/virtual-device:virtual_device_x86_64_dist -- \ + --dist_dir=$DIST_DIR exit_code=$? if [ $exit_code -eq 0 ]; then echo "Command succeeded" @@ -162,11 +177,11 @@ echo "Building KUnit tests according to device $SERIAL_NUMBER ro.product.cpu.abi case $ABI in arm64*) TESTSDIR+="_arm64" - $BAZEL run //common:kunit_tests_arm64 -- -v --destdir $TESTSDIR + $BAZEL run $BUILD_FLAGS //common:kunit_tests_arm64 -- -v --destdir $TESTSDIR ;; x86_64*) TESTSDIR+="_x86_64" - $BAZEL run //common:kunit_tests_x86_64 -- -v --destdir $TESTSDIR + $BAZEL run $BUILD_FLAGS //common:kunit_tests_x86_64 -- -v --destdir $TESTSDIR ;; *) echo "$ABI not supported" @@ -193,6 +208,10 @@ template/local_min --template:map test=suite/test_mapping_suite \ $TEST_FILTERS --tests-dir=$TESTSDIR --log-file-path=$LOG_DIR \ --primary-abi-only -s $SERIAL_NUMBER" +if $GCOV; then + tf_cli+=" --coverage --coverage-toolchain GCOV_KERNEL --auto-collect GCOV_KERNEL_COVERAGE" +fi + echo "Runing tradefed command: $tf_cli" eval $tf_cli @@ -201,3 +220,9 @@ if $LAUNCH_CVD && $KILL_CVD; then echo "Test finished. Deleting cvd instance $INSTANCE_NAME ..." $ACLOUD delete --instance-names $INSTANCE_NAME fi + +if $GCOV; then + echo "Creating tracefile ..." + common/tools/testing/android/bin/create-tracefile.py -t $LOG_DIR -o $LOG_DIR/cov.info && \ + echo "Created tracefile at $LOG_DIR/cov.info" +fi