diff --git a/crates/meilisearch/tests/auth/authorization.rs b/crates/meilisearch/tests/auth/authorization.rs index 20815d987..607ecf67a 100644 --- a/crates/meilisearch/tests/auth/authorization.rs +++ b/crates/meilisearch/tests/auth/authorization.rs @@ -507,10 +507,10 @@ async fn access_authorized_index_patterns() { server.use_api_key(MASTER_KEY); - // refer to products_1 with modified api key. + // refer to products_1 with a modified api key. let index_1 = server.index("products_1"); - index_1.wait_task(task_id).await; + server.wait_task(task_id).await; let (response, code) = index_1.get_task(task_id).await; assert_eq!(200, code, "{:?}", &response); @@ -578,19 +578,19 @@ async fn raise_error_non_authorized_index_patterns() { assert_eq!(202, code, "{:?}", &response); let task2_id = response["taskUid"].as_u64().unwrap(); - // Adding document to test index. Should Fail with 403 -- invalid_api_key + // Adding a document to test index. Should Fail with 403 -- invalid_api_key let (response, code) = test_index.add_documents(documents, None).await; assert_eq!(403, code, "{:?}", &response); server.use_api_key(MASTER_KEY); - // refer to products_1 with modified api key. + // refer to products_1 with a modified api key. let product_1_index = server.index("products_1"); - // refer to products_2 with modified api key. - let product_2_index = server.index("products_2"); + // refer to products_2 with a modified api key. + // let product_2_index = server.index("products_2"); - product_1_server.wait_task(task1_id).await; - product_2_server.wait_task(task2_id).await; + server.wait_task(task1_id).await; + server.wait_task(task2_id).await; let (response, code) = product_1_index.get_task(task1_id).await; assert_eq!(200, code, "{:?}", &response); @@ -603,7 +603,7 @@ async fn raise_error_non_authorized_index_patterns() { #[actix_rt::test] async fn pattern_indexes() { - // Create server with master key + // Create a server with master key let mut server = Server::new_auth().await; server.use_admin_key(MASTER_KEY).await; diff --git a/crates/meilisearch/tests/common/index.rs b/crates/meilisearch/tests/common/index.rs index 4da96403c..61bfced72 100644 --- a/crates/meilisearch/tests/common/index.rs +++ b/crates/meilisearch/tests/common/index.rs @@ -7,7 +7,7 @@ use urlencoding::encode as urlencode; use super::encoder::Encoder; use super::service::Service; -use super::{Owned, Shared, Value}; +use super::{Owned, Server, Shared, Value}; use crate::json; pub struct Index<'a, State = Owned> { @@ -42,9 +42,9 @@ impl<'a> Index<'a, Owned> { ) .await; assert_eq!(code, 202); - let update_id = response["taskUid"].as_i64().unwrap(); - self.wait_task(update_id as u64).await; - update_id as u64 + let update_id = response["taskUid"].as_u64().unwrap(); + self.wait_task(update_id).await; + update_id } pub async fn load_test_set_ndjson(&self) -> u64 { @@ -58,9 +58,9 @@ impl<'a> Index<'a, Owned> { ) .await; assert_eq!(code, 202); - let update_id = response["taskUid"].as_i64().unwrap(); - self.wait_task(update_id as u64).await; - update_id as u64 + let update_id = response["taskUid"].as_u64().unwrap(); + self.wait_task(update_id).await; + update_id } pub async fn create(&self, primary_key: Option<&str>) -> (Value, StatusCode) { @@ -362,6 +362,10 @@ impl Index<'_, State> { self.service.delete(url).await } + async fn wait_task(&self, update_id: u64) -> Value { + Server::::_wait_task(async |url| self.service.get(url).await, update_id).await + } + pub async fn get_task(&self, update_id: u64) -> (Value, StatusCode) { let url = format!("/tasks/{}", update_id); self.service.get(url).await diff --git a/crates/meilisearch/tests/common/server.rs b/crates/meilisearch/tests/common/server.rs index 4367650c5..73b1033f2 100644 --- a/crates/meilisearch/tests/common/server.rs +++ b/crates/meilisearch/tests/common/server.rs @@ -407,13 +407,20 @@ impl Server { } pub async fn wait_task(&self, update_id: u64) -> Value { + Server::::_wait_task(async |url| self.service.get(url).await, update_id).await + } + + pub(super) async fn _wait_task(request_fn: F, update_id: u64) -> Value + where + F: AsyncFnOnce(String) -> (Value, StatusCode) + Copy, + { // try several times to get status, or panic to not wait forever - let url = format!("/tasks/{}", update_id); - let max_attempts = 400; // 200 seconds total, 0.5s per attempt + let url = format!("/tasks/{update_id}"); + let max_attempts = 400; // 200 seconds in total, 0.5secs per attempt for i in 0..max_attempts { - let (response, status_code) = self.service.get(&url).await; - assert_eq!(200, status_code, "response: {}", response); + let (response, status_code) = request_fn(url.clone()).await; + assert_eq!(200, status_code, "response: {response}"); if response["status"] == "succeeded" || response["status"] == "failed" { return response; diff --git a/crates/meilisearch/tests/index/create_index.rs b/crates/meilisearch/tests/index/create_index.rs index dc178919e..625d7afd0 100644 --- a/crates/meilisearch/tests/index/create_index.rs +++ b/crates/meilisearch/tests/index/create_index.rs @@ -161,9 +161,9 @@ async fn test_create_multiple_indexes() { let (task2, _) = index2.create(None).await; let (task3, _) = index3.create(None).await; - index1.wait_task(task1.uid()).await.succeeded(); - index2.wait_task(task2.uid()).await.succeeded(); - index3.wait_task(task3.uid()).await.succeeded(); + server.wait_task(task1.uid()).await.succeeded(); + server.wait_task(task2.uid()).await.succeeded(); + server.wait_task(task3.uid()).await.succeeded(); assert_eq!(index1.get().await.1, 200); assert_eq!(index2.get().await.1, 200); diff --git a/crates/meilisearch/tests/index/get_index.rs b/crates/meilisearch/tests/index/get_index.rs index ece479513..82f086f08 100644 --- a/crates/meilisearch/tests/index/get_index.rs +++ b/crates/meilisearch/tests/index/get_index.rs @@ -60,8 +60,8 @@ async fn list_multiple_indexes() { let index_with_key = server.unique_index(); let (response_with_key, _status_code) = index_with_key.create(Some("key")).await; - index_without_key.wait_task(response_without_key.uid()).await.succeeded(); - index_with_key.wait_task(response_with_key.uid()).await.succeeded(); + server.wait_task(response_without_key.uid()).await.succeeded(); + server.wait_task(response_with_key.uid()).await.succeeded(); let (response, code) = server.list_indexes(None, Some(1000)).await; assert_eq!(code, 200); @@ -81,8 +81,9 @@ async fn get_and_paginate_indexes() { let server = Server::new().await; const NB_INDEXES: usize = 50; for i in 0..NB_INDEXES { - server.index(format!("test_{i:02}")).create(None).await; - server.index(format!("test_{i:02}")).wait_task(i as u64).await; + let (task, code) = server.index(format!("test_{i:02}")).create(None).await; + assert_eq!(code, 202); + server.wait_task(task.uid()).await; } // basic diff --git a/crates/meilisearch/tests/search/multi/proxy.rs b/crates/meilisearch/tests/search/multi/proxy.rs index c537f5ae8..311f69d9e 100644 --- a/crates/meilisearch/tests/search/multi/proxy.rs +++ b/crates/meilisearch/tests/search/multi/proxy.rs @@ -158,11 +158,11 @@ async fn remote_sharding() { let index1 = ms1.index("test"); let index2 = ms2.index("test"); let (task, _status_code) = index0.add_documents(json!(documents[0..2]), None).await; - index0.wait_task(task.uid()).await.succeeded(); + ms0.wait_task(task.uid()).await.succeeded(); let (task, _status_code) = index1.add_documents(json!(documents[2..3]), None).await; - index1.wait_task(task.uid()).await.succeeded(); + ms1.wait_task(task.uid()).await.succeeded(); let (task, _status_code) = index2.add_documents(json!(documents[3..5]), None).await; - index2.wait_task(task.uid()).await.succeeded(); + ms2.wait_task(task.uid()).await.succeeded(); // wrap servers let ms0 = Arc::new(ms0); @@ -454,9 +454,9 @@ async fn error_unregistered_remote() { let index0 = ms0.index("test"); let index1 = ms1.index("test"); let (task, _status_code) = index0.add_documents(json!(documents[0..2]), None).await; - index0.wait_task(task.uid()).await.succeeded(); + ms0.wait_task(task.uid()).await.succeeded(); let (task, _status_code) = index1.add_documents(json!(documents[2..3]), None).await; - index1.wait_task(task.uid()).await.succeeded(); + ms1.wait_task(task.uid()).await.succeeded(); // wrap servers let ms0 = Arc::new(ms0); @@ -572,9 +572,9 @@ async fn error_no_weighted_score() { let index0 = ms0.index("test"); let index1 = ms1.index("test"); let (task, _status_code) = index0.add_documents(json!(documents[0..2]), None).await; - index0.wait_task(task.uid()).await.succeeded(); + ms0.wait_task(task.uid()).await.succeeded(); let (task, _status_code) = index1.add_documents(json!(documents[2..3]), None).await; - index1.wait_task(task.uid()).await.succeeded(); + ms1.wait_task(task.uid()).await.succeeded(); // wrap servers let ms0 = Arc::new(ms0); @@ -705,9 +705,9 @@ async fn error_bad_response() { let index0 = ms0.index("test"); let index1 = ms1.index("test"); let (task, _status_code) = index0.add_documents(json!(documents[0..2]), None).await; - index0.wait_task(task.uid()).await.succeeded(); + ms0.wait_task(task.uid()).await.succeeded(); let (task, _status_code) = index1.add_documents(json!(documents[2..3]), None).await; - index1.wait_task(task.uid()).await.succeeded(); + ms1.wait_task(task.uid()).await.succeeded(); // wrap servers let ms0 = Arc::new(ms0); @@ -842,9 +842,9 @@ async fn error_bad_request() { let index0 = ms0.index("test"); let index1 = ms1.index("test"); let (task, _status_code) = index0.add_documents(json!(documents[0..2]), None).await; - index0.wait_task(task.uid()).await.succeeded(); + ms0.wait_task(task.uid()).await.succeeded(); let (task, _status_code) = index1.add_documents(json!(documents[2..3]), None).await; - index1.wait_task(task.uid()).await.succeeded(); + ms1.wait_task(task.uid()).await.succeeded(); // wrap servers let ms0 = Arc::new(ms0); @@ -972,10 +972,10 @@ async fn error_bad_request_facets_by_index() { let index0 = ms0.index("test0"); let index1 = ms1.index("test1"); let (task, _status_code) = index0.add_documents(json!(documents[0..2]), None).await; - index0.wait_task(task.uid()).await.succeeded(); + ms0.wait_task(task.uid()).await.succeeded(); let (task, _status_code) = index1.add_documents(json!(documents[2..3]), None).await; - index1.wait_task(task.uid()).await.succeeded(); + ms1.wait_task(task.uid()).await.succeeded(); // wrap servers let ms0 = Arc::new(ms0); @@ -1113,13 +1113,13 @@ async fn error_bad_request_facets_by_index_facet() { let index0 = ms0.index("test"); let index1 = ms1.index("test"); let (task, _status_code) = index0.add_documents(json!(documents[0..2]), None).await; - index0.wait_task(task.uid()).await.succeeded(); + ms0.wait_task(task.uid()).await.succeeded(); let (task, _status_code) = index0.update_settings_filterable_attributes(json!(["id"])).await; - index0.wait_task(task.uid()).await.succeeded(); + ms0.wait_task(task.uid()).await.succeeded(); let (task, _status_code) = index1.add_documents(json!(documents[2..3]), None).await; - index1.wait_task(task.uid()).await.succeeded(); + ms1.wait_task(task.uid()).await.succeeded(); // wrap servers let ms0 = Arc::new(ms0); @@ -1263,9 +1263,9 @@ async fn error_remote_does_not_answer() { let index0 = ms0.index("test"); let index1 = ms1.index("test"); let (task, _status_code) = index0.add_documents(json!(documents[0..2]), None).await; - index0.wait_task(task.uid()).await.succeeded(); + ms0.wait_task(task.uid()).await.succeeded(); let (task, _status_code) = index1.add_documents(json!(documents[2..3]), None).await; - index1.wait_task(task.uid()).await.succeeded(); + ms1.wait_task(task.uid()).await.succeeded(); // wrap servers let ms0 = Arc::new(ms0); @@ -1464,9 +1464,9 @@ async fn error_remote_404() { let index0 = ms0.index("test"); let index1 = ms1.index("test"); let (task, _status_code) = index0.add_documents(json!(documents[0..2]), None).await; - index0.wait_task(task.uid()).await.succeeded(); + ms0.wait_task(task.uid()).await.succeeded(); let (task, _status_code) = index1.add_documents(json!(documents[2..3]), None).await; - index1.wait_task(task.uid()).await.succeeded(); + ms1.wait_task(task.uid()).await.succeeded(); // wrap servers let ms0 = Arc::new(ms0); @@ -1659,9 +1659,9 @@ async fn error_remote_sharding_auth() { let index0 = ms0.index("test"); let index1 = ms1.index("test"); let (task, _status_code) = index0.add_documents(json!(documents[0..2]), None).await; - index0.wait_task(task.uid()).await.succeeded(); + ms0.wait_task(task.uid()).await.succeeded(); let (task, _status_code) = index1.add_documents(json!(documents[2..3]), None).await; - index1.wait_task(task.uid()).await.succeeded(); + ms1.wait_task(task.uid()).await.succeeded(); // wrap servers ms1.clear_api_key(); @@ -1819,9 +1819,9 @@ async fn remote_sharding_auth() { let index0 = ms0.index("test"); let index1 = ms1.index("test"); let (task, _status_code) = index0.add_documents(json!(documents[0..2]), None).await; - index0.wait_task(task.uid()).await.succeeded(); + ms0.wait_task(task.uid()).await.succeeded(); let (task, _status_code) = index1.add_documents(json!(documents[2..3]), None).await; - index1.wait_task(task.uid()).await.succeeded(); + ms1.wait_task(task.uid()).await.succeeded(); // wrap servers ms1.clear_api_key(); @@ -1974,9 +1974,9 @@ async fn error_remote_500() { let index0 = ms0.index("test"); let index1 = ms1.index("test"); let (task, _status_code) = index0.add_documents(json!(documents[0..2]), None).await; - index0.wait_task(task.uid()).await.succeeded(); + ms0.wait_task(task.uid()).await.succeeded(); let (task, _status_code) = index1.add_documents(json!(documents[2..3]), None).await; - index1.wait_task(task.uid()).await.succeeded(); + ms1.wait_task(task.uid()).await.succeeded(); // wrap servers let ms0 = Arc::new(ms0); @@ -2153,9 +2153,9 @@ async fn error_remote_500_once() { let index0 = ms0.index("test"); let index1 = ms1.index("test"); let (task, _status_code) = index0.add_documents(json!(documents[0..2]), None).await; - index0.wait_task(task.uid()).await.succeeded(); + ms0.wait_task(task.uid()).await.succeeded(); let (task, _status_code) = index1.add_documents(json!(documents[2..3]), None).await; - index1.wait_task(task.uid()).await.succeeded(); + ms1.wait_task(task.uid()).await.succeeded(); // wrap servers let ms0 = Arc::new(ms0); @@ -2336,9 +2336,9 @@ async fn error_remote_timeout() { let index0 = ms0.index("test"); let index1 = ms1.index("test"); let (task, _status_code) = index0.add_documents(json!(documents[0..2]), None).await; - index0.wait_task(task.uid()).await.succeeded(); + ms0.wait_task(task.uid()).await.succeeded(); let (task, _status_code) = index1.add_documents(json!(documents[2..3]), None).await; - index1.wait_task(task.uid()).await.succeeded(); + ms1.wait_task(task.uid()).await.succeeded(); // wrap servers let ms0 = Arc::new(ms0);