mirror of
https://github.com/ElementsProject/elements.git
synced 2026-08-16 13:01:19 +02:00
doc, test: Test and explain service flag handling
Service flags are handled differently, depending on whether validated (if received from the peer) or unvalidated (received via gossip relay).
This commit is contained in:
parent
b3b19be20d
commit
74ebd4d135
3 changed files with 34 additions and 2 deletions
|
|
@ -1068,7 +1068,7 @@ BOOST_AUTO_TEST_CASE(load_addrman_corrupted)
|
|||
|
||||
BOOST_AUTO_TEST_CASE(addrman_update_address)
|
||||
{
|
||||
// Tests updating nTime via Connected() and nServices via SetServices()
|
||||
// Tests updating nTime via Connected() and nServices via SetServices() and Add()
|
||||
auto addrman = std::make_unique<AddrMan>(EMPTY_NETGROUPMAN, DETERMINISTIC, GetCheckRatio(m_node));
|
||||
CNetAddr source{ResolveIP("252.2.2.2")};
|
||||
CAddress addr{CAddress(ResolveService("250.1.1.1", 8333), NODE_NONE)};
|
||||
|
|
@ -1095,6 +1095,32 @@ BOOST_AUTO_TEST_CASE(addrman_update_address)
|
|||
BOOST_CHECK_EQUAL(vAddr2.size(), 1U);
|
||||
BOOST_CHECK(vAddr2.at(0).nTime >= start_time + 10000s);
|
||||
BOOST_CHECK_EQUAL(vAddr2.at(0).nServices, NODE_NETWORK_LIMITED);
|
||||
|
||||
// Updating an existing addr through Add() (used in gossip relay) can add additional services but can't remove existing ones.
|
||||
CAddress addr_v2{CAddress(ResolveService("250.1.1.1", 8333), NODE_P2P_V2)};
|
||||
addr_v2.nTime = start_time;
|
||||
BOOST_CHECK(!addrman->Add({addr_v2}, source));
|
||||
std::vector<CAddress> vAddr3{addrman->GetAddr(/*max_addresses=*/0, /*max_pct=*/0, /*network=*/std::nullopt)};
|
||||
BOOST_CHECK_EQUAL(vAddr3.size(), 1U);
|
||||
BOOST_CHECK_EQUAL(vAddr3.at(0).nServices, NODE_P2P_V2 | NODE_NETWORK_LIMITED);
|
||||
|
||||
// SetServices() (used when we connected to them) overwrites existing service flags
|
||||
addrman->SetServices(addr, NODE_NETWORK);
|
||||
std::vector<CAddress> vAddr4{addrman->GetAddr(/*max_addresses=*/0, /*max_pct=*/0, /*network=*/std::nullopt)};
|
||||
BOOST_CHECK_EQUAL(vAddr4.size(), 1U);
|
||||
BOOST_CHECK_EQUAL(vAddr4.at(0).nServices, NODE_NETWORK);
|
||||
|
||||
// Promoting to Tried does not affect the service flags
|
||||
BOOST_CHECK(addrman->Good(addr)); // addr has NODE_NONE
|
||||
std::vector<CAddress> vAddr5{addrman->GetAddr(/*max_addresses=*/0, /*max_pct=*/0, /*network=*/std::nullopt)};
|
||||
BOOST_CHECK_EQUAL(vAddr5.size(), 1U);
|
||||
BOOST_CHECK_EQUAL(vAddr5.at(0).nServices, NODE_NETWORK);
|
||||
|
||||
// Adding service flags even works when the addr is in Tried
|
||||
BOOST_CHECK(!addrman->Add({addr_v2}, source));
|
||||
std::vector<CAddress> vAddr6{addrman->GetAddr(/*max_addresses=*/0, /*max_pct=*/0, /*network=*/std::nullopt)};
|
||||
BOOST_CHECK_EQUAL(vAddr6.size(), 1U);
|
||||
BOOST_CHECK_EQUAL(vAddr6.at(0).nServices, NODE_NETWORK | NODE_P2P_V2);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(addrman_size)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue