This source file includes following definitions.
- BOOST_AUTO_TEST_SUITE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_SUITE_END
- BOOST_AUTO_TEST_CASE_TEMPLATE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 #include "stdafx.h"
22
23 #define BOOST_TEST_MODULE libjmmcg_tests
24 #include <boost/test/included/unit_test.hpp>
25
26 #include <boost/test/test_case_template.hpp>
27 #include <boost/mpl/list.hpp>
28
29 #include "../exchanges/FIX/v5.0sp2/fix.hpp"
30 #include "../exchanges/BATSBOE/EU/v1/batsboe.hpp"
31 #include "../exchanges/BATSBOE/EU/v1/batsboe_sim.hpp"
32 #include "../exchanges/BATSBOE/EU/v2/batsboe.hpp"
33 #include "../exchanges/BATSBOE/EU/v2/batsboe_sim.hpp"
34 #include "../exchanges/BATSBOE/US/v1/batsboe.hpp"
35 #include "../exchanges/BATSBOE/US/v1/batsboe_sim.hpp"
36 #include "../exchanges/BATSBOE/US/v2/batsboe.hpp"
37 #include "../exchanges/BATSBOE/US/v2/batsboe_sim.hpp"
38 #include "../exchanges/conversions/fix_to_batsboe_eu_conversions.hpp"
39 #include "../exchanges/conversions/fix_to_batsboe_us_conversions.hpp"
40 #include "../exchanges/conversions/batsboe_eu_to_fix_conversions.hpp"
41 #include "../exchanges/conversions/batsboe_us_to_fix_conversions.hpp"
42
43 const boost::asio::ip::address localhost(boost::asio::ip::address_v4::loopback());
44 const unsigned short client_port=12377u;
45 const boost::asio::ip::address primary_gw(boost::asio::ip::address_v4::loopback());
46 const unsigned short unused_primary_port=client_port+1;
47 const uint32_t sequenceNumber(1);
48
49 typedef boost::mpl::list<
50 std::pair<isimud::exchanges::BATSBOE::EU::v1::link_t<isimud::exchanges::FIX::v5_0sp2::MsgTypes>, isimud::exchanges::BATSBOE::EU::v1::simulator_t>,
51
52 std::pair<isimud::exchanges::BATSBOE::US::v1::link_t<isimud::exchanges::FIX::v5_0sp2::MsgTypes>, isimud::exchanges::BATSBOE::US::v1::simulator_t>
53
54 > exchg_t_types;
55
56 template<class exchg_t>
57 struct only_sim {
58 using link_t=typename exchg_t::first_type;
59 using simulator_t=typename exchg_t::second_type;
60 using conn_pol_t=typename link_t::exchg_link_t::conn_pol_t;
61 using connection_t=isimud::exchanges::common::connection<typename simulator_t::msg_processor_t::msg_details_t, typename link_t::exchg_link_t::conn_pol_t>;
62
63 const conn_pol_t conn_pol{
64 typename conn_pol_t::gateways_t(
65 std::make_pair(primary_gw, unused_primary_port)
66 ),
67 isimud::exchanges::BATSBOE::common::logon_args_t{
68 0,
69 {"000"},
70 simulator_t::proc_rules_t::username,
71 simulator_t::proc_rules_t::password,
72 false
73 },
74 isimud::exchanges::BATSBOE::common::logoff_args_t{
75 sequenceNumber
76 }
77 };
78 simulator_t svr{primary_gw, unused_primary_port, typename simulator_t::proc_rules_t()};
79 };
80
81 template<class exchg_t>
82 struct simulator_and_link : public only_sim<exchg_t> {
83 using base_t=only_sim<exchg_t>;
84 using link_t=typename base_t::link_t;
85
86 link_t link{
87 typename link_t::client_link_t::ctor_args{
88 localhost,
89 client_port,
90 typename link_t::client_link_t::proc_rules_t()
91 },
92 this->conn_pol,
93 typename link_t::exchg_to_client_proc_rules_t()
94 };
95 };
96
97 template<class exchg_t>
98 struct simulator_and_link_client_too : public simulator_and_link<exchg_t> {
99 isimud::exchanges::FIX::v5_0sp2::connection_t client{
100 isimud::exchanges::FIX::v5_0sp2::connection_t::conn_pol_t(
101 typename isimud::exchanges::FIX::v5_0sp2::connection_t::conn_pol_t::gateways_t(
102 std::make_pair(localhost, client_port)
103 )
104 )
105 };
106 };
107
108 BOOST_AUTO_TEST_SUITE(exchanges)
109
110 BOOST_AUTO_TEST_SUITE(client_initiated)
111
112
113
114
115
116
117 BOOST_AUTO_TEST_CASE_TEMPLATE(logon_no_clients, exchg_t, exchg_t_types) {
118 using fixture_t=simulator_and_link<exchg_t>;
119
120 const fixture_t f{};
121
122 BOOST_CHECK(f.link.is_logged_on());
123 }
124
125
126
127
128
129
130 BOOST_AUTO_TEST_CASE_TEMPLATE(re_logon_no_clients, exchg_t, exchg_t_types) {
131 using fixture_t=only_sim<exchg_t>;
132
133 fixture_t f;
134
135 {
136 const typename fixture_t::link_t link{
137 typename fixture_t::link_t::client_link_t::ctor_args{
138 localhost,
139 client_port,
140 typename fixture_t::link_t::client_link_t::proc_rules_t()
141 },
142 f.conn_pol,
143 typename fixture_t::link_t::exchg_to_client_proc_rules_t()
144 };
145 BOOST_CHECK(link.is_logged_on());
146 }
147 {
148 const typename fixture_t::link_t link{
149 typename fixture_t::link_t::client_link_t::ctor_args{
150 localhost,
151 client_port,
152 typename fixture_t::link_t::client_link_t::proc_rules_t()
153 },
154 f.conn_pol,
155 typename fixture_t::link_t::exchg_to_client_proc_rules_t()
156 };
157 BOOST_CHECK(link.is_logged_on());
158 }
159 }
160
161
162
163
164
165
166 BOOST_AUTO_TEST_CASE_TEMPLATE(logon_with_a_client, exchg_t, exchg_t_types) {
167 using fixture_t=simulator_and_link<exchg_t>;
168
169 const fixture_t f{};
170
171 BOOST_CHECK(f.link.is_logged_on());
172 {
173 const isimud::exchanges::FIX::v5_0sp2::connection_t client(
174 isimud::exchanges::FIX::v5_0sp2::connection_t::conn_pol_t(
175 typename isimud::exchanges::FIX::v5_0sp2::connection_t::conn_pol_t::gateways_t(
176 std::make_pair(localhost, client_port)
177 )
178 )
179 );
180 BOOST_CHECK(f.link.is_logged_on());
181 }
182 BOOST_CHECK(f.link.is_logged_on());
183 }
184
185
186
187
188
189
190 BOOST_AUTO_TEST_CASE_TEMPLATE(re_connect_client_with_logon, exchg_t, exchg_t_types) {
191 using fixture_t=simulator_and_link<exchg_t>;
192
193 const fixture_t f{};
194
195 BOOST_CHECK(f.link.is_logged_on());
196 {
197 const isimud::exchanges::FIX::v5_0sp2::connection_t client(
198 isimud::exchanges::FIX::v5_0sp2::connection_t::conn_pol_t(
199 typename isimud::exchanges::FIX::v5_0sp2::connection_t::conn_pol_t::gateways_t(
200 std::make_pair(localhost, client_port)
201 )
202 )
203 );
204 BOOST_CHECK(f.link.is_logged_on());
205 }
206 BOOST_CHECK(f.link.is_logged_on());
207 {
208 const isimud::exchanges::FIX::v5_0sp2::connection_t client(
209 isimud::exchanges::FIX::v5_0sp2::connection_t::conn_pol_t(
210 typename isimud::exchanges::FIX::v5_0sp2::connection_t::conn_pol_t::gateways_t(
211 std::make_pair(localhost, client_port)
212 )
213 )
214 );
215 BOOST_CHECK(f.link.is_logged_on());
216 }
217 BOOST_CHECK(f.link.is_logged_on());
218 }
219
220
221
222
223
224
225 BOOST_AUTO_TEST_CASE_TEMPLATE(heartbeats_no_clients, exchg_t, exchg_t_types) {
226 using fixture_t=simulator_and_link<exchg_t>;
227
228 const fixture_t f{};
229
230 std::this_thread::sleep_for(std::chrono::seconds(fixture_t::simulator_t::svr_mgr_t::heartbeats_t::heartbeat_interval*(fixture_t::simulator_t::svr_mgr_t::heartbeats_t::max_missed_heartbeats+1)));
231 BOOST_CHECK(f.link.is_logged_on());
232 }
233
234
235
236
237
238
239 BOOST_AUTO_TEST_CASE_TEMPLATE(heartbeats_with_client, exchg_t, exchg_t_types) {
240 using fixture_t=simulator_and_link<exchg_t>;
241
242 const fixture_t f{};
243
244 std::this_thread::sleep_for(std::chrono::seconds(fixture_t::simulator_t::svr_mgr_t::heartbeats_t::heartbeat_interval*(fixture_t::simulator_t::svr_mgr_t::heartbeats_t::max_missed_heartbeats+1)));
245 BOOST_CHECK(f.link.is_logged_on());
246 }
247
248
249
250
251
252
253 BOOST_AUTO_TEST_CASE_TEMPLATE(reject, exchg_t, exchg_t_types) {
254 using fixture_t=simulator_and_link_client_too<exchg_t>;
255
256 fixture_t f;
257
258 BOOST_CHECK(f.link.is_logged_on());
259
260 const isimud::exchanges::FIX::common::underlying_fix_data_buffer fix_buffer={
261 "8=FIX.5.0\0019=154\00135=D\00134=10\00143=N\00149=VENDOR\00150=CUSTOME\00156=BROKER\00160=19980930-09:25:58\0011=XQCCFUND\00111=10\00121=1\00155=EK\00148=GB0000595859\00122=4\00154=1\00138=10000\00140=2\00144=76.750000\00159=0\00110=028\001"
262 };
263 isimud::exchanges::FIX::v5_0sp2::MsgTypes::NewOrderSingle const &fix_msg=reinterpret_cast<isimud::exchanges::FIX::v5_0sp2::MsgTypes::NewOrderSingle const &>(*fix_buffer.begin());
264 BOOST_CHECK_EQUAL(fix_msg.type(), isimud::exchanges::FIX::v5_0sp2::MsgTypes::NewOrderSingle::type_const);
265 BOOST_REQUIRE_NO_THROW(f.client.send(fix_msg));
266 BOOST_CHECK(f.link.is_logged_on());
267 isimud::exchanges::FIX::v5_0sp2::MsgTypes::OrderRejected receive_fix_msg;
268 BOOST_REQUIRE_NO_THROW(f.client.receive(receive_fix_msg));
269 BOOST_CHECK(receive_fix_msg.is_valid());
270 auto const ref_seq_num=receive_fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::RefSeqNum>();
271 BOOST_CHECK_EQUAL(std::string(ref_seq_num.first, ref_seq_num.second), "2");
272 BOOST_CHECK(f.link.is_logged_on());
273 }
274
275
276
277
278
279
280 BOOST_AUTO_TEST_CASE_TEMPLATE(cancel_reject, exchg_t, exchg_t_types) {
281 using fixture_t=simulator_and_link_client_too<exchg_t>;
282
283 fixture_t f;
284
285 BOOST_CHECK(f.link.is_logged_on());
286
287 const isimud::exchanges::FIX::common::underlying_fix_data_buffer fix_buffer={
288 "8=FIX.5.0\0019=141\00135=F\00111=10\00141=10\00148=GB00BH4HKS39\00149=VENDOR\00156=BROKER\00134=10\00152=20000426-12:05:06\00155=EK\00154=1\00160=19980930-09:25:58\00138=99\00140=1\00144=43.000000\00159=0\00110=101\001"
289 };
290 isimud::exchanges::FIX::v5_0sp2::MsgTypes::OrderCancelRequest const &fix_msg=reinterpret_cast<isimud::exchanges::FIX::v5_0sp2::MsgTypes::OrderCancelRequest const &>(*fix_buffer.begin());
291 BOOST_CHECK_EQUAL(fix_msg.type(), isimud::exchanges::FIX::v5_0sp2::MsgTypes::OrderCancelRequest::type_const);
292 BOOST_REQUIRE_NO_THROW(f.client.send(fix_msg));
293 BOOST_CHECK(f.link.is_logged_on());
294 isimud::exchanges::FIX::v5_0sp2::MsgTypes::BusinessMessageReject receive_fix_msg;
295 BOOST_REQUIRE_NO_THROW(f.client.receive(receive_fix_msg));
296 BOOST_CHECK(receive_fix_msg.is_valid());
297 auto const client_order_id=receive_fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::ClOrdID>();
298 BOOST_CHECK_EQUAL(std::string(client_order_id.first, client_order_id.second).c_str(), "10");
299 auto const seqNum=receive_fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::MsgSeqNum>();
300 BOOST_CHECK_EQUAL(std::string(seqNum.first, seqNum.second), "2");
301 BOOST_CHECK(f.link.is_logged_on());
302 }
303
304
305
306
307
308
309 BOOST_AUTO_TEST_CASE_TEMPLATE(cancel_accept, exchg_t, exchg_t_types) {
310 using fixture_t=simulator_and_link_client_too<exchg_t>;
311
312 fixture_t f;
313
314 const isimud::exchanges::FIX::common::underlying_fix_data_buffer order_fix_buffer={
315 "8=FIX.5.0\0019=151\00135=D\00134=10\00143=N\00149=VENDOR\00150=CUSTOME\00156=BROKER\00160=19980930-09:25:58\0011=XQCCFUND\00111=10\00121=1\00155=EK\00148=GB00BH4HKS39\00122=4\00154=1\00138=99\00140=2\00144=43.000000\00159=0\00110=136\001"
316 };
317 isimud::exchanges::FIX::v5_0sp2::MsgTypes::NewOrderSingle const &order_fix_msg=reinterpret_cast<isimud::exchanges::FIX::v5_0sp2::MsgTypes::NewOrderSingle const &>(*order_fix_buffer.begin());
318 BOOST_CHECK_EQUAL(order_fix_msg.type(), isimud::exchanges::FIX::v5_0sp2::MsgTypes::NewOrderSingle::type_const);
319 BOOST_CHECK(order_fix_msg.is_valid());
320 BOOST_REQUIRE_NO_THROW(f.client.send(order_fix_msg));
321 const isimud::exchanges::FIX::common::underlying_fix_data_buffer cancel_fix_buffer={
322 "8=FIX.5.0\0019=141\00135=F\00111=10\00141=10\00148=GB00BH4HKS39\00149=VENDOR\00156=BROKER\00134=10\00152=20000426-12:05:06\00155=EK\00154=1\00160=19980930-09:25:58\00138=99\00140=2\00144=43.000000\00159=0\00110=102\001"
323 };
324 isimud::exchanges::FIX::v5_0sp2::MsgTypes::OrderCancelRequest const &cancel_fix_msg=reinterpret_cast<isimud::exchanges::FIX::v5_0sp2::MsgTypes::OrderCancelRequest const &>(*cancel_fix_buffer.begin());
325 BOOST_REQUIRE_NO_THROW(f.client.send(cancel_fix_msg));
326 isimud::exchanges::FIX::v5_0sp2::MsgTypes::ExecutionReport receive_fix_msg;
327 BOOST_REQUIRE_NO_THROW(f.client.receive(receive_fix_msg));
328 BOOST_CHECK(receive_fix_msg.is_valid());
329 auto const client_order_id=receive_fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::ClOrdID>();
330 BOOST_CHECK_EQUAL(std::string(client_order_id.first, client_order_id.second).c_str(), "10");
331 auto const seqNum=receive_fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::MsgSeqNum>();
332 BOOST_CHECK_EQUAL(std::string(seqNum.first, seqNum.second), "3");
333 auto const price=receive_fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::Price>();
334 BOOST_CHECK_EQUAL(std::string(price.first, price.second), "43.000000");
335 auto const side=receive_fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::Side>();
336 BOOST_CHECK_EQUAL(std::string(side.first, side.second), "1");
337 auto const orderQty=receive_fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::OrderQty>();
338 BOOST_CHECK_EQUAL(std::string(orderQty.first, orderQty.second), "99");
339 auto const leavesQty=receive_fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::LeavesQty>();
340 BOOST_CHECK_EQUAL(std::string(leavesQty.first, leavesQty.second), "99");
341 BOOST_CHECK(f.link.is_logged_on());
342 }
343
344
345
346
347
348
349 BOOST_AUTO_TEST_CASE_TEMPLATE(modify_reject, exchg_t, exchg_t_types) {
350 using fixture_t=simulator_and_link_client_too<exchg_t>;
351
352 fixture_t f;
353
354 const isimud::exchanges::FIX::common::underlying_fix_data_buffer fix_buffer={
355 "8=FIX.5.0\0019=141\00135=G\00111=10\00141=10\00148=GB00BH4HKS39\00149=VENDOR\00156=BROKER\00134=10\00152=20000426-12:05:06\00155=EK\00154=1\00160=19980930-09:25:58\00138=99\00140=1\00144=43.000000\00159=0\00110=102\001"
356 };
357 isimud::exchanges::FIX::v5_0sp2::MsgTypes::OrderCancelReplace const &fix_msg=reinterpret_cast<isimud::exchanges::FIX::v5_0sp2::MsgTypes::OrderCancelReplace const &>(*fix_buffer.begin());
358 BOOST_CHECK_EQUAL(fix_msg.type(), isimud::exchanges::FIX::v5_0sp2::MsgTypes::OrderCancelReplace::type_const);
359 BOOST_CHECK(fix_msg.is_valid());
360 BOOST_REQUIRE_NO_THROW(f.client.send(fix_msg));
361 isimud::exchanges::FIX::v5_0sp2::MsgTypes::BusinessMessageReject receive_fix_msg;
362 BOOST_REQUIRE_NO_THROW(f.client.receive(receive_fix_msg));
363 BOOST_CHECK(receive_fix_msg.is_valid());
364 auto const client_order_id=receive_fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::ClOrdID>();
365 BOOST_CHECK_EQUAL(std::string(client_order_id.first, client_order_id.second).c_str(), "10");
366 auto const seqNum=receive_fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::MsgSeqNum>();
367 BOOST_CHECK_EQUAL(std::string(seqNum.first, seqNum.second), "2");
368 BOOST_CHECK(f.link.is_logged_on());
369 }
370
371 BOOST_AUTO_TEST_SUITE_END()
372
373 BOOST_AUTO_TEST_SUITE(new_order)
374
375 BOOST_AUTO_TEST_SUITE(buy)
376
377 BOOST_AUTO_TEST_SUITE(day)
378
379
380
381
382
383
384 BOOST_AUTO_TEST_CASE_TEMPLATE(market_fill, exchg_t, exchg_t_types) {
385 using fixture_t=simulator_and_link_client_too<exchg_t>;
386
387 fixture_t f;
388
389 const isimud::exchanges::FIX::common::underlying_fix_data_buffer fix_buffer={
390 "8=FIX.5.0\0019=151\00135=D\00134=10\00143=N\00149=VENDOR\00150=CUSTOME\00156=BROKER\00160=19980930-09:25:58\0011=XQCCFUND\00111=10\00121=1\00155=EK\00148=GB00BH4HKS39\00122=4\00154=1\00138=99\00140=1\00144=41.000000\00159=0\00110=133\001"
391 };
392 isimud::exchanges::FIX::v5_0sp2::MsgTypes::NewOrderSingle const &fix_msg=reinterpret_cast<isimud::exchanges::FIX::v5_0sp2::MsgTypes::NewOrderSingle const &>(*fix_buffer.begin());
393 BOOST_CHECK_EQUAL(fix_msg.type(), isimud::exchanges::FIX::v5_0sp2::MsgTypes::NewOrderSingle::type_const);
394 BOOST_CHECK(fix_msg.is_valid());
395 BOOST_REQUIRE_NO_THROW(f.client.send(fix_msg));
396 isimud::exchanges::FIX::v5_0sp2::MsgTypes::ExecutionReport receive_fix_msg;
397 BOOST_REQUIRE_NO_THROW(f.client.receive(receive_fix_msg));
398 BOOST_CHECK(receive_fix_msg.is_valid());
399 auto const client_order_id=receive_fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::ClOrdID>();
400 BOOST_CHECK_EQUAL(std::string(client_order_id.first, client_order_id.second).c_str(), "10");
401 auto const seqNum=receive_fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::MsgSeqNum>();
402 BOOST_CHECK_EQUAL(std::string(seqNum.first, seqNum.second), "2");
403 auto const securityIDSource=receive_fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::SecurityIDSource>();
404 BOOST_CHECK_EQUAL(std::string(securityIDSource.first, securityIDSource.second), "4");
405 auto const securityID=receive_fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::SecurityID>();
406 BOOST_CHECK_EQUAL(std::string(securityID.first), "GB00BH4HKS39");
407 auto const price=receive_fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::Price>();
408 BOOST_CHECK_EQUAL(std::string(price.first, price.second), "41.000000");
409 auto const side=receive_fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::Side>();
410 BOOST_CHECK_EQUAL(std::string(side.first, side.second), "1");
411 auto const orderQty=receive_fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::OrderQty>();
412 BOOST_CHECK_EQUAL(std::string(orderQty.first, orderQty.second), "99");
413 auto const leavesQty=receive_fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::LeavesQty>();
414 BOOST_CHECK_EQUAL(std::string(leavesQty.first, leavesQty.second), "0");
415 }
416
417
418
419
420
421
422 BOOST_AUTO_TEST_CASE_TEMPLATE(market_partial_fill, exchg_t, exchg_t_types) {
423 using fixture_t=simulator_and_link_client_too<exchg_t>;
424
425 fixture_t f;
426
427 const isimud::exchanges::FIX::common::underlying_fix_data_buffer fix_buffer={
428 "8=FIX.5.0\0019=152\00135=D\00134=10\00143=N\00149=VENDOR\00150=CUSTOME\00156=BROKER\00160=19980930-09:25:58\0011=XQCCFUND\00111=10\00121=1\00155=EK\00148=GB00BH4HKS39\00122=4\00154=1\00138=101\00140=1\00144=41.000000\00159=0\00110=166\001"
429 };
430 isimud::exchanges::FIX::v5_0sp2::MsgTypes::NewOrderSingle const &fix_msg=reinterpret_cast<isimud::exchanges::FIX::v5_0sp2::MsgTypes::NewOrderSingle const &>(*fix_buffer.begin());
431 BOOST_CHECK_EQUAL(fix_msg.type(), isimud::exchanges::FIX::v5_0sp2::MsgTypes::NewOrderSingle::type_const);
432 BOOST_CHECK(fix_msg.is_valid());
433 BOOST_REQUIRE_NO_THROW(f.client.send(fix_msg));
434 isimud::exchanges::FIX::v5_0sp2::MsgTypes::ExecutionReport receive_fix_msg;
435 BOOST_REQUIRE_NO_THROW(f.client.receive(receive_fix_msg));
436 BOOST_CHECK(receive_fix_msg.is_valid());
437 auto const client_order_id=receive_fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::ClOrdID>();
438 BOOST_CHECK_EQUAL(std::string(client_order_id.first, client_order_id.second).c_str(), "10");
439 auto const seqNum=receive_fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::MsgSeqNum>();
440 BOOST_CHECK_EQUAL(std::string(seqNum.first, seqNum.second), "2");
441 auto const securityIDSource=receive_fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::SecurityIDSource>();
442 BOOST_CHECK_EQUAL(std::string(securityIDSource.first, securityIDSource.second), "4");
443 auto const securityID=receive_fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::SecurityID>();
444 BOOST_CHECK_EQUAL(std::string(securityID.first), "GB00BH4HKS39");
445 auto const price=receive_fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::Price>();
446 BOOST_CHECK_EQUAL(std::string(price.first, price.second), "42.000000");
447 auto const side=receive_fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::Side>();
448 BOOST_CHECK_EQUAL(std::string(side.first, side.second), "1");
449 auto const orderQty=receive_fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::OrderQty>();
450 BOOST_CHECK_EQUAL(std::string(orderQty.first, orderQty.second), "100");
451 auto const leavesQty=receive_fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::LeavesQty>();
452 BOOST_CHECK_EQUAL(std::string(leavesQty.first, leavesQty.second), "1");
453 }
454
455 BOOST_AUTO_TEST_SUITE_END()
456
457 BOOST_AUTO_TEST_SUITE_END()
458
459 BOOST_AUTO_TEST_SUITE_END()
460
461 BOOST_AUTO_TEST_SUITE_END()