Bitcoin Core
31.1.0
P2P Digital Currency
Toggle main menu visibility
Loading...
Searching...
No Matches
src
test
txreconciliation_tests.cpp
Go to the documentation of this file.
1
// Copyright (c) 2021-present 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/common.h
>
8
#include <
test/util/setup_common.h
>
9
10
#include <boost/test/unit_test.hpp>
11
12
BOOST_FIXTURE_TEST_SUITE
(txreconciliation_tests,
BasicTestingSetup
)
13
14
BOOST_AUTO_TEST_CASE
(RegisterPeerTest)
15
{
16
TxReconciliationTracker
tracker(
TXRECONCILIATION_VERSION
);
17
const
uint64_t salt = 0;
18
19
// Prepare a peer for reconciliation.
20
tracker.
PreRegisterPeer
(0);
21
22
// Invalid version.
23
BOOST_CHECK_EQUAL
(tracker.
RegisterPeer
(
/*peer_id=*/
0,
/*is_peer_inbound=*/
true
,
24
/*peer_recon_version=*/
0, salt),
25
ReconciliationRegisterResult::PROTOCOL_VIOLATION
);
26
27
// Valid registration (inbound and outbound peers).
28
BOOST_REQUIRE(!tracker.
IsPeerRegistered
(0));
29
BOOST_REQUIRE_EQUAL(tracker.
RegisterPeer
(0,
true
, 1, salt),
ReconciliationRegisterResult::SUCCESS
);
30
BOOST_CHECK
(tracker.
IsPeerRegistered
(0));
31
BOOST_REQUIRE(!tracker.
IsPeerRegistered
(1));
32
tracker.
PreRegisterPeer
(1);
33
BOOST_REQUIRE(tracker.
RegisterPeer
(1,
false
, 1, salt) ==
ReconciliationRegisterResult::SUCCESS
);
34
BOOST_CHECK
(tracker.
IsPeerRegistered
(1));
35
36
// Reconciliation version is higher than ours, should be able to register.
37
BOOST_REQUIRE(!tracker.
IsPeerRegistered
(2));
38
tracker.
PreRegisterPeer
(2);
39
BOOST_REQUIRE(tracker.
RegisterPeer
(2,
true
, 2, salt) ==
ReconciliationRegisterResult::SUCCESS
);
40
BOOST_CHECK
(tracker.
IsPeerRegistered
(2));
41
42
// Try registering for the second time.
43
BOOST_REQUIRE(tracker.
RegisterPeer
(1,
false
, 1, salt) ==
ReconciliationRegisterResult::ALREADY_REGISTERED
);
44
45
// Do not register if there were no pre-registration for the peer.
46
BOOST_REQUIRE_EQUAL(tracker.
RegisterPeer
(100,
true
, 1, salt),
ReconciliationRegisterResult::NOT_FOUND
);
47
BOOST_CHECK
(!tracker.
IsPeerRegistered
(100));
48
}
49
50
BOOST_AUTO_TEST_CASE
(ForgetPeerTest)
51
{
52
TxReconciliationTracker
tracker(
TXRECONCILIATION_VERSION
);
53
NodeId
peer_id0 = 0;
54
55
// Removing peer after pre-registering works and does not let to register the peer.
56
tracker.
PreRegisterPeer
(peer_id0);
57
tracker.
ForgetPeer
(peer_id0);
58
BOOST_CHECK_EQUAL
(tracker.
RegisterPeer
(peer_id0,
true
, 1, 1),
ReconciliationRegisterResult::NOT_FOUND
);
59
60
// Removing peer after it is registered works.
61
tracker.
PreRegisterPeer
(peer_id0);
62
BOOST_REQUIRE(!tracker.
IsPeerRegistered
(peer_id0));
63
BOOST_REQUIRE_EQUAL(tracker.
RegisterPeer
(peer_id0,
true
, 1, 1),
ReconciliationRegisterResult::SUCCESS
);
64
BOOST_CHECK
(tracker.
IsPeerRegistered
(peer_id0));
65
tracker.
ForgetPeer
(peer_id0);
66
BOOST_CHECK
(!tracker.
IsPeerRegistered
(peer_id0));
67
}
68
69
BOOST_AUTO_TEST_CASE
(IsPeerRegisteredTest)
70
{
71
TxReconciliationTracker
tracker(
TXRECONCILIATION_VERSION
);
72
NodeId
peer_id0 = 0;
73
74
BOOST_REQUIRE(!tracker.
IsPeerRegistered
(peer_id0));
75
tracker.
PreRegisterPeer
(peer_id0);
76
BOOST_REQUIRE(!tracker.
IsPeerRegistered
(peer_id0));
77
78
BOOST_REQUIRE_EQUAL(tracker.
RegisterPeer
(peer_id0,
true
, 1, 1),
ReconciliationRegisterResult::SUCCESS
);
79
BOOST_CHECK
(tracker.
IsPeerRegistered
(peer_id0));
80
81
tracker.
ForgetPeer
(peer_id0);
82
BOOST_CHECK
(!tracker.
IsPeerRegistered
(peer_id0));
83
}
84
85
BOOST_AUTO_TEST_SUITE_END
()
TxReconciliationTracker
Transaction reconciliation is a way for nodes to efficiently announce transactions.
Definition
txreconciliation.h:52
TxReconciliationTracker::IsPeerRegistered
bool IsPeerRegistered(NodeId peer_id) const
Check if a peer is registered to reconcile transactions with us.
Definition
txreconciliation.cpp:167
TxReconciliationTracker::RegisterPeer
ReconciliationRegisterResult RegisterPeer(NodeId peer_id, bool is_peer_inbound, uint32_t peer_recon_version, uint64_t remote_salt)
Step 0.
Definition
txreconciliation.cpp:156
TxReconciliationTracker::PreRegisterPeer
uint64_t PreRegisterPeer(NodeId peer_id)
Step 0.
Definition
txreconciliation.cpp:151
TxReconciliationTracker::ForgetPeer
void ForgetPeer(NodeId peer_id)
Attempts to forget txreconciliation-related state of the peer (if we previously stored any).
Definition
txreconciliation.cpp:162
BOOST_FIXTURE_TEST_SUITE
BOOST_FIXTURE_TEST_SUITE(cuckoocache_tests, BasicTestingSetup)
Test Suite for CuckooCache.
BOOST_AUTO_TEST_SUITE_END
BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_CASE
BOOST_AUTO_TEST_CASE(ipc_tests)
Definition
ipc_tests.cpp:13
NodeId
int64_t NodeId
Definition
net.h:103
BOOST_CHECK_EQUAL
#define BOOST_CHECK_EQUAL(v1, v2)
Definition
object.cpp:17
BOOST_CHECK
#define BOOST_CHECK(expr)
Definition
object.cpp:16
setup_common.h
BasicTestingSetup
Basic testing setup.
Definition
setup_common.h:64
common.h
txreconciliation.h
ReconciliationRegisterResult::ALREADY_REGISTERED
@ ALREADY_REGISTERED
Definition
txreconciliation.h:20
ReconciliationRegisterResult::NOT_FOUND
@ NOT_FOUND
Definition
txreconciliation.h:18
ReconciliationRegisterResult::PROTOCOL_VIOLATION
@ PROTOCOL_VIOLATION
Definition
txreconciliation.h:21
ReconciliationRegisterResult::SUCCESS
@ SUCCESS
Definition
txreconciliation.h:19
TXRECONCILIATION_VERSION
static constexpr uint32_t TXRECONCILIATION_VERSION
Supported transaction reconciliation protocol version.
Definition
txreconciliation.h:15
BOOST_AUTO_TEST_CASE
BOOST_AUTO_TEST_CASE(RegisterPeerTest)
Definition
txreconciliation_tests.cpp:14
Generated on
for Bitcoin Core by
1.17.0