diff --git a/services/commtest/src/tools.rs b/services/commtest/src/tools.rs --- a/services/commtest/src/tools.rs +++ b/services/commtest/src/tools.rs @@ -28,6 +28,8 @@ HttpStatus(#[error(ignore)] reqwest::StatusCode), #[display(...)] ParseError(ParseError), + #[display(...)] + AssertError(#[error(ignore)] String), } pub fn obtain_number_of_threads() -> usize { diff --git a/services/commtest/tests/blob_integration_test.rs b/services/commtest/tests/blob_integration_test.rs --- a/services/commtest/tests/blob_integration_test.rs +++ b/services/commtest/tests/blob_integration_test.rs @@ -7,6 +7,45 @@ use commtest::tools::Error; use std::env; +async fn run_tests( + client: &BlobServiceClient, + blob_data: &Vec, +) -> Result<(), Error> { + for (i, item) in blob_data.iter().enumerate() { + let data_exists: bool = put::run(&client, &item).await?; + if data_exists { + Err(Error::AssertError(format!( + "test data no. {} should not exist", + i + )))?; + } + } + + for (i, blob_item) in blob_data.iter().enumerate() { + let received_sizes = get::run(&client, &blob_item).await?; + let expected_data_size = blob_item.chunks_sizes.iter().sum::(); + let received_data_size: usize = received_sizes.iter().sum::(); + if expected_data_size != received_data_size { + Err(Error::AssertError(format!( + "invalid size of data for index {}, expected {}, got {}", + i, expected_data_size, received_data_size + )))?; + } + } + + for (i, item) in blob_data.iter().enumerate() { + remove::run(&client, &item).await?; + if get::run(&client, &item).await.is_ok() { + Err(Error::AssertError(format!( + "test data no. {} should no longer be available", + i + )))?; + } + } + + Ok(()) +} + #[tokio::test] async fn blob_integration_test() -> Result<(), Error> { let port = env::var("COMM_SERVICES_PORT_BLOB") @@ -47,29 +86,19 @@ }, ]; - for item in &blob_data { - let data_exists: bool = put::run(&client, &item).await?; - assert!(!data_exists, "test data should not exist"); - } - - for (i, blob_item) in blob_data.iter().enumerate() { - let received_sizes = get::run(&client, &blob_item).await?; - let expected_data_size = blob_item.chunks_sizes.iter().sum::(); - let received_data_size = received_sizes.iter().sum::(); - assert_eq!( - expected_data_size, received_data_size, - "invalid size of data for index {}, expected {}, got {}", - i, expected_data_size, received_data_size - ); - } - - for item in &blob_data { - remove::run(&client, &item).await?; - assert!( - get::run(&client, &item).await.is_err(), - "item should no longer be available" - ); + let tests_result = run_tests(&client, &blob_data).await; + if tests_result.is_err() { + // Clean up the data if any test fails + for (i, item) in blob_data.iter().enumerate() { + if remove::run(&client, &item).await.is_err() { + Err(Error::AssertError(format!( + "failed to clean test data no. {}", + i + )))?; + } + } } + tests_result?; Ok(()) }