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(mctp_eid_t /*eid*/,
24                                             Request& /*request*/,
25                                             const pldm_msg** responseMsg,
26                                             size_t* responseLen) override
27     {
28         if (responseMsgs.empty() || responseMsg == nullptr ||
29             responseLen == nullptr)
30         {
31             co_return PLDM_ERROR;
32         }
33 
34         *responseMsg = responseMsgs.front();
35         *responseLen = responseLens.front() - sizeof(pldm_msg_hdr);
36 
37         responseMsgs.pop();
38         responseLens.pop();
39         co_return PLDM_SUCCESS;
40     }
41 
42     int enqueueResponse(pldm_msg* responseMsg, size_t responseLen)
43     {
44         if (responseMsg == nullptr)
45         {
46             return PLDM_ERROR_INVALID_DATA;
47         }
48 
49         if (responseLen <= sizeof(pldm_msg_hdr))
50         {
51             return PLDM_ERROR_INVALID_LENGTH;
52         }
53 
54         responseMsgs.push(responseMsg);
55         responseLens.push(responseLen);
56         return PLDM_SUCCESS;
57     }
58 
59     int clearQueuedResponses()
60     {
61         while (!responseMsgs.empty())
62         {
63             responseMsgs.pop();
64             responseLens.pop();
65         }
66         return PLDM_SUCCESS;
67     }
68 
69     std::queue<pldm_msg*> responseMsgs;
70     std::queue<size_t> responseLens;
71 };
72 
73 } // namespace platform_mc
74 } // namespace pldm
75