1c78bfc82SJason Ling #include "version_handler.hpp" 2*abf17354SWilliam A. Kennington III #include "version_mock.hpp" 3c78bfc82SJason Ling 4*abf17354SWilliam A. Kennington III #include <memory> 5c78bfc82SJason Ling #include <string> 6c78bfc82SJason Ling #include <vector> 7c78bfc82SJason Ling 8c78bfc82SJason Ling #include <gtest/gtest.h> 9*abf17354SWilliam A. Kennington III 10c78bfc82SJason Ling using ::testing::_; 11c78bfc82SJason Ling using ::testing::Return; 12*abf17354SWilliam A. Kennington III 13c78bfc82SJason Ling namespace ipmi_flash 14c78bfc82SJason Ling { 15c78bfc82SJason Ling 16c78bfc82SJason Ling class VersionCloseExpireBlobTest : public ::testing::Test 17c78bfc82SJason Ling { 18c78bfc82SJason Ling protected: 19c78bfc82SJason Ling void SetUp() override 20c78bfc82SJason Ling { 21*abf17354SWilliam A. Kennington III h = std::make_unique<VersionBlobHandler>( 22*abf17354SWilliam A. Kennington III createMockVersionConfigs(blobNames, &im, &tm)); 23c78bfc82SJason Ling } 24*abf17354SWilliam A. Kennington III 25c78bfc82SJason Ling std::unique_ptr<blobs::GenericBlobInterface> h; 26c78bfc82SJason Ling std::vector<std::string> blobNames{"blob0", "blob1", "blob2", "blob3"}; 27c78bfc82SJason Ling std::unordered_map<std::string, TriggerMock*> tm; 28c78bfc82SJason Ling std::unordered_map<std::string, ImageHandlerMock*> im; 29c78bfc82SJason Ling }; 30c78bfc82SJason Ling 31c78bfc82SJason Ling TEST_F(VersionCloseExpireBlobTest, VerifyOpenThenClose) 32c78bfc82SJason Ling { 33*abf17354SWilliam A. Kennington III EXPECT_CALL(*tm.at("blob0"), trigger()).WillOnce(Return(true)); 34c78bfc82SJason Ling EXPECT_CALL(*tm.at("blob0"), status()) 35c78bfc82SJason Ling .WillOnce(Return(ActionStatus::success)); 36c78bfc82SJason Ling EXPECT_TRUE(h->open(0, blobs::read, "blob0")); 37c78bfc82SJason Ling EXPECT_TRUE(h->close(0)); 38c78bfc82SJason Ling } 39c78bfc82SJason Ling 40c78bfc82SJason Ling TEST_F(VersionCloseExpireBlobTest, VerifyUnopenedBlobCloseFails) 41c78bfc82SJason Ling { 42c78bfc82SJason Ling EXPECT_FALSE(h->close(0)); 43c78bfc82SJason Ling } 44c78bfc82SJason Ling 45c78bfc82SJason Ling TEST_F(VersionCloseExpireBlobTest, VerifyDoubleCloseFails) 46c78bfc82SJason Ling { 47*abf17354SWilliam A. Kennington III EXPECT_CALL(*tm.at("blob0"), trigger()).WillOnce(Return(true)); 48c78bfc82SJason Ling EXPECT_CALL(*tm.at("blob0"), status()) 49c78bfc82SJason Ling .WillOnce(Return(ActionStatus::success)); 50c78bfc82SJason Ling EXPECT_TRUE(h->open(0, blobs::read, "blob0")); 51c78bfc82SJason Ling EXPECT_TRUE(h->close(0)); 52c78bfc82SJason Ling EXPECT_FALSE(h->close(0)); 53c78bfc82SJason Ling } 54c78bfc82SJason Ling 55c78bfc82SJason Ling TEST_F(VersionCloseExpireBlobTest, VerifyBadSessionNumberCloseFails) 56c78bfc82SJason Ling { 57*abf17354SWilliam A. Kennington III EXPECT_CALL(*tm.at("blob0"), trigger()).WillOnce(Return(true)); 58c78bfc82SJason Ling EXPECT_CALL(*tm.at("blob0"), status()) 59c78bfc82SJason Ling .WillOnce(Return(ActionStatus::success)); 60c78bfc82SJason Ling EXPECT_TRUE(h->open(0, blobs::read, "blob0")); 61c78bfc82SJason Ling EXPECT_FALSE(h->close(1)); 62c78bfc82SJason Ling EXPECT_TRUE(h->close(0)); 63c78bfc82SJason Ling } 64c78bfc82SJason Ling 65c78bfc82SJason Ling TEST_F(VersionCloseExpireBlobTest, VerifyRunningActionIsAborted) 66c78bfc82SJason Ling { 67*abf17354SWilliam A. Kennington III EXPECT_CALL(*tm.at("blob0"), trigger()).WillOnce(Return(true)); 68c78bfc82SJason Ling EXPECT_CALL(*tm.at("blob0"), status()) 69c78bfc82SJason Ling .WillOnce(Return(ActionStatus::running)); 70c78bfc82SJason Ling EXPECT_CALL(*tm.at("blob0"), abort()).Times(1); 71c78bfc82SJason Ling EXPECT_TRUE(h->open(0, blobs::read, "blob0")); 72c78bfc82SJason Ling EXPECT_TRUE(h->close(0)); 73c78bfc82SJason Ling } 74c78bfc82SJason Ling 75c78bfc82SJason Ling } // namespace ipmi_flash 76