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 153b1b427cSWilly Tu #include "commands.hpp" 163b1b427cSWilly Tu #include "flash_size.hpp" 173b1b427cSWilly Tu #include "handler_mock.hpp" 183b1b427cSWilly Tu 193b1b427cSWilly Tu #include <cstdint> 203b1b427cSWilly Tu #include <cstring> 213b1b427cSWilly Tu #include <string> 223b1b427cSWilly Tu #include <vector> 233b1b427cSWilly Tu 243b1b427cSWilly Tu #include <gtest/gtest.h> 253b1b427cSWilly Tu 263b1b427cSWilly Tu #define MAX_IPMI_BUFFER 64 273b1b427cSWilly Tu 283b1b427cSWilly Tu using ::testing::Return; 293b1b427cSWilly Tu 303b1b427cSWilly Tu namespace google 313b1b427cSWilly Tu { 323b1b427cSWilly Tu namespace ipmi 333b1b427cSWilly Tu { 343b1b427cSWilly Tu 353b1b427cSWilly Tu TEST(FlashSizeCommandTest, InvalidCommandLength) 363b1b427cSWilly Tu { 373b1b427cSWilly Tu // GetFlashSizeRequest is one byte, let's send 0. 383b1b427cSWilly Tu std::vector<std::uint8_t> request = {}; 393b1b427cSWilly Tu size_t dataLen = request.size(); 403b1b427cSWilly Tu std::uint8_t reply[MAX_IPMI_BUFFER]; 413b1b427cSWilly Tu 423b1b427cSWilly Tu HandlerMock hMock; 433b1b427cSWilly Tu EXPECT_EQ(IPMI_CC_REQ_DATA_LEN_INVALID, 443b1b427cSWilly Tu getFlashSize(request.data(), reply, &dataLen, &hMock)); 453b1b427cSWilly Tu } 463b1b427cSWilly Tu 473b1b427cSWilly Tu TEST(FlashSizeCommandTest, ValidRequest) 483b1b427cSWilly Tu { 493b1b427cSWilly Tu std::vector<std::uint8_t> request = {SysOEMCommands::SysGetFlashSize}; 503b1b427cSWilly Tu size_t dataLen = request.size(); 513b1b427cSWilly Tu std::uint8_t reply[MAX_IPMI_BUFFER]; 523b1b427cSWilly Tu uint32_t flashSize = 5422312; // 0x52BCE8 533b1b427cSWilly Tu 543b1b427cSWilly Tu HandlerMock hMock; 553b1b427cSWilly Tu EXPECT_CALL(hMock, getFlashSize()).WillOnce(Return(flashSize)); 563b1b427cSWilly Tu EXPECT_EQ(IPMI_CC_OK, 573b1b427cSWilly Tu getFlashSize(request.data(), reply, &dataLen, &hMock)); 583b1b427cSWilly Tu EXPECT_EQ(dataLen, 5); 593b1b427cSWilly Tu EXPECT_EQ(reply[4], 0); 603b1b427cSWilly Tu EXPECT_EQ(reply[3], 0x52); 613b1b427cSWilly Tu EXPECT_EQ(reply[2], 0xBC); 623b1b427cSWilly Tu EXPECT_EQ(reply[1], 0xE8); 633b1b427cSWilly Tu } 643b1b427cSWilly Tu 653b1b427cSWilly Tu } // namespace ipmi 663b1b427cSWilly Tu } // namespace google 67