integration test: print stdout and stderr on subcommand crash

This commit is contained in:
Alex 2023-11-15 12:56:52 +01:00
parent b3e729f4b8
commit 46007bf01d
Signed by: lx
GPG key ID: 0E496D15096376BE
2 changed files with 12 additions and 34 deletions

View file

@ -14,42 +14,20 @@ impl CommandExt for process::Command {
} }
fn expect_success_status(&mut self, msg: &str) -> process::ExitStatus { fn expect_success_status(&mut self, msg: &str) -> process::ExitStatus {
let status = self.status().expect(msg); self.expect_success_output(msg).status
status.expect_success(msg);
status
} }
fn expect_success_output(&mut self, msg: &str) -> process::Output { fn expect_success_output(&mut self, msg: &str) -> process::Output {
let output = self.output().expect(msg); let output = self.output().expect(msg);
output.expect_success(msg); if !output.status.success() {
panic!(
"{}: command {:?} exited with error {:?}\nSTDOUT: {}\nSTDERR: {}",
msg,
self,
output.status.code(),
String::from_utf8_lossy(&output.stdout),
String::from_utf8_lossy(&output.stderr)
);
}
output output
} }
} }
pub trait OutputExt {
fn expect_success(&self, msg: &str);
}
impl OutputExt for process::Output {
fn expect_success(&self, msg: &str) {
self.status.expect_success(msg)
}
}
pub trait ExitStatusExt {
fn expect_success(&self, msg: &str);
}
impl ExitStatusExt for process::ExitStatus {
fn expect_success(&self, msg: &str) {
if !self.success() {
match self.code() {
Some(code) => panic!(
"Command exited with code {code}: {msg}",
code = code,
msg = msg
),
None => panic!("Command exited with signal: {msg}", msg = msg),
}
}
}
}

View file

@ -96,7 +96,7 @@ api_bind_addr = "127.0.0.1:{admin_port}"
.arg("server") .arg("server")
.stdout(stdout) .stdout(stdout)
.stderr(stderr) .stderr(stderr)
.env("RUST_LOG", "garage=info,garage_api=trace") .env("RUST_LOG", "garage=debug,garage_api=trace")
.spawn() .spawn()
.expect("Could not start garage"); .expect("Could not start garage");