1bc669f1bSDeepak Kodihalli #include "invoker.hpp" 2bc669f1bSDeepak Kodihalli 3bc669f1bSDeepak Kodihalli #include <stdexcept> 4bc669f1bSDeepak Kodihalli 5bc669f1bSDeepak Kodihalli #include "libpldm/base.h" 6bc669f1bSDeepak Kodihalli 7bc669f1bSDeepak Kodihalli #include <gtest/gtest.h> 8bc669f1bSDeepak Kodihalli 9bc669f1bSDeepak Kodihalli using namespace pldm; 10bc669f1bSDeepak Kodihalli using namespace pldm::responder; 11bc669f1bSDeepak Kodihalli constexpr Command testCmd = 0xFF; 12bc669f1bSDeepak Kodihalli constexpr Type testType = 0xFF; 13bc669f1bSDeepak Kodihalli 14bc669f1bSDeepak Kodihalli class TestHandler : public CmdHandler 15bc669f1bSDeepak Kodihalli { 16bc669f1bSDeepak Kodihalli public: 17bc669f1bSDeepak Kodihalli TestHandler() 18bc669f1bSDeepak Kodihalli { 19bc669f1bSDeepak Kodihalli handlers.emplace(testCmd, 20bc669f1bSDeepak Kodihalli [this](const pldm_msg* request, size_t payloadLength) { 21bc669f1bSDeepak Kodihalli return this->handle(request, payloadLength); 22bc669f1bSDeepak Kodihalli }); 23bc669f1bSDeepak Kodihalli } 24bc669f1bSDeepak Kodihalli 25bc669f1bSDeepak Kodihalli Response handle(const pldm_msg* /*request*/, size_t /*payloadLength*/) 26bc669f1bSDeepak Kodihalli { 27bc669f1bSDeepak Kodihalli return {100, 200}; 28bc669f1bSDeepak Kodihalli } 29bc669f1bSDeepak Kodihalli }; 30bc669f1bSDeepak Kodihalli 31*7f02d700SJohn Wang TEST(CcOnlyResponse, testEncode) 32*7f02d700SJohn Wang { 33*7f02d700SJohn Wang std::vector<uint8_t> requestMsg(sizeof(pldm_msg_hdr)); 34*7f02d700SJohn Wang auto request = reinterpret_cast<pldm_msg*>(requestMsg.data()); 35*7f02d700SJohn Wang encode_get_types_req(0, request); 36*7f02d700SJohn Wang 37*7f02d700SJohn Wang auto responseMsg = CmdHandler::ccOnlyResponse(request, PLDM_ERROR); 38*7f02d700SJohn Wang std::vector<uint8_t> expectMsg = {0, 0, 4, 1}; 39*7f02d700SJohn Wang EXPECT_EQ(responseMsg, expectMsg); 40*7f02d700SJohn Wang } 41*7f02d700SJohn Wang 42bc669f1bSDeepak Kodihalli TEST(Registration, testSuccess) 43bc669f1bSDeepak Kodihalli { 44bc669f1bSDeepak Kodihalli Invoker invoker{}; 45bc669f1bSDeepak Kodihalli invoker.registerHandler(testType, std::make_unique<TestHandler>()); 46bc669f1bSDeepak Kodihalli auto result = invoker.handle(testType, testCmd, nullptr, 0); 47bc669f1bSDeepak Kodihalli ASSERT_EQ(result[0], 100); 48bc669f1bSDeepak Kodihalli ASSERT_EQ(result[1], 200); 49bc669f1bSDeepak Kodihalli } 50bc669f1bSDeepak Kodihalli 51bc669f1bSDeepak Kodihalli TEST(Registration, testFailure) 52bc669f1bSDeepak Kodihalli { 53bc669f1bSDeepak Kodihalli Invoker invoker{}; 54bc669f1bSDeepak Kodihalli ASSERT_THROW(invoker.handle(testType, testCmd, nullptr, 0), 55bc669f1bSDeepak Kodihalli std::out_of_range); 56bc669f1bSDeepak Kodihalli invoker.registerHandler(testType, std::make_unique<TestHandler>()); 57bc669f1bSDeepak Kodihalli uint8_t badCmd = 0xFE; 58bc669f1bSDeepak Kodihalli ASSERT_THROW(invoker.handle(testType, badCmd, nullptr, 0), 59bc669f1bSDeepak Kodihalli std::out_of_range); 60bc669f1bSDeepak Kodihalli } 61