#include "blockstore/implementations/ondisk/OnDiskBlock.h" #include #include "blockstore/utils/FileDoesntExistException.h" #include #include #include #include #include #include using ::testing::Test; using ::testing::WithParamInterface; using ::testing::Values; using std::ofstream; using std::ios; using cpputils::Data; using cpputils::DataFixture; using cpputils::TempFile; using cpputils::TempDir; using cpputils::unique_ref; using namespace blockstore; using namespace blockstore::ondisk; namespace bf = boost::filesystem; class OnDiskBlockLoadTest: public Test, public WithParamInterface { public: OnDiskBlockLoadTest(): dir(), key(Key::FromString("1491BB4932A389EE14BC7090AC772972")), file(dir.path() / key.ToString(), false) { } TempDir dir; Key key; TempFile file; void CreateBlockWithSize(size_t size) { Data data(size); OnDiskBlock::CreateOnDisk(dir.path(), key, std::move(data)); } void StoreData(Data data) { OnDiskBlock::CreateOnDisk(dir.path(), key, std::move(data)); } unique_ref LoadBlock() { return OnDiskBlock::LoadFromDisk(dir.path(), key).value(); } void EXPECT_BLOCK_DATA_EQ(const Data &expected, const OnDiskBlock &actual) { EXPECT_EQ(expected.size(), actual.size()); EXPECT_EQ(0, std::memcmp(expected.data(), actual.data(), expected.size())); } }; INSTANTIATE_TEST_CASE_P(OnDiskBlockLoadTest, OnDiskBlockLoadTest, Values(0, 1, 5, 1024, 10*1024*1024)); TEST_P(OnDiskBlockLoadTest, LoadsCorrectSize) { CreateBlockWithSize(GetParam()); auto block = LoadBlock(); EXPECT_EQ(GetParam(), block->size()); } TEST_P(OnDiskBlockLoadTest, LoadedDataIsCorrect) { Data randomData = DataFixture::generate(GetParam()); StoreData(randomData.copy()); auto block = LoadBlock(); EXPECT_BLOCK_DATA_EQ(randomData, *block); } TEST_F(OnDiskBlockLoadTest, LoadNotExistingBlock) { Key key2 = Key::FromString("272EE5517627CFA147A971A8E6E747E0"); EXPECT_EQ(boost::none, OnDiskBlock::LoadFromDisk(dir.path(), key2)); }