21 #define BOOST_TEST_MODULE isimud_tests
22 #include <boost/test/included/unit_test.hpp>
24 #include <boost/mpl/list.hpp>
26 #include "../exchanges/BATSBOE/EU/v1/messages.hpp"
27 #include "../exchanges/BATSBOE/EU/v2/messages.hpp"
29 #include "core/ttypes.hpp"
31 using namespace libisimud;
44 BOOST_AUTO_TEST_SUITE(exchange_gateways)
46 BOOST_AUTO_TEST_CASE_TEMPLATE(print_details, msg, msg_types) {
48 BOOST_CHECK_NO_THROW(msg::to_stream(ss));
49 BOOST_CHECK(!ss.str().empty());
52 BOOST_AUTO_TEST_CASE_TEMPLATE(ctor, msg, msg_types)
54 typename msg::LogonRequest logon(sequenceNumber, sessionSubID, exchanges::BATSBOE::common::UserName_t{
"use"}, exchanges::BATSBOE::common::Password_t{
"fubarsnfu"},
false);
55 BOOST_CHECK_EQUAL(logon.start_of_message, exchanges::BATSBOE::common::msg_start_code);
56 BOOST_CHECK_EQUAL(logon.type(), exchanges::BATSBOE::EU::MsgType::LogonRequest);
57 BOOST_CHECK_EQUAL(logon.matchingUnit, 0);
58 BOOST_CHECK_EQUAL(logon.sequenceNumber, 1);
59 BOOST_CHECK_GE(logon.length(), msg::header_t_size);
60 BOOST_CHECK_LE(logon.length(),
sizeof(
typename msg::LogonRequest));
62 BOOST_CHECK_EQUAL(logoutRequest.start_of_message, exchanges::BATSBOE::common::msg_start_code);
63 BOOST_CHECK_EQUAL(logoutRequest.type(), exchanges::BATSBOE::common::MsgType::LogoutRequest);
64 BOOST_CHECK_EQUAL(logoutRequest.matchingUnit, 0);
65 BOOST_CHECK_EQUAL(logoutRequest.sequenceNumber, 1);
66 BOOST_CHECK_GE(logoutRequest.length(), msg::header_t_size);
67 BOOST_CHECK_LE(logoutRequest.length(),
sizeof(
typename msg::LogoutRequest));
69 BOOST_CHECK_EQUAL(clientHeartbeat.start_of_message, exchanges::BATSBOE::common::msg_start_code);
70 BOOST_CHECK_EQUAL(clientHeartbeat.type(), exchanges::BATSBOE::common::MsgType::ClientHeartbeat);
71 BOOST_CHECK_EQUAL(clientHeartbeat.matchingUnit, 0);
72 BOOST_CHECK_EQUAL(clientHeartbeat.sequenceNumber, 1);
73 BOOST_CHECK_GE(clientHeartbeat.length(), msg::header_t_size);
74 BOOST_CHECK_LE(clientHeartbeat.length(),
sizeof(
typename msg::ClientHeartbeat));
76 BOOST_CHECK_EQUAL(logonReply.start_of_message, exchanges::BATSBOE::common::msg_start_code);
77 BOOST_CHECK_EQUAL(logonReply.type(), exchanges::BATSBOE::EU::MsgType::LogonReply);
78 BOOST_CHECK_EQUAL(logonReply.matchingUnit, 0);
79 BOOST_CHECK_EQUAL(logonReply.sequenceNumber, 1);
80 BOOST_CHECK_GE(logonReply.length(), msg::header_t_size);
81 BOOST_CHECK_LE(logonReply.length(),
sizeof(
typename msg::LogonReply));
83 BOOST_CHECK_EQUAL(logout.start_of_message, exchanges::BATSBOE::common::msg_start_code);
84 BOOST_CHECK_EQUAL(logout.type(), exchanges::BATSBOE::common::MsgType::Logout);
85 BOOST_CHECK_EQUAL(logout.matchingUnit, 0);
86 BOOST_CHECK_EQUAL(logout.sequenceNumber, 1);
87 BOOST_CHECK_EQUAL(logout.numberOfUnits, 0);
88 BOOST_CHECK_GE(logout.length(), msg::header_t_size);
89 BOOST_CHECK_LE(logout.length(),
sizeof(
typename msg::Logout));
91 BOOST_CHECK_EQUAL(serverHeartbeat.start_of_message, exchanges::BATSBOE::common::msg_start_code);
92 BOOST_CHECK_EQUAL(serverHeartbeat.type(), exchanges::BATSBOE::common::MsgType::ServerHeartbeat);
93 BOOST_CHECK_EQUAL(serverHeartbeat.matchingUnit, 0);
94 BOOST_CHECK_EQUAL(serverHeartbeat.sequenceNumber, 1);
95 BOOST_CHECK_GE(serverHeartbeat.length(), msg::header_t_size);
96 BOOST_CHECK_LE(serverHeartbeat.length(),
sizeof(
typename msg::ServerHeartbeat));
98 BOOST_CHECK_EQUAL(replayComplete.start_of_message, exchanges::BATSBOE::common::msg_start_code);
99 BOOST_CHECK_EQUAL(replayComplete.type(), exchanges::BATSBOE::common::MsgType::ReplayComplete);
100 BOOST_CHECK_EQUAL(replayComplete.matchingUnit, 0);
101 BOOST_CHECK_EQUAL(replayComplete.sequenceNumber, 1);
102 BOOST_CHECK_GE(replayComplete.length(), msg::header_t_size);
103 BOOST_CHECK_LE(replayComplete.length(),
sizeof(
typename msg::ReplayComplete));
104 typename msg::NewOrder_t newOrder(sequenceNumber, clientOrderID, exchanges::BATSBOE::common::OrdType::Market, exchanges::BATSBOE::common::TIF::Day, exchanges::BATSBOE::common::Side::Buy, instID, 0, price);
105 BOOST_CHECK_EQUAL(newOrder.start_of_message, exchanges::BATSBOE::common::msg_start_code);
106 BOOST_CHECK_EQUAL(newOrder.type(), exchanges::BATSBOE::common::MsgType::NewOrder);
107 BOOST_CHECK_EQUAL(newOrder.matchingUnit, 0);
108 BOOST_CHECK_EQUAL(newOrder.sequenceNumber, 1);
109 BOOST_CHECK_GE(newOrder.length(), msg::header_t_size);
110 BOOST_CHECK_LE(newOrder.length(),
sizeof(
typename msg::NewOrder_t));
111 typename msg::CancelOrder cancelOrder(sequenceNumber, clientOrderID);
112 BOOST_CHECK_EQUAL(cancelOrder.start_of_message, exchanges::BATSBOE::common::msg_start_code);
113 BOOST_CHECK_EQUAL(cancelOrder.type(), exchanges::BATSBOE::common::MsgType::CancelOrder);
114 BOOST_CHECK_EQUAL(cancelOrder.matchingUnit, 0);
115 BOOST_CHECK_EQUAL(cancelOrder.sequenceNumber, 1);
116 BOOST_CHECK_GE(cancelOrder.length(), msg::header_t_size);
117 BOOST_CHECK_LE(cancelOrder.length(),
sizeof(
typename msg::CancelOrder));
118 typename msg::ModifyOrder modifyOrder(sequenceNumber, clientOrderID, 0, price, exchanges::BATSBOE::common::Side::Buy);
119 BOOST_CHECK_EQUAL(modifyOrder.start_of_message, exchanges::BATSBOE::common::msg_start_code);
120 BOOST_CHECK_EQUAL(modifyOrder.type(), exchanges::BATSBOE::common::MsgType::ModifyOrder);
121 BOOST_CHECK_EQUAL(modifyOrder.matchingUnit, 0);
122 BOOST_CHECK_EQUAL(modifyOrder.sequenceNumber, 1);
123 BOOST_CHECK_GE(modifyOrder.length(), msg::header_t_size);
124 BOOST_CHECK_LE(modifyOrder.length(),
sizeof(
typename msg::ModifyOrder));
125 typename msg::TradeCaptureReport tradeCaptureReport(
sequenceNumber);
126 BOOST_CHECK_EQUAL(tradeCaptureReport.start_of_message, exchanges::BATSBOE::common::msg_start_code);
127 BOOST_CHECK_EQUAL(tradeCaptureReport.type(), exchanges::BATSBOE::EU::MsgType::TradeCaptureReport);
128 BOOST_CHECK_EQUAL(tradeCaptureReport.matchingUnit, 0);
129 BOOST_CHECK_EQUAL(tradeCaptureReport.sequenceNumber, 1);
130 BOOST_CHECK_GE(tradeCaptureReport.length(), msg::header_t_size);
131 BOOST_CHECK_LE(tradeCaptureReport.length(),
sizeof(
typename msg::TradeCaptureReport));
132 typename msg::OrderAcknowledgement orderAcknowledgement(sequenceNumber, clientOrderID);
133 BOOST_CHECK_EQUAL(orderAcknowledgement.start_of_message, exchanges::BATSBOE::common::msg_start_code);
134 BOOST_CHECK_EQUAL(orderAcknowledgement.type(), exchanges::BATSBOE::common::MsgType::OrderAcknowledgement);
135 BOOST_CHECK_EQUAL(orderAcknowledgement.matchingUnit, 0);
136 BOOST_CHECK_EQUAL(orderAcknowledgement.sequenceNumber, 1);
137 BOOST_CHECK_GE(orderAcknowledgement.length(), msg::header_t_size);
138 BOOST_CHECK_LE(orderAcknowledgement.length(),
sizeof(
typename msg::OrderAcknowledgement));
139 typename msg::OrderRejected orderRejected(sequenceNumber, clientOrderID, exchanges::BATSBOE::common::OrderRejectReason::Admin);
140 BOOST_CHECK_EQUAL(orderRejected.start_of_message, exchanges::BATSBOE::common::msg_start_code);
141 BOOST_CHECK_EQUAL(orderRejected.type(), exchanges::BATSBOE::common::MsgType::OrderRejected);
142 BOOST_CHECK_EQUAL(orderRejected.matchingUnit, 0);
143 BOOST_CHECK_EQUAL(orderRejected.sequenceNumber, 1);
144 BOOST_CHECK_GE(orderRejected.length(), msg::header_t_size);
145 BOOST_CHECK_LE(orderRejected.length(),
sizeof(
typename msg::OrderRejected));
146 typename msg::OrderModified orderModified(sequenceNumber, clientOrderID, price, exchanges::BATSBOE::common::Side::Buy, 0);
147 BOOST_CHECK_EQUAL(orderModified.start_of_message, exchanges::BATSBOE::common::msg_start_code);
148 BOOST_CHECK_EQUAL(orderModified.type(), exchanges::BATSBOE::common::MsgType::OrderModified);
149 BOOST_CHECK_EQUAL(orderModified.matchingUnit, 0);
150 BOOST_CHECK_EQUAL(orderModified.sequenceNumber, 1);
151 BOOST_CHECK_GE(orderModified.length(), msg::header_t_size);
152 BOOST_CHECK_LE(orderModified.length(),
sizeof(
typename msg::OrderModified));
153 typename msg::OrderRestated orderRestated(sequenceNumber, clientOrderID);
154 BOOST_CHECK_EQUAL(orderRestated.start_of_message, exchanges::BATSBOE::common::msg_start_code);
155 BOOST_CHECK_EQUAL(orderRestated.type(), exchanges::BATSBOE::common::MsgType::OrderRestated);
156 BOOST_CHECK_EQUAL(orderRestated.matchingUnit, 0);
157 BOOST_CHECK_EQUAL(orderRestated.sequenceNumber, 1);
158 BOOST_CHECK_GE(orderRestated.length(), msg::header_t_size);
159 BOOST_CHECK_LE(orderRestated.length(),
sizeof(
typename msg::OrderRestated));
160 typename msg::UserModifyRejected userModifyRejected(sequenceNumber, clientOrderID, exchanges::BATSBOE::common::OrderRejectReason::Admin);
161 BOOST_CHECK_EQUAL(userModifyRejected.start_of_message, exchanges::BATSBOE::common::msg_start_code);
162 BOOST_CHECK_EQUAL(userModifyRejected.type(), exchanges::BATSBOE::common::MsgType::UserModifyRejected);
163 BOOST_CHECK_EQUAL(userModifyRejected.matchingUnit, 0);
164 BOOST_CHECK_EQUAL(userModifyRejected.sequenceNumber, 1);
165 BOOST_CHECK_GE(userModifyRejected.length(), msg::header_t_size);
166 BOOST_CHECK_LE(userModifyRejected.length(),
sizeof(
typename msg::UserModifyRejected));
167 typename msg::OrderCancelled orderCancelled(sequenceNumber, clientOrderID, exchanges::BATSBOE::common::OrderRejectReason::Admin, price, exchanges::BATSBOE::common::Side::Buy, 0, 0);
168 BOOST_CHECK_EQUAL(orderCancelled.start_of_message, exchanges::BATSBOE::common::msg_start_code);
169 BOOST_CHECK_EQUAL(orderCancelled.type(), exchanges::BATSBOE::common::MsgType::OrderCancelled);
170 BOOST_CHECK_EQUAL(orderCancelled.matchingUnit, 0);
171 BOOST_CHECK_EQUAL(orderCancelled.sequenceNumber, 1);
172 BOOST_CHECK_GE(orderCancelled.length(), msg::header_t_size);
173 BOOST_CHECK_LE(orderCancelled.length(),
sizeof(
typename msg::OrderCancelled));
174 typename msg::CancelRejected cancelRejected(sequenceNumber, clientOrderID, exchanges::BATSBOE::common::OrderRejectReason::Admin);
175 BOOST_CHECK_EQUAL(cancelRejected.start_of_message, exchanges::BATSBOE::common::msg_start_code);
176 BOOST_CHECK_EQUAL(cancelRejected.type(), exchanges::BATSBOE::common::MsgType::CancelRejected);
177 BOOST_CHECK_EQUAL(cancelRejected.matchingUnit, 0);
178 BOOST_CHECK_EQUAL(cancelRejected.sequenceNumber, 1);
179 BOOST_CHECK_GE(cancelRejected.length(), msg::header_t_size);
180 BOOST_CHECK_LE(cancelRejected.length(),
sizeof(
typename msg::CancelRejected));
181 typename msg::OrderExecution orderExecution(sequenceNumber, clientOrderID, price, instID, exchanges::BATSBOE::common::Side::Buy);
182 BOOST_CHECK_EQUAL(orderExecution.start_of_message, exchanges::BATSBOE::common::msg_start_code);
183 BOOST_CHECK_EQUAL(orderExecution.type(), exchanges::BATSBOE::common::MsgType::OrderExecution);
184 BOOST_CHECK_EQUAL(orderExecution.matchingUnit, 0);
185 BOOST_CHECK_EQUAL(orderExecution.sequenceNumber, 1);
186 BOOST_CHECK_GE(orderExecution.length(), msg::header_t_size);
187 BOOST_CHECK_LE(orderExecution.length(),
sizeof(
typename msg::OrderExecution));
188 typename msg::TradeCancelOrCorrect tradeCancelOrCorrect(sequenceNumber, clientOrderID);
189 BOOST_CHECK_EQUAL(tradeCancelOrCorrect.start_of_message, exchanges::BATSBOE::common::msg_start_code);
190 BOOST_CHECK_EQUAL(tradeCancelOrCorrect.type(), exchanges::BATSBOE::common::MsgType::TradeCancelOrCorrect);
191 BOOST_CHECK_EQUAL(tradeCancelOrCorrect.matchingUnit, 0);
192 BOOST_CHECK_EQUAL(tradeCancelOrCorrect.sequenceNumber, 1);
193 BOOST_CHECK_GE(tradeCancelOrCorrect.length(), msg::header_t_size);
194 BOOST_CHECK_LE(tradeCancelOrCorrect.length(),
sizeof(
typename msg::TradeCancelOrCorrect));
195 typename msg::TradeCaptureReportAck tradeCaptureReportAck(
sequenceNumber);
196 BOOST_CHECK_EQUAL(tradeCaptureReportAck.start_of_message, exchanges::BATSBOE::common::msg_start_code);
197 BOOST_CHECK_EQUAL(tradeCaptureReportAck.type(), exchanges::BATSBOE::EU::MsgType::TradeCaptureReportAck);
198 BOOST_CHECK_EQUAL(tradeCaptureReportAck.matchingUnit, 0);
199 BOOST_CHECK_EQUAL(tradeCaptureReportAck.sequenceNumber, 1);
200 BOOST_CHECK_GE(tradeCaptureReportAck.length(), msg::header_t_size);
201 BOOST_CHECK_LE(tradeCaptureReportAck.length(),
sizeof(
typename msg::TradeCaptureReportAck));
202 typename msg::TradeCaptureReportReject tradeCaptureReportReject(
sequenceNumber);
203 BOOST_CHECK_EQUAL(tradeCaptureReportReject.start_of_message, exchanges::BATSBOE::common::msg_start_code);
204 BOOST_CHECK_EQUAL(tradeCaptureReportReject.type(), exchanges::BATSBOE::EU::MsgType::TradeCaptureReportReject);
205 BOOST_CHECK_EQUAL(tradeCaptureReportReject.matchingUnit, 0);
206 BOOST_CHECK_EQUAL(tradeCaptureReportReject.sequenceNumber, 1);
207 BOOST_CHECK_GE(tradeCaptureReportReject.length(), msg::header_t_size);
208 BOOST_CHECK_LE(tradeCaptureReportReject.length(),
sizeof(
typename msg::TradeCaptureReportReject));
209 typename msg::TradeCaptureConfirm tradeCaptureConfirm(
sequenceNumber);
210 BOOST_CHECK_EQUAL(tradeCaptureConfirm.start_of_message, exchanges::BATSBOE::common::msg_start_code);
211 BOOST_CHECK_EQUAL(tradeCaptureConfirm.type(), exchanges::BATSBOE::EU::MsgType::TradeCaptureConfirm);
212 BOOST_CHECK_EQUAL(tradeCaptureConfirm.matchingUnit, 0);
213 BOOST_CHECK_EQUAL(tradeCaptureConfirm.sequenceNumber, 1);
214 BOOST_CHECK_GE(tradeCaptureConfirm.length(), msg::header_t_size);
215 BOOST_CHECK_LE(tradeCaptureConfirm.length(),
sizeof(
typename msg::TradeCaptureConfirm));
216 typename msg::TradeCaptureDecline tradeCaptureDecline(
sequenceNumber);
217 BOOST_CHECK_EQUAL(tradeCaptureDecline.start_of_message, exchanges::BATSBOE::common::msg_start_code);
218 BOOST_CHECK_EQUAL(tradeCaptureDecline.type(), exchanges::BATSBOE::EU::MsgType::TradeCaptureDecline);
219 BOOST_CHECK_EQUAL(tradeCaptureDecline.matchingUnit, 0);
220 BOOST_CHECK_EQUAL(tradeCaptureDecline.sequenceNumber, 1);
221 BOOST_CHECK_GE(tradeCaptureDecline.length(), msg::header_t_size);
222 BOOST_CHECK_LE(tradeCaptureDecline.length(),
sizeof(
typename msg::TradeCaptureDecline));
225 BOOST_AUTO_TEST_CASE_TEMPLATE(find_value, msg, msg_types)
227 typename msg::NewOrder_t newOrder(sequenceNumber, clientOrderID, exchanges::BATSBOE::common::OrdType::Market, exchanges::BATSBOE::common::TIF::Day, exchanges::BATSBOE::common::Side::Buy, instID, 0, price);
228 BOOST_CHECK_EQUAL(newOrder.clientOrderID(), clientOrderID);
229 BOOST_CHECK_EQUAL(newOrder.orderQty(), 0);
230 BOOST_CHECK_EQUAL(newOrder.orderType(), exchanges::BATSBOE::common::OrdType::Market);
231 BOOST_CHECK_EQUAL(newOrder.side(), exchanges::BATSBOE::common::Side::Buy);
232 BOOST_CHECK_EQUAL(newOrder.instrumentID(), instID);
233 BOOST_CHECK_EQUAL(newOrder.limitPrice(), price);
236 BOOST_AUTO_TEST_SUITE_END()