bmc: move from data section objs to owned

Move from objects created ahead of purpose to owned objects.  This is a
step towards integrating with the json support.

Signed-off-by: Patrick Venture <venture@google.com>
Change-Id: I738a5edd40724f17245911af1080c350f029fef1
diff --git a/bmc/test/firmware_unittest.hpp b/bmc/test/firmware_unittest.hpp
index 129b940..6bf515d 100644
--- a/bmc/test/firmware_unittest.hpp
+++ b/bmc/test/firmware_unittest.hpp
@@ -26,10 +26,18 @@
   protected:
     void SetUp() override
     {
-        blobs = {
-            {hashBlobId, &imageMock},
-            {staticLayoutBlobId, &imageMock},
-        };
+        /* Unfortunately, since the FirmwareHandler object ends up owning the
+         * handlers, we can't just share handlers.
+         */
+        std::unique_ptr<ImageHandlerInterface> image =
+            std::make_unique<ImageHandlerMock>();
+        hashImageMock = reinterpret_cast<ImageHandlerMock*>(image.get());
+        blobs.push_back(std::move(HandlerPack(hashBlobId, std::move(image))));
+
+        image = std::make_unique<ImageHandlerMock>();
+        imageMock2 = reinterpret_cast<ImageHandlerMock*>(image.get());
+        blobs.push_back(
+            std::move(HandlerPack(staticLayoutBlobId, std::move(image))));
 
         std::unique_ptr<TriggerableActionInterface> prepareMock =
             std::make_unique<TriggerMock>();
@@ -52,7 +60,7 @@
         packs[staticLayoutBlobId] = std::move(actionPack);
 
         handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
-            blobs, data, std::move(packs));
+            std::move(blobs), data, std::move(packs));
     }
 
     void expectedState(FirmwareBlobHandler::UpdateState state)
@@ -63,7 +71,15 @@
 
     void openToInProgress(const std::string& blobId)
     {
-        EXPECT_CALL(imageMock, open(blobId)).WillOnce(Return(true));
+        if (blobId == hashBlobId)
+        {
+            EXPECT_CALL(*hashImageMock, open(blobId)).WillOnce(Return(true));
+        }
+        else
+        {
+            EXPECT_CALL(*imageMock2, open(blobId)).WillOnce(Return(true));
+        }
+
         if (blobId != hashBlobId)
         {
             EXPECT_CALL(*prepareMockPtr, trigger()).WillOnce(Return(true));
@@ -76,7 +92,14 @@
     {
         openToInProgress(blobId);
 
-        EXPECT_CALL(imageMock, close()).WillRepeatedly(Return());
+        if (blobId == hashBlobId)
+        {
+            EXPECT_CALL(*hashImageMock, close()).WillRepeatedly(Return());
+        }
+        else
+        {
+            EXPECT_CALL(*imageMock2, close()).WillRepeatedly(Return());
+        }
         handler->close(session);
         expectedState(FirmwareBlobHandler::UpdateState::verificationPending);
     }
@@ -98,7 +121,7 @@
         getToVerificationPending(staticLayoutBlobId);
 
         openToInProgress(hashBlobId);
-        EXPECT_CALL(imageMock, close()).WillRepeatedly(Return());
+        EXPECT_CALL(*hashImageMock, close()).WillRepeatedly(Return());
         handler->close(session);
         expectedState(FirmwareBlobHandler::UpdateState::verificationPending);
 
@@ -148,11 +171,14 @@
         expectedState(FirmwareBlobHandler::UpdateState::updateCompleted);
     }
 
-    ImageHandlerMock imageMock;
+    ImageHandlerMock *hashImageMock, *imageMock2;
+
     std::vector<HandlerPack> blobs;
     std::vector<DataHandlerPack> data = {
         {FirmwareFlags::UpdateFlags::ipmi, nullptr}};
+
     std::unique_ptr<blobs::GenericBlobInterface> handler;
+
     TriggerMock* prepareMockPtr;
     TriggerMock* verifyMockPtr;
     TriggerMock* updateMockPtr;
@@ -167,7 +193,7 @@
 class IpmiOnlyFirmwareTest : public ::testing::Test
 {
   protected:
-    ImageHandlerMock imageMock;
+    ImageHandlerMock *hashImageMock, *imageMock;
     std::vector<HandlerPack> blobs;
     std::vector<DataHandlerPack> data = {
         {FirmwareFlags::UpdateFlags::ipmi, nullptr}};
@@ -175,12 +201,17 @@
 
     void SetUp() override
     {
-        blobs = {
-            {hashBlobId, &imageMock},
-            {"asdf", &imageMock},
-        };
+        std::unique_ptr<ImageHandlerInterface> image =
+            std::make_unique<ImageHandlerMock>();
+        hashImageMock = reinterpret_cast<ImageHandlerMock*>(image.get());
+        blobs.push_back(std::move(HandlerPack(hashBlobId, std::move(image))));
+
+        image = std::make_unique<ImageHandlerMock>();
+        imageMock = reinterpret_cast<ImageHandlerMock*>(image.get());
+        blobs.push_back(std::move(HandlerPack("asdf", std::move(image))));
+
         handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
-            blobs, data, std::move(CreateActionMap("asdf")));
+            std::move(blobs), data, std::move(CreateActionMap("asdf")));
     }
 };
 
@@ -188,23 +219,28 @@
 {
   protected:
     DataHandlerMock dataMock;
-    ImageHandlerMock imageMock;
+    ImageHandlerMock *hashImageMock, *imageMock;
     std::vector<HandlerPack> blobs;
     std::vector<DataHandlerPack> data;
     std::unique_ptr<blobs::GenericBlobInterface> handler;
 
     void SetUp() override
     {
-        blobs = {
-            {hashBlobId, &imageMock},
-            {"asdf", &imageMock},
-        };
+        std::unique_ptr<ImageHandlerInterface> image =
+            std::make_unique<ImageHandlerMock>();
+        hashImageMock = reinterpret_cast<ImageHandlerMock*>(image.get());
+        blobs.push_back(std::move(HandlerPack(hashBlobId, std::move(image))));
+
+        image = std::make_unique<ImageHandlerMock>();
+        imageMock = reinterpret_cast<ImageHandlerMock*>(image.get());
+        blobs.push_back(std::move(HandlerPack("asdf", std::move(image))));
+
         data = {
             {FirmwareFlags::UpdateFlags::ipmi, nullptr},
             {FirmwareFlags::UpdateFlags::lpc, &dataMock},
         };
         handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
-            blobs, data, std::move(CreateActionMap("asdf")));
+            std::move(blobs), data, std::move(CreateActionMap("asdf")));
     }
 };