Changeset View
Changeset View
Standalone View
Standalone View
src/test/addrman_tests.cpp
Show First 20 Lines • Show All 372 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
BOOST_AUTO_TEST_CASE(addrman_getaddr) { | BOOST_AUTO_TEST_CASE(addrman_getaddr) { | ||||
CAddrManTest addrman; | CAddrManTest addrman; | ||||
// Test: Sanity check, GetAddr should never return anything if addrman | // Test: Sanity check, GetAddr should never return anything if addrman | ||||
// is empty. | // is empty. | ||||
BOOST_CHECK_EQUAL(addrman.size(), 0U); | BOOST_CHECK_EQUAL(addrman.size(), 0U); | ||||
std::vector<CAddress> vAddr1 = addrman.GetAddr(); | std::vector<CAddress> vAddr1 = | ||||
addrman.GetAddr(/* max_addresses */ 0, /* max_pct */ 0); | |||||
BOOST_CHECK_EQUAL(vAddr1.size(), 0U); | BOOST_CHECK_EQUAL(vAddr1.size(), 0U); | ||||
CAddress addr1 = CAddress(ResolveService("250.250.2.1", 8333), NODE_NONE); | CAddress addr1 = CAddress(ResolveService("250.250.2.1", 8333), NODE_NONE); | ||||
addr1.nTime = GetAdjustedTime(); // Set time so isTerrible = false | addr1.nTime = GetAdjustedTime(); // Set time so isTerrible = false | ||||
CAddress addr2 = CAddress(ResolveService("250.251.2.2", 9999), NODE_NONE); | CAddress addr2 = CAddress(ResolveService("250.251.2.2", 9999), NODE_NONE); | ||||
addr2.nTime = GetAdjustedTime(); | addr2.nTime = GetAdjustedTime(); | ||||
CAddress addr3 = CAddress(ResolveService("251.252.2.3", 8333), NODE_NONE); | CAddress addr3 = CAddress(ResolveService("251.252.2.3", 8333), NODE_NONE); | ||||
addr3.nTime = GetAdjustedTime(); | addr3.nTime = GetAdjustedTime(); | ||||
CAddress addr4 = CAddress(ResolveService("252.253.3.4", 8333), NODE_NONE); | CAddress addr4 = CAddress(ResolveService("252.253.3.4", 8333), NODE_NONE); | ||||
addr4.nTime = GetAdjustedTime(); | addr4.nTime = GetAdjustedTime(); | ||||
CAddress addr5 = CAddress(ResolveService("252.254.4.5", 8333), NODE_NONE); | CAddress addr5 = CAddress(ResolveService("252.254.4.5", 8333), NODE_NONE); | ||||
addr5.nTime = GetAdjustedTime(); | addr5.nTime = GetAdjustedTime(); | ||||
CNetAddr source1 = ResolveIP("250.1.2.1"); | CNetAddr source1 = ResolveIP("250.1.2.1"); | ||||
CNetAddr source2 = ResolveIP("250.2.3.3"); | CNetAddr source2 = ResolveIP("250.2.3.3"); | ||||
// Test: Ensure GetAddr works with new addresses. | // Test: Ensure GetAddr works with new addresses. | ||||
BOOST_CHECK(addrman.Add(addr1, source1)); | BOOST_CHECK(addrman.Add(addr1, source1)); | ||||
BOOST_CHECK(addrman.Add(addr2, source2)); | BOOST_CHECK(addrman.Add(addr2, source2)); | ||||
BOOST_CHECK(addrman.Add(addr3, source1)); | BOOST_CHECK(addrman.Add(addr3, source1)); | ||||
BOOST_CHECK(addrman.Add(addr4, source2)); | BOOST_CHECK(addrman.Add(addr4, source2)); | ||||
BOOST_CHECK(addrman.Add(addr5, source1)); | BOOST_CHECK(addrman.Add(addr5, source1)); | ||||
// GetAddr returns 23% of addresses, 23% of 5 is 1 rounded down. | BOOST_CHECK_EQUAL( | ||||
BOOST_CHECK_EQUAL(addrman.GetAddr().size(), 1U); | addrman.GetAddr(/* max_addresses */ 0, /* max_pct */ 0).size(), 5U); | ||||
// Net processing asks for 23% of addresses. 23% of 5 is 1 rounded down. | |||||
BOOST_CHECK_EQUAL( | |||||
addrman.GetAddr(/* max_addresses */ 2500, /* max_pct */ 23).size(), 1U); | |||||
// Test: Ensure GetAddr works with new and tried addresses. | // Test: Ensure GetAddr works with new and tried addresses. | ||||
addrman.Good(CAddress(addr1, NODE_NONE)); | addrman.Good(CAddress(addr1, NODE_NONE)); | ||||
addrman.Good(CAddress(addr2, NODE_NONE)); | addrman.Good(CAddress(addr2, NODE_NONE)); | ||||
BOOST_CHECK_EQUAL(addrman.GetAddr().size(), 1U); | BOOST_CHECK_EQUAL( | ||||
addrman.GetAddr(/* max_addresses */ 0, /* max_pct */ 0).size(), 5U); | |||||
BOOST_CHECK_EQUAL( | |||||
addrman.GetAddr(/* max_addresses */ 2500, /* max_pct */ 23).size(), 1U); | |||||
// Test: Ensure GetAddr still returns 23% when addrman has many addrs. | // Test: Ensure GetAddr still returns 23% when addrman has many addrs. | ||||
for (unsigned int i = 1; i < (8 * 256); i++) { | for (unsigned int i = 1; i < (8 * 256); i++) { | ||||
int octet1 = i % 256; | int octet1 = i % 256; | ||||
int octet2 = i >> 8 % 256; | int octet2 = i >> 8 % 256; | ||||
std::string strAddr = | std::string strAddr = | ||||
ToString(octet1) + "." + ToString(octet2) + ".1.23"; | ToString(octet1) + "." + ToString(octet2) + ".1.23"; | ||||
CAddress addr = CAddress(ResolveService(strAddr), NODE_NONE); | CAddress addr = CAddress(ResolveService(strAddr), NODE_NONE); | ||||
// Ensure that for all addrs in addrman, isTerrible == false. | // Ensure that for all addrs in addrman, isTerrible == false. | ||||
addr.nTime = GetAdjustedTime(); | addr.nTime = GetAdjustedTime(); | ||||
addrman.Add(addr, ResolveIP(strAddr)); | addrman.Add(addr, ResolveIP(strAddr)); | ||||
if (i % 8 == 0) { | if (i % 8 == 0) { | ||||
addrman.Good(addr); | addrman.Good(addr); | ||||
} | } | ||||
} | } | ||||
std::vector<CAddress> vAddr = addrman.GetAddr(); | std::vector<CAddress> vAddr = | ||||
addrman.GetAddr(/* max_addresses */ 2500, /* max_pct */ 23); | |||||
size_t percent23 = (addrman.size() * 23) / 100; | size_t percent23 = (addrman.size() * 23) / 100; | ||||
BOOST_CHECK_EQUAL(vAddr.size(), percent23); | BOOST_CHECK_EQUAL(vAddr.size(), percent23); | ||||
BOOST_CHECK_EQUAL(vAddr.size(), 461U); | BOOST_CHECK_EQUAL(vAddr.size(), 461U); | ||||
// (Addrman.size() < number of addresses added) due to address collisions. | // (Addrman.size() < number of addresses added) due to address collisions. | ||||
BOOST_CHECK_EQUAL(addrman.size(), 2006U); | BOOST_CHECK_EQUAL(addrman.size(), 2006U); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 492 Lines • Show Last 20 Lines |