blob: cb1401ac7ca3a59b541501fe76690ec669c6d529 [file] [log] [blame]
Patrick Ventureef3aead2018-09-12 08:53:29 -07001#include "ipmi.hpp"
Patrick Venturecd8dab42019-01-15 19:57:38 -08002#include "manager_mock.hpp"
Patrick Ventureef3aead2018-09-12 08:53:29 -07003
Patrick Ventureef3aead2018-09-12 08:53:29 -07004#include <cstring>
5#include <string>
6
7#include <gtest/gtest.h>
8
9namespace blobs
10{
11
Patrick Ventureef3aead2018-09-12 08:53:29 -070012using ::testing::Return;
13using ::testing::StrEq;
14
Patrick Ventureef3aead2018-09-12 08:53:29 -070015TEST(BlobDeleteTest, InvalidRequestLengthReturnsFailure)
16{
17 // There is a minimum blobId length of one character, this test verifies
18 // we check that.
Patrick Ventureef3aead2018-09-12 08:53:29 -070019 ManagerMock mgr;
Willy Tu067ece12022-06-16 02:07:06 -070020 std::vector<uint8_t> request;
21 struct BmcBlobDeleteTx req;
22 req.crc = 0;
Patrick Ventureef3aead2018-09-12 08:53:29 -070023 std::string blobId = "abc";
24
Willy Tu067ece12022-06-16 02:07:06 -070025 request.resize(sizeof(struct BmcBlobDeleteTx));
26 std::memcpy(request.data(), &req, sizeof(struct BmcBlobDeleteTx));
27 request.insert(request.end(), blobId.begin(), blobId.end());
Patrick Ventureef3aead2018-09-12 08:53:29 -070028
Willy Tu067ece12022-06-16 02:07:06 -070029 EXPECT_EQ(ipmi::responseReqDataLenInvalid(), deleteBlob(&mgr, request));
Patrick Ventureef3aead2018-09-12 08:53:29 -070030}
31
32TEST(BlobDeleteTest, RequestRejectedReturnsFailure)
33{
34 // The blobId is rejected for any reason.
Patrick Ventureef3aead2018-09-12 08:53:29 -070035 ManagerMock mgr;
Willy Tu067ece12022-06-16 02:07:06 -070036 std::vector<uint8_t> request;
37 struct BmcBlobDeleteTx req;
38 req.crc = 0;
Patrick Ventureef3aead2018-09-12 08:53:29 -070039 std::string blobId = "a";
40
Willy Tu067ece12022-06-16 02:07:06 -070041 request.resize(sizeof(struct BmcBlobDeleteTx));
42 std::memcpy(request.data(), &req, sizeof(struct BmcBlobDeleteTx));
43 request.insert(request.end(), blobId.begin(), blobId.end());
44 request.emplace_back('\0');
Patrick Ventureef3aead2018-09-12 08:53:29 -070045
46 EXPECT_CALL(mgr, deleteBlob(StrEq(blobId))).WillOnce(Return(false));
Willy Tu067ece12022-06-16 02:07:06 -070047 EXPECT_EQ(ipmi::responseUnspecifiedError(), deleteBlob(&mgr, request));
Patrick Ventureef3aead2018-09-12 08:53:29 -070048}
49
50TEST(BlobDeleteTest, BlobDeleteReturnsOk)
51{
52 // The boring case where the blobId is deleted.
Patrick Ventureef3aead2018-09-12 08:53:29 -070053 ManagerMock mgr;
Willy Tu067ece12022-06-16 02:07:06 -070054 std::vector<uint8_t> request;
55 struct BmcBlobDeleteTx req;
56 req.crc = 0;
Patrick Ventureef3aead2018-09-12 08:53:29 -070057 std::string blobId = "a";
58
Willy Tu067ece12022-06-16 02:07:06 -070059 request.resize(sizeof(struct BmcBlobDeleteTx));
60 std::memcpy(request.data(), &req, sizeof(struct BmcBlobDeleteTx));
61 request.insert(request.end(), blobId.begin(), blobId.end());
62 request.emplace_back('\0');
Patrick Ventureef3aead2018-09-12 08:53:29 -070063
64 EXPECT_CALL(mgr, deleteBlob(StrEq(blobId))).WillOnce(Return(true));
65
Willy Tu067ece12022-06-16 02:07:06 -070066 EXPECT_EQ(ipmi::responseSuccess(std::vector<uint8_t>{}),
67 deleteBlob(&mgr, request));
Patrick Ventureef3aead2018-09-12 08:53:29 -070068}
69} // namespace blobs