From 8c5ae87ca23ddcfca25786d9d3e8d325eed5de41 Mon Sep 17 00:00:00 2001 From: David Peter Date: Sun, 20 Feb 2022 17:31:54 +0100 Subject: [PATCH] Better error handling in run_intermediate_command --- src/benchmark/scheduler.rs | 12 +++++------- tests/integration_tests.rs | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/src/benchmark/scheduler.rs b/src/benchmark/scheduler.rs index 6db86ce..d8cccd2 100644 --- a/src/benchmark/scheduler.rs +++ b/src/benchmark/scheduler.rs @@ -24,7 +24,7 @@ use crate::util::exit_code::extract_exit_code; use crate::util::min_max::{max, min}; use crate::util::units::Second; -use anyhow::{bail, Result}; +use anyhow::{anyhow, bail, Result}; /////////////// TODO: refactor the following part @@ -241,17 +241,15 @@ impl<'a> Scheduler<'a> { command: &Command<'_>, error_output: &'static str, ) -> Result { - let res = time_shell_command( + time_shell_command( &self.options.shell, command, self.options.command_output_policy, CmdFailureAction::RaiseError, None, - ); - if res.is_err() { - bail!(error_output); - } - return res.map(|r| r.0); + ) + .map(|r| r.0) + .map_err(|_| anyhow!(error_output)) } /// Run the command specified by `--setup`. diff --git a/tests/integration_tests.rs b/tests/integration_tests.rs index de16998..60a9109 100644 --- a/tests/integration_tests.rs +++ b/tests/integration_tests.rs @@ -83,6 +83,42 @@ fn fails_for_unknown_command() { )); } +#[test] +fn fails_for_unknown_setup_command() { + hyperfine() + .arg("--setup=some-nonexisting-program-b5d9574198b7e4b12a71fa4747c0a577") + .arg("echo test") + .assert() + .failure() + .stderr(predicate::str::contains( + "The setup command terminated with a non-zero exit code.", + )); +} + +#[test] +fn fails_for_unknown_cleanup_command() { + hyperfine() + .arg("--cleanup=some-nonexisting-program-b5d9574198b7e4b12a71fa4747c0a577") + .arg("echo test") + .assert() + .failure() + .stderr(predicate::str::contains( + "The cleanup command terminated with a non-zero exit code.", + )); +} + +#[test] +fn fails_for_unknown_prepare_command() { + hyperfine() + .arg("--prepare=some-nonexisting-program-b5d9574198b7e4b12a71fa4747c0a577") + .arg("echo test") + .assert() + .failure() + .stderr(predicate::str::contains( + "The preparation command terminated with a non-zero exit code.", + )); +} + #[cfg(unix)] #[test] fn can_run_failing_commands_with_ignore_failure_option() {