9 #include <boost/test/unit_test.hpp> 11 #include <initializer_list> 15 class mock_message_handler {
17 mock_message_handler() {
22 MOCK_METHOD0(now,
int());
28 int const&, std::uint64_t msgcnt, std::size_t msgoffset,
33 int const&, std::uint64_t msgcnt, std::size_t msgoffset,
38 int const&, std::uint64_t msgcnt, std::size_t msgoffset,
42 std::string create_message_stream(
43 std::initializer_list<std::pair<char const*, std::size_t>>
const& rhs);
54 mock_message_handler handler;
55 using namespace ::testing;
56 EXPECT_CALL(handler, now()).WillRepeatedly(Return(0));
58 std::string bytes = create_message_stream(
66 std::istringstream is(bytes);
68 EXPECT_CALL(handler, now()).Times(21);
71 handle_message(_, _, _, An<jb::itch5::add_order_message const&>()))
75 handle_message(_, _, _, An<jb::itch5::stock_directory_message const&>()))
79 handle_message(_, _, _, An<jb::itch5::system_event_message const&>()))
81 EXPECT_CALL(handler, handle_unknown(_, _)).Times(1);
93 mock_message_handler handler;
101 std::istringstream is(bytes);
105 using namespace ::testing;
106 EXPECT_CALL(handler, now()).WillRepeatedly(Invoke([&is, &count]() {
108 is.setstate(std::ios::failbit);
115 handle_message(_, _, _, An<jb::itch5::system_event_message const&>()))
119 handle_message(_, _, _, An<jb::itch5::stock_directory_message const&>()))
121 EXPECT_CALL(handler, handle_unknown(_, _)).Times(0);
130 std::string create_message_stream(
131 std::initializer_list<std::pair<char const*, std::size_t>>
const& rhs) {
133 for (
auto const& p : rhs) {
134 std::size_t len = p.second;
135 if (len == 0 or len >= std::size_t(1 << 16)) {
136 throw std::invalid_argument(
137 "arguments to create_message_stream must have " 138 "length in the [0,65536] range");
142 bytes.push_back(
char(hi));
143 bytes.push_back(
char(lo));
144 bytes.append(p.first, p.second);
void process_iostream_mlist(std::istream &is, message_handler &handler)
clock_type::time_point time_point
A convenience alias for clock_type::time_point.
std::pair< char const *, std::size_t > add_order()
std::pair< char const *, std::size_t > system_event()
BOOST_AUTO_TEST_CASE(process_iostream_mlist_simple)
std::pair< char const *, std::size_t > stock_directory()
Initialize GMock to work with Boost.Test.
Represent a 'Stock Directory' message in the ITCH-5.0 protocol.
Represent an 'Add Order' message in the ITCH-5.0 protocol.
Represent a 'System Event Message' in the ITCH-5.0 protocol.
std::pair< char const *, std::size_t > trade()