Files
NazaraEngine/tests/Engine/Network/SocketPoller.cpp
Lynix 03e31af828 UnitTests: Choose a random port when testing
Former-commit-id: ce4e1c4b2b65327917bd0cf14b91102bfdab6327 [formerly e4390f995cb6ccb2c5e3b81a56acf0563d8d2679] [formerly a813d71a45dc17042129a31a8537b35ffaf93120 [formerly 683e75adf03f84ce2dc2454b4c22c2a20ca31668]]
Former-commit-id: 65fe6b63137fc3a55439d3ec777147ab51ed259a [formerly 310169d28ca078fdf76307bbf9f0a653c3c85d42]
Former-commit-id: fc03da2c66e08f6d349b5eedae057c5ab371ad9e
2016-10-07 15:23:08 +02:00

85 lines
2.2 KiB
C++

#include <Nazara/Math/Vector3.hpp>
#include <Nazara/Network/NetPacket.hpp>
#include <Nazara/Network/SocketPoller.hpp>
#include <Nazara/Network/TcpClient.hpp>
#include <Nazara/Network/TcpServer.hpp>
#include <Catch/catch.hpp>
#include <random>
SCENARIO("SocketPoller", "[NETWORK][SOCKETPOLLER]")
{
GIVEN("A TcpServer and a TcpClient in a selector")
{
std::random_device rd;
std::uniform_int_distribution<Nz::UInt16> dis(1025, 65535);
Nz::UInt16 port = dis(rd);
Nz::TcpServer server;
server.EnableBlocking(false);
REQUIRE(server.Listen(Nz::NetProtocol_IPv4, port) == Nz::SocketState_Bound);
Nz::IpAddress serverIP(Nz::IpAddress::LoopbackIpV4.ToIPv4(), port);
REQUIRE(serverIP.IsValid());
Nz::SocketPoller serverPoller;
Nz::TcpClient clientToServer;
WHEN("We register the server socket to the poller")
{
REQUIRE(serverPoller.RegisterSocket(server));
THEN("The poller should have registered our socket")
{
REQUIRE(serverPoller.IsRegistered(server));
}
AND_THEN("We connect using a TcpClient")
{
Nz::SocketState state = clientToServer.Connect(serverIP);
REQUIRE(state != Nz::SocketState_NotConnected);
AND_THEN("We wait on our selector, it should return true")
{
REQUIRE(serverPoller.Wait(1000));
Nz::TcpClient serverToClient;
REQUIRE(server.AcceptClient(&serverToClient));
WHEN("We register the client socket to the poller")
{
REQUIRE(serverPoller.RegisterSocket(serverToClient));
THEN("The poller should have registered our socket")
{
REQUIRE(serverPoller.IsRegistered(serverToClient));
}
AND_WHEN("We test sending data from the client to the server and checking the poller")
{
std::array<char, 5> buffer = {"Data"};
std::size_t sent;
REQUIRE(clientToServer.Send(buffer.data(), buffer.size(), &sent));
REQUIRE(sent == buffer.size());
REQUIRE(serverPoller.Wait(1000));
REQUIRE(serverPoller.IsReady(serverToClient));
REQUIRE(serverToClient.Read(buffer.data(), buffer.size()) == sent);
AND_THEN("Our selector should report no socket ready")
{
REQUIRE(!serverPoller.Wait(100));
REQUIRE(!serverPoller.IsReady(serverToClient));
}
}
}
}
}
}
}
}