1ef3aeadcSPatrick Venture #include "ipmi.hpp"
2cd8dab49SPatrick Venture #include "manager_mock.hpp"
3ef3aeadcSPatrick Venture
4ef3aeadcSPatrick Venture #include <cstring>
5ef3aeadcSPatrick Venture #include <string>
6ef3aeadcSPatrick Venture
7ef3aeadcSPatrick Venture #include <gtest/gtest.h>
8ef3aeadcSPatrick Venture
9ef3aeadcSPatrick Venture namespace blobs
10ef3aeadcSPatrick Venture {
11ef3aeadcSPatrick Venture
12ef3aeadcSPatrick Venture using ::testing::Return;
13ef3aeadcSPatrick Venture using ::testing::StrEq;
14ef3aeadcSPatrick Venture
TEST(BlobDeleteTest,InvalidRequestLengthReturnsFailure)15ef3aeadcSPatrick Venture TEST(BlobDeleteTest, InvalidRequestLengthReturnsFailure)
16ef3aeadcSPatrick Venture {
17ef3aeadcSPatrick Venture // There is a minimum blobId length of one character, this test verifies
18ef3aeadcSPatrick Venture // we check that.
19ef3aeadcSPatrick Venture ManagerMock mgr;
20*067ece15SWilly Tu std::vector<uint8_t> request;
21*067ece15SWilly Tu struct BmcBlobDeleteTx req;
22*067ece15SWilly Tu req.crc = 0;
23ef3aeadcSPatrick Venture std::string blobId = "abc";
24ef3aeadcSPatrick Venture
25*067ece15SWilly Tu request.resize(sizeof(struct BmcBlobDeleteTx));
26*067ece15SWilly Tu std::memcpy(request.data(), &req, sizeof(struct BmcBlobDeleteTx));
27*067ece15SWilly Tu request.insert(request.end(), blobId.begin(), blobId.end());
28ef3aeadcSPatrick Venture
29*067ece15SWilly Tu EXPECT_EQ(ipmi::responseReqDataLenInvalid(), deleteBlob(&mgr, request));
30ef3aeadcSPatrick Venture }
31ef3aeadcSPatrick Venture
TEST(BlobDeleteTest,RequestRejectedReturnsFailure)32ef3aeadcSPatrick Venture TEST(BlobDeleteTest, RequestRejectedReturnsFailure)
33ef3aeadcSPatrick Venture {
34ef3aeadcSPatrick Venture // The blobId is rejected for any reason.
35ef3aeadcSPatrick Venture ManagerMock mgr;
36*067ece15SWilly Tu std::vector<uint8_t> request;
37*067ece15SWilly Tu struct BmcBlobDeleteTx req;
38*067ece15SWilly Tu req.crc = 0;
39ef3aeadcSPatrick Venture std::string blobId = "a";
40ef3aeadcSPatrick Venture
41*067ece15SWilly Tu request.resize(sizeof(struct BmcBlobDeleteTx));
42*067ece15SWilly Tu std::memcpy(request.data(), &req, sizeof(struct BmcBlobDeleteTx));
43*067ece15SWilly Tu request.insert(request.end(), blobId.begin(), blobId.end());
44*067ece15SWilly Tu request.emplace_back('\0');
45ef3aeadcSPatrick Venture
46ef3aeadcSPatrick Venture EXPECT_CALL(mgr, deleteBlob(StrEq(blobId))).WillOnce(Return(false));
47*067ece15SWilly Tu EXPECT_EQ(ipmi::responseUnspecifiedError(), deleteBlob(&mgr, request));
48ef3aeadcSPatrick Venture }
49ef3aeadcSPatrick Venture
TEST(BlobDeleteTest,BlobDeleteReturnsOk)50ef3aeadcSPatrick Venture TEST(BlobDeleteTest, BlobDeleteReturnsOk)
51ef3aeadcSPatrick Venture {
52ef3aeadcSPatrick Venture // The boring case where the blobId is deleted.
53ef3aeadcSPatrick Venture ManagerMock mgr;
54*067ece15SWilly Tu std::vector<uint8_t> request;
55*067ece15SWilly Tu struct BmcBlobDeleteTx req;
56*067ece15SWilly Tu req.crc = 0;
57ef3aeadcSPatrick Venture std::string blobId = "a";
58ef3aeadcSPatrick Venture
59*067ece15SWilly Tu request.resize(sizeof(struct BmcBlobDeleteTx));
60*067ece15SWilly Tu std::memcpy(request.data(), &req, sizeof(struct BmcBlobDeleteTx));
61*067ece15SWilly Tu request.insert(request.end(), blobId.begin(), blobId.end());
62*067ece15SWilly Tu request.emplace_back('\0');
63ef3aeadcSPatrick Venture
64ef3aeadcSPatrick Venture EXPECT_CALL(mgr, deleteBlob(StrEq(blobId))).WillOnce(Return(true));
65ef3aeadcSPatrick Venture
66*067ece15SWilly Tu EXPECT_EQ(ipmi::responseSuccess(std::vector<uint8_t>{}),
67*067ece15SWilly Tu deleteBlob(&mgr, request));
68ef3aeadcSPatrick Venture }
69ef3aeadcSPatrick Venture } // namespace blobs
70