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::_; 12 using ::testing::Return; 13 14 namespace ipmi_flash 15 { 16 17 class VersionStatBlobTest : public ::testing::Test 18 { 19 protected: 20 void SetUp() override 21 { 22 h = std::make_unique<VersionBlobHandler>( 23 createMockVersionConfigs(blobNames, &im, &tm)); 24 25 EXPECT_CALL(*tm.at("blob0"), trigger()).WillOnce(Return(true)); 26 EXPECT_TRUE(h->open(0, blobs::read, "blob0")); 27 28 blobs::BlobMeta meta; 29 EXPECT_TRUE(h->stat(0, &meta)); 30 EXPECT_EQ(blobs::StateFlags::committing, meta.blobState); 31 } 32 33 std::unique_ptr<blobs::GenericBlobInterface> h; 34 std::vector<std::string> blobNames{"blob0"}; 35 std::unordered_map<std::string, TriggerMock*> tm; 36 std::unordered_map<std::string, ImageHandlerMock*> im; 37 }; 38 39 TEST_F(VersionStatBlobTest, CreateError) 40 { 41 EXPECT_CALL(*tm.at("blob0"), status()) 42 .WillOnce(Return(ActionStatus::failed)); 43 tm.at("blob0")->cb(*tm.at("blob0")); 44 45 blobs::BlobMeta meta; 46 EXPECT_TRUE(h->stat(0, &meta)); 47 EXPECT_EQ(blobs::StateFlags::commit_error, meta.blobState); 48 } 49 50 class VersionStatSizeBlobTest : 51 public VersionStatBlobTest, 52 public ::testing::WithParamInterface<std::vector<uint8_t>> 53 {}; 54 55 TEST_P(VersionStatSizeBlobTest, StatWithSize) 56 { 57 const std::vector<uint8_t> data = GetParam(); 58 EXPECT_CALL(*tm.at("blob0"), status()) 59 .WillOnce(Return(ActionStatus::success)); 60 EXPECT_CALL(*im.at("blob0"), open(_, std::ios::in)).WillOnce(Return(true)); 61 EXPECT_CALL(*im.at("blob0"), read(0, ::testing::Ge(data.size()))) 62 .WillOnce(Return(data)); 63 EXPECT_CALL(*im.at("blob0"), close()).Times(1); 64 tm.at("blob0")->cb(*tm.at("blob0")); 65 66 blobs::BlobMeta meta; 67 EXPECT_TRUE(h->stat(0, &meta)); 68 EXPECT_EQ(blobs::StateFlags::committed | blobs::StateFlags::open_read, 69 meta.blobState); 70 EXPECT_EQ(data.size(), meta.size); 71 } 72 73 const std::vector<std::vector<uint8_t>> datas = { 74 {}, 75 {0, 1, 2, 3, 4, 5, 6}, 76 }; 77 78 INSTANTIATE_TEST_SUITE_P(DifferentData, VersionStatSizeBlobTest, 79 testing::ValuesIn(datas)); 80 81 } // namespace ipmi_flash 82