LCOV - code coverage report
Current view: top level - src/test - txreconciliation_tests.cpp (source / functions) Hit Total Coverage
Test: total_coverage.info Lines: 46 46 100.0 %
Date: 2026-06-25 07:23:43 Functions: 24 24 100.0 %

          Line data    Source code
       1             : // Copyright (c) 2021 The Bitcoin Core developers
       2             : // Distributed under the MIT software license, see the accompanying
       3             : // file COPYING or http://www.opensource.org/licenses/mit-license.php.
       4             : 
       5             : #include <node/txreconciliation.h>
       6             : 
       7             : #include <test/util/setup_common.h>
       8             : 
       9             : #include <boost/test/unit_test.hpp>
      10             : 
      11         146 : BOOST_FIXTURE_TEST_SUITE(txreconciliation_tests, BasicTestingSetup)
      12             : 
      13         149 : BOOST_AUTO_TEST_CASE(RegisterPeerTest)
      14             : {
      15           1 :     TxReconciliationTracker tracker(TXRECONCILIATION_VERSION);
      16           1 :     const uint64_t salt = 0;
      17             : 
      18             :     // Prepare a peer for reconciliation.
      19           1 :     tracker.PreRegisterPeer(0);
      20             : 
      21             :     // Invalid version.
      22           1 :     BOOST_CHECK_EQUAL(tracker.RegisterPeer(/*peer_id=*/0, /*is_peer_inbound=*/true,
      23             :                                            /*peer_recon_version=*/0, salt),
      24             :                       ReconciliationRegisterResult::PROTOCOL_VIOLATION);
      25             : 
      26             :     // Valid registration (inbound and outbound peers).
      27           1 :     BOOST_REQUIRE(!tracker.IsPeerRegistered(0));
      28           1 :     BOOST_REQUIRE_EQUAL(tracker.RegisterPeer(0, true, 1, salt), ReconciliationRegisterResult::SUCCESS);
      29           1 :     BOOST_CHECK(tracker.IsPeerRegistered(0));
      30           1 :     BOOST_REQUIRE(!tracker.IsPeerRegistered(1));
      31           1 :     tracker.PreRegisterPeer(1);
      32           1 :     BOOST_REQUIRE(tracker.RegisterPeer(1, false, 1, salt) == ReconciliationRegisterResult::SUCCESS);
      33           1 :     BOOST_CHECK(tracker.IsPeerRegistered(1));
      34             : 
      35             :     // Reconciliation version is higher than ours, should be able to register.
      36           1 :     BOOST_REQUIRE(!tracker.IsPeerRegistered(2));
      37           1 :     tracker.PreRegisterPeer(2);
      38           1 :     BOOST_REQUIRE(tracker.RegisterPeer(2, true, 2, salt) == ReconciliationRegisterResult::SUCCESS);
      39           1 :     BOOST_CHECK(tracker.IsPeerRegistered(2));
      40             : 
      41             :     // Try registering for the second time.
      42           1 :     BOOST_REQUIRE(tracker.RegisterPeer(1, false, 1, salt) == ReconciliationRegisterResult::ALREADY_REGISTERED);
      43             : 
      44             :     // Do not register if there were no pre-registration for the peer.
      45           1 :     BOOST_REQUIRE_EQUAL(tracker.RegisterPeer(100, true, 1, salt), ReconciliationRegisterResult::NOT_FOUND);
      46           1 :     BOOST_CHECK(!tracker.IsPeerRegistered(100));
      47           1 : }
      48             : 
      49         149 : BOOST_AUTO_TEST_CASE(ForgetPeerTest)
      50             : {
      51           1 :     TxReconciliationTracker tracker(TXRECONCILIATION_VERSION);
      52           1 :     NodeId peer_id0 = 0;
      53             : 
      54             :     // Removing peer after pre-registring works and does not let to register the peer.
      55           1 :     tracker.PreRegisterPeer(peer_id0);
      56           1 :     tracker.ForgetPeer(peer_id0);
      57           1 :     BOOST_CHECK_EQUAL(tracker.RegisterPeer(peer_id0, true, 1, 1), ReconciliationRegisterResult::NOT_FOUND);
      58             : 
      59             :     // Removing peer after it is registered works.
      60           1 :     tracker.PreRegisterPeer(peer_id0);
      61           1 :     BOOST_REQUIRE(!tracker.IsPeerRegistered(peer_id0));
      62           1 :     BOOST_REQUIRE_EQUAL(tracker.RegisterPeer(peer_id0, true, 1, 1), ReconciliationRegisterResult::SUCCESS);
      63           1 :     BOOST_CHECK(tracker.IsPeerRegistered(peer_id0));
      64           1 :     tracker.ForgetPeer(peer_id0);
      65           1 :     BOOST_CHECK(!tracker.IsPeerRegistered(peer_id0));
      66           1 : }
      67             : 
      68         149 : BOOST_AUTO_TEST_CASE(IsPeerRegisteredTest)
      69             : {
      70           1 :     TxReconciliationTracker tracker(TXRECONCILIATION_VERSION);
      71           1 :     NodeId peer_id0 = 0;
      72             : 
      73           1 :     BOOST_REQUIRE(!tracker.IsPeerRegistered(peer_id0));
      74           1 :     tracker.PreRegisterPeer(peer_id0);
      75           1 :     BOOST_REQUIRE(!tracker.IsPeerRegistered(peer_id0));
      76             : 
      77           1 :     BOOST_REQUIRE_EQUAL(tracker.RegisterPeer(peer_id0, true, 1, 1), ReconciliationRegisterResult::SUCCESS);
      78           1 :     BOOST_CHECK(tracker.IsPeerRegistered(peer_id0));
      79             : 
      80           1 :     tracker.ForgetPeer(peer_id0);
      81           1 :     BOOST_CHECK(!tracker.IsPeerRegistered(peer_id0));
      82           1 : }
      83             : 
      84         146 : BOOST_AUTO_TEST_SUITE_END()

Generated by: LCOV version 1.16