Make pull diagnostics remote test more robust (#33057)

Kirill Bulatov created

Follow-up of https://github.com/zed-industries/zed/pull/33028

Due to request races, we cannot predict the amount of result_id s that
we'll get. Ensure their amount grows monotonically each time.

This time, iterations=5000 did not fail for me.

Release Notes:

- N/A

Change summary

crates/collab/src/tests/editor_tests.rs | 49 ++++++++++----------------
1 file changed, 19 insertions(+), 30 deletions(-)

Detailed changes

crates/collab/src/tests/editor_tests.rs 🔗

@@ -2656,10 +2656,9 @@ async fn test_lsp_pull_diagnostics(cx_a: &mut TestAppContext, cx_b: &mut TestApp
         }
     });
     {
-        assert_eq!(
-            &BTreeSet::from_iter([None]),
-            diagnostics_pulls_result_ids.lock().await.deref(),
-            "Initial diagnostics pulls should not reuse any result ids"
+        assert!(
+            diagnostics_pulls_result_ids.lock().await.len() > 0,
+            "Initial diagnostics pulls should report None at least"
         );
         assert_eq!(
             0,
@@ -2689,18 +2688,6 @@ async fn test_lsp_pull_diagnostics(cx_a: &mut TestAppContext, cx_b: &mut TestApp
         "After client lib.rs edits, the workspace diagnostics request should follow"
     );
     executor.run_until_parked();
-    {
-        assert_eq!(
-            2,
-            diagnostics_pulls_result_ids.lock().await.len(),
-            "One new id for a client's lib.rs pull"
-        );
-        assert_eq!(
-            2,
-            workspace_diagnostics_pulls_result_ids.lock().await.len(),
-            "Two more entries for 2 currently opened files that previously pulled the diagnostics"
-        );
-    }
 
     editor_b_main.update_in(cx_b, |editor, window, cx| {
         editor.move_to_end(&MoveToEnd, window, cx);
@@ -2720,14 +2707,6 @@ async fn test_lsp_pull_diagnostics(cx_a: &mut TestAppContext, cx_b: &mut TestApp
         "After client main.rs edits, the workspace diagnostics pull should follow"
     );
     executor.run_until_parked();
-    {
-        assert_eq!(
-            3,
-            diagnostics_pulls_result_ids.lock().await.len(),
-            "One new id for a client's main.rs pull"
-        );
-        assert_eq!(4, workspace_diagnostics_pulls_result_ids.lock().await.len());
-    }
 
     editor_a_main.update_in(cx_a, |editor, window, cx| {
         editor.move_to_end(&MoveToEnd, window, cx);
@@ -2747,9 +2726,17 @@ async fn test_lsp_pull_diagnostics(cx_a: &mut TestAppContext, cx_b: &mut TestApp
         "After host main.rs edits, the workspace diagnostics pull should follow"
     );
     executor.run_until_parked();
+    let diagnostic_pulls_result_ids = diagnostics_pulls_result_ids.lock().await.len();
+    let workspace_pulls_result_ids = workspace_diagnostics_pulls_result_ids.lock().await.len();
     {
-        assert_eq!(5, diagnostics_pulls_result_ids.lock().await.len());
-        assert_eq!(6, workspace_diagnostics_pulls_result_ids.lock().await.len());
+        assert!(
+            diagnostic_pulls_result_ids > 1,
+            "Should have sent result ids when pulling diagnostics"
+        );
+        assert!(
+            workspace_pulls_result_ids > 1,
+            "Should have sent result ids when pulling workspace diagnostics"
+        );
     }
 
     fake_language_server
@@ -2769,12 +2756,14 @@ async fn test_lsp_pull_diagnostics(cx_a: &mut TestAppContext, cx_b: &mut TestApp
         "Another workspace diagnostics pull should happen after the diagnostics refresh server request"
     );
     {
-        assert_eq!(
-            5,
-            diagnostics_pulls_result_ids.lock().await.len(),
+        assert!(
+            diagnostics_pulls_result_ids.lock().await.len() == diagnostic_pulls_result_ids,
             "Pulls should not happen hence no extra ids should appear"
         );
-        assert_eq!(8, workspace_diagnostics_pulls_result_ids.lock().await.len(),);
+        assert!(
+            workspace_diagnostics_pulls_result_ids.lock().await.len() > workspace_pulls_result_ids,
+            "More workspace diagnostics should be pulled"
+        );
     }
     editor_b_lib.update(cx_b, |editor, cx| {
         let snapshot = editor.buffer().read(cx).snapshot(cx);