blob: 94d9c6d149433d113adedb5cff08052a4508dd28 [file] [log] [blame]
Gilbert Chen6c7fed42022-02-22 15:40:17 +00001#pragma once
2
3#include "platform-mc/terminus_manager.hpp"
4
5#include <queue>
6
7#include <gmock/gmock.h>
8
9namespace pldm
10{
11namespace platform_mc
12{
13
14class MockTerminusManager : public TerminusManager
15{
16 public:
17 MockTerminusManager(sdeventplus::Event& event, RequesterHandler& handler,
18 pldm::InstanceIdDb& instanceIdDb,
19 TerminiMapper& termini, Manager* manager) :
Thu Nguyen51d66b52024-08-06 09:15:55 +000020 TerminusManager(event, handler, instanceIdDb, termini, manager,
21 pldm::BmcMctpEid)
Gilbert Chen6c7fed42022-02-22 15:40:17 +000022 {}
23
Patrick Williams16c2a0a2024-08-16 15:20:59 -040024 exec::task<int> sendRecvPldmMsgOverMctp(
25 mctp_eid_t /*eid*/, Request& /*request*/, const pldm_msg** responseMsg,
26 size_t* responseLen) override
Gilbert Chen6c7fed42022-02-22 15:40:17 +000027 {
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