diff --git a/tests/plugins/millisatoshis.py b/tests/plugins/millisatoshis.py new file mode 100755 index 000000000..5404aa8e0 --- /dev/null +++ b/tests/plugins/millisatoshis.py @@ -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() diff --git a/tests/test_plugin.py b/tests/test_plugin.py index 67ac913f4..5df0c47bb 100644 --- a/tests/test_plugin.py +++ b/tests/test_plugin.py @@ -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.