From df8a6f615baea239c43ea6c50f8c4131e3103a98 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Mon, 29 Jul 2019 17:00:49 +0930 Subject: [PATCH] pytest: test for crash when we do a plugin op and a plugin has not finished init We try to start it twice, with predictable hilarious results: DEBUG plugin-manager started(20701) /home/rusty/devel/cvs/lightning/tests/plugins/slow_init.py DEBUG lightningd(20670): Adding block 101: 0f26301caaae390d1b956c3eb73827d1f87a2af306561348045bf1313b7551b0 INFO plugin-slow_init.py slow_init.py initializing DEBUG plugin-manager started(20704) /home/rusty/devel/cvs/lightning/tests/plugins/slow_init.py **BROKEN** lightningd(20670): FATAL SIGNAL 6 (version v0.7.1-146-g7d3b352-modded) **BROKEN** lightningd(20670): backtrace: common/daemon.c:45 (send_backtrace) 0x55a29c3ec539 **BROKEN** lightningd(20670): backtrace: common/daemon.c:53 (crashdump) 0x55a29c3ec589 **BROKEN** lightningd(20670): backtrace: (null):0 ((null)) 0x7fa281ebcf5f **BROKEN** lightningd(20670): backtrace: (null):0 ((null)) 0x7fa281ebced7 **BROKEN** lightningd(20670): backtrace: (null):0 ((null)) 0x7fa281e9e534 **BROKEN** lightningd(20670): backtrace: (null):0 ((null)) 0x7fa281e9e40e **BROKEN** lightningd(20670): backtrace: (null):0 ((null)) 0x7fa281eae011 **BROKEN** lightningd(20670): backtrace: lightningd/json_stream.c:225 (json_stream_output_) 0x55a29c3bff5f **BROKEN** lightningd(20670): backtrace: lightningd/plugin.c:383 (plugin_write_json) 0x55a29c3e103f **BROKEN** lightningd(20670): backtrace: ccan/ccan/io/io.c:59 (next_plan) 0x55a29c43316b **BROKEN** lightningd(20670): backtrace: ccan/ccan/io/io.c:435 (io_do_always) 0x55a29c433df1 **BROKEN** lightningd(20670): backtrace: ccan/ccan/io/poll.c:300 (handle_always) 0x55a29c435865 **BROKEN** lightningd(20670): backtrace: ccan/ccan/io/poll.c:377 (io_loop) 0x55a29c435b3d **BROKEN** lightningd(20670): backtrace: lightningd/io_loop_with_timers.c:24 (io_loop_with_timers) 0x55a29c3bdfcf **BROKEN** lightningd(20670): backtrace: lightningd/lightningd.c:830 (main) 0x55a29c3c44b6 **BROKEN** lightningd(20670): backtrace: (null):0 ((null)) 0x7fa281e9fb6a **BROKEN** lightningd(20670): backtrace: (null):0 ((null)) 0x55a29c3ac0f9 **BROKEN** lightningd(20670): backtrace: (null):0 ((null)) 0xffffffffffffffff Signed-off-by: Rusty Russell --- tests/plugins/slow_init.py | 14 ++++++++++++++ tests/test_plugin.py | 14 ++++++++++++++ 2 files changed, 28 insertions(+) create mode 100755 tests/plugins/slow_init.py diff --git a/tests/plugins/slow_init.py b/tests/plugins/slow_init.py new file mode 100755 index 000000000..4c5316b16 --- /dev/null +++ b/tests/plugins/slow_init.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python3 +from lightning import Plugin +import time + +plugin = Plugin() + + +@plugin.init() +def init(options, configuration, plugin): + plugin.log("slow_init.py initializing") + time.sleep(1) + + +plugin.run() diff --git a/tests/test_plugin.py b/tests/test_plugin.py index 42023bd44..2d1aaacc3 100644 --- a/tests/test_plugin.py +++ b/tests/test_plugin.py @@ -90,6 +90,20 @@ def test_plugin_dir(node_factory): node_factory.get_node(options={'plugin-dir': plugin_dir, 'greeting': 'Mars'}) +@pytest.mark.xfail(strict=True) +def test_plugin_slowinit(node_factory): + """Tests the 'plugin' RPC command when init is slow""" + n = node_factory.get_node() + + n.rpc.plugin_start(os.path.join(os.getcwd(), "tests/plugins/slow_init.py")) + n.daemon.wait_for_log("slow_init.py initializing") + + # It's not actually configured yet, see what happens; + # make sure 'rescan' and 'list' controls dont crash + n.rpc.plugin_rescan() + n.rpc.plugin_list() + + def test_plugin_command(node_factory): """Tests the 'plugin' RPC command""" n = node_factory.get_node()