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