Skip to content
Snippets Groups Projects
Commit d18b5205 authored by Carsten Patzke's avatar Carsten Patzke
Browse files

[fabric::rds::tcp] Removed GetNewRequests initialize behavior

parent eebd7a53
No related branches found
No related tags found
No related merge requests found
......@@ -9,6 +9,10 @@ namespace asapo {
class RdsNetServer {
public:
/**
* It is very important that this function is successfully called, before any other call is is made!
*/
virtual Error Initialize() = 0;
virtual GenericRequests GetNewRequests(Error* err) const noexcept = 0;
virtual Error SendResponse(const ReceiverDataServerRequest* request,
const GenericNetworkResponse* response) const noexcept = 0;
......
......@@ -17,6 +17,13 @@ config_{config}, statistics__{new Statistics()} {
}
void ReceiverDataServer::Run() {
{
Error startError = net__->Initialize();
if (startError) {
log__->Error(std::string("Error starting rds net server: ") + startError->Explain());
return;
}
}
while (true) {
statistics__->SendIfNeeded();
Error err;
......@@ -34,4 +41,4 @@ void ReceiverDataServer::Run() {
}
}
}
\ No newline at end of file
}
......@@ -9,7 +9,7 @@ namespace asapo {
TcpServer::TcpServer(std::string address) : io__{GenerateDefaultIO()}, log__{GetDefaultReceiverDataServerLogger()},
address_{std::move(address)} {}
Error TcpServer::InitializeMasterSocketIfNeeded() const noexcept {
Error TcpServer::Initialize() {
Error err;
if (master_socket_ == kDisconnectedSocketDescriptor) {
master_socket_ = io__->CreateAndBindIPTCPSocketListener(address_, kMaxPendingConnections, &err);
......@@ -18,6 +18,8 @@ Error TcpServer::InitializeMasterSocketIfNeeded() const noexcept {
} else {
log__->Error("dataserver cannot listen on " + address_ + ": " + err->Explain());
}
} else {
err = TextError("Server was already initialized");
}
return err;
}
......@@ -70,10 +72,6 @@ GenericRequests TcpServer::ReadRequests(const ListSocketDescriptors& sockets) co
}
GenericRequests TcpServer::GetNewRequests(Error* err) const noexcept {
if ( (*err = InitializeMasterSocketIfNeeded()) ) {
return {};
}
auto sockets = GetActiveSockets(err);
if (*err) {
return {};
......
......@@ -13,7 +13,10 @@ class TcpServer : public RdsNetServer {
public:
explicit TcpServer(std::string address);
~TcpServer() override;
GenericRequests GetNewRequests(Error* err) const noexcept override ;
Error Initialize() override;
GenericRequests GetNewRequests(Error* err) const noexcept override;
Error SendResponse(const ReceiverDataServerRequest* request,
const GenericNetworkResponse* response) const noexcept override;
Error SendResponseAndSlotData(const ReceiverDataServerRequest* request, const GenericNetworkResponse* response,
......@@ -24,7 +27,6 @@ class TcpServer : public RdsNetServer {
private:
void CloseSocket(SocketDescriptor socket) const noexcept;
ListSocketDescriptors GetActiveSockets(Error* err) const noexcept;
Error InitializeMasterSocketIfNeeded() const noexcept;
ReceiverDataServerRequestPtr ReadRequest(SocketDescriptor socket, Error* err) const noexcept;
GenericRequests ReadRequests(const ListSocketDescriptors& sockets) const noexcept;
mutable SocketDescriptor master_socket_{kDisconnectedSocketDescriptor};
......
......@@ -12,6 +12,11 @@ namespace asapo {
class MockNetServer : public RdsNetServer {
public:
Error Initialize() override {
return Error{Initialize_t()};
};
MOCK_CONST_METHOD0(Initialize_t, ErrorInterface * ());
GenericRequests GetNewRequests(Error* err) const noexcept override {
ErrorInterface* error = nullptr;
auto reqs = GetNewRequests_t(&error);
......
......@@ -59,14 +59,15 @@ class TCPServerTests : public Test {
void TearDown() override {
tcp_server.io__.release();
}
void ExpectListenMaster(bool ok);
void ExpectTcpBind(bool ok);
void WaitSockets(bool ok, ListSocketDescriptors clients = {});
void MockReceiveRequest(bool ok );
void MockReceiveRequest(bool ok);
void InitMasterServer();
void ExpectReceiveOk();
void ExpectReceiveRequestEof();
};
void TCPServerTests::ExpectListenMaster(bool ok) {
void TCPServerTests::ExpectTcpBind(bool ok) {
EXPECT_CALL(mock_io, CreateAndBindIPTCPSocketListener_t(expected_address, asapo::kMaxPendingConnections, _))
.WillOnce(DoAll(
SetArgPointee<2>(ok ? nullptr : asapo::IOErrorTemplates::kUnknownIOError.Generate().release()),
......@@ -93,24 +94,28 @@ void TCPServerTests::WaitSockets(bool ok, ListSocketDescriptors clients) {
}
}
TEST_F(TCPServerTests, GetNewRequestsInitializesSocket) {
Error err;
ExpectListenMaster(false);
void TCPServerTests::InitMasterServer() {
ExpectTcpBind(true);
ASSERT_THAT(tcp_server.Initialize(), Eq(nullptr));
}
auto requests = tcp_server.GetNewRequests(&err);
TEST_F(TCPServerTests, Initialize_Error) {
ExpectTcpBind(false);
Error err = tcp_server.Initialize();
ASSERT_THAT(err, Ne(nullptr));
ASSERT_THAT(requests, IsEmpty());
}
TEST_F(TCPServerTests, GetNewRequestsInitializesSocketOnlyOnce) {
TEST_F(TCPServerTests, Initialize_ErrorDoubleInitialize) {
Error err;
ExpectListenMaster(false);
tcp_server.GetNewRequests(&err);
tcp_server.GetNewRequests(&err);
ExpectTcpBind(true);
err = tcp_server.Initialize();
ASSERT_THAT(err, Eq(nullptr));
// ASSERT_THAT(err, Ne(nullptr));
err = tcp_server.Initialize();
ASSERT_THAT(err, Ne(nullptr));
}
void TCPServerTests::MockReceiveRequest(bool ok ) {
......@@ -162,10 +167,9 @@ void TCPServerTests::ExpectReceiveOk() {
}
}
TEST_F(TCPServerTests, GetNewRequestsWaitsSocketActivitiesError) {
Error err;
ExpectListenMaster(true);
InitMasterServer();
WaitSockets(false);
auto requests = tcp_server.GetNewRequests(&err);
......@@ -176,7 +180,7 @@ TEST_F(TCPServerTests, GetNewRequestsWaitsSocketActivitiesError) {
TEST_F(TCPServerTests, GetNewRequestsWaitsSocketReceiveFailure) {
Error err;
ExpectListenMaster(true);
InitMasterServer();
WaitSockets(true);
MockReceiveRequest(false);
......@@ -194,7 +198,7 @@ TEST_F(TCPServerTests, GetNewRequestsWaitsSocketReceiveFailure) {
TEST_F(TCPServerTests, GetNewRequestsReadEof) {
Error err;
ExpectListenMaster(true);
InitMasterServer();
WaitSockets(true);
ExpectReceiveRequestEof();
......@@ -212,9 +216,8 @@ TEST_F(TCPServerTests, GetNewRequestsReadEof) {
}
TEST_F(TCPServerTests, GetNewRequestsReadOk) {
Error
err;
ExpectListenMaster(true);
Error err;
InitMasterServer();
WaitSockets(true);
ExpectReceiveOk();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment