From 1ffd87b87e9ee006fb4fafb516831ded4af7aa21 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Mon, 24 Jun 2024 20:36:05 -0600 Subject: [PATCH] Fix dev server projects reconnect (#13484) Release Notes: - Improved handling of client reconnects for dev-servers (alpha group only) --- crates/collab/src/rpc.rs | 7 +++---- crates/collab/src/rpc/connection_pool.rs | 1 + crates/collab/src/tests/dev_server_tests.rs | 23 +++++++++++++++++++++ 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/crates/collab/src/rpc.rs b/crates/collab/src/rpc.rs index af2a0f2553..fb2788a381 100644 --- a/crates/collab/src/rpc.rs +++ b/crates/collab/src/rpc.rs @@ -2583,14 +2583,13 @@ async fn rejoin_dev_server_projects( ) .await? }; - notify_rejoined_projects(&mut rejoined_projects, &session)?; - response.send(proto::RejoinRemoteProjectsResponse { rejoined_projects: rejoined_projects - .into_iter() + .iter() .map(|project| project.to_proto()) .collect(), - }) + })?; + notify_rejoined_projects(&mut rejoined_projects, &session) } async fn reconnect_dev_server( diff --git a/crates/collab/src/rpc/connection_pool.rs b/crates/collab/src/rpc/connection_pool.rs index 197e82af98..c8d4c3ca81 100644 --- a/crates/collab/src/rpc/connection_pool.rs +++ b/crates/collab/src/rpc/connection_pool.rs @@ -73,6 +73,7 @@ impl ConnectionPool { pub fn reset(&mut self) { self.connections.clear(); self.connected_users.clear(); + self.connected_dev_servers.clear(); self.channels.clear(); } diff --git a/crates/collab/src/tests/dev_server_tests.rs b/crates/collab/src/tests/dev_server_tests.rs index 932d5a5593..f24e51a5cc 100644 --- a/crates/collab/src/tests/dev_server_tests.rs +++ b/crates/collab/src/tests/dev_server_tests.rs @@ -504,6 +504,29 @@ async fn test_dev_server_reconnect( .unwrap(); } +#[gpui::test] +async fn test_dev_server_restart(cx1: &mut gpui::TestAppContext, cx2: &mut gpui::TestAppContext) { + let (server, client1) = TestServer::start1(cx1).await; + + let (_dev_server, remote_workspace) = + create_dev_server_project(&server, client1.app_state.clone(), cx1, cx2).await; + let cx = VisualTestContext::from_window(remote_workspace.into(), cx1).as_mut(); + + server.reset().await; + cx.run_until_parked(); + + cx.simulate_keystrokes("cmd-p 1 enter"); + remote_workspace + .update(cx, |ws, cx| { + ws.active_item_as::(cx) + .unwrap() + .update(cx, |ed, cx| { + assert_eq!(ed.text(cx).to_string(), "remote\nremote\nremote"); + }) + }) + .unwrap(); +} + #[gpui::test] async fn test_create_dev_server_project_path_validation( cx1: &mut gpui::TestAppContext,