diff --git a/tests/plugins/peer_connected_logger_a.py b/tests/plugins/peer_connected_logger_a.py index ae31b998a..5ded23068 100755 --- a/tests/plugins/peer_connected_logger_a.py +++ b/tests/plugins/peer_connected_logger_a.py @@ -10,7 +10,7 @@ plugin = Plugin() @plugin.hook('peer_connected') def on_connected(peer, plugin, **kwargs): - print("peer_connected_logger_a {}".format(peer['id'])) + print(f"peer_connected_logger_a {peer['id']} {peer}") return {'result': 'continue'} diff --git a/tests/plugins/peer_connected_logger_b.py b/tests/plugins/peer_connected_logger_b.py index 1f0b5f6a2..8b92076b1 100755 --- a/tests/plugins/peer_connected_logger_b.py +++ b/tests/plugins/peer_connected_logger_b.py @@ -10,7 +10,7 @@ plugin = Plugin() @plugin.hook('peer_connected') def on_connected(peer, plugin, **kwargs): - print("peer_connected_logger_b {}".format(peer['id'])) + print(f"peer_connected_logger_b {peer['id']} {peer}") return {'result': 'continue'} diff --git a/tests/test_connection.py b/tests/test_connection.py index 701507c7d..2ba68c955 100644 --- a/tests/test_connection.py +++ b/tests/test_connection.py @@ -48,6 +48,9 @@ def test_connect(node_factory): assert len(l1.rpc.listpeers()) == 1 assert len(l2.rpc.listpeers()) == 1 + if EXPERIMENTAL_FEATURES: + l1.daemon.wait_for_log("Peer says it sees our address as: 127.0.0.1:[0-9]{5}") + # Should get reasonable error if unknown addr for peer. with pytest.raises(RpcError, match=r'Unable to connect, no address known'): l1.rpc.connect('032cf15d1ad9c4a08d26eab1918f732d8ef8fdc6abb9640bf3db174372c491304e') diff --git a/tests/test_plugin.py b/tests/test_plugin.py index cec3b8ec3..2a54c92c2 100644 --- a/tests/test_plugin.py +++ b/tests/test_plugin.py @@ -10,7 +10,7 @@ from utils import ( DEPRECATED_APIS, expected_peer_features, expected_node_features, expected_channel_features, account_balance, check_coin_moves, first_channel_id, EXPERIMENTAL_DUAL_FUND, - mine_funding_to_announce + mine_funding_to_announce, EXPERIMENTAL_FEATURES ) import ast @@ -451,6 +451,31 @@ def test_plugin_connected_hook_chaining(node_factory): assert not l1.daemon.is_in_log(f"peer_connected_logger_b {l3id}") +@unittest.skipIf(not EXPERIMENTAL_FEATURES, "BOLT1 remote_addr #917") +def test_peer_connected_remote_addr(node_factory): + """This tests the optional tlv `remote_addr` being passed to a plugin. + + The optional tlv `remote_addr` should only be visible to the initiator l1. + """ + l1, l2 = node_factory.get_nodes(2, opts={'plugin': os.path.join(os.getcwd(), 'tests/plugins/peer_connected_logger_a.py')}) + l1id = l1.info['id'] + l2id = l2.info['id'] + + l1.connect(l2) + l1log = l1.daemon.wait_for_log(f"peer_connected_logger_a {l2id}") + l2log = l2.daemon.wait_for_log(f"peer_connected_logger_a {l1id}") + + # the log entries are followed by the peer_connected payload as dict {} like: + # {'id': '022d223...', 'direction': 'out', 'addr': '127.0.0.1:35289', + # 'remote_addr': '127.0.0.1:59582', 'features': '8808226aa2'} + l1payload = eval(l1log[l1log.find('{'):]) + l2payload = eval(l2log[l2log.find('{'):]) + + # check that l1 sees its remote_addr as l2 sees l1 + assert(l1payload['remote_addr'] == l2payload['addr']) + assert(not l2payload.get('remote_addr')) # l2 can't see a remote_addr + + def test_async_rpcmethod(node_factory, executor): """This tests the async rpcmethods.