From e2763471e58dbcfcb2d3fa1c206d32de4b592536 Mon Sep 17 00:00:00 2001 From: Martin Tzvetanov Grigorov Date: Mon, 19 May 2025 15:36:25 +0300 Subject: [PATCH 1/4] Faster index::get_index IT tests Use shared server for all tests in get_index.rs Signed-off-by: Martin Tzvetanov Grigorov --- crates/meilisearch/tests/index/get_index.rs | 46 +++++++++++++-------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/crates/meilisearch/tests/index/get_index.rs b/crates/meilisearch/tests/index/get_index.rs index a436b649b..91c5a31a5 100644 --- a/crates/meilisearch/tests/index/get_index.rs +++ b/crates/meilisearch/tests/index/get_index.rs @@ -43,7 +43,7 @@ async fn error_get_unexisting_index() { #[actix_rt::test] async fn no_index_return_empty_list() { - let server = Server::new().await; + let server = Server::new_shared(); let (response, code) = server.list_indexes(None, None).await; assert_eq!(code, 200); assert!(response["results"].is_array()); @@ -52,29 +52,39 @@ async fn no_index_return_empty_list() { #[actix_rt::test] async fn list_multiple_indexes() { - let server = Server::new().await; - server.index("test").create(None).await; - let (task, _status_code) = server.index("test1").create(Some("key")).await; + let server = Server::new_shared(); - server.index("test").wait_task(task.uid()).await.succeeded(); + let index_without_key = server.unique_index(); + let (response_without_key, _status_code) = index_without_key.create(None).await; + + 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(); let (response, code) = server.list_indexes(None, None).await; assert_eq!(code, 200); assert!(response["results"].is_array()); let arr = response["results"].as_array().unwrap(); assert_eq!(arr.len(), 2); - assert!(arr.iter().any(|entry| entry["uid"] == "test" && entry["primaryKey"] == Value::Null)); - assert!(arr.iter().any(|entry| entry["uid"] == "test1" && entry["primaryKey"] == "key")); + assert!(arr.iter().any(|entry| entry["uid"] == index_without_key.uid && entry["primaryKey"] == Value::Null)); + assert!(arr.iter().any(|entry| entry["uid"] == index_with_key.uid && entry["primaryKey"] == "key")); } #[actix_rt::test] async fn get_and_paginate_indexes() { - let server = Server::new().await; + let server = Server::new_shared(); + + let mut indices_names = Vec::new(); 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; + for _ in 0..NB_INDEXES { + let index = server.unique_index(); + indices_names.push(index.uid.clone()); + let (response, _status_code) = index.create(None).await; + index.wait_task(response.uid()).await.succeeded(); } + indices_names.sort(); // basic let (response, code) = server.list_indexes(None, None).await; @@ -87,7 +97,7 @@ async fn get_and_paginate_indexes() { assert_eq!(arr.len(), 20); // ensuring we get all the indexes in the alphabetical order assert!((0..20) - .map(|idx| format!("test_{idx:02}")) + .map(|idx| indices_names[idx].clone()) .zip(arr) .all(|(expected, entry)| entry["uid"] == expected)); @@ -101,7 +111,7 @@ async fn get_and_paginate_indexes() { let arr = response["results"].as_array().unwrap(); assert_eq!(arr.len(), 20); assert!((15..35) - .map(|idx| format!("test_{idx:02}")) + .map(|idx| indices_names[idx].clone()) .zip(arr) .all(|(expected, entry)| entry["uid"] == expected)); @@ -115,7 +125,7 @@ async fn get_and_paginate_indexes() { let arr = response["results"].as_array().unwrap(); assert_eq!(arr.len(), 5); assert!((45..50) - .map(|idx| format!("test_{idx:02}")) + .map(|idx| indices_names[idx].clone()) .zip(arr) .all(|(expected, entry)| entry["uid"] == expected)); @@ -129,7 +139,7 @@ async fn get_and_paginate_indexes() { let arr = response["results"].as_array().unwrap(); assert_eq!(arr.len(), 5); assert!((0..5) - .map(|idx| format!("test_{idx:02}")) + .map(|idx| indices_names[idx].clone()) .zip(arr) .all(|(expected, entry)| entry["uid"] == expected)); @@ -143,7 +153,7 @@ async fn get_and_paginate_indexes() { let arr = response["results"].as_array().unwrap(); assert_eq!(arr.len(), 40); assert!((0..40) - .map(|idx| format!("test_{idx:02}")) + .map(|idx| indices_names[idx].clone()) .zip(arr) .all(|(expected, entry)| entry["uid"] == expected)); @@ -157,7 +167,7 @@ async fn get_and_paginate_indexes() { let arr = response["results"].as_array().unwrap(); assert_eq!(arr.len(), 50); assert!((0..50) - .map(|idx| format!("test_{idx:02}")) + .map(|idx| indices_names[idx].clone()) .zip(arr) .all(|(expected, entry)| entry["uid"] == expected)); @@ -171,7 +181,7 @@ async fn get_and_paginate_indexes() { let arr = response["results"].as_array().unwrap(); assert_eq!(arr.len(), 10); assert!((20..30) - .map(|idx| format!("test_{idx:02}")) + .map(|idx| indices_names[idx].clone()) .zip(arr) .all(|(expected, entry)| entry["uid"] == expected)); } From 03a36f116ea94856dbdd3b143129485e9e7489c5 Mon Sep 17 00:00:00 2001 From: Martin Tzvetanov Grigorov Date: Mon, 19 May 2025 16:20:16 +0300 Subject: [PATCH 2/4] 1. Use a unique Server for no_index_return_empty_list test ... because a Shared one could see indices created by other tests 2. List at least 1000 indices to make sure we get the newly created ones in list_multiple_indexes() Signed-off-by: Martin Tzvetanov Grigorov --- crates/meilisearch/tests/index/get_index.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/meilisearch/tests/index/get_index.rs b/crates/meilisearch/tests/index/get_index.rs index 91c5a31a5..5a9f2007c 100644 --- a/crates/meilisearch/tests/index/get_index.rs +++ b/crates/meilisearch/tests/index/get_index.rs @@ -43,7 +43,7 @@ async fn error_get_unexisting_index() { #[actix_rt::test] async fn no_index_return_empty_list() { - let server = Server::new_shared(); + let server = Server::new().await; let (response, code) = server.list_indexes(None, None).await; assert_eq!(code, 200); assert!(response["results"].is_array()); @@ -63,11 +63,11 @@ async fn list_multiple_indexes() { index_without_key.wait_task(response_without_key.uid()).await.succeeded(); index_with_key.wait_task(response_with_key.uid()).await.succeeded(); - let (response, code) = server.list_indexes(None, None).await; + let (response, code) = server.list_indexes(None, Some(1000)).await; assert_eq!(code, 200); assert!(response["results"].is_array()); let arr = response["results"].as_array().unwrap(); - assert_eq!(arr.len(), 2); + assert!(arr.len() >= 2, "Expected at least 2 indexes."); assert!(arr.iter().any(|entry| entry["uid"] == index_without_key.uid && entry["primaryKey"] == Value::Null)); assert!(arr.iter().any(|entry| entry["uid"] == index_with_key.uid && entry["primaryKey"] == "key")); } From b68e22c0e6db20f7d81aa8acce3734367b82f59e Mon Sep 17 00:00:00 2001 From: Martin Tzvetanov Grigorov Date: Mon, 19 May 2025 16:35:09 +0300 Subject: [PATCH 3/4] Revert the improvements for get_and_paginate_indexes() Because they won't work in multi-threaded execution of the tests Signed-off-by: Martin Tzvetanov Grigorov --- crates/meilisearch/tests/index/get_index.rs | 27 +++++++++------------ 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/crates/meilisearch/tests/index/get_index.rs b/crates/meilisearch/tests/index/get_index.rs index 5a9f2007c..e193efa14 100644 --- a/crates/meilisearch/tests/index/get_index.rs +++ b/crates/meilisearch/tests/index/get_index.rs @@ -74,17 +74,12 @@ async fn list_multiple_indexes() { #[actix_rt::test] async fn get_and_paginate_indexes() { - let server = Server::new_shared(); - - let mut indices_names = Vec::new(); + let server = Server::new().await; const NB_INDEXES: usize = 50; - for _ in 0..NB_INDEXES { - let index = server.unique_index(); - indices_names.push(index.uid.clone()); - let (response, _status_code) = index.create(None).await; - index.wait_task(response.uid()).await.succeeded(); + 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; } - indices_names.sort(); // basic let (response, code) = server.list_indexes(None, None).await; @@ -97,7 +92,7 @@ async fn get_and_paginate_indexes() { assert_eq!(arr.len(), 20); // ensuring we get all the indexes in the alphabetical order assert!((0..20) - .map(|idx| indices_names[idx].clone()) + .map(|idx| format!("test_{idx:02}")) .zip(arr) .all(|(expected, entry)| entry["uid"] == expected)); @@ -111,7 +106,7 @@ async fn get_and_paginate_indexes() { let arr = response["results"].as_array().unwrap(); assert_eq!(arr.len(), 20); assert!((15..35) - .map(|idx| indices_names[idx].clone()) + .map(|idx| format!("test_{idx:02}")) .zip(arr) .all(|(expected, entry)| entry["uid"] == expected)); @@ -125,7 +120,7 @@ async fn get_and_paginate_indexes() { let arr = response["results"].as_array().unwrap(); assert_eq!(arr.len(), 5); assert!((45..50) - .map(|idx| indices_names[idx].clone()) + .map(|idx| format!("test_{idx:02}")) .zip(arr) .all(|(expected, entry)| entry["uid"] == expected)); @@ -139,7 +134,7 @@ async fn get_and_paginate_indexes() { let arr = response["results"].as_array().unwrap(); assert_eq!(arr.len(), 5); assert!((0..5) - .map(|idx| indices_names[idx].clone()) + .map(|idx| format!("test_{idx:02}")) .zip(arr) .all(|(expected, entry)| entry["uid"] == expected)); @@ -153,7 +148,7 @@ async fn get_and_paginate_indexes() { let arr = response["results"].as_array().unwrap(); assert_eq!(arr.len(), 40); assert!((0..40) - .map(|idx| indices_names[idx].clone()) + .map(|idx| format!("test_{idx:02}")) .zip(arr) .all(|(expected, entry)| entry["uid"] == expected)); @@ -167,7 +162,7 @@ async fn get_and_paginate_indexes() { let arr = response["results"].as_array().unwrap(); assert_eq!(arr.len(), 50); assert!((0..50) - .map(|idx| indices_names[idx].clone()) + .map(|idx| format!("test_{idx:02}")) .zip(arr) .all(|(expected, entry)| entry["uid"] == expected)); @@ -181,7 +176,7 @@ async fn get_and_paginate_indexes() { let arr = response["results"].as_array().unwrap(); assert_eq!(arr.len(), 10); assert!((20..30) - .map(|idx| indices_names[idx].clone()) + .map(|idx| format!("test_{idx:02}")) .zip(arr) .all(|(expected, entry)| entry["uid"] == expected)); } From d1a088ea0b65b1ef1baf0d93eec42044657075a3 Mon Sep 17 00:00:00 2001 From: Martin Tzvetanov Grigorov Date: Mon, 19 May 2025 16:52:43 +0300 Subject: [PATCH 4/4] Format the code Signed-off-by: Martin Tzvetanov Grigorov --- crates/meilisearch/tests/index/get_index.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/crates/meilisearch/tests/index/get_index.rs b/crates/meilisearch/tests/index/get_index.rs index e193efa14..b26eaeb9a 100644 --- a/crates/meilisearch/tests/index/get_index.rs +++ b/crates/meilisearch/tests/index/get_index.rs @@ -68,8 +68,12 @@ async fn list_multiple_indexes() { assert!(response["results"].is_array()); let arr = response["results"].as_array().unwrap(); assert!(arr.len() >= 2, "Expected at least 2 indexes."); - assert!(arr.iter().any(|entry| entry["uid"] == index_without_key.uid && entry["primaryKey"] == Value::Null)); - assert!(arr.iter().any(|entry| entry["uid"] == index_with_key.uid && entry["primaryKey"] == "key")); + assert!(arr + .iter() + .any(|entry| entry["uid"] == index_without_key.uid && entry["primaryKey"] == Value::Null)); + assert!(arr + .iter() + .any(|entry| entry["uid"] == index_with_key.uid && entry["primaryKey"] == "key")); } #[actix_rt::test]