From 4d4caf8e58a06a5b121170bd1b237004e9e86e5f Mon Sep 17 00:00:00 2001
From: Carsten Patzke <carsten.patzke@desy.de>
Date: Wed, 8 Apr 2020 16:24:06 +0200
Subject: [PATCH] [RDS] Added request argument to SendResponse

---
 receiver/src/receiver_data_server/rds_net_server.h        | 3 ++-
 .../receiver_data_server_request_handler.cpp              | 2 +-
 receiver/src/receiver_data_server/tcp_server.cpp          | 5 +++--
 receiver/src/receiver_data_server/tcp_server.h            | 3 ++-
 .../receiver_data_server/receiver_dataserver_mocking.h    | 8 +++++---
 .../receiver_data_server/test_request_handler.cpp         | 1 +
 .../unittests/receiver_data_server/test_tcp_server.cpp    | 5 +++--
 7 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/receiver/src/receiver_data_server/rds_net_server.h b/receiver/src/receiver_data_server/rds_net_server.h
index 7498f7794..7465a5838 100644
--- a/receiver/src/receiver_data_server/rds_net_server.h
+++ b/receiver/src/receiver_data_server/rds_net_server.h
@@ -10,7 +10,8 @@ namespace asapo {
 class RdsNetServer {
   public:
     virtual GenericRequests GetNewRequests(Error* err) const noexcept = 0;
-    virtual Error SendResponse(uint64_t source_id, const GenericNetworkResponse* response) const noexcept = 0;
+    virtual Error SendResponse(const ReceiverDataServerRequest* request, uint64_t source_id,
+                               const GenericNetworkResponse* response) const noexcept = 0;
     virtual Error
     SendResponseAndSlotData(const ReceiverDataServerRequest* request, uint64_t source_id,
                             const GenericNetworkResponse* response,
diff --git a/receiver/src/receiver_data_server/receiver_data_server_request_handler.cpp b/receiver/src/receiver_data_server/receiver_data_server_request_handler.cpp
index c8668d763..c064a9772 100644
--- a/receiver/src/receiver_data_server/receiver_data_server_request_handler.cpp
+++ b/receiver/src/receiver_data_server/receiver_data_server_request_handler.cpp
@@ -19,7 +19,7 @@ Error ReceiverDataServerRequestHandler::SendResponse(const ReceiverDataServerReq
     GenericNetworkResponse response{};
     response.op_code = kOpcodeGetBufferData;
     response.error_code = code;
-    return server_->SendResponse(request->source_id, &response);
+    return server_->SendResponse(request, request->source_id, &response);
 }
 
 Error ReceiverDataServerRequestHandler::SendResponseAndSlotData(const ReceiverDataServerRequest* request,
diff --git a/receiver/src/receiver_data_server/tcp_server.cpp b/receiver/src/receiver_data_server/tcp_server.cpp
index 36c72c4fd..6dd04c636 100644
--- a/receiver/src/receiver_data_server/tcp_server.cpp
+++ b/receiver/src/receiver_data_server/tcp_server.cpp
@@ -94,7 +94,8 @@ void TcpServer::HandleAfterError(uint64_t source_id) const noexcept {
     CloseSocket(source_id);
 }
 
-Error TcpServer::SendResponse(uint64_t source_id, const GenericNetworkResponse* response) const noexcept {
+Error TcpServer::SendResponse(const ReceiverDataServerRequest* request, uint64_t source_id,
+                              const GenericNetworkResponse* response) const noexcept {
     Error err;
     io__->Send(source_id, response, sizeof(*response), &err);
     if (err) {
@@ -109,7 +110,7 @@ TcpServer::SendResponseAndSlotData(const ReceiverDataServerRequest* request, uin
                                    const CacheMeta* cache_slot) const noexcept {
     Error err;
 
-    err = SendResponse(source_id, response);
+    err = SendResponse(nullptr, source_id, response);
     if (err) {
         return err;
     }
diff --git a/receiver/src/receiver_data_server/tcp_server.h b/receiver/src/receiver_data_server/tcp_server.h
index 12d9aac11..c7caf5ecc 100644
--- a/receiver/src/receiver_data_server/tcp_server.h
+++ b/receiver/src/receiver_data_server/tcp_server.h
@@ -14,7 +14,8 @@ class TcpServer : public RdsNetServer {
     explicit TcpServer(std::string address);
     ~TcpServer() override;
     GenericRequests GetNewRequests(Error* err) const noexcept override ;
-    Error SendResponse(uint64_t source_id, const GenericNetworkResponse* response) const noexcept override;
+    Error SendResponse(const ReceiverDataServerRequest* request, uint64_t source_id,
+                       const GenericNetworkResponse* response) const noexcept override;
     Error SendResponseAndSlotData(const ReceiverDataServerRequest* request, uint64_t source_id,
                                   const GenericNetworkResponse* response,
                                   const CacheMeta* cache_slot) const noexcept override;
diff --git a/receiver/unittests/receiver_data_server/receiver_dataserver_mocking.h b/receiver/unittests/receiver_data_server/receiver_dataserver_mocking.h
index bfe19e409..dc8c1ef9e 100644
--- a/receiver/unittests/receiver_data_server/receiver_dataserver_mocking.h
+++ b/receiver/unittests/receiver_data_server/receiver_dataserver_mocking.h
@@ -27,10 +27,12 @@ class MockNetServer : public RdsNetServer {
     MOCK_CONST_METHOD1(GetNewRequests_t, std::vector<ReceiverDataServerRequest> (ErrorInterface**
                        error));
 
-    Error SendResponse(uint64_t source_id, const GenericNetworkResponse* response) const noexcept override  {
-        return  Error{SendResponse_t(source_id, response)};
+    Error SendResponse(const ReceiverDataServerRequest* request, uint64_t source_id,
+                       const GenericNetworkResponse* response) const noexcept override  {
+        return  Error{SendResponse_t(request, source_id, response)};
     };
-    MOCK_CONST_METHOD2(SendResponse_t, ErrorInterface * (uint64_t source_id, const GenericNetworkResponse* response));
+    MOCK_CONST_METHOD3(SendResponse_t, ErrorInterface * (const ReceiverDataServerRequest* request, uint64_t source_id,
+                       const GenericNetworkResponse* response));
 
     Error SendResponseAndSlotData(const ReceiverDataServerRequest* request, uint64_t source_id,
                                   const GenericNetworkResponse* response,
diff --git a/receiver/unittests/receiver_data_server/test_request_handler.cpp b/receiver/unittests/receiver_data_server/test_request_handler.cpp
index 7334eb182..613aaf477 100644
--- a/receiver/unittests/receiver_data_server/test_request_handler.cpp
+++ b/receiver/unittests/receiver_data_server/test_request_handler.cpp
@@ -87,6 +87,7 @@ void RequestHandlerTests::MockGetSlotAndUnlockIt(bool return_without_error) {
 
 void RequestHandlerTests::MockSendResponse(asapo::NetworkErrorCode expected_response_code, bool return_without_error) {
     EXPECT_CALL(mock_net, SendResponse_t(
+                    &request,
                     expected_source_id,
                     M_CheckResponse(asapo::kOpcodeGetBufferData, expected_response_code, "")
                 )).WillOnce(
diff --git a/receiver/unittests/receiver_data_server/test_tcp_server.cpp b/receiver/unittests/receiver_data_server/test_tcp_server.cpp
index 1d9127a50..40b1a4a82 100644
--- a/receiver/unittests/receiver_data_server/test_tcp_server.cpp
+++ b/receiver/unittests/receiver_data_server/test_tcp_server.cpp
@@ -236,8 +236,9 @@ TEST_F(TCPServerTests, GetNewRequestsReadOk) {
 
 TEST_F(TCPServerTests, SendResponse) {
     asapo::GenericNetworkResponse tmp {};
+    asapo::ReceiverDataServerRequest expectedRequest {{}, 30};
 
-    EXPECT_CALL(mock_io, Send_t(1, &tmp, sizeof(asapo::GenericNetworkResponse), _))
+    EXPECT_CALL(mock_io, Send_t(30, &tmp, sizeof(asapo::GenericNetworkResponse), _))
     .WillOnce(
         DoAll(
             testing::SetArgPointee<3>(asapo::IOErrorTemplates::kUnknownIOError.Generate().release()),
@@ -246,7 +247,7 @@ TEST_F(TCPServerTests, SendResponse) {
 
     EXPECT_CALL(mock_logger, Error(HasSubstr("cannot send")));
 
-    auto err = tcp_server.SendResponse(1, &tmp);
+    auto err = tcp_server.SendResponse(&expectedRequest, 30, &tmp);
 
     ASSERT_THAT(err, Ne(nullptr));
 }
-- 
GitLab