mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2025-11-06 07:32:03 +00:00
Split PacketTests.cpp into multiple files by packet type and fix missing newlines
Co-authored-by: aronwk-aaron <26027722+aronwk-aaron@users.noreply.github.com>
This commit is contained in:
154
tests/dNetTests/PacketEdgeCaseTests.cpp
Normal file
154
tests/dNetTests/PacketEdgeCaseTests.cpp
Normal file
@@ -0,0 +1,154 @@
|
||||
#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);
|
||||
}
|
||||
Reference in New Issue
Block a user