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>
6*7d39eb04SPatrick Venture #include <unordered_map>
7c78bfc82SJason Ling #include <vector>
8c78bfc82SJason Ling 
9c78bfc82SJason Ling #include <gtest/gtest.h>
10abf17354SWilliam A. Kennington III 
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:
SetUp()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 
TEST_F(VersionCloseExpireBlobTest,VerifyOpenThenClose)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 
TEST_F(VersionCloseExpireBlobTest,VerifySingleAbort)399936c456SWilliam A. Kennington III TEST_F(VersionCloseExpireBlobTest, VerifySingleAbort)
409936c456SWilliam A. Kennington III {
419936c456SWilliam A. Kennington III     EXPECT_CALL(*tm.at("blob0"), trigger()).WillOnce(Return(true));
429936c456SWilliam A. Kennington III     EXPECT_TRUE(h->open(0, blobs::read, "blob0"));
439936c456SWilliam A. Kennington III     EXPECT_TRUE(h->open(1, blobs::read, "blob0"));
449936c456SWilliam A. Kennington III     EXPECT_TRUE(h->close(0));
459936c456SWilliam A. Kennington III     EXPECT_CALL(*tm.at("blob0"), abort()).Times(1);
469936c456SWilliam A. Kennington III     EXPECT_TRUE(h->close(1));
479936c456SWilliam A. Kennington III }
489936c456SWilliam A. Kennington III 
TEST_F(VersionCloseExpireBlobTest,VerifyUnopenedBlobCloseFails)49c78bfc82SJason Ling TEST_F(VersionCloseExpireBlobTest, VerifyUnopenedBlobCloseFails)
50c78bfc82SJason Ling {
51c78bfc82SJason Ling     EXPECT_FALSE(h->close(0));
52c78bfc82SJason Ling }
53c78bfc82SJason Ling 
TEST_F(VersionCloseExpireBlobTest,VerifyDoubleCloseFails)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 
TEST_F(VersionCloseExpireBlobTest,VerifyBadSessionNumberCloseFails)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 
TEST_F(VersionCloseExpireBlobTest,VerifyRunningActionIsAborted)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