Skip to content

Commit 10aac24

Browse files
committed
[tests] Make deterministic addrman use nKey = 1
addrman_tests fail when consistency checks are enabled, since the tests set the deterministic test addrman's nKey value to zero, which is an invalid value. Change this so that deterministic addrman's nKey value is set to 1. This requires updating a few tests that are using magic values derived from nKey being set to 0.
1 parent fa9710f commit 10aac24

File tree

2 files changed

+52
-46
lines changed

2 files changed

+52
-46
lines changed

src/addrman.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -497,7 +497,7 @@ class CAddrMan
497497
: insecure_rand{deterministic}
498498
{
499499
Clear();
500-
if (deterministic) nKey.SetNull();
500+
if (deterministic) nKey = uint256{1};
501501
}
502502

503503
~CAddrMan()

src/test/addrman_tests.cpp

Lines changed: 51 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ class CAddrManTest : public CAddrMan
7878
CAddrMan::Clear();
7979
if (deterministic) {
8080
LOCK(cs);
81-
nKey.SetNull();
81+
nKey = uint256{1};
8282
insecure_rand = FastRandomContext(true);
8383
}
8484
}
@@ -256,24 +256,27 @@ BOOST_AUTO_TEST_CASE(addrman_new_collisions)
256256

257257
CNetAddr source = ResolveIP("252.2.2.2");
258258

259-
BOOST_CHECK_EQUAL(addrman.size(), 0U);
259+
uint32_t num_addrs{0};
260+
261+
BOOST_CHECK_EQUAL(addrman.size(), num_addrs);
260262

261-
for (unsigned int i = 1; i < 18; i++) {
262-
CService addr = ResolveService("250.1.1." + ToString(i));
263+
while (num_addrs < 22) { // Magic number! 250.1.1.1 - 250.1.1.22 do not collide with deterministic key = 1
264+
CService addr = ResolveService("250.1.1." + ToString(++num_addrs));
263265
BOOST_CHECK(addrman.Add(CAddress(addr, NODE_NONE), source));
264266

265267
//Test: No collision in new table yet.
266-
BOOST_CHECK_EQUAL(addrman.size(), i);
268+
BOOST_CHECK_EQUAL(addrman.size(), num_addrs);
267269
}
268270

269271
//Test: new table collision!
270-
CService addr1 = ResolveService("250.1.1.18");
272+
CService addr1 = ResolveService("250.1.1." + ToString(++num_addrs));
273+
uint32_t collisions{1};
271274
BOOST_CHECK(addrman.Add(CAddress(addr1, NODE_NONE), source));
272-
BOOST_CHECK_EQUAL(addrman.size(), 17U);
275+
BOOST_CHECK_EQUAL(addrman.size(), num_addrs - collisions);
273276

274-
CService addr2 = ResolveService("250.1.1.19");
277+
CService addr2 = ResolveService("250.1.1." + ToString(++num_addrs));
275278
BOOST_CHECK(addrman.Add(CAddress(addr2, NODE_NONE), source));
276-
BOOST_CHECK_EQUAL(addrman.size(), 18U);
279+
BOOST_CHECK_EQUAL(addrman.size(), num_addrs - collisions);
277280
}
278281

279282
BOOST_AUTO_TEST_CASE(addrman_tried_collisions)
@@ -282,25 +285,28 @@ BOOST_AUTO_TEST_CASE(addrman_tried_collisions)
282285

283286
CNetAddr source = ResolveIP("252.2.2.2");
284287

285-
BOOST_CHECK_EQUAL(addrman.size(), 0U);
288+
uint32_t num_addrs{0};
289+
290+
BOOST_CHECK_EQUAL(addrman.size(), num_addrs);
286291

