From 5f437de771d3b08131030491e2dfde6064ad4820 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Mon, 4 Mar 2019 13:30:33 +1030 Subject: [PATCH] pytest: test passing utf8 into and out of plugin JSON. We should be able to pass UTF-8 strings to and from plugins without python turning them into JSON-\u escapes. Signed-off-by: Rusty Russell --- tests/plugins/utf8.py | 14 ++++++++++++++ tests/test_plugin.py | 19 +++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100755 tests/plugins/utf8.py diff --git a/tests/plugins/utf8.py b/tests/plugins/utf8.py new file mode 100755 index 000000000..52cce06d4 --- /dev/null +++ b/tests/plugins/utf8.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python3 +from lightning import Plugin + + +plugin = Plugin() + + +@plugin.method("utf8") +def echo(plugin, utf8): + assert '\\u' not in utf8 + return {'utf8': utf8} + + +plugin.run() diff --git a/tests/test_plugin.py b/tests/test_plugin.py index 5a5331dbf..d682fe149 100644 --- a/tests/test_plugin.py +++ b/tests/test_plugin.py @@ -188,3 +188,22 @@ def test_async_rpcmethod(node_factory, executor): l1.rpc.asyncflush(42) assert [r.result() for r in results] == [42] * len(results) + + +@pytest.mark.xfail(strict=True) +def test_utf8_passthrough(node_factory, executor): + l1 = node_factory.get_node(options={'plugin': 'tests/plugins/utf8.py', + 'log-level': 'io'}) + + # This works because Python unmangles. + res = l1.rpc.call('utf8', ['ナンセンス 1杯']) + assert '\\u' not in res['utf8'] + assert res['utf8'] == 'ナンセンス 1杯' + + # Now, try native. + out = subprocess.check_output(['cli/lightning-cli', + '--lightning-dir={}' + .format(l1.daemon.lightning_dir), + 'utf8', 'ナンセンス 1杯']).decode('utf-8') + assert '\\u' not in out + assert out == '{"utf8": "ナンセンス 1杯"}\n'