diff --git a/tests/test_closing.py b/tests/test_closing.py index df924d71f..3404bf885 100644 --- a/tests/test_closing.py +++ b/tests/test_closing.py @@ -2786,6 +2786,32 @@ def test_htlc_rexmit_while_closing(node_factory, executor): fut2.result(TIMEOUT) +@pytest.mark.xfail(strict=True) +@pytest.mark.openchannel('v1') +@pytest.mark.developer("needs dev_disconnect") +def test_you_forgot_closed_channel(node_factory, executor): + """Ideally you'd keep talking to us about closed channels""" + disconnects = ['@WIRE_CLOSING_SIGNED'] + + l1, l2 = node_factory.line_graph(2, opts=[{'may_reconnect': True, + 'dev-no-reconnect': None}, + {'may_reconnect': True, + 'dev-no-reconnect': None, + 'disconnect': disconnects}]) + + l1.pay(l2, 200000) + + fut = executor.submit(l1.rpc.close, l2.info['id']) + + # l2 considers the closing done, l1 does not + wait_for(lambda: only_one(only_one(l2.rpc.listpeers()['peers'])['channels'])['state'] == 'CLOSINGD_COMPLETE') + assert only_one(only_one(l1.rpc.listpeers()['peers'])['channels'])['state'] == 'CLOSINGD_SIGEXCHANGE' + + # l1 reconnects, it should succeed. + l1.rpc.connect(l2.info['id'], 'localhost', l2.port) + fut.result(TIMEOUT) + + @unittest.skipIf(TEST_NETWORK == 'liquid-regtest', "Uses regtest addresses") @pytest.mark.developer("too slow without fast polling for blocks") def test_segwit_anyshutdown(node_factory, bitcoind, executor):