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:
02026-02-21T13:28:14.209766Z [privbcast] [net.cpp:4006] [CNode] [net] Added connection peer=20
12026-02-21T13:28:14.309792Z (mocktime: 2026-02-21T13:48:14Z) [msghand] [net.cpp:4074] [PushMessage] [net] sending inv (37 bytes) peer=20
22026-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:
0AssertionError: ... 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:
0Traceback (most recent call last):
1 File "/home/vd/gh/bitcoin/bitcoin/test/functional/test_framework/test_framework.py", line 142, in main
2 self.run_test()
3 ~~~~~~~~~~~~~^^
4 File "/tmp/build/clang22/test/functional/p2p_private_broadcast.py", line 347, in run_test
5 self.check_broadcasts("Basic", txs[0], NUM_PRIVATE_BROADCAST_PER_TX - 1, NUM_INITIAL_CONNECTIONS + 1)
6 ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7 File "/tmp/build/clang22/test/functional/p2p_private_broadcast.py", line 313, in check_broadcasts
8 assert_greater_than_or_equal(sum(1 for p in peers if "received" in p), NUM_PRIVATE_BROADCAST_PER_TX)
9 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10 File "/home/vd/gh/bitcoin/bitcoin/test/functional/test_framework/util.py", line 94, in assert_greater_than_or_equal
11 raise AssertionError("%s < %s" % (str(thing1), str(thing2)))
12AssertionError: 2 < 3