Make test more reproducible

This commit is contained in:
Mubelotix 2025-06-24 11:08:06 +02:00
parent 2f82d94502
commit 59a1c5d9a7
No known key found for this signature in database
GPG Key ID: 89F391DBCC8CE7F0

View File

@ -1,4 +1,5 @@
use std::collections::{BTreeMap, BTreeSet}; use std::collections::{BTreeMap, BTreeSet};
use std::sync::atomic::AtomicUsize;
use meili_snap::{json_string, snapshot}; use meili_snap::{json_string, snapshot};
use reqwest::IntoUrl; use reqwest::IntoUrl;
@ -338,36 +339,43 @@ async fn create_mock_raw() -> (MockServer, Value) {
(mock_server, embedder_settings) (mock_server, embedder_settings)
} }
/// A mock server that returns 500 errors, and sends a message once 5 requests are received async fn create_faulty_mock_raw(sender: mpsc::Sender<()>) -> (MockServer, Value) {
async fn create_faulty_mock_raw(mut sender: mpsc::Sender<()>) -> (MockServer, Value) {
let mock_server = MockServer::start().await; let mock_server = MockServer::start().await;
let count = AtomicUsize::new(0);
Mock::given(method("POST")) Mock::given(method("POST"))
.and(path("/")) .and(path("/"))
.respond_with(move |req: &Request| { .respond_with(move |req: &Request| {
let req: String = match req.body_json() { let count = count.fetch_add(1, std::sync::atomic::Ordering::SeqCst);
Ok(req) => req,
let req_body = match req.body_json::<Value>() {
Ok(body) => body,
Err(error) => { Err(error) => {
return ResponseTemplate::new(400).set_body_json(json!({ return ResponseTemplate::new(400).set_body_json(json!({
"error": format!("Invalid request: {error}") "error": format!("Invalid request: {error}")
})); }));
} }
}; };
let sender = sender.clone(); if count >= 5 {
spawn(async move { let _ = sender.try_send(());
sender.send(()).await; ResponseTemplate::new(500)
}); .set_delay(Duration::from_secs(u64::MAX))
.set_body_json(json!({
"error": "Service Unavailable",
"text": req_body
}))
} else {
ResponseTemplate::new(500) ResponseTemplate::new(500).set_body_json(json!({
.set_delay(Duration::from_millis(500))
.set_body_json(json!({
"error": "Service Unavailable", "error": "Service Unavailable",
"text": req "text": req_body
})) }))
}
}) })
.mount(&mock_server) .mount(&mock_server)
.await; .await;
let url = mock_server.uri(); let url = mock_server.uri();
let embedder_settings = json!({ let embedder_settings = json!({
@ -2187,12 +2195,9 @@ async fn observability() {
snapshot!(code, @"202 Accepted"); snapshot!(code, @"202 Accepted");
// The task will eventually fail, so let's not wait for it. // The task will eventually fail, so let's not wait for it.
// Let's just wait for 5 errors from the mock server. // Let's just wait for the server to block
for _errors in 0..5 { receiver.recv().await;
receiver.recv().await;
}
let batches = index.filtered_batches(&[], &[], &[]).await; let batches = index.filtered_batches(&[], &[], &[]).await;
println!("Batches: {batches:?}"); snapshot!(task, @r###""###);
} }