1*8cfa4c44Slinyuny #include "commands.hpp" 2*8cfa4c44Slinyuny #include "handler_mock.hpp" 3*8cfa4c44Slinyuny #include "host_power_off.hpp" 4*8cfa4c44Slinyuny 5*8cfa4c44Slinyuny #include <cstdint> 6*8cfa4c44Slinyuny #include <cstring> 7*8cfa4c44Slinyuny #include <vector> 8*8cfa4c44Slinyuny 9*8cfa4c44Slinyuny #include <gtest/gtest.h> 10*8cfa4c44Slinyuny 11*8cfa4c44Slinyuny #define MAX_IPMI_BUFFER 64 12*8cfa4c44Slinyuny 13*8cfa4c44Slinyuny namespace google 14*8cfa4c44Slinyuny { 15*8cfa4c44Slinyuny namespace ipmi 16*8cfa4c44Slinyuny { 17*8cfa4c44Slinyuny 18*8cfa4c44Slinyuny TEST(PowerOffCommandTest, InvalidRequestLength) 19*8cfa4c44Slinyuny { 20*8cfa4c44Slinyuny std::vector<std::uint8_t> request = {SysOEMCommands::SysHostPowerOff}; 21*8cfa4c44Slinyuny size_t dataLen = request.size(); 22*8cfa4c44Slinyuny std::uint8_t reply[MAX_IPMI_BUFFER]; 23*8cfa4c44Slinyuny 24*8cfa4c44Slinyuny HandlerMock hMock; 25*8cfa4c44Slinyuny EXPECT_EQ(IPMI_CC_REQ_DATA_LEN_INVALID, 26*8cfa4c44Slinyuny hostPowerOff(request.data(), reply, &dataLen, &hMock)); 27*8cfa4c44Slinyuny } 28*8cfa4c44Slinyuny 29*8cfa4c44Slinyuny TEST(PowerOffCommandTest, ValidRequest) 30*8cfa4c44Slinyuny { 31*8cfa4c44Slinyuny // Set the dealy to 15 mins 32*8cfa4c44Slinyuny std::uint32_t delayValue = 0x384; 33*8cfa4c44Slinyuny struct HostPowerOffRequest requestContents; 34*8cfa4c44Slinyuny requestContents.subcommand = SysOEMCommands::SysHostPowerOff; 35*8cfa4c44Slinyuny requestContents.delay = delayValue; 36*8cfa4c44Slinyuny 37*8cfa4c44Slinyuny std::vector<std::uint8_t> request(sizeof(requestContents)); 38*8cfa4c44Slinyuny std::memcpy(request.data(), &requestContents, sizeof(requestContents)); 39*8cfa4c44Slinyuny size_t dataLen = request.size(); 40*8cfa4c44Slinyuny std::uint8_t reply[MAX_IPMI_BUFFER]; 41*8cfa4c44Slinyuny 42*8cfa4c44Slinyuny HandlerMock hMock; 43*8cfa4c44Slinyuny EXPECT_CALL(hMock, hostPowerOffDelay(delayValue)); 44*8cfa4c44Slinyuny EXPECT_EQ(IPMI_CC_OK, 45*8cfa4c44Slinyuny hostPowerOff(request.data(), reply, &dataLen, &hMock)); 46*8cfa4c44Slinyuny } 47*8cfa4c44Slinyuny 48*8cfa4c44Slinyuny } // namespace ipmi 49*8cfa4c44Slinyuny } // namespace google 50