root/isimud/tests/fix_basic.cpp

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. BOOST_AUTO_TEST_SUITE
  2. BOOST_AUTO_TEST_CASE_TEMPLATE
  3. BOOST_AUTO_TEST_CASE_TEMPLATE
  4. BOOST_AUTO_TEST_CASE_TEMPLATE
  5. BOOST_AUTO_TEST_SUITE_END
  6. BOOST_AUTO_TEST_CASE_TEMPLATE
  7. BOOST_AUTO_TEST_CASE_TEMPLATE
  8. BOOST_AUTO_TEST_CASE_TEMPLATE
  9. BOOST_AUTO_TEST_CASE_TEMPLATE

   1 /******************************************************************************

   2 ** $Header: svn+ssh://jmmcg@svn.code.sf.net/p/libjmmcg/code/trunk/libjmmcg/isimud/tests/fix_basic.cpp 2318 2018-08-31 07:51:49Z jmmcg $

   3 **

   4 ** Copyright (c) 2015 by J.M.McGuiness, coder@hussar.me.uk

   5 **

   6 ** This library is free software; you can redistribute it and/or

   7 ** modify it under the terms of the GNU Lesser General Public

   8 ** License as published by the Free Software Foundation; either

   9 ** version 2.1 of the License, or (at your option) any later version.

  10 **

  11 ** This library is distributed in the hope that it will be useful,

  12 ** but WITHOUT ANY WARRANTY; without even the implied warranty of

  13 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU

  14 ** Lesser General Public License for more details.

  15 **

  16 ** You should have received a copy of the GNU Lesser General Public

  17 ** License along with this library; if not, write to the Free Software

  18 ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

  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()

/* [<][>][^][v][top][bottom][index][help] */