Skip to content

Commit

Permalink
Refactor tests
Browse files Browse the repository at this point in the history
Signed-off-by: Azat Nizametdinov <[email protected]>
  • Loading branch information
Nizametdinov committed May 14, 2019
1 parent d7f6bca commit 5651db0
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 34 deletions.
2 changes: 1 addition & 1 deletion src/staking/block_reward_validator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class BlockRewardValidatorImpl : public BlockRewardValidator {
: m_behavior(behavior) {}

bool CheckBlockRewards(const CTransaction &coinbase_tx, CValidationState &state, const CBlockIndex &index,
CAmount input_amount, CAmount fees) override {
CAmount input_amount, CAmount fees) const override {
assert(MoneyRange(input_amount));
assert(MoneyRange(fees));

Expand Down
2 changes: 1 addition & 1 deletion src/staking/block_reward_validator.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class BlockRewardValidator {
CValidationState &state,
const CBlockIndex &index,
CAmount input_amount,
CAmount fees) = 0;
CAmount fees) const = 0;

virtual ~BlockRewardValidator() = default;

Expand Down
59 changes: 27 additions & 32 deletions src/test/staking/block_reward_validator_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,21 @@ struct Fixture {
}
};

void CheckTransactionIsRejected(
const CTransaction &tx,
const std::string &rejection_reason,
const staking::BlockRewardValidator &validator,
const CBlockIndex &block,
const CAmount input_amount,
const CAmount fees) {
CValidationState validation_state;
const bool result = validator.CheckBlockRewards(tx, validation_state, block, input_amount, fees);
BOOST_CHECK(!result);
BOOST_CHECK(!validation_state.IsValid());
BOOST_CHECK_EQUAL(validation_state.GetRejectCode(), REJECT_INVALID);
BOOST_CHECK_EQUAL(validation_state.GetRejectReason(), rejection_reason);
}

} // namespace

BOOST_AUTO_TEST_SUITE(block_reward_validator_tests)
Expand Down Expand Up @@ -89,18 +104,13 @@ BOOST_AUTO_TEST_CASE(total_output_is_too_large) {

const CAmount input_amount = 11 * UNIT;
const CAmount fees = UNIT / 2;
auto test_invalid_outputs = [&](const std::vector<CAmount> outputs) {
CTransaction tx = f.MakeCoinbaseTx(outputs);
CValidationState validation_state;

const bool result = validator->CheckBlockRewards(tx, validation_state, f.block, input_amount, fees);
BOOST_CHECK(!result);
BOOST_CHECK(!validation_state.IsValid());
BOOST_CHECK_EQUAL(validation_state.GetRejectCode(), REJECT_INVALID);
BOOST_CHECK_EQUAL(validation_state.GetRejectReason(), "bad-cb-amount");
};
test_invalid_outputs({f.immediate_reward + fees + 1, input_amount});
test_invalid_outputs({f.immediate_reward + fees, input_amount + 1});
CheckTransactionIsRejected(
f.MakeCoinbaseTx({f.immediate_reward + fees + 1, input_amount}),
"bad-cb-amount", *validator, f.block, input_amount, fees);
CheckTransactionIsRejected(
f.MakeCoinbaseTx({f.immediate_reward + fees, input_amount + 1}),
"bad-cb-amount", *validator, f.block, input_amount, fees);
}

BOOST_AUTO_TEST_CASE(no_outputs) {
Expand All @@ -109,14 +119,9 @@ BOOST_AUTO_TEST_CASE(no_outputs) {

const CAmount input_amount = 11 * UNIT;
const CAmount fees = UNIT / 2;
CTransaction tx = f.MakeCoinbaseTx({});
CValidationState validation_state;

const bool result = validator->CheckBlockRewards(tx, validation_state, f.block, input_amount, fees);
BOOST_CHECK(!result);
BOOST_CHECK(!validation_state.IsValid());
BOOST_CHECK_EQUAL(validation_state.GetRejectCode(), REJECT_INVALID);
BOOST_CHECK_EQUAL(validation_state.GetRejectReason(), "bad-cb-too-few-outputs");
CTransaction tx = f.MakeCoinbaseTx({});
CheckTransactionIsRejected(tx, "bad-cb-too-few-outputs", *validator, f.block, input_amount, fees);
}

BOOST_AUTO_TEST_CASE(total_output_is_too_small) {
Expand All @@ -125,14 +130,9 @@ BOOST_AUTO_TEST_CASE(total_output_is_too_small) {

const CAmount input_amount = 11 * UNIT;
const CAmount fees = UNIT / 2;
CTransaction tx = f.MakeCoinbaseTx({0, input_amount});
CValidationState validation_state;

const bool result = validator->CheckBlockRewards(tx, validation_state, f.block, input_amount, fees);
BOOST_CHECK(!result);
BOOST_CHECK(!validation_state.IsValid());
BOOST_CHECK_EQUAL(validation_state.GetRejectCode(), REJECT_INVALID);
BOOST_CHECK_EQUAL(validation_state.GetRejectReason(), "bad-cb-spends-too-little");
CTransaction tx = f.MakeCoinbaseTx({0, input_amount});
CheckTransactionIsRejected(tx, "bad-cb-spends-too-little", *validator, f.block, input_amount, fees);
}

BOOST_AUTO_TEST_CASE(non_reward_output_is_too_large) {
Expand All @@ -141,14 +141,9 @@ BOOST_AUTO_TEST_CASE(non_reward_output_is_too_large) {

const CAmount input_amount = 15 * UNIT;
const CAmount fees = UNIT / 2;
CTransaction tx = f.MakeCoinbaseTx({f.immediate_reward, input_amount + fees});
CValidationState validation_state;

const bool result = validator->CheckBlockRewards(tx, validation_state, f.block, input_amount, fees);
BOOST_CHECK(!result);
BOOST_CHECK(!validation_state.IsValid());
BOOST_CHECK_EQUAL(validation_state.GetRejectCode(), REJECT_INVALID);
BOOST_CHECK_EQUAL(validation_state.GetRejectReason(), "bad-cb-spends-too-much");
CTransaction tx = f.MakeCoinbaseTx({f.immediate_reward, input_amount + fees});
CheckTransactionIsRejected(tx, "bad-cb-spends-too-much", *validator, f.block, input_amount, fees);
}

BOOST_AUTO_TEST_SUITE_END()

0 comments on commit 5651db0

Please sign in to comment.