Add blocking tcp server and client
This commit is contained in:
202
tests/tcp_blocking.cpp
Normal file
202
tests/tcp_blocking.cpp
Normal file
@@ -0,0 +1,202 @@
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
// STL includes
|
||||
#include <cstring>
|
||||
#include <thread>
|
||||
|
||||
// Project includes
|
||||
#include "tcp_client.hpp"
|
||||
#include "tcp_server.hpp"
|
||||
|
||||
|
||||
TEST(BlockingTcpServer, Accept) {
|
||||
tcp::BlockingServer server;
|
||||
tcp::BlockingClient client;
|
||||
|
||||
auto lisRes = server.start_listening(1234);
|
||||
|
||||
std::thread clientThread([&client]() {
|
||||
auto conRes = client.connect({"localhost"}, 1234);
|
||||
EXPECT_TRUE(conRes.has_value());
|
||||
});
|
||||
|
||||
std::thread serverThread([&server]() {
|
||||
auto accRes = server.accept();
|
||||
EXPECT_TRUE(accRes.has_value());
|
||||
});
|
||||
|
||||
serverThread.join();
|
||||
clientThread.join();
|
||||
}
|
||||
|
||||
TEST(BlockingTcpServer, RestartListening) {
|
||||
tcp::BlockingServer server;
|
||||
tcp::BlockingClient client;
|
||||
|
||||
auto lisRes = server.start_listening(1234);
|
||||
|
||||
std::thread clientThread([&client]() {
|
||||
auto conRes = client.connect({"localhost"}, 1234);
|
||||
EXPECT_TRUE(conRes.has_value());
|
||||
});
|
||||
|
||||
clientThread.join();
|
||||
|
||||
auto lisRes2 = server.start_listening(2345);
|
||||
|
||||
std::thread clientThread2([&client]() {
|
||||
auto conRes = client.connect({"localhost"}, 1234);
|
||||
EXPECT_FALSE(conRes.has_value());
|
||||
});
|
||||
|
||||
clientThread2.join();
|
||||
|
||||
std::thread clientThread3([&client]() {
|
||||
auto conRes2 = client.connect({"localhost"}, 2345);
|
||||
EXPECT_TRUE(conRes2.has_value());
|
||||
});
|
||||
|
||||
clientThread3.join();
|
||||
}
|
||||
|
||||
TEST(BlockingTcpServer, StopListening) {
|
||||
tcp::BlockingServer server;
|
||||
tcp::BlockingClient client;
|
||||
|
||||
auto lisRes = server.start_listening(1234);
|
||||
|
||||
std::thread clientThread([&client]() {
|
||||
auto conRes = client.connect({"localhost"}, 1234);
|
||||
EXPECT_TRUE(conRes.has_value());
|
||||
});
|
||||
|
||||
clientThread.join();
|
||||
|
||||
server.stop_listening();
|
||||
|
||||
std::thread clientThread2([&client]() {
|
||||
auto conRes2 = client.connect({"localhost"}, 1234);
|
||||
EXPECT_FALSE(conRes2.has_value());
|
||||
});
|
||||
|
||||
clientThread2.join();
|
||||
}
|
||||
|
||||
TEST(BlockingTcpServer, MultipleAccept) {
|
||||
tcp::BlockingServer server;
|
||||
tcp::BlockingClient client1;
|
||||
tcp::BlockingClient client2;
|
||||
|
||||
auto lisRes1 = server.start_listening(1234);
|
||||
|
||||
std::thread clientThread1([&client1]() {
|
||||
auto conRes1 = client1.connect({"localhost"}, 1234);
|
||||
EXPECT_TRUE(conRes1.has_value());
|
||||
});
|
||||
|
||||
std::thread clientThread2([&client2]() {
|
||||
auto conRes2 = client2.connect({"localhost"}, 1234);
|
||||
EXPECT_TRUE(conRes2.has_value());
|
||||
});
|
||||
|
||||
std::thread serverThread([&server]() {
|
||||
auto accRes1 = server.accept();
|
||||
EXPECT_TRUE(accRes1.has_value());
|
||||
|
||||
auto accRes2 = server.accept();
|
||||
EXPECT_TRUE(accRes2.has_value());
|
||||
});
|
||||
|
||||
clientThread1.join();
|
||||
clientThread2.join();
|
||||
serverThread.join();
|
||||
}
|
||||
|
||||
TEST(BlockingTcpServer, GetClientIPAsString) {
|
||||
tcp::BlockingServer server;
|
||||
tcp::BlockingClient client;
|
||||
|
||||
auto lisRes = server.start_listening(1234);
|
||||
auto conRes = client.connect({"localhost"}, 1234);
|
||||
auto accRes = server.accept();
|
||||
|
||||
auto ipRes = server.get_client_ip_as_string();
|
||||
if (!ipRes) return;
|
||||
|
||||
EXPECT_STREQ(ipRes.value().data(), "127.0.0.1");
|
||||
}
|
||||
|
||||
TEST(BlockingTcpClient, Connect) {
|
||||
tcp::BlockingServer server;
|
||||
tcp::BlockingClient client;
|
||||
|
||||
auto lisRes = server.start_listening(1234);
|
||||
|
||||
std::thread clientThread([&client]() {
|
||||
auto conRes = client.connect({"localhost"}, 1234);
|
||||
EXPECT_TRUE(conRes.has_value());
|
||||
});
|
||||
|
||||
clientThread.join();
|
||||
}
|
||||
|
||||
TEST(BlockingClient, Reconnect) {
|
||||
tcp::BlockingServer server1;
|
||||
tcp::BlockingServer server2;
|
||||
tcp::BlockingClient client;
|
||||
|
||||
auto lisRes1 = server1.start_listening(1234);
|
||||
auto lisRes2 = server2.start_listening(2345);
|
||||
|
||||
std::thread clientThread([&client]() {
|
||||
auto conRes = client.connect({"localhost"}, 1234);
|
||||
EXPECT_TRUE(conRes.has_value());
|
||||
});
|
||||
|
||||
clientThread.join();
|
||||
|
||||
std::thread clientThread2([&client]() {
|
||||
auto conRes2 = client.connect({"localhost"}, 2345);
|
||||
EXPECT_TRUE(conRes2.has_value());
|
||||
});
|
||||
|
||||
clientThread2.join();
|
||||
}
|
||||
|
||||
TEST(BlockingTcpClientServer, ClientSendServerReceive) {
|
||||
tcp::BlockingServer server;
|
||||
tcp::BlockingClient client;
|
||||
|
||||
auto lisRes = server.start_listening(1234);
|
||||
auto conRes = client.connect({"localhost"}, 1234);
|
||||
auto accRes = server.accept();
|
||||
|
||||
std::array<char, 14> txMsg = {"Hello, World!"};
|
||||
auto sendRes = client.send(std::as_bytes(std::span(txMsg)));
|
||||
|
||||
EXPECT_EQ(sendRes.value(), txMsg.size());
|
||||
|
||||
std::array<char, 1024> rxBuffer;
|
||||
auto recvRes = server.recv(std::as_writable_bytes(std::span(rxBuffer)));
|
||||
EXPECT_EQ(recvRes.value(), txMsg.size());
|
||||
EXPECT_EQ(std::strcmp(txMsg.data(), rxBuffer.data()), 0);
|
||||
}
|
||||
|
||||
TEST(BlockingTcpClientServer, ClientReceiveServerSend) {
|
||||
tcp::BlockingServer server;
|
||||
tcp::BlockingClient client;
|
||||
|
||||
auto lisRes = server.start_listening(1234);
|
||||
auto conRes = client.connect({"localhost"}, 1234);
|
||||
auto accRes = server.accept();
|
||||
|
||||
std::array<char, 14> txMsg = {"Hello, World!"};
|
||||
auto sendRes = server.send(std::as_bytes(std::span(txMsg)));
|
||||
|
||||
EXPECT_EQ(sendRes.value(), txMsg.size());
|
||||
|
||||
std::array<char, 1024> rxBuffer;
|
||||
auto recvRes = client.recv(std::as_writable_bytes(std::span(rxBuffer)));
|
||||
EXPECT_EQ(recvRes.value(), txMsg.size());
|
||||
EXPECT_EQ(std::strcmp(txMsg.data(), rxBuffer.data()), 0);
|
||||
}
|
||||
@@ -4,11 +4,11 @@
|
||||
#include <cstring>
|
||||
|
||||
// Project includes
|
||||
#include "tcp_server.hpp"
|
||||
#include "tcp_client.hpp"
|
||||
#include "tcp_server.hpp"
|
||||
|
||||
|
||||
TEST(TcpServer, Accept) {
|
||||
TEST(NonBlockingTcpServer, Accept) {
|
||||
tcp::NonBlockingServer server;
|
||||
tcp::NonBlockingClient client;
|
||||
|
||||
@@ -25,7 +25,7 @@ TEST(TcpServer, Accept) {
|
||||
EXPECT_FALSE(server.next_client_available());
|
||||
}
|
||||
|
||||
TEST(TcpServer, RestartListening) {
|
||||
TEST(NonBlockingTcpServer, RestartListening) {
|
||||
tcp::NonBlockingServer server;
|
||||
tcp::NonBlockingClient client;
|
||||
|
||||
@@ -48,7 +48,7 @@ TEST(TcpServer, RestartListening) {
|
||||
EXPECT_EQ(statRes2.value(), EISCONN);
|
||||
}
|
||||
|
||||
TEST(TcpServer, StopListening) {
|
||||
TEST(NonBlockingTcpServer, StopListening) {
|
||||
tcp::NonBlockingServer server;
|
||||
tcp::NonBlockingClient client;
|
||||
|
||||
@@ -67,7 +67,7 @@ TEST(TcpServer, StopListening) {
|
||||
EXPECT_EQ(client.get_last_connection_status().value(), ECONNREFUSED);
|
||||
}
|
||||
|
||||
TEST(TcpServer, DataAvailable) {
|
||||
TEST(NonBlockingTcpServer, DataAvailable) {
|
||||
tcp::NonBlockingServer server;
|
||||
tcp::NonBlockingClient client;
|
||||
|
||||
@@ -90,7 +90,7 @@ TEST(TcpServer, DataAvailable) {
|
||||
EXPECT_FALSE(server.data_available());
|
||||
}
|
||||
|
||||
TEST(TcpServer, GetClientIPAsString) {
|
||||
TEST(NonBlockingTcpServer, GetClientIPAsString) {
|
||||
tcp::NonBlockingServer server;
|
||||
tcp::NonBlockingClient client;
|
||||
|
||||
@@ -103,7 +103,7 @@ TEST(TcpServer, GetClientIPAsString) {
|
||||
EXPECT_STREQ(ipRes.value().data(), "127.0.0.1");
|
||||
}
|
||||
|
||||
TEST(TcpClient, Connect) {
|
||||
TEST(NonBlockingTcpClient, Connect) {
|
||||
tcp::NonBlockingServer server;
|
||||
tcp::NonBlockingClient client;
|
||||
|
||||
@@ -140,7 +140,7 @@ TEST(TcpClient, Connect) {
|
||||
EXPECT_EQ(statRes4.value(), ECONNREFUSED);
|
||||
}
|
||||
|
||||
TEST(TcpClient, Reconnect) {
|
||||
TEST(NonBlockingTcpClient, Reconnect) {
|
||||
tcp::NonBlockingServer server1;
|
||||
tcp::NonBlockingServer server2;
|
||||
tcp::NonBlockingClient client;
|
||||
@@ -161,7 +161,7 @@ TEST(TcpClient, Reconnect) {
|
||||
EXPECT_EQ(statRes2.value(), EISCONN);
|
||||
}
|
||||
|
||||
TEST(TcpClient, DataAvailable) {
|
||||
TEST(NonBlockingTcpClient, DataAvailable) {
|
||||
tcp::NonBlockingServer server;
|
||||
tcp::NonBlockingClient client;
|
||||
|
||||
@@ -187,7 +187,7 @@ TEST(TcpClient, DataAvailable) {
|
||||
EXPECT_FALSE(client.data_available());
|
||||
}
|
||||
|
||||
TEST(TcpClientServer, ClientSendServerReceive) {
|
||||
TEST(NonBlockingTcpClientServer, ClientSendServerReceive) {
|
||||
tcp::NonBlockingServer server;
|
||||
tcp::NonBlockingClient client;
|
||||
|
||||
@@ -207,7 +207,7 @@ TEST(TcpClientServer, ClientSendServerReceive) {
|
||||
EXPECT_EQ(std::strcmp(txMsg.data(), rxBuffer.data()), 0);
|
||||
}
|
||||
|
||||
TEST(TcpClientServer, ClientReceiveServerSend) {
|
||||
TEST(NonBlockingTcpClientServer, ClientReceiveServerSend) {
|
||||
tcp::NonBlockingServer server;
|
||||
tcp::NonBlockingClient client;
|
||||
|
||||
Reference in New Issue
Block a user