1 #include "commands.hpp"
2 #include "flash_size.hpp"
3 #include "handler_mock.hpp"
4 
5 #include <cstdint>
6 #include <cstring>
7 #include <string>
8 #include <vector>
9 
10 #include <gtest/gtest.h>
11 
12 #define MAX_IPMI_BUFFER 64
13 
14 using ::testing::Return;
15 
16 namespace google
17 {
18 namespace ipmi
19 {
20 
21 TEST(FlashSizeCommandTest, InvalidCommandLength)
22 {
23     // GetFlashSizeRequest is one byte, let's send 0.
24     std::vector<std::uint8_t> request = {};
25     size_t dataLen = request.size();
26     std::uint8_t reply[MAX_IPMI_BUFFER];
27 
28     HandlerMock hMock;
29     EXPECT_EQ(IPMI_CC_REQ_DATA_LEN_INVALID,
30               getFlashSize(request.data(), reply, &dataLen, &hMock));
31 }
32 
33 TEST(FlashSizeCommandTest, ValidRequest)
34 {
35     std::vector<std::uint8_t> request = {SysOEMCommands::SysGetFlashSize};
36     size_t dataLen = request.size();
37     std::uint8_t reply[MAX_IPMI_BUFFER];
38     uint32_t flashSize = 5422312; // 0x52BCE8
39 
40     HandlerMock hMock;
41     EXPECT_CALL(hMock, getFlashSize()).WillOnce(Return(flashSize));
42     EXPECT_EQ(IPMI_CC_OK,
43               getFlashSize(request.data(), reply, &dataLen, &hMock));
44     EXPECT_EQ(dataLen, 5);
45     EXPECT_EQ(reply[4], 0);
46     EXPECT_EQ(reply[3], 0x52);
47     EXPECT_EQ(reply[2], 0xBC);
48     EXPECT_EQ(reply[1], 0xE8);
49 }
50 
51 } // namespace ipmi
52 } // namespace google
53