Skip to content

Commit 375c4d6

Browse files
feat: Measure code coverage differently (#79)
* Measure code coverage differently * Add missing env-filter feature * ci test run in release
1 parent 1ff81a4 commit 375c4d6

File tree

10 files changed

+94
-43
lines changed

10 files changed

+94
-43
lines changed

.config/nextest.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
slow-timeout = { period = "5s", terminate-after = 3 }
33

44
[profile.ci]
5-
slow-timeout = { period = "5s", terminate-after = 6 }
5+
slow-timeout = { period = "10s", terminate-after = 12 }

Cargo.lock

+1-24
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Justfile

+8-3
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ ci-test:
2222
#!/bin/bash -eux
2323
source <(cargo llvm-cov show-env --export-prefix)
2424
cargo llvm-cov clean --workspace
25-
cargo nextest run --all-features --profile ci
26-
ONE_BYTE_READ=1 cargo nextest run --all-features --release --profile ci
27-
cargo llvm-cov report --lcov --output-path coverage.lcov
25+
26+
export RUST_LOG=trace
27+
cargo nextest run --release --all-features --profile ci
28+
export ONE_BYTE_READ=1
29+
cargo nextest run --release --all-features --profile ci
30+
31+
cargo llvm-cov report --release --ignore-filename-regex 'corpus/mod\.rs$' --lcov --output-path coverage.lcov
32+
cargo llvm-cov report --release --ignore-filename-regex 'corpus/mod\.rs$' --html

rc-zip-sync/Cargo.toml

-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ chrono = "0.4.33"
3939
clap = { version = "4.4.18", features = ["derive"] }
4040
humansize = "2.1.3"
4141
indicatif = "0.17.7"
42-
test-log = { version = "0.2.14", default-features = false, features = ["tracing-subscriber", "trace"] }
4342
tracing-subscriber = { version = "0.3.18", features = ["env-filter"] }
4443
rc-zip = { version = "5.0.1", path = "../rc-zip", features = ["corpus"] }
4544
cfg-if = "1.0.0"

rc-zip-sync/tests/integration_tests.rs

+12-4
Original file line numberDiff line numberDiff line change
@@ -30,23 +30,29 @@ fn check_case<F: HasCursor>(test: &Case, archive: Result<ArchiveHandle<'_, F>, E
3030
}
3131
}
3232

33-
#[test_log::test]
33+
#[test]
3434
fn read_from_slice() {
35+
corpus::install_test_subscriber();
36+
3537
let bytes = std::fs::read(zips_dir().join("test.zip")).unwrap();
3638
let slice = &bytes[..];
3739
let archive = slice.read_zip().unwrap();
3840
assert_eq!(archive.entries().count(), 2);
3941
}
4042

41-
#[test_log::test]
43+
#[test]
4244
fn read_from_file() {
45+
corpus::install_test_subscriber();
46+
4347
let f = File::open(zips_dir().join("test.zip")).unwrap();
4448
let archive = f.read_zip().unwrap();
4549
assert_eq!(archive.entries().count(), 2);
4650
}
4751

