8#include <chainparams.h>
22#include <validation.h>
27#include <boost/test/unit_test.hpp>
58 CNode dummyNode1{
id++,
80 BOOST_CHECK(m_node.chainman->ActiveChain().Tip() !=
nullptr);
81 BOOST_CHECK(m_node.chainman->ActiveChain().Tip()->nChainWork > 0);
89 const auto& [to_send, _more, _msg_type] = dummyNode1.
m_transport->GetBytesToSend(
false);
100 const auto& [to_send, _more, _msg_type] = dummyNode1.
m_transport->GetBytesToSend(
false);
125 vNodes.emplace_back(
new CNode{
id++,
139 node.fSuccessfullyConnected =
true;
148 auto connman = std::make_unique<ConnmanTestMsg>(0x1337, 0x1337, *m_node.addrman, *m_node.netgroupman,
Params());
149 auto peerLogic =
PeerManager::make(*connman, *m_node.addrman,
nullptr, *m_node.chainman, *m_node.mempool, *m_node.warnings, {});
157 const auto delta{3 * std::chrono::seconds{m_node.chainman->GetConsensus().nPowTargetSpacing} + 1s};
158 connman->Init(options);
159 std::vector<CNode *> vNodes;
162 for (
int i = 0; i < max_outbound_full_relay; ++i) {
166 peerLogic->CheckForStaleTipAndEvictPeers();
177 peerLogic->CheckForStaleTipAndEvictPeers();
188 clock.
set(time_init);
192 peerLogic->CheckForStaleTipAndEvictPeers();
193 for (
int i = 0; i < max_outbound_full_relay; ++i) {
199 vNodes.back()->fDisconnect =
false;
203 peerLogic->UpdateLastBlockAnnounceTime(vNodes.back()->GetId(),
GetTime());
205 peerLogic->CheckForStaleTipAndEvictPeers();
206 for (
int i = 0; i < max_outbound_full_relay - 1; ++i) {
209 BOOST_CHECK(vNodes[max_outbound_full_relay-1]->fDisconnect ==
true);
212 vNodes[max_outbound_full_relay - 1]->fDisconnect =
false;
216 clock.
set(time_init);
219 peerLogic->CheckForStaleTipAndEvictPeers();
221 for (
int i = 0; i < max_outbound_full_relay - 2; ++i) {
224 BOOST_CHECK(vNodes[max_outbound_full_relay - 2]->fDisconnect ==
false);
225 BOOST_CHECK(vNodes[max_outbound_full_relay - 1]->fDisconnect ==
true);
226 BOOST_CHECK(vNodes[max_outbound_full_relay]->fDisconnect ==
false);
229 clock.
set(time_init);
232 peerLogic->CheckForStaleTipAndEvictPeers();
237 peerLogic->FinalizeNode(*
node);
240 connman->ClearTestNodes();
247 auto connman = std::make_unique<ConnmanTestMsg>(0x1337, 0x1337, *m_node.addrman, *m_node.netgroupman,
Params());
248 auto peerLogic =
PeerManager::make(*connman, *m_node.addrman,
nullptr, *m_node.chainman, *m_node.mempool, *m_node.warnings, {});
251 constexpr auto MINIMUM_CONNECT_TIME{30s};
255 connman->Init(options);
256 std::vector<CNode*> vNodes;
259 for (
int i = 0; i < max_outbound_block_relay; ++i) {
262 peerLogic->CheckForStaleTipAndEvictPeers();
264 for (
int i = 0; i < max_outbound_block_relay; ++i) {
270 peerLogic->CheckForStaleTipAndEvictPeers();
273 for (
int i = 0; i < max_outbound_block_relay; ++i) {
278 clock += MINIMUM_CONNECT_TIME;
279 peerLogic->CheckForStaleTipAndEvictPeers();
280 for (
int i = 0; i < max_outbound_block_relay; ++i) {
287 vNodes.back()->fDisconnect =
false;
290 peerLogic->CheckForStaleTipAndEvictPeers();
291 for (
int i = 0; i < max_outbound_block_relay - 1; ++i) {
294 BOOST_CHECK(vNodes[max_outbound_block_relay - 1]->fDisconnect ==
true);
298 peerLogic->FinalizeNode(*
node);
300 connman->ClearTestNodes();
308 auto connman = std::make_unique<ConnmanTestMsg>(0x1337, 0x1337, *m_node.addrman, *m_node.netgroupman,
Params());
309 auto peerLogic =
PeerManager::make(*connman, *m_node.addrman, banman.get(), *m_node.chainman, *m_node.mempool, *m_node.warnings, {});
313 tor_netaddr.
SetSpecial(
"pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion"));
322 std::array<CNode*, 5> nodes;
324 banman->ClearBanned();
326 nodes[0] =
new CNode{
id++,
338 nodes[0]->fSuccessfullyConnected =
true;
339 connman->AddTestNode(*nodes[0]);
340 peerLogic->UnitTestMisbehaving(nodes[0]->GetId());
347 nodes[1] =
new CNode{
id++,
359 nodes[1]->fSuccessfullyConnected =
true;
360 connman->AddTestNode(*nodes[1]);
368 peerLogic->UnitTestMisbehaving(nodes[1]->GetId());
378 nodes[2] =
new CNode{
id++,
390 nodes[2]->fSuccessfullyConnected =
true;
391 connman->AddTestNode(*nodes[2]);
393 nodes[3] =
new CNode{
id++,
404 connman->AddTestNode(*nodes[3]);
406 peerLogic->UnitTestMisbehaving(nodes[2]->GetId());
416 nodes[4] =
new CNode{
id++,
427 connman->AddTestNode(*nodes[4]);
429 peerLogic->UnitTestMisbehaving(nodes[4]->GetId());
435 peerLogic->FinalizeNode(*
node);
437 connman->ClearTestNodes();
445 auto connman = std::make_unique<CConnman>(0x1337, 0x1337, *m_node.addrman, *m_node.netgroupman,
Params());
446 auto peerLogic =
PeerManager::make(*connman, *m_node.addrman, banman.get(), *m_node.chainman, *m_node.mempool, *m_node.warnings, {});
448 banman->ClearBanned();
453 CNode dummyNode{
id++,
467 peerLogic->UnitTestMisbehaving(dummyNode.
GetId());
471 peerLogic->FinalizeNode(dummyNode);
BOOST_FIXTURE_TEST_CASE(util_CheckValue, CheckValueTest)
constexpr unsigned int DEFAULT_MISBEHAVING_BANTIME
const CChainParams & Params()
Return the currently selected parameters.
A CService with information about it as peer.
uint16_t GetDefaultPort() const
bool SetSpecial(std::string_view addr)
Parse a Tor or I2P address and set this object to it.
CNetAddr()
Construct an unspecified IPv6 network address (::/128).
Information about a peer.
void SetCommonVersion(int greatest_common_version)
std::atomic_bool fSuccessfullyConnected
fSuccessfullyConnected is set to true on receiving VERACK from the peer.
const std::unique_ptr< Transport > m_transport
Transport serializer/deserializer.
std::atomic_bool fDisconnect
A combination of a network address (CNetAddr) and a (TCP) port.
Helper to initialize the global NodeClock, let a duration elapse, and reset it after use in a test.
void set(NodeSeconds t)
Set mocktime.
static Mutex g_msgproc_mutex
Mutex for anything that is only accessed via the msg processing thread.
virtual void FinalizeNode(const CNode &node)=0
Handle removal of a peer (clear state).
virtual bool SendMessages(CNode &node) EXCLUSIVE_LOCKS_REQUIRED(g_msgproc_mutex)=0
Send queued protocol messages to a given node.
virtual void InitializeNode(const CNode &node, ServiceFlags our_services)=0
Initialize a peer (setup state).
static std::unique_ptr< PeerManager > make(CConnman &connman, AddrMan &addrman, BanMan *banman, ChainstateManager &chainman, CTxMemPool &pool, node::Warnings &warnings, Options opts)
std::vector< B > randbytes(size_t len) noexcept
Generate random bytes.
uint64_t randbits(int bits) noexcept
Generate a random (bits)-bit integer.
ConnectionType
Different types of connections to a peer.
@ PRIVATE_BROADCAST
Private broadcast connections are short-lived and only opened to privacy networks (Tor,...
@ BLOCK_RELAY
We use block-relay-only connections to help prevent against partition attacks.
@ OUTBOUND_FULL_RELAY
These are the default connections that we use to connect with the network.
@ INBOUND
Inbound connections are those initiated by a peer.
RecursiveMutex cs_main
Mutex to guard access to validation specific variables, such as reading or changing the chainstate.
BOOST_FIXTURE_TEST_SUITE(cuckoocache_tests, BasicTestingSetup)
Test Suite for CuckooCache.
BOOST_AUTO_TEST_SUITE_END()
static CService ip(uint32_t i)
BOOST_AUTO_TEST_CASE(ipc_tests)
constexpr unsigned int DEFAULT_MAX_PEER_CONNECTIONS
The maximum number of peer connections to maintain.
constexpr int MAX_BLOCK_RELAY_ONLY_CONNECTIONS
Maximum number of block-relay-only outgoing connections.
constexpr int MAX_OUTBOUND_FULL_RELAY_CONNECTIONS
Maximum number of automatic outgoing nodes over which we'll relay everything (blocks,...
std::string OnionToString(std::span< const uint8_t > addr)
constexpr size_t ADDR_TORV3_SIZE
Size of TORv3 address (in bytes).
#define BOOST_CHECK(expr)
ServiceFlags
nServices flags
constexpr int PROTOCOL_VERSION
network protocol versioning
int m_max_automatic_connections
void AddTestNode(CNode &node)
void FlushSendBuffer(CNode &node) const
void SetPeerConnectTimeout(std::chrono::seconds timeout)
void AddRandomOutboundPeer(NodeId &id, std::vector< CNode * > &vNodes, PeerManager &peerLogic, ConnmanTestMsg &connman, ConnectionType connType, bool onion_peer=false)
Testing setup that configures a complete environment.
TestingSetup(ChainType chainType=ChainType::MAIN, TestOpts={})
int64_t GetTime()
DEPRECATED Use either ClockType::now() or Now<TimePointType>() if a cast is needed.
T Now()
Return the current time point cast to the given precision.