Former-commit-id: ce4e1c4b2b65327917bd0cf14b91102bfdab6327 [formerly e4390f995cb6ccb2c5e3b81a56acf0563d8d2679] [formerly a813d71a45dc17042129a31a8537b35ffaf93120 [formerly 683e75adf03f84ce2dc2454b4c22c2a20ca31668]] Former-commit-id: 65fe6b63137fc3a55439d3ec777147ab51ed259a [formerly 310169d28ca078fdf76307bbf9f0a653c3c85d42] Former-commit-id: fc03da2c66e08f6d349b5eedae057c5ab371ad9e
85 lines
2.2 KiB
C++
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));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|