This commit is contained in:
2025-11-24 14:19:51 +05:30
commit f5c1412b28
6734 changed files with 1527575 additions and 0 deletions

View File

@ -0,0 +1,342 @@
/*
* Copyright (c) 2014, Oculus VR, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* RakNet License.txt file in the licenses directory of this source tree. An additional grant
* of patent rights can be found in the RakNet Patents.txt file in the same directory.
*
*/
#include "PacketAndLowLevelTestsTest.h"
/*
Description:
Tests out the sunctions:
virtual int RakPeerInterface::GetSplitMessageProgressInterval ( void ) const "
virtual void RakPeerInterface::PushBackPacket ( Packet * packet, bool pushAtHead ) "
virtual bool RakPeerInterface::SendList ( char ** data, const int * lengths, const int numParameters, PacketPriority priority, PacketReliability reliability, char orderingChannel, SystemAddress systemAddress, bool broadcast ) "
virtual void RakPeerInterface::SetSplitMessageProgressInterval ( int interval )
virtual void RakPeerInterface::SetUnreliableTimeout ( TimeMS timeoutMS )
virtual Packet* RakPeerInterface::AllocatePacket ( unsigned dataSize )
AttachPlugin (PluginInterface2 *plugin)=0
DetachPlugin (PluginInterface2 *plugin)=0
Success conditions:
Failure conditions:
RakPeerInterface Functions used, tested indirectly by its use,list may not be complete:
Startup
SetMaximumIncomingConnections
Receive
DeallocatePacket
Send
IsConnected
RakPeerInterface Functions Explicitly Tested:
GetSplitMessageProgressInterval
PushBackPacket
SendList
SetSplitMessageProgressInterval
AllocatePacket
GetMTUSize
AttachPlugin
DetachPlugin
*/
int PacketAndLowLevelTestsTest::RunTest(DataStructures::List<RakString> params,bool isVerbose,bool noPauses)
{
RakPeerInterface *server,*client;
destroyList.Clear(false,_FILE_AND_LINE_);
TestHelpers::StandardClientPrep(client,destroyList);
TestHelpers::StandardServerPrep(server,destroyList);
printf("Connecting to server\n");
if (!TestHelpers::WaitAndConnectTwoPeersLocally(client,server,5000))
{
if (isVerbose)
DebugTools::ShowError(errorList[1-1],!noPauses && isVerbose,__LINE__,__FILE__);
return 1;
}
printf("Testing SendList\n");
char* dataList2[5];
char **dataList=(char **)dataList2;
int lengths[5];
char curString1[]="AAAA";
char curString2[]="ABBB";
char curString3[]="ACCC";
char curString4[]="ADDD";
char curString5[]="AEEE";
dataList[0]=curString1;
dataList[1]=curString2;
dataList[2]=curString3;
dataList[3]=curString4;
dataList[4]=curString5;
for (int i=0;i<5;i++)
{
dataList[i][0]=ID_USER_PACKET_ENUM+1+i;
lengths[i]=5;
}
client->SendList((const char**)dataList,lengths,5,HIGH_PRIORITY,RELIABLE_ORDERED,0, UNASSIGNED_SYSTEM_ADDRESS, true);
Packet* packet;
if (!(packet=CommonFunctions::WaitAndReturnMessageWithID(server,ID_USER_PACKET_ENUM+1,1000)))
{
if (isVerbose)
DebugTools::ShowError(errorList[9-1],!noPauses && isVerbose,__LINE__,__FILE__);
return 9;
}
if (packet->length!=25)
{
if (isVerbose)
DebugTools::ShowError(errorList[13],!noPauses && isVerbose,__LINE__,__FILE__);
return 14;
}
server->DeallocatePacket(packet);
PluginInterface2* myPlug=new PacketChangerPlugin();
printf("Test attach detach of plugins\n");
client->AttachPlugin(myPlug);
TestHelpers::BroadCastTestPacket(client);
if (TestHelpers::WaitForTestPacket(server,2000))
{
if (isVerbose)
DebugTools::ShowError(errorList[2-1],!noPauses && isVerbose,__LINE__,__FILE__);
return 2;
}
client->DetachPlugin(myPlug);
TestHelpers::BroadCastTestPacket(client);
if (!TestHelpers::WaitForTestPacket(server,2000))
{
if (isVerbose)
DebugTools::ShowError(errorList[3-1],!noPauses && isVerbose,__LINE__,__FILE__);
return 3;
}
printf("Test AllocatePacket\n");
Packet * hugePacket,*hugePacket2;
const int dataSize=3000000;//around 30 meg didn't want to calculate the exact
hugePacket=client->AllocatePacket(dataSize);
hugePacket2=client->AllocatePacket(dataSize);
/*//Couldn't find a good cross platform way for allocated memory so skipped this check
if (somemalloccheck<3000000)
{}
*/
printf("Assuming 3000000 allocation for splitpacket, testing setsplitpacket\n");
hugePacket->data[0]=ID_USER_PACKET_ENUM+1;
hugePacket2->data[0]=ID_USER_PACKET_ENUM+1;
server->SetSplitMessageProgressInterval(1);
if (server->GetSplitMessageProgressInterval()!=1)
{
if (isVerbose)
DebugTools::ShowError(errorList[4-1],!noPauses && isVerbose,__LINE__,__FILE__);
return 4;
}
if (!client->Send((const char *)hugePacket->data,dataSize,HIGH_PRIORITY,RELIABLE_ORDERED,0, UNASSIGNED_SYSTEM_ADDRESS, true))
{
if (isVerbose)
DebugTools::ShowError(errorList[5-1],!noPauses && isVerbose,__LINE__,__FILE__);
return 5;
}
if (!CommonFunctions::WaitForMessageWithID(server,ID_DOWNLOAD_PROGRESS,2000))
{
if (isVerbose)
DebugTools::ShowError(errorList[6-1],!noPauses && isVerbose,__LINE__,__FILE__);
return 6;
}
while(CommonFunctions::WaitForMessageWithID(server,ID_DOWNLOAD_PROGRESS,500))//Clear out the rest before next test
{
}
printf("Making sure still connected, if not connect\n");
if (!TestHelpers::WaitAndConnectTwoPeersLocally(client,server,5000))//Make sure connected before test
{
if (isVerbose)
DebugTools::ShowError(errorList[11-1],!noPauses && isVerbose,__LINE__,__FILE__);
return 11;
}
printf("Making sure standard send/recieve still functioning\n");
TestHelpers::BroadCastTestPacket(client);
if (!TestHelpers::WaitForTestPacket(server,5000))
{
if (isVerbose)
DebugTools::ShowError(errorList[12],!noPauses && isVerbose,__LINE__,__FILE__);
return 13;
}
printf("Testing PushBackPacket\n");
server->PushBackPacket(hugePacket,false);
if (!TestHelpers::WaitForTestPacket(server,2000))
{
if (isVerbose)
DebugTools::ShowError(errorList[7-1],!noPauses && isVerbose,__LINE__,__FILE__);
return 7;
}
printf("Making sure still connected, if not connect\n");
if (!TestHelpers::WaitAndConnectTwoPeersLocally(client,server,5000))//Make sure connected before test
{
if (isVerbose)
DebugTools::ShowError(errorList[11-1],!noPauses && isVerbose,__LINE__,__FILE__);
return 11;
}
printf("Making sure standard send/recieve still functioning\n");
TestHelpers::BroadCastTestPacket(client);
if (!TestHelpers::WaitForTestPacket(server,2000))
{
if (isVerbose)
DebugTools::ShowError(errorList[12-1],!noPauses && isVerbose,__LINE__,__FILE__);
return 12;
}
printf("PushBackPacket head true test\n");
server->PushBackPacket(hugePacket2,true);
if (!TestHelpers::WaitForTestPacket(server,2000))
{
if (isVerbose)
DebugTools::ShowError(errorList[10-1],!noPauses && isVerbose,__LINE__,__FILE__);
return 10;
}
printf("Making sure still connected, if not connect\n");
if (!TestHelpers::WaitAndConnectTwoPeersLocally(client,server,5000))//Make sure connected before test
{
if (isVerbose)
DebugTools::ShowError(errorList[11-1],!noPauses && isVerbose,__LINE__,__FILE__);
return 11;
}
printf("Run recieve test\n");
TestHelpers::BroadCastTestPacket(client);
if (!TestHelpers::WaitForTestPacket(server,2000))
{
if (isVerbose)
DebugTools::ShowError(errorList[12-1],!noPauses && isVerbose,__LINE__,__FILE__);
return 12;
}
return 0;
}
void PacketAndLowLevelTestsTest::FloodWithHighPriority(RakPeerInterface* client)
{
for (int i=0;i<60000;i++)
{
TestHelpers::BroadCastTestPacket(client,UNRELIABLE,HIGH_PRIORITY,ID_USER_PACKET_ENUM+2);
}
}
RakString PacketAndLowLevelTestsTest::GetTestName()
{
return "PacketAndLowLevelTestsTest";
}
RakString PacketAndLowLevelTestsTest::ErrorCodeToString(int errorCode)
{
if (errorCode>0&&(unsigned int)errorCode<=errorList.Size())
{
return errorList[errorCode-1];
}
else
{
return "Undefined Error";
}
}
void PacketAndLowLevelTestsTest::DestroyPeers()
{
int theSize=destroyList.Size();
for (int i=0; i < theSize; i++)
RakPeerInterface::DestroyInstance(destroyList[i]);
}
PacketAndLowLevelTestsTest::PacketAndLowLevelTestsTest(void)
{
errorList.Push("Client failed to connect to server",_FILE_AND_LINE_);
errorList.Push("Attached plugin failed to modify packet",_FILE_AND_LINE_);
errorList.Push("Plugin is still modifying packets after detach",_FILE_AND_LINE_);
errorList.Push("GetSplitMessageProgressInterval returned wrong value",_FILE_AND_LINE_);
errorList.Push("Send to server failed",_FILE_AND_LINE_);
errorList.Push("Large packet did not split or did not properly get ID_DOWNLOAD_PROGRESS after SetSplitMessageProgressInterval is set to 1 millisecond",_FILE_AND_LINE_);
errorList.Push("Did not recieve and put on packet made with AllocatePacket and put on recieve stack with PushBackPacket",_FILE_AND_LINE_);
errorList.Push("Client failed to connect to server",_FILE_AND_LINE_);
errorList.Push("Did not recieve all packets from SendList",_FILE_AND_LINE_);
errorList.Push("Did not recieve and put on packet made with AllocatePacket and put on recieve stack with PushBackPacket",_FILE_AND_LINE_);
errorList.Push("Client failed to connect to server",_FILE_AND_LINE_);
errorList.Push("PushBackPacket messed up future communication",_FILE_AND_LINE_);
errorList.Push("Send/Recieve failed",_FILE_AND_LINE_);
errorList.Push("Recieved size incorrect",_FILE_AND_LINE_);
}
PacketAndLowLevelTestsTest::~PacketAndLowLevelTestsTest(void)
{
}