1 #pragma once
2 
3 #include "platform-mc/terminus_manager.hpp"
4 
5 #include <queue>
6 
7 #include <gmock/gmock.h>
8 
9 namespace pldm
10 {
11 namespace platform_mc
12 {
13 
14 class MockTerminusManager : public TerminusManager
15 {
16   public:
17     MockTerminusManager(sdeventplus::Event& event, RequesterHandler& handler,
18                         pldm::InstanceIdDb& instanceIdDb,
19                         TerminiMapper& termini, Manager* manager) :
20         TerminusManager(event, handler, instanceIdDb, termini, manager)
21     {}
22 
23     exec::task<int> sendRecvPldmMsgOverMctp(
24         mctp_eid_t /*eid*/, Request& /*request*/, const pldm_msg** responseMsg,
25         size_t* responseLen) override
26     {
27         if (responseMsgs.empty() || responseMsg == nullptr ||
28             responseLen == nullptr)
29         {
30             co_return PLDM_ERROR;
31         }
32 
33         *responseMsg = responseMsgs.front();
34         *responseLen = responseLens.front() - sizeof(pldm_msg_hdr);
35 
36         responseMsgs.pop();
37         responseLens.pop();
38         co_return PLDM_SUCCESS;
39     }
40 
41     int enqueueResponse(pldm_msg* responseMsg, size_t responseLen)
42     {
43         if (responseMsg == nullptr)
44         {
45             return PLDM_ERROR_INVALID_DATA;
46         }
47 
48         if (responseLen <= sizeof(pldm_msg_hdr))
49         {
50             return PLDM_ERROR_INVALID_LENGTH;
51         }
52 
53         responseMsgs.push(responseMsg);
54         responseLens.push(responseLen);
55         return PLDM_SUCCESS;
56     }
57 
58     int clearQueuedResponses()
59     {
60         while (!responseMsgs.empty())
61         {
62             responseMsgs.pop();
63             responseLens.pop();
64         }
65         return PLDM_SUCCESS;
66     }
67 
68     std::queue<pldm_msg*> responseMsgs;
69     std::queue<size_t> responseLens;
70 };
71 
72 } // namespace platform_mc
73 } // namespace pldm
74