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:
copilot-swe-agent[bot]
2025-08-31 04:57:44 +00:00
parent 90f325f59c
commit c20260cd85
9 changed files with 692 additions and 653 deletions

View 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);
}