1*a2056e9cSWilly Tu // Copyright 2021 Google LLC 2*a2056e9cSWilly Tu // 3*a2056e9cSWilly Tu // Licensed under the Apache License, Version 2.0 (the "License"); 4*a2056e9cSWilly Tu // you may not use this file except in compliance with the License. 5*a2056e9cSWilly Tu // You may obtain a copy of the License at 6*a2056e9cSWilly Tu // 7*a2056e9cSWilly Tu // http://www.apache.org/licenses/LICENSE-2.0 8*a2056e9cSWilly Tu // 9*a2056e9cSWilly Tu // Unless required by applicable law or agreed to in writing, software 10*a2056e9cSWilly Tu // distributed under the License is distributed on an "AS IS" BASIS, 11*a2056e9cSWilly Tu // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*a2056e9cSWilly Tu // See the License for the specific language governing permissions and 13*a2056e9cSWilly Tu // limitations under the License. 14*a2056e9cSWilly Tu 158cfa4c44Slinyuny #include "commands.hpp" 168cfa4c44Slinyuny #include "handler_mock.hpp" 178cfa4c44Slinyuny #include "host_power_off.hpp" 188cfa4c44Slinyuny 198cfa4c44Slinyuny #include <cstdint> 208cfa4c44Slinyuny #include <cstring> 218cfa4c44Slinyuny #include <vector> 228cfa4c44Slinyuny 238cfa4c44Slinyuny #include <gtest/gtest.h> 248cfa4c44Slinyuny 258cfa4c44Slinyuny #define MAX_IPMI_BUFFER 64 268cfa4c44Slinyuny 278cfa4c44Slinyuny namespace google 288cfa4c44Slinyuny { 298cfa4c44Slinyuny namespace ipmi 308cfa4c44Slinyuny { 318cfa4c44Slinyuny 328cfa4c44Slinyuny TEST(PowerOffCommandTest, InvalidRequestLength) 338cfa4c44Slinyuny { 348cfa4c44Slinyuny std::vector<std::uint8_t> request = {SysOEMCommands::SysHostPowerOff}; 358cfa4c44Slinyuny size_t dataLen = request.size(); 368cfa4c44Slinyuny std::uint8_t reply[MAX_IPMI_BUFFER]; 378cfa4c44Slinyuny 388cfa4c44Slinyuny HandlerMock hMock; 398cfa4c44Slinyuny EXPECT_EQ(IPMI_CC_REQ_DATA_LEN_INVALID, 408cfa4c44Slinyuny hostPowerOff(request.data(), reply, &dataLen, &hMock)); 418cfa4c44Slinyuny } 428cfa4c44Slinyuny 438cfa4c44Slinyuny TEST(PowerOffCommandTest, ValidRequest) 448cfa4c44Slinyuny { 458cfa4c44Slinyuny // Set the dealy to 15 mins 468cfa4c44Slinyuny std::uint32_t delayValue = 0x384; 478cfa4c44Slinyuny struct HostPowerOffRequest requestContents; 488cfa4c44Slinyuny requestContents.subcommand = SysOEMCommands::SysHostPowerOff; 498cfa4c44Slinyuny requestContents.delay = delayValue; 508cfa4c44Slinyuny 518cfa4c44Slinyuny std::vector<std::uint8_t> request(sizeof(requestContents)); 528cfa4c44Slinyuny std::memcpy(request.data(), &requestContents, sizeof(requestContents)); 538cfa4c44Slinyuny size_t dataLen = request.size(); 548cfa4c44Slinyuny std::uint8_t reply[MAX_IPMI_BUFFER]; 558cfa4c44Slinyuny 568cfa4c44Slinyuny HandlerMock hMock; 578cfa4c44Slinyuny EXPECT_CALL(hMock, hostPowerOffDelay(delayValue)); 588cfa4c44Slinyuny EXPECT_EQ(IPMI_CC_OK, 598cfa4c44Slinyuny hostPowerOff(request.data(), reply, &dataLen, &hMock)); 608cfa4c44Slinyuny } 618cfa4c44Slinyuny 628cfa4c44Slinyuny } // namespace ipmi 638cfa4c44Slinyuny } // namespace google 64