File size: 1,745 Bytes
f86fb3b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <gtest/gtest.h>
#include "../include/protocol/binary_protocol.hpp"

using namespace quant::protocol;
using namespace quant::core;

TEST(BinaryProtocolTest, SerializeAndParseNewOrder) {
    std::array<uint8_t, MAX_FRAME_SIZE> buffer;
    NewOrderSinglePayload order{
        42, 10001, Symbol("AAPL"),
        static_cast<uint8_t>(Side::BUY),
        static_cast<uint8_t>(OrderType::LIMIT),
        1855000, 200
    };

    size_t written = BinaryProtocol::serialize_message(
        std::span<uint8_t>(buffer),
        MessageType::NEW_ORDER_SINGLE,
        1, 1693000000000ULL, order
    );

    ASSERT_GT(written, 0);

    auto hdr = BinaryProtocol::parse_header(std::span<const uint8_t>(buffer.data(), written));
    ASSERT_TRUE(hdr.has_value());
    EXPECT_EQ(hdr->magic, PROTOCOL_MAGIC);
    EXPECT_EQ(hdr->msg_type, static_cast<uint8_t>(MessageType::NEW_ORDER_SINGLE));
    EXPECT_EQ(hdr->seq_num, 1);

    const auto* parsed = BinaryProtocol::parse_payload<NewOrderSinglePayload>(
        std::span<const uint8_t>(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<uint8_t, 10> small_buf{0};
    auto hdr = BinaryProtocol::parse_header(std::span<const uint8_t>(small_buf));
    EXPECT_FALSE(hdr.has_value());

    std::array<uint8_t, sizeof(FrameHeader)> corrupt_hdr{0};
    corrupt_hdr[0] = 0xFF; // Bad magic
    auto bad_hdr = BinaryProtocol::parse_header(std::span<const uint8_t>(corrupt_hdr));
    EXPECT_FALSE(bad_hdr.has_value());
}