@@ -232,3 +232,67 @@ async fn rtt_is_updated() {
232
232
. await
233
233
. unwrap ( ) ;
234
234
}
235
+
236
+ /* TODO RUST-1895 enable this
237
+ #[tokio::test(flavor = "multi_thread")]
238
+ async fn heartbeat_started_before_socket() {
239
+ use std::sync::{Arc, Mutex};
240
+ use tokio::{io::AsyncReadExt, net::TcpListener};
241
+
242
+ #[derive(Debug, PartialEq)]
243
+ enum Event {
244
+ ClientConnected,
245
+ ClientHelloReceived,
246
+ HeartbeatStarted,
247
+ HeartbeatFailed,
248
+ }
249
+ let events: Arc<Mutex<Vec<Event>>> = Arc::new(Mutex::new(vec![]));
250
+
251
+ // Mock server
252
+ {
253
+ let listener = TcpListener::bind("127.0.0.1:9999").await.unwrap();
254
+ let events = Arc::clone(&events);
255
+ tokio::spawn(async move {
256
+ loop {
257
+ let (mut socket, _) = listener.accept().await.unwrap();
258
+ events.lock().unwrap().push(Event::ClientConnected);
259
+ let mut buf = [0; 1024];
260
+ let _ = socket.read(&mut buf).await.unwrap();
261
+ events.lock().unwrap().push(Event::ClientHelloReceived);
262
+ }
263
+ });
264
+ }
265
+
266
+ // Client setup
267
+ let mut options = ClientOptions::parse("mongodb://127.0.0.1:9999/")
268
+ .await
269
+ .unwrap();
270
+ options.server_selection_timeout = Some(Duration::from_millis(500));
271
+ {
272
+ let events = Arc::clone(&events);
273
+ options.sdam_event_handler =
274
+ Some(crate::event::EventHandler::callback(move |ev| match ev {
275
+ SdamEvent::ServerHeartbeatStarted(_) => {
276
+ events.lock().unwrap().push(Event::HeartbeatStarted)
277
+ }
278
+ SdamEvent::ServerHeartbeatFailed(_) => {
279
+ events.lock().unwrap().push(Event::HeartbeatFailed)
280
+ }
281
+ _ => (),
282
+ }));
283
+ }
284
+ let client = Client::with_options(options).unwrap();
285
+
286
+ // Test event order
287
+ let _ = client.list_database_names().await;
288
+ assert_eq!(
289
+ &[
290
+ Event::HeartbeatStarted,
291
+ Event::ClientConnected,
292
+ Event::ClientHelloReceived,
293
+ Event::HeartbeatFailed
294
+ ],
295
+ &events.lock().unwrap()[0..4],
296
+ );
297
+ }
298
+ */
0 commit comments