Skip to content

Commit 5fefe51

Browse files
authored
Merge pull request #32 from codecov/pr32
create test_utils crate to house all fixtures and reusable helpers
2 parents 79dfe5a + 5feb70f commit 5fefe51

16 files changed

+128
-56
lines changed

Cargo.lock

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[workspace]
22

33
resolver = "2"
4-
members = ["bindings", "core"]
4+
members = ["bindings", "core", "test_utils"]
55
default-members = ["core"]
66

77
[profile.release]

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,5 +72,5 @@ $ pytest
7272

7373
Run benchmarks with:
7474
```
75-
$ cargo bench
75+
$ cargo bench --features testing
7676
```

codecov.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
comment:
22
layout: "condensed_header, diff, condensed_files, components, condensed_footer"
33

4+
ignore:
5+
- "test_utils/"
6+
47
coverage:
58
status:
69
project:

core/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ winnow = "0.5.34"
2323
[dev-dependencies]
2424
divan = "0.1.14"
2525
tempfile = "3.9.0"
26+
test_utils = { path = "../test_utils" }
2627

2728
[[bench]]
2829
name = "pyreport"

core/benches/pyreport.rs

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use codecov_rs::{
55
report::test::{TestReport, TestReportBuilder},
66
};
77
use divan::Bencher;
8+
use test_utils::fixtures::{read_fixture, FixtureFormat::Pyreport, FixtureSize::Large};
89
use winnow::Parser as _;
910

