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_SUITE_END
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- BOOST_AUTO_TEST_CASE_TEMPLATE
- 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/messages.hpp"
30
31 typedef boost::mpl::list<
32 isimud::exchanges::FIX::v5_0sp2::MsgTypes
33 > msg_types;
34
35 BOOST_AUTO_TEST_SUITE(exchanges)
36
37 BOOST_AUTO_TEST_SUITE(admin)
38
39 BOOST_AUTO_TEST_CASE_TEMPLATE(print_details, msg, msg_types) {
40 std::stringstream ss;
41 BOOST_CHECK_NO_THROW(msg::to_stream(ss));
42 BOOST_CHECK(!ss.str().empty());
43 }
44
45 BOOST_AUTO_TEST_CASE_TEMPLATE(logon, msg, msg_types) {
46 const isimud::exchanges::FIX::common::underlying_fix_data_buffer fix_buffer={
47 "8=FIX.5.0\0019=099\00135=A\00149=SENDER\00156=TARGET\00134=1\00152=20000426-12:05:06\00198=0\001108=30\001553=USER\001554=PASSWORD\001925=NEWPASSWD\00110=255\001"
48 };
49 isimud::exchanges::FIX::v5_0sp2::MsgTypes::LogonRequest const &fix_msg=reinterpret_cast<isimud::exchanges::FIX::v5_0sp2::MsgTypes::LogonRequest const &>(*fix_buffer.begin());
50 BOOST_CHECK_EQUAL(fix_msg.length(), std::strlen(fix_buffer.begin()));
51 BOOST_CHECK(fix_msg.is_valid());
52 auto const usr=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::Username>();
53 BOOST_CHECK_EQUAL(std::string(usr.first, usr.second), "USER");
54 auto const pass=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::Password>();
55 BOOST_CHECK_EQUAL(std::string(pass.first, pass.second), "PASSWORD");
56 }
57
58 BOOST_AUTO_TEST_CASE_TEMPLATE(LogoutRequest, msg, msg_types) {
59 const isimud::exchanges::FIX::common::underlying_fix_data_buffer fix_buffer={
60 "8=FIX.5.0\0019=005\00135=5\00110=093\001"
61 };
62 isimud::exchanges::FIX::v5_0sp2::MsgTypes::LogoutRequest const &fix_msg=reinterpret_cast<isimud::exchanges::FIX::v5_0sp2::MsgTypes::LogoutRequest const &>(*fix_buffer.begin());
63 BOOST_CHECK(fix_msg.is_valid());
64 BOOST_CHECK_EQUAL(fix_msg.length(), std::strlen(fix_buffer.begin()));
65 }
66
67 BOOST_AUTO_TEST_CASE_TEMPLATE(hearbeat, msg, msg_types) {
68 const isimud::exchanges::FIX::common::underlying_fix_data_buffer fix_buffer={
69 "8=FIX.5.0\0019=005\00135=0\00110=093\001"
70 };
71 isimud::exchanges::FIX::v5_0sp2::MsgTypes::ClientHeartbeat const &fix_msg=reinterpret_cast<isimud::exchanges::FIX::v5_0sp2::MsgTypes::ClientHeartbeat const &>(*fix_buffer.begin());
72 BOOST_CHECK(fix_msg.is_valid());
73 BOOST_CHECK_EQUAL(fix_msg.length(), std::strlen(fix_buffer.begin()));
74 }
75
76 BOOST_AUTO_TEST_SUITE_END()
77
78 BOOST_AUTO_TEST_SUITE(trade)
79
80 BOOST_AUTO_TEST_CASE_TEMPLATE(new_order, msg, msg_types) {
81 const isimud::exchanges::FIX::common::underlying_fix_data_buffer fix_buffer={
82 "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=GB00BH4HKS39\00122=4\00154=1\00138=10000\00140=2\00144=76.750000\00159=0\00110=028\001"
83 };
84 isimud::exchanges::FIX::v5_0sp2::MsgTypes::NewOrderSingle const &fix_msg=reinterpret_cast<isimud::exchanges::FIX::v5_0sp2::MsgTypes::NewOrderSingle const &>(*fix_buffer.begin());
85 BOOST_CHECK(fix_msg.is_valid());
86 BOOST_CHECK_EQUAL(fix_msg.length(), std::strlen(fix_buffer.begin()));
87 auto const client_order_id=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::ClOrdID>();
88 BOOST_CHECK_EQUAL(std::string(client_order_id.first, client_order_id.second), "10");
89 auto const symbol=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::Symbol>();
90 BOOST_CHECK_EQUAL(std::string(symbol.first, symbol.second), "EK");
91 auto const side=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::Side>();
92 BOOST_CHECK_EQUAL(std::string(side.first, side.second), "1");
93 auto const transact_time=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::TransactTime>();
94 BOOST_CHECK_EQUAL(std::string(transact_time.first, transact_time.second), "19980930-09:25:58");
95 auto const order_qty=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::OrderQty>();
96 BOOST_CHECK_EQUAL(std::string(order_qty.first, order_qty.second), "10000");
97 auto const ord_type=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::OrdType>();
98 BOOST_CHECK_EQUAL(std::string(ord_type.first, ord_type.second), "2");
99 auto const sec_id_src_type=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::SecurityIDSource>();
100 BOOST_CHECK_EQUAL(std::string(sec_id_src_type.first, sec_id_src_type.second), "4");
101 auto const sec_id_type=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::SecurityID>();
102 BOOST_CHECK_EQUAL(std::string(sec_id_type.first, sec_id_type.second), "GB00BH4HKS39");
103 }
104
105 BOOST_AUTO_TEST_CASE_TEMPLATE(order_cancel, msg, msg_types) {
106 const isimud::exchanges::FIX::common::underlying_fix_data_buffer fix_buffer={
107 "8=FIX.5.0\0019=057\00135=F\00111=10\00155=CUSTOME\00154=1\00160=19980930-09:25:58\00138=10000\00110=240\001"
108 };
109 isimud::exchanges::FIX::v5_0sp2::MsgTypes::OrderCancelRequest const &fix_msg=reinterpret_cast<isimud::exchanges::FIX::v5_0sp2::MsgTypes::OrderCancelRequest const &>(*fix_buffer.begin());
110 BOOST_CHECK(fix_msg.is_valid());
111 BOOST_CHECK_EQUAL(fix_msg.length(), std::strlen(fix_buffer.begin()));
112 auto const client_order_id=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::ClOrdID>();
113 BOOST_CHECK_EQUAL(std::string(client_order_id.first, client_order_id.second), "10");
114 auto const symbol=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::Symbol>();
115 BOOST_CHECK_EQUAL(std::string(symbol.first, symbol.second), "CUSTOME");
116 auto const side=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::Side>();
117 BOOST_CHECK_EQUAL(std::string(side.first, side.second), "1");
118 auto const transact_time=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::TransactTime>();
119 BOOST_CHECK_EQUAL(std::string(transact_time.first, transact_time.second), "19980930-09:25:58");
120 auto const order_qty=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::OrderQty>();
121 BOOST_CHECK_EQUAL(std::string(order_qty.first, order_qty.second), "10000");
122 }
123
124 BOOST_AUTO_TEST_CASE_TEMPLATE(order_cancel_replace, msg, msg_types) {
125 const isimud::exchanges::FIX::common::underlying_fix_data_buffer fix_buffer={
126 "8=FIX.5.0\0019=104\00135=G\00111=10\00149=VENDOR\00156=BROKER\00134=10\00152=20000426-12:05:06\00155=EK\00154=1\00160=19980930-09:25:58\00138=10000\00140=2\00110=014\001"
127 };
128 isimud::exchanges::FIX::v5_0sp2::MsgTypes::OrderCancelReplace const &fix_msg=reinterpret_cast<isimud::exchanges::FIX::v5_0sp2::MsgTypes::OrderCancelReplace const &>(*fix_buffer.begin());
129 BOOST_CHECK(fix_msg.is_valid());
130 BOOST_CHECK_EQUAL(fix_msg.length(), std::strlen(fix_buffer.begin()));
131 auto const senderCompID=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::SenderCompID>();
132 BOOST_CHECK_EQUAL(std::string(senderCompID.first, senderCompID.second), "VENDOR");
133 auto const targetCompID=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::TargetCompID>();
134 BOOST_CHECK_EQUAL(std::string(targetCompID.first, targetCompID.second), "BROKER");
135 auto const msgSeqNum=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::MsgSeqNum>();
136 BOOST_CHECK_EQUAL(std::string(msgSeqNum.first, msgSeqNum.second), "10");
137 auto const sendingTime=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::SendingTime>();
138 BOOST_CHECK_EQUAL(std::string(sendingTime.first, sendingTime.second), "20000426-12:05:06");
139 auto const client_order_id=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::ClOrdID>();
140 BOOST_CHECK_EQUAL(std::string(client_order_id.first, client_order_id.second), "10");
141 auto const symbol=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::Symbol>();
142 BOOST_CHECK_EQUAL(std::string(symbol.first, symbol.second), "EK");
143 auto const side=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::Side>();
144 BOOST_CHECK_EQUAL(std::string(side.first, side.second), "1");
145 auto const transact_time=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::TransactTime>();
146 BOOST_CHECK_EQUAL(std::string(transact_time.first, transact_time.second), "19980930-09:25:58");
147 auto const order_qty=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::OrderQty>();
148 BOOST_CHECK_EQUAL(std::string(order_qty.first, order_qty.second), "10000");
149 auto const ordType=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::OrdType>();
150 BOOST_CHECK_EQUAL(std::string(ordType.first, ordType.second), "2");
151 }
152
153 BOOST_AUTO_TEST_CASE_TEMPLATE(order_reject, msg, msg_types) {
154 const isimud::exchanges::FIX::common::underlying_fix_data_buffer fix_buffer={
155 "8=FIX.5.0\0019=011\00135=3\00145=10\00110=105\001"
156 };
157 isimud::exchanges::FIX::v5_0sp2::MsgTypes::OrderRejected const &fix_msg=reinterpret_cast<isimud::exchanges::FIX::v5_0sp2::MsgTypes::OrderRejected const &>(*fix_buffer.begin());
158 BOOST_CHECK(fix_msg.is_valid());
159 BOOST_CHECK_EQUAL(fix_msg.length(), std::strlen(fix_buffer.begin()));
160 auto const ref_seq_num=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::RefSeqNum>();
161 BOOST_CHECK_EQUAL(std::string(ref_seq_num.first, ref_seq_num.second), "10");
162 }
163
164 BOOST_AUTO_TEST_CASE_TEMPLATE(execution_report, msg, msg_types) {
165 const isimud::exchanges::FIX::common::underlying_fix_data_buffer fix_buffer={
166 "8=FIX.5.0\0019=083\00135=8\00134=2\00111=10\0019=078\00135=8\00134=2\00111=10\00122=4\00148=GB00BH4HKS39\001150=0\00144=42.000000\00154=1\00110=190\001"
167 };
168 isimud::exchanges::FIX::v5_0sp2::MsgTypes::ExecutionReport const &fix_msg=reinterpret_cast<isimud::exchanges::FIX::v5_0sp2::MsgTypes::ExecutionReport const &>(*fix_buffer.begin());
169 BOOST_CHECK(fix_msg.is_valid());
170 BOOST_CHECK_EQUAL(fix_msg.length(), std::strlen(fix_buffer.begin()));
171 auto const client_order_id=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::ClOrdID>();
172 BOOST_CHECK_EQUAL(std::string(client_order_id.first, client_order_id.second), "10");
173 auto const seqNum=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::MsgSeqNum>();
174 BOOST_CHECK_EQUAL(std::string(seqNum.first, seqNum.second), "2");
175 auto const securityIDSource=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::SecurityIDSource>();
176 BOOST_CHECK_EQUAL(std::string(securityIDSource.first, securityIDSource.second), "4");
177 auto const securityID=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::SecurityID>();
178 BOOST_CHECK_EQUAL(std::string(securityID.first, securityID.second), "GB00BH4HKS39");
179 auto const execType=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::ExecType>();
180 BOOST_CHECK_EQUAL(static_cast<isimud::exchanges::FIX::common::ExecType>(*execType.first), isimud::exchanges::FIX::common::ExecType::New);
181 auto const price=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::Price>();
182 BOOST_CHECK_EQUAL(std::string(price.first, price.second), "42.000000");
183 auto const side=fix_msg.find<isimud::exchanges::FIX::common::FieldsFast::Side>();
184 BOOST_CHECK_EQUAL(std::string(side.first, side.second), "1");
185 }
186
187 BOOST_AUTO_TEST_SUITE_END()
188
189 BOOST_AUTO_TEST_SUITE_END()