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