Skip to content

Commit 9681753

Browse files
DashCoreAutoGuixfanquakeClaude Code
authored andcommitted
Merge bitcoin#28176: tests: add coverage to feature_addrman.py
Co-authored-by: fanquake <[email protected]> Co-authored-by: Claude Code <[email protected]>
1 parent 6d19314 commit 9681753

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

test/functional/feature_addrman.py

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@
99
import struct
1010

1111
from test_framework.messages import ser_uint256, hash256, MAGIC_BYTES
12+
from test_framework.netutil import ADDRMAN_NEW_BUCKET_COUNT, ADDRMAN_TRIED_BUCKET_COUNT, ADDRMAN_BUCKET_SIZE
1213
from test_framework.test_framework import BitcoinTestFramework
1314
from test_framework.test_node import ErrorMatch
1415
from test_framework.util import assert_equal
1516

16-
1717
def serialize_addrman(
1818
*,
1919
format=1,
@@ -116,17 +116,34 @@ def run_test(self):
116116

117117
self.log.info("Check that corrupt addrman cannot be read (len_tried)")
118118
self.stop_node(0)
119+
max_len_tried = ADDRMAN_TRIED_BUCKET_COUNT * ADDRMAN_BUCKET_SIZE
119120
write_addrman(peers_dat, len_tried=-1)
120121
self.nodes[0].assert_start_raises_init_error(
121-
expected_msg=init_error("Corrupt AddrMan serialization: nTried=-1, should be in \\[0, 16384\\]:.*"),
122+
expected_msg=init_error(f"Corrupt AddrMan serialization: nTried=-1, should be in \\[0, {max_len_tried}\\]:.*"),
123+
match=ErrorMatch.FULL_REGEX,
124+
)
125+
126+
self.log.info("Check that corrupt addrman cannot be read (large len_tried)")
127+
write_addrman(peers_dat, len_tried=max_len_tried + 1)
128+
self.nodes[0].assert_start_raises_init_error(
129+
expected_msg=init_error(f"Corrupt AddrMan serialization: nTried={max_len_tried + 1}, should be in \\[0, {max_len_tried}\\]:.*"),
122130
match=ErrorMatch.FULL_REGEX,
123131
)
124132

125133
self.log.info("Check that corrupt addrman cannot be read (len_new)")
126134
self.stop_node(0)
135+
max_len_new = ADDRMAN_NEW_BUCKET_COUNT * ADDRMAN_BUCKET_SIZE
127136
write_addrman(peers_dat, len_new=-1)
128137
self.nodes[0].assert_start_raises_init_error(
129-
expected_msg=init_error("Corrupt AddrMan serialization: nNew=-1, should be in \\[0, 65536\\]:.*"),
138+
expected_msg=init_error(f"Corrupt AddrMan serialization: nNew=-1, should be in \\[0, {max_len_new}\\]:.*"),
139+
match=ErrorMatch.FULL_REGEX,
140+
)
141+
142+
self.log.info("Check that corrupt addrman cannot be read (large len_new)")
143+
self.stop_node(0)
144+
write_addrman(peers_dat, len_new=max_len_new + 1)
145+
self.nodes[0].assert_start_raises_init_error(
146+
expected_msg=init_error(f"Corrupt AddrMan serialization: nNew={max_len_new + 1}, should be in \\[0, {max_len_new}\\]:.*"),
130147
match=ErrorMatch.FULL_REGEX,
131148
)
132149

test/functional/test_framework/netutil.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@
2525
STATE_LISTEN = '0A'
2626
# STATE_CLOSING = '0B'
2727

28+
# Address manager size constants as defined in addrman_impl.h
29+
ADDRMAN_NEW_BUCKET_COUNT = 1 << 10
30+
ADDRMAN_TRIED_BUCKET_COUNT = 1 << 8
31+
ADDRMAN_BUCKET_SIZE = 1 << 6
32+
2833
def get_socket_inodes(pid):
2934
'''
3035
Get list of socket inodes for process pid.

0 commit comments

Comments
 (0)