1 #include "ipmi.hpp" 2 #include "manager_mock.hpp" 3 4 #include <cstring> 5 6 #include <gtest/gtest.h> 7 8 namespace blobs 9 { 10 using ::testing::ElementsAreArray; 11 using ::testing::Return; 12 13 // ipmid.hpp isn't installed where we can grab it and this value is per BMC 14 // SoC. 15 #define MAX_IPMI_BUFFER 64 16 17 TEST(BlobWriteMetaTest, ManagerReturnsFailureReturnsFailure) 18 { 19 // This verifies a failure from the manager is passed back. 20 ManagerMock mgr; 21 std::vector<uint8_t> request; 22 struct BmcBlobWriteMetaTx req; 23 24 req.crc = 0; 25 req.sessionId = 0x54; 26 req.offset = 0x100; 27 28 request.resize(sizeof(struct BmcBlobWriteMetaTx)); 29 std::memcpy(request.data(), &req, sizeof(struct BmcBlobWriteMetaTx)); 30 31 std::array<uint8_t, 2> expectedBytes = {0x66, 0x67}; 32 request.insert(request.end(), expectedBytes.begin(), expectedBytes.end()); 33 34 EXPECT_CALL(mgr, writeMeta(req.sessionId, req.offset, 35 ElementsAreArray(expectedBytes))) 36 .WillOnce(Return(false)); 37 38 EXPECT_EQ(ipmi::responseUnspecifiedError(), writeMeta(&mgr, request)); 39 } 40 41 TEST(BlobWriteMetaTest, ManagerReturnsTrueWriteSucceeds) 42 { 43 // The case where everything works. 44 ManagerMock mgr; 45 std::vector<uint8_t> request; 46 struct BmcBlobWriteMetaTx req; 47 48 req.crc = 0; 49 req.sessionId = 0x54; 50 req.offset = 0x100; 51 52 request.resize(sizeof(struct BmcBlobWriteMetaTx)); 53 std::memcpy(request.data(), &req, sizeof(struct BmcBlobWriteMetaTx)); 54 55 std::array<uint8_t, 2> expectedBytes = {0x66, 0x67}; 56 request.insert(request.end(), expectedBytes.begin(), expectedBytes.end()); 57 58 EXPECT_CALL(mgr, writeMeta(req.sessionId, req.offset, 59 ElementsAreArray(expectedBytes))) 60 .WillOnce(Return(true)); 61 62 EXPECT_EQ(ipmi::responseSuccess(std::vector<uint8_t>{}), 63 writeMeta(&mgr, request)); 64 } 65 } // namespace blobs 66