From dd8f583ddf9565dcd456a2d5c2307cc3c9edadaa Mon Sep 17 00:00:00 2001 From: Lynix Date: Mon, 26 Sep 2016 13:17:06 +0200 Subject: [PATCH] UnitTests: Add SocketPoller test Former-commit-id: b55e068f965f5caa4e4421c34e829522bc48a4cf [formerly c5496d8e4fa3b92bc2b950211de80f6b7e3fc967] [formerly ee508eb538748fd1c23d032fb825a03879a58e67 [formerly e18dff1d01ba1cc6df8351f6ea4b315809843a6c]] Former-commit-id: 307f7d01cfdcc4ec84eed0c36773349922e50a1d [formerly 4098ef95f0950a95b576c95e7a904d986d4c9cc0] Former-commit-id: 1c92830f710e774f575a6bc4ee5151b0c88b6369 --- tests/Engine/Network/SocketPoller.cpp | 81 +++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 tests/Engine/Network/SocketPoller.cpp diff --git a/tests/Engine/Network/SocketPoller.cpp b/tests/Engine/Network/SocketPoller.cpp new file mode 100644 index 000000000..1f9c782d2 --- /dev/null +++ b/tests/Engine/Network/SocketPoller.cpp @@ -0,0 +1,81 @@ +#include +#include +#include +#include + +#include +#include + +SCENARIO("SocketPoller", "[NETWORK][SOCKETPOLLER]") +{ + GIVEN("A TcpServer and a TcpClient in a selector") + { + Nz::UInt16 port = 64256; + 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 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)); + } + } + } + } + } + } + } +}