#include "ipmi.hpp" #include "manager_mock.hpp" #include #include #include namespace blobs { using ::testing::Return; using ::testing::StrEq; TEST(BlobDeleteTest, InvalidRequestLengthReturnsFailure) { // There is a minimum blobId length of one character, this test verifies // we check that. ManagerMock mgr; std::vector request; struct BmcBlobDeleteTx req; req.crc = 0; std::string blobId = "abc"; request.resize(sizeof(struct BmcBlobDeleteTx)); std::memcpy(request.data(), &req, sizeof(struct BmcBlobDeleteTx)); request.insert(request.end(), blobId.begin(), blobId.end()); EXPECT_EQ(ipmi::responseReqDataLenInvalid(), deleteBlob(&mgr, request)); } TEST(BlobDeleteTest, RequestRejectedReturnsFailure) { // The blobId is rejected for any reason. ManagerMock mgr; std::vector request; struct BmcBlobDeleteTx req; req.crc = 0; std::string blobId = "a"; request.resize(sizeof(struct BmcBlobDeleteTx)); std::memcpy(request.data(), &req, sizeof(struct BmcBlobDeleteTx)); request.insert(request.end(), blobId.begin(), blobId.end()); request.emplace_back('\0'); EXPECT_CALL(mgr, deleteBlob(StrEq(blobId))).WillOnce(Return(false)); EXPECT_EQ(ipmi::responseUnspecifiedError(), deleteBlob(&mgr, request)); } TEST(BlobDeleteTest, BlobDeleteReturnsOk) { // The boring case where the blobId is deleted. ManagerMock mgr; std::vector request; struct BmcBlobDeleteTx req; req.crc = 0; std::string blobId = "a"; request.resize(sizeof(struct BmcBlobDeleteTx)); std::memcpy(request.data(), &req, sizeof(struct BmcBlobDeleteTx)); request.insert(request.end(), blobId.begin(), blobId.end()); request.emplace_back('\0'); EXPECT_CALL(mgr, deleteBlob(StrEq(blobId))).WillOnce(Return(true)); EXPECT_EQ(ipmi::responseSuccess(std::vector{}), deleteBlob(&mgr, request)); } } // namespace blobs