mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-12 11:19:08 -05:00
test: hoist p2p values to test framework constants
This commit is contained in:
parent
75447f0893
commit
56010f9256
3 changed files with 17 additions and 8 deletions
|
@ -7,6 +7,9 @@
|
||||||
from test_framework.messages import (
|
from test_framework.messages import (
|
||||||
CBlockHeader,
|
CBlockHeader,
|
||||||
CInv,
|
CInv,
|
||||||
|
MAX_HEADERS_RESULTS,
|
||||||
|
MAX_INV_SIZE,
|
||||||
|
MAX_PROTOCOL_MESSAGE_LENGTH,
|
||||||
msg_getdata,
|
msg_getdata,
|
||||||
msg_headers,
|
msg_headers,
|
||||||
msg_inv,
|
msg_inv,
|
||||||
|
@ -24,8 +27,7 @@ from test_framework.util import (
|
||||||
wait_until,
|
wait_until,
|
||||||
)
|
)
|
||||||
|
|
||||||
MSG_LIMIT = 4 * 1000 * 1000 # 4MB, per MAX_PROTOCOL_MESSAGE_LENGTH
|
VALID_DATA_LIMIT = MAX_PROTOCOL_MESSAGE_LENGTH - 5 # Account for the 5-byte length prefix
|
||||||
VALID_DATA_LIMIT = MSG_LIMIT - 5 # Account for the 5-byte length prefix
|
|
||||||
|
|
||||||
class msg_unrecognized:
|
class msg_unrecognized:
|
||||||
"""Nonsensical message. Modeled after similar types in test_framework.messages."""
|
"""Nonsensical message. Modeled after similar types in test_framework.messages."""
|
||||||
|
@ -132,20 +134,23 @@ class InvalidMessagesTest(BitcoinTestFramework):
|
||||||
self.nodes[0].disconnect_p2ps()
|
self.nodes[0].disconnect_p2ps()
|
||||||
|
|
||||||
def test_oversized_inv_msg(self):
|
def test_oversized_inv_msg(self):
|
||||||
self.test_oversized_msg(msg_inv([CInv(MSG_TX, 1)] * 50001), 50001)
|
size = MAX_INV_SIZE + 1
|
||||||
|
self.test_oversized_msg(msg_inv([CInv(MSG_TX, 1)] * size), size)
|
||||||
|
|
||||||
def test_oversized_getdata_msg(self):
|
def test_oversized_getdata_msg(self):
|
||||||
self.test_oversized_msg(msg_getdata([CInv(MSG_TX, 1)] * 50001), 50001)
|
size = MAX_INV_SIZE + 1
|
||||||
|
self.test_oversized_msg(msg_getdata([CInv(MSG_TX, 1)] * size), size)
|
||||||
|
|
||||||
def test_oversized_headers_msg(self):
|
def test_oversized_headers_msg(self):
|
||||||
self.test_oversized_msg(msg_headers([CBlockHeader()] * 2001), 2001)
|
size = MAX_HEADERS_RESULTS + 1
|
||||||
|
self.test_oversized_msg(msg_headers([CBlockHeader()] * size), size)
|
||||||
|
|
||||||
def test_resource_exhaustion(self):
|
def test_resource_exhaustion(self):
|
||||||
self.log.info("Test node stays up despite many large junk messages")
|
self.log.info("Test node stays up despite many large junk messages")
|
||||||
conn = self.nodes[0].add_p2p_connection(P2PDataStore())
|
conn = self.nodes[0].add_p2p_connection(P2PDataStore())
|
||||||
conn2 = self.nodes[0].add_p2p_connection(P2PDataStore())
|
conn2 = self.nodes[0].add_p2p_connection(P2PDataStore())
|
||||||
msg_at_size = msg_unrecognized(str_data="b" * VALID_DATA_LIMIT)
|
msg_at_size = msg_unrecognized(str_data="b" * VALID_DATA_LIMIT)
|
||||||
assert len(msg_at_size.serialize()) == MSG_LIMIT
|
assert len(msg_at_size.serialize()) == MAX_PROTOCOL_MESSAGE_LENGTH
|
||||||
|
|
||||||
self.log.info("(a) Send 80 messages, each of maximum valid data size (4MB)")
|
self.log.info("(a) Send 80 messages, each of maximum valid data size (4MB)")
|
||||||
for _ in range(80):
|
for _ in range(80):
|
||||||
|
|
|
@ -45,6 +45,10 @@ MAX_MONEY = 21000000 * COIN
|
||||||
|
|
||||||
BIP125_SEQUENCE_NUMBER = 0xfffffffd # Sequence number that is BIP 125 opt-in and BIP 68-opt-out
|
BIP125_SEQUENCE_NUMBER = 0xfffffffd # Sequence number that is BIP 125 opt-in and BIP 68-opt-out
|
||||||
|
|
||||||
|
MAX_PROTOCOL_MESSAGE_LENGTH = 4000000 # Maximum length of incoming protocol messages
|
||||||
|
MAX_HEADERS_RESULTS = 2000 # Number of headers sent in one getheaders result
|
||||||
|
MAX_INV_SIZE = 50000 # Maximum number of entries in an 'inv' protocol message
|
||||||
|
|
||||||
NODE_NETWORK = (1 << 0)
|
NODE_NETWORK = (1 << 0)
|
||||||
NODE_GETUTXO = (1 << 1)
|
NODE_GETUTXO = (1 << 1)
|
||||||
NODE_BLOOM = (1 << 2)
|
NODE_BLOOM = (1 << 2)
|
||||||
|
|
|
@ -26,6 +26,7 @@ import threading
|
||||||
|
|
||||||
from test_framework.messages import (
|
from test_framework.messages import (
|
||||||
CBlockHeader,
|
CBlockHeader,
|
||||||
|
MAX_HEADERS_RESULTS,
|
||||||
MIN_VERSION_SUPPORTED,
|
MIN_VERSION_SUPPORTED,
|
||||||
msg_addr,
|
msg_addr,
|
||||||
msg_block,
|
msg_block,
|
||||||
|
@ -553,7 +554,6 @@ class P2PDataStore(P2PInterface):
|
||||||
return
|
return
|
||||||
|
|
||||||
headers_list = [self.block_store[self.last_block_hash]]
|
headers_list = [self.block_store[self.last_block_hash]]
|
||||||
maxheaders = 2000
|
|
||||||
while headers_list[-1].sha256 not in locator.vHave:
|
while headers_list[-1].sha256 not in locator.vHave:
|
||||||
# Walk back through the block store, adding headers to headers_list
|
# Walk back through the block store, adding headers to headers_list
|
||||||
# as we go.
|
# as we go.
|
||||||
|
@ -569,7 +569,7 @@ class P2PDataStore(P2PInterface):
|
||||||
break
|
break
|
||||||
|
|
||||||
# Truncate the list if there are too many headers
|
# Truncate the list if there are too many headers
|
||||||
headers_list = headers_list[:-maxheaders - 1:-1]
|
headers_list = headers_list[:-MAX_HEADERS_RESULTS - 1:-1]
|
||||||
response = msg_headers(headers_list)
|
response = msg_headers(headers_list)
|
||||||
|
|
||||||
if response is not None:
|
if response is not None:
|
||||||
|
|
Loading…
Add table
Reference in a new issue