#include "tox_events.h" #include #include #include #include "crypto_core.h" #include "tox_private.h" namespace { TEST(ToxEvents, UnpackRandomDataDoesntCrash) { const Tox_System sys = tox_default_system(); ASSERT_NE(sys.rng, nullptr); std::array data; random_bytes(sys.rng, data.data(), data.size()); tox_events_free(tox_events_load(&sys, data.data(), data.size())); } TEST(ToxEvents, UnpackEmptyDataFails) { const Tox_System sys = tox_default_system(); std::array data; Tox_Events *events = tox_events_load(&sys, data.end(), 0); EXPECT_EQ(events, nullptr); } TEST(ToxEvents, UnpackEmptyArrayCreatesEmptyEvents) { const Tox_System sys = tox_default_system(); std::array data{0x90}; // empty msgpack array Tox_Events *events = tox_events_load(&sys, data.data(), data.size()); ASSERT_NE(events, nullptr); EXPECT_EQ(tox_events_get_conference_connected_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) { const Tox_System sys = tox_default_system(); // [[1, 1]] == Tox_Self_Connection_Status { .connection_status = TOX_CONNECTION_TCP } std::array packed{0x91, 0x92, 0xcc, 0x01, 0xcc, 0x01}; Tox_Events *events = tox_events_load(&sys, 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, 0x01, 0x01})); tox_events_free(events); } TEST(ToxEvents, DealsWithHugeMsgpackArrays) { const Tox_System sys = tox_default_system(); std::vector data{0xdd, 0xff, 0xff, 0xff, 0xff}; EXPECT_EQ(tox_events_load(&sys, data.data(), data.size()), nullptr); } } // namespace