aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorGleb Naumenko <naumenko.gs@gmail.com>2022-09-19 17:11:32 +0300
committerGleb Naumenko <naumenko.gs@gmail.com>2022-10-17 12:36:14 +0300
commite56d1d2afdd477be6dd462d838617d385bac5d7b (patch)
tree6e25be8386ea93adee599a7cba922ffe32a05668 /test
parentcfcef60779e62bcb81243e0bb8ffc8abb5b5baf5 (diff)
downloadbitcoin-e56d1d2afdd477be6dd462d838617d385bac5d7b.tar.xz
test: Add functional tests for sendtxrcncl message from outbound
Diffstat (limited to 'test')
-rwxr-xr-xtest/functional/p2p_sendtxrcncl.py28
-rwxr-xr-xtest/functional/test_framework/test_node.py7
2 files changed, 32 insertions, 3 deletions
diff --git a/test/functional/p2p_sendtxrcncl.py b/test/functional/p2p_sendtxrcncl.py
index 3b0162b44d..f4c5dd4586 100755
--- a/test/functional/p2p_sendtxrcncl.py
+++ b/test/functional/p2p_sendtxrcncl.py
@@ -146,6 +146,34 @@ class SendTxRcnclTest(BitcoinTestFramework):
peer.send_message(msg_verack())
peer.peer_disconnect()
+ self.log.info('SENDTXRCNCL sent to an outbound')
+ peer = self.nodes[0].add_outbound_p2p_connection(
+ SendTxrcnclReceiver(), wait_for_verack=True, p2p_idx=1, connection_type="outbound-full-relay")
+ assert peer.sendtxrcncl_msg_received
+ assert peer.sendtxrcncl_msg_received.initiator
+ assert not peer.sendtxrcncl_msg_received.responder
+ assert_equal(peer.sendtxrcncl_msg_received.version, 1)
+ peer.peer_disconnect()
+
+ self.log.info('SENDTXRCNCL should not be sent if block-relay-only')
+ peer = self.nodes[0].add_outbound_p2p_connection(
+ SendTxrcnclReceiver(), wait_for_verack=True, p2p_idx=2, connection_type="block-relay-only")
+ assert not peer.sendtxrcncl_msg_received
+ peer.peer_disconnect()
+
+ self.log.info('SENDTXRCNCL if block-relay-only triggers a disconnect')
+ peer = self.nodes[0].add_outbound_p2p_connection(
+ PeerNoVerack(), wait_for_verack=False, p2p_idx=3, connection_type="block-relay-only")
+ peer.send_message(create_sendtxrcncl_msg(initiator=False))
+ peer.wait_for_disconnect()
+
+ self.log.info('SENDTXRCNCL with initiator=1 and responder=0 from outbound triggers a disconnect')
+ sendtxrcncl_wrong_role = create_sendtxrcncl_msg(initiator=True)
+ peer = self.nodes[0].add_outbound_p2p_connection(
+ P2PInterface(), wait_for_verack=False, p2p_idx=4, connection_type="outbound-full-relay")
+ peer.send_message(sendtxrcncl_wrong_role)
+ peer.wait_for_disconnect()
+
self.log.info('SENDTXRCNCL not sent if -txreconciliation flag is not set')
self.restart_node(0, [])
peer = self.nodes[0].add_p2p_connection(SendTxrcnclReceiver(), send_version=True, wait_for_verack=True)
diff --git a/test/functional/test_framework/test_node.py b/test/functional/test_framework/test_node.py
index e35cae006f..2367a9a8fa 100755
--- a/test/functional/test_framework/test_node.py
+++ b/test/functional/test_framework/test_node.py
@@ -618,7 +618,7 @@ class TestNode():
return p2p_conn
- def add_outbound_p2p_connection(self, p2p_conn, *, p2p_idx, connection_type="outbound-full-relay", **kwargs):
+ def add_outbound_p2p_connection(self, p2p_conn, *, wait_for_verack=True, p2p_idx, connection_type="outbound-full-relay", **kwargs):
"""Add an outbound p2p connection from node. Must be an
"outbound-full-relay", "block-relay-only", "addr-fetch" or "feeler" connection.
@@ -640,8 +640,9 @@ class TestNode():
p2p_conn.wait_for_connect()
self.p2ps.append(p2p_conn)
- p2p_conn.wait_for_verack()
- p2p_conn.sync_with_ping()
+ if wait_for_verack:
+ p2p_conn.wait_for_verack()
+ p2p_conn.sync_with_ping()
return p2p_conn