diff --git a/contrib/pyln-client/pyln/client/lightning.py b/contrib/pyln-client/pyln/client/lightning.py index 30384fc246ab..eccbd798020b 100644 --- a/contrib/pyln-client/pyln/client/lightning.py +++ b/contrib/pyln-client/pyln/client/lightning.py @@ -1149,6 +1149,20 @@ def splice(self, script_or_json, dryrun=None, force_feerate=None, debug_log=None } return self.call("dev-splice", payload) + def stfu_channels(self, channel_ids): + """ STFU multiple channels """ + payload = { + "channel_ids": channel_ids, + } + return self.call("stfu_channels", payload) + + def abort_channels(self, channel_ids): + """ Abort multiple channels """ + payload = { + "channel_ids": channel_ids, + } + return self.call("abort_channels", payload) + def splice_init(self, chan_id, amount, initialpsbt=None, feerate_per_kw=None): """ Initiate a splice """ payload = { diff --git a/tests/test_restart.py b/tests/test_restart.py new file mode 100644 index 000000000000..2acbd84af1ef --- /dev/null +++ b/tests/test_restart.py @@ -0,0 +1,21 @@ +from fixtures import * # noqa: F401,F403 +import pytest +import unittest +from utils import ( + TEST_NETWORK +) + + +@pytest.mark.openchannel('v1') +@pytest.mark.openchannel('v2') +@unittest.skipIf(TEST_NETWORK != 'regtest', 'elementsd doesnt yet support PSBT features we need') +def test_agressive_restart(node_factory, bitcoind): + l1, l2 = node_factory.line_graph(2, fundamount=1000000, wait_for_announce=True, opts={'experimental-splicing': None}) + + chan_id = l1.get_channel_id(l2) + + for _ in range(20): + l1.rpc.stfu_channels([chan_id]) + l1.rpc.abort_channels([chan_id]) + l1.daemon.wait_for_log(r'peer_in WIRE_CHANNEL_REESTABLISH') + l2.daemon.wait_for_log(r'peer_in WIRE_CHANNEL_REESTABLISH')