[block_t] verify any exception thrown by validator->check() gets passed up, and the lock is not consequently taken.
This commit is contained in:
parent
a7c0b0c39b
commit
925dbdbc53
@ -242,6 +242,13 @@ namespace {
|
||||
validator_mock::ptr vmock;
|
||||
validator_mock::ptr vmock2;
|
||||
};
|
||||
|
||||
class my_error : public runtime_error {
|
||||
public:
|
||||
my_error(string const &msg)
|
||||
: runtime_error(msg) {
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
//--------------------------------
|
||||
@ -401,4 +408,16 @@ TEST_F(ValidatorTests, validator_can_be_changed_by_superblock_zero)
|
||||
bm4096::write_ref wr = bm->superblock_zero(0, vmock2);
|
||||
}
|
||||
|
||||
//--------------------------------
|
||||
|
||||
TEST_F(ValidatorTests, validator_check_failure_gets_passed_up)
|
||||
{
|
||||
validator_mock::ptr v(new validator_mock);
|
||||
|
||||
EXPECT_CALL(*v, check(_, Eq(0ull))).Times(1).WillOnce(Throw(my_error("bang!")));
|
||||
|
||||
ASSERT_THROW(bm->read_lock(0, v), my_error);
|
||||
ASSERT_FALSE(bm->is_locked(0));
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user