xref: /openbmc/google-ipmi-sys/test/eth_unittest.cpp (revision b69209b498bf9b1c009c528e40280d13e68f8dbd)
1 #include "commands.hpp"
2 #include "eth.hpp"
3 #include "handler_mock.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 = 14;
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 TEST(EthCommandTest, ValidPopulatedReturnsSuccess)
51 {
52     std::vector<std::uint8_t> request = {SysOEMCommands::SysGetEthDevice, 'e'};
53     size_t dataLen = request.size();
54     std::uint8_t reply[MAX_IPMI_BUFFER];
55     const std::uint8_t expectedAnswer[1] = {'e'};
56     const std::uint8_t expectedChannel = 11;
57 
58     HandlerMock hMock;
59     EXPECT_CALL(hMock, getEthDetails("e"))
60         .WillOnce(Return(std::make_tuple(
61             expectedChannel,
62             std::string(expectedAnswer,
63                         expectedAnswer + sizeof(expectedAnswer)))));
64 
65     EXPECT_EQ(IPMI_CC_OK,
66               getEthDevice(request.data(), &reply[0], &dataLen, &hMock));
67     struct EthDeviceReply check;
68     std::memcpy(&check, &reply[0], sizeof(check));
69     EXPECT_EQ(check.subcommand, SysOEMCommands::SysGetEthDevice);
70     EXPECT_EQ(check.channel, expectedChannel);
71     EXPECT_EQ(check.ifNameLength, sizeof(expectedAnswer));
72     EXPECT_EQ(0, std::memcmp(expectedAnswer, &reply[sizeof(check)],
73                              sizeof(expectedAnswer)));
74 }
75 } // namespace ipmi
76 } // namespace google
77