Skip to content

Commit 69f5ad4

Browse files
authored
feat: add tracing span and better error message for test cases (#10)
* feat: add tracing span and better error message for test cases Signed-off-by: Alex Chi Z <[email protected]> * testcase span Signed-off-by: Alex Chi Z <[email protected]> --------- Signed-off-by: Alex Chi Z <[email protected]>
1 parent 992383c commit 69f5ad4

File tree

2 files changed

+45
-27
lines changed

2 files changed

+45
-27
lines changed

Cargo.toml

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "sqlplannertest"
3-
version = "0.4.0"
3+
version = "0.4.1"
44
edition = "2021"
55
description = "A yaml-based SQL planner test framework."
66
license = "MIT OR Apache-2.0"
@@ -22,6 +22,7 @@ serde = { version = "1.0", features = ["derive"] }
2222
serde_yaml = "0.9"
2323
similar = "2"
2424
tokio = { version = "1", features = ["rt", "fs"] }
25+
tracing = "0.1"
2526

2627
[workspace]
2728
members = ["naivedb"]

src/apply.rs

+43-26
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use std::time::{Duration, Instant};
55
use anyhow::{anyhow, Context, Error, Result};
66
use console::style;
77
use futures_util::{stream, StreamExt, TryFutureExt};
8+
use tracing::{info_span, Instrument};
89

910
use crate::{
1011
discover_tests_with_selections, parse_test_cases, ParsedTestCase, PlannerTestRunner, TestCase,
@@ -59,37 +60,53 @@ where
5960
let test_stream = stream::iter(tests).map(|(path, testname)| {
6061
let runner_fn = &runner_fn;
6162
let testname_x = testname.clone();
63+
let testname_y = testname.clone();
6264
async {
6365
let mut runner = runner_fn().await?;
6466
let start = Instant::now();
65-
tokio::spawn(async move {
66-
let testcases = tokio::fs::read(&path).await?;
67-
let testcases: Vec<TestCase> = serde_yaml::from_slice(&testcases)?;
68-
let testcases = parse_test_cases(
69-
{
70-
let mut path = path.clone();
71-
path.pop();
72-
path
73-
},
74-
testcases,
75-
)?;
76-
let mut generated_result = String::new();
77-
for testcase in testcases {
78-
let runner_result = runner.run(&testcase).await;
79-
if !testcase.no_capture {
80-
generate_result(&testcase, &runner_result, &mut generated_result)?;
67+
tokio::spawn(
68+
async move {
69+
if options.serial {
70+
println!("{} {}", style("[RUN]").yellow().bold(), &testname_y);
8171
}
82-
}
83-
let path = {
84-
let mut path = path;
85-
path.set_extension(RESULT_SUFFIX);
86-
path
87-
};
88-
tokio::fs::write(&path, generated_result).await?;
72+
let testcases = tokio::fs::read(&path).await?;
73+
let testcases: Vec<TestCase> = serde_yaml::from_slice(&testcases)?;
74+
let testcases = parse_test_cases(
75+
{
76+
let mut path = path.clone();
77+
path.pop();
78+
path
79+
},
80+
testcases,
81+
)?;
82+
let mut generated_result = String::new();
83+
for (idx, testcase) in testcases.into_iter().enumerate() {
84+
let runner_result = runner
85+
.run(&testcase)
86+
.instrument(if let Some(ref id) = testcase.id {
87+
info_span!("testcase", id = id)
88+
} else {
89+
info_span!("testcase", idx = idx)
90+
})
91+
.await;
92+
if !testcase.no_capture {
93+
generate_result(&testcase, &runner_result, &mut generated_result)?;
94+
}
95+
}
96+
let path = {
97+
let mut path = path;
98+
path.set_extension(RESULT_SUFFIX);
99+
path
100+
};
101+
tokio::fs::write(&path, generated_result).await?;
89102

90-
Ok::<_, Error>(())
91-
})
92-
.await??;
103+
Ok::<_, Error>(())
104+
}
105+
.instrument(info_span!("file", testname = testname.as_str())),
106+
)
107+
.await
108+
.with_context(|| format!("when joining tokio task for testname={testname}"))?
109+
.with_context(|| format!("when processing testname={testname}"))?;
93110
let time = start.elapsed();
94111
Ok::<_, Error>(TestResult { testname, time })
95112
}

0 commit comments

Comments
 (0)