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