1c78bfc82SJason Ling #include "version_handler.hpp" 2abf17354SWilliam A. Kennington III #include "version_mock.hpp" 3c78bfc82SJason Ling 4abf17354SWilliam A. Kennington III #include <memory> 5c78bfc82SJason Ling #include <string> 6c78bfc82SJason Ling #include <vector> 7c78bfc82SJason Ling 8c78bfc82SJason Ling #include <gtest/gtest.h> 9abf17354SWilliam A. Kennington III 10c78bfc82SJason Ling using ::testing::_; 11c78bfc82SJason Ling using ::testing::Return; 12abf17354SWilliam 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 { 21abf17354SWilliam A. Kennington III h = std::make_unique<VersionBlobHandler>( 22abf17354SWilliam A. Kennington III createMockVersionConfigs(blobNames, &im, &tm)); 23c78bfc82SJason Ling } 24abf17354SWilliam 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 { 33abf17354SWilliam A. Kennington III EXPECT_CALL(*tm.at("blob0"), trigger()).WillOnce(Return(true)); 34c78bfc82SJason Ling EXPECT_TRUE(h->open(0, blobs::read, "blob0")); 35007c0166SWilliam A. Kennington III EXPECT_CALL(*tm.at("blob0"), abort()).Times(1); 36c78bfc82SJason Ling EXPECT_TRUE(h->close(0)); 37c78bfc82SJason Ling } 38c78bfc82SJason Ling 39*9936c456SWilliam A. Kennington III TEST_F(VersionCloseExpireBlobTest, VerifySingleAbort) 40*9936c456SWilliam A. Kennington III { 41*9936c456SWilliam A. Kennington III EXPECT_CALL(*tm.at("blob0"), trigger()).WillOnce(Return(true)); 42*9936c456SWilliam A. Kennington III EXPECT_TRUE(h->open(0, blobs::read, "blob0")); 43*9936c456SWilliam A. Kennington III EXPECT_TRUE(h->open(1, blobs::read, "blob0")); 44*9936c456SWilliam A. Kennington III EXPECT_TRUE(h->close(0)); 45*9936c456SWilliam A. Kennington III EXPECT_CALL(*tm.at("blob0"), abort()).Times(1); 46*9936c456SWilliam A. Kennington III EXPECT_TRUE(h->close(1)); 47*9936c456SWilliam A. Kennington III } 48*9936c456SWilliam A. Kennington III 49c78bfc82SJason Ling TEST_F(VersionCloseExpireBlobTest, VerifyUnopenedBlobCloseFails) 50c78bfc82SJason Ling { 51c78bfc82SJason Ling EXPECT_FALSE(h->close(0)); 52c78bfc82SJason Ling } 53c78bfc82SJason Ling 54c78bfc82SJason Ling TEST_F(VersionCloseExpireBlobTest, VerifyDoubleCloseFails) 55c78bfc82SJason Ling { 56abf17354SWilliam A. Kennington III EXPECT_CALL(*tm.at("blob0"), trigger()).WillOnce(Return(true)); 57c78bfc82SJason Ling EXPECT_TRUE(h->open(0, blobs::read, "blob0")); 58007c0166SWilliam A. Kennington III EXPECT_CALL(*tm.at("blob0"), abort()).Times(1); 59c78bfc82SJason Ling EXPECT_TRUE(h->close(0)); 60c78bfc82SJason Ling EXPECT_FALSE(h->close(0)); 61c78bfc82SJason Ling } 62c78bfc82SJason Ling 63c78bfc82SJason Ling TEST_F(VersionCloseExpireBlobTest, VerifyBadSessionNumberCloseFails) 64c78bfc82SJason Ling { 65abf17354SWilliam A. Kennington III EXPECT_CALL(*tm.at("blob0"), trigger()).WillOnce(Return(true)); 66c78bfc82SJason Ling EXPECT_TRUE(h->open(0, blobs::read, "blob0")); 67c78bfc82SJason Ling EXPECT_FALSE(h->close(1)); 68007c0166SWilliam A. Kennington III EXPECT_CALL(*tm.at("blob0"), abort()).Times(1); 69c78bfc82SJason Ling EXPECT_TRUE(h->close(0)); 70c78bfc82SJason Ling } 71c78bfc82SJason Ling 72c78bfc82SJason Ling TEST_F(VersionCloseExpireBlobTest, VerifyRunningActionIsAborted) 73c78bfc82SJason Ling { 74abf17354SWilliam A. Kennington III EXPECT_CALL(*tm.at("blob0"), trigger()).WillOnce(Return(true)); 75c78bfc82SJason Ling EXPECT_TRUE(h->open(0, blobs::read, "blob0")); 76007c0166SWilliam A. Kennington III EXPECT_CALL(*tm.at("blob0"), abort()).Times(1); 77c78bfc82SJason Ling EXPECT_TRUE(h->close(0)); 78c78bfc82SJason Ling } 79c78bfc82SJason Ling 80c78bfc82SJason Ling } // namespace ipmi_flash 81