48-
#[test_log::test]
52+
#[test]
4953
fn real_world_files() {
54+
corpus::install_test_subscriber();
55+
5056
for case in corpus::test_cases() {
5157
tracing::info!("============ testing {}", case.name);
5258

@@ -65,8 +71,10 @@ fn real_world_files() {
6571
}
6672
}
6773

68-
#[test_log::test]
74+
#[test]
6975
fn streaming() {
76+
corpus::install_test_subscriber();
77+
7078
for case in corpus::streaming_test_cases() {
7179
let guarded_path = case.absolute_path();
7280
let file = File::open(&guarded_path.path).unwrap();

rc-zip-tokio/Cargo.toml

-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ bzip2 = ["rc-zip/bzip2"]
3434
zstd = ["rc-zip/zstd"]
3535

3636
[dev-dependencies]
37-
test-log = { version = "0.2.14", default-features = false, features = ["tracing-subscriber", "trace"] }
3837
tracing-subscriber = { version = "0.3.18", features = ["env-filter"] }
3938
rc-zip = { version = "5.0.1", path = "../rc-zip", features = ["corpus"] }
4039
tokio = { version = "1.35.1", features = ["rt", "macros"] }

rc-zip-tokio/tests/integration_tests.rs

+12-4
Original file line numberDiff line numberDiff line change
@@ -27,23 +27,29 @@ async fn check_case<F: HasCursor>(test: &Case, archive: Result<ArchiveHandle<'_,
2727
}
2828
}
2929

30-
#[test_log::test(tokio::test)]
30+
#[tokio::test]
3131
async fn read_from_slice() {
32+
corpus::install_test_subscriber();
33+
3234
let bytes = std::fs::read(zips_dir().join("test.zip")).unwrap();
3335
let slice = &bytes[..];
3436
let archive = slice.read_zip().await.unwrap();
3537
assert_eq!(archive.entries().count(), 2);
3638
}
3739

38-
#[test_log::test(tokio::test)]
40+
#[tokio::test]
3941
async fn read_from_file() {
42+
corpus::install_test_subscriber();
43+
4044
let f = Arc::new(RandomAccessFile::open(zips_dir().join("test.zip")).unwrap());
4145
let archive = f.read_zip().await.unwrap();
4246
assert_eq!(archive.entries().count(), 2);
4347
}
4448

45-
#[test_log::test(tokio::test)]
49+
#[tokio::test]
4650
async fn real_world_files() {
51+
corpus::install_test_subscriber();
52+
4753
for case in corpus::test_cases() {
4854
tracing::info!("============ testing {}", case.name);
4955

@@ -62,8 +68,10 @@ async fn real_world_files() {
6268
}
6369
}
6470

65-
#[test_log::test(tokio::test)]
71+
#[tokio::test]
6672
async fn streaming() {
73+
corpus::install_test_subscriber();
74+
6775
for case in corpus::streaming_test_cases() {
6876
let guarded_path = case.absolute_path();
6977
let file = tokio::fs::File::open(&guarded_path.path).await.unwrap();

rc-zip/Cargo.toml

+3-4
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,13 @@ lzma-rs = { version = "0.3.0", optional = true, features = ["stream"] }
3434
zstd = { version = "0.13.0", optional = true }
3535
ownable = "0.6.2"
3636
temp-dir = { version = "0.1.12", optional = true }
37+
tracing-subscriber = { version = "0.3.18", optional = true, features = ["env-filter"] }
3738

3839
[features]
39-
corpus = ["dep:temp-dir", "dep:bzip2"]
40+
corpus = ["dep:temp-dir", "dep:bzip2", "dep:tracing-subscriber"]
4041
deflate = ["dep:miniz_oxide"]
4142
deflate64 = ["dep:deflate64"]
4243
bzip2 = ["dep:bzip2"]
4344
lzma = ["dep:lzma-rs"]
4445
zstd = ["dep:zstd"]
45-
46-
[dev-dependencies]
47-
test-log = { version = "0.2.14", default-features = false, features = ["tracing-subscriber", "trace"] }
46+
tracing-subscriber = ["dep:tracing-subscriber"]

rc-zip/src/corpus/mod.rs

+54
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use std::{fs::File, path::PathBuf};
66

77
use chrono::{DateTime, FixedOffset, TimeZone, Timelike, Utc};
88
use temp_dir::TempDir;
9+
use tracing::span;
910

1011
use crate::{
1112
encoding::Encoding,
@@ -348,3 +349,56 @@ pub fn check_file_against(file: &CaseFile, entry: &Entry, actual_bytes: &[u8]) {
348349
}
349350
}
350351
}
352+
353+
// This test subscriber is used to suppress trace-level logs (yet executes
354+
// the code, for coverage reasons)
355+
pub fn install_test_subscriber() {
356+
let env_filter = tracing_subscriber::EnvFilter::builder().from_env_lossy();
357+
let sub = tracing_subscriber::FmtSubscriber::builder()
358+
.with_env_filter(env_filter)
359+
.with_test_writer()
360+
.finish();
361+
let sub = DebugOnlySubscriber { inner: sub };
362+
tracing::subscriber::set_global_default(sub).unwrap()
363+
}
364+
365+
struct DebugOnlySubscriber<S> {
366+
inner: S,
367+
}
368+
369+
impl<S> tracing::Subscriber for DebugOnlySubscriber<S>
370+
where
371+
S: tracing::Subscriber,
372+
{
373+
fn enabled(&self, _metadata: &tracing::Metadata<'_>) -> bool {
374+
true
375+
}
376+
377+
fn new_span(&self, span: &span::Attributes<'_>) -> span::Id {
378+
self.inner.new_span(span)
379+
}
380+
381+
fn record(&self, span: &span::Id, values: &span::Record<'_>) {
382+
self.inner.record(span, values)
383+
}
384+
385+
fn record_follows_from(&self, span: &span::Id, follows: &span::Id) {
386+
self.inner.record_follows_from(span, follows)
387+
}
388+
389+
fn event(&self, event: &tracing::Event<'_>) {
390+
if *event.metadata().level() == tracing::Level::TRACE {
391+
return;
392+
}
393+
394+
self.inner.event(event)
395+
}
396+
397+
fn enter(&self, span: &span::Id) {
398+
self.inner.enter(span)
399+
}
400+
401+
fn exit(&self, span: &span::Id) {
402+
self.inner.exit(span)
403+
}
404+
}

rc-zip/tests/integration_tests.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ use rc_zip::{
55
fsm::{ArchiveFsm, FsmResult},
66
};
77

8-
#[test_log::test]
8+
#[test]
99
fn state_machine() {
10+
corpus::install_test_subscriber();
11+
1012
let cases = corpus::test_cases();
1113
let case = cases.iter().find(|x| x.name == "zip64.zip").unwrap();
1214
let bytes = case.bytes();

0 commit comments

Comments
 (0)