tools: blob: implement open blob
Implement the host-side tool's open blob command.
Change-Id: Iee432eae0539015e87969159a3d03761df9f8fb5
Signed-off-by: Patrick Venture <venture@google.com>
diff --git a/test/blob_interface_mock.hpp b/test/blob_interface_mock.hpp
index 8218ed5..fc1b284 100644
--- a/test/blob_interface_mock.hpp
+++ b/test/blob_interface_mock.hpp
@@ -1,9 +1,14 @@
#include "blob_interface.hpp"
+#include <gmock/gmock.h>
+
class BlobInterfaceMock : public BlobInterface
{
public:
virtual ~BlobInterfaceMock() = default;
MOCK_METHOD0(getBlobList, std::vector<std::string>());
MOCK_METHOD1(getStat, StatResponse(const std::string&));
+ MOCK_METHOD2(openBlob,
+ std::uint16_t(const std::string&,
+ blobs::FirmwareBlobHandler::UpdateFlags));
};
diff --git a/test/tools_blob_unittest.cpp b/test/tools_blob_unittest.cpp
index 0d5787e..e7e0ed6 100644
--- a/test/tools_blob_unittest.cpp
+++ b/test/tools_blob_unittest.cpp
@@ -140,3 +140,23 @@
std::vector<std::uint8_t> metadata = {};
EXPECT_EQ(metadata, meta.metadata);
}
+
+TEST(BlobHandler, openBlobSucceeds)
+{
+ /* The open blob succeeds. */
+ IpmiInterfaceMock ipmiMock;
+ BlobHandler blob(&ipmiMock);
+
+ std::vector<std::uint8_t> request = {
+ 0xcf, 0xc2, 0x00, BlobHandler::BlobOEMCommands::bmcBlobOpen,
+ 0x00, 0x00, 0x02, 0x04,
+ 'a', 'b', 'c', 'd'};
+
+ std::vector<std::uint8_t> resp = {0xcf, 0xc2, 0x00, 0x00, 0x00, 0xfe, 0xed};
+
+ EXPECT_CALL(ipmiMock, sendPacket(Eq(request))).WillOnce(Return(resp));
+
+ auto session =
+ blob.openBlob("abcd", blobs::FirmwareBlobHandler::UpdateFlags::lpc);
+ EXPECT_EQ(0xedfe, session);
+}