use ipmiblob library from ipmi-blob-tool
Drop all code that is now handled by the ipmiblob library provided by
the new ipmi-blob-tool. This is a library that can be included on the
BMC if necessary, but relies on nothing that is strictly meant for the
BMC.
Change-Id: Iadbf0bd89c58cafc436fba05ea43e21c49e2b669
Signed-off-by: Patrick Venture <venture@google.com>
diff --git a/test/Makefile.am b/test/Makefile.am
index e5ea1ff..568b361 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -33,12 +33,9 @@
firmware_sessionstat_unittest \
firmware_commit_unittest \
file_handler_unittest \
- tools_blob_unittest \
tools_bt_unittest \
tools_lpc_unittest \
- tools_updater_unittest \
- tools_ipmi_unittest \
- tools_ipmi_error_unittest
+ tools_updater_unittest
TESTS = $(check_PROGRAMS)
@@ -78,9 +75,6 @@
file_handler_unittest_SOURCES = file_handler_unittest.cpp
file_handler_unittest_LDADD = $(top_builddir)/file_handler.o -lstdc++fs
-tools_blob_unittest_SOURCES = tools_blob_unittest.cpp
-tools_blob_unittest_LDADD = $(top_builddir)/tools/blob_handler.o
-
tools_bt_unittest_SOURCES = tools_bt_unittest.cpp
tools_bt_unittest_LDADD = $(top_builddir)/tools/bt.o
@@ -89,9 +83,3 @@
tools_updater_unittest_SOURCES = tools_updater_unittest.cpp
tools_updater_unittest_LDADD = $(top_builddir)/tools/updater.o
-
-tools_ipmi_unittest_SOURCES = tools_ipmi_unittest.cpp
-tools_ipmi_unittest_LDADD = $(top_builddir)/tools/ipmi_handler.o
-
-tools_ipmi_error_unittest_SOURCES = tools_ipmi_error_unittest.cpp
-tools_ipmi_error_unittest_LDADD =
diff --git a/test/blob_interface_mock.hpp b/test/blob_interface_mock.hpp
deleted file mode 100644
index 845d7c1..0000000
--- a/test/blob_interface_mock.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#include "blob_interface.hpp"
-
-#include <gmock/gmock.h>
-
-namespace host_tool
-{
-
-class BlobInterfaceMock : public BlobInterface
-{
- public:
- virtual ~BlobInterfaceMock() = default;
- MOCK_METHOD3(writeMeta, void(std::uint16_t, std::uint32_t,
- const std::vector<std::uint8_t>&));
- MOCK_METHOD3(writeBytes, void(std::uint16_t, std::uint32_t,
- const std::vector<std::uint8_t>&));
- 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));
- MOCK_METHOD1(closeBlob, void(std::uint16_t));
- MOCK_METHOD3(readBytes,
- std::vector<std::uint8_t>(std::uint16_t, std::uint32_t,
- std::uint32_t));
-};
-
-} // namespace host_tool
diff --git a/test/ipmi_interface_mock.hpp b/test/ipmi_interface_mock.hpp
deleted file mode 100644
index 374dc93..0000000
--- a/test/ipmi_interface_mock.hpp
+++ /dev/null
@@ -1,18 +0,0 @@
-#pragma once
-
-#include "ipmi_interface.hpp"
-
-#include <gmock/gmock.h>
-
-namespace host_tool
-{
-
-class IpmiInterfaceMock : public IpmiInterface
-{
- public:
- virtual ~IpmiInterfaceMock() = default;
- MOCK_METHOD1(sendPacket,
- std::vector<std::uint8_t>(std::vector<std::uint8_t>&));
-};
-
-} // namespace host_tool
diff --git a/test/tools_blob_unittest.cpp b/test/tools_blob_unittest.cpp
deleted file mode 100644
index a51eb25..0000000
--- a/test/tools_blob_unittest.cpp
+++ /dev/null
@@ -1,286 +0,0 @@
-#include "blob_handler.hpp"
-#include "crc_mock.hpp"
-#include "ipmi_interface_mock.hpp"
-
-#include <gtest/gtest.h>
-
-namespace host_tool
-{
-CrcInterface* crcIntf = nullptr;
-
-std::uint16_t generateCrc(const std::vector<std::uint8_t>& data)
-{
- return (crcIntf) ? crcIntf->generateCrc(data) : 0x00;
-}
-
-using ::testing::Eq;
-using ::testing::Return;
-
-class BlobHandlerTest : public ::testing::Test
-{
- protected:
- void SetUp() override
- {
- crcIntf = &crcMock;
- }
-
- CrcMock crcMock;
-};
-
-TEST_F(BlobHandlerTest, getCountIpmiHappy)
-{
- /* Verify returns the value specified by the IPMI response. */
- IpmiInterfaceMock ipmiMock;
- BlobHandler blob(&ipmiMock);
- std::vector<std::uint8_t> request = {
- 0xcf, 0xc2, 0x00, BlobHandler::BlobOEMCommands::bmcBlobGetCount};
-
- /* return 1 blob count. */
- std::vector<std::uint8_t> resp = {0xcf, 0xc2, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00};
-
- std::vector<std::uint8_t> bytes = {0x01, 0x00, 0x00, 0x00};
- EXPECT_CALL(crcMock, generateCrc(Eq(bytes))).WillOnce(Return(0x00));
-
- EXPECT_CALL(ipmiMock, sendPacket(Eq(request))).WillOnce(Return(resp));
- EXPECT_EQ(1, blob.getBlobCount());
-}
-
-TEST_F(BlobHandlerTest, enumerateBlobIpmiHappy)
-{
- /* Verify returns the name specified by the IPMI response. */
- IpmiInterfaceMock ipmiMock;
- BlobHandler blob(&ipmiMock);
- std::vector<std::uint8_t> request = {
- 0xcf, 0xc2, 0x00, BlobHandler::BlobOEMCommands::bmcBlobEnumerate,
- 0x00, 0x00, 0x01, 0x00,
- 0x00, 0x00};
-
- /* return value. */
- std::vector<std::uint8_t> resp = {0xcf, 0xc2, 0x00, 0x00, 0x00,
- 'a', 'b', 'c', 'd', 0x00};
-
- std::vector<std::uint8_t> bytes = {'a', 'b', 'c', 'd', 0x00};
- std::vector<std::uint8_t> reqCrc = {0x01, 0x00, 0x00, 0x00};
- EXPECT_CALL(crcMock, generateCrc(Eq(reqCrc))).WillOnce(Return(0x00));
- EXPECT_CALL(crcMock, generateCrc(Eq(bytes))).WillOnce(Return(0x00));
-
- EXPECT_CALL(ipmiMock, sendPacket(Eq(request))).WillOnce(Return(resp));
- EXPECT_STREQ("abcd", blob.enumerateBlob(1).c_str());
-}
-
-TEST_F(BlobHandlerTest, enumerateBlobIpmiNoBytes)
-{
- /* Simulate a case where the IPMI command returns no data. */
- IpmiInterfaceMock ipmiMock;
- BlobHandler blob(&ipmiMock);
- std::vector<std::uint8_t> request = {
- 0xcf, 0xc2, 0x00, BlobHandler::BlobOEMCommands::bmcBlobEnumerate,
- 0x00, 0x00, 0x01, 0x00,
- 0x00, 0x00};
-
- /* return value. */
- std::vector<std::uint8_t> resp = {};
-
- std::vector<std::uint8_t> reqCrc = {0x01, 0x00, 0x00, 0x00};
- EXPECT_CALL(crcMock, generateCrc(Eq(reqCrc))).WillOnce(Return(0x00));
-
- EXPECT_CALL(ipmiMock, sendPacket(Eq(request))).WillOnce(Return(resp));
- EXPECT_STREQ("", blob.enumerateBlob(1).c_str());
-}
-
-TEST_F(BlobHandlerTest, getBlobListIpmiHappy)
-{
- /* Verify returns the list built via the above two commands. */
- IpmiInterfaceMock ipmiMock;
- BlobHandler blob(&ipmiMock);
-
- std::vector<std::uint8_t> request1 = {
- 0xcf, 0xc2, 0x00, BlobHandler::BlobOEMCommands::bmcBlobGetCount};
-
- /* return 1 blob count. */
- std::vector<std::uint8_t> resp1 = {0xcf, 0xc2, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00};
-
- std::vector<std::uint8_t> bytes1 = {0x01, 0x00, 0x00, 0x00};
- EXPECT_CALL(crcMock, generateCrc(Eq(bytes1))).WillOnce(Return(0x00));
-
- EXPECT_CALL(ipmiMock, sendPacket(Eq(request1))).WillOnce(Return(resp1));
-
- std::vector<std::uint8_t> request2 = {
- 0xcf, 0xc2, 0x00, BlobHandler::BlobOEMCommands::bmcBlobEnumerate,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00};
-
- /* return value. */
- std::vector<std::uint8_t> resp2 = {0xcf, 0xc2, 0x00, 0x00, 0x00,
- 'a', 'b', 'c', 'd', 0x00};
-
- std::vector<std::uint8_t> reqCrc = {0x00, 0x00, 0x00, 0x00};
- std::vector<std::uint8_t> bytes2 = {'a', 'b', 'c', 'd', 0x00};
- EXPECT_CALL(crcMock, generateCrc(Eq(reqCrc))).WillOnce(Return(0x00));
- EXPECT_CALL(crcMock, generateCrc(Eq(bytes2))).WillOnce(Return(0x00));
-
- EXPECT_CALL(ipmiMock, sendPacket(Eq(request2))).WillOnce(Return(resp2));
-
- /* A std::string is not nul-terminated by default. */
- std::vector<std::string> expectedList = {std::string{"abcd"}};
-
- EXPECT_EQ(expectedList, blob.getBlobList());
-}
-
-TEST_F(BlobHandlerTest, getStatWithMetadata)
-{
- /* Stat received metadata. */
- IpmiInterfaceMock ipmiMock;
- BlobHandler blob(&ipmiMock);
- std::vector<std::uint8_t> request = {
- 0xcf, 0xc2, 0x00, BlobHandler::BlobOEMCommands::bmcBlobStat,
- 0x00, 0x00, 'a', 'b',
- 'c', 'd', 0x00};
-
- /* return blob_state: 0xffff, size: 0x00, metadata 0x3445 */
- std::vector<std::uint8_t> resp = {0xcf, 0xc2, 0x00, 0x00, 0x00, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x34, 0x45};
-
- std::vector<std::uint8_t> reqCrc = {'a', 'b', 'c', 'd', 0x00};
- std::vector<std::uint8_t> respCrc = {0xff, 0xff, 0x00, 0x00, 0x00,
- 0x00, 0x02, 0x34, 0x45};
- EXPECT_CALL(crcMock, generateCrc(Eq(reqCrc))).WillOnce(Return(0x00));
- EXPECT_CALL(crcMock, generateCrc(Eq(respCrc))).WillOnce(Return(0x00));
-
- EXPECT_CALL(ipmiMock, sendPacket(Eq(request))).WillOnce(Return(resp));
-
- auto meta = blob.getStat("abcd");
- EXPECT_EQ(meta.blob_state, 0xffff);
- EXPECT_EQ(meta.size, 0x00);
- std::vector<std::uint8_t> metadata = {0x34, 0x45};
- EXPECT_EQ(metadata, meta.metadata);
-}
-
-TEST_F(BlobHandlerTest, getStatNoMetadata)
-{
- /* Stat received no metadata. */
- IpmiInterfaceMock ipmiMock;
- BlobHandler blob(&ipmiMock);
- std::vector<std::uint8_t> request = {
- 0xcf, 0xc2, 0x00, BlobHandler::BlobOEMCommands::bmcBlobStat,
- 0x00, 0x00, 'a', 'b',
- 'c', 'd', 0x00};
-
- /* return blob_state: 0xffff, size: 0x00, metadata 0x3445 */
- std::vector<std::uint8_t> resp = {0xcf, 0xc2, 0x00, 0x00, 0x00, 0xff,
- 0xff, 0x00, 0x00, 0x00, 0x00, 0x00};
-
- std::vector<std::uint8_t> reqCrc = {'a', 'b', 'c', 'd', 0x00};
- std::vector<std::uint8_t> respCrc = {0xff, 0xff, 0x00, 0x00,
- 0x00, 0x00, 0x00};
-
- EXPECT_CALL(crcMock, generateCrc(Eq(reqCrc))).WillOnce(Return(0x00));
- EXPECT_CALL(crcMock, generateCrc(Eq(respCrc))).WillOnce(Return(0x00));
-
- EXPECT_CALL(ipmiMock, sendPacket(Eq(request))).WillOnce(Return(resp));
-
- auto meta = blob.getStat("abcd");
- EXPECT_EQ(meta.blob_state, 0xffff);
- EXPECT_EQ(meta.size, 0x00);
- std::vector<std::uint8_t> metadata = {};
- EXPECT_EQ(metadata, meta.metadata);
-}
-
-TEST_F(BlobHandlerTest, 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',
- 0x00};
-
- std::vector<std::uint8_t> resp = {0xcf, 0xc2, 0x00, 0x00, 0x00, 0xfe, 0xed};
-
- std::vector<std::uint8_t> reqCrc = {0x02, 0x04, 'a', 'b', 'c', 'd', 0x00};
- std::vector<std::uint8_t> respCrc = {0xfe, 0xed};
- EXPECT_CALL(crcMock, generateCrc(Eq(reqCrc))).WillOnce(Return(0x00));
- EXPECT_CALL(crcMock, generateCrc(Eq(respCrc))).WillOnce(Return(0x00));
-
- EXPECT_CALL(ipmiMock, sendPacket(Eq(request))).WillOnce(Return(resp));
-
- auto session =
- blob.openBlob("abcd", blobs::FirmwareBlobHandler::UpdateFlags::lpc);
- EXPECT_EQ(0xedfe, session);
-}
-
-TEST_F(BlobHandlerTest, closeBlobSucceeds)
-{
- /* The close succeeds. */
- IpmiInterfaceMock ipmiMock;
- BlobHandler blob(&ipmiMock);
-
- std::vector<std::uint8_t> request = {
- 0xcf, 0xc2, 0x00, BlobHandler::BlobOEMCommands::bmcBlobClose,
- 0x00, 0x00, 0x01, 0x00};
- std::vector<std::uint8_t> resp = {0xcf, 0xc2, 0x00};
- std::vector<std::uint8_t> reqCrc = {0x01, 0x00};
- EXPECT_CALL(crcMock, generateCrc(Eq(reqCrc))).WillOnce(Return(0x00));
-
- EXPECT_CALL(ipmiMock, sendPacket(Eq(request))).WillOnce(Return(resp));
-
- blob.closeBlob(0x0001);
-}
-
-TEST_F(BlobHandlerTest, writeBytesSucceeds)
-{
- /* The write bytes succeeds. */
- IpmiInterfaceMock ipmiMock;
- BlobHandler blob(&ipmiMock);
-
- std::vector<std::uint8_t> request = {
- 0xcf, 0xc2, 0x00, BlobHandler::BlobOEMCommands::bmcBlobWrite,
- 0x00, 0x00, 0x01, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 'a', 'b', 'c', 'd'};
-
- std::vector<std::uint8_t> bytes = {'a', 'b', 'c', 'd'};
- std::vector<std::uint8_t> resp = {0xcf, 0xc2, 0x00};
- std::vector<std::uint8_t> reqCrc = {0x01, 0x00, 0x00, 0x00, 0x00,
- 0x00, 'a', 'b', 'c', 'd'};
- EXPECT_CALL(crcMock, generateCrc(Eq(reqCrc))).WillOnce(Return(0x00));
-
- EXPECT_CALL(ipmiMock, sendPacket(Eq(request))).WillOnce(Return(resp));
-
- blob.writeBytes(0x0001, 0, bytes);
-}
-
-TEST_F(BlobHandlerTest, readBytesSucceeds)
-{
- /* The reading of bytes succeeds. */
-
- IpmiInterfaceMock ipmiMock;
- BlobHandler blob(&ipmiMock);
-
- std::vector<std::uint8_t> request = {
- 0xcf, 0xc2, 0x00, BlobHandler::BlobOEMCommands::bmcBlobRead,
- 0x00, 0x00, 0x01, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x04, 0x00, 0x00, 0x00};
-
- std::vector<std::uint8_t> expectedBytes = {'a', 'b', 'c', 'd'};
- std::vector<std::uint8_t> resp = {0xcf, 0xc2, 0x00, 0x00, 0x00,
- 'a', 'b', 'c', 'd'};
- std::vector<std::uint8_t> reqCrc = {0x01, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x04, 0x00, 0x00, 0x00};
- std::vector<std::uint8_t> respCrc = {'a', 'b', 'c', 'd'};
-
- EXPECT_CALL(crcMock, generateCrc(Eq(reqCrc))).WillOnce(Return(0x00));
- EXPECT_CALL(crcMock, generateCrc(Eq(respCrc))).WillOnce(Return(0x00));
-
- EXPECT_CALL(ipmiMock, sendPacket(Eq(request))).WillOnce(Return(resp));
-
- EXPECT_EQ(blob.readBytes(0x0001, 0, 4), expectedBytes);
-}
-
-} // namespace host_tool
diff --git a/test/tools_bt_unittest.cpp b/test/tools_bt_unittest.cpp
index 24511c3..1a364d3 100644
--- a/test/tools_bt_unittest.cpp
+++ b/test/tools_bt_unittest.cpp
@@ -1,8 +1,8 @@
-#include "blob_interface_mock.hpp"
#include "bt.hpp"
#include "internal_sys_mock.hpp"
#include <cstring>
+#include <ipmiblob/test/blob_interface_mock.hpp>
#include <gtest/gtest.h>
@@ -22,7 +22,7 @@
* syscall mock and catch the writes via the blob mock.
*/
internal::InternalSysMock sysMock;
- BlobInterfaceMock blobMock;
+ ipmiblob::BlobInterfaceMock blobMock;
BtDataHandler handler(&blobMock, &sysMock);
std::string filePath = "/asdf";
diff --git a/test/tools_ipmi_error_unittest.cpp b/test/tools_ipmi_error_unittest.cpp
deleted file mode 100644
index 86264a1..0000000
--- a/test/tools_ipmi_error_unittest.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-#include "ipmi_errors.hpp"
-
-#include <gtest/gtest.h>
-
-namespace host_tool
-{
-
-TEST(IpmiExceptionTest, VerifyTimedOutIsString)
-{
- /* Verify that throwing the exception with the cc code for timed out gets
- * converted to the human readable string.
- */
- bool verified = false;
-
- try
- {
- throw IpmiException(0xc3);
- }
- catch (const IpmiException& i)
- {
- EXPECT_STREQ("Received IPMI_CC: timeout", i.what());
- verified = true;
- }
-
- EXPECT_TRUE(verified);
-}
-
-} // namespace host_tool
diff --git a/test/tools_ipmi_unittest.cpp b/test/tools_ipmi_unittest.cpp
deleted file mode 100644
index d0c9911..0000000
--- a/test/tools_ipmi_unittest.cpp
+++ /dev/null
@@ -1,21 +0,0 @@
-#include "internal_sys_mock.hpp"
-#include "ipmi_errors.hpp"
-#include "ipmi_handler.hpp"
-
-namespace host_tool
-{
-
-using ::testing::_;
-using ::testing::Return;
-
-TEST(IpmiHandlerTest, OpenAllFails)
-{
- /* Open against all device files fail. */
- internal::InternalSysMock sysMock;
- IpmiHandler ipmi(&sysMock);
-
- EXPECT_CALL(sysMock, open(_, _)).WillRepeatedly(Return(-1));
- EXPECT_THROW(ipmi.open(), IpmiException);
-}
-
-} // namespace host_tool
diff --git a/test/tools_lpc_unittest.cpp b/test/tools_lpc_unittest.cpp
index 3a9d80e..1645ea5 100644
--- a/test/tools_lpc_unittest.cpp
+++ b/test/tools_lpc_unittest.cpp
@@ -1,9 +1,9 @@
-#include "blob_interface_mock.hpp"
#include "internal_sys_mock.hpp"
#include "io_mock.hpp"
#include "lpc.hpp"
#include <cstring>
+#include <ipmiblob/test/blob_interface_mock.hpp>
#include <gtest/gtest.h>
@@ -15,7 +15,7 @@
TEST(LpcHandleTest, verifySendsFileContents)
{
internal::InternalSysMock sysMock;
- BlobInterfaceMock blobMock;
+ ipmiblob::BlobInterfaceMock blobMock;
HostIoInterfaceMock ioMock;
LpcDataHandler handler(&blobMock, &ioMock, &sysMock);
diff --git a/test/tools_updater_unittest.cpp b/test/tools_updater_unittest.cpp
index 0f49494..158ce47 100644
--- a/test/tools_updater_unittest.cpp
+++ b/test/tools_updater_unittest.cpp
@@ -1,7 +1,8 @@
-#include "blob_interface_mock.hpp"
#include "data_interface_mock.hpp"
#include "updater.hpp"
+#include <blobs-ipmid/blobs.hpp>
+#include <ipmiblob/test/blob_interface_mock.hpp>
#include <string>
#include <gtest/gtest.h>
@@ -17,25 +18,28 @@
{
/* Call updaterMain and have everything respond happily. */
DataInterfaceMock handlerMock;
- BlobInterfaceMock blobMock;
+ ipmiblob::BlobInterfaceMock blobMock;
std::string firmwareImage = "image.bin";
std::string signatureFile = "image.sig";
std::string expectedBlob = "/flash/image";
std::vector<std::string> blobList = {expectedBlob};
- StatResponse statObj;
+ ipmiblob::StatResponse statObj;
statObj.blob_state = blobs::FirmwareBlobHandler::UpdateFlags::ipmi |
blobs::FirmwareBlobHandler::UpdateFlags::lpc;
statObj.size = 0;
- blobs::FirmwareBlobHandler::UpdateFlags supported =
- blobs::FirmwareBlobHandler::UpdateFlags::lpc;
+ std::uint16_t supported =
+ static_cast<std::uint16_t>(
+ blobs::FirmwareBlobHandler::UpdateFlags::lpc) |
+ static_cast<std::uint16_t>(blobs::OpenFlags::write);
std::uint16_t session = 0xbeef;
EXPECT_CALL(blobMock, getBlobList()).WillOnce(Return(blobList));
EXPECT_CALL(blobMock, getStat(Eq(expectedBlob))).WillOnce(Return(statObj));
- EXPECT_CALL(handlerMock, supportedType()).WillOnce(Return(supported));
+ EXPECT_CALL(handlerMock, supportedType())
+ .WillOnce(Return(blobs::FirmwareBlobHandler::UpdateFlags::lpc));
EXPECT_CALL(blobMock, openBlob(StrEq(expectedBlob.c_str()), Eq(supported)))
.WillOnce(Return(session));