From 9bde458c2a7485cee30ff84990bc6053be1891df Mon Sep 17 00:00:00 2001 From: greg7mdp Date: Tue, 17 Sep 2024 17:32:42 -0400 Subject: [PATCH] Add testcase with incorrect call. --- libraries/chain/controller.cpp | 1 + libraries/chain/fork_database.cpp | 3 ++- unittests/fork_db_tests.cpp | 5 +++++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/libraries/chain/controller.cpp b/libraries/chain/controller.cpp index f5f638e904..d2a1a8adc1 100644 --- a/libraries/chain/controller.cpp +++ b/libraries/chain/controller.cpp @@ -1137,6 +1137,7 @@ struct controller_impl { }); } + // prerequisite: claimed_id is either id, or an ancestor of id // returns true if block `id`, or one of its ancestors not older than claimed_id, is found in fork_db // and `is_valid()` // ------------------------------------------------------------------------------------------------------ diff --git a/libraries/chain/fork_database.cpp b/libraries/chain/fork_database.cpp index fba8af97bb..82767cc268 100644 --- a/libraries/chain/fork_database.cpp +++ b/libraries/chain/fork_database.cpp @@ -608,8 +608,9 @@ namespace eosio::chain { return my->validated_block_exists_impl(id, claimed_id); } + // prerequisite: claimed_id is either id, or an ancestor of id // returns true if block `id`, or one of its ancestors not older than claimed_id, is found in fork_db - // and `is_valid()` + // and `is_valid()`. // ------------------------------------------------------------------------------------------------------ template bool fork_database_impl::validated_block_exists_impl(const block_id_type& id, const block_id_type& claimed_id) const { diff --git a/unittests/fork_db_tests.cpp b/unittests/fork_db_tests.cpp index 3344d87f34..ae2e94e431 100644 --- a/unittests/fork_db_tests.cpp +++ b/unittests/fork_db_tests.cpp @@ -147,12 +147,17 @@ BOOST_FIXTURE_TEST_CASE(validated_block_exists, generate_forkdb_state) try { bsp12b->set_valid(true); bsp13b->set_valid(true); bsp14b->set_valid(true); + bsp11a->set_valid(true); BOOST_REQUIRE_EQUAL(true, forkdb.validated_block_exists(bsp14b->id(), bsp14b->id())); BOOST_REQUIRE_EQUAL(true, forkdb.validated_block_exists(bsp14b->id(), bsp13b->id())); BOOST_REQUIRE_EQUAL(true, forkdb.validated_block_exists(bsp14b->id(), bsp12b->id())); BOOST_REQUIRE_EQUAL(true, forkdb.validated_block_exists(bsp14b->id(), bsp11b->id())); + // incorrect call as bsp13a is not an ancestor of bsp14b. As a result `claimed_id` is + // not found, so we assume it is either the root or an older block which is `valid`. + BOOST_REQUIRE_EQUAL(true, forkdb.validated_block_exists(bsp14b->id(), bsp13a->id())); + bsp14b->set_valid(false); BOOST_REQUIRE_EQUAL(false, forkdb.validated_block_exists(bsp14b->id(), bsp14b->id())); BOOST_REQUIRE_EQUAL(true, forkdb.validated_block_exists(bsp14b->id(), bsp13b->id()));