xref: /openbmc/google-ipmi-sys/test/eth_unittest.cpp (revision 45fad1bb814c8078b28eb1da4a3c0ff2f82ee14b)
1 #include "eth.hpp"
2 #include "handler_mock.hpp"
3 #include "main.hpp"
4 
5 #include <cstdint>
6 #include <cstring>
7 #include <string>
8 #include <tuple>
9 #include <vector>
10 
11 #include <gtest/gtest.h>
12 
13 #define MAX_IPMI_BUFFER 64
14 
15 using ::testing::Return;
16 
17 namespace google
18 {
19 namespace ipmi
20 {
21 
22 TEST(EthCommandTest, ValidRequestReturnsSuccess)
23 {
24     // This command requests no input, therefore it will just return what it
25     // knows.
26     std::vector<std::uint8_t> request = {SysOEMCommands::SysGetEthDevice};
27     size_t dataLen = request.size();
28     std::uint8_t reply[MAX_IPMI_BUFFER];
29     const std::uint8_t expectedAnswer[4] = {'e', 't', 'h', '0'};
30     const std::uint8_t expectedChannel = 1;
31 
32     HandlerMock hMock;
33     EXPECT_CALL(hMock, getEthDetails())
34         .WillOnce(Return(std::make_tuple(
35             expectedChannel,
36             std::string(expectedAnswer,
37                         expectedAnswer + sizeof(expectedAnswer)))));
38 
39     EXPECT_EQ(IPMI_CC_OK,
40               getEthDevice(request.data(), &reply[0], &dataLen, &hMock));
41     struct EthDeviceReply check;
42     std::memcpy(&check, &reply[0], sizeof(check));
43     EXPECT_EQ(check.subcommand, SysOEMCommands::SysGetEthDevice);
44     EXPECT_EQ(check.channel, expectedChannel);
45     EXPECT_EQ(check.ifNameLength, sizeof(expectedAnswer));
46     EXPECT_EQ(0, std::memcmp(expectedAnswer, &reply[sizeof(check)],
47                              sizeof(expectedAnswer)));
48 }
49 
50 } // namespace ipmi
51 } // namespace google
52