summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Gallant <jamslam@gmail.com>2020-02-19 07:28:08 -0500
committerAndrew Gallant <jamslam@gmail.com>2020-02-20 16:07:51 -0500
commitfab5c812f31627ea5d57d5710cd3ccbd73244a2b (patch)
tree42049a28f3368e68a8ba4f885530a6fd82ac3b61
parentc824d095a7ed2f028520f3a0e7df4ed536cf2bc1 (diff)
tests: add debugging output
The transient failures appear to be persisting and they are quite difficult to debug. So include a full directory listing in the output of every test failure.
-rw-r--r--Cargo.lock1
-rw-r--r--Cargo.toml1
-rw-r--r--tests/util.rs30
3 files changed, 29 insertions, 3 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 3c6dacb9..1367b859 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -406,6 +406,7 @@ dependencies = [
"serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)",
"termcolor 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
diff --git a/Cargo.toml b/Cargo.toml
index 02e9724a..0fefcfab 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -75,6 +75,7 @@ features = ["suggestions"]
[dev-dependencies]
serde = "1.0.77"
serde_derive = "1.0.77"
+walkdir = "2"
[features]
simd-accel = ["grep/simd-accel"]
diff --git a/tests/util.rs b/tests/util.rs
index 9256ca33..75fe92c1 100644
--- a/tests/util.rs
+++ b/tests/util.rs
@@ -337,11 +337,13 @@ impl TestCommand {
"\n\n===== {:?} =====\n\
command succeeded but expected failure!\
\n\ncwd: {}\
+ \n\ndir list: {:?}\
\n\nstatus: {}\
\n\nstdout: {}\n\nstderr: {}\
\n\n=====\n",
self.cmd,
self.dir.dir.display(),
+ dir_list(&self.dir.dir),
o.status,
String::from_utf8_lossy(&o.stdout),
String::from_utf8_lossy(&o.stderr)
@@ -354,13 +356,20 @@ impl TestCommand {
pub fn assert_exit_code(&mut self, expected_code: i32) {
let code = self.cmd.output().unwrap().status.code().unwrap();
assert_eq!(
- expected_code, code,
+ expected_code,
+ code,
"\n\n===== {:?} =====\n\
expected exit code did not match\
+ \n\ncwd: {}\
+ \n\ndir list: {:?}\
\n\nexpected: {}\
\n\nfound: {}\
\n\n=====\n",
- self.cmd, expected_code, code
+ self.cmd,
+ self.dir.dir.display(),
+ dir_list(&self.dir.dir),
+ expected_code,
+ code
);
}
@@ -372,11 +381,13 @@ impl TestCommand {
"\n\n===== {:?} =====\n\
command succeeded but expected failure!\
\n\ncwd: {}\
+ \n\ndir list: {:?}\
\n\nstatus: {}\
\n\nstdout: {}\n\nstderr: {}\
\n\n=====\n",
self.cmd,
self.dir.dir.display(),
+ dir_list(&self.dir.dir),
o.status,
String::from_utf8_lossy(&o.stdout),
String::from_utf8_lossy(&o.stderr)
@@ -397,7 +408,8 @@ impl TestCommand {
command failed but expected success!\
{}\
\n\ncommand: {:?}\
- \ncwd: {}\
+ \n\ncwd: {}\
+ \n\ndir list: {:?}\
\n\nstatus: {}\
\n\nstdout: {}\
\n\nstderr: {}\
@@ -405,6 +417,7 @@ impl TestCommand {
suggest,
self.cmd,
self.dir.dir.display(),
+ dir_list(&self.dir.dir),
o.status,
String::from_utf8_lossy(&o.stdout),
String::from_utf8_lossy(&o.stderr)
@@ -434,6 +447,17 @@ fn repeat<F: FnMut() -> io::Result<()>>(mut f: F) -> io::Result<()> {
Err(last_err.unwrap())
}
+/// Return a recursive listing of all files and directories in the given
+/// directory. This is useful for debugging transient and odd failures in
+/// integration tests.
+fn dir_list<P: AsRef<Path>>(dir: P) -> Vec<String> {
+ walkdir::WalkDir::new(dir)
+ .follow_links(true)
+ .into_iter()
+ .map(|result| result.unwrap().path().to_string_lossy().into_owned())
+ .collect()
+}
+
/// When running tests with cross, we need to be a bit smarter about how we
/// run our `rg` binary. We can't just run it directly since it might be
/// compiled for a totally different target. Instead, it's likely that `cross`