mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-11 22:50:59 +01:00
wallet: Avoid use of Chain::Lock in rescanblockchain
This is a step toward removing the Chain::Lock class and reducing cs_main locking. This change only affects behavior in the case where wallet last block processed falls behind the chain tip. The rescanblockchain error height error checking will just be stricter in this case and only accept values up to the last processed height
This commit is contained in:
@@ -103,4 +103,40 @@ BOOST_AUTO_TEST_CASE(findCommonAncestor)
|
||||
BOOST_CHECK_EQUAL(fork_hash, active[fork_height]->GetBlockHash());
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(hasBlocks)
|
||||
{
|
||||
auto chain = interfaces::MakeChain(m_node);
|
||||
auto& active = ChainActive();
|
||||
|
||||
// Test ranges
|
||||
BOOST_CHECK(chain->hasBlocks(active.Tip()->GetBlockHash(), 10, 90));
|
||||
BOOST_CHECK(chain->hasBlocks(active.Tip()->GetBlockHash(), 10, {}));
|
||||
BOOST_CHECK(chain->hasBlocks(active.Tip()->GetBlockHash(), 0, 90));
|
||||
BOOST_CHECK(chain->hasBlocks(active.Tip()->GetBlockHash(), 0, {}));
|
||||
BOOST_CHECK(chain->hasBlocks(active.Tip()->GetBlockHash(), -1000, 1000));
|
||||
active[5]->nStatus &= ~BLOCK_HAVE_DATA;
|
||||
BOOST_CHECK(chain->hasBlocks(active.Tip()->GetBlockHash(), 10, 90));
|
||||
BOOST_CHECK(chain->hasBlocks(active.Tip()->GetBlockHash(), 10, {}));
|
||||
BOOST_CHECK(!chain->hasBlocks(active.Tip()->GetBlockHash(), 0, 90));
|
||||
BOOST_CHECK(!chain->hasBlocks(active.Tip()->GetBlockHash(), 0, {}));
|
||||
BOOST_CHECK(!chain->hasBlocks(active.Tip()->GetBlockHash(), -1000, 1000));
|
||||
active[95]->nStatus &= ~BLOCK_HAVE_DATA;
|
||||
BOOST_CHECK(chain->hasBlocks(active.Tip()->GetBlockHash(), 10, 90));
|
||||
BOOST_CHECK(!chain->hasBlocks(active.Tip()->GetBlockHash(), 10, {}));
|
||||
BOOST_CHECK(!chain->hasBlocks(active.Tip()->GetBlockHash(), 0, 90));
|
||||
BOOST_CHECK(!chain->hasBlocks(active.Tip()->GetBlockHash(), 0, {}));
|
||||
BOOST_CHECK(!chain->hasBlocks(active.Tip()->GetBlockHash(), -1000, 1000));
|
||||
active[50]->nStatus &= ~BLOCK_HAVE_DATA;
|
||||
BOOST_CHECK(!chain->hasBlocks(active.Tip()->GetBlockHash(), 10, 90));
|
||||
BOOST_CHECK(!chain->hasBlocks(active.Tip()->GetBlockHash(), 10, {}));
|
||||
BOOST_CHECK(!chain->hasBlocks(active.Tip()->GetBlockHash(), 0, 90));
|
||||
BOOST_CHECK(!chain->hasBlocks(active.Tip()->GetBlockHash(), 0, {}));
|
||||
BOOST_CHECK(!chain->hasBlocks(active.Tip()->GetBlockHash(), -1000, 1000));
|
||||
|
||||
// Test edge cases
|
||||
BOOST_CHECK(chain->hasBlocks(active.Tip()->GetBlockHash(), 6, 49));
|
||||
BOOST_CHECK(!chain->hasBlocks(active.Tip()->GetBlockHash(), 5, 49));
|
||||
BOOST_CHECK(!chain->hasBlocks(active.Tip()->GetBlockHash(), 6, 50));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
Reference in New Issue
Block a user