[block] make sure we can change validators
This commit is contained in:
@@ -49,6 +49,14 @@ namespace {
|
||||
}
|
||||
};
|
||||
|
||||
class validator_mock : public block_manager<4096>::validator {
|
||||
public:
|
||||
typedef boost::shared_ptr<validator_mock> ptr;
|
||||
|
||||
MOCK_CONST_METHOD2(check, void(buffer<4096> const &, block_address));
|
||||
MOCK_CONST_METHOD2(prepare, void(buffer<4096> &, block_address));
|
||||
};
|
||||
|
||||
typedef block_manager<4096> bm4096;
|
||||
}
|
||||
|
||||
@@ -208,3 +216,170 @@ TEST(BlockTests, write_then_read)
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------
|
||||
|
||||
namespace {
|
||||
class ValidatorTests : public Test {
|
||||
public:
|
||||
ValidatorTests()
|
||||
: bm(create_bm<4096>()),
|
||||
vmock(new validator_mock),
|
||||
vmock2(new validator_mock) {
|
||||
}
|
||||
|
||||
void expect_check(validator_mock::ptr v) {
|
||||
EXPECT_CALL(*v, check(_, Eq(0ull))).Times(1);
|
||||
}
|
||||
|
||||
void expect_prepare(validator_mock::ptr v) {
|
||||
EXPECT_CALL(*v, prepare(_, Eq(0ull))).Times(1);
|
||||
}
|
||||
|
||||
bm4096::ptr bm;
|
||||
validator_mock::ptr vmock;
|
||||
validator_mock::ptr vmock2;
|
||||
};
|
||||
}
|
||||
|
||||
//--------------------------------
|
||||
|
||||
TEST_F(ValidatorTests, check_on_read_lock)
|
||||
{
|
||||
expect_check(vmock);
|
||||
bm4096::read_ref rr = bm->read_lock(0, vmock);
|
||||
}
|
||||
|
||||
TEST_F(ValidatorTests, check_only_called_once_on_read_lock)
|
||||
{
|
||||
{
|
||||
expect_check(vmock);
|
||||
bm4096::read_ref rr = bm->read_lock(0, vmock);
|
||||
}
|
||||
|
||||
bm4096::read_ref rr = bm->read_lock(0, vmock);
|
||||
}
|
||||
|
||||
TEST_F(ValidatorTests, validator_can_be_changed_by_read_lock)
|
||||
{
|
||||
{
|
||||
expect_check(vmock);
|
||||
bm4096::read_ref rr = bm->read_lock(0, vmock);
|
||||
}
|
||||
|
||||
{
|
||||
expect_check(vmock2);
|
||||
bm4096::read_ref rr = bm->read_lock(0, vmock2);
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------
|
||||
|
||||
TEST_F(ValidatorTests, check_and_prepare_on_write_lock)
|
||||
{
|
||||
expect_check(vmock);
|
||||
expect_prepare(vmock);
|
||||
bm4096::write_ref wr = bm->write_lock(0, vmock);
|
||||
}
|
||||
|
||||
TEST_F(ValidatorTests, check_only_called_once_on_write_lock)
|
||||
{
|
||||
{
|
||||
expect_check(vmock);
|
||||
bm4096::write_ref wr = bm->write_lock(0, vmock);
|
||||
}
|
||||
|
||||
bm4096::write_ref wr = bm->write_lock(0, vmock);
|
||||
expect_prepare(vmock);
|
||||
}
|
||||
|
||||
TEST_F(ValidatorTests, validator_can_be_changed_by_write_lock)
|
||||
{
|
||||
{
|
||||
expect_check(vmock);
|
||||
expect_prepare(vmock);
|
||||
bm4096::write_ref wr = bm->write_lock(0, vmock);
|
||||
}
|
||||
|
||||
{
|
||||
expect_check(vmock2);
|
||||
expect_prepare(vmock2);
|
||||
bm4096::write_ref wr = bm->write_lock(0, vmock2);
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------
|
||||
|
||||
TEST_F(ValidatorTests, no_check_but_prepare_on_write_lock_zero)
|
||||
{
|
||||
expect_prepare(vmock);
|
||||
bm4096::write_ref wr = bm->write_lock_zero(0, vmock);
|
||||
}
|
||||
|
||||
TEST_F(ValidatorTests, validator_can_be_changed_by_write_lock_zero)
|
||||
{
|
||||
expect_prepare(vmock);
|
||||
expect_prepare(vmock2);
|
||||
|
||||
{
|
||||
bm4096::write_ref wr = bm->write_lock_zero(0, vmock);
|
||||
}
|
||||
|
||||
bm4096::write_ref wr = bm->write_lock_zero(0, vmock2);
|
||||
}
|
||||
|
||||
//--------------------------------
|
||||
|
||||
TEST_F(ValidatorTests, check_and_prepare_on_superblock_lock)
|
||||
{
|
||||
expect_check(vmock);
|
||||
expect_prepare(vmock);
|
||||
bm4096::write_ref wr = bm->superblock(0, vmock);
|
||||
}
|
||||
|
||||
TEST_F(ValidatorTests, check_only_called_once_on_superblock_lock)
|
||||
{
|
||||
{
|
||||
expect_check(vmock);
|
||||
expect_prepare(vmock);
|
||||
bm4096::write_ref wr = bm->superblock(0, vmock);
|
||||
}
|
||||
|
||||
bm4096::write_ref wr = bm->superblock(0, vmock);
|
||||
expect_prepare(vmock);
|
||||
}
|
||||
|
||||
TEST_F(ValidatorTests, validator_can_be_changed_by_superblock_lock)
|
||||
{
|
||||
{
|
||||
expect_check(vmock);
|
||||
expect_prepare(vmock);
|
||||
bm4096::write_ref wr = bm->write_lock(0, vmock);
|
||||
}
|
||||
|
||||
{
|
||||
expect_check(vmock2);
|
||||
expect_prepare(vmock2);
|
||||
bm4096::write_ref wr = bm->write_lock(0, vmock2);
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------
|
||||
|
||||
TEST_F(ValidatorTests, no_check_but_prepare_on_superblock_lock_zero)
|
||||
{
|
||||
expect_prepare(vmock);
|
||||
bm4096::write_ref wr = bm->superblock_zero(0, vmock);
|
||||
}
|
||||
|
||||
TEST_F(ValidatorTests, validator_can_be_changed_by_superblock_zero)
|
||||
{
|
||||
expect_prepare(vmock);
|
||||
expect_prepare(vmock2);
|
||||
|
||||
{
|
||||
bm4096::write_ref wr = bm->write_lock(0, vmock);
|
||||
}
|
||||
|
||||
bm4096::write_ref wr = bm->write_lock(0, vmock2);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------
|
||||
|
Reference in New Issue
Block a user