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