Skip to content

Commit 9f2c2db

Browse files
author
MarcoFalke
committed
Merge #11712: [tests] Split NodeConn from NodeConnCB
e9dfa9b [tests] Move version message sending from NodeConn to NodeConnCB (John Newbery) dad596f [tests] Make NodeConnCB a subclass of NodeConn (John Newbery) e30d404 [tests] Move only: move NodeConnCB below NodeConn (John Newbery) 4d50598 [tests] Tidy up mininode (John Newbery) f2ae6f3 [tests] Remove mininode periodic (half-hour) ping messages (John Newbery) ec59523 [tests] Remove rpc property from TestNode in p2p-segwit.py. (John Newbery) Pull request description: This is the final step in #11518, except for possibly renaming - for motivation, please see that PR. If this is merged, then migrating the test framework from asyncore to asyncio should be easier (I say should because I haven't dug too deeply into what would be required). Requesting review from @ryanofsky , since he always has good feedback on these refactor PRs, and I'd appreciate his take on this refactor. Note particularly that I've reverted the change suggested here: bitcoin/bitcoin#11182 (comment) . The idea, as always, is to present a simple interface to the test writer. Tree-SHA512: 94dd467a13ec799b101108cf47d4dccb6f6240b601e375e3d785313333bbb389c26072a50759aca663bbf3d6c8b867b99e36ae8800ab8ea115e0496c151926ce
2 parents 32c9b57 + e9dfa9b commit 9f2c2db

14 files changed

+452
-434
lines changed

test/functional/assumevalid.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ def setup_network(self):
6767
def send_blocks_until_disconnected(self, p2p_conn):
6868
"""Keep sending blocks to the node until we're disconnected."""
6969
for i in range(len(self.blocks)):
70-
if not p2p_conn.connection:
70+
if p2p_conn.state != "connected":
7171
break
7272
try:
7373
p2p_conn.send_message(msg_block(self.blocks[i]))

test/functional/bip9-softforks.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ def test_BIP(self, bipName, activated_version, invalidate, invalidatePostSignatu
246246
self.setup_network()
247247
self.test.add_all_connections(self.nodes)
248248
NetworkThread().start()
249-
self.test.test_nodes[0].wait_for_verack()
249+
self.test.p2p_connections[0].wait_for_verack()
250250

251251
def get_tests(self):
252252
for test in itertools.chain(

test/functional/example_test.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,14 @@ def __init__(self):
4949
# Stores a dictionary of all blocks received
5050
self.block_receive_map = defaultdict(int)
5151

52-
def on_block(self, conn, message):
52+
def on_block(self, message):
5353
"""Override the standard on_block callback
5454
5555
Store the hash of a received block in the dictionary."""
5656
message.block.calc_sha256()
5757
self.block_receive_map[message.block.sha256] += 1
5858

59-
def on_inv(self, conn, message):
59+
def on_inv(self, message):
6060
"""Override the standard on_inv callback"""
6161
pass
6262

test/functional/maxuploadtarget.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@ def __init__(self):
2222
super().__init__()
2323
self.block_receive_map = defaultdict(int)
2424

25-
def on_inv(self, conn, message):
25+
def on_inv(self, message):
2626
pass
2727

28-
def on_block(self, conn, message):
28+
def on_block(self, message):
2929
message.block.calc_sha256()
3030
self.block_receive_map[message.block.sha256] += 1
3131

test/functional/p2p-compactblocks.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,21 +25,21 @@ def __init__(self):
2525
# so we can eg wait until a particular block is announced.
2626
self.announced_blockhashes = set()
2727

28-
def on_sendcmpct(self, conn, message):
28+
def on_sendcmpct(self, message):
2929
self.last_sendcmpct.append(message)
3030

31-
def on_cmpctblock(self, conn, message):
31+
def on_cmpctblock(self, message):
3232
self.block_announced = True
3333
self.last_message["cmpctblock"].header_and_shortids.header.calc_sha256()
3434
self.announced_blockhashes.add(self.last_message["cmpctblock"].header_and_shortids.header.sha256)
3535

36-
def on_headers(self, conn, message):
36+
def on_headers(self, message):
3737
self.block_announced = True
3838
for x in self.last_message["headers"].headers:
3939
x.calc_sha256()
4040
self.announced_blockhashes.add(x.sha256)
4141

42-
def on_inv(self, conn, message):
42+
def on_inv(self, message):
4343
for x in self.last_message["inv"].inv:
4444
if x.type == 2:
4545
self.block_announced = True
@@ -60,7 +60,7 @@ def get_headers(self, locator, hashstop):
6060
msg = msg_getheaders()
6161
msg.locator.vHave = locator
6262
msg.hashstop = hashstop
63-
self.connection.send_message(msg)
63+
self.send_message(msg)
6464

6565
def send_header_for_blocks(self, new_blocks):
6666
headers_message = msg_headers()
@@ -86,7 +86,7 @@ def send_await_disconnect(self, message, timeout=30):
8686
This is used when we want to send a message into the node that we expect
8787
will get us disconnected, eg an invalid block."""
8888
self.send_message(message)
89-
wait_until(lambda: not self.connected, timeout=timeout, lock=mininode_lock)
89+
wait_until(lambda: self.state != "connected", timeout=timeout, lock=mininode_lock)
9090

9191
class CompactBlocksTest(BitcoinTestFramework):
9292
def set_test_params(self):

test/functional/p2p-feefilter.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def __init__(self):
2727
super().__init__()
2828
self.txinvs = []
2929

30-
def on_inv(self, conn, message):
30+
def on_inv(self, message):
3131
for i in message.inv:
3232
if (i.type == 1):
3333
self.txinvs.append(hashToHex(i.hash))

test/functional/p2p-leaktests.py

Lines changed: 33 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -30,43 +30,42 @@ def bad_message(self, message):
3030
self.unexpected_msg = True
3131
self.log.info("should not have received message: %s" % message.command)
3232

33-
def on_open(self, conn):
34-
self.connected = True
33+
def on_open(self):
3534
self.ever_connected = True
3635

37-
def on_version(self, conn, message): self.bad_message(message)
38-
def on_verack(self, conn, message): self.bad_message(message)
39-
def on_reject(self, conn, message): self.bad_message(message)
40-
def on_inv(self, conn, message): self.bad_message(message)
41-
def on_addr(self, conn, message): self.bad_message(message)
42-
def on_getdata(self, conn, message): self.bad_message(message)
43-
def on_getblocks(self, conn, message): self.bad_message(message)
44-
def on_tx(self, conn, message): self.bad_message(message)
45-
def on_block(self, conn, message): self.bad_message(message)
46-
def on_getaddr(self, conn, message): self.bad_message(message)
47-
def on_headers(self, conn, message): self.bad_message(message)
48-
def on_getheaders(self, conn, message): self.bad_message(message)
49-
def on_ping(self, conn, message): self.bad_message(message)
50-
def on_mempool(self, conn): self.bad_message(message)
51-
def on_pong(self, conn, message): self.bad_message(message)
52-
def on_feefilter(self, conn, message): self.bad_message(message)
53-
def on_sendheaders(self, conn, message): self.bad_message(message)
54-
def on_sendcmpct(self, conn, message): self.bad_message(message)
55-
def on_cmpctblock(self, conn, message): self.bad_message(message)
56-
def on_getblocktxn(self, conn, message): self.bad_message(message)
57-
def on_blocktxn(self, conn, message): self.bad_message(message)
36+
def on_version(self, message): self.bad_message(message)
37+
def on_verack(self, message): self.bad_message(message)
38+
def on_reject(self, message): self.bad_message(message)
39+
def on_inv(self, message): self.bad_message(message)
40+
def on_addr(self, message): self.bad_message(message)
41+
def on_getdata(self, message): self.bad_message(message)
42+
def on_getblocks(self, message): self.bad_message(message)
43+
def on_tx(self, message): self.bad_message(message)
44+
def on_block(self, message): self.bad_message(message)
45+
def on_getaddr(self, message): self.bad_message(message)
46+
def on_headers(self, message): self.bad_message(message)
47+
def on_getheaders(self, message): self.bad_message(message)
48+
def on_ping(self, message): self.bad_message(message)
49+
def on_mempool(self, message): self.bad_message(message)
50+
def on_pong(self, message): self.bad_message(message)
51+
def on_feefilter(self, message): self.bad_message(message)
52+
def on_sendheaders(self, message): self.bad_message(message)
53+
def on_sendcmpct(self, message): self.bad_message(message)
54+
def on_cmpctblock(self, message): self.bad_message(message)
55+
def on_getblocktxn(self, message): self.bad_message(message)
56+
def on_blocktxn(self, message): self.bad_message(message)
5857

5958
# Node that never sends a version. We'll use this to send a bunch of messages
6059
# anyway, and eventually get disconnected.
6160
class CNodeNoVersionBan(CLazyNode):
6261
# send a bunch of veracks without sending a message. This should get us disconnected.
6362
# NOTE: implementation-specific check here. Remove if bitcoind ban behavior changes
64-
def on_open(self, conn):
65-
super().on_open(conn)
63+
def on_open(self):
64+
super().on_open()
6665
for i in range(banscore):
6766
self.send_message(msg_verack())
6867

69-
def on_reject(self, conn, message): pass
68+
def on_reject(self, message): pass
7069

7170
# Node that never sends a version. This one just sits idle and hopes to receive
7271
# any message (it shouldn't!)
@@ -80,15 +79,15 @@ def __init__(self):
8079
self.version_received = False
8180
super().__init__()
8281

83-
def on_reject(self, conn, message): pass
84-
def on_verack(self, conn, message): pass
82+
def on_reject(self, message): pass
83+
def on_verack(self, message): pass
8584
# When version is received, don't reply with a verack. Instead, see if the
8685
# node will give us a message that it shouldn't. This is not an exhaustive
8786
# list!
88-
def on_version(self, conn, message):
87+
def on_version(self, message):
8988
self.version_received = True
90-
conn.send_message(msg_ping())
91-
conn.send_message(msg_getaddr())
89+
self.send_message(msg_ping())
90+
self.send_message(msg_getaddr())
9291

9392
class P2PLeakTest(BitcoinTestFramework):
9493
def set_test_params(self):
@@ -119,11 +118,11 @@ def run_test(self):
119118
time.sleep(5)
120119

121120
#This node should have been banned
122-
assert not no_version_bannode.connected
121+
assert no_version_bannode.state != "connected"
123122

124123
# These nodes should have been disconnected
125-
assert not unsupported_service_bit5_node.connected
126-
assert not unsupported_service_bit7_node.connected
124+
assert unsupported_service_bit5_node.state != "connected"
125+
assert unsupported_service_bit7_node.state != "connected"
127126

128127
self.nodes[0].disconnect_p2ps()
129128

0 commit comments

Comments
 (0)