287-
for (unsigned int i = 1; i < 80; i++) {
288-
CService addr = ResolveService("250.1.1." + ToString(i));
292+
while (num_addrs < 64) { // Magic number! 250.1.1.1 - 250.1.1.64 do not collide with deterministic key = 1
293+
CService addr = ResolveService("250.1.1." + ToString(++num_addrs));
289294
BOOST_CHECK(addrman.Add(CAddress(addr, NODE_NONE), source));
290295
addrman.Good(CAddress(addr, NODE_NONE));
291296

292297
//Test: No collision in tried table yet.
293-
BOOST_CHECK_EQUAL(addrman.size(), i);
298+
BOOST_CHECK_EQUAL(addrman.size(), num_addrs);
294299
}
295300

296301
//Test: tried table collision!
297-
CService addr1 = ResolveService("250.1.1.80");
302+
CService addr1 = ResolveService("250.1.1." + ToString(++num_addrs));
303+
uint32_t collisions{1};
298304
BOOST_CHECK(addrman.Add(CAddress(addr1, NODE_NONE), source));
299-
BOOST_CHECK_EQUAL(addrman.size(), 79U);
305+
BOOST_CHECK_EQUAL(addrman.size(), num_addrs - collisions);
300306

301-
CService addr2 = ResolveService("250.1.1.81");
307+
CService addr2 = ResolveService("250.1.1." + ToString(++num_addrs));
302308
BOOST_CHECK(addrman.Add(CAddress(addr2, NODE_NONE), source));
303-
BOOST_CHECK_EQUAL(addrman.size(), 80U);
309+
BOOST_CHECK_EQUAL(addrman.size(), num_addrs - collisions);
304310
}
305311

