Changeset View
Changeset View
Standalone View
Standalone View
src/test/denialofservice_tests.cpp
Show First 20 Lines • Show All 79 Lines • ▼ Show 20 Lines | BOOST_AUTO_TEST_CASE(outbound_slow_chain_eviction) { | ||||
auto connman = std::make_unique<CConnman>(config, 0x1337, 0x1337); | auto connman = std::make_unique<CConnman>(config, 0x1337, 0x1337); | ||||
auto peerLogic = std::make_unique<PeerLogicValidation>( | auto peerLogic = std::make_unique<PeerLogicValidation>( | ||||
*connman, nullptr, *m_node.scheduler, *m_node.chainman, | *connman, nullptr, *m_node.scheduler, *m_node.chainman, | ||||
*m_node.mempool); | *m_node.mempool); | ||||
// Mock an outbound peer | // Mock an outbound peer | ||||
CAddress addr1(ip(0xa0b0c001), NODE_NONE); | CAddress addr1(ip(0xa0b0c001), NODE_NONE); | ||||
CNode dummyNode1(id++, ServiceFlags(NODE_NETWORK), 0, INVALID_SOCKET, addr1, | CNode dummyNode1(id++, ServiceFlags(NODE_NETWORK), 0, INVALID_SOCKET, addr1, | ||||
0, 0, CAddress(), "", ConnectionType::OUTBOUND); | 0, 0, 0, CAddress(), "", ConnectionType::OUTBOUND); | ||||
dummyNode1.SetSendVersion(PROTOCOL_VERSION); | dummyNode1.SetSendVersion(PROTOCOL_VERSION); | ||||
peerLogic->InitializeNode(config, &dummyNode1); | peerLogic->InitializeNode(config, &dummyNode1); | ||||
dummyNode1.nVersion = 1; | dummyNode1.nVersion = 1; | ||||
dummyNode1.fSuccessfullyConnected = true; | dummyNode1.fSuccessfullyConnected = true; | ||||
// This test requires that we have a chain with non-zero work. | // This test requires that we have a chain with non-zero work. | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 44 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
static void AddRandomOutboundPeer(const Config &config, | static void AddRandomOutboundPeer(const Config &config, | ||||
std::vector<CNode *> &vNodes, | std::vector<CNode *> &vNodes, | ||||
PeerLogicValidation &peerLogic, | PeerLogicValidation &peerLogic, | ||||
CConnmanTest *connman) { | CConnmanTest *connman) { | ||||
CAddress addr(ip(g_insecure_rand_ctx.randbits(32)), NODE_NONE); | CAddress addr(ip(g_insecure_rand_ctx.randbits(32)), NODE_NONE); | ||||
vNodes.emplace_back(new CNode(id++, ServiceFlags(NODE_NETWORK), 0, | vNodes.emplace_back(new CNode(id++, ServiceFlags(NODE_NETWORK), 0, | ||||
INVALID_SOCKET, addr, 0, 0, CAddress(), "", | INVALID_SOCKET, addr, 0, 0, 0, CAddress(), "", | ||||
ConnectionType::OUTBOUND)); | ConnectionType::OUTBOUND)); | ||||
CNode &node = *vNodes.back(); | CNode &node = *vNodes.back(); | ||||
node.SetSendVersion(PROTOCOL_VERSION); | node.SetSendVersion(PROTOCOL_VERSION); | ||||
peerLogic.InitializeNode(config, &node); | peerLogic.InitializeNode(config, &node); | ||||
node.nVersion = 1; | node.nVersion = 1; | ||||
node.fSuccessfullyConnected = true; | node.fSuccessfullyConnected = true; | ||||
▲ Show 20 Lines • Show All 85 Lines • ▼ Show 20 Lines | auto banman = std::make_unique<BanMan>(GetDataDir() / "banlist.dat", | ||||
DEFAULT_MISBEHAVING_BANTIME); | DEFAULT_MISBEHAVING_BANTIME); | ||||
auto connman = std::make_unique<CConnman>(config, 0x1337, 0x1337); | auto connman = std::make_unique<CConnman>(config, 0x1337, 0x1337); | ||||
auto peerLogic = std::make_unique<PeerLogicValidation>( | auto peerLogic = std::make_unique<PeerLogicValidation>( | ||||
*connman, banman.get(), *m_node.scheduler, *m_node.chainman, | *connman, banman.get(), *m_node.scheduler, *m_node.chainman, | ||||
*m_node.mempool); | *m_node.mempool); | ||||
banman->ClearBanned(); | banman->ClearBanned(); | ||||
CAddress addr1(ip(0xa0b0c001), NODE_NONE); | CAddress addr1(ip(0xa0b0c001), NODE_NONE); | ||||
CNode dummyNode1(id++, NODE_NETWORK, 0, INVALID_SOCKET, addr1, 0, 0, | CNode dummyNode1(id++, NODE_NETWORK, 0, INVALID_SOCKET, addr1, 0, 0, 0, | ||||
CAddress(), "", ConnectionType::INBOUND); | CAddress(), "", ConnectionType::INBOUND); | ||||
dummyNode1.SetSendVersion(PROTOCOL_VERSION); | dummyNode1.SetSendVersion(PROTOCOL_VERSION); | ||||
peerLogic->InitializeNode(config, &dummyNode1); | peerLogic->InitializeNode(config, &dummyNode1); | ||||
dummyNode1.nVersion = 1; | dummyNode1.nVersion = 1; | ||||
dummyNode1.fSuccessfullyConnected = true; | dummyNode1.fSuccessfullyConnected = true; | ||||
// Should be discouraged | // Should be discouraged | ||||
Misbehaving(dummyNode1.GetId(), DISCOURAGEMENT_THRESHOLD); | Misbehaving(dummyNode1.GetId(), DISCOURAGEMENT_THRESHOLD); | ||||
{ | { | ||||
LOCK2(cs_main, dummyNode1.cs_sendProcessing); | LOCK2(cs_main, dummyNode1.cs_sendProcessing); | ||||
BOOST_CHECK( | BOOST_CHECK( | ||||
peerLogic->SendMessages(config, &dummyNode1, interruptDummy)); | peerLogic->SendMessages(config, &dummyNode1, interruptDummy)); | ||||
} | } | ||||
BOOST_CHECK(banman->IsDiscouraged(addr1)); | BOOST_CHECK(banman->IsDiscouraged(addr1)); | ||||
// Different IP, not discouraged | // Different IP, not discouraged | ||||
BOOST_CHECK(!banman->IsDiscouraged(ip(0xa0b0c001 | 0x0000ff00))); | BOOST_CHECK(!banman->IsDiscouraged(ip(0xa0b0c001 | 0x0000ff00))); | ||||
CAddress addr2(ip(0xa0b0c002), NODE_NONE); | CAddress addr2(ip(0xa0b0c002), NODE_NONE); | ||||
CNode dummyNode2(id++, NODE_NETWORK, 0, INVALID_SOCKET, addr2, 1, 1, | CNode dummyNode2(id++, NODE_NETWORK, 0, INVALID_SOCKET, addr2, 1, 1, 1, | ||||
CAddress(), "", ConnectionType::INBOUND); | CAddress(), "", ConnectionType::INBOUND); | ||||
dummyNode2.SetSendVersion(PROTOCOL_VERSION); | dummyNode2.SetSendVersion(PROTOCOL_VERSION); | ||||
peerLogic->InitializeNode(config, &dummyNode2); | peerLogic->InitializeNode(config, &dummyNode2); | ||||
dummyNode2.nVersion = 1; | dummyNode2.nVersion = 1; | ||||
dummyNode2.fSuccessfullyConnected = true; | dummyNode2.fSuccessfullyConnected = true; | ||||
Misbehaving(dummyNode2.GetId(), DISCOURAGEMENT_THRESHOLD - 1); | Misbehaving(dummyNode2.GetId(), DISCOURAGEMENT_THRESHOLD - 1); | ||||
{ | { | ||||
LOCK2(cs_main, dummyNode2.cs_sendProcessing); | LOCK2(cs_main, dummyNode2.cs_sendProcessing); | ||||
Show All 32 Lines | auto peerLogic = std::make_unique<PeerLogicValidation>( | ||||
*m_node.mempool); | *m_node.mempool); | ||||
banman->ClearBanned(); | banman->ClearBanned(); | ||||
int64_t nStartTime = GetTime(); | int64_t nStartTime = GetTime(); | ||||
// Overrides future calls to GetTime() | // Overrides future calls to GetTime() | ||||
SetMockTime(nStartTime); | SetMockTime(nStartTime); | ||||
CAddress addr(ip(0xa0b0c001), NODE_NONE); | CAddress addr(ip(0xa0b0c001), NODE_NONE); | ||||
CNode dummyNode(id++, NODE_NETWORK, 0, INVALID_SOCKET, addr, 4, 4, | CNode dummyNode(id++, NODE_NETWORK, 0, INVALID_SOCKET, addr, 4, 4, 4, | ||||
CAddress(), "", ConnectionType::INBOUND); | CAddress(), "", ConnectionType::INBOUND); | ||||
dummyNode.SetSendVersion(PROTOCOL_VERSION); | dummyNode.SetSendVersion(PROTOCOL_VERSION); | ||||
peerLogic->InitializeNode(config, &dummyNode); | peerLogic->InitializeNode(config, &dummyNode); | ||||
dummyNode.nVersion = 1; | dummyNode.nVersion = 1; | ||||
dummyNode.fSuccessfullyConnected = true; | dummyNode.fSuccessfullyConnected = true; | ||||
Misbehaving(dummyNode.GetId(), DISCOURAGEMENT_THRESHOLD); | Misbehaving(dummyNode.GetId(), DISCOURAGEMENT_THRESHOLD); | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 99 Lines • Show Last 20 Lines |