mirror of
https://github.com/ElementsProject/lightning.git
synced 2024-12-29 10:04:41 +01:00
28816c387c
into test_plugin_shutdown The fact that plugins are kept alive untill the very end also ensures their hooks are not silently unregistered.
52 lines
1.7 KiB
Python
Executable File
52 lines
1.7 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""Plugin to be used to test miscellaneous notifications.
|
|
"""
|
|
|
|
from pyln.client import Plugin, RpcError
|
|
import sys
|
|
import pytest
|
|
|
|
plugin = Plugin()
|
|
|
|
|
|
@plugin.init()
|
|
def init(plugin, options, configuration):
|
|
plugin.log("misc_notifications initialized")
|
|
|
|
|
|
@plugin.subscribe("channel_opened")
|
|
def channel_opened(plugin, channel_opened, **kwargs):
|
|
plugin.log("A channel was opened to us by {}, with an amount"
|
|
" of {} and the following funding transaction id: {}"
|
|
.format(channel_opened["id"], channel_opened["amount"],
|
|
channel_opened["funding_txid"]))
|
|
|
|
|
|
@plugin.subscribe("channel_state_changed")
|
|
def channel_state_changed(plugin, channel_state_changed, **kwargs):
|
|
plugin.log("channel_state_changed {}".format(channel_state_changed))
|
|
|
|
|
|
@plugin.subscribe("shutdown")
|
|
def shutdown(plugin, **kwargs):
|
|
|
|
# 'shutdown' notification can be called in two ways, from `plugin stop` or from
|
|
# lightningd's shutdown loop, we test which one by making `getinfo` call
|
|
try:
|
|
plugin.rpc.getinfo()
|
|
plugin.rpc.datastore(key='test', string='Allowed', mode="create-or-append")
|
|
plugin.log("via plugin stop, datastore success")
|
|
except RpcError as e:
|
|
if e.error == {'code': -5, 'message': 'lightningd is shutting down'}:
|
|
# JSON RPC is disabled by now, but can do logging
|
|
with pytest.raises(RpcError, match=r'-5.*lightningd is shutting down'):
|
|
plugin.rpc.datastore(key='test', string='Not allowed', mode="create-or-append")
|
|
plugin.log("via lightningd shutdown, datastore failed")
|
|
else:
|
|
raise
|
|
|
|
sys.exit(0)
|
|
|
|
|
|
plugin.run()
|