Changeset View
Changeset View
Standalone View
Standalone View
src/test/addrman_tests.cpp
Show First 20 Lines • Show All 131 Lines • ▼ Show 20 Lines | 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(), 0U); | 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); | BOOST_CHECK(addrman.Add(CAddress(addr1, NODE_NONE), source)); | ||||
BOOST_CHECK_EQUAL(addrman.size(), 1U); | 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); | BOOST_CHECK(!addrman.Add(CAddress(addr1_port, NODE_NONE), source)); | ||||
BOOST_CHECK_EQUAL(addrman.size(), 1U); | 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(), 1U); | 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); | BOOST_CHECK(addrman.Add(CAddress(addr1, NODE_NONE), source)); | ||||
BOOST_CHECK_EQUAL(addrman.size(), 1U); | 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(), 1U); | 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(), 1U); | 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)); | BOOST_CHECK(addrman.Add(CAddress(addr2, NODE_NONE), | ||||
addrman.Add(CAddress(addr3, NODE_NONE), ResolveService("250.3.1.1", 8333)); | ResolveService("250.3.1.1", 8333))); | ||||
addrman.Add(CAddress(addr4, NODE_NONE), ResolveService("250.4.1.1", 8333)); | BOOST_CHECK(addrman.Add(CAddress(addr3, NODE_NONE), | ||||
ResolveService("250.3.1.1", 8333))); | |||||
BOOST_CHECK(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)); | BOOST_CHECK(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)); | BOOST_CHECK(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)); | BOOST_CHECK(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(), 7U); | 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(), 3U); | 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(), 0U); | 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); | BOOST_CHECK(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); | BOOST_CHECK(addrman.Add(CAddress(addr1, NODE_NONE), source)); | ||||
BOOST_CHECK_EQUAL(addrman.size(), 17U); | 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); | BOOST_CHECK(addrman.Add(CAddress(addr2, NODE_NONE), source)); | ||||
BOOST_CHECK_EQUAL(addrman.size(), 18U); | 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(), 0U); | 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); | BOOST_CHECK(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); | BOOST_CHECK(addrman.Add(CAddress(addr1, NODE_NONE), source)); | ||||
BOOST_CHECK_EQUAL(addrman.size(), 79U); | 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); | BOOST_CHECK(addrman.Add(CAddress(addr2, NODE_NONE), source)); | ||||
BOOST_CHECK_EQUAL(addrman.size(), 80U); | 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(), 0U); | 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"); | ||||
addrman.Add(addr1, source1); | BOOST_CHECK(addrman.Add(addr1, source1)); | ||||
addrman.Add(addr2, source2); | BOOST_CHECK(!addrman.Add(addr2, source2)); | ||||
addrman.Add(addr3, source1); | BOOST_CHECK(addrman.Add(addr3, source1)); | ||||
// Test: ensure Find returns an IP matching what we searched on. | // Test: ensure Find returns an IP matching what we searched on. | ||||
CAddrInfo *info1 = addrman.Find(addr1); | CAddrInfo *info1 = addrman.Find(addr1); | ||||
BOOST_REQUIRE(info1); | BOOST_REQUIRE(info1); | ||||
BOOST_CHECK_EQUAL(info1->ToString(), "250.1.2.1:8333"); | BOOST_CHECK_EQUAL(info1->ToString(), "250.1.2.1:8333"); | ||||
// Test: Find does not discriminate by port number. | // Test: Find does not discriminate by port number. | ||||
CAddrInfo *info2 = addrman.Find(addr2); | CAddrInfo *info2 = addrman.Find(addr2); | ||||
▲ Show 20 Lines • Show All 61 Lines • ▼ Show 20 Lines | BOOST_AUTO_TEST_CASE(addrman_getaddr) { | ||||
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); | BOOST_CHECK(addrman.Add(addr1, source1)); | ||||
addrman.Add(addr2, source2); | BOOST_CHECK(addrman.Add(addr2, source2)); | ||||
addrman.Add(addr3, source1); | BOOST_CHECK(addrman.Add(addr3, source1)); | ||||
addrman.Add(addr4, source2); | BOOST_CHECK(addrman.Add(addr4, source2)); | ||||
addrman.Add(addr5, source1); | BOOST_CHECK(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(), 1U); | 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(), 1U); | BOOST_CHECK_EQUAL(addrman.GetAddr().size(), 1U); | ||||
▲ Show 20 Lines • Show All 146 Lines • ▼ Show 20 Lines | BOOST_AUTO_TEST_CASE(addrman_selecttriedcollision) { | ||||
// Empty addrman should return blank addrman info. | // Empty addrman should return blank addrman info. | ||||
BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0"); | BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0"); | ||||
// Add twenty two addresses. | // Add twenty two addresses. | ||||
CNetAddr source = ResolveIP("252.2.2.2"); | CNetAddr source = ResolveIP("252.2.2.2"); | ||||
for (unsigned int i = 1; i < 23; i++) { | for (unsigned int i = 1; i < 23; 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); | BOOST_CHECK(addrman.Add(CAddress(addr, NODE_NONE), source)); | ||||
addrman.Good(addr); | addrman.Good(addr); | ||||
// No collisions yet. | // No collisions yet. | ||||
BOOST_CHECK(addrman.size() == i); | BOOST_CHECK(addrman.size() == i); | ||||
BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0"); | BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0"); | ||||
} | } | ||||
// Ensure Good handles duplicates well. | // Ensure Good handles duplicates well. | ||||
for (unsigned int i = 1; i < 23; i++) { | for (unsigned int i = 1; i < 23; i++) { | ||||
CService addr = ResolveService("250.1.1." + std::to_string(i)); | CService addr = ResolveService("250.1.1." + std::to_string(i)); | ||||
addrman.Good(addr); | addrman.Good(addr); | ||||
BOOST_CHECK(addrman.size() == 22); | BOOST_CHECK(addrman.size() == 22); | ||||
BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0"); | BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0"); | ||||
} | } | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(addrman_noevict) { | BOOST_AUTO_TEST_CASE(addrman_noevict) { | ||||
CAddrManTest addrman; | CAddrManTest addrman; | ||||
// Add twenty two addresses. | // Add twenty two addresses. | ||||
CNetAddr source = ResolveIP("252.2.2.2"); | CNetAddr source = ResolveIP("252.2.2.2"); | ||||
for (unsigned int i = 1; i < 23; i++) { | for (unsigned int i = 1; i < 23; 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); | BOOST_CHECK(addrman.Add(CAddress(addr, NODE_NONE), source)); | ||||
addrman.Good(addr); | addrman.Good(addr); | ||||
// No collision yet. | // No collision yet. | ||||
BOOST_CHECK(addrman.size() == i); | BOOST_CHECK(addrman.size() == i); | ||||
BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0"); | BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0"); | ||||
} | } | ||||
// Collision between 23 and 19. | // Collision between 23 and 19. | ||||
CService addr23 = ResolveService("250.1.1.23"); | CService addr23 = ResolveService("250.1.1.23"); | ||||
addrman.Add(CAddress(addr23, NODE_NONE), source); | BOOST_CHECK(addrman.Add(CAddress(addr23, NODE_NONE), source)); | ||||
addrman.Good(addr23); | addrman.Good(addr23); | ||||
BOOST_CHECK(addrman.size() == 23); | BOOST_CHECK(addrman.size() == 23); | ||||
BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "250.1.1.19:0"); | BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "250.1.1.19:0"); | ||||
// 23 should be discarded and 19 not evicted. | // 23 should be discarded and 19 not evicted. | ||||
addrman.ResolveCollisions(); | addrman.ResolveCollisions(); | ||||
BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0"); | BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0"); | ||||
// Lets create two collisions. | // Lets create two collisions. | ||||
for (unsigned int i = 24; i < 33; i++) { | for (unsigned int i = 24; i < 33; 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); | BOOST_CHECK(addrman.Add(CAddress(addr, NODE_NONE), source)); | ||||
addrman.Good(addr); | addrman.Good(addr); | ||||
BOOST_CHECK(addrman.size() == i); | BOOST_CHECK(addrman.size() == i); | ||||
BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0"); | BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0"); | ||||
} | } | ||||
// Cause a collision. | // Cause a collision. | ||||
CService addr33 = ResolveService("250.1.1.33"); | CService addr33 = ResolveService("250.1.1.33"); | ||||
addrman.Add(CAddress(addr33, NODE_NONE), source); | BOOST_CHECK(addrman.Add(CAddress(addr33, NODE_NONE), source)); | ||||
addrman.Good(addr33); | addrman.Good(addr33); | ||||
BOOST_CHECK(addrman.size() == 33); | BOOST_CHECK(addrman.size() == 33); | ||||
BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "250.1.1.27:0"); | BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "250.1.1.27:0"); | ||||
// Cause a second collision. | // Cause a second collision. | ||||
addrman.Add(CAddress(addr23, NODE_NONE), source); | BOOST_CHECK(!addrman.Add(CAddress(addr23, NODE_NONE), source)); | ||||
addrman.Good(addr23); | addrman.Good(addr23); | ||||
BOOST_CHECK(addrman.size() == 33); | BOOST_CHECK(addrman.size() == 33); | ||||
BOOST_CHECK(addrman.SelectTriedCollision().ToString() != "[::]:0"); | BOOST_CHECK(addrman.SelectTriedCollision().ToString() != "[::]:0"); | ||||
addrman.ResolveCollisions(); | addrman.ResolveCollisions(); | ||||
BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0"); | BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0"); | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(addrman_evictionworks) { | BOOST_AUTO_TEST_CASE(addrman_evictionworks) { | ||||
CAddrManTest addrman; | CAddrManTest addrman; | ||||
BOOST_CHECK(addrman.size() == 0); | BOOST_CHECK(addrman.size() == 0); | ||||
// Empty addrman should return blank addrman info. | // Empty addrman should return blank addrman info. | ||||
BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0"); | BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0"); | ||||
// Add twenty two addresses. | // Add twenty two addresses. | ||||
CNetAddr source = ResolveIP("252.2.2.2"); | CNetAddr source = ResolveIP("252.2.2.2"); | ||||
for (unsigned int i = 1; i < 23; i++) { | for (unsigned int i = 1; i < 23; 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); | BOOST_CHECK(addrman.Add(CAddress(addr, NODE_NONE), source)); | ||||
addrman.Good(addr); | addrman.Good(addr); | ||||
// No collision yet. | // No collision yet. | ||||
BOOST_CHECK(addrman.size() == i); | BOOST_CHECK(addrman.size() == i); | ||||
BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0"); | BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0"); | ||||
} | } | ||||
// Collision between 23 and 19. | // Collision between 23 and 19. | ||||
CService addr = ResolveService("250.1.1.23"); | CService addr = ResolveService("250.1.1.23"); | ||||
addrman.Add(CAddress(addr, NODE_NONE), source); | BOOST_CHECK(addrman.Add(CAddress(addr, NODE_NONE), source)); | ||||
addrman.Good(addr); | addrman.Good(addr); | ||||
BOOST_CHECK(addrman.size() == 23); | BOOST_CHECK(addrman.size() == 23); | ||||
CAddrInfo info = addrman.SelectTriedCollision(); | CAddrInfo info = addrman.SelectTriedCollision(); | ||||
BOOST_CHECK(info.ToString() == "250.1.1.19:0"); | BOOST_CHECK(info.ToString() == "250.1.1.19:0"); | ||||
// Ensure test of address fails, so that it is evicted. | // Ensure test of address fails, so that it is evicted. | ||||
addrman.SimConnFail(info); | addrman.SimConnFail(info); | ||||
// Should swap 23 for 19. | // Should swap 23 for 19. | ||||
addrman.ResolveCollisions(); | addrman.ResolveCollisions(); | ||||
BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0"); | BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0"); | ||||
// If 23 was swapped for 19, then this should cause no collisions. | // If 23 was swapped for 19, then this should cause no collisions. | ||||
addrman.Add(CAddress(addr, NODE_NONE), source); | BOOST_CHECK(!addrman.Add(CAddress(addr, NODE_NONE), source)); | ||||
addrman.Good(addr); | addrman.Good(addr); | ||||
BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0"); | BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0"); | ||||
// If we insert 19 is should collide with 23. | // If we insert 19 is should collide with 23. | ||||
CService addr19 = ResolveService("250.1.1.19"); | CService addr19 = ResolveService("250.1.1.19"); | ||||
addrman.Add(CAddress(addr19, NODE_NONE), source); | BOOST_CHECK(!addrman.Add(CAddress(addr19, NODE_NONE), source)); | ||||
addrman.Good(addr19); | addrman.Good(addr19); | ||||
BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "250.1.1.23:0"); | BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "250.1.1.23:0"); | ||||
addrman.ResolveCollisions(); | addrman.ResolveCollisions(); | ||||
BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0"); | BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0"); | ||||
} | } | ||||
BOOST_AUTO_TEST_SUITE_END() | BOOST_AUTO_TEST_SUITE_END() |