pytest: Test `fundchannel_cancel` can work after `fundchannel_complete`

This commit is contained in:
trueptolemy 2019-08-24 22:39:01 +08:00 committed by neil saitug
parent 6c708b5854
commit f1822e3650
1 changed files with 33 additions and 1 deletions

View File

@ -1,4 +1,5 @@
from collections import namedtuple
from decimal import Decimal
from fixtures import * # noqa: F401,F403
from flaky import flaky # noqa: F401
from lightning import RpcError
@ -875,7 +876,38 @@ def test_funding_external_wallet_corners(node_factory, bitcoind):
l1.rpc.fundchannel_cancel(l2.info['id'])
# Should be able to 'restart' after canceling
l1.rpc.fundchannel_start(l2.info['id'], amount)
amount2 = 1000000
funding_addr = l1.rpc.fundchannel_start(l2.info['id'], amount2)['funding_address']
addr = l1.rpc.newaddr()['bech32']
l1.bitcoin.rpc.sendtoaddress(addr, 0.1)
bitcoind.generate_block(1)
wait_for(lambda: len(l1.rpc.listfunds()['outputs']) == 1)
# Create the funding transaction
prep = l1.rpc.txprepare([{funding_addr: amount2}])
decode = bitcoind.rpc.decoderawtransaction(prep['unsigned_tx'])
assert decode['txid'] == prep['txid']
# One output will be correct.
if decode['vout'][0]['value'] == Decimal('0.01000000'):
txout = 0
elif decode['vout'][1]['value'] == Decimal('0.01000000'):
txout = 1
else:
assert False
# Be sure fundchannel_complete is successful
assert l1.rpc.fundchannel_complete(l2.info['id'], prep['txid'], txout)['commitments_secured']
# Canceld channel after fundchannel_complete
assert l1.rpc.fundchannel_cancel(l2.info['id'])['cancelled']
l1.rpc.connect(l2.info['id'], 'localhost', l2.port)
l1.rpc.fundchannel_start(l2.info['id'], amount)['funding_address']
assert l1.rpc.fundchannel_complete(l2.info['id'], prep['txid'], txout)['commitments_secured']
l1.rpc.txsend(prep['txid'])
with pytest.raises(RpcError, match=r'.* been broadcast.*'):
l1.rpc.fundchannel_cancel(l2.info['id'])
l1.rpc.close(l2.info['id'])
def test_funding_cancel_race(node_factory, bitcoind, executor):