Use grcov for better code coverage testing

This commit is contained in:
Dominik Nakamura 2021-03-21 14:32:19 +09:00
parent 8325bcccf7
commit e1cf8f69e6
No known key found for this signature in database
GPG key ID: E4C6A749B2491910
4 changed files with 14 additions and 34 deletions

2
.gitignore vendored
View file

@ -1,7 +1,7 @@
/.vagrant
/target
*.profraw
.env
Cargo.lock
lcov.info
tarpaulin-report.html

View file

@ -1,21 +1,22 @@
export OBS_HOST := if os() == "macos" { "host.docker.internal" } else { "127.0.0.1" }
# list available recipes
default:
@just --list
@just --list --unsorted
# run integration tests with coverage (using Docker)
# run integration tests with coverage
coverage:
docker run --rm -it --security-opt seccomp=unconfined --network host -v $PWD:/volume -v $HOME/.cargo/registry:/usr/local/cargo/registry xd009642/tarpaulin cargo tarpaulin --out Html --out Lcov --all-features
cargo install grcov
rustup component add --toolchain nightly llvm-tools-preview
# run integration tests with coverage (using Vagrant)
coverage-vagrant:
vagrant up
vagrant ssh -c 'cd /vagrant; false; while [ "$?" -eq 1 ]; do cargo tarpaulin --all-features --no-run; done'
vagrant ssh -c 'cd /vagrant && cargo tarpaulin --out Html --out Lcov --all-features'
rm -f *.profraw ./target/debug/coverage lcov.info
RUSTFLAGS="-Zinstrument-coverage" LLVM_PROFILE_FILE="coverage-%p-%m.profraw" cargo +nightly test --all-features
rustup run nightly grcov . -s . --binary-path ./target/debug/ -t html --branch --ignore-not-existing -o ./target/debug/coverage
rustup run nightly grcov . -s . --binary-path ./target/debug/ -t lcov --branch --ignore-not-existing --ignore "/*" -o lcov.info
rm -f *.profraw
# upload coverage to https://codecov.io
upload-coverage:
@# {{env_var("CODECOV_TOKEN")}}
just coverage-vagrant
bash -c "bash <(curl -s https://codecov.io/bash)"
just coverage
bash -c "bash <(curl -s https://codecov.io/bash) -f lcov.info"

17
Vagrantfile vendored
View file

@ -1,17 +0,0 @@
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/focal64"
config.vm.network "private_network", ip: "192.168.10.20"
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get dist-upgrade -y
apt-get install -y build-essential libssl-dev pkg-config
SHELL
config.vm.provision "shell", privileged: false, inline: <<-SHELL
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source $HOME/.cargo/env
cargo install cargo-tarpaulin --version 0.18.0-alpha1
SHELL
end

View file

@ -48,10 +48,6 @@ static INIT: Once = Once::new();
pub async fn new_client() -> Result<Client> {
INIT.call_once(|| {
if matches!(env::var("USER").as_deref(), Ok("vagrant")) {
env::set_var("OBS_HOST", "192.168.10.1");
}
dotenv::dotenv().ok();
pretty_env_logger::init();
});