test: move abortprivatebroadcast test at the end
The piece of p2p_private_broadcast.py which tests the correctness of
abortprivatebroadcast issues a new sendrawtransaction call. That
call schedules up to 3 new connections: peer=13, peer=14 and possibly
peer=15 before it gets aborted.
These up to 3 in-the-process-of-opening private broadcast connections
have CNode::m_connected set early - when the CNode object is
created. Later in the test the mock time is advanced by 20 minutes and
those "old" connections pick a transaction for rebroadcast but that
triggers PRIVATE_BROADCAST_MAX_CONNECTION_LIFETIME immediately:
2026-02-21T13:28:14.209766Z [privbcast] [net.cpp:4006] [CNode] [net] Added connection peer=20
2026-02-21T13:28:14.309792Z (mocktime: 2026-02-21T13:48:14Z) [msghand] [net.cpp:4074] [PushMessage] [net] sending inv (37 bytes) peer=20
2026-02-21T13:28:14.309801Z (mocktime: 2026-02-21T13:48:14Z) [msghand] [net_processing.cpp:5745] [SendMessages] [privatebroadcast] Disconnecting: did not complete the transaction send within 180 seconds, peer=20
This prematurely stops the private broadcast connection and results in a failure like:
AssertionError: ... not({} == {'ping': 1, 'tx': 1})
test: don't always assert NUM_PRIVATE_BROADCAST_PER_TX broadcasts
In p2p_private_broadcast.py in the function check_broadcasts() we
should assert that the broadcast was done to broadcasts_to_expect
peers, not to NUM_PRIVATE_BROADCAST_PER_TX. This is because in the
"Basic" test we check the first broadcast manually because it is done to
nodes[1] and then check the other two by
check_broadcasts(..., NUM_PRIVATE_BROADCAST_PER_TX - 1, ...).
The first broadcast might not have fully concluded by the time we call
check_broadcasts() to check the remaining 2.
Demanding always NUM_PRIVATE_BROADCAST_PER_TX can lead to:
Traceback (most recent call last):
File "/home/vd/gh/bitcoin/bitcoin/test/functional/test_framework/test_framework.py", line 142, in main
self.run_test()
~~~~~~~~~~~~~^^
File "/tmp/build/clang22/test/functional/p2p_private_broadcast.py", line 347, in run_test
self.check_broadcasts("Basic", txs[0], NUM_PRIVATE_BROADCAST_PER_TX - 1, NUM_INITIAL_CONNECTIONS + 1)
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/build/clang22/test/functional/p2p_private_broadcast.py", line 313, in check_broadcasts
assert_greater_than_or_equal(sum(1 for p in peers if "received" in p), NUM_PRIVATE_BROADCAST_PER_TX)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/vd/gh/bitcoin/bitcoin/test/functional/test_framework/util.py", line 94, in assert_greater_than_or_equal
raise AssertionError("%s < %s" % (str(thing1), str(thing2)))
AssertionError: 2 < 3