xref: /cloud-hypervisor/scripts/run_coverage.sh (revision 7e6326b3c51e4ce919fd53db58e8faec031b8910)
19f028394SSongqian Li#!/usr/bin/env bash
29f028394SSongqian Li
39f028394SSongqian Liset -x
49f028394SSongqian Li
59f028394SSongqian Li# shellcheck source=/dev/null
69f028394SSongqian Lisource "$HOME"/.cargo/env
7*7e6326b3SSongqian Lisource "$(dirname "$0")/test-util.sh"
8*7e6326b3SSongqian Li
9*7e6326b3SSongqian Liprocess_common_args "$@"
109f028394SSongqian Li
119f028394SSongqian LiPROJECT_DIR="/cloud-hypervisor"
129f028394SSongqian LiTARGET_DIR="$PROJECT_DIR/target"
139f028394SSongqian Li
149f028394SSongqian Lipushd $PROJECT_DIR || exit
159f028394SSongqian Li
169f028394SSongqian Liexport BUILD_TARGET=${BUILD_TARGET-$(uname -m)-unknown-linux-gnu}
179f028394SSongqian Li
189f028394SSongqian Li# GLIBC > 2.31
199f028394SSongqian LiGRCOV_RELEASE_URL="https://github.com/mozilla/grcov/releases/download/v0.8.19/grcov-$BUILD_TARGET.tar.bz2"
209f028394SSongqian Liwget --quiet "$GRCOV_RELEASE_URL" || exit 1
219f028394SSongqian Litar -xjf "grcov-$BUILD_TARGET.tar.bz2"
229f028394SSongqian Li
239f028394SSongqian Lirustup component add llvm-tools-preview
249f028394SSongqian Li
259f028394SSongqian Liexport_lcov() {
269f028394SSongqian Li    rm "coverage.info"
279f028394SSongqian Li
289f028394SSongqian Li    ./grcov "$(find . -name 'ch-*.profraw' -print)" -s . \
299f028394SSongqian Li        --ignore "tests/*" \
309f028394SSongqian Li        --ignore "test_infra/*" \
319f028394SSongqian Li        --ignore "performance-metrics/*" \
329f028394SSongqian Li        --binary-path "$TARGET_DIR/$BUILD_TARGET/release/" \
339f028394SSongqian Li        --branch --ignore-not-existing -t lcov \
349f028394SSongqian Li        -o "coverage.info"
359f028394SSongqian Li
369f028394SSongqian Li    find . -type f -name 'ch-*.profraw' -exec rm {} \;
379f028394SSongqian Li}
389f028394SSongqian Li
399f028394SSongqian Li# Generate HTML report
409f028394SSongqian Liexport_html() {
419f028394SSongqian Li    OUTPUT_DIR="$TARGET_DIR/coverage"
429f028394SSongqian Li    rm -rf $OUTPUT_DIR
439f028394SSongqian Li    ./grcov "$(find . -name 'ch-*.profraw' -print)" -s . \
449f028394SSongqian Li        --ignore "tests/*" \
459f028394SSongqian Li        --ignore "test_infra/*" \
469f028394SSongqian Li        --ignore "performance-metrics/*" \
479f028394SSongqian Li        --binary-path "$TARGET_DIR/$BUILD_TARGET/release/" \
489f028394SSongqian Li        --branch --ignore-not-existing -t html \
499f028394SSongqian Li        -o $OUTPUT_DIR
509f028394SSongqian Li    find . -type f -name 'ch-*.profraw' -exec rm {} \;
519f028394SSongqian Li}
529f028394SSongqian Li
53*7e6326b3SSongqian Li# test_binary_args is now a command name. Check if it is a valid command and, if so,
549f028394SSongqian Li# run it.
559f028394SSongqian Li#
56*7e6326b3SSongqian Li# shellcheck disable=SC2154
57*7e6326b3SSongqian Litype=${test_binary_args[*]}
58*7e6326b3SSongqian Lideclare -f "export_$type" >/dev/null
599f028394SSongqian Licode=$?
60*7e6326b3SSongqian Liif [[ $code != 0 ]]; then
61*7e6326b3SSongqian Li    echo "Unknown command: $type. Only support \"lcov\" and \"html\". Change to default command: html"
62*7e6326b3SSongqian Li    type="html"
63*7e6326b3SSongqian Lifi
649f028394SSongqian Li
659f028394SSongqian Lifunc=export_$type
66*7e6326b3SSongqian Li$func
679f028394SSongqian Li
689f028394SSongqian Lipopd || exit 1
69