diff options
Diffstat (limited to 'test/ipmi_writemeta_unittest.cpp')
-rw-r--r-- | test/ipmi_writemeta_unittest.cpp | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/test/ipmi_writemeta_unittest.cpp b/test/ipmi_writemeta_unittest.cpp new file mode 100644 index 0000000..2dfbe59 --- /dev/null +++ b/test/ipmi_writemeta_unittest.cpp @@ -0,0 +1,72 @@ +#include "ipmi.hpp" + +#include <blobs-ipmid/test/manager_mock.hpp> +#include <cstring> + +#include <gtest/gtest.h> + +namespace blobs +{ +using ::testing::ElementsAreArray; +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 + +TEST(BlobWriteMetaTest, ManagerReturnsFailureReturnsFailure) +{ + // This verifies a failure from the manager is passed back. + + ManagerMock mgr; + size_t dataLen; + uint8_t request[MAX_IPMI_BUFFER] = {0}; + uint8_t reply[MAX_IPMI_BUFFER] = {0}; + auto req = reinterpret_cast<struct BmcBlobWriteMetaTx*>(request); + + req->cmd = BlobOEMCommands::bmcBlobWrite; + req->crc = 0; + req->sessionId = 0x54; + req->offset = 0x100; + + uint8_t expectedBytes[2] = {0x66, 0x67}; + std::memcpy(req->data, &expectedBytes[0], sizeof(expectedBytes)); + + dataLen = sizeof(struct BmcBlobWriteMetaTx) + sizeof(expectedBytes); + + EXPECT_CALL( + mgr, writeMeta(req->sessionId, req->offset, + ElementsAreArray(expectedBytes, sizeof(expectedBytes)))) + .WillOnce(Return(false)); + + EXPECT_EQ(IPMI_CC_INVALID, writeMeta(&mgr, request, reply, &dataLen)); +} + +TEST(BlobWriteMetaTest, ManagerReturnsTrueWriteSucceeds) +{ + // The case where everything works. + + ManagerMock mgr; + size_t dataLen; + uint8_t request[MAX_IPMI_BUFFER] = {0}; + uint8_t reply[MAX_IPMI_BUFFER] = {0}; + auto req = reinterpret_cast<struct BmcBlobWriteMetaTx*>(request); + + req->cmd = BlobOEMCommands::bmcBlobWrite; + req->crc = 0; + req->sessionId = 0x54; + req->offset = 0x100; + + uint8_t expectedBytes[2] = {0x66, 0x67}; + std::memcpy(req->data, &expectedBytes[0], sizeof(expectedBytes)); + + dataLen = sizeof(struct BmcBlobWriteMetaTx) + sizeof(expectedBytes); + + EXPECT_CALL( + mgr, writeMeta(req->sessionId, req->offset, + ElementsAreArray(expectedBytes, sizeof(expectedBytes)))) + .WillOnce(Return(true)); + + EXPECT_EQ(IPMI_CC_OK, writeMeta(&mgr, request, reply, &dataLen)); +} +} // namespace blobs |