Skip to content

Commit f83403a

Browse files
authoredMar 27, 2024
RUST-1792 Test order of heartbeat events (mongodb#1056)
1 parent 34ae89b commit f83403a

File tree

2 files changed

+65
-2
lines changed

2 files changed

+65
-2
lines changed
 

‎rustfmt.toml

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
edition = "2018"
1+
edition = "2021"
22
combine_control_expr = false
33
comment_width = 100
44
condense_wildcard_suffixes = true
55
format_strings = true
6-
normalize_comments = true
76
use_try_shorthand = true
87
wrap_comments = true
98
imports_layout = "HorizontalVertical"

‎src/test/spec/sdam.rs

+64
Original file line numberDiff line numberDiff line change
@@ -232,3 +232,67 @@ async fn rtt_is_updated() {
232232
.await
233233
.unwrap();
234234
}
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

Comments
 (0)
Please sign in to comment.