306312
BOOST_AUTO_TEST_CASE(addrman_find)
@@ -850,9 +856,9 @@ BOOST_AUTO_TEST_CASE(addrman_noevict)
850856
{
851857
CAddrManTest addrman;
852858

853-
// Add twenty two addresses.
859+
// Add 35 addresses.
854860
CNetAddr source = ResolveIP("252.2.2.2");
855-
for (unsigned int i = 1; i < 23; i++) {
861+
for (unsigned int i = 1; i < 36; i++) {
856862
CService addr = ResolveService("250.1.1."+ToString(i));
857863
BOOST_CHECK(addrman.Add(CAddress(addr, NODE_NONE), source));
858864
addrman.Good(addr);
@@ -862,20 +868,20 @@ BOOST_AUTO_TEST_CASE(addrman_noevict)
862868
BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0");
863869
}
864870

865-
// Collision between 23 and 19.
866-
CService addr23 = ResolveService("250.1.1.23");
867-
BOOST_CHECK(addrman.Add(CAddress(addr23, NODE_NONE), source));
868-
addrman.Good(addr23);
871+
// Collision between 36 and 19.
872+
CService addr36 = ResolveService("250.1.1.36");
873+
BOOST_CHECK(addrman.Add(CAddress(addr36, NODE_NONE), source));
874+
addrman.Good(addr36);
869875

870-
BOOST_CHECK(addrman.size() == 23);
871-
BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "250.1.1.19:0");
876+
BOOST_CHECK(addrman.size() == 36);
877+
BOOST_CHECK_EQUAL(addrman.SelectTriedCollision().ToString(), "250.1.1.19:0");
872878

873-
// 23 should be discarded and 19 not evicted.
879+
// 36 should be discarded and 19 not evicted.
874880
addrman.ResolveCollisions();
875881
BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0");
876882

877883
// Lets create two collisions.
878-
for (unsigned int i = 24; i < 33; i++) {
884+
for (unsigned int i = 37; i < 59; i++) {
879885
CService addr = ResolveService("250.1.1."+ToString(i));
880886
BOOST_CHECK(addrman.Add(CAddress(addr, NODE_NONE), source));
881887
addrman.Good(addr);
@@ -885,17 +891,17 @@ BOOST_AUTO_TEST_CASE(addrman_noevict)
885891
}
886892

887893
// Cause a collision.
888-
CService addr33 = ResolveService("250.1.1.33");
889-
BOOST_CHECK(addrman.Add(CAddress(addr33, NODE_NONE), source));
890-
addrman.Good(addr33);
891-
BOOST_CHECK(addrman.size() == 33);
894+
CService addr59 = ResolveService("250.1.1.59");
895+
BOOST_CHECK(addrman.Add(CAddress(addr59, NODE_NONE), source));
896+
addrman.Good(addr59);
897+
BOOST_CHECK(addrman.size() == 59);
892898

893-
BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "250.1.1.27:0");
899+
BOOST_CHECK_EQUAL(addrman.SelectTriedCollision().ToString(), "250.1.1.10:0");
894900

895901
// Cause a second collision.
896-
BOOST_CHECK(!addrman.Add(CAddress(addr23, NODE_NONE), source));
897-
addrman.Good(addr23);
898-
BOOST_CHECK(addrman.size() == 33);
902+
BOOST_CHECK(!addrman.Add(CAddress(addr36, NODE_NONE), source));
903+
addrman.Good(addr36);
904+
BOOST_CHECK(addrman.size() == 59);
899905

900906
BOOST_CHECK(addrman.SelectTriedCollision().ToString() != "[::]:0");
901907
addrman.ResolveCollisions();
@@ -911,9 +917,9 @@ BOOST_AUTO_TEST_CASE(addrman_evictionworks)
911917
// Empty addrman should return blank addrman info.
912918
BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0");
913919

914-
// Add twenty two addresses.
920+
// Add 35 addresses
915921
CNetAddr source = ResolveIP("252.2.2.2");
916-
for (unsigned int i = 1; i < 23; i++) {
922+
for (unsigned int i = 1; i < 36; i++) {
917923
CService addr = ResolveService("250.1.1."+ToString(i));
918924
BOOST_CHECK(addrman.Add(CAddress(addr, NODE_NONE), source));
919925
addrman.Good(addr);
@@ -923,34 +929,34 @@ BOOST_AUTO_TEST_CASE(addrman_evictionworks)
923929
BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0");
924930
}
925931

926-
// Collision between 23 and 19.
927-
CService addr = ResolveService("250.1.1.23");
932+
// Collision between 36 and 19.
933+
CService addr = ResolveService("250.1.1.36");
928934
BOOST_CHECK(addrman.Add(CAddress(addr, NODE_NONE), source));
929935
addrman.Good(addr);
930936

931-
BOOST_CHECK(addrman.size() == 23);
937+
BOOST_CHECK_EQUAL(addrman.size(), 36);
932938
CAddrInfo info = addrman.SelectTriedCollision();
933-
BOOST_CHECK(info.ToString() == "250.1.1.19:0");
939+
BOOST_CHECK_EQUAL(info.ToString(), "250.1.1.19:0");
934940

935941
// Ensure test of address fails, so that it is evicted.
936942
addrman.SimConnFail(info);
937943

938-
// Should swap 23 for 19.
944+
// Should swap 36 for 19.
939945
addrman.ResolveCollisions();
940946
BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0");
941947

942-
// If 23 was swapped for 19, then this should cause no collisions.
948+
// If 36 was swapped for 19, then this should cause no collisions.
943949
BOOST_CHECK(!addrman.Add(CAddress(addr, NODE_NONE), source));
944950
addrman.Good(addr);
945951

946952
BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0");
947953

948-
// If we insert 19 is should collide with 23.
954+
// If we insert 19 it should collide with 36
949955
CService addr19 = ResolveService("250.1.1.19");
950956
BOOST_CHECK(!addrman.Add(CAddress(addr19, NODE_NONE), source));
951957
addrman.Good(addr19);
952958

953-
BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "250.1.1.23:0");
959+
BOOST_CHECK_EQUAL(addrman.SelectTriedCollision().ToString(), "250.1.1.36:0");
954960

955961
addrman.ResolveCollisions();
956962
BOOST_CHECK(addrman.SelectTriedCollision().ToString() == "[::]:0");

0 commit comments

Comments
 (0)