21 #define BOOST_TEST_MODULE isimud_tests
22 #include <boost/test/included/unit_test.hpp>
24 #include <boost/mpl/list.hpp>
26 #include "../exchanges/FIX/v5.0sp2/messages.hpp"
28 using namespace libisimud;
34 BOOST_AUTO_TEST_SUITE(exchange_gateways)
36 BOOST_AUTO_TEST_SUITE(admin)
38 BOOST_AUTO_TEST_CASE_TEMPLATE(print_details, msg, msg_types) {
40 BOOST_CHECK_NO_THROW(msg::to_stream(ss));
41 BOOST_CHECK(!ss.str().empty());
44 BOOST_AUTO_TEST_CASE_TEMPLATE(logon, msg, msg_types) {
46 "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=238\001"
48 exchanges::
FIX::
v5_0sp2::
MsgTypes::LogonRequest
const &fix_msg=
reinterpret_cast<exchanges::FIX::v5_0sp2::MsgTypes::LogonRequest
const &>(*fix_buffer.begin());
49 BOOST_CHECK_EQUAL(fix_msg.length(), std::strlen(fix_buffer.begin()));
50 BOOST_CHECK(fix_msg.is_valid());
51 auto const usr=fix_msg.find<exchanges::FIX::common::FieldsFast::Username>();
52 BOOST_CHECK_EQUAL(std::string(usr.first, usr.second),
"USER");
53 auto const pass=fix_msg.find<exchanges::FIX::common::FieldsFast::Password>();
54 BOOST_CHECK_EQUAL(std::string(pass.first, pass.second),
"PASSWORD");
57 BOOST_AUTO_TEST_CASE_TEMPLATE(LogoutRequest, msg, msg_types) {
59 "8=FIX.5.0\0019=005\00135=5\00110=005\001"
61 exchanges::
FIX::
v5_0sp2::
MsgTypes::LogoutRequest
const &fix_msg=
reinterpret_cast<exchanges::FIX::v5_0sp2::MsgTypes::LogoutRequest
const &>(*fix_buffer.begin());
62 BOOST_CHECK(fix_msg.is_valid());
63 BOOST_CHECK_EQUAL(fix_msg.length(), std::strlen(fix_buffer.begin()));
66 BOOST_AUTO_TEST_CASE_TEMPLATE(hearbeat, msg, msg_types) {
68 "8=FIX.5.0\0019=005\00135=0\00110=000\001"
70 exchanges::
FIX::
v5_0sp2::
MsgTypes::ClientHeartbeat
const &fix_msg=
reinterpret_cast<exchanges::FIX::v5_0sp2::MsgTypes::ClientHeartbeat
const &>(*fix_buffer.begin());
71 BOOST_CHECK(fix_msg.is_valid());
72 BOOST_CHECK_EQUAL(fix_msg.length(), std::strlen(fix_buffer.begin()));
75 BOOST_AUTO_TEST_SUITE_END()
77 BOOST_AUTO_TEST_SUITE(trade)
79 BOOST_AUTO_TEST_CASE_TEMPLATE(new_order, msg, msg_types) {
81 "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=195\001"
83 exchanges::
FIX::
v5_0sp2::
MsgTypes::NewOrderSingle
const &fix_msg=
reinterpret_cast<exchanges::FIX::v5_0sp2::MsgTypes::NewOrderSingle
const &>(*fix_buffer.begin());
84 BOOST_CHECK(fix_msg.is_valid());
85 BOOST_CHECK_EQUAL(fix_msg.length(), std::strlen(fix_buffer.begin()));
86 auto const client_order_id=fix_msg.find<exchanges::FIX::common::FieldsFast::ClOrdID>();
87 BOOST_CHECK_EQUAL(std::string(client_order_id.first, client_order_id.second),
"10");
88 auto const symbol=fix_msg.find<exchanges::FIX::common::FieldsFast::Symbol>();
89 BOOST_CHECK_EQUAL(std::string(symbol.first, symbol.second),
"EK");
90 auto const side=fix_msg.find<exchanges::FIX::common::FieldsFast::Side>();
91 BOOST_CHECK_EQUAL(std::string(side.first, side.second),
"1");
92 auto const transact_time=fix_msg.find<exchanges::FIX::common::FieldsFast::TransactTime>();
93 BOOST_CHECK_EQUAL(std::string(transact_time.first, transact_time.second),
"19980930-09:25:58");
94 auto const order_qty=fix_msg.find<exchanges::FIX::common::FieldsFast::OrderQty>();
95 BOOST_CHECK_EQUAL(std::string(order_qty.first, order_qty.second),
"10000");
96 auto const ord_type=fix_msg.find<exchanges::FIX::common::FieldsFast::OrdType>();
97 BOOST_CHECK_EQUAL(std::string(ord_type.first, ord_type.second),
"2");
98 auto const sec_id_src_type=fix_msg.find<exchanges::FIX::common::FieldsFast::SecurityIDSource>();
99 BOOST_CHECK_EQUAL(std::string(sec_id_src_type.first, sec_id_src_type.second),
"4");
100 auto const sec_id_type=fix_msg.find<exchanges::FIX::common::FieldsFast::SecurityID>();
101 BOOST_CHECK_EQUAL(std::string(sec_id_type.first, sec_id_type.second),
"GB00BH4HKS39");
104 BOOST_AUTO_TEST_CASE_TEMPLATE(order_cancel, msg, msg_types) {
106 "8=FIX.5.0\0019=057\00135=F\00111=10\00155=CUSTOME\00154=1\00160=19980930-09:25:58\00138=10000\00110=129\001"
108 exchanges::
FIX::
v5_0sp2::
MsgTypes::OrderCancelRequest
const &fix_msg=
reinterpret_cast<exchanges::FIX::v5_0sp2::MsgTypes::OrderCancelRequest
const &>(*fix_buffer.begin());
109 BOOST_CHECK(fix_msg.is_valid());
110 BOOST_CHECK_EQUAL(fix_msg.length(), std::strlen(fix_buffer.begin()));
111 auto const client_order_id=fix_msg.find<exchanges::FIX::common::FieldsFast::ClOrdID>();
112 BOOST_CHECK_EQUAL(std::string(client_order_id.first, client_order_id.second),
"10");
113 auto const symbol=fix_msg.find<exchanges::FIX::common::FieldsFast::Symbol>();
114 BOOST_CHECK_EQUAL(std::string(symbol.first, symbol.second),
"CUSTOME");
115 auto const side=fix_msg.find<exchanges::FIX::common::FieldsFast::Side>();
116 BOOST_CHECK_EQUAL(std::string(side.first, side.second),
"1");
117 auto const transact_time=fix_msg.find<exchanges::FIX::common::FieldsFast::TransactTime>();
118 BOOST_CHECK_EQUAL(std::string(transact_time.first, transact_time.second),
"19980930-09:25:58");
119 auto const order_qty=fix_msg.find<exchanges::FIX::common::FieldsFast::OrderQty>();
120 BOOST_CHECK_EQUAL(std::string(order_qty.first, order_qty.second),
"10000");
123 BOOST_AUTO_TEST_CASE_TEMPLATE(order_cancel_replace, msg, msg_types) {
125 "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=174\001"
127 exchanges::
FIX::
v5_0sp2::
MsgTypes::OrderCancelReplace
const &fix_msg=
reinterpret_cast<exchanges::FIX::v5_0sp2::MsgTypes::OrderCancelReplace
const &>(*fix_buffer.begin());
128 BOOST_CHECK(fix_msg.is_valid());
129 BOOST_CHECK_EQUAL(fix_msg.length(), std::strlen(fix_buffer.begin()));
130 auto const senderCompID=fix_msg.find<exchanges::FIX::common::FieldsFast::SenderCompID>();
131 BOOST_CHECK_EQUAL(std::string(senderCompID.first, senderCompID.second),
"VENDOR");
132 auto const targetCompID=fix_msg.find<exchanges::FIX::common::FieldsFast::TargetCompID>();
133 BOOST_CHECK_EQUAL(std::string(targetCompID.first, targetCompID.second),
"BROKER");
134 auto const msgSeqNum=fix_msg.find<exchanges::FIX::common::FieldsFast::MsgSeqNum>();
135 BOOST_CHECK_EQUAL(std::string(msgSeqNum.first, msgSeqNum.second),
"10");
136 auto const sendingTime=fix_msg.find<exchanges::FIX::common::FieldsFast::SendingTime>();
137 BOOST_CHECK_EQUAL(std::string(sendingTime.first, sendingTime.second),
"20000426-12:05:06");
138 auto const client_order_id=fix_msg.find<exchanges::FIX::common::FieldsFast::ClOrdID>();
139 BOOST_CHECK_EQUAL(std::string(client_order_id.first, client_order_id.second),
"10");
140 auto const symbol=fix_msg.find<exchanges::FIX::common::FieldsFast::Symbol>();
141 BOOST_CHECK_EQUAL(std::string(symbol.first, symbol.second),
"EK");
142 auto const side=fix_msg.find<exchanges::FIX::common::FieldsFast::Side>();
143 BOOST_CHECK_EQUAL(std::string(side.first, side.second),
"1");
144 auto const transact_time=fix_msg.find<exchanges::FIX::common::FieldsFast::TransactTime>();
145 BOOST_CHECK_EQUAL(std::string(transact_time.first, transact_time.second),
"19980930-09:25:58");
146 auto const order_qty=fix_msg.find<exchanges::FIX::common::FieldsFast::OrderQty>();
147 BOOST_CHECK_EQUAL(std::string(order_qty.first, order_qty.second),
"10000");
148 auto const ordType=fix_msg.find<exchanges::FIX::common::FieldsFast::OrdType>();
149 BOOST_CHECK_EQUAL(std::string(ordType.first, ordType.second),
"2");
152 BOOST_AUTO_TEST_CASE_TEMPLATE(order_reject, msg, msg_types) {
154 "8=FIX.5.0\0019=011\00135=3\00145=10\00110=008\001"
156 exchanges::
FIX::
v5_0sp2::
MsgTypes::OrderRejected
const &fix_msg=
reinterpret_cast<exchanges::FIX::v5_0sp2::MsgTypes::OrderRejected
const &>(*fix_buffer.begin());
157 BOOST_CHECK(fix_msg.is_valid());
158 BOOST_CHECK_EQUAL(fix_msg.length(), std::strlen(fix_buffer.begin()));
159 auto const ref_seq_num=fix_msg.find<exchanges::FIX::common::FieldsFast::RefSeqNum>();
160 BOOST_CHECK_EQUAL(std::string(ref_seq_num.first, ref_seq_num.second),
"10");
163 BOOST_AUTO_TEST_CASE_TEMPLATE(execution_report, msg, msg_types) {
165 "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=097\001"
167 exchanges::
FIX::
v5_0sp2::
MsgTypes::ExecutionReport
const &fix_msg=
reinterpret_cast<exchanges::FIX::v5_0sp2::MsgTypes::ExecutionReport
const &>(*fix_buffer.begin());
168 BOOST_CHECK(fix_msg.is_valid());
169 BOOST_CHECK_EQUAL(fix_msg.length(), std::strlen(fix_buffer.begin()));
170 auto const client_order_id=fix_msg.find<exchanges::FIX::common::FieldsFast::ClOrdID>();
171 BOOST_CHECK_EQUAL(std::string(client_order_id.first, client_order_id.second),
"10");
172 auto const seqNum=fix_msg.find<exchanges::FIX::common::FieldsFast::MsgSeqNum>();
173 BOOST_CHECK_EQUAL(std::string(seqNum.first, seqNum.second),
"2");
174 auto const securityIDSource=fix_msg.find<exchanges::FIX::common::FieldsFast::SecurityIDSource>();
175 BOOST_CHECK_EQUAL(std::string(securityIDSource.first, securityIDSource.second),
"4");
176 auto const securityID=fix_msg.find<exchanges::FIX::common::FieldsFast::SecurityID>();
177 BOOST_CHECK_EQUAL(std::string(securityID.first, securityID.second),
"GB00BH4HKS39");
178 auto const execType=fix_msg.find<exchanges::FIX::common::FieldsFast::ExecType>();
179 BOOST_CHECK_EQUAL(
static_cast<exchanges::FIX::common::ExecType>(*execType.first), exchanges::FIX::common::ExecType::New);
180 auto const price=fix_msg.find<exchanges::FIX::common::FieldsFast::Price>();
181 BOOST_CHECK_EQUAL(std::string(price.first, price.second),
"42.000000");
182 auto const side=fix_msg.find<exchanges::FIX::common::FieldsFast::Side>();
183 BOOST_CHECK_EQUAL(std::string(side.first, side.second),
"1");
186 BOOST_AUTO_TEST_SUITE_END()
188 BOOST_AUTO_TEST_SUITE_END()