mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 12:02:48 +01:00
merge bitcoin#23041: Add addrman deserialization error tests
This commit is contained in:
parent
8aefa9b93a
commit
2420ac9e53
@ -14,22 +14,30 @@ from test_framework.test_node import ErrorMatch
|
||||
from test_framework.util import assert_equal
|
||||
|
||||
|
||||
def serialize_addrman(*, format=1, lowest_compatible=3):
|
||||
def serialize_addrman(
|
||||
*,
|
||||
format=1,
|
||||
lowest_compatible=3,
|
||||
net_magic="regtest",
|
||||
len_new=None,
|
||||
len_tried=None,
|
||||
mock_checksum=None,
|
||||
):
|
||||
new = []
|
||||
tried = []
|
||||
INCOMPATIBILITY_BASE = 32
|
||||
r = MAGIC_BYTES["regtest"]
|
||||
r = MAGIC_BYTES[net_magic]
|
||||
r += struct.pack("B", format)
|
||||
r += struct.pack("B", INCOMPATIBILITY_BASE + lowest_compatible)
|
||||
r += ser_uint256(1)
|
||||
r += struct.pack("i", len(new))
|
||||
r += struct.pack("i", len(tried))
|
||||
r += struct.pack("i", len_new or len(new))
|
||||
r += struct.pack("i", len_tried or len(tried))
|
||||
ADDRMAN_NEW_BUCKET_COUNT = 1 << 10
|
||||
r += struct.pack("i", ADDRMAN_NEW_BUCKET_COUNT ^ (1 << 30))
|
||||
for _ in range(ADDRMAN_NEW_BUCKET_COUNT):
|
||||
r += struct.pack("i", 0)
|
||||
checksum = hash256(r)
|
||||
r += checksum
|
||||
r += mock_checksum or checksum
|
||||
return r
|
||||
|
||||
|
||||
@ -70,7 +78,7 @@ class AddrmanTest(BitcoinTestFramework):
|
||||
match=ErrorMatch.FULL_REGEX,
|
||||
)
|
||||
|
||||
self.log.info("Check that corrupt addrman cannot be read")
|
||||
self.log.info("Check that corrupt addrman cannot be read (EOF)")
|
||||
self.stop_node(0)
|
||||
with open(peers_dat, "wb") as f:
|
||||
f.write(serialize_addrman()[:-1])
|
||||
@ -79,6 +87,38 @@ class AddrmanTest(BitcoinTestFramework):
|
||||
match=ErrorMatch.FULL_REGEX,
|
||||
)
|
||||
|
||||
self.log.info("Check that corrupt addrman cannot be read (magic)")
|
||||
self.stop_node(0)
|
||||
write_addrman(peers_dat, net_magic="devnet")
|
||||
self.nodes[0].assert_start_raises_init_error(
|
||||
expected_msg=init_error("Invalid network magic number"),
|
||||
match=ErrorMatch.FULL_REGEX,
|
||||
)
|
||||
|
||||
self.log.info("Check that corrupt addrman cannot be read (checksum)")
|
||||
self.stop_node(0)
|
||||
write_addrman(peers_dat, mock_checksum=b"ab" * 32)
|
||||
self.nodes[0].assert_start_raises_init_error(
|
||||
expected_msg=init_error("Checksum mismatch, data corrupted"),
|
||||
match=ErrorMatch.FULL_REGEX,
|
||||
)
|
||||
|
||||
self.log.info("Check that corrupt addrman cannot be read (len_tried)")
|
||||
self.stop_node(0)
|
||||
write_addrman(peers_dat, len_tried=-1)
|
||||
self.nodes[0].assert_start_raises_init_error(
|
||||
expected_msg=init_error("Corrupt CAddrMan serialization: nTried=-1, should be in \\[0, 16384\\]:.*"),
|
||||
match=ErrorMatch.FULL_REGEX,
|
||||
)
|
||||
|
||||
self.log.info("Check that corrupt addrman cannot be read (len_new)")
|
||||
self.stop_node(0)
|
||||
write_addrman(peers_dat, len_new=-1)
|
||||
self.nodes[0].assert_start_raises_init_error(
|
||||
expected_msg=init_error("Corrupt CAddrMan serialization: nNew=-1, should be in \\[0, 65536\\]:.*"),
|
||||
match=ErrorMatch.FULL_REGEX,
|
||||
)
|
||||
|
||||
self.log.info("Check that missing addrman is recreated")
|
||||
self.stop_node(0)
|
||||
os.remove(peers_dat)
|
||||
|
Loading…
Reference in New Issue
Block a user