blob: 4f50ae0bfe6a79c2c9fc001c127f3546cf575d2f [file] [log] [blame]
Deepak Kodihalli1521f6d2020-06-16 08:51:02 -05001#include "pldmd/invoker.hpp"
Deepak Kodihallibc669f12019-11-28 08:52:07 -06002
George Liuc453e162022-12-21 17:16:23 +08003#include <libpldm/base.h>
4
Deepak Kodihallibc669f12019-11-28 08:52:07 -06005#include <stdexcept>
6
Deepak Kodihallibc669f12019-11-28 08:52:07 -06007#include <gtest/gtest.h>
8
9using namespace pldm;
10using namespace pldm::responder;
11constexpr Command testCmd = 0xFF;
12constexpr Type testType = 0xFF;
13
14class TestHandler : public CmdHandler
15{
16 public:
17 TestHandler()
18 {
19 handlers.emplace(testCmd,
20 [this](const pldm_msg* request, size_t payloadLength) {
Patrick Williams6da4f912023-05-10 07:50:53 -050021 return this->handle(request, payloadLength);
22 });
Deepak Kodihallibc669f12019-11-28 08:52:07 -060023 }
24
25 Response handle(const pldm_msg* /*request*/, size_t /*payloadLength*/)
26 {
27 return {100, 200};
28 }
29};
30
John Wang7f02d702019-12-03 13:38:14 +080031TEST(CcOnlyResponse, testEncode)
32{
33 std::vector<uint8_t> requestMsg(sizeof(pldm_msg_hdr));
34 auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
35 encode_get_types_req(0, request);
36
37 auto responseMsg = CmdHandler::ccOnlyResponse(request, PLDM_ERROR);
38 std::vector<uint8_t> expectMsg = {0, 0, 4, 1};
39 EXPECT_EQ(responseMsg, expectMsg);
40}
41
Deepak Kodihallibc669f12019-11-28 08:52:07 -060042TEST(Registration, testSuccess)
43{
44 Invoker invoker{};
45 invoker.registerHandler(testType, std::make_unique<TestHandler>());
46 auto result = invoker.handle(testType, testCmd, nullptr, 0);
47 ASSERT_EQ(result[0], 100);
48 ASSERT_EQ(result[1], 200);
49}
50
51TEST(Registration, testFailure)
52{
53 Invoker invoker{};
54 ASSERT_THROW(invoker.handle(testType, testCmd, nullptr, 0),
55 std::out_of_range);
56 invoker.registerHandler(testType, std::make_unique<TestHandler>());
57 uint8_t badCmd = 0xFE;
58 ASSERT_THROW(invoker.handle(testType, badCmd, nullptr, 0),
59 std::out_of_range);
60}