Skip to content

Commit 20b4946

Browse files
vasildMarcoFalkejonatack
committed
test: remove race in the user-agent reception check
In `add_p2p_connection()` we connect to `bitcoind` from the Python client and check that it has received our version string. This check looked up the last/newest entry from `getpeerinfo` RPC, assuming that it must be the connection we have just opened. But this will not be the case if a new inbound or outbound connection is made to/from `bitcoind` in the meantime. Instead of the last entry in `getpeerinfo`, check all and find the one which corresponds to our connection using our outgoing address:port tuple which is unique. Co-authored-by: MarcoFalke <*~=`'#}+{/-|&$^[email protected]> Co-authored-by: Jon Atack <[email protected]>
1 parent d9c7c2f commit 20b4946

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

test/functional/test_framework/test_node.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -633,10 +633,13 @@ def add_p2p_connection(self, p2p_conn, *, wait_for_verack=True, **kwargs):
633633
# in comparison to the upside of making tests less fragile and unexpected intermittent errors less likely.
634634
p2p_conn.sync_with_ping()
635635

636-
# Consistency check that the Bitcoin Core has received our user agent string. This checks the
637-
# node's newest peer. It could be racy if another Bitcoin Core node has connected since we opened
638-
# our connection, but we don't expect that to happen.
639-
assert_equal(self.getpeerinfo()[-1]['subver'], P2P_SUBVERSION)
636+
# Consistency check that the node received our user agent string.
637+
# Find our connection in getpeerinfo by our address:port, as it is unique.
638+
sockname = p2p_conn._transport.get_extra_info("socket").getsockname()
639+
our_addr_and_port = f"{sockname[0]}:{sockname[1]}"
640+
info = [peer for peer in self.getpeerinfo() if peer["addr"] == our_addr_and_port]
641+
assert_equal(len(info), 1)
642+
assert_equal(info[0]["subver"], P2P_SUBVERSION)
640643

641644
return p2p_conn
642645

0 commit comments

Comments
 (0)