mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2024-10-18 10:59:16 +00:00
scripts: add code coverage script
Fixes: #6507 Signed-off-by: Songqian Li <sionli@tencent.com>
This commit is contained in:
parent
eabbeac9c0
commit
9f02839448
@ -200,6 +200,7 @@ cmd_help() {
|
|||||||
echo " --integration-rate-limiter Run the rate-limiter integration tests."
|
echo " --integration-rate-limiter Run the rate-limiter integration tests."
|
||||||
echo " --libc Select the C library Cloud Hypervisor will be built against. Default is gnu"
|
echo " --libc Select the C library Cloud Hypervisor will be built against. Default is gnu"
|
||||||
echo " --metrics Generate performance metrics"
|
echo " --metrics Generate performance metrics"
|
||||||
|
echo " --coverage Generate code coverage information"
|
||||||
echo " --volumes Hash separated volumes to be exported. Example --volumes /mnt:/mnt#/myvol:/myvol"
|
echo " --volumes Hash separated volumes to be exported. Example --volumes /mnt:/mnt#/myvol:/myvol"
|
||||||
echo " --hypervisor Underlying hypervisor. Options kvm, mshv"
|
echo " --hypervisor Underlying hypervisor. Options kvm, mshv"
|
||||||
echo " --all Run all tests."
|
echo " --all Run all tests."
|
||||||
@ -332,6 +333,7 @@ cmd_tests() {
|
|||||||
integration_live_migration=false
|
integration_live_migration=false
|
||||||
integration_rate_limiter=false
|
integration_rate_limiter=false
|
||||||
metrics=false
|
metrics=false
|
||||||
|
coverage=false
|
||||||
libc="gnu"
|
libc="gnu"
|
||||||
arg_vols=""
|
arg_vols=""
|
||||||
hypervisor="kvm"
|
hypervisor="kvm"
|
||||||
@ -350,6 +352,7 @@ cmd_tests() {
|
|||||||
"--integration-live-migration") { integration_live_migration=true; } ;;
|
"--integration-live-migration") { integration_live_migration=true; } ;;
|
||||||
"--integration-rate-limiter") { integration_rate_limiter=true; } ;;
|
"--integration-rate-limiter") { integration_rate_limiter=true; } ;;
|
||||||
"--metrics") { metrics=true; } ;;
|
"--metrics") { metrics=true; } ;;
|
||||||
|
"--coverage") { coverage=true; } ;;
|
||||||
"--libc")
|
"--libc")
|
||||||
shift
|
shift
|
||||||
[[ "$1" =~ ^(musl|gnu)$ ]] ||
|
[[ "$1" =~ ^(musl|gnu)$ ]] ||
|
||||||
@ -417,6 +420,7 @@ cmd_tests() {
|
|||||||
--env BUILD_TARGET="$target" \
|
--env BUILD_TARGET="$target" \
|
||||||
--env RUSTFLAGS="$rustflags" \
|
--env RUSTFLAGS="$rustflags" \
|
||||||
--env TARGET_CC="$target_cc" \
|
--env TARGET_CC="$target_cc" \
|
||||||
|
--env LLVM_PROFILE_FILE="$LLVM_PROFILE_FILE" \
|
||||||
"$CTR_IMAGE" \
|
"$CTR_IMAGE" \
|
||||||
./scripts/run_unit_tests.sh "$@" || fix_dir_perms $? || exit $?
|
./scripts/run_unit_tests.sh "$@" || fix_dir_perms $? || exit $?
|
||||||
fi
|
fi
|
||||||
@ -440,6 +444,7 @@ cmd_tests() {
|
|||||||
--env RUSTFLAGS="$rustflags" \
|
--env RUSTFLAGS="$rustflags" \
|
||||||
--env TARGET_CC="$target_cc" \
|
--env TARGET_CC="$target_cc" \
|
||||||
--env AUTH_DOWNLOAD_TOKEN="$AUTH_DOWNLOAD_TOKEN" \
|
--env AUTH_DOWNLOAD_TOKEN="$AUTH_DOWNLOAD_TOKEN" \
|
||||||
|
--env LLVM_PROFILE_FILE="$LLVM_PROFILE_FILE" \
|
||||||
"$CTR_IMAGE" \
|
"$CTR_IMAGE" \
|
||||||
dbus-run-session ./scripts/run_integration_tests_"$(uname -m)".sh "$@" || fix_dir_perms $? || exit $?
|
dbus-run-session ./scripts/run_integration_tests_"$(uname -m)".sh "$@" || fix_dir_perms $? || exit $?
|
||||||
fi
|
fi
|
||||||
@ -532,6 +537,7 @@ cmd_tests() {
|
|||||||
--env RUSTFLAGS="$rustflags" \
|
--env RUSTFLAGS="$rustflags" \
|
||||||
--env TARGET_CC="$target_cc" \
|
--env TARGET_CC="$target_cc" \
|
||||||
--env AUTH_DOWNLOAD_TOKEN="$AUTH_DOWNLOAD_TOKEN" \
|
--env AUTH_DOWNLOAD_TOKEN="$AUTH_DOWNLOAD_TOKEN" \
|
||||||
|
--env LLVM_PROFILE_FILE="$LLVM_PROFILE_FILE" \
|
||||||
"$CTR_IMAGE" \
|
"$CTR_IMAGE" \
|
||||||
./scripts/run_integration_tests_live_migration.sh "$@" || fix_dir_perms $? || exit $?
|
./scripts/run_integration_tests_live_migration.sh "$@" || fix_dir_perms $? || exit $?
|
||||||
fi
|
fi
|
||||||
@ -583,6 +589,29 @@ cmd_tests() {
|
|||||||
./scripts/run_metrics.sh "$@" || fix_dir_perms $? || exit $?
|
./scripts/run_metrics.sh "$@" || fix_dir_perms $? || exit $?
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$coverage" = true ]; then
|
||||||
|
say "Generating code coverage information for $target..."
|
||||||
|
$DOCKER_RUNTIME run \
|
||||||
|
--workdir "$CTR_CLH_ROOT_DIR" \
|
||||||
|
--rm \
|
||||||
|
--privileged \
|
||||||
|
--security-opt seccomp=unconfined \
|
||||||
|
--ipc=host \
|
||||||
|
--net="$CTR_CLH_NET" \
|
||||||
|
--mount type=tmpfs,destination=/tmp \
|
||||||
|
--volume /dev:/dev \
|
||||||
|
--volume "$CLH_ROOT_DIR:$CTR_CLH_ROOT_DIR" \
|
||||||
|
${exported_volumes:+"$exported_volumes"} \
|
||||||
|
--volume "$CLH_INTEGRATION_WORKLOADS:$CTR_CLH_INTEGRATION_WORKLOADS" \
|
||||||
|
--env USER="root" \
|
||||||
|
--env BUILD_TARGET="$target" \
|
||||||
|
--env RUSTFLAGS="$rustflags" \
|
||||||
|
--env TARGET_CC="$target_cc" \
|
||||||
|
--env AUTH_DOWNLOAD_TOKEN="$AUTH_DOWNLOAD_TOKEN" \
|
||||||
|
"$CTR_IMAGE" \
|
||||||
|
dbus-run-session ./scripts/run_coverage.sh "$@" || fix_dir_perms $? || exit $?
|
||||||
|
fi
|
||||||
|
|
||||||
fix_dir_perms $?
|
fix_dir_perms $?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
63
scripts/run_coverage.sh
Executable file
63
scripts/run_coverage.sh
Executable file
@ -0,0 +1,63 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -x
|
||||||
|
|
||||||
|
# shellcheck source=/dev/null
|
||||||
|
source "$HOME"/.cargo/env
|
||||||
|
|
||||||
|
PROJECT_DIR="/cloud-hypervisor"
|
||||||
|
TARGET_DIR="$PROJECT_DIR/target"
|
||||||
|
|
||||||
|
pushd $PROJECT_DIR || exit
|
||||||
|
|
||||||
|
export BUILD_TARGET=${BUILD_TARGET-$(uname -m)-unknown-linux-gnu}
|
||||||
|
|
||||||
|
# GLIBC > 2.31
|
||||||
|
GRCOV_RELEASE_URL="https://github.com/mozilla/grcov/releases/download/v0.8.19/grcov-$BUILD_TARGET.tar.bz2"
|
||||||
|
wget --quiet "$GRCOV_RELEASE_URL" || exit 1
|
||||||
|
tar -xjf "grcov-$BUILD_TARGET.tar.bz2"
|
||||||
|
|
||||||
|
rustup component add llvm-tools-preview
|
||||||
|
|
||||||
|
export_lcov() {
|
||||||
|
rm "coverage.info"
|
||||||
|
|
||||||
|
./grcov "$(find . -name 'ch-*.profraw' -print)" -s . \
|
||||||
|
--ignore "tests/*" \
|
||||||
|
--ignore "test_infra/*" \
|
||||||
|
--ignore "performance-metrics/*" \
|
||||||
|
--binary-path "$TARGET_DIR/$BUILD_TARGET/release/" \
|
||||||
|
--branch --ignore-not-existing -t lcov \
|
||||||
|
-o "coverage.info"
|
||||||
|
|
||||||
|
find . -type f -name 'ch-*.profraw' -exec rm {} \;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Generate HTML report
|
||||||
|
export_html() {
|
||||||
|
OUTPUT_DIR="$TARGET_DIR/coverage"
|
||||||
|
rm -rf $OUTPUT_DIR
|
||||||
|
./grcov "$(find . -name 'ch-*.profraw' -print)" -s . \
|
||||||
|
--ignore "tests/*" \
|
||||||
|
--ignore "test_infra/*" \
|
||||||
|
--ignore "performance-metrics/*" \
|
||||||
|
--binary-path "$TARGET_DIR/$BUILD_TARGET/release/" \
|
||||||
|
--branch --ignore-not-existing -t html \
|
||||||
|
-o $OUTPUT_DIR
|
||||||
|
find . -type f -name 'ch-*.profraw' -exec rm {} \;
|
||||||
|
}
|
||||||
|
|
||||||
|
# $1 is now a command name. Check if it is a valid command and, if so,
|
||||||
|
# run it.
|
||||||
|
#
|
||||||
|
declare -f "export_$1" >/dev/null
|
||||||
|
code=$?
|
||||||
|
[[ $code == 0 ]] || echo "Unknown command: $1. Only support \"lcov\" and \"html\". Change to default command: html"
|
||||||
|
type=${1-html}
|
||||||
|
|
||||||
|
func=export_$type
|
||||||
|
shift
|
||||||
|
|
||||||
|
$func "$@"
|
||||||
|
|
||||||
|
popd || exit 1
|
Loading…
Reference in New Issue
Block a user