diff --git a/modules/bitcoinsuite-chronik-client/src/lib.rs b/modules/bitcoinsuite-chronik-client/src/lib.rs --- a/modules/bitcoinsuite-chronik-client/src/lib.rs +++ b/modules/bitcoinsuite-chronik-client/src/lib.rs @@ -465,3 +465,46 @@ Ok(()) } } + +#[macro_export] +macro_rules! assert_status_code_eq { + ($result:expr, $expected_status:expr) => { + match $result { + Ok(_) => { + panic!( + "Expected HTTP error response with status code {}, but \ + the request succeeded", + $expected_status + ); + } + Err(report) => { + let report_debug = format!("{:?}", report); + + let err = + report.downcast::<ChronikClientError>().expect(&format!( + "Expected a Chronik client error but got a different \ + error {}", + report_debug + )); + + let status_code = match err { + ChronikClientError::ChronikError { + status_code, .. + } => status_code, + other => panic!( + "Expected a ChronikError with HTTP status code, but \ + got different variant: {:?}", + other + ), + }; + + assert_eq!( + status_code, $expected_status, + "HTTP status code assertion failed: expected {}, received \ + {}", + $expected_status, status_code + ); + } + } + }; +} diff --git a/modules/bitcoinsuite-chronik-client/tests/block_and_blocks.rs b/modules/bitcoinsuite-chronik-client/tests/block_and_blocks.rs --- a/modules/bitcoinsuite-chronik-client/tests/block_and_blocks.rs +++ b/modules/bitcoinsuite-chronik-client/tests/block_and_blocks.rs @@ -10,6 +10,7 @@ use abc_rust_error::Result; use async_trait::async_trait; use bitcoinsuite_chronik_client::{ + assert_status_code_eq, handler::{IpcHandler, IpcReader}, test_runner::{handle_test_info, spin_child_process}, ChronikClient, ChronikClientError, @@ -117,22 +118,7 @@ ) .await; - let err = result - .unwrap_err() - .downcast::<ChronikClientError>()?; - - let status_code = match err { - ChronikClientError::ChronikError { - status_code: e, - .. - } => e, - _ => panic!( - "ChronikClientError should be raised, but - hasn't" - ), - }; - - assert_eq!(status_code, 400); + assert_status_code_eq!(result, 400); } // Gives us the block at 10 higher @@ -238,22 +224,7 @@ ) .await; - let err = result - .unwrap_err() - .downcast::<ChronikClientError>()?; - - let status_code = match err { - ChronikClientError::ChronikError { - status_code: e, - .. - } => e, - _ => panic!( - "ChronikClientError should be raised, but - hasn't" - ), - }; - - assert_eq!(status_code, 404); + assert_status_code_eq!(result, 404); // blocks does not throw error if asked for parked // block, but also does not return it @@ -409,22 +380,7 @@ ) .await; - let err = result - .unwrap_err() - .downcast::<ChronikClientError>()?; - - let status_code = match err { - ChronikClientError::ChronikError { - status_code: e, - .. - } => e, - _ => panic!( - "ChronikClientError should be raised, but - hasn't" - ), - }; - - assert_eq!(status_code, 404); + assert_status_code_eq!(result, 404); // blocks does not throw error if asked for // invalidated block, but also does not return it