Changeset View
Changeset View
Standalone View
Standalone View
src/test/addrman_tests.cpp
Show First 20 Lines • Show All 86 Lines • ▼ Show 20 Lines | |||||
BOOST_FIXTURE_TEST_SUITE(addrman_tests, BasicTestingSetup) | BOOST_FIXTURE_TEST_SUITE(addrman_tests, BasicTestingSetup) | ||||
BOOST_AUTO_TEST_CASE(addrman_simple) { | BOOST_AUTO_TEST_CASE(addrman_simple) { | ||||
CAddrManTest addrman; | CAddrManTest addrman; | ||||
CNetAddr source = ResolveIP("252.2.2.2"); | CNetAddr source = ResolveIP("252.2.2.2"); | ||||
// Test: Does Addrman respond correctly when empty. | // Test: Does Addrman respond correctly when empty. | ||||
BOOST_CHECK_EQUAL(addrman.size(), 0); | BOOST_CHECK_EQUAL(addrman.size(), 0U); | ||||
CAddrInfo addr_null = addrman.Select(); | CAddrInfo addr_null = addrman.Select(); | ||||
BOOST_CHECK_EQUAL(addr_null.ToString(), "[::]:0"); | BOOST_CHECK_EQUAL(addr_null.ToString(), "[::]:0"); | ||||
// Test: Does Addrman::Add work as expected. | // Test: Does Addrman::Add work as expected. | ||||
CService addr1 = ResolveService("250.1.1.1", 8333); | CService addr1 = ResolveService("250.1.1.1", 8333); | ||||
BOOST_CHECK(addrman.Add(CAddress(addr1, NODE_NONE), source)); | BOOST_CHECK(addrman.Add(CAddress(addr1, NODE_NONE), source)); | ||||
BOOST_CHECK_EQUAL(addrman.size(), 1); | BOOST_CHECK_EQUAL(addrman.size(), 1U); | ||||
CAddrInfo addr_ret1 = addrman.Select(); | CAddrInfo addr_ret1 = addrman.Select(); | ||||
BOOST_CHECK_EQUAL(addr_ret1.ToString(), "250.1.1.1:8333"); | BOOST_CHECK_EQUAL(addr_ret1.ToString(), "250.1.1.1:8333"); | ||||
// Test: Does IP address deduplication work correctly. | // Test: Does IP address deduplication work correctly. | ||||
// Expected dup IP should not be added. | // Expected dup IP should not be added. | ||||
CService addr1_dup = ResolveService("250.1.1.1", 8333); | CService addr1_dup = ResolveService("250.1.1.1", 8333); | ||||
BOOST_CHECK(!addrman.Add(CAddress(addr1_dup, NODE_NONE), source)); | BOOST_CHECK(!addrman.Add(CAddress(addr1_dup, NODE_NONE), source)); | ||||
BOOST_CHECK_EQUAL(addrman.size(), 1); | BOOST_CHECK_EQUAL(addrman.size(), 1U); | ||||
// Test: New table has one addr and we add a diff addr we should | // Test: New table has one addr and we add a diff addr we should | ||||
// have at least one addr. | // have at least one addr. | ||||
// Note that addrman's size cannot be tested reliably after insertion, as | // Note that addrman's size cannot be tested reliably after insertion, as | ||||
// hash collisions may occur. But we can always be sure of at least one | // hash collisions may occur. But we can always be sure of at least one | ||||
// success. | // success. | ||||
CService addr2 = ResolveService("250.1.1.2", 8333); | CService addr2 = ResolveService("250.1.1.2", 8333); | ||||
BOOST_CHECK(addrman.Add(CAddress(addr2, NODE_NONE), source)); | BOOST_CHECK(addrman.Add(CAddress(addr2, NODE_NONE), source)); | ||||
BOOST_CHECK(addrman.size() >= 1); | BOOST_CHECK(addrman.size() >= 1); | ||||
// Test: AddrMan::Clear() should empty the new table. | // Test: AddrMan::Clear() should empty the new table. | ||||
addrman.Clear(); | addrman.Clear(); | ||||
BOOST_CHECK_EQUAL(addrman.size(), 0); | BOOST_CHECK_EQUAL(addrman.size(), 0U); | ||||
CAddrInfo addr_null2 = addrman.Select(); | CAddrInfo addr_null2 = addrman.Select(); | ||||
BOOST_CHECK_EQUAL(addr_null2.ToString(), "[::]:0"); | BOOST_CHECK_EQUAL(addr_null2.ToString(), "[::]:0"); | ||||
// Test: AddrMan::Add multiple addresses works as expected | // Test: AddrMan::Add multiple addresses works as expected | ||||
std::vector<CAddress> vAddr; | std::vector<CAddress> vAddr; | ||||
vAddr.push_back(CAddress(ResolveService("250.1.1.3", 8333), NODE_NONE)); | vAddr.push_back(CAddress(ResolveService("250.1.1.3", 8333), NODE_NONE)); | ||||
vAddr.push_back(CAddress(ResolveService("250.1.1.4", 8333), NODE_NONE)); | vAddr.push_back(CAddress(ResolveService("250.1.1.4", 8333), NODE_NONE)); | ||||
BOOST_CHECK(addrman.Add(vAddr, source)); | BOOST_CHECK(addrman.Add(vAddr, source)); | ||||
BOOST_CHECK(addrman.size() >= 1); | BOOST_CHECK(addrman.size() >= 1); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(addrman_ports) { | BOOST_AUTO_TEST_CASE(addrman_ports) { | ||||
CAddrManTest addrman; | CAddrManTest addrman; | ||||
CNetAddr source = ResolveIP("252.2.2.2"); | CNetAddr source = ResolveIP("252.2.2.2"); | ||||
BOOST_CHECK_EQUAL(addrman.size(), 0); | BOOST_CHECK_EQUAL(addrman.size(), 0U); | ||||
// Test: Addr with same IP but diff port does not replace existing addr. | // Test: Addr with same IP but diff port does not replace existing addr. | ||||
CService addr1 = ResolveService("250.1.1.1", 8333); | CService addr1 = ResolveService("250.1.1.1", 8333); | ||||
addrman.Add(CAddress(addr1, NODE_NONE), source); | addrman.Add(CAddress(addr1, NODE_NONE), source); | ||||
BOOST_CHECK_EQUAL(addrman.size(), 1); | BOOST_CHECK_EQUAL(addrman.size(), 1U); | ||||
CService addr1_port = ResolveService("250.1.1.1", 8334); | CService addr1_port = ResolveService("250.1.1.1", 8334); | ||||
addrman.Add(CAddress(addr1_port, NODE_NONE), source); | addrman.Add(CAddress(addr1_port, NODE_NONE), source); | ||||
BOOST_CHECK_EQUAL(addrman.size(), 1); | BOOST_CHECK_EQUAL(addrman.size(), 1U); | ||||
CAddrInfo addr_ret2 = addrman.Select(); | CAddrInfo addr_ret2 = addrman.Select(); | ||||
BOOST_CHECK_EQUAL(addr_ret2.ToString(), "250.1.1.1:8333"); | BOOST_CHECK_EQUAL(addr_ret2.ToString(), "250.1.1.1:8333"); | ||||
// Test: Add same IP but diff port to tried table, it doesn't get added. | // Test: Add same IP but diff port to tried table, it doesn't get added. | ||||
// Perhaps this is not ideal behavior but it is the current behavior. | // Perhaps this is not ideal behavior but it is the current behavior. | ||||
addrman.Good(CAddress(addr1_port, NODE_NONE)); | addrman.Good(CAddress(addr1_port, NODE_NONE)); | ||||
BOOST_CHECK_EQUAL(addrman.size(), 1); | BOOST_CHECK_EQUAL(addrman.size(), 1U); | ||||
bool newOnly = true; | bool newOnly = true; | ||||
CAddrInfo addr_ret3 = addrman.Select(newOnly); | CAddrInfo addr_ret3 = addrman.Select(newOnly); | ||||
BOOST_CHECK_EQUAL(addr_ret3.ToString(), "250.1.1.1:8333"); | BOOST_CHECK_EQUAL(addr_ret3.ToString(), "250.1.1.1:8333"); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(addrman_select) { | BOOST_AUTO_TEST_CASE(addrman_select) { | ||||
CAddrManTest addrman; | CAddrManTest addrman; | ||||
CNetAddr source = ResolveIP("252.2.2.2"); | CNetAddr source = ResolveIP("252.2.2.2"); | ||||
// Test: Select from new with 1 addr in new. | // Test: Select from new with 1 addr in new. | ||||
CService addr1 = ResolveService("250.1.1.1", 8333); | CService addr1 = ResolveService("250.1.1.1", 8333); | ||||
addrman.Add(CAddress(addr1, NODE_NONE), source); | addrman.Add(CAddress(addr1, NODE_NONE), source); | ||||
BOOST_CHECK_EQUAL(addrman.size(), 1); | BOOST_CHECK_EQUAL(addrman.size(), 1U); | ||||
bool newOnly = true; | bool newOnly = true; | ||||
CAddrInfo addr_ret1 = addrman.Select(newOnly); | CAddrInfo addr_ret1 = addrman.Select(newOnly); | ||||
BOOST_CHECK_EQUAL(addr_ret1.ToString(), "250.1.1.1:8333"); | BOOST_CHECK_EQUAL(addr_ret1.ToString(), "250.1.1.1:8333"); | ||||
// Test: move addr to tried, select from new expected nothing returned. | // Test: move addr to tried, select from new expected nothing returned. | ||||
addrman.Good(CAddress(addr1, NODE_NONE)); | addrman.Good(CAddress(addr1, NODE_NONE)); | ||||
BOOST_CHECK_EQUAL(addrman.size(), 1); | BOOST_CHECK_EQUAL(addrman.size(), 1U); | ||||
CAddrInfo addr_ret2 = addrman.Select(newOnly); | CAddrInfo addr_ret2 = addrman.Select(newOnly); | ||||
BOOST_CHECK_EQUAL(addr_ret2.ToString(), "[::]:0"); | BOOST_CHECK_EQUAL(addr_ret2.ToString(), "[::]:0"); | ||||
CAddrInfo addr_ret3 = addrman.Select(); | CAddrInfo addr_ret3 = addrman.Select(); | ||||
BOOST_CHECK_EQUAL(addr_ret3.ToString(), "250.1.1.1:8333"); | BOOST_CHECK_EQUAL(addr_ret3.ToString(), "250.1.1.1:8333"); | ||||
BOOST_CHECK_EQUAL(addrman.size(), 1); | BOOST_CHECK_EQUAL(addrman.size(), 1U); | ||||
// Add three addresses to new table. | // Add three addresses to new table. | ||||
CService addr2 = ResolveService("250.3.1.1", 8333); | CService addr2 = ResolveService("250.3.1.1", 8333); | ||||
CService addr3 = ResolveService("250.3.2.2", 9999); | CService addr3 = ResolveService("250.3.2.2", 9999); | ||||
CService addr4 = ResolveService("250.3.3.3", 9999); | CService addr4 = ResolveService("250.3.3.3", 9999); | ||||
addrman.Add(CAddress(addr2, NODE_NONE), ResolveService("250.3.1.1", 8333)); | addrman.Add(CAddress(addr2, NODE_NONE), ResolveService("250.3.1.1", 8333)); | ||||
addrman.Add(CAddress(addr3, NODE_NONE), ResolveService("250.3.1.1", 8333)); | addrman.Add(CAddress(addr3, NODE_NONE), ResolveService("250.3.1.1", 8333)); | ||||
addrman.Add(CAddress(addr4, NODE_NONE), ResolveService("250.4.1.1", 8333)); | addrman.Add(CAddress(addr4, NODE_NONE), ResolveService("250.4.1.1", 8333)); | ||||
// Add three addresses to tried table. | // Add three addresses to tried table. | ||||
CService addr5 = ResolveService("250.4.4.4", 8333); | CService addr5 = ResolveService("250.4.4.4", 8333); | ||||
CService addr6 = ResolveService("250.4.5.5", 7777); | CService addr6 = ResolveService("250.4.5.5", 7777); | ||||
CService addr7 = ResolveService("250.4.6.6", 8333); | CService addr7 = ResolveService("250.4.6.6", 8333); | ||||
addrman.Add(CAddress(addr5, NODE_NONE), ResolveService("250.3.1.1", 8333)); | addrman.Add(CAddress(addr5, NODE_NONE), ResolveService("250.3.1.1", 8333)); | ||||
addrman.Good(CAddress(addr5, NODE_NONE)); | addrman.Good(CAddress(addr5, NODE_NONE)); | ||||
addrman.Add(CAddress(addr6, NODE_NONE), ResolveService("250.3.1.1", 8333)); | addrman.Add(CAddress(addr6, NODE_NONE), ResolveService("250.3.1.1", 8333)); | ||||
addrman.Good(CAddress(addr6, NODE_NONE)); | addrman.Good(CAddress(addr6, NODE_NONE)); | ||||
addrman.Add(CAddress(addr7, NODE_NONE), ResolveService("250.1.1.3", 8333)); | addrman.Add(CAddress(addr7, NODE_NONE), ResolveService("250.1.1.3", 8333)); | ||||
addrman.Good(CAddress(addr7, NODE_NONE)); | addrman.Good(CAddress(addr7, NODE_NONE)); | ||||
// Test: 6 addrs + 1 addr from last test = 7. | // Test: 6 addrs + 1 addr from last test = 7. | ||||
BOOST_CHECK_EQUAL(addrman.size(), 7); | BOOST_CHECK_EQUAL(addrman.size(), 7U); | ||||
// Test: Select pulls from new and tried regardless of port number. | // Test: Select pulls from new and tried regardless of port number. | ||||
std::set<uint16_t> ports; | std::set<uint16_t> ports; | ||||
for (int i = 0; i < 20; ++i) { | for (int i = 0; i < 20; ++i) { | ||||
ports.insert(addrman.Select().GetPort()); | ports.insert(addrman.Select().GetPort()); | ||||
} | } | ||||
BOOST_CHECK_EQUAL(ports.size(), 3); | BOOST_CHECK_EQUAL(ports.size(), 3U); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(addrman_new_collisions) { | BOOST_AUTO_TEST_CASE(addrman_new_collisions) { | ||||
CAddrManTest addrman; | CAddrManTest addrman; | ||||
CNetAddr source = ResolveIP("252.2.2.2"); | CNetAddr source = ResolveIP("252.2.2.2"); | ||||
BOOST_CHECK_EQUAL(addrman.size(), 0); | BOOST_CHECK_EQUAL(addrman.size(), 0U); | ||||
for (unsigned int i = 1; i < 18; i++) { | for (unsigned int i = 1; i < 18; i++) { | ||||
CService addr = ResolveService("250.1.1." + std::to_string(i)); | CService addr = ResolveService("250.1.1." + std::to_string(i)); | ||||
addrman.Add(CAddress(addr, NODE_NONE), source); | addrman.Add(CAddress(addr, NODE_NONE), source); | ||||
// Test: No collision in new table yet. | // Test: No collision in new table yet. | ||||
BOOST_CHECK_EQUAL(addrman.size(), i); | BOOST_CHECK_EQUAL(addrman.size(), i); | ||||
} | } | ||||
// Test: new table collision! | // Test: new table collision! | ||||
CService addr1 = ResolveService("250.1.1.18"); | CService addr1 = ResolveService("250.1.1.18"); | ||||
addrman.Add(CAddress(addr1, NODE_NONE), source); | addrman.Add(CAddress(addr1, NODE_NONE), source); | ||||
BOOST_CHECK_EQUAL(addrman.size(), 17); | BOOST_CHECK_EQUAL(addrman.size(), 17U); | ||||
CService addr2 = ResolveService("250.1.1.19"); | CService addr2 = ResolveService("250.1.1.19"); | ||||
addrman.Add(CAddress(addr2, NODE_NONE), source); | addrman.Add(CAddress(addr2, NODE_NONE), source); | ||||
BOOST_CHECK_EQUAL(addrman.size(), 18); | BOOST_CHECK_EQUAL(addrman.size(), 18U); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(addrman_tried_collisions) { | BOOST_AUTO_TEST_CASE(addrman_tried_collisions) { | ||||
CAddrManTest addrman; | CAddrManTest addrman; | ||||
CNetAddr source = ResolveIP("252.2.2.2"); | CNetAddr source = ResolveIP("252.2.2.2"); | ||||
BOOST_CHECK_EQUAL(addrman.size(), 0); | BOOST_CHECK_EQUAL(addrman.size(), 0U); | ||||
for (unsigned int i = 1; i < 80; i++) { | for (unsigned int i = 1; i < 80; i++) { | ||||
CService addr = ResolveService("250.1.1." + std::to_string(i)); | CService addr = ResolveService("250.1.1." + std::to_string(i)); | ||||
addrman.Add(CAddress(addr, NODE_NONE), source); | addrman.Add(CAddress(addr, NODE_NONE), source); | ||||
addrman.Good(CAddress(addr, NODE_NONE)); | addrman.Good(CAddress(addr, NODE_NONE)); | ||||
// Test: No collision in tried table yet. | // Test: No collision in tried table yet. | ||||
BOOST_CHECK_EQUAL(addrman.size(), i); | BOOST_CHECK_EQUAL(addrman.size(), i); | ||||
} | } | ||||
// Test: tried table collision! | // Test: tried table collision! | ||||
CService addr1 = ResolveService("250.1.1.80"); | CService addr1 = ResolveService("250.1.1.80"); | ||||
addrman.Add(CAddress(addr1, NODE_NONE), source); | addrman.Add(CAddress(addr1, NODE_NONE), source); | ||||
BOOST_CHECK_EQUAL(addrman.size(), 79); | BOOST_CHECK_EQUAL(addrman.size(), 79U); | ||||
CService addr2 = ResolveService("250.1.1.81"); | CService addr2 = ResolveService("250.1.1.81"); | ||||
addrman.Add(CAddress(addr2, NODE_NONE), source); | addrman.Add(CAddress(addr2, NODE_NONE), source); | ||||
BOOST_CHECK_EQUAL(addrman.size(), 80); | BOOST_CHECK_EQUAL(addrman.size(), 80U); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(addrman_find) { | BOOST_AUTO_TEST_CASE(addrman_find) { | ||||
CAddrManTest addrman; | CAddrManTest addrman; | ||||
BOOST_CHECK_EQUAL(addrman.size(), 0); | BOOST_CHECK_EQUAL(addrman.size(), 0U); | ||||
CAddress addr1 = CAddress(ResolveService("250.1.2.1", 8333), NODE_NONE); | CAddress addr1 = CAddress(ResolveService("250.1.2.1", 8333), NODE_NONE); | ||||
CAddress addr2 = CAddress(ResolveService("250.1.2.1", 9999), NODE_NONE); | CAddress addr2 = CAddress(ResolveService("250.1.2.1", 9999), NODE_NONE); | ||||
CAddress addr3 = CAddress(ResolveService("251.255.2.1", 8333), NODE_NONE); | CAddress addr3 = CAddress(ResolveService("251.255.2.1", 8333), NODE_NONE); | ||||
CNetAddr source1 = ResolveIP("250.1.2.1"); | CNetAddr source1 = ResolveIP("250.1.2.1"); | ||||
CNetAddr source2 = ResolveIP("250.1.2.2"); | CNetAddr source2 = ResolveIP("250.1.2.2"); | ||||
Show All 15 Lines | BOOST_AUTO_TEST_CASE(addrman_find) { | ||||
CAddrInfo *info3 = addrman.Find(addr3); | CAddrInfo *info3 = addrman.Find(addr3); | ||||
BOOST_REQUIRE(info3); | BOOST_REQUIRE(info3); | ||||
BOOST_CHECK_EQUAL(info3->ToString(), "251.255.2.1:8333"); | BOOST_CHECK_EQUAL(info3->ToString(), "251.255.2.1:8333"); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(addrman_create) { | BOOST_AUTO_TEST_CASE(addrman_create) { | ||||
CAddrManTest addrman; | CAddrManTest addrman; | ||||
BOOST_CHECK_EQUAL(addrman.size(), 0); | BOOST_CHECK_EQUAL(addrman.size(), 0U); | ||||
CAddress addr1 = CAddress(ResolveService("250.1.2.1", 8333), NODE_NONE); | CAddress addr1 = CAddress(ResolveService("250.1.2.1", 8333), NODE_NONE); | ||||
CNetAddr source1 = ResolveIP("250.1.2.1"); | CNetAddr source1 = ResolveIP("250.1.2.1"); | ||||
int nId; | int nId; | ||||
CAddrInfo *pinfo = addrman.Create(addr1, source1, &nId); | CAddrInfo *pinfo = addrman.Create(addr1, source1, &nId); | ||||
// Test: The result should be the same as the input addr. | // Test: The result should be the same as the input addr. | ||||
BOOST_CHECK_EQUAL(pinfo->ToString(), "250.1.2.1:8333"); | BOOST_CHECK_EQUAL(pinfo->ToString(), "250.1.2.1:8333"); | ||||
CAddrInfo *info2 = addrman.Find(addr1); | CAddrInfo *info2 = addrman.Find(addr1); | ||||
BOOST_CHECK_EQUAL(info2->ToString(), "250.1.2.1:8333"); | BOOST_CHECK_EQUAL(info2->ToString(), "250.1.2.1:8333"); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(addrman_delete) { | BOOST_AUTO_TEST_CASE(addrman_delete) { | ||||
CAddrManTest addrman; | CAddrManTest addrman; | ||||
BOOST_CHECK_EQUAL(addrman.size(), 0); | BOOST_CHECK_EQUAL(addrman.size(), 0U); | ||||
CAddress addr1 = CAddress(ResolveService("250.1.2.1", 8333), NODE_NONE); | CAddress addr1 = CAddress(ResolveService("250.1.2.1", 8333), NODE_NONE); | ||||
CNetAddr source1 = ResolveIP("250.1.2.1"); | CNetAddr source1 = ResolveIP("250.1.2.1"); | ||||
int nId; | int nId; | ||||
addrman.Create(addr1, source1, &nId); | addrman.Create(addr1, source1, &nId); | ||||
// Test: Delete should actually delete the addr. | // Test: Delete should actually delete the addr. | ||||
BOOST_CHECK_EQUAL(addrman.size(), 1); | BOOST_CHECK_EQUAL(addrman.size(), 1U); | ||||
addrman.Delete(nId); | addrman.Delete(nId); | ||||
BOOST_CHECK_EQUAL(addrman.size(), 0); | BOOST_CHECK_EQUAL(addrman.size(), 0U); | ||||
CAddrInfo *info2 = addrman.Find(addr1); | CAddrInfo *info2 = addrman.Find(addr1); | ||||
BOOST_CHECK(info2 == nullptr); | BOOST_CHECK(info2 == nullptr); | ||||
} | } | ||||
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(), 0); | BOOST_CHECK_EQUAL(addrman.size(), 0U); | ||||
std::vector<CAddress> vAddr1 = addrman.GetAddr(); | std::vector<CAddress> vAddr1 = addrman.GetAddr(); | ||||
BOOST_CHECK_EQUAL(vAddr1.size(), 0); | 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. | ||||
addrman.Add(addr1, source1); | addrman.Add(addr1, source1); | ||||
addrman.Add(addr2, source2); | addrman.Add(addr2, source2); | ||||
addrman.Add(addr3, source1); | addrman.Add(addr3, source1); | ||||
addrman.Add(addr4, source2); | addrman.Add(addr4, source2); | ||||
addrman.Add(addr5, source1); | addrman.Add(addr5, source1); | ||||
// GetAddr returns 23% of addresses, 23% of 5 is 1 rounded down. | // GetAddr returns 23% of addresses, 23% of 5 is 1 rounded down. | ||||
BOOST_CHECK_EQUAL(addrman.GetAddr().size(), 1); | BOOST_CHECK_EQUAL(addrman.GetAddr().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(), 1); | BOOST_CHECK_EQUAL(addrman.GetAddr().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 = | ||||
std::to_string(octet1) + "." + std::to_string(octet2) + ".1.23"; | std::to_string(octet1) + "." + std::to_string(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) addrman.Good(addr); | if (i % 8 == 0) addrman.Good(addr); | ||||
} | } | ||||
std::vector<CAddress> vAddr = addrman.GetAddr(); | std::vector<CAddress> vAddr = addrman.GetAddr(); | ||||
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(), 461); | 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(), 2006); | BOOST_CHECK_EQUAL(addrman.size(), 2006U); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(caddrinfo_get_tried_bucket) { | BOOST_AUTO_TEST_CASE(caddrinfo_get_tried_bucket) { | ||||
CAddrManTest addrman; | CAddrManTest addrman; | ||||
CAddress addr1 = CAddress(ResolveService("250.1.1.1", 8333), NODE_NONE); | CAddress addr1 = CAddress(ResolveService("250.1.1.1", 8333), NODE_NONE); | ||||
CAddress addr2 = CAddress(ResolveService("250.1.1.1", 9999), NODE_NONE); | CAddress addr2 = CAddress(ResolveService("250.1.1.1", 9999), NODE_NONE); | ||||
Show All 22 Lines | for (int i = 0; i < 255; i++) { | ||||
CAddrInfo infoi = CAddrInfo( | CAddrInfo infoi = CAddrInfo( | ||||
CAddress(ResolveService("250.1.1." + std::to_string(i)), NODE_NONE), | CAddress(ResolveService("250.1.1." + std::to_string(i)), NODE_NONE), | ||||
ResolveIP("250.1.1." + std::to_string(i))); | ResolveIP("250.1.1." + std::to_string(i))); | ||||
int bucket = infoi.GetTriedBucket(nKey1); | int bucket = infoi.GetTriedBucket(nKey1); | ||||
buckets.insert(bucket); | buckets.insert(bucket); | ||||
} | } | ||||
// Test: IP addresses in the same group (\16 prefix for IPv4) should | // Test: IP addresses in the same group (\16 prefix for IPv4) should | ||||
// never get more than 8 buckets | // never get more than 8 buckets | ||||
BOOST_CHECK_EQUAL(buckets.size(), 8); | BOOST_CHECK_EQUAL(buckets.size(), 8U); | ||||
buckets.clear(); | buckets.clear(); | ||||
for (int j = 0; j < 255; j++) { | for (int j = 0; j < 255; j++) { | ||||
CAddrInfo infoj = CAddrInfo( | CAddrInfo infoj = CAddrInfo( | ||||
CAddress(ResolveService("250." + std::to_string(j) + ".1.1"), | CAddress(ResolveService("250." + std::to_string(j) + ".1.1"), | ||||
NODE_NONE), | NODE_NONE), | ||||
ResolveIP("250." + std::to_string(j) + ".1.1")); | ResolveIP("250." + std::to_string(j) + ".1.1")); | ||||
int bucket = infoj.GetTriedBucket(nKey1); | int bucket = infoj.GetTriedBucket(nKey1); | ||||
buckets.insert(bucket); | buckets.insert(bucket); | ||||
} | } | ||||
// Test: IP addresses in the different groups should map to more than | // Test: IP addresses in the different groups should map to more than | ||||
// 8 buckets. | // 8 buckets. | ||||
BOOST_CHECK_EQUAL(buckets.size(), 160); | BOOST_CHECK_EQUAL(buckets.size(), 160U); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(caddrinfo_get_new_bucket) { | BOOST_AUTO_TEST_CASE(caddrinfo_get_new_bucket) { | ||||
CAddrManTest addrman; | CAddrManTest addrman; | ||||
CAddress addr1 = CAddress(ResolveService("250.1.2.1", 8333), NODE_NONE); | CAddress addr1 = CAddress(ResolveService("250.1.2.1", 8333), NODE_NONE); | ||||
CAddress addr2 = CAddress(ResolveService("250.1.2.1", 9999), NODE_NONE); | CAddress addr2 = CAddress(ResolveService("250.1.2.1", 9999), NODE_NONE); | ||||
Show All 22 Lines | for (int i = 0; i < 255; i++) { | ||||
CAddrInfo infoi = CAddrInfo( | CAddrInfo infoi = CAddrInfo( | ||||
CAddress(ResolveService("250.1.1." + std::to_string(i)), NODE_NONE), | CAddress(ResolveService("250.1.1." + std::to_string(i)), NODE_NONE), | ||||
ResolveIP("250.1.1." + std::to_string(i))); | ResolveIP("250.1.1." + std::to_string(i))); | ||||
int bucket = infoi.GetNewBucket(nKey1); | int bucket = infoi.GetNewBucket(nKey1); | ||||
buckets.insert(bucket); | buckets.insert(bucket); | ||||
} | } | ||||
// Test: IP addresses in the same group (\16 prefix for IPv4) should | // Test: IP addresses in the same group (\16 prefix for IPv4) should | ||||
// always map to the same bucket. | // always map to the same bucket. | ||||
BOOST_CHECK_EQUAL(buckets.size(), 1); | BOOST_CHECK_EQUAL(buckets.size(), 1U); | ||||
buckets.clear(); | buckets.clear(); | ||||
for (int j = 0; j < 4 * 255; j++) { | for (int j = 0; j < 4 * 255; j++) { | ||||
CAddrInfo infoj = CAddrInfo( | CAddrInfo infoj = CAddrInfo( | ||||
CAddress(ResolveService(std::to_string(250 + (j / 255)) + "." + | CAddress(ResolveService(std::to_string(250 + (j / 255)) + "." + | ||||
std::to_string(j % 256) + ".1.1"), | std::to_string(j % 256) + ".1.1"), | ||||
NODE_NONE), | NODE_NONE), | ||||
ResolveIP("251.4.1.1")); | ResolveIP("251.4.1.1")); | ||||
▲ Show 20 Lines • Show All 159 Lines • Show Last 20 Lines |