Create a FakeBlockStore and use it instead of InMemoryBlockStore in tests
This commit is contained in:
parent
eaf9277d81
commit
fb2b511d06
@ -1,7 +1,7 @@
|
|||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
#include "blockstore/implementations/inmemory/InMemoryBlockStore.h"
|
#include "blockstore/implementations/testfake/FakeBlockStore.h"
|
||||||
#include "blockstore/implementations/inmemory/InMemoryBlock.h"
|
#include "blockstore/implementations/testfake/FakeBlock.h"
|
||||||
#include "blobstore/implementations/onblocks/BlobStoreOnBlocks.h"
|
#include "blobstore/implementations/onblocks/BlobStoreOnBlocks.h"
|
||||||
#include "blobstore/implementations/onblocks/impl/DataLeafNode.h"
|
#include "blobstore/implementations/onblocks/impl/DataLeafNode.h"
|
||||||
#include "test/testutils/DataBlockFixture.h"
|
#include "test/testutils/DataBlockFixture.h"
|
||||||
@ -16,7 +16,7 @@ using std::string;
|
|||||||
using blockstore::BlockStore;
|
using blockstore::BlockStore;
|
||||||
using blockstore::BlockWithKey;
|
using blockstore::BlockWithKey;
|
||||||
using blockstore::Data;
|
using blockstore::Data;
|
||||||
using blockstore::inmemory::InMemoryBlockStore;
|
using blockstore::testfake::FakeBlockStore;
|
||||||
using namespace blobstore;
|
using namespace blobstore;
|
||||||
using namespace blobstore::onblocks;
|
using namespace blobstore::onblocks;
|
||||||
|
|
||||||
@ -28,7 +28,7 @@ public:
|
|||||||
DataLeafNodeTest():
|
DataLeafNodeTest():
|
||||||
ZEROES(DataLeafNode::MAX_STORED_BYTES),
|
ZEROES(DataLeafNode::MAX_STORED_BYTES),
|
||||||
randomData(DataLeafNode::MAX_STORED_BYTES),
|
randomData(DataLeafNode::MAX_STORED_BYTES),
|
||||||
blockStore(make_unique<InMemoryBlockStore>()),
|
blockStore(make_unique<FakeBlockStore>()),
|
||||||
block(blockStore->create(DataNodeView::BLOCKSIZE_BYTES)),
|
block(blockStore->create(DataNodeView::BLOCKSIZE_BYTES)),
|
||||||
leafblock(blockStore->create(DataNodeView::BLOCKSIZE_BYTES)),
|
leafblock(blockStore->create(DataNodeView::BLOCKSIZE_BYTES)),
|
||||||
leafblockdata((uint8_t*)leafblock.block->data()),
|
leafblockdata((uint8_t*)leafblock.block->data()),
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
#include "blockstore/implementations/inmemory/InMemoryBlockStore.h"
|
#include "blockstore/implementations/testfake/FakeBlockStore.h"
|
||||||
#include "blockstore/implementations/inmemory/InMemoryBlock.h"
|
#include "blockstore/implementations/testfake/FakeBlock.h"
|
||||||
#include "blobstore/implementations/onblocks/BlobStoreOnBlocks.h"
|
#include "blobstore/implementations/onblocks/BlobStoreOnBlocks.h"
|
||||||
#include "blobstore/implementations/onblocks/impl/DataNode.h"
|
#include "blobstore/implementations/onblocks/impl/DataNode.h"
|
||||||
#include "blobstore/implementations/onblocks/impl/DataLeafNode.h"
|
#include "blobstore/implementations/onblocks/impl/DataLeafNode.h"
|
||||||
@ -13,13 +13,13 @@ using std::make_unique;
|
|||||||
using std::string;
|
using std::string;
|
||||||
|
|
||||||
using blockstore::BlockStore;
|
using blockstore::BlockStore;
|
||||||
using blockstore::inmemory::InMemoryBlockStore;
|
using blockstore::testfake::FakeBlockStore;
|
||||||
using namespace blobstore;
|
using namespace blobstore;
|
||||||
using namespace blobstore::onblocks;
|
using namespace blobstore::onblocks;
|
||||||
|
|
||||||
class DataNodeTest: public Test {
|
class DataNodeTest: public Test {
|
||||||
public:
|
public:
|
||||||
unique_ptr<BlockStore> blockStore = make_unique<InMemoryBlockStore>();
|
unique_ptr<BlockStore> blockStore = make_unique<FakeBlockStore>();
|
||||||
};
|
};
|
||||||
|
|
||||||
#define EXPECT_IS_PTR_TYPE(Type, ptr) EXPECT_NE(nullptr, dynamic_cast<Type*>(ptr)) << "Given pointer cannot be cast to the given type"
|
#define EXPECT_IS_PTR_TYPE(Type, ptr) EXPECT_NE(nullptr, dynamic_cast<Type*>(ptr)) << "Given pointer cannot be cast to the given type"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
#include "blockstore/implementations/inmemory/InMemoryBlockStore.h"
|
#include "blockstore/implementations/testfake/FakeBlockStore.h"
|
||||||
#include "blockstore/implementations/inmemory/InMemoryBlock.h"
|
#include "blockstore/implementations/testfake/FakeBlock.h"
|
||||||
#include "blobstore/implementations/onblocks/BlobStoreOnBlocks.h"
|
#include "blobstore/implementations/onblocks/BlobStoreOnBlocks.h"
|
||||||
#include "blobstore/implementations/onblocks/impl/DataNodeView.h"
|
#include "blobstore/implementations/onblocks/impl/DataNodeView.h"
|
||||||
#include "test/testutils/DataBlockFixture.h"
|
#include "test/testutils/DataBlockFixture.h"
|
||||||
@ -14,7 +14,7 @@ using std::make_unique;
|
|||||||
using std::string;
|
using std::string;
|
||||||
|
|
||||||
using blockstore::BlockStore;
|
using blockstore::BlockStore;
|
||||||
using blockstore::inmemory::InMemoryBlockStore;
|
using blockstore::testfake::FakeBlockStore;
|
||||||
using namespace blobstore;
|
using namespace blobstore;
|
||||||
using namespace blobstore::onblocks;
|
using namespace blobstore::onblocks;
|
||||||
|
|
||||||
@ -25,7 +25,7 @@ public:
|
|||||||
// because the next block load will just give you the same data region (and the overflow data will most
|
// because the next block load will just give you the same data region (and the overflow data will most
|
||||||
// likely still be intact).
|
// likely still be intact).
|
||||||
// So better write a FakeBlockStore class for test cases.
|
// So better write a FakeBlockStore class for test cases.
|
||||||
unique_ptr<BlockStore> blockStore = make_unique<InMemoryBlockStore>();
|
unique_ptr<BlockStore> blockStore = make_unique<FakeBlockStore>();
|
||||||
};
|
};
|
||||||
|
|
||||||
TEST_F(DataNodeViewTest, MagicNumberIsStored) {
|
TEST_F(DataNodeViewTest, MagicNumberIsStored) {
|
||||||
@ -54,13 +54,13 @@ TEST_P(DataNodeViewSizeTest, SizeIsStored) {
|
|||||||
|
|
||||||
TEST_F(DataNodeViewTest, DataIsStored) {
|
TEST_F(DataNodeViewTest, DataIsStored) {
|
||||||
DataBlockFixture randomData(DataNodeView::DATASIZE_BYTES);
|
DataBlockFixture randomData(DataNodeView::DATASIZE_BYTES);
|
||||||
auto block = blockStore->create(BlobStoreOnBlocks::BLOCKSIZE);
|
auto block = blockStore->create(DataNodeView::BLOCKSIZE_BYTES);
|
||||||
{
|
{
|
||||||
DataNodeView view(std::move(block.block));
|
DataNodeView view(std::move(block.block));
|
||||||
std::memcpy(view.DataBegin<uint8_t>(), randomData.data(), DataNodeView::DATASIZE_BYTES);
|
std::memcpy(view.DataBegin<uint8_t>(), randomData.data(), randomData.size());
|
||||||
}
|
}
|
||||||
DataNodeView view(blockStore->load(block.key));
|
DataNodeView view(blockStore->load(block.key));
|
||||||
EXPECT_EQ(0, std::memcmp(view.DataBegin<uint8_t>(), randomData.data(), DataNodeView::DATASIZE_BYTES));
|
EXPECT_EQ(0, std::memcmp(view.DataBegin<uint8_t>(), randomData.data(), randomData.size()));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(DataNodeViewTest, HeaderAndBodyDontOverlap) {
|
TEST_F(DataNodeViewTest, HeaderAndBodyDontOverlap) {
|
||||||
|
@ -20,6 +20,12 @@ void DataBlockFixture::fillFileWithRandomData(long long int IV) {
|
|||||||
val += 1442695040888963407;
|
val += 1442695040888963407;
|
||||||
reinterpret_cast<long long int*>(_fileData)[i] = val;
|
reinterpret_cast<long long int*>(_fileData)[i] = val;
|
||||||
}
|
}
|
||||||
|
//Fill remaining bytes
|
||||||
|
for(size_t i=(_size/sizeof(long long int))*sizeof(long long int); i<_size; ++i) {
|
||||||
|
val *= 6364136223846793005L;
|
||||||
|
val += 1442695040888963407;
|
||||||
|
reinterpret_cast<char*>(_fileData)[i] = val;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *DataBlockFixture::data() const {
|
const char *DataBlockFixture::data() const {
|
||||||
|
Loading…
Reference in New Issue
Block a user