Skip to content

Commit 7129b2f

Browse files
committed
Cover await_in_schedule InSchedule/Shutdown/SessionGone paths
1 parent eb68412 commit 7129b2f

4 files changed

Lines changed: 46 additions & 71 deletions

File tree

crates/hotfix/src/session.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ mod session_handle;
99
pub mod session_ref;
1010
mod state;
1111
#[cfg(test)]
12-
mod test_utils;
12+
pub(crate) mod test_utils;
1313

1414
use chrono::Utc;
1515
use hotfix_message::dict::Dictionary;

crates/hotfix/src/session/session_ref.rs

Lines changed: 12 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -111,45 +111,18 @@ impl From<oneshot::error::RecvError> for SessionGone {
111111
#[cfg(test)]
112112
mod tests {
113113
use super::*;
114-
use crate::message::Message;
115-
use crate::message::OutboundMessage;
116-
use crate::session::admin_request::AdminRequest;
117-
118-
#[derive(Clone, Debug, PartialEq)]
119-
struct TestMessage;
120-
121-
impl OutboundMessage for TestMessage {
122-
fn write(&self, _msg: &mut Message) {}
123-
fn message_type(&self) -> &str {
124-
"TEST"
125-
}
126-
}
127-
128-
fn create_test_session_ref() -> (
129-
InternalSessionRef<TestMessage>,
130-
mpsc::Receiver<SessionEvent>,
131-
) {
132-
let (event_sender, event_receiver) = mpsc::channel::<SessionEvent>(100);
133-
let (outbound_message_sender, _outbound_receiver) =
134-
mpsc::channel::<OutboundRequest<TestMessage>>(10);
135-
let (admin_request_sender, _admin_receiver) = mpsc::channel::<AdminRequest>(10);
136-
137-
let session_ref = InternalSessionRef {
138-
event_sender,
139-
outbound_message_sender,
140-
admin_request_sender,
141-
};
142-
143-
(session_ref, event_receiver)
144-
}
114+
use crate::session::test_utils::create_test_session_ref;
145115

146116
#[tokio::test]
147117
async fn await_in_schedule_returns_in_schedule_when_session_responds_in_schedule() {
148118
let (session_ref, mut event_receiver) = create_test_session_ref();
149119

150120
tokio::spawn(async move {
151-
if let Some(SessionEvent::AwaitSchedule(responder)) = event_receiver.recv().await {
152-
let _ = responder.send(ScheduleResponse::InSchedule);
121+
match event_receiver.recv().await {
122+
Some(SessionEvent::AwaitSchedule(responder)) => {
123+
let _ = responder.send(ScheduleResponse::InSchedule);
124+
}
125+
other => panic!("unexpected event: {other:?}"),
153126
}
154127
});
155128

@@ -162,8 +135,11 @@ mod tests {
162135
let (session_ref, mut event_receiver) = create_test_session_ref();
163136

164137
tokio::spawn(async move {
165-
if let Some(SessionEvent::AwaitSchedule(responder)) = event_receiver.recv().await {
166-
let _ = responder.send(ScheduleResponse::Shutdown);
138+
match event_receiver.recv().await {
139+
Some(SessionEvent::AwaitSchedule(responder)) => {
140+
let _ = responder.send(ScheduleResponse::Shutdown);
141+
}
142+
other => panic!("unexpected event: {other:?}"),
167143
}
168144
});
169145

@@ -177,6 +153,6 @@ mod tests {
177153
drop(event_receiver);
178154

179155
let result = session_ref.await_in_schedule().await;
180-
assert!(result.is_err());
156+
assert!(matches!(result, Err(SessionGone(_))));
181157
}
182158
}

crates/hotfix/src/session/test_utils.rs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
use crate::config::SessionConfig;
2+
use crate::message::{Message, OutboundMessage};
3+
use crate::session::admin_request::AdminRequest;
24
use crate::session::ctx::SessionCtx;
5+
use crate::session::event::SessionEvent;
6+
use crate::session::session_ref::{InternalSessionRef, OutboundRequest};
37
use crate::store::{MessageStore, Result as StoreResult};
48
use crate::transport::writer::{WriterMessage, WriterRef};
59
use chrono::{DateTime, Utc};
@@ -117,3 +121,31 @@ pub(crate) fn extract_field(raw: &[u8], tag: u32) -> Option<String> {
117121
}
118122
None
119123
}
124+
125+
#[derive(Clone)]
126+
pub(crate) struct TestMessage;
127+
128+
impl OutboundMessage for TestMessage {
129+
fn write(&self, _msg: &mut Message) {}
130+
fn message_type(&self) -> &str {
131+
"TEST"
132+
}
133+
}
134+
135+
pub(crate) fn create_test_session_ref() -> (
136+
InternalSessionRef<TestMessage>,
137+
mpsc::Receiver<SessionEvent>,
138+
) {
139+
let (event_sender, event_receiver) = mpsc::channel::<SessionEvent>(100);
140+
let (outbound_message_sender, _outbound_receiver) =
141+
mpsc::channel::<OutboundRequest<TestMessage>>(10);
142+
let (admin_request_sender, _admin_receiver) = mpsc::channel::<AdminRequest>(10);
143+
144+
let session_ref = InternalSessionRef {
145+
event_sender,
146+
outbound_message_sender,
147+
admin_request_sender,
148+
};
149+
150+
(session_ref, event_receiver)
151+
}

crates/hotfix/src/transport/socket/socket_reader.rs

Lines changed: 1 addition & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -84,42 +84,9 @@ where
8484
#[cfg(test)]
8585
mod tests {
8686
use super::*;
87-
use crate::message::Message;
88-
use crate::session::admin_request::AdminRequest;
8987
use crate::session::event::SessionEvent;
90-
use crate::session::session_ref::OutboundRequest;
88+
use crate::session::test_utils::create_test_session_ref;
9189
use tokio::io::{AsyncWriteExt, duplex};
92-
use tokio::sync::mpsc;
93-
94-
#[derive(Clone, Debug, PartialEq)]
95-
struct TestMessage;
96-
97-
impl OutboundMessage for TestMessage {
98-
fn write(&self, _msg: &mut Message) {}
99-
100-
fn message_type(&self) -> &str {
101-
"TEST"
102-
}
103-
}
104-
105-
/// Creates a test InternalSessionRef that captures events for verification
106-
fn create_test_session_ref() -> (
107-
InternalSessionRef<TestMessage>,
108-
mpsc::Receiver<SessionEvent>,
109-
) {
110-
let (event_sender, event_receiver) = mpsc::channel::<SessionEvent>(100);
111-
let (outbound_message_sender, _outbound_receiver) =
112-
mpsc::channel::<OutboundRequest<TestMessage>>(10);
113-
let (admin_request_sender, _admin_receiver) = mpsc::channel::<AdminRequest>(10);
114-
115-
let session_ref = InternalSessionRef {
116-
event_sender,
117-
outbound_message_sender,
118-
admin_request_sender,
119-
};
120-
121-
(session_ref, event_receiver)
122-
}
12390

12491
/// Test that the reader correctly parses a valid FIX message and sends it to the session
12592
/// for processing.

0 commit comments

Comments
 (0)