1011
// #[global_allocator]
@@ -32,9 +33,12 @@ fn simple_report_json() {
3233
#[divan::bench]
3334
fn complex_report_json(bencher: Bencher) {
3435
// this is a ~11M `report_json`
35-
let report = load_fixture(
36-
"pyreport/large/worker-c71ddfd4cb1753c7a540e5248c2beaa079fc3341-report_json.json",
37-
);
36+
let report = read_fixture(
37+
Pyreport,
38+
Large,
39+
"worker-c71ddfd4cb1753c7a540e5248c2beaa079fc3341-report_json.json",
40+
)
41+
.unwrap();
3842

3943
bencher.bench(|| parse_report_json(&report));
4044
}
@@ -69,14 +73,21 @@ fn simple_chunks() {
6973
#[divan::bench(sample_count = 1)]
7074
fn complex_chunks(bencher: Bencher) {
7175
// this is a ~96M `chunks` file
72-
let chunks =
73-
load_fixture("pyreport/large/worker-c71ddfd4cb1753c7a540e5248c2beaa079fc3341-chunks.txt");
76+
let chunks = read_fixture(
77+
Pyreport,
78+
Large,
79+
"worker-c71ddfd4cb1753c7a540e5248c2beaa079fc3341-chunks.txt",
80+
)
81+
.unwrap();
7482
let chunks = std::str::from_utf8(&chunks).unwrap();
7583

7684
// parsing the chunks depends on having loaded the `report_json`
77-
let report = load_fixture(
78-
"pyreport/large/worker-c71ddfd4cb1753c7a540e5248c2beaa079fc3341-report_json.json",
79-
);
85+
let report = read_fixture(
86+
Pyreport,
87+
Large,
88+
"worker-c71ddfd4cb1753c7a540e5248c2beaa079fc3341-report_json.json",
89+
)
90+
.unwrap();
8091
let report_json::ParsedReportJson { files, sessions } = parse_report_json(&report);
8192

8293
bencher.bench(|| parse_chunks_file(chunks, files.clone(), sessions.clone()));
@@ -95,15 +106,3 @@ fn parse_chunks_file(input: &str, files: HashMap<usize, i64>, sessions: HashMap<
95106
.parse_next(&mut chunks_stream)
96107
.unwrap();
97108
}
98-
99-
#[track_caller]
100-
fn load_fixture(path: &str) -> Vec<u8> {
101-
let path = format!("./fixtures/{path}");
102-
let contents = std::fs::read(path).unwrap();
103-
104-
if contents.starts_with(b"version https://git-lfs.github.com/spec/v1") {
105-
panic!("Fixture has not been pulled from Git LFS");
106-
}
107-
108-
contents
109-
}

core/tests/common/mod.rs

Lines changed: 0 additions & 12 deletions
This file was deleted.

core/tests/test_pyreport_shim.rs

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,4 @@
1-
use std::{
2-
collections::HashMap,
3-
fs::File,
4-
io::Seek,
5-
path::{Path, PathBuf},
6-
};
1+
use std::{collections::HashMap, fs::File, io::Seek, path::PathBuf};
72

83
use codecov_rs::{
94
parsers::pyreport::{
@@ -17,10 +12,11 @@ use codecov_rs::{
1712
use rand::{rngs::StdRng, Rng, SeedableRng};
1813
use serde_json::json;
1914
use tempfile::TempDir;
15+
use test_utils::fixtures::{
16+
open_fixture, read_fixture, FixtureFormat::Pyreport, FixtureSize::Small,
17+
};
2018
use winnow::Parser;
2119

22-
mod common;
23-
2420
type ChunksStream<'a> = chunks::ReportOutputStream<&'a str, SqliteReport, SqliteReportBuilder>;
2521

2622
struct Ctx {
@@ -37,7 +33,7 @@ fn setup() -> Ctx {
3733

3834
#[test]
3935
fn test_parse_report_json() {
40-
let input = common::read_sample_file(Path::new("codecov-rs-reports-json-d2a9ba1.txt"));
36+
let input = read_fixture(Pyreport, Small, "codecov-rs-reports-json-d2a9ba1.txt").unwrap();
4137

4238
let rng_seed = 5;
4339
let mut rng = StdRng::seed_from_u64(rng_seed);
@@ -79,8 +75,7 @@ fn test_parse_report_json() {
7975
let ParsedReportJson {
8076
files: actual_files,
8177
sessions: actual_sessions,
82-
} = report_json::parse_report_json(input.as_bytes(), &mut report_builder)
83-
.expect("Failed to parse");
78+
} = report_json::parse_report_json(&input, &mut report_builder).expect("Failed to parse");
8479
assert_eq!(actual_files, expected_json_files);
8580
assert_eq!(actual_sessions, expected_json_sessions);
8681

@@ -98,7 +93,8 @@ fn test_parse_report_json() {
9893

9994
#[test]
10095
fn test_parse_chunks_file() {
101-
let input = common::read_sample_file(Path::new("codecov-rs-chunks-d2a9ba1.txt"));
96+
let input = read_fixture(Pyreport, Small, "codecov-rs-chunks-d2a9ba1.txt").unwrap();
97+
let input = std::str::from_utf8(&input).unwrap();
10298
let test_ctx = setup();
10399

104100
let mut report_builder = SqliteReportBuilder::new(test_ctx.db_file).unwrap();
@@ -132,7 +128,7 @@ fn test_parse_chunks_file() {
132128
);
133129

134130
let mut buf = ChunksStream {
135-
input: &input,
131+
input,
136132
state: chunks_parse_ctx,
137133
};
138134

@@ -210,10 +206,8 @@ fn test_parse_chunks_file() {
210206
#[test]
211207
fn test_parse_pyreport() {
212208
let report_json_file =
213-
File::open(common::sample_data_path().join("codecov-rs-reports-json-d2a9ba1.txt"))
214-
.expect("Failed to open report json file");
215-
let chunks_file = File::open(common::sample_data_path().join("codecov-rs-chunks-d2a9ba1.txt"))
216-
.expect("Failed to open chunks file");
209+
open_fixture(Pyreport, Small, "codecov-rs-reports-json-d2a9ba1.txt").unwrap();
210+
let chunks_file = open_fixture(Pyreport, Small, "codecov-rs-chunks-d2a9ba1.txt").unwrap();
217211
let test_ctx = setup();
218212

219213
let rng_seed = 5;
@@ -318,11 +312,8 @@ fn test_parse_pyreport() {
318312
#[test]
319313
fn test_sql_to_pyreport_to_sql_totals_match() {
320314
let report_json_input_file =
321-
File::open(common::sample_data_path().join("codecov-rs-reports-json-d2a9ba1.txt"))
322-
.expect("Failed to open report json file");
323-
let chunks_input_file =
324-
File::open(common::sample_data_path().join("codecov-rs-chunks-d2a9ba1.txt"))
325-
.expect("Failed to open chunks file");
315+
open_fixture(Pyreport, Small, "codecov-rs-reports-json-d2a9ba1.txt").unwrap();
316+
let chunks_input_file = open_fixture(Pyreport, Small, "codecov-rs-chunks-d2a9ba1.txt").unwrap();
326317
let test_ctx = setup();
327318

328319
let report = pyreport::parse_pyreport(

test_utils/Cargo.toml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[package]
2+
name = "test_utils"
3+
version = "0.1.0"
4+
publish = false
5+
edition = "2021"
6+
7+
[lib]
8+
name = "test_utils"
9+
10+
[dependencies]
File renamed without changes.

0 commit comments

Comments
 (0)