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