diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2023-01-04 10:41:49 +0100 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2023-01-04 11:06:31 +0100 |
commit | 31c4dd76a7aecd88224406dcd86f1732ff0dc282 (patch) | |
tree | 097cee7aba12056d676b71aa8472b94013a5475a | |
parent | f27809bbe01d6870cb788e62f4d9e44a35e9d9c9 (diff) |
Reduce waiting for output boilerplate with helper macro
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r-- | mqtt-tester/src/client_report.rs | 68 |
1 files changed, 38 insertions, 30 deletions
diff --git a/mqtt-tester/src/client_report.rs b/mqtt-tester/src/client_report.rs index c4ca59b..fafde51 100644 --- a/mqtt-tester/src/client_report.rs +++ b/mqtt-tester/src/client_report.rs @@ -67,6 +67,29 @@ macro_rules! mk_report { }; } +macro_rules! wait_for_output { + ($output:ident, + timeout_ms: $timeout_ms:literal, + out_success => $success:block, + out_failure => $failure:block + ) => {{ + let (result, output) = + match tokio::time::timeout(Duration::from_millis($timeout_ms), $output).await { + Ok(Ok(out)) => ( + if out.status.success() { + $success + } else { + $failure + }, + Some(out.stderr), + ), + Ok(Err(_)) | Err(_) => (ReportResult::Failure, None), + }; + + (result, output) + }}; +} + async fn check_invalid_utf8_is_rejected(client_exe_path: &Path) -> miette::Result<Report> { let output = open_connection_with(client_exe_path) .await @@ -98,16 +121,11 @@ async fn check_invalid_utf8_is_rejected(client_exe_path: &Path) -> miette::Resul ), ]); - let (result, output) = match tokio::time::timeout(Duration::from_millis(100), output).await { - Ok(Ok(out)) => ( - if out.status.success() { - ReportResult::Failure - } else { - ReportResult::Success - }, - Some(out.stderr), - ), - Ok(Err(_)) | Err(_) => (ReportResult::Failure, None), + let (result, output) = wait_for_output! { + output, + timeout_ms: 100, + out_success => { ReportResult::Failure }, + out_failure => { ReportResult::Success } }; Ok(mk_report! { @@ -147,16 +165,11 @@ async fn check_receiving_server_packet(client_exe_path: &Path) -> miette::Result ), ]); - let (result, output) = match tokio::time::timeout(Duration::from_millis(100), output).await { - Ok(Ok(out)) => ( - if out.status.success() { - ReportResult::Failure - } else { - ReportResult::Success - }, - Some(out.stderr), - ), - Ok(Err(_)) | Err(_) => (ReportResult::Failure, None), + let (result, output) = wait_for_output! { + output, + timeout_ms: 100, + out_success => { ReportResult::Failure }, + out_failure => { ReportResult::Success } }; Ok(mk_report! { @@ -188,16 +201,11 @@ async fn check_invalid_first_packet_is_rejected(client_exe_path: &Path) -> miett .await?, )]); - let (result, output) = match tokio::time::timeout(Duration::from_millis(100), output).await { - Ok(Ok(out)) => ( - if out.status.success() { - ReportResult::Failure - } else { - ReportResult::Success - }, - Some(out.stderr), - ), - Ok(Err(_)) | Err(_) => (ReportResult::Failure, None), + let (result, output) = wait_for_output! { + output, + timeout_ms: 100, + out_success => { ReportResult::Failure }, + out_failure => { ReportResult::Success } }; Ok(mk_report! { |