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