Skip to content

Commit 7a97aab

Browse files
committed
test: restore pre-bitcoin#23306 tests to validate port distinguishment
Dash has supported the storage of address-port pairs and multi-port support before upstream for ease of development (on select networks, most notably, not mainnet). Bitcoin has introduced support for the above mentioned features and has modified tests to validate new functionality. As Dash already has this functionality and *selectively* allows it, we need to test both cases, the new upstream case with distinguishment enabled and Dash's case of distinguishment disabled (the former upstream case).
1 parent 1a050d6 commit 7a97aab

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

src/test/addrman_tests.cpp

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,33 @@ BOOST_AUTO_TEST_CASE(addrman_ports)
236236
BOOST_CHECK_EQUAL(addr_ret3.ToString(), "250.1.1.1:8333");
237237
}
238238

239+
BOOST_AUTO_TEST_CASE(addrman_ports_nondiscriminate)
240+
{
241+
AddrManTest addrman(/* deterministic */ true, /* asmap */ std::vector<bool>(), /* discriminate */ false);
242+
243+
CNetAddr source = ResolveIP("252.2.2.2");
244+
245+
BOOST_CHECK_EQUAL(addrman.size(), 0U);
246+
247+
// Test 7; Addr with same IP but diff port does not replace existing addr.
248+
CService addr1 = ResolveService("250.1.1.1", 8333);
249+
BOOST_CHECK(addrman.Add({CAddress(addr1, NODE_NONE)}, source));
250+
BOOST_CHECK_EQUAL(addrman.size(), 1U);
251+
252+
CService addr1_port = ResolveService("250.1.1.1", 8334);
253+
BOOST_CHECK(!addrman.Add({CAddress(addr1_port, NODE_NONE)}, source));
254+
BOOST_CHECK_EQUAL(addrman.size(), 1U);
255+
auto addr_ret2 = addrman.Select().first;
256+
BOOST_CHECK_EQUAL(addr_ret2.ToString(), "250.1.1.1:8333");
257+
258+
// Test: Add same IP but diff port to tried table, it doesn't get added.
259+
// Perhaps this is not ideal behavior but it is the current behavior.
260+
addrman.Good(CAddress(addr1_port, NODE_NONE));
261+
BOOST_CHECK_EQUAL(addrman.size(), 1U);
262+
bool newOnly = true;
263+
auto addr_ret3 = addrman.Select(newOnly).first;
264+
BOOST_CHECK_EQUAL(addr_ret3.ToString(), "250.1.1.1:8333");
265+
}
239266

240267
BOOST_AUTO_TEST_CASE(addrman_select)
241268
{
@@ -388,6 +415,39 @@ BOOST_AUTO_TEST_CASE(addrman_find)
388415
BOOST_CHECK_EQUAL(info3->ToString(), "251.255.2.1:8333");
389416
}
390417

418+
BOOST_AUTO_TEST_CASE(addrman_find_nondiscriminate)
419+
{
420+
AddrManTest addrman(/* deterministic */ true, /* asmap */ std::vector<bool>(), /* discriminate */ false);
421+
422+
BOOST_CHECK_EQUAL(addrman.size(), 0U);
423+
424+
CAddress addr1 = CAddress(ResolveService("250.1.2.1", 8333), NODE_NONE);
425+
CAddress addr2 = CAddress(ResolveService("250.1.2.1", 9999), NODE_NONE);
426+
CAddress addr3 = CAddress(ResolveService("251.255.2.1", 8333), NODE_NONE);
427+
428+
CNetAddr source1 = ResolveIP("250.1.2.1");
429+
CNetAddr source2 = ResolveIP("250.1.2.2");
430+
431+
BOOST_CHECK(addrman.Add({addr1}, source1));
432+
BOOST_CHECK(!addrman.Add({addr2}, source2));
433+
BOOST_CHECK(addrman.Add({addr3}, source1));
434+
435+
// Test: ensure Find returns an IP matching what we searched on.
436+
AddrInfo* info1 = addrman.Find(addr1);
437+
BOOST_REQUIRE(info1);
438+
BOOST_CHECK_EQUAL(info1->ToString(), "250.1.2.1:8333");
439+
440+
// Test 18; Find does not discriminate by port number.
441+
AddrInfo* info2 = addrman.Find(addr2);
442+
BOOST_REQUIRE(info2);
443+
BOOST_CHECK_EQUAL(info2->ToString(), info1->ToString());
444+
445+
// Test: Find returns another IP matching what we searched on.
446+
AddrInfo* info3 = addrman.Find(addr3);
447+
BOOST_REQUIRE(info3);
448+
BOOST_CHECK_EQUAL(info3->ToString(), "251.255.2.1:8333");
449+
}
450+
391451
BOOST_AUTO_TEST_CASE(addrman_create)
392452
{
393453
AddrManTest addrman;

0 commit comments

Comments
 (0)