blob: 9807c91ede27eaa383a729c2cf379d8fca93b90b [file] [log] [blame]
Patrick Venture0e9aae52020-08-13 13:07:09 -07001#include "commands.hpp"
Patrick Venture1ddb94f2019-03-13 16:01:35 -07002#include "eth.hpp"
Patrick Venturef085d912019-03-15 08:50:00 -07003#include "handler_mock.hpp"
Patrick Venture1ddb94f2019-03-13 16:01:35 -07004
5#include <cstdint>
6#include <cstring>
Patrick Venturef085d912019-03-15 08:50:00 -07007#include <string>
8#include <tuple>
Patrick Venture1ddb94f2019-03-13 16:01:35 -07009#include <vector>
10
11#include <gtest/gtest.h>
12
13#define MAX_IPMI_BUFFER 64
14
Patrick Venturef085d912019-03-15 08:50:00 -070015using ::testing::Return;
16
Patrick Venture1ddb94f2019-03-13 16:01:35 -070017namespace google
18{
19namespace ipmi
20{
21
22TEST(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'};
William A. Kennington IIIb69209b2021-07-13 13:22:24 -070030 const std::uint8_t expectedChannel = 14;
Patrick Venture1ddb94f2019-03-13 16:01:35 -070031
Patrick Venturef085d912019-03-15 08:50:00 -070032 HandlerMock hMock;
William A. Kennington IIIb69209b2021-07-13 13:22:24 -070033 EXPECT_CALL(hMock, getEthDetails(""))
Patrick Venturef085d912019-03-15 08:50:00 -070034 .WillOnce(Return(std::make_tuple(
35 expectedChannel,
36 std::string(expectedAnswer,
37 expectedAnswer + sizeof(expectedAnswer)))));
38
39 EXPECT_EQ(IPMI_CC_OK,
Patrick Venture45fad1b2019-03-18 16:52:14 -070040 getEthDevice(request.data(), &reply[0], &dataLen, &hMock));
Patrick Venture1ddb94f2019-03-13 16:01:35 -070041 struct EthDeviceReply check;
42 std::memcpy(&check, &reply[0], sizeof(check));
43 EXPECT_EQ(check.subcommand, SysOEMCommands::SysGetEthDevice);
Patrick Venturef085d912019-03-15 08:50:00 -070044 EXPECT_EQ(check.channel, expectedChannel);
Patrick Venture45fad1b2019-03-18 16:52:14 -070045 EXPECT_EQ(check.ifNameLength, sizeof(expectedAnswer));
Patrick Venture1ddb94f2019-03-13 16:01:35 -070046 EXPECT_EQ(0, std::memcmp(expectedAnswer, &reply[sizeof(check)],
47 sizeof(expectedAnswer)));
48}
49
William A. Kennington IIIb69209b2021-07-13 13:22:24 -070050TEST(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}
Patrick Venture1ddb94f2019-03-13 16:01:35 -070075} // namespace ipmi
76} // namespace google