mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-10 20:03:34 -03:00
test: Add test for multiplicity in addrman new tables
This commit is contained in:
parent
e880bb7836
commit
4f1bb467b5
1 changed files with 32 additions and 0 deletions
|
@ -218,6 +218,38 @@ BOOST_AUTO_TEST_CASE(addrman_new_collisions)
|
||||||
BOOST_CHECK_EQUAL(addrman->size(), num_addrs - collisions);
|
BOOST_CHECK_EQUAL(addrman->size(), num_addrs - collisions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(addrman_new_multiplicity)
|
||||||
|
{
|
||||||
|
auto addrman = TestAddrMan();
|
||||||
|
CAddress addr{CAddress(ResolveService("253.3.3.3", 8333), NODE_NONE)};
|
||||||
|
int64_t start_time{GetAdjustedTime()};
|
||||||
|
addr.nTime = start_time;
|
||||||
|
|
||||||
|
// test that multiplicity stays at 1 if nTime doesn't increase
|
||||||
|
for (unsigned int i = 1; i < 20; ++i) {
|
||||||
|
std::string addr_ip{ToString(i % 256) + "." + ToString(i >> 8 % 256) + ".1.1"};
|
||||||
|
CNetAddr source{ResolveIP(addr_ip)};
|
||||||
|
addrman->Add({addr}, source);
|
||||||
|
}
|
||||||
|
AddressPosition addr_pos = addrman->FindAddressEntry(addr).value();
|
||||||
|
BOOST_CHECK_EQUAL(addr_pos.multiplicity, 1U);
|
||||||
|
BOOST_CHECK_EQUAL(addrman->size(), 1U);
|
||||||
|
|
||||||
|
// if nTime increases, an addr can occur in up to 8 buckets
|
||||||
|
// The acceptance probability decreases exponentially with existing multiplicity -
|
||||||
|
// choose number of iterations such that it gets to 8 with deterministic addrman.
|
||||||
|
for (unsigned int i = 1; i < 400; ++i) {
|
||||||
|
std::string addr_ip{ToString(i % 256) + "." + ToString(i >> 8 % 256) + ".1.1"};
|
||||||
|
CNetAddr source{ResolveIP(addr_ip)};
|
||||||
|
addr.nTime = start_time + i;
|
||||||
|
addrman->Add({addr}, source);
|
||||||
|
}
|
||||||
|
AddressPosition addr_pos_multi = addrman->FindAddressEntry(addr).value();
|
||||||
|
BOOST_CHECK_EQUAL(addr_pos_multi.multiplicity, 8U);
|
||||||
|
// multiplicity doesn't affect size
|
||||||
|
BOOST_CHECK_EQUAL(addrman->size(), 1U);
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(addrman_tried_collisions)
|
BOOST_AUTO_TEST_CASE(addrman_tried_collisions)
|
||||||
{
|
{
|
||||||
auto addrman = TestAddrMan();
|
auto addrman = TestAddrMan();
|
||||||
|
|
Loading…
Reference in a new issue