xref: /openbmc/pldm/test/pldmd_registration_test.cpp (revision bc669f1b027873a4d6cac7b1298b87a41b869f02)
1*bc669f1bSDeepak Kodihalli #include "invoker.hpp"
2*bc669f1bSDeepak Kodihalli 
3*bc669f1bSDeepak Kodihalli #include <stdexcept>
4*bc669f1bSDeepak Kodihalli 
5*bc669f1bSDeepak Kodihalli #include "libpldm/base.h"
6*bc669f1bSDeepak Kodihalli 
7*bc669f1bSDeepak Kodihalli #include <gtest/gtest.h>
8*bc669f1bSDeepak Kodihalli 
9*bc669f1bSDeepak Kodihalli using namespace pldm;
10*bc669f1bSDeepak Kodihalli using namespace pldm::responder;
11*bc669f1bSDeepak Kodihalli constexpr Command testCmd = 0xFF;
12*bc669f1bSDeepak Kodihalli constexpr Type testType = 0xFF;
13*bc669f1bSDeepak Kodihalli 
14*bc669f1bSDeepak Kodihalli class TestHandler : public CmdHandler
15*bc669f1bSDeepak Kodihalli {
16*bc669f1bSDeepak Kodihalli   public:
17*bc669f1bSDeepak Kodihalli     TestHandler()
18*bc669f1bSDeepak Kodihalli     {
19*bc669f1bSDeepak Kodihalli         handlers.emplace(testCmd,
20*bc669f1bSDeepak Kodihalli                          [this](const pldm_msg* request, size_t payloadLength) {
21*bc669f1bSDeepak Kodihalli                              return this->handle(request, payloadLength);
22*bc669f1bSDeepak Kodihalli                          });
23*bc669f1bSDeepak Kodihalli     }
24*bc669f1bSDeepak Kodihalli 
25*bc669f1bSDeepak Kodihalli     Response handle(const pldm_msg* /*request*/, size_t /*payloadLength*/)
26*bc669f1bSDeepak Kodihalli     {
27*bc669f1bSDeepak Kodihalli         return {100, 200};
28*bc669f1bSDeepak Kodihalli     }
29*bc669f1bSDeepak Kodihalli };
30*bc669f1bSDeepak Kodihalli 
31*bc669f1bSDeepak Kodihalli TEST(Registration, testSuccess)
32*bc669f1bSDeepak Kodihalli {
33*bc669f1bSDeepak Kodihalli     Invoker invoker{};
34*bc669f1bSDeepak Kodihalli     invoker.registerHandler(testType, std::make_unique<TestHandler>());
35*bc669f1bSDeepak Kodihalli     auto result = invoker.handle(testType, testCmd, nullptr, 0);
36*bc669f1bSDeepak Kodihalli     ASSERT_EQ(result[0], 100);
37*bc669f1bSDeepak Kodihalli     ASSERT_EQ(result[1], 200);
38*bc669f1bSDeepak Kodihalli }
39*bc669f1bSDeepak Kodihalli 
40*bc669f1bSDeepak Kodihalli TEST(Registration, testFailure)
41*bc669f1bSDeepak Kodihalli {
42*bc669f1bSDeepak Kodihalli     Invoker invoker{};
43*bc669f1bSDeepak Kodihalli     ASSERT_THROW(invoker.handle(testType, testCmd, nullptr, 0),
44*bc669f1bSDeepak Kodihalli                  std::out_of_range);
45*bc669f1bSDeepak Kodihalli     invoker.registerHandler(testType, std::make_unique<TestHandler>());
46*bc669f1bSDeepak Kodihalli     uint8_t badCmd = 0xFE;
47*bc669f1bSDeepak Kodihalli     ASSERT_THROW(invoker.handle(testType, badCmd, nullptr, 0),
48*bc669f1bSDeepak Kodihalli                  std::out_of_range);
49*bc669f1bSDeepak Kodihalli }
50