[era] era_superblock_t and era_check
This commit is contained in:
@@ -59,6 +59,7 @@ TEST_SOURCE=\
|
||||
unit-tests/cache_superblock_t.cc \
|
||||
unit-tests/damage_tracker_t.cc \
|
||||
unit-tests/endian_t.cc \
|
||||
unit-tests/era_superblock_t.cc \
|
||||
unit-tests/rmap_visitor_t.cc \
|
||||
unit-tests/run_set_t.cc \
|
||||
unit-tests/space_map_t.cc \
|
||||
|
112
unit-tests/era_superblock_t.cc
Normal file
112
unit-tests/era_superblock_t.cc
Normal file
@@ -0,0 +1,112 @@
|
||||
#include "gmock/gmock.h"
|
||||
#include "base/bits.h"
|
||||
#include "era/superblock.h"
|
||||
|
||||
using namespace base;
|
||||
using namespace era;
|
||||
using namespace superblock_damage;
|
||||
using namespace testing;
|
||||
|
||||
//----------------------------------------------------------------
|
||||
|
||||
namespace {
|
||||
unsigned const NR_METADATA_BLOCKS = 100;
|
||||
|
||||
class damage_visitor_mock : public damage_visitor {
|
||||
public:
|
||||
MOCK_METHOD1(visit, void (superblock_corrupt const &));
|
||||
MOCK_METHOD1(visit, void (superblock_invalid const &));
|
||||
};
|
||||
|
||||
class EraSuperblockTests : public Test {
|
||||
public:
|
||||
EraSuperblockTests() {
|
||||
sb_.bloom_tree_root = 1;
|
||||
sb_.era_array_root = 2;
|
||||
}
|
||||
|
||||
void check() {
|
||||
check_superblock(sb_, NR_METADATA_BLOCKS, visitor_);
|
||||
}
|
||||
|
||||
void check_invalid() {
|
||||
EXPECT_CALL(visitor_, visit(Matcher<superblock_invalid const &>(_))).Times(1);
|
||||
check();
|
||||
}
|
||||
|
||||
damage_visitor_mock visitor_;
|
||||
superblock sb_;
|
||||
};
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------
|
||||
|
||||
TEST_F(EraSuperblockTests, default_constructed_superblock_is_valid)
|
||||
{
|
||||
check();
|
||||
}
|
||||
|
||||
TEST_F(EraSuperblockTests, clean_shutdown_flag_is_valid)
|
||||
{
|
||||
sb_.flags.set_flag(superblock_flags::CLEAN_SHUTDOWN);
|
||||
check();
|
||||
}
|
||||
|
||||
TEST_F(EraSuperblockTests, unhandled_flags_get_set_correctly_and_is_invalid)
|
||||
{
|
||||
uint32_t bad_flag = 1 << 12;
|
||||
sb_.flags = superblock_flags(bad_flag | 1);
|
||||
ASSERT_THAT(sb_.flags.get_unhandled_flags(), Eq(bad_flag));
|
||||
check_invalid();
|
||||
}
|
||||
|
||||
TEST_F(EraSuperblockTests, blocknr_is_in_range)
|
||||
{
|
||||
sb_.blocknr = NR_METADATA_BLOCKS;
|
||||
check_invalid();
|
||||
}
|
||||
|
||||
TEST_F(EraSuperblockTests, magic_is_checked)
|
||||
{
|
||||
sb_.magic = 12345;
|
||||
check_invalid();
|
||||
}
|
||||
|
||||
TEST_F(EraSuperblockTests, version_gt_1_is_checked)
|
||||
{
|
||||
sb_.version = 2;
|
||||
check_invalid();
|
||||
}
|
||||
|
||||
TEST_F(EraSuperblockTests, version_lt_1_is_checked)
|
||||
{
|
||||
sb_.version = 0;
|
||||
check_invalid();
|
||||
}
|
||||
|
||||
TEST_F(EraSuperblockTests, metadata_block_size_checked)
|
||||
{
|
||||
sb_.metadata_block_size = 16;
|
||||
check_invalid();
|
||||
}
|
||||
|
||||
TEST_F(EraSuperblockTests, bloom_tree_root_isnt_0)
|
||||
{
|
||||
sb_.bloom_tree_root = 0;
|
||||
check_invalid();
|
||||
}
|
||||
|
||||
TEST_F(EraSuperblockTests, era_array_root_isnt_0)
|
||||
{
|
||||
sb_.era_array_root = 0;
|
||||
check_invalid();
|
||||
}
|
||||
|
||||
TEST_F(EraSuperblockTests, bloom_root_isnt_era_array_root)
|
||||
{
|
||||
sb_.bloom_tree_root = 10;
|
||||
sb_.era_array_root = 10;
|
||||
check_invalid();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------
|
Reference in New Issue
Block a user