#include "testutils/DataTreeTest.h" #include "../../../../implementations/onblocks/datanodestore/DataNodeStore.h" #include "../../../../implementations/onblocks/datatreestore/DataTreeStore.h" #include #include using blockstore::testfake::FakeBlockStore; using blockstore::Key; using blobstore::onblocks::datanodestore::DataNodeStore; using boost::none; using namespace blobstore::onblocks::datatreestore; class DataTreeStoreTest: public DataTreeTest { }; TEST_F(DataTreeStoreTest, CorrectKeyReturned) { Key key = treeStore.createNewTree()->key(); auto tree = std::move(treeStore.load(key).get()); EXPECT_EQ(key, tree->key()); } TEST_F(DataTreeStoreTest, CreatedTreeIsLoadable) { auto key = treeStore.createNewTree()->key(); auto loaded = treeStore.load(key); EXPECT_NE(none, loaded); } TEST_F(DataTreeStoreTest, NewTreeIsLeafOnly) { auto tree = treeStore.createNewTree(); EXPECT_IS_LEAF_NODE(tree->key()); } TEST_F(DataTreeStoreTest, TreeIsNotLoadableAfterRemove) { Key key = treeStore.createNewTree()->key(); auto tree = treeStore.load(key); EXPECT_NE(none, tree); treeStore.remove(std::move(*tree)); EXPECT_EQ(none, treeStore.load(key)); } TEST_F(DataTreeStoreTest, RemovingTreeRemovesAllNodesOfTheTree) { auto key = CreateThreeLevelMinData()->key(); auto tree1 = std::move(treeStore.load(key).get()); auto tree2_key = treeStore.createNewTree()->key(); treeStore.remove(std::move(tree1)); //Check that the only remaining node is tree2 EXPECT_EQ(1, nodeStore->numNodes()); EXPECT_NE(none, treeStore.load(tree2_key)); }