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