pytest: test that we translate to and from Millisatoshi on plugin RPC.

We don't, but we should, like we do for normal RPC.  However, I chose
to use function annotations, rather than names-ending-in-'msat'
because it's more Pythony.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
Rusty Russell 2019-02-25 14:45:56 +10:30
parent 1982c73ebc
commit c7316d7ba2
2 changed files with 42 additions and 1 deletions

23
tests/plugins/millisatoshis.py Executable file
View file

@ -0,0 +1,23 @@
#!/usr/bin/env python3
from lightning import Plugin, Millisatoshi
plugin = Plugin(autopatch=True)
@plugin.method("echo")
def echo(plugin, msat: Millisatoshi, not_an_msat):
plugin.log("got echo for {} {} (types {} and {})"
.format(msat, not_an_msat, type(msat), type(not_an_msat)))
if not isinstance(msat, Millisatoshi):
raise TypeError("msat must be Millisatoshi not {}".format(type(msat)))
if isinstance(not_an_msat, Millisatoshi):
raise TypeError("not_an_msat must not be Millisatoshi")
plugin.log("got echo for {} (type {})".format(msat, type(msat)))
if not isinstance(msat, Millisatoshi):
raise TypeError("msat must be Millisatoshi not {}".format(type(msat)))
plugin.log("Returning {}".format(msat))
return {'echo_msat': msat}
plugin.run()

View file

@ -1,6 +1,6 @@
from collections import OrderedDict
from fixtures import * # noqa: F401,F403
from lightning import RpcError
from lightning import RpcError, Millisatoshi
from utils import only_one
import pytest
@ -34,6 +34,24 @@ def test_option_passthrough(node_factory):
n.stop()
@pytest.mark.xfail(strict=True)
def test_millisatoshi_passthrough(node_factory):
""" Ensure that Millisatoshi arguments and return work.
"""
plugin_path = 'tests/plugins/millisatoshis.py'
n = node_factory.get_node(options={'plugin': plugin_path, 'log-level': 'io'})
# By keyword
ret = n.rpc.call('echo', {'msat': Millisatoshi(17), 'not_an_msat': '22msat'})['echo_msat']
assert type(ret) == Millisatoshi
assert ret == Millisatoshi(17)
# By position
ret = n.rpc.call('echo', [Millisatoshi(18), '22msat'])['echo_msat']
assert type(ret) == Millisatoshi
assert ret == Millisatoshi(18)
def test_rpc_passthrough(node_factory):
"""Starting with a plugin exposes its RPC methods.