#include "ipmi.hpp" #include "manager_mock.hpp" #include #include #include namespace blobs { using ::testing::Return; // ipmid.hpp isn't installed where we can grab it and this value is per BMC // SoC. #define MAX_IPMI_BUFFER 64 // the request here is only the subcommand byte and therefore there's no invalid // length check, etc to handle within the method. TEST(BlobCountTest, ReturnsZeroBlobs) { // Calling BmcBlobGetCount if there are no handlers registered should just // return that there are 0 blobs. ManagerMock mgr; size_t dataLen; uint8_t reply[MAX_IPMI_BUFFER] = {0}; struct BmcBlobCountTx req; struct BmcBlobCountRx rep; uint8_t* request = reinterpret_cast(&req); req.cmd = BlobOEMCommands::bmcBlobGetCount; dataLen = sizeof(req); rep.crc = 0; rep.blobCount = 0; EXPECT_CALL(mgr, buildBlobList()).WillOnce(Return(0)); EXPECT_EQ(IPMI_CC_OK, getBlobCount(&mgr, request, reply, &dataLen)); EXPECT_EQ(sizeof(rep), dataLen); EXPECT_EQ(0, std::memcmp(reply, &rep, sizeof(rep))); } TEST(BlobCountTest, ReturnsTwoBlobs) { // Calling BmcBlobGetCount with one handler registered that knows of two // blobs will return that it found two blobs. ManagerMock mgr; size_t dataLen; uint8_t reply[MAX_IPMI_BUFFER] = {0}; struct BmcBlobCountTx req; struct BmcBlobCountRx rep; uint8_t* request = reinterpret_cast(&req); req.cmd = BlobOEMCommands::bmcBlobGetCount; dataLen = sizeof(req); rep.crc = 0; rep.blobCount = 2; EXPECT_CALL(mgr, buildBlobList()).WillOnce(Return(2)); EXPECT_EQ(IPMI_CC_OK, getBlobCount(&mgr, request, reply, &dataLen)); EXPECT_EQ(sizeof(rep), dataLen); EXPECT_EQ(0, std::memcmp(reply, &rep, sizeof(rep))); } } // namespace blobs