#include #include "../include/protocol/binary_protocol.hpp" using namespace quant::protocol; using namespace quant::core; TEST(BinaryProtocolTest, SerializeAndParseNewOrder) { std::array buffer; NewOrderSinglePayload order{ 42, 10001, Symbol("AAPL"), static_cast(Side::BUY), static_cast(OrderType::LIMIT), 1855000, 200 }; size_t written = BinaryProtocol::serialize_message( std::span(buffer), MessageType::NEW_ORDER_SINGLE, 1, 1693000000000ULL, order ); ASSERT_GT(written, 0); auto hdr = BinaryProtocol::parse_header(std::span(buffer.data(), written)); ASSERT_TRUE(hdr.has_value()); EXPECT_EQ(hdr->magic, PROTOCOL_MAGIC); EXPECT_EQ(hdr->msg_type, static_cast(MessageType::NEW_ORDER_SINGLE)); EXPECT_EQ(hdr->seq_num, 1); const auto* parsed = BinaryProtocol::parse_payload( std::span(buffer.data(), written) ); ASSERT_NE(parsed, nullptr); EXPECT_EQ(parsed->client_id, 42); EXPECT_EQ(parsed->client_order_id, 10001); EXPECT_EQ(parsed->symbol.view(), "AAPL"); EXPECT_EQ(parsed->price_raw, 1855000); EXPECT_EQ(parsed->qty, 200); } TEST(BinaryProtocolTest, MalformedBufferHandling) { std::array small_buf{0}; auto hdr = BinaryProtocol::parse_header(std::span(small_buf)); EXPECT_FALSE(hdr.has_value()); std::array corrupt_hdr{0}; corrupt_hdr[0] = 0xFF; // Bad magic auto bad_hdr = BinaryProtocol::parse_header(std::span(corrupt_hdr)); EXPECT_FALSE(bad_hdr.has_value()); }