bmc: add preparation step before data is received

Add a preparation systemd trigger event before data is received.  On
systems under memory pressure, this'll trigger a service that can do
things like flush caches.

Signed-off-by: Patrick Venture <venture@google.com>
Change-Id: I175177f4a91b58d9f163098572a9d2614002b718
diff --git a/test/firmware_unittest.hpp b/test/firmware_unittest.hpp
index e36081d..8d92fe8 100644
--- a/test/firmware_unittest.hpp
+++ b/test/firmware_unittest.hpp
@@ -29,6 +29,10 @@
             {staticLayoutBlobId, &imageMock},
         };
 
+        std::unique_ptr<TriggerableActionInterface> prepareMock =
+            std::make_unique<TriggerMock>();
+        prepareMockPtr = reinterpret_cast<TriggerMock*>(prepareMock.get());
+
         std::unique_ptr<TriggerableActionInterface> verifyMock =
             std::make_unique<TriggerMock>();
         verifyMockPtr = reinterpret_cast<TriggerMock*>(verifyMock.get());
@@ -38,7 +42,8 @@
         updateMockPtr = reinterpret_cast<TriggerMock*>(updateMock.get());
 
         handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
-            blobs, data, std::move(verifyMock), std::move(updateMock));
+            blobs, data, std::move(prepareMock), std::move(verifyMock),
+            std::move(updateMock));
     }
 
     void expectedState(FirmwareBlobHandler::UpdateState state)
@@ -50,6 +55,7 @@
     void openToInProgress(const std::string& blobId)
     {
         EXPECT_CALL(imageMock, open(blobId)).WillOnce(Return(true));
+        EXPECT_CALL(*prepareMockPtr, trigger()).WillOnce(Return(true));
         EXPECT_TRUE(handler->open(session, flags, blobId));
         expectedState(FirmwareBlobHandler::UpdateState::uploadInProgress);
     }
@@ -117,6 +123,7 @@
     std::vector<DataHandlerPack> data = {
         {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr}};
     std::unique_ptr<blobs::GenericBlobInterface> handler;
+    TriggerMock* prepareMockPtr;
     TriggerMock* verifyMockPtr;
     TriggerMock* updateMockPtr;
 
@@ -143,7 +150,8 @@
             {"asdf", &imageMock},
         };
         handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
-            blobs, data, CreateTriggerMock(), CreateTriggerMock());
+            blobs, data, CreateTriggerMock(), CreateTriggerMock(),
+            CreateTriggerMock());
     }
 };
 
@@ -167,7 +175,8 @@
             {FirmwareBlobHandler::UpdateFlags::lpc, &dataMock},
         };
         handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
-            blobs, data, CreateTriggerMock(), CreateTriggerMock());
+            blobs, data, CreateTriggerMock(), CreateTriggerMock(),
+            CreateTriggerMock());
     }
 };