21
21
#include < string>
22
22
23
23
using namespace std ::literals;
24
+ using node::NodeContext;
25
+
26
+ static const std::vector<bool > EMPTY_ASMAP;
27
+ static const bool DETERMINISTIC{true };
28
+
29
+ static int32_t GetCheckRatio (const NodeContext& node_ctx)
30
+ {
31
+ return std::clamp<int32_t >(node_ctx.args ->GetIntArg (" -checkaddrman" , 100 ), 0 , 1000000 );
32
+ }
24
33
25
34
static CNetAddr ResolveIP (const std::string& ip)
26
35
{
@@ -49,17 +58,11 @@ static std::vector<bool> FromBytes(const unsigned char* source, int vector_size)
49
58
return result;
50
59
}
51
60
52
- /* Utility function to create a deterministic addrman, as used in most tests */
53
- static std::unique_ptr<AddrMan> TestAddrMan (std::vector<bool > asmap = std::vector<bool >())
54
- {
55
- return std::make_unique<AddrMan>(asmap, /* deterministic=*/ true , /* consistency_check_ratio=*/ 100 );
56
- }
57
-
58
61
BOOST_FIXTURE_TEST_SUITE (addrman_tests, BasicTestingSetup)
59
62
60
63
BOOST_AUTO_TEST_CASE(addrman_simple)
61
64
{
62
- auto addrman = TestAddrMan ( );
65
+ auto addrman = std::make_unique<AddrMan>(EMPTY_ASMAP, DETERMINISTIC, GetCheckRatio (m_node) );
63
66
64
67
CNetAddr source = ResolveIP (" 252.2.2.2" );
65
68
@@ -93,7 +96,7 @@ BOOST_AUTO_TEST_CASE(addrman_simple)
93
96
BOOST_CHECK (addrman->size () >= 1 );
94
97
95
98
// Test: reset addrman and test AddrMan::Add multiple addresses works as expected
96
- addrman = TestAddrMan ( );
99
+ addrman = std::make_unique<AddrMan>(EMPTY_ASMAP, DETERMINISTIC, GetCheckRatio (m_node) );
97
100
std::vector<CAddress> vAddr;
98
101
vAddr.push_back (CAddress (ResolveService (" 250.1.1.3" , 8333 ), NODE_NONE));
99
102
vAddr.push_back (CAddress (ResolveService (" 250.1.1.4" , 8333 ), NODE_NONE));
@@ -103,7 +106,7 @@ BOOST_AUTO_TEST_CASE(addrman_simple)
103
106
104
107
BOOST_AUTO_TEST_CASE (addrman_ports)
105
108
{
106
- auto addrman = TestAddrMan ( );
109
+ auto addrman = std::make_unique<AddrMan>(EMPTY_ASMAP, DETERMINISTIC, GetCheckRatio (m_node) );
107
110
108
111
CNetAddr source = ResolveIP (" 252.2.2.2" );
109
112
@@ -132,7 +135,7 @@ BOOST_AUTO_TEST_CASE(addrman_ports)
132
135
133
136
BOOST_AUTO_TEST_CASE (addrman_select)
134
137
{
135
- auto addrman = TestAddrMan ( );
138
+ auto addrman = std::make_unique<AddrMan>(EMPTY_ASMAP, DETERMINISTIC, GetCheckRatio (m_node) );
136
139
137
140
CNetAddr source = ResolveIP (" 252.2.2.2" );
138
141
@@ -191,7 +194,7 @@ BOOST_AUTO_TEST_CASE(addrman_select)
191
194
192
195
BOOST_AUTO_TEST_CASE (addrman_new_collisions)
193
196
{
194
- auto addrman = TestAddrMan ( );
197
+ auto addrman = std::make_unique<AddrMan>(EMPTY_ASMAP, DETERMINISTIC, GetCheckRatio (m_node) );
195
198
196
199
CNetAddr source = ResolveIP (" 252.2.2.2" );
197
200
@@ -220,7 +223,7 @@ BOOST_AUTO_TEST_CASE(addrman_new_collisions)
220
223
221
224
BOOST_AUTO_TEST_CASE (addrman_new_multiplicity)
222
225
{
223
- auto addrman = TestAddrMan ( );
226
+ auto addrman = std::make_unique<AddrMan>(EMPTY_ASMAP, DETERMINISTIC, GetCheckRatio (m_node) );
224
227
CAddress addr{CAddress (ResolveService (" 253.3.3.3" , 8333 ), NODE_NONE)};
225
228
int64_t start_time{GetAdjustedTime ()};
226
229
addr.nTime = start_time;
@@ -252,7 +255,7 @@ BOOST_AUTO_TEST_CASE(addrman_new_multiplicity)
252
255
253
256
BOOST_AUTO_TEST_CASE (addrman_tried_collisions)
254
257
{
255
- auto addrman = TestAddrMan ( );
258
+ auto addrman = std::make_unique<AddrMan>(EMPTY_ASMAP, DETERMINISTIC, GetCheckRatio (m_node) );
256
259
257
260
CNetAddr source = ResolveIP (" 252.2.2.2" );
258
261
@@ -283,7 +286,7 @@ BOOST_AUTO_TEST_CASE(addrman_tried_collisions)
283
286
284
287
BOOST_AUTO_TEST_CASE (addrman_getaddr)
285
288
{
286
- auto addrman = TestAddrMan ( );
289
+ auto addrman = std::make_unique<AddrMan>(EMPTY_ASMAP, DETERMINISTIC, GetCheckRatio (m_node) );
287
290
288
291
// Test: Sanity check, GetAddr should never return anything if addrman
289
292
// is empty.
@@ -604,9 +607,11 @@ BOOST_AUTO_TEST_CASE(addrman_serialization)
604
607
{
605
608
std::vector<bool > asmap1 = FromBytes (asmap_raw, sizeof (asmap_raw) * 8 );
606
609
607
- auto addrman_asmap1 = TestAddrMan (asmap1);
608
- auto addrman_asmap1_dup = TestAddrMan (asmap1);
609
- auto addrman_noasmap = TestAddrMan ();
610
+ const auto ratio = GetCheckRatio (m_node);
611
+ auto addrman_asmap1 = std::make_unique<AddrMan>(asmap1, DETERMINISTIC, ratio);
612
+ auto addrman_asmap1_dup = std::make_unique<AddrMan>(asmap1, DETERMINISTIC, ratio);
613
+ auto addrman_noasmap = std::make_unique<AddrMan>(EMPTY_ASMAP, DETERMINISTIC, ratio);
614
+
610
615
CDataStream stream (SER_NETWORK, PROTOCOL_VERSION);
611
616
612
617
CAddress addr = CAddress (ResolveService (" 250.1.1.1" ), NODE_NONE);
@@ -634,8 +639,8 @@ BOOST_AUTO_TEST_CASE(addrman_serialization)
634
639
BOOST_CHECK (addr_pos1.position != addr_pos3.position );
635
640
636
641
// deserializing non-asmaped peers.dat to asmaped addrman
637
- addrman_asmap1 = TestAddrMan (asmap1);
638
- addrman_noasmap = TestAddrMan ( );
642
+ addrman_asmap1 = std::make_unique<AddrMan> (asmap1, DETERMINISTIC, ratio );
643
+ addrman_noasmap = std::make_unique<AddrMan>(EMPTY_ASMAP, DETERMINISTIC, ratio );
639
644
addrman_noasmap->Add ({addr}, default_source);
640
645
stream << *addrman_noasmap;
641
646
stream >> *addrman_asmap1;
@@ -646,8 +651,8 @@ BOOST_AUTO_TEST_CASE(addrman_serialization)
646
651
BOOST_CHECK (addr_pos4 == addr_pos2);
647
652
648
653
// used to map to different buckets, now maps to the same bucket.
649
- addrman_asmap1 = TestAddrMan (asmap1);
650
- addrman_noasmap = TestAddrMan ( );
654
+ addrman_asmap1 = std::make_unique<AddrMan> (asmap1, DETERMINISTIC, ratio );
655
+ addrman_noasmap = std::make_unique<AddrMan>(EMPTY_ASMAP, DETERMINISTIC, ratio );
651
656
CAddress addr1 = CAddress (ResolveService (" 250.1.1.1" ), NODE_NONE);
652
657
CAddress addr2 = CAddress (ResolveService (" 250.2.1.1" ), NODE_NONE);
653
658
addrman_noasmap->Add ({addr, addr2}, default_source);
@@ -666,7 +671,7 @@ BOOST_AUTO_TEST_CASE(remove_invalid)
666
671
{
667
672
// Confirm that invalid addresses are ignored in unserialization.
668
673
669
- auto addrman = TestAddrMan ( );
674
+ auto addrman = std::make_unique<AddrMan>(EMPTY_ASMAP, DETERMINISTIC, GetCheckRatio (m_node) );
670
675
CDataStream stream (SER_NETWORK, PROTOCOL_VERSION);
671
676
672
677
const CAddress new1{ResolveService (" 5.5.5.5" ), NODE_NONE};
@@ -698,14 +703,14 @@ BOOST_AUTO_TEST_CASE(remove_invalid)
698
703
BOOST_REQUIRE (pos + sizeof (tried2_raw_replacement) <= stream.size ());
699
704
memcpy (stream.data () + pos, tried2_raw_replacement, sizeof (tried2_raw_replacement));
700
705
701
- addrman = TestAddrMan ( );
706
+ addrman = std::make_unique<AddrMan>(EMPTY_ASMAP, DETERMINISTIC, GetCheckRatio (m_node) );
702
707
stream >> *addrman;
703
708
BOOST_CHECK_EQUAL (addrman->size (), 2 );
704
709
}
705
710
706
711
BOOST_AUTO_TEST_CASE (addrman_selecttriedcollision)
707
712
{
708
- auto addrman = TestAddrMan ( );
713
+ auto addrman = std::make_unique<AddrMan>(EMPTY_ASMAP, DETERMINISTIC, GetCheckRatio (m_node) );
709
714
710
715
BOOST_CHECK (addrman->size () == 0 );
711
716
@@ -738,7 +743,7 @@ BOOST_AUTO_TEST_CASE(addrman_selecttriedcollision)
738
743
739
744
BOOST_AUTO_TEST_CASE (addrman_noevict)
740
745
{
741
- auto addrman = TestAddrMan ( );
746
+ auto addrman = std::make_unique<AddrMan>(EMPTY_ASMAP, DETERMINISTIC, GetCheckRatio (m_node) );
742
747
743
748
// Add 35 addresses.
744
749
CNetAddr source = ResolveIP (" 252.2.2.2" );
@@ -790,7 +795,7 @@ BOOST_AUTO_TEST_CASE(addrman_noevict)
790
795
791
796
BOOST_AUTO_TEST_CASE (addrman_evictionworks)
792
797
{
793
- auto addrman = TestAddrMan ( );
798
+ auto addrman = std::make_unique<AddrMan>(EMPTY_ASMAP, DETERMINISTIC, GetCheckRatio (m_node) );
794
799
795
800
BOOST_CHECK (addrman->size () == 0 );
796
801
@@ -860,8 +865,7 @@ static CDataStream AddrmanToStream(const AddrMan& addrman)
860
865
861
866
BOOST_AUTO_TEST_CASE (load_addrman)
862
867
{
863
- AddrMan addrman{/* asmap=*/ std::vector<bool >(), /* deterministic=*/ true ,
864
- /* consistency_check_ratio=*/ 100 };
868
+ AddrMan addrman{EMPTY_ASMAP, DETERMINISTIC, GetCheckRatio (m_node)};
865
869
866
870
CService addr1, addr2, addr3;
867
871
BOOST_CHECK (Lookup (" 250.7.1.1" , addr1, 8333 , false ));
@@ -880,7 +884,7 @@ BOOST_AUTO_TEST_CASE(load_addrman)
880
884
// Test that the de-serialization does not throw an exception.
881
885
CDataStream ssPeers1 = AddrmanToStream (addrman);
882
886
bool exceptionThrown = false ;
883
- AddrMan addrman1 ( /* asmap= */ std::vector< bool >(), /* deterministic= */ false , /* consistency_check_ratio= */ 100 ) ;
887
+ AddrMan addrman1{EMPTY_ASMAP, !DETERMINISTIC, GetCheckRatio (m_node)} ;
884
888
885
889
BOOST_CHECK (addrman1.size () == 0 );
886
890
try {
@@ -897,7 +901,7 @@ BOOST_AUTO_TEST_CASE(load_addrman)
897
901
// Test that ReadFromStream creates an addrman with the correct number of addrs.
898
902
CDataStream ssPeers2 = AddrmanToStream (addrman);
899
903
900
- AddrMan addrman2 ( /* asmap= */ std::vector< bool >(), /* deterministic= */ false , /* consistency_check_ratio= */ 100 ) ;
904
+ AddrMan addrman2{EMPTY_ASMAP, !DETERMINISTIC, GetCheckRatio (m_node)} ;
901
905
BOOST_CHECK (addrman2.size () == 0 );
902
906
ReadFromStream (addrman2, ssPeers2);
903
907
BOOST_CHECK (addrman2.size () == 3 );
@@ -935,7 +939,7 @@ BOOST_AUTO_TEST_CASE(load_addrman_corrupted)
935
939
// Test that the de-serialization of corrupted peers.dat throws an exception.
936
940
CDataStream ssPeers1 = MakeCorruptPeersDat ();
937
941
bool exceptionThrown = false ;
938
- AddrMan addrman1 ( /* asmap= */ std::vector< bool >(), /* deterministic= */ false , /* consistency_check_ratio= */ 100 ) ;
942
+ AddrMan addrman1{EMPTY_ASMAP, !DETERMINISTIC, GetCheckRatio (m_node)} ;
939
943
BOOST_CHECK (addrman1.size () == 0 );
940
944
try {
941
945
unsigned char pchMsgTmp[4 ];
@@ -951,15 +955,15 @@ BOOST_AUTO_TEST_CASE(load_addrman_corrupted)
951
955
// Test that ReadFromStream fails if peers.dat is corrupt
952
956
CDataStream ssPeers2 = MakeCorruptPeersDat ();
953
957
954
- AddrMan addrman2 ( /* asmap= */ std::vector< bool >(), /* deterministic= */ false , /* consistency_check_ratio= */ 100 ) ;
958
+ AddrMan addrman2{EMPTY_ASMAP, !DETERMINISTIC, GetCheckRatio (m_node)} ;
955
959
BOOST_CHECK (addrman2.size () == 0 );
956
960
BOOST_CHECK_THROW (ReadFromStream (addrman2, ssPeers2), std::ios_base::failure);
957
961
}
958
962
959
963
BOOST_AUTO_TEST_CASE (addrman_update_address)
960
964
{
961
965
// Tests updating nTime via Connected() and nServices via SetServices()
962
- auto addrman = TestAddrMan ( );
966
+ auto addrman = std::make_unique<AddrMan>(EMPTY_ASMAP, DETERMINISTIC, GetCheckRatio (m_node) );
963
967
CNetAddr source{ResolveIP (" 252.2.2.2" )};
964
968
CAddress addr{CAddress (ResolveService (" 250.1.1.1" , 8333 ), NODE_NONE)};
965
969
0 commit comments