Skip to content

Commit 62dc9cb

Browse files
committed
merge bitcoin#26381: Fix intermittent issue in p2p_sendtxrcncl.py
1 parent 6a7868d commit 62dc9cb

File tree

1 file changed

+23
-20
lines changed

1 file changed

+23
-20
lines changed

test/functional/p2p_sendtxrcncl.py

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
from test_framework.messages import (
99
msg_sendtxrcncl,
10-
msg_verack,
1110
msg_version,
1211
)
1312
from test_framework.p2p import (
@@ -103,37 +102,39 @@ def run_test(self):
103102
peer.send_message(create_sendtxrcncl_msg())
104103
self.wait_until(lambda : "sendtxrcncl" in self.nodes[0].getpeerinfo()[-1]["bytesrecv_per_msg"])
105104
self.log.info('second SENDTXRCNCL triggers a disconnect')
106-
peer.send_message(create_sendtxrcncl_msg())
107-
peer.wait_for_disconnect()
105+
with self.nodes[0].assert_debug_log(["(sendtxrcncl received from already registered peer); disconnecting"]):
106+
peer.send_message(create_sendtxrcncl_msg())
107+
peer.wait_for_disconnect()
108108

109109
self.log.info('SENDTXRCNCL with initiator=responder=0 triggers a disconnect')
110110
sendtxrcncl_no_role = create_sendtxrcncl_msg()
111111
sendtxrcncl_no_role.initiator = False
112112
sendtxrcncl_no_role.responder = False
113113
peer = self.nodes[0].add_p2p_connection(PeerNoVerack(), send_version=True, wait_for_verack=False)
114-
peer.send_message(sendtxrcncl_no_role)
115-
peer.wait_for_disconnect()
114+
with self.nodes[0].assert_debug_log(["txreconciliation protocol violation"]):
115+
peer.send_message(sendtxrcncl_no_role)
116+
peer.wait_for_disconnect()
116117

117118
self.log.info('SENDTXRCNCL with initiator=0 and responder=1 from inbound triggers a disconnect')
118119
sendtxrcncl_wrong_role = create_sendtxrcncl_msg(initiator=False)
119120
peer = self.nodes[0].add_p2p_connection(PeerNoVerack(), send_version=True, wait_for_verack=False)
120-
peer.send_message(sendtxrcncl_wrong_role)
121-
peer.wait_for_disconnect()
121+
with self.nodes[0].assert_debug_log(["txreconciliation protocol violation"]):
122+
peer.send_message(sendtxrcncl_wrong_role)
123+
peer.wait_for_disconnect()
122124

123125
self.log.info('SENDTXRCNCL with version=0 triggers a disconnect')
124126
sendtxrcncl_low_version = create_sendtxrcncl_msg()
125127
sendtxrcncl_low_version.version = 0
126128
peer = self.nodes[0].add_p2p_connection(PeerNoVerack(), send_version=True, wait_for_verack=False)
127-
peer.send_message(sendtxrcncl_low_version)
128-
peer.wait_for_disconnect()
129+
with self.nodes[0].assert_debug_log(["txreconciliation protocol violation"]):
130+
peer.send_message(sendtxrcncl_low_version)
131+
peer.wait_for_disconnect()
129132

130133
self.log.info('sending SENDTXRCNCL after sending VERACK triggers a disconnect')
131-
# We use PeerNoVerack even though verack is sent right after, to make sure it was actually
132-
# sent before sendtxrcncl is sent.
133-
peer = self.nodes[0].add_p2p_connection(PeerNoVerack(), send_version=True, wait_for_verack=False)
134-
peer.send_and_ping(msg_verack())
135-
peer.send_message(create_sendtxrcncl_msg())
136-
peer.wait_for_disconnect()
134+
peer = self.nodes[0].add_p2p_connection(P2PInterface())
135+
with self.nodes[0].assert_debug_log(["sendtxrcncl received after verack"]):
136+
peer.send_message(create_sendtxrcncl_msg())
137+
peer.wait_for_disconnect()
137138

138139
self.log.info('SENDTXRCNCL sent to an outbound')
139140
peer = self.nodes[0].add_outbound_p2p_connection(
@@ -153,15 +154,17 @@ def run_test(self):
153154
self.log.info('SENDTXRCNCL if block-relay-only triggers a disconnect')
154155
peer = self.nodes[0].add_outbound_p2p_connection(
155156
PeerNoVerack(), wait_for_verack=False, p2p_idx=3, connection_type="block-relay-only")
156-
peer.send_message(create_sendtxrcncl_msg(initiator=False))
157-
peer.wait_for_disconnect()
157+
with self.nodes[0].assert_debug_log(["we indicated no tx relay; disconnecting"]):
158+
peer.send_message(create_sendtxrcncl_msg(initiator=False))
159+
peer.wait_for_disconnect()
158160

159161
self.log.info('SENDTXRCNCL with initiator=1 and responder=0 from outbound triggers a disconnect')
160162
sendtxrcncl_wrong_role = create_sendtxrcncl_msg(initiator=True)
161163
peer = self.nodes[0].add_outbound_p2p_connection(
162-
P2PInterface(), wait_for_verack=False, p2p_idx=4, connection_type="outbound-full-relay")
163-
peer.send_message(sendtxrcncl_wrong_role)
164-
peer.wait_for_disconnect()
164+
PeerNoVerack(), wait_for_verack=False, p2p_idx=4, connection_type="outbound-full-relay")
165+
with self.nodes[0].assert_debug_log(["txreconciliation protocol violation"]):
166+
peer.send_message(sendtxrcncl_wrong_role)
167+
peer.wait_for_disconnect()
165168

166169
self.log.info('SENDTXRCNCL not sent if -txreconciliation flag is not set')
167170
self.restart_node(0, [])

0 commit comments

Comments
 (0)