From 6202acd284bc0284fc9b144fdc39774f112fcdf2 Mon Sep 17 00:00:00 2001 From: brunoerg Date: Mon, 16 Feb 2026 15:56:35 -0300 Subject: [PATCH] test: addrman: successive failures in the last week for IsTerrible --- src/test/addrman_tests.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/test/addrman_tests.cpp b/src/test/addrman_tests.cpp index a085c1f5a98..e9069079f1f 100644 --- a/src/test/addrman_tests.cpp +++ b/src/test/addrman_tests.cpp @@ -93,6 +93,42 @@ BOOST_AUTO_TEST_CASE(addrman_simple) BOOST_CHECK(addrman->Size() >= 1); } + +BOOST_AUTO_TEST_CASE(addrman_terrible_many_failures) +{ + auto now = Now(); + SetMockTime(now - (ADDRMAN_MIN_FAIL + 24h)); + + auto addrman{std::make_unique(EMPTY_NETGROUPMAN, DETERMINISTIC, GetCheckRatio(m_node))}; + + CNetAddr source{ResolveIP("250.1.2.1")}; + CAddress addr{CAddress(ResolveService("250.250.2.1", 8333), NODE_NONE)}; + addr.nTime = Now(); + + BOOST_CHECK(addrman->Add({addr}, source)); + BOOST_CHECK(addrman->Good(addr)); + + SetMockTime(now); + + CAddress addr_helper{CAddress(ResolveService("251.252.2.3", 8333), NODE_NONE)}; + addr_helper.nTime = Now(); + BOOST_CHECK(addrman->Add({addr_helper}, source)); + BOOST_CHECK(addrman->Good(addr_helper)); + + for (int i = 0; i < ADDRMAN_MAX_FAILURES; ++i) { + // Use a time > 60s ago so IsTerrible doesn't bail out at the "tried in the last minute" check + addrman->Attempt(addr, /*fCountFailure=*/true, Now() - 61s); + } + + std::vector filtered{addrman->GetAddr(/*max_addresses=*/0, /*max_pct=*/0, /*network=*/std::nullopt)}; + BOOST_CHECK_EQUAL(filtered.size(), 1U); + BOOST_CHECK_EQUAL(filtered[0].ToStringAddrPort(), "251.252.2.3:8333"); + + std::vector unfiltered{addrman->GetAddr(/*max_addresses=*/0, /*max_pct=*/0, /*network=*/std::nullopt, /*filtered=*/false)}; + BOOST_CHECK_EQUAL(unfiltered.size(), 2U); +} + + BOOST_AUTO_TEST_CASE(addrman_penalty_self_announcement) { SetMockTime(Now());