version-handler: Refactor handler construction
Instead of requiring callers to build maps and info blobs, take the
minimal required amount of information about the blob configuration and
build required datastructures internally.
This reduces the amount of code, and nearly eliminates all of the
untested code in main.cpp.
Change-Id: Iaa398eb404814e9263e6707b71b38a9831d96697
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/bmc/version-handler/test/version_close_unittest.cpp b/bmc/version-handler/test/version_close_unittest.cpp
index 68e6add..83b4a43 100644
--- a/bmc/version-handler/test/version_close_unittest.cpp
+++ b/bmc/version-handler/test/version_close_unittest.cpp
@@ -1,16 +1,15 @@
-#include "flags.hpp"
-#include "image_mock.hpp"
-#include "triggerable_mock.hpp"
-#include "util.hpp"
#include "version_handler.hpp"
+#include "version_mock.hpp"
-#include <array>
+#include <memory>
#include <string>
#include <vector>
#include <gtest/gtest.h>
+
using ::testing::_;
using ::testing::Return;
+
namespace ipmi_flash
{
@@ -19,26 +18,10 @@
protected:
void SetUp() override
{
- VersionInfoMap vim;
- for (const auto& blobName : blobNames)
- {
- auto t = CreateTriggerMock();
- auto i = CreateImageMock();
- tm[blobName] = reinterpret_cast<TriggerMock*>(t.get());
- im[blobName] = reinterpret_cast<ImageHandlerMock*>(i.get());
- vim.try_emplace(
- blobName,
- VersionInfoPack(
- blobName, std::make_unique<VersionActionPack>(std::move(t)),
- std::move(i)));
- }
- h = VersionBlobHandler::create(std::move(vim));
- ASSERT_NE(h, nullptr);
- for (const auto& [key, val] : tm)
- {
- ON_CALL(*val, trigger()).WillByDefault(Return(true));
- }
+ h = std::make_unique<VersionBlobHandler>(
+ createMockVersionConfigs(blobNames, &im, &tm));
}
+
std::unique_ptr<blobs::GenericBlobInterface> h;
std::vector<std::string> blobNames{"blob0", "blob1", "blob2", "blob3"};
std::unordered_map<std::string, TriggerMock*> tm;
@@ -47,27 +30,23 @@
TEST_F(VersionCloseExpireBlobTest, VerifyOpenThenClose)
{
+ EXPECT_CALL(*tm.at("blob0"), trigger()).WillOnce(Return(true));
EXPECT_CALL(*tm.at("blob0"), status())
- .Times(1)
.WillOnce(Return(ActionStatus::success));
- EXPECT_CALL(*tm.at("blob0"), abort()).Times(0);
EXPECT_TRUE(h->open(0, blobs::read, "blob0"));
EXPECT_TRUE(h->close(0));
}
TEST_F(VersionCloseExpireBlobTest, VerifyUnopenedBlobCloseFails)
{
- EXPECT_CALL(*tm.at("blob0"), status()).Times(0);
- EXPECT_CALL(*tm.at("blob0"), abort()).Times(0);
EXPECT_FALSE(h->close(0));
}
TEST_F(VersionCloseExpireBlobTest, VerifyDoubleCloseFails)
{
+ EXPECT_CALL(*tm.at("blob0"), trigger()).WillOnce(Return(true));
EXPECT_CALL(*tm.at("blob0"), status())
- .Times(1)
.WillOnce(Return(ActionStatus::success));
- EXPECT_CALL(*tm.at("blob0"), abort()).Times(0);
EXPECT_TRUE(h->open(0, blobs::read, "blob0"));
EXPECT_TRUE(h->close(0));
EXPECT_FALSE(h->close(0));
@@ -75,10 +54,9 @@
TEST_F(VersionCloseExpireBlobTest, VerifyBadSessionNumberCloseFails)
{
+ EXPECT_CALL(*tm.at("blob0"), trigger()).WillOnce(Return(true));
EXPECT_CALL(*tm.at("blob0"), status())
- .Times(1)
.WillOnce(Return(ActionStatus::success));
- EXPECT_CALL(*tm.at("blob0"), abort()).Times(0);
EXPECT_TRUE(h->open(0, blobs::read, "blob0"));
EXPECT_FALSE(h->close(1));
EXPECT_TRUE(h->close(0));
@@ -86,8 +64,8 @@
TEST_F(VersionCloseExpireBlobTest, VerifyRunningActionIsAborted)
{
+ EXPECT_CALL(*tm.at("blob0"), trigger()).WillOnce(Return(true));
EXPECT_CALL(*tm.at("blob0"), status())
- .Times(1)
.WillOnce(Return(ActionStatus::running));
EXPECT_CALL(*tm.at("blob0"), abort()).Times(1);
EXPECT_TRUE(h->open(0, blobs::read, "blob0"));