diff --git a/Cargo.lock b/Cargo.lock index cc96152a6..79fb2086b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5682,6 +5682,20 @@ name = "similar" version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa" +dependencies = [ + "bstr", + "unicode-segmentation", +] + +[[package]] +name = "similar-asserts" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b441962c817e33508847a22bd82f03a30cff43642dc2fae8b050566121eb9a" +dependencies = [ + "console", + "similar", +] [[package]] name = "simple_asn1" @@ -7291,6 +7305,7 @@ dependencies = [ "serde", "serde_json", "sha2", + "similar-asserts", "sysinfo", "time", "tokio", diff --git a/crates/xtask/Cargo.toml b/crates/xtask/Cargo.toml index 5fdf157df..76751c2ec 100644 --- a/crates/xtask/Cargo.toml +++ b/crates/xtask/Cargo.toml @@ -42,3 +42,4 @@ tracing = "0.1.41" tracing-subscriber = "0.3.19" tracing-trace = { version = "0.1.0", path = "../tracing-trace" } uuid = { version = "1.17.0", features = ["v7", "serde"] } +similar-asserts = "1.7.0" diff --git a/crates/xtask/src/bench/workload.rs b/crates/xtask/src/bench/workload.rs index 1fe5d2ca1..113666b1e 100644 --- a/crates/xtask/src/bench/workload.rs +++ b/crates/xtask/src/bench/workload.rs @@ -129,7 +129,7 @@ async fn execute_run( run_number: u16, ) -> anyhow::Result>> { delete_db().await; - + let meilisearch = start_meili( meili_client, master_key, diff --git a/crates/xtask/src/common/command.rs b/crates/xtask/src/common/command.rs index f38d89280..c08ea949a 100644 --- a/crates/xtask/src/common/command.rs +++ b/crates/xtask/src/common/command.rs @@ -7,6 +7,7 @@ use anyhow::{bail, Context as _}; use reqwest::StatusCode; use serde::{Deserialize, Serialize}; use serde_json::Value; +use similar_asserts::SimpleDiff; use crate::common::assets::{fetch_asset, Asset}; use crate::common::client::{Client, Method}; @@ -92,8 +93,8 @@ async fn run_batch( let mut tasks = Vec::with_capacity(batch.len()); for batch in batch { - let client2 = Arc::clone(&client); - let assets2 = Arc::clone(&assets); + let client2 = Arc::clone(client); + let assets2 = Arc::clone(assets); tasks.push(tokio::spawn(async move { run(&client2, &batch, &assets2, asset_folder, return_response).await })); @@ -112,7 +113,7 @@ async fn run_batch( match sync { SyncMode::DontWait => {} SyncMode::WaitForResponse => {} - SyncMode::WaitForTask => wait_for_tasks(&client).await?, + SyncMode::WaitForTask => wait_for_tasks(client).await?, } Ok(outputs) @@ -226,7 +227,12 @@ pub async fn run( .context("could not deserialize response as JSON") .context("parsing response when checking expected response")?; if &response != expected_response { - bail!("unexpected response: got '{response}', expected '{expected_response}'"); + let expected_pretty = serde_json::to_string_pretty(expected_response) + .context("serializing expected response as pretty JSON")?; + let response_pretty = serde_json::to_string_pretty(&response) + .context("serializing response as pretty JSON")?; + let diff = SimpleDiff::from_str(&expected_pretty, &response_pretty, "expected", "got"); + bail!("unexpected response:\n{diff}"); } } diff --git a/crates/xtask/src/test/versions.rs b/crates/xtask/src/test/versions.rs index 53045415e..a248b9046 100644 --- a/crates/xtask/src/test/versions.rs +++ b/crates/xtask/src/test/versions.rs @@ -43,7 +43,8 @@ impl VersionOrLatest { pub fn binary_path(&self, asset_folder: &str) -> anyhow::Result> { match self { VersionOrLatest::Version(version) => { - let mut asset_folder: PathBuf = asset_folder.parse().context("parsing asset folder")?; + let mut asset_folder: PathBuf = + asset_folder.parse().context("parsing asset folder")?; let arch = get_arch()?; let local_filename = format!("meilisearch-{version}-{arch}"); asset_folder.push(local_filename); diff --git a/crates/xtask/src/test/workload.rs b/crates/xtask/src/test/workload.rs index 29563b8d0..dbdba3631 100644 --- a/crates/xtask/src/test/workload.rs +++ b/crates/xtask/src/test/workload.rs @@ -124,7 +124,8 @@ impl TestWorkload { &[String::from("--experimental-dumpless-upgrade")], &self.name, binary_path.as_deref(), - ).await?; + ) + .await?; tracing::info!("Upgraded to {version}"); } }