aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xtest/functional/feature_addrman.py23
-rw-r--r--test/functional/test_framework/netutil.py5
2 files changed, 25 insertions, 3 deletions
diff --git a/test/functional/feature_addrman.py b/test/functional/feature_addrman.py
index d901b7bcf9..9839993115 100755
--- a/test/functional/feature_addrman.py
+++ b/test/functional/feature_addrman.py
@@ -9,12 +9,12 @@ import re
import struct
from test_framework.messages import ser_uint256, hash256
+from test_framework.netutil import ADDRMAN_NEW_BUCKET_COUNT, ADDRMAN_TRIED_BUCKET_COUNT, ADDRMAN_BUCKET_SIZE
from test_framework.p2p import MAGIC_BYTES
from test_framework.test_framework import BitcoinTestFramework
from test_framework.test_node import ErrorMatch
from test_framework.util import assert_equal
-
def serialize_addrman(
*,
format=1,
@@ -117,17 +117,34 @@ class AddrmanTest(BitcoinTestFramework):
self.log.info("Check that corrupt addrman cannot be read (len_tried)")
self.stop_node(0)
+ max_len_tried = ADDRMAN_TRIED_BUCKET_COUNT * ADDRMAN_BUCKET_SIZE
write_addrman(peers_dat, len_tried=-1)
self.nodes[0].assert_start_raises_init_error(
- expected_msg=init_error("Corrupt AddrMan serialization: nTried=-1, should be in \\[0, 16384\\]:.*"),
+ expected_msg=init_error(f"Corrupt AddrMan serialization: nTried=-1, should be in \\[0, {max_len_tried}\\]:.*"),
+ match=ErrorMatch.FULL_REGEX,
+ )
+
+ self.log.info("Check that corrupt addrman cannot be read (large len_tried)")
+ write_addrman(peers_dat, len_tried=max_len_tried + 1)
+ self.nodes[0].assert_start_raises_init_error(
+ expected_msg=init_error(f"Corrupt AddrMan serialization: nTried={max_len_tried + 1}, should be in \\[0, {max_len_tried}\\]:.*"),
match=ErrorMatch.FULL_REGEX,
)
self.log.info("Check that corrupt addrman cannot be read (len_new)")
self.stop_node(0)
+ max_len_new = ADDRMAN_NEW_BUCKET_COUNT * ADDRMAN_BUCKET_SIZE
write_addrman(peers_dat, len_new=-1)
self.nodes[0].assert_start_raises_init_error(
- expected_msg=init_error("Corrupt AddrMan serialization: nNew=-1, should be in \\[0, 65536\\]:.*"),
+ expected_msg=init_error(f"Corrupt AddrMan serialization: nNew=-1, should be in \\[0, {max_len_new}\\]:.*"),
+ match=ErrorMatch.FULL_REGEX,
+ )
+
+ self.log.info("Check that corrupt addrman cannot be read (large len_new)")
+ self.stop_node(0)
+ write_addrman(peers_dat, len_new=max_len_new + 1)
+ self.nodes[0].assert_start_raises_init_error(
+ expected_msg=init_error(f"Corrupt AddrMan serialization: nNew={max_len_new + 1}, should be in \\[0, {max_len_new}\\]:.*"),
match=ErrorMatch.FULL_REGEX,
)
diff --git a/test/functional/test_framework/netutil.py b/test/functional/test_framework/netutil.py
index fcea4b2f68..838f40fcaa 100644
--- a/test/functional/test_framework/netutil.py
+++ b/test/functional/test_framework/netutil.py
@@ -25,6 +25,11 @@ import os
STATE_LISTEN = '0A'
# STATE_CLOSING = '0B'
+# Address manager size constants as defined in addrman_impl.h
+ADDRMAN_NEW_BUCKET_COUNT = 1 << 10
+ADDRMAN_TRIED_BUCKET_COUNT = 1 << 8
+ADDRMAN_BUCKET_SIZE = 1 << 6
+
def get_socket_inodes(pid):
'''
Get list of socket inodes for process pid.