Init
This commit is contained in:
282
Samples/Tests/LocalIsConnectedTest.cpp
Normal file
282
Samples/Tests/LocalIsConnectedTest.cpp
Normal file
@ -0,0 +1,282 @@
|
||||
/*
|
||||
* 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 "LocalIsConnectedTest.h"
|
||||
|
||||
/*
|
||||
Description:
|
||||
Tests
|
||||
|
||||
IsLocalIP
|
||||
SendLoopback
|
||||
GetConnectionState
|
||||
GetLocalIP
|
||||
GetInternalID
|
||||
|
||||
Success conditions:
|
||||
All tests pass
|
||||
|
||||
Failure conditions:
|
||||
Any test fails
|
||||
|
||||
RakPeerInterface Functions used, tested indirectly by its use:
|
||||
Startup
|
||||
SetMaximumIncomingConnections
|
||||
Receive
|
||||
DeallocatePacket
|
||||
Send
|
||||
|
||||
RakPeerInterface Functions Explicitly Tested:
|
||||
IsLocalIP
|
||||
SendLoopback
|
||||
GetConnectionState
|
||||
GetLocalIP
|
||||
GetInternalID
|
||||
*/
|
||||
int LocalIsConnectedTest::RunTest(DataStructures::List<RakString> params,bool isVerbose,bool noPauses)
|
||||
{
|
||||
|
||||
RakPeerInterface *server,*client;
|
||||
destroyList.Clear(false,_FILE_AND_LINE_);
|
||||
|
||||
server=RakPeerInterface::GetInstance();
|
||||
destroyList.Push(server,_FILE_AND_LINE_);
|
||||
client=RakPeerInterface::GetInstance();
|
||||
destroyList.Push(client,_FILE_AND_LINE_);
|
||||
|
||||
client->Startup(1,&SocketDescriptor(),1);
|
||||
server->Startup(1,&SocketDescriptor(60000,0),1);
|
||||
server->SetMaximumIncomingConnections(1);
|
||||
|
||||
SystemAddress serverAddress;
|
||||
|
||||
serverAddress.SetBinaryAddress("127.0.0.1");
|
||||
serverAddress.port=60000;
|
||||
TimeMS entryTime=GetTimeMS();
|
||||
bool lastConnect=false;
|
||||
if (isVerbose)
|
||||
printf("Testing GetConnectionState\n");
|
||||
|
||||
while(!CommonFunctions::ConnectionStateMatchesOptions (client,serverAddress,true)&&GetTimeMS()-entryTime<5000)
|
||||
{
|
||||
|
||||
if(!CommonFunctions::ConnectionStateMatchesOptions (client,serverAddress,true,true,true,true))
|
||||
{
|
||||
lastConnect=client->Connect("127.0.0.1",serverAddress.port,0,0)==CONNECTION_ATTEMPT_STARTED;
|
||||
}
|
||||
|
||||
RakSleep(100);
|
||||
|
||||
}
|
||||
|
||||
if (!lastConnect)//Use thise method to only check if the connect function fails, detecting connected client is done next
|
||||
{
|
||||
if (isVerbose)
|
||||
DebugTools::ShowError("Client could not connect after 5 seconds\n",!noPauses && isVerbose,__LINE__,__FILE__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if(!CommonFunctions::ConnectionStateMatchesOptions (client,serverAddress,true))
|
||||
{
|
||||
if (isVerbose)
|
||||
DebugTools::ShowError("IsConnected did not detect connected client",!noPauses && isVerbose,__LINE__,__FILE__);
|
||||
return 2;
|
||||
}
|
||||
client->CloseConnection (serverAddress,true,0,LOW_PRIORITY);
|
||||
|
||||
if(!CommonFunctions::ConnectionStateMatchesOptions (client,serverAddress,true,false,false,true))
|
||||
{
|
||||
DebugTools::ShowError("IsConnected did not detect disconnecting client",!noPauses && isVerbose,__LINE__,__FILE__);
|
||||
return 3;
|
||||
}
|
||||
|
||||
RakSleep(1000);
|
||||
client->Connect("127.0.0.1",serverAddress.port,0,0);
|
||||
|
||||
if(!CommonFunctions::ConnectionStateMatchesOptions (client,serverAddress,true,true,true))
|
||||
{
|
||||
DebugTools::ShowError("IsConnected did not detect connecting client",!noPauses && isVerbose,__LINE__,__FILE__);
|
||||
|
||||
return 4;
|
||||
|
||||
}
|
||||
|
||||
entryTime=GetTimeMS();
|
||||
|
||||
while(!CommonFunctions::ConnectionStateMatchesOptions (client,serverAddress,true)&&GetTimeMS()-entryTime<5000)
|
||||
{
|
||||
|
||||
if(!CommonFunctions::ConnectionStateMatchesOptions (client,serverAddress,true,true,true,true))
|
||||
{
|
||||
client->Connect("127.0.0.1",serverAddress.port,0,0);
|
||||
}
|
||||
|
||||
RakSleep(100);
|
||||
|
||||
}
|
||||
|
||||
if (!CommonFunctions::ConnectionStateMatchesOptions (client,serverAddress,true))
|
||||
{
|
||||
if (isVerbose)
|
||||
DebugTools::ShowError("Client could not connect after 5 seconds\n",!noPauses && isVerbose,__LINE__,__FILE__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (isVerbose)
|
||||
printf("Testing IsLocalIP\n");
|
||||
|
||||
if (!client->IsLocalIP("127.0.0.1"))
|
||||
{
|
||||
if (isVerbose)
|
||||
DebugTools::ShowError("IsLocalIP failed test\n",!noPauses && isVerbose,__LINE__,__FILE__);
|
||||
return 5;
|
||||
}
|
||||
|
||||
if (isVerbose)
|
||||
printf("Testing SendLoopback\n");
|
||||
char str[]="AAAAAAAAAA";
|
||||
str[0]=(char)(ID_USER_PACKET_ENUM+1);
|
||||
client->SendLoopback(str, (int) strlen(str)+1);
|
||||
client->SendLoopback(str, (int) strlen(str)+1);
|
||||
client->SendLoopback(str, (int) strlen(str)+1);
|
||||
client->SendLoopback(str, (int) strlen(str)+1);
|
||||
client->SendLoopback(str, (int) strlen(str)+1);
|
||||
client->SendLoopback(str, (int) strlen(str)+1);
|
||||
client->SendLoopback(str, (int) strlen(str)+1);
|
||||
|
||||
bool recievedPacket=false;
|
||||
Packet *packet;
|
||||
|
||||
TimeMS stopWaiting = GetTimeMS() + 1000;
|
||||
while (GetTimeMS()<stopWaiting)
|
||||
{
|
||||
|
||||
for (packet=client->Receive(); packet; client->DeallocatePacket(packet), packet=client->Receive())
|
||||
{
|
||||
|
||||
if (packet->data[0]==ID_USER_PACKET_ENUM+1)
|
||||
{
|
||||
|
||||
recievedPacket=true;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (!recievedPacket)
|
||||
{
|
||||
if (isVerbose)
|
||||
DebugTools::ShowError("SendLoopback failed test\n",!noPauses && isVerbose,__LINE__,__FILE__);
|
||||
return 6;
|
||||
}
|
||||
|
||||
if (isVerbose)
|
||||
printf("Testing GetLocalIP\n");
|
||||
const char * localIp=client->GetLocalIP(0);
|
||||
|
||||
if (!client->IsLocalIP(localIp))
|
||||
{
|
||||
if (isVerbose)
|
||||
DebugTools::ShowError("GetLocalIP failed test\n",!noPauses && isVerbose,__LINE__,__FILE__);
|
||||
return 7;
|
||||
}
|
||||
|
||||
if (isVerbose)
|
||||
printf("Testing GetInternalID\n");
|
||||
|
||||
SystemAddress localAddress=client->GetInternalID();
|
||||
|
||||
char convertedIp[39];
|
||||
|
||||
sprintf(convertedIp,"%d.%d.%d.%d", ((localAddress.binaryAddress >> (24 - 8 * 3)) & 0xFF),((localAddress.binaryAddress >> (24 - 16)) & 0xFF),((localAddress.binaryAddress >> (24 - 8 )) & 0xFF),((localAddress.binaryAddress >> (24)) & 0xFF));
|
||||
|
||||
printf("GetInternalID returned %s\n",convertedIp);
|
||||
|
||||
if (!client->IsLocalIP(convertedIp))
|
||||
{
|
||||
if (isVerbose)
|
||||
DebugTools::ShowError("GetInternalID failed test\n",!noPauses && isVerbose,__LINE__,__FILE__);
|
||||
return 8;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
RakString LocalIsConnectedTest::GetTestName()
|
||||
{
|
||||
|
||||
return "LocalIsConnectedTest";
|
||||
|
||||
}
|
||||
|
||||
RakString LocalIsConnectedTest::ErrorCodeToString(int errorCode)
|
||||
{
|
||||
|
||||
switch (errorCode)
|
||||
{
|
||||
|
||||
case 0:
|
||||
return "No error";
|
||||
break;
|
||||
|
||||
case 1:
|
||||
return "Client could not connect after 5 seconds";
|
||||
break;
|
||||
case 2:
|
||||
return "IsConnected did not detect connected client";
|
||||
break;
|
||||
case 3:
|
||||
return "IsConnected did not detect disconnecting client";
|
||||
break;
|
||||
case 4:
|
||||
return "IsConnected did not detect connecting client";
|
||||
break;
|
||||
|
||||
case 5:
|
||||
return "IsLocalIP failed test";
|
||||
break;
|
||||
|
||||
case 6:
|
||||
return "Sendloopback failed test";
|
||||
break;
|
||||
|
||||
case 7:
|
||||
return "GetLocalIP failed test";
|
||||
break;
|
||||
|
||||
case 8:
|
||||
return "GetInternalID failed test";
|
||||
break;
|
||||
|
||||
default:
|
||||
return "Undefined Error";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
LocalIsConnectedTest::LocalIsConnectedTest(void)
|
||||
{
|
||||
}
|
||||
|
||||
LocalIsConnectedTest::~LocalIsConnectedTest(void)
|
||||
{
|
||||
}
|
||||
|
||||
void LocalIsConnectedTest::DestroyPeers()
|
||||
{
|
||||
|
||||
int theSize=destroyList.Size();
|
||||
|
||||
for (int i=0; i < theSize; i++)
|
||||
RakPeerInterface::DestroyInstance(destroyList[i]);
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user