blob: bc8669d71dcb11f3d2e9f163d65b6503de330c3a [file] [log] [blame]
Patrick Venture5c4b17b2018-10-04 10:32:22 -07001#include "ipmi.hpp"
Patrick Venturecd8dab42019-01-15 19:57:38 -08002#include "manager_mock.hpp"
Patrick Venture5c4b17b2018-10-04 10:32:22 -07003
Patrick Venture5c4b17b2018-10-04 10:32:22 -07004#include <cstring>
5
6#include <gtest/gtest.h>
7
8namespace blobs
9{
10using ::testing::ElementsAreArray;
11using ::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
17TEST(BlobWriteMetaTest, ManagerReturnsFailureReturnsFailure)
18{
19 // This verifies a failure from the manager is passed back.
Patrick Venture5c4b17b2018-10-04 10:32:22 -070020 ManagerMock mgr;
Willy Tu067ece12022-06-16 02:07:06 -070021 std::vector<uint8_t> request;
22 struct BmcBlobWriteMetaTx req;
Patrick Venture5c4b17b2018-10-04 10:32:22 -070023
Willy Tu067ece12022-06-16 02:07:06 -070024 req.crc = 0;
25 req.sessionId = 0x54;
26 req.offset = 0x100;
Patrick Venture5c4b17b2018-10-04 10:32:22 -070027
Willy Tu067ece12022-06-16 02:07:06 -070028 request.resize(sizeof(struct BmcBlobWriteMetaTx));
29 std::memcpy(request.data(), &req, sizeof(struct BmcBlobWriteMetaTx));
Patrick Venture5c4b17b2018-10-04 10:32:22 -070030
Willy Tu067ece12022-06-16 02:07:06 -070031 std::array<uint8_t, 2> expectedBytes = {0x66, 0x67};
32 request.insert(request.end(), expectedBytes.begin(), expectedBytes.end());
Patrick Venture5c4b17b2018-10-04 10:32:22 -070033
Willy Tu067ece12022-06-16 02:07:06 -070034 EXPECT_CALL(mgr, writeMeta(req.sessionId, req.offset,
35 ElementsAreArray(expectedBytes)))
Patrick Venture5c4b17b2018-10-04 10:32:22 -070036 .WillOnce(Return(false));
37
Willy Tu067ece12022-06-16 02:07:06 -070038 EXPECT_EQ(ipmi::responseUnspecifiedError(), writeMeta(&mgr, request));
Patrick Venture5c4b17b2018-10-04 10:32:22 -070039}
40
41TEST(BlobWriteMetaTest, ManagerReturnsTrueWriteSucceeds)
42{
43 // The case where everything works.
Patrick Venture5c4b17b2018-10-04 10:32:22 -070044 ManagerMock mgr;
Willy Tu067ece12022-06-16 02:07:06 -070045 std::vector<uint8_t> request;
46 struct BmcBlobWriteMetaTx req;
Patrick Venture5c4b17b2018-10-04 10:32:22 -070047
Willy Tu067ece12022-06-16 02:07:06 -070048 req.crc = 0;
49 req.sessionId = 0x54;
50 req.offset = 0x100;
Patrick Venture5c4b17b2018-10-04 10:32:22 -070051
Willy Tu067ece12022-06-16 02:07:06 -070052 request.resize(sizeof(struct BmcBlobWriteMetaTx));
53 std::memcpy(request.data(), &req, sizeof(struct BmcBlobWriteMetaTx));
Patrick Venture5c4b17b2018-10-04 10:32:22 -070054
Willy Tu067ece12022-06-16 02:07:06 -070055 std::array<uint8_t, 2> expectedBytes = {0x66, 0x67};
56 request.insert(request.end(), expectedBytes.begin(), expectedBytes.end());
Patrick Venture5c4b17b2018-10-04 10:32:22 -070057
Willy Tu067ece12022-06-16 02:07:06 -070058 EXPECT_CALL(mgr, writeMeta(req.sessionId, req.offset,
59 ElementsAreArray(expectedBytes)))
Patrick Venture5c4b17b2018-10-04 10:32:22 -070060 .WillOnce(Return(true));
61
Willy Tu067ece12022-06-16 02:07:06 -070062 EXPECT_EQ(ipmi::responseSuccess(std::vector<uint8_t>{}),
63 writeMeta(&mgr, request));
Patrick Venture5c4b17b2018-10-04 10:32:22 -070064}
65} // namespace blobs