test: cover -externalip/onlynet interaction in functional test

Extend p2p_addr_selfannouncement to restart the node with -onlynet=ipv4
-externalip=<onion> and verify the onion address appears in
localaddresses despite its network being unreachable.
This commit is contained in:
will
2026-03-20 11:52:35 +00:00
parent 657a5aa3f3
commit dab7f2c984

View File

@@ -23,6 +23,7 @@ from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import assert_equal, assert_greater_than
IP_TO_ANNOUNCE = "42.42.42.42"
ONION_ADDR = "pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion"
ONE_DAY = 60 * 60 * 24
@@ -77,6 +78,7 @@ class AddrSelfAnnouncementTest(BitcoinTestFramework):
self.self_announcement_test(outbound=False, addrv2=True)
self.self_announcement_test(outbound=True, addrv2=False)
self.self_announcement_test(outbound=True, addrv2=True)
self.test_externalip_bypasses_onlynet()
@staticmethod
def inbound_connection_open_assertions(addr_receiver):
@@ -150,5 +152,17 @@ class AddrSelfAnnouncementTest(BitcoinTestFramework):
self.nodes[0].disconnect_p2ps()
def test_externalip_bypasses_onlynet(self):
self.log.info("Test that -externalip onion is advertised despite -onlynet=ipv4")
self.restart_node(0, extra_args=["-onlynet=ipv4", f"-externalip={ONION_ADDR}"])
netinfo = self.nodes[0].getnetworkinfo()
onion_net = next(n for n in netinfo["networks"] if n["name"] == "onion")
assert not onion_net["reachable"], "onion should not be reachable under -onlynet=ipv4"
addrs = [a["address"] for a in netinfo["localaddresses"]]
assert ONION_ADDR in addrs, f"onion address missing from localaddresses: {addrs}"
if __name__ == '__main__':
AddrSelfAnnouncementTest(__file__).main()