From bc40287ade03635ec66183de967bc6cfd1b681de Mon Sep 17 00:00:00 2001 From: Michael Schmoock Date: Tue, 26 Jan 2021 19:35:33 +0100 Subject: [PATCH] pytest: peer_connected chainable tests --- tests/plugins/peer_connected_logger_a.py | 17 ++++++++++++++ tests/plugins/peer_connected_logger_b.py | 17 ++++++++++++++ tests/test_plugin.py | 30 ++++++++++++++++++------ 3 files changed, 57 insertions(+), 7 deletions(-) create mode 100755 tests/plugins/peer_connected_logger_a.py create mode 100755 tests/plugins/peer_connected_logger_b.py diff --git a/tests/plugins/peer_connected_logger_a.py b/tests/plugins/peer_connected_logger_a.py new file mode 100755 index 000000000..ae31b998a --- /dev/null +++ b/tests/plugins/peer_connected_logger_a.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 +"""Simple plugin to log the connected_hook. + +""" + +from pyln.client import Plugin + +plugin = Plugin() + + +@plugin.hook('peer_connected') +def on_connected(peer, plugin, **kwargs): + print("peer_connected_logger_a {}".format(peer['id'])) + return {'result': 'continue'} + + +plugin.run() diff --git a/tests/plugins/peer_connected_logger_b.py b/tests/plugins/peer_connected_logger_b.py new file mode 100755 index 000000000..1f0b5f6a2 --- /dev/null +++ b/tests/plugins/peer_connected_logger_b.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 +"""Simple plugin to log the connected_hook. + +""" + +from pyln.client import Plugin + +plugin = Plugin() + + +@plugin.hook('peer_connected') +def on_connected(peer, plugin, **kwargs): + print("peer_connected_logger_b {}".format(peer['id'])) + return {'result': 'continue'} + + +plugin.run() diff --git a/tests/test_plugin.py b/tests/test_plugin.py index a391ed6b2..64f10b378 100644 --- a/tests/test_plugin.py +++ b/tests/test_plugin.py @@ -392,31 +392,47 @@ def test_pay_plugin(node_factory): assert only_one(l1.rpc.help('pay')['help'])['command'] == msg -def test_plugin_connected_hook(node_factory): - """ l1 uses the reject plugin to reject connections. +def test_plugin_connected_hook_chaining(node_factory): + """ l1 uses the logger_a, reject and logger_b plugin. l1 is configured to accept connections from l2, but not from l3. + we check that logger_a is always called and logger_b only for l2. """ - opts = [{'plugin': os.path.join(os.getcwd(), 'tests/plugins/reject.py')}, {}, {}] + opts = [{'plugin': [ + os.path.join(os.getcwd(), 'tests/plugins/peer_connected_logger_a.py'), + os.path.join(os.getcwd(), 'tests/plugins/reject.py'), + os.path.join(os.getcwd(), 'tests/plugins/peer_connected_logger_b.py'), + ]}, {}, {}] + l1, l2, l3 = node_factory.get_nodes(3, opts=opts) + l2id = l2.info['id'] + l3id = l3.info['id'] l1.rpc.reject(l3.info['id']) l2.connect(l1) - l1.daemon.wait_for_log(r"{} is allowed".format(l2.info['id'])) - assert len(l1.rpc.listpeers(l2.info['id'])['peers']) == 1 + l1.daemon.wait_for_logs([ + f"peer_connected_logger_a {l2id}", + f"{l2id} is allowed", + f"peer_connected_logger_b {l2id}" + ]) + assert len(l1.rpc.listpeers(l2id)['peers']) == 1 l3.connect(l1) - l1.daemon.wait_for_log(r"{} is in reject list".format(l3.info['id'])) + l1.daemon.wait_for_logs([ + f"peer_connected_logger_a {l3id}", + f"{l3id} is in reject list" + ]) # FIXME: this error occurs *after* connection, so we connect then drop. l3.daemon.wait_for_log(r"chan#1: peer_in WIRE_ERROR") l3.daemon.wait_for_log(r"You are in reject list") def check_disconnect(): - peers = l1.rpc.listpeers(l3.info['id'])['peers'] + peers = l1.rpc.listpeers(l3id)['peers'] return peers == [] or not peers[0]['connected'] wait_for(check_disconnect) + assert not l3.daemon.is_in_log(f"peer_connected_logger_b {l3id}") def test_async_rpcmethod(node_factory, executor):