aboutsummaryrefslogtreecommitdiff
path: root/src/garage/tests/common/ext/process.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/garage/tests/common/ext/process.rs')
-rw-r--r--src/garage/tests/common/ext/process.rs55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/garage/tests/common/ext/process.rs b/src/garage/tests/common/ext/process.rs
new file mode 100644
index 00000000..ba533b6c
--- /dev/null
+++ b/src/garage/tests/common/ext/process.rs
@@ -0,0 +1,55 @@
+use std::process;
+
+pub trait CommandExt {
+ fn quiet(&mut self) -> &mut Self;
+
+ fn expect_success_status(&mut self, msg: &str) -> process::ExitStatus;
+ fn expect_success_output(&mut self, msg: &str) -> process::Output;
+}
+
+impl CommandExt for process::Command {
+ fn quiet(&mut self) -> &mut Self {
+ self.stdout(process::Stdio::null())
+ .stderr(process::Stdio::null())
+ }
+
+ fn expect_success_status(&mut self, msg: &str) -> process::ExitStatus {
+ let status = self.status().expect(msg);
+ status.expect_success(msg);
+ status
+ }
+ fn expect_success_output(&mut self, msg: &str) -> process::Output {
+ let output = self.output().expect(msg);
+ output.expect_success(msg);
+ 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),
+ }
+ }
+ }
+}