mirror of
https://github.com/ElementsProject/elements.git
synced 2026-08-17 13:07:54 +02: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:
parent
3cb85ac594
commit
1be8ff280c
6 changed files with 78 additions and 44 deletions
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue