| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #!/usr/bin/env bash
- #
- # Run tests and collect code coverage
- #
- # == Usage:
- #
- # Run all:
- # $ ./script/coverage.sh
- #
- # Run for specific packages
- # $ ./script/coverage.sh -p solana-account-decoder
- # $ ./script/coverage.sh -p solana-account-decoder -p solana-accounts-db [-p ...]
- #
- # Custom folder name. (default: $(git rev-parse --short=9 HEAD))
- # $ COMMIT_HASH=xxx ./script/coverage.sh -p solana-account-decoder
- #
- set -e
- here=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
- # Check for grcov commands
- if ! command -v grcov >/dev/null 2>&1; then
- echo "Error: grcov not found. Try |cargo install grcov|"
- exit 1
- fi
- # Use nightly as we have some nightly-only tests (frozen-abi)
- # shellcheck source=ci/rust-version.sh
- source "$here/../ci/rust-version.sh" nightly
- # get commit hash. it will be used to name output folder
- if [ -z "$COMMIT_HASH" ]; then
- COMMIT_HASH=$(git rev-parse --short=9 HEAD)
- fi
- # Clean up
- rm -rf "$here/../target/cov/$COMMIT_HASH"
- # https://doc.rust-lang.org/rustc/instrument-coverage.html
- export RUSTFLAGS="-C instrument-coverage $RUSTFLAGS"
- export LLVM_PROFILE_FILE="$here/../target/cov/${COMMIT_HASH}/profraw/default-%p-%m.profraw"
- if [[ -z $1 ]]; then
- PACKAGES=(--lib --all --exclude solana-local-cluster)
- else
- PACKAGES=("$@")
- fi
- TEST_ARGS=(
- --skip shred::merkle::test::test_make_shreds_from_data::
- --skip shred::merkle::test::test_make_shreds_from_data_rand::
- --skip shred::merkle::test::test_recover_merkle_shreds::
- )
- # Most verbose log level (trace) is enabled for all solana code to make log!
- # macro code green always. Also, forcibly discard the vast amount of log by
- # redirecting the stderr altogether on CI, where all tests are run unlike
- # developing.
- RUST_LOG="solana=trace,agave=trace,$RUST_LOG" INTERCEPT_OUTPUT=/dev/null "$here/../ci/intercept.sh" \
- cargo +"$rust_nightly" test --features frozen-abi --target-dir "$here/../target/cov" "${PACKAGES[@]}" -- "${TEST_ARGS[@]}"
- # Generate test reports
- echo "--- grcov"
- grcov_common_args=(
- "$here/../target/cov/${COMMIT_HASH}"
- --source-dir "$here/.."
- --binary-path "$here/../target/cov/debug"
- --llvm
- --ignore \*.cargo\*
- --ignore \*build.rs
- --ignore bench-tps\*
- --ignore upload-perf\*
- --ignore bench-streamer\*
- --ignore local-cluster\*
- )
- grcov "${grcov_common_args[@]}" -t html -o "$here/../target/cov/${COMMIT_HASH}/coverage/html"
- echo "html: $here/../target/cov/${COMMIT_HASH}/coverage/html"
- grcov "${grcov_common_args[@]}" -t lcov -o "$here/../target/cov/${COMMIT_HASH}/coverage/lcov.info"
- echo "lcov: $here/../target/cov/${COMMIT_HASH}/coverage/lcov.info"
- ln -sfT "$here/../target/cov/${COMMIT_HASH}" "$here/../target/cov/LATEST"
|