// clang-format off #include "../testing/support/public/simulated_environment.hh" #include "tox_events.h" // clang-format on #include #include #include #include "crypto_core.h" #include "tox_private.h" namespace { using tox::test::SimulatedEnvironment; TEST(ToxEvents, UnpackRandomDataDoesntCrash) { SimulatedEnvironment env; auto node = env.create_node(33445); ASSERT_NE(node->system.rng, nullptr); std::array data; random_bytes(node->system.rng, data.data(), data.size()); tox_events_free(tox_events_load(&node->system, data.data(), data.size())); } TEST(ToxEvents, UnpackEmptyDataFails) { SimulatedEnvironment env; auto node = env.create_node(33445); std::array data; Tox_Events *events = tox_events_load(&node->system, data.end(), 0); EXPECT_EQ(events, nullptr); } TEST(ToxEvents, UnpackEmptyArrayCreatesEmptyEvents) { SimulatedEnvironment env; auto node = env.create_node(33445); std::array data{0x90}; // empty msgpack array Tox_Events *events = tox_events_load(&node->system, data.data(), data.size()); ASSERT_NE(events, nullptr); EXPECT_EQ(tox_events_get_size(events), 0); tox_events_free(events); } TEST(ToxEvents, NullEventsPacksToEmptyArray) { std::array bytes; ASSERT_EQ(tox_events_bytes_size(nullptr), bytes.size()); tox_events_get_bytes(nullptr, bytes.data()); EXPECT_EQ(bytes, (std::array{0x90})); } TEST(ToxEvents, PackedEventsCanBeUnpacked) { SimulatedEnvironment env; auto node = env.create_node(33445); // [[0, 1]] == Tox_Self_Connection_Status { .connection_status = TOX_CONNECTION_TCP } std::array packed{0x91, 0x92, 0xcc, 0x00, 0xcc, 0x01}; Tox_Events *events = tox_events_load(&node->system, packed.data(), packed.size()); ASSERT_NE(events, nullptr); std::array bytes; ASSERT_EQ(tox_events_bytes_size(events), bytes.size()); tox_events_get_bytes(events, bytes.data()); EXPECT_EQ(bytes, (std::array{0x91, 0x92, 0x00, 0x01})); tox_events_free(events); } TEST(ToxEvents, DealsWithHugeMsgpackArrays) { SimulatedEnvironment env; auto node = env.create_node(33445); std::vector data{0xdd, 0xff, 0xff, 0xff, 0xff}; EXPECT_EQ(tox_events_load(&node->system, data.data(), data.size()), nullptr); } } // namespace