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,296 @@
/*
* 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 "PingTestsTest.h"
/*
Description:
Tests out:
virtual int GetAveragePing (const SystemAddress systemAddress)=0
virtual int GetLastPing (const SystemAddress systemAddress) const =0
virtual int GetLowestPing (const SystemAddress systemAddress) const =0
virtual void SetOccasionalPing (bool doPing)=0
Ping is tested in CrossConnectionConvertTest,SetOfflinePingResponse and GetOfflinePingResponse tested in OfflineMessagesConvertTest
Success conditions:
Currently is that GetAveragePing and SetOccasionalPing works
Failure conditions:
RakPeerInterface Functions used, tested indirectly by its use, not all encompassing list:
Startup
SetMaximumIncomingConnections
Receive
DeallocatePacket
RakPeerInterface Functions Explicitly Tested:
GetAveragePing
GetLastPing
GetLowestPing
SetOccasionalPing
*/
int PingTestsTest::RunTest(DataStructures::List<RakString> params,bool isVerbose,bool noPauses)
{
RakPeerInterface *sender,*sender2, *receiver;
destroyList.Clear(false,_FILE_AND_LINE_);
TestHelpers::StandardClientPrep(sender,destroyList);
TestHelpers::StandardClientPrep(sender2,destroyList);
receiver=RakPeerInterface::GetInstance();
destroyList.Push(receiver,_FILE_AND_LINE_);
receiver->Startup(2, &SocketDescriptor(60000,0), 1);
receiver->SetMaximumIncomingConnections(2);
Packet * packet;
SystemAddress currentSystem;
currentSystem.SetBinaryAddress("127.0.0.1");
currentSystem.port=60000;
printf("Connecting sender2\n");
if (!TestHelpers::WaitAndConnectTwoPeersLocally(sender2,receiver,5000))
{
if (isVerbose)
DebugTools::ShowError("Could not connect after 5 seconds\n",!noPauses && isVerbose,__LINE__,__FILE__);
return 2;
}
printf("Getting ping data for lastping and lowestping\n");
sender2->SetOccasionalPing(false);//Test the lowest ping and such without occassionalping,occasional ping comes later
RakTimer timer(1500);
int lastPing=0;
int lowestPing=0;
TimeMS nextPing=0;
while(!timer.IsExpired())
{
for (packet=receiver->Receive();packet;receiver->DeallocatePacket(packet),packet=receiver->Receive())
{
if (isVerbose)
printf("Receive packet id %i\n",packet->data[0]);
}
for (packet=sender2->Receive();packet;sender2->DeallocatePacket(packet),packet=sender2->Receive())
{
if (isVerbose)
printf("Send packet id %i\n",packet->data[0]);
}
if (GetTimeMS()>nextPing)
{
sender2->Ping(currentSystem);
nextPing=GetTimeMS()+30;
}
RakSleep(3);
}
int averagePing=sender2->GetAveragePing(currentSystem);
if (isVerbose)
printf("Average Ping time %i\n",averagePing);
lastPing=sender2->GetLastPing(currentSystem);
lowestPing=sender2->GetLowestPing(currentSystem);
if (isVerbose)
printf("Last Ping time %i\n",lastPing);
if (isVerbose)
printf("Lowest Ping time %i\n",lowestPing);
int returnVal=TestAverageValue(averagePing,__LINE__, noPauses, isVerbose);
if (returnVal!=0)
{
return returnVal;
}
if (lastPing>100)//100 MS for localhost?
{
if (isVerbose)
DebugTools::ShowError("Problem with the last ping time,greater then 100MS for localhost\n",!noPauses && isVerbose,__LINE__,__FILE__);
return 3;
}
if (lowestPing>10)//The lowest ping for localhost should drop below 10MS at least once
{
if (isVerbose)
DebugTools::ShowError("The lowest ping for localhost should drop below 10MS at least once\n",!noPauses && isVerbose,__LINE__,__FILE__);
return 4;
}
if (lastPing<lowestPing)
{
if (isVerbose)
DebugTools::ShowError("There is a problem if the lastping is lower than the lowestping stat\n",!noPauses && isVerbose,__LINE__,__FILE__);
return 5;
}
CommonFunctions::DisconnectAndWait(sender2,"127.0.0.1",60000);//Eliminate variables.
printf("Connecting sender\n");
if (!TestHelpers::WaitAndConnectTwoPeersLocally(sender,receiver,5000))
{
if (isVerbose)
DebugTools::ShowError("Could not connect after 5 seconds\n",!noPauses && isVerbose,__LINE__,__FILE__);
return 2;
}
lastPing=0;
lowestPing=0;
sender->SetOccasionalPing(true);
printf("Testing SetOccasionalPing\n");
timer.Start();
while(!timer.IsExpired())
{
for (packet=receiver->Receive();packet;receiver->DeallocatePacket(packet),packet=receiver->Receive())
{
if (isVerbose)
printf("Receive packet id %i\n",packet->data[0]);
}
for (packet=sender->Receive();packet;sender->DeallocatePacket(packet),packet=sender->Receive())
{
if (isVerbose)
printf("Send packet id %i\n",packet->data[0]);
}
RakSleep(3);
}
averagePing=sender->GetAveragePing(currentSystem);
if (isVerbose)
printf("Average Ping time %i\n",averagePing);
returnVal=TestAverageValue(averagePing,__LINE__, noPauses, isVerbose);
if (returnVal!=0)
{
return returnVal;
}
return 0;
}
int PingTestsTest::TestAverageValue(int averagePing,int line,bool noPauses,bool isVerbose)
{
if (averagePing<0)
{
if (isVerbose)
DebugTools::ShowError("Problem with the average ping time,should never be less than zero in this test\n",!noPauses && isVerbose,line,__FILE__);
return 1;
}
if (averagePing>10)//Average Ping should not be greater than 10MS for localhost. Command line pings typically give < 1ms
{
if (isVerbose)
DebugTools::ShowError("Average Ping should not be greater than 10MS for localhost. Command line pings typically give < 1ms\n",!noPauses && isVerbose,line,__FILE__);
return 5;
}
return 0;
}
RakString PingTestsTest::GetTestName()
{
return "PingTestsTest";
}
RakString PingTestsTest::ErrorCodeToString(int errorCode)
{
switch (errorCode)
{
case 0:
return "No error";
break;
case 1:
return "Problem with the average ping time,should never be less than 0 in this test";
break;
case 2:
return "Could not connect after 5 seconds";
break;
case 3:
return "Problem with the last ping time,greater then 100MS for localhost";
break;
case 4:
return "The lowest ping for localhost should drop below 10MS at least once";
break;
case 5:
return "There is a problem if the lastping is lower than the lowestping stat";
break;
case 6:
return "Average Ping should not be greater than 10MS for localhost. Command line pings typically give < 1ms";
break;
default:
return "Undefined Error";
}
}
PingTestsTest::PingTestsTest(void)
{
}
PingTestsTest::~PingTestsTest(void)
{
}
void PingTestsTest::DestroyPeers()
{
int theSize=destroyList.Size();
for (int i=0; i < theSize; i++)
RakPeerInterface::DestroyInstance(destroyList[i]);
}