failure_onion: a test that only ensures lightningd doesn't crash.

This commit is contained in:
fiatjaf 2020-11-10 09:24:08 -03:00 committed by neil saitug
parent 9e4bed73d9
commit c5aa2ea911
2 changed files with 40 additions and 0 deletions

View file

@ -0,0 +1,29 @@
#!/usr/bin/env python3
"""A simply plugin that fails HTLCs with a meaningless onion.
"""
from pyln.client import Plugin
plugin = Plugin()
@plugin.hook("htlc_accepted")
def on_htlc_accepted(htlc, onion, plugin, **kwargs):
print('returning failonion', plugin.failonion)
return {"result": "fail", "failure_onion": plugin.failonion}
@plugin.method("setfailonion")
def setfailonion(plugin, onion):
"""Sets the failure_onion to return when receiving an incoming HTLC.
"""
plugin.failonion = onion
@plugin.init()
def on_init(**kwargs):
plugin.failonion = None
plugin.run()

View file

@ -2135,3 +2135,14 @@ def test_hook_dep_stable(node_factory):
l2.daemon.wait_for_log(r"dep_d.py: htlc_accepted called")
l2.daemon.wait_for_log(r"dep_e.py: htlc_accepted called")
l2.daemon.wait_for_log(r"dep_b.py: htlc_accepted called")
def test_htlc_accepted_hook_failonion(node_factory):
plugin = os.path.join(os.path.dirname(__file__), 'plugins/htlc_accepted-failonion.py')
l1, l2 = node_factory.line_graph(2, opts=[{}, {'plugin': plugin}])
# an invalid onion
l2.rpc.setfailonion('0' * (292 * 2))
inv = l2.rpc.invoice(42, 'failonion000', '')['bolt11']
with pytest.raises(RpcError):
l1.rpc.pay(inv)