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