This checks the response from ledger::dependencies_confirmed to ensure it supports pruned blocks. (#3218)

This commit is contained in:
clemahieu 2021-04-21 21:14:53 +02:00 committed by GitHub
commit 2fc6329a11
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 53 additions and 1 deletions

View file

@ -3238,6 +3238,58 @@ TEST (ledger, dependents_confirmed)
ASSERT_TRUE (ledger.dependents_confirmed (transaction, *receive2));
}
TEST (ledger, dependents_confirmed_pruning)
{
nano::block_builder builder;
nano::logger_mt logger;
auto store = nano::make_store (logger, nano::unique_path ());
ASSERT_FALSE (store->init_error ());
nano::stat stats;
nano::ledger ledger (*store, stats);
ledger.pruning = true;
auto transaction (store->tx_begin_write ());
nano::genesis genesis;
store->initialize (transaction, genesis, ledger.cache);
nano::work_pool pool (std::numeric_limits<unsigned>::max ());
nano::keypair key1;
auto send1 = builder.state ()
.account (nano::genesis_account)
.previous (genesis.hash ())
.representative (nano::genesis_account)
.balance (nano::genesis_amount - 100)
.link (key1.pub)
.sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub)
.work (*pool.generate (genesis.hash ()))
.build_shared ();
ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *send1).code);
auto send2 = builder.state ()
.account (nano::genesis_account)
.previous (send1->hash ())
.representative (nano::genesis_account)
.balance (nano::genesis_amount - 200)
.link (key1.pub)
.sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub)
.work (*pool.generate (send1->hash ()))
.build_shared ();
ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *send2).code);
nano::confirmation_height_info height;
ASSERT_FALSE (ledger.store.confirmation_height_get (transaction, nano::genesis_account, height));
height.height = 3;
ledger.store.confirmation_height_put (transaction, nano::genesis_account, height);
ASSERT_TRUE (ledger.block_confirmed (transaction, send1->hash ()));
ASSERT_EQ (2, ledger.pruning_action (transaction, send2->hash (), 1));
auto receive1 = builder.state ()
.account (key1.pub)
.previous (0)
.representative (nano::genesis_account)
.balance (100)
.link (send1->hash ())
.sign (key1.prv, key1.pub)
.work (*pool.generate (key1.pub))
.build_shared ();
ASSERT_TRUE (ledger.dependents_confirmed (transaction, *receive1));
}
TEST (ledger, block_confirmed)
{
nano::block_builder builder;

View file

@ -1172,7 +1172,7 @@ bool nano::ledger::dependents_confirmed (nano::transaction const & transaction_a
auto result (hash_a.is_zero ());
if (!result)
{
result = block_confirmed (transaction_a, hash_a);
result = block_confirmed_or_pruned_exists (transaction_a, hash_a);
}
return result;
});