@@ -915,5 +915,35 @@ BOOST_AUTO_TEST_CASE(load_addrman_corrupted)
915
915
BOOST_CHECK_THROW (ReadFromStream (addrman2, ssPeers2), std::ios_base::failure);
916
916
}
917
917
918
+ BOOST_AUTO_TEST_CASE (addrman_update_address)
919
+ {
920
+ // Tests updating nTime via Connected() and nServices via SetServices()
921
+ auto addrman = TestAddrMan ();
922
+ CNetAddr source{ResolveIP (" 252.2.2.2" )};
923
+ CAddress addr{CAddress (ResolveService (" 250.1.1.1" , 8333 ), NODE_NONE)};
924
+
925
+ int64_t start_time{GetAdjustedTime () - 10000 };
926
+ addr.nTime = start_time;
927
+ BOOST_CHECK (addrman->Add ({addr}, source));
928
+ BOOST_CHECK_EQUAL (addrman->size (), 1U );
929
+
930
+ // Updating an addrman entry with a different port doesn't change it
931
+ CAddress addr_diff_port{CAddress (ResolveService (" 250.1.1.1" , 8334 ), NODE_NONE)};
932
+ addr_diff_port.nTime = start_time;
933
+ addrman->Connected (addr_diff_port);
934
+ addrman->SetServices (addr_diff_port, NODE_NETWORK_LIMITED);
935
+ std::vector<CAddress> vAddr1{addrman->GetAddr (/* max_addresses=*/ 0 , /* max_pct=*/ 0 , /* network=*/ std::nullopt)};
936
+ BOOST_CHECK_EQUAL (vAddr1.size (), 1U );
937
+ BOOST_CHECK_EQUAL (vAddr1.at (0 ).nTime , start_time);
938
+ BOOST_CHECK_EQUAL (vAddr1.at (0 ).nServices , NODE_NONE);
939
+
940
+ // Updating an addrman entry with the correct port is successful
941
+ addrman->Connected (addr);
942
+ addrman->SetServices (addr, NODE_NETWORK_LIMITED);
943
+ std::vector<CAddress> vAddr2 = addrman->GetAddr (/* max_addresses=*/ 0 , /* max_pct=*/ 0 , /* network=*/ std::nullopt);
944
+ BOOST_CHECK_EQUAL (vAddr2.size (), 1U );
945
+ BOOST_CHECK (vAddr2.at (0 ).nTime >= start_time + 10000 );
946
+ BOOST_CHECK_EQUAL (vAddr2.at (0 ).nServices , NODE_NETWORK_LIMITED);
947
+ }
918
948
919
949
BOOST_AUTO_TEST_SUITE_END ()
0 commit comments