Skip to content

Commit 99e486d

Browse files
committed
Create test_utils to house helpers for session unit tests
1 parent fcab23a commit 99e486d

3 files changed

Lines changed: 73 additions & 70 deletions

File tree

crates/hotfix/src/session.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ mod outbound;
88
mod session_handle;
99
pub mod session_ref;
1010
mod state;
11+
#[cfg(test)]
12+
mod test_utils;
1113

1214
use chrono::Utc;
1315
use hotfix_message::dict::Dictionary;

crates/hotfix/src/session/outbound.rs

Lines changed: 1 addition & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -131,78 +131,9 @@ fn log_skipped_admin_messages(begin: u64, end: u64) {
131131
#[cfg(test)]
132132
mod tests {
133133
use super::*;
134-
use crate::config::SessionConfig;
135-
use crate::session::ctx::SessionCtx;
136-
use crate::store::Result as StoreResult;
137-
use chrono::{DateTime, Utc};
138-
use hotfix_message::MessageBuilder;
139-
use hotfix_message::dict::Dictionary;
140-
use hotfix_message::message::Config as MessageConfig;
134+
use crate::session::test_utils::*;
141135
use tokio::sync::mpsc;
142136

143-
#[derive(Clone)]
144-
struct GarbledMessageStore {
145-
messages: Vec<Vec<u8>>,
146-
}
147-
148-
#[async_trait::async_trait]
149-
impl MessageStore for GarbledMessageStore {
150-
async fn add(&mut self, _: u64, _: &[u8]) -> StoreResult<()> {
151-
Ok(())
152-
}
153-
async fn get_slice(&self, _: usize, _: usize) -> StoreResult<Vec<Vec<u8>>> {
154-
Ok(self.messages.clone())
155-
}
156-
fn next_sender_seq_number(&self) -> u64 {
157-
1
158-
}
159-
fn next_target_seq_number(&self) -> u64 {
160-
1
161-
}
162-
async fn increment_sender_seq_number(&mut self) -> StoreResult<()> {
163-
Ok(())
164-
}
165-
async fn increment_target_seq_number(&mut self) -> StoreResult<()> {
166-
Ok(())
167-
}
168-
async fn set_target_seq_number(&mut self, _: u64) -> StoreResult<()> {
169-
Ok(())
170-
}
171-
async fn reset(&mut self) -> StoreResult<()> {
172-
Ok(())
173-
}
174-
fn creation_time(&self) -> DateTime<Utc> {
175-
Utc::now()
176-
}
177-
}
178-
179-
fn create_test_ctx(store: GarbledMessageStore) -> SessionCtx<(), GarbledMessageStore> {
180-
let message_config = MessageConfig::default();
181-
let dictionary = Dictionary::fix44();
182-
let message_builder = MessageBuilder::new(dictionary, message_config).unwrap();
183-
SessionCtx {
184-
config: SessionConfig {
185-
begin_string: "FIX.4.4".to_string(),
186-
sender_comp_id: "SENDER".to_string(),
187-
target_comp_id: "TARGET".to_string(),
188-
data_dictionary_path: None,
189-
connection_host: "localhost".to_string(),
190-
connection_port: 9876,
191-
tls_config: None,
192-
heartbeat_interval: 30,
193-
logon_timeout: 10,
194-
logout_timeout: 2,
195-
reconnect_interval: 30,
196-
reset_on_logon: false,
197-
schedule: None,
198-
},
199-
store,
200-
application: (),
201-
message_builder,
202-
message_config,
203-
}
204-
}
205-
206137
#[tokio::test]
207138
async fn resend_messages_returns_error_for_garbled_stored_message() {
208139
let store = GarbledMessageStore {
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
use crate::config::SessionConfig;
2+
use crate::session::ctx::SessionCtx;
3+
use crate::store::{MessageStore, Result as StoreResult};
4+
use chrono::{DateTime, Utc};
5+
use hotfix_message::MessageBuilder;
6+
use hotfix_message::dict::Dictionary;
7+
use hotfix_message::message::Config as MessageConfig;
8+
9+
#[derive(Clone)]
10+
pub(crate) struct GarbledMessageStore {
11+
pub(crate) messages: Vec<Vec<u8>>,
12+
}
13+
14+
#[async_trait::async_trait]
15+
impl MessageStore for GarbledMessageStore {
16+
async fn add(&mut self, _: u64, _: &[u8]) -> StoreResult<()> {
17+
Ok(())
18+
}
19+
async fn get_slice(&self, _: usize, _: usize) -> StoreResult<Vec<Vec<u8>>> {
20+
Ok(self.messages.clone())
21+
}
22+
fn next_sender_seq_number(&self) -> u64 {
23+
1
24+
}
25+
fn next_target_seq_number(&self) -> u64 {
26+
1
27+
}
28+
async fn increment_sender_seq_number(&mut self) -> StoreResult<()> {
29+
Ok(())
30+
}
31+
async fn increment_target_seq_number(&mut self) -> StoreResult<()> {
32+
Ok(())
33+
}
34+
async fn set_target_seq_number(&mut self, _: u64) -> StoreResult<()> {
35+
Ok(())
36+
}
37+
async fn reset(&mut self) -> StoreResult<()> {
38+
Ok(())
39+
}
40+
fn creation_time(&self) -> DateTime<Utc> {
41+
Utc::now()
42+
}
43+
}
44+
45+
pub(crate) fn create_test_ctx(store: GarbledMessageStore) -> SessionCtx<(), GarbledMessageStore> {
46+
let message_config = MessageConfig::default();
47+
let dictionary = Dictionary::fix44();
48+
let message_builder = MessageBuilder::new(dictionary, message_config).unwrap();
49+
SessionCtx {
50+
config: SessionConfig {
51+
begin_string: "FIX.4.4".to_string(),
52+
sender_comp_id: "SENDER".to_string(),
53+
target_comp_id: "TARGET".to_string(),
54+
data_dictionary_path: None,
55+
connection_host: "localhost".to_string(),
56+
connection_port: 9876,
57+
tls_config: None,
58+
heartbeat_interval: 30,
59+
logon_timeout: 10,
60+
logout_timeout: 2,
61+
reconnect_interval: 30,
62+
reset_on_logon: false,
63+
schedule: None,
64+
},
65+
store,
66+
application: (),
67+
message_builder,
68+
message_config,
69+
}
70+
}

0 commit comments

Comments
 (0)