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