mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2025-09-07 07:41:26 +00:00
154 lines
4.0 KiB
C++
154 lines
4.0 KiB
C++
#include "TestCommon.h"
|
|
#include "AuthPackets.h"
|
|
#include "ChatPackets.h"
|
|
#include "WorldPackets.h"
|
|
|
|
class PacketEdgeCaseTests : public PacketTestsBase {};
|
|
|
|
// ===== Edge Cases and Boundary Tests =====
|
|
|
|
TEST_F(PacketEdgeCaseTests, EmptyStringsHandling) {
|
|
FindPlayerRequest request;
|
|
request.requestor = 0;
|
|
request.playerName = LUWString(u"");
|
|
|
|
RakNet::BitStream bitStream;
|
|
request.Serialize(bitStream);
|
|
|
|
// Skip header
|
|
uint8_t rakNetPacketId{};
|
|
uint16_t serviceType{};
|
|
uint32_t packetId{};
|
|
uint8_t always0{};
|
|
bitStream.Read(rakNetPacketId);
|
|
bitStream.Read(serviceType);
|
|
bitStream.Read(packetId);
|
|
bitStream.Read(always0);
|
|
|
|
FindPlayerRequest deserialized;
|
|
deserialized.Deserialize(bitStream);
|
|
|
|
ASSERT_EQ(deserialized.requestor, 0);
|
|
ASSERT_EQ(deserialized.playerName.string, u"");
|
|
}
|
|
|
|
TEST_F(PacketEdgeCaseTests, MaxValueHandling) {
|
|
// Test with maximum values
|
|
ShowAllRequest request;
|
|
request.requestor = LWOOBJID_EMPTY; // Max LWOOBJID
|
|
request.displayZoneData = true;
|
|
request.displayIndividualPlayers = true;
|
|
|
|
RakNet::BitStream bitStream;
|
|
request.Serialize(bitStream);
|
|
|
|
// Skip header
|
|
uint8_t rakNetPacketId{};
|
|
uint16_t serviceType{};
|
|
uint32_t packetId{};
|
|
uint8_t always0{};
|
|
bitStream.Read(rakNetPacketId);
|
|
bitStream.Read(serviceType);
|
|
bitStream.Read(packetId);
|
|
bitStream.Read(always0);
|
|
|
|
ShowAllRequest deserialized;
|
|
deserialized.Deserialize(bitStream);
|
|
|
|
ASSERT_EQ(deserialized.requestor, LWOOBJID_EMPTY);
|
|
ASSERT_EQ(deserialized.displayZoneData, true);
|
|
ASSERT_EQ(deserialized.displayIndividualPlayers, true);
|
|
}
|
|
|
|
TEST_F(PacketEdgeCaseTests, LongPasswordHandling) {
|
|
// Test with a very long password for HTTPMonitorInfo (which has port field)
|
|
HTTPMonitorInfo info;
|
|
info.port = 65535; // Max port value
|
|
info.openWeb = true;
|
|
info.supportsSum = true;
|
|
info.supportsDetail = true;
|
|
info.supportsWho = true;
|
|
info.supportsObjects = true;
|
|
|
|
RakNet::BitStream bitStream;
|
|
info.Serialize(bitStream);
|
|
|
|
// Read serialized data
|
|
uint16_t readPort;
|
|
uint8_t readOpenWeb;
|
|
uint8_t readSupportsSum;
|
|
uint8_t readSupportsDetail;
|
|
uint8_t readSupportsWho;
|
|
uint8_t readSupportsObjects;
|
|
|
|
bitStream.Read(readPort);
|
|
bitStream.Read(readOpenWeb);
|
|
bitStream.Read(readSupportsSum);
|
|
bitStream.Read(readSupportsDetail);
|
|
bitStream.Read(readSupportsWho);
|
|
bitStream.Read(readSupportsObjects);
|
|
|
|
ASSERT_EQ(readPort, 65535);
|
|
ASSERT_EQ(readOpenWeb, 1);
|
|
ASSERT_EQ(readSupportsSum, 1);
|
|
ASSERT_EQ(readSupportsDetail, 1);
|
|
ASSERT_EQ(readSupportsWho, 1);
|
|
ASSERT_EQ(readSupportsObjects, 1);
|
|
ASSERT_EQ(bitStream.GetNumberOfUnreadBits(), 0);
|
|
}
|
|
|
|
TEST_F(PacketEdgeCaseTests, PacketDataConsistency) {
|
|
// Test that multiple calls produce identical results
|
|
Stamp stamp1(eStamps::PASSPORT_AUTH_START, 100, 2000000000);
|
|
Stamp stamp2(eStamps::PASSPORT_AUTH_START, 100, 2000000000);
|
|
|
|
RakNet::BitStream stream1, stream2;
|
|
stamp1.Serialize(stream1);
|
|
stamp2.Serialize(stream2);
|
|
|
|
// Should produce identical bit streams
|
|
ASSERT_EQ(stream1.GetNumberOfBitsUsed(), stream2.GetNumberOfBitsUsed());
|
|
|
|
// Read both streams and compare
|
|
eStamps type1, type2;
|
|
uint32_t value1, value2;
|
|
uint64_t timestamp1, timestamp2;
|
|
|
|
stream1.Read(type1);
|
|
stream1.Read(value1);
|
|
stream1.Read(timestamp1);
|
|
|
|
stream2.Read(type2);
|
|
stream2.Read(value2);
|
|
stream2.Read(timestamp2);
|
|
|
|
ASSERT_EQ(type1, type2);
|
|
ASSERT_EQ(value1, value2);
|
|
ASSERT_EQ(timestamp1, timestamp2);
|
|
}
|
|
|
|
TEST_F(PacketEdgeCaseTests, UnicodeStringHandling) {
|
|
// Test with various Unicode characters
|
|
FindPlayerRequest request;
|
|
request.requestor = 12345;
|
|
request.playerName = LUWString(u"テストプレイヤー123"); // Japanese characters
|
|
|
|
RakNet::BitStream bitStream;
|
|
request.Serialize(bitStream);
|
|
|
|
// Skip header
|
|
uint8_t rakNetPacketId{};
|
|
uint16_t serviceType{};
|
|
uint32_t packetId{};
|
|
uint8_t always0{};
|
|
bitStream.Read(rakNetPacketId);
|
|
bitStream.Read(serviceType);
|
|
bitStream.Read(packetId);
|
|
bitStream.Read(always0);
|
|
|
|
FindPlayerRequest deserialized;
|
|
deserialized.Deserialize(bitStream);
|
|
|
|
ASSERT_EQ(deserialized.requestor, request.requestor);
|
|
ASSERT_EQ(deserialized.playerName.string, request.playerName.string);
|
|
} |