diff --git a/tests/test_opening.py b/tests/test_opening.py index 55a4a1423..f0a515380 100644 --- a/tests/test_opening.py +++ b/tests/test_opening.py @@ -105,53 +105,6 @@ def test_v2_open_sigs_restart(node_factory, bitcoind): disconnects_1 = ['-WIRE_TX_SIGNATURES'] disconnects_2 = ['+WIRE_TX_SIGNATURES'] - l1, l2 = node_factory.get_nodes(2, - opts=[{'dev-force-features': '+223', - 'disconnect': disconnects_1, - 'may_reconnect': True}, - {'dev-force-features': '+223', - 'disconnect': disconnects_2, - 'may_reconnect': True}]) - - l1.rpc.connect(l2.info['id'], 'localhost', l2.port) - amount = 2**24 - chan_amount = 100000 - bitcoind.rpc.sendtoaddress(l1.rpc.newaddr()['bech32'], amount / 10**8 + 0.01) - bitcoind.generate_block(1) - # Wait for it to arrive. - wait_for(lambda: len(l1.rpc.listfunds()['outputs']) > 0) - - # Fund the channel, should appear to finish ok even though the - # peer fails - with pytest.raises(RpcError): - l1.rpc.fundchannel(l2.info['id'], chan_amount) - - chan_id = first_channel_id(l1, l2) - log = l1.daemon.is_in_log('{} psbt'.format(chan_id)) - psbt = re.search("psbt (.*)", log).group(1) - - l1.rpc.connect(l2.info['id'], 'localhost', l2.port) - l1.daemon.wait_for_log('Peer has reconnected, state DUALOPEND_OPEN_INIT') - with pytest.raises(RpcError): - l1.rpc.openchannel_signed(chan_id, psbt) - - l2.daemon.wait_for_log('Broadcasting funding tx') - txid = l2.rpc.listpeers(l1.info['id'])['peers'][0]['channels'][0]['funding_txid'] - bitcoind.generate_block(6, wait_for_mempool=txid) - - # Make sure we're ok. - l2.daemon.wait_for_log(r'to CHANNELD_NORMAL') - l1.daemon.wait_for_log(r'to CHANNELD_NORMAL') - - -@unittest.skipIf(TEST_NETWORK != 'regtest', 'elementsd doesnt yet support PSBT features we need') -@unittest.skipIf(not DEVELOPER, "uses dev-disconnect") -def test_v2_open_sigs_restart_while_dead(node_factory, bitcoind): - # Same thing as above, except the transaction mines - # while we're asleep - disconnects_1 = ['-WIRE_TX_SIGNATURES'] - disconnects_2 = ['+WIRE_TX_SIGNATURES'] - l1, l2 = node_factory.get_nodes(2, opts=[{'experimental-dual-fund': None, 'disconnect': disconnects_1, @@ -175,6 +128,57 @@ def test_v2_open_sigs_restart_while_dead(node_factory, bitcoind): chan_id = first_channel_id(l1, l2) log = l1.daemon.is_in_log('{} psbt'.format(chan_id)) + assert log + psbt = re.search("psbt (.*)", log).group(1) + + l1.rpc.connect(l2.info['id'], 'localhost', l2.port) + l1.daemon.wait_for_log('Peer has reconnected, state DUALOPEND_OPEN_INIT') + with pytest.raises(RpcError): + l1.rpc.openchannel_signed(chan_id, psbt) + + l2.daemon.wait_for_log('Broadcasting funding tx') + txid = l2.rpc.listpeers(l1.info['id'])['peers'][0]['channels'][0]['funding_txid'] + bitcoind.generate_block(6, wait_for_mempool=txid) + + # Make sure we're ok. + l1.daemon.wait_for_log(r'to CHANNELD_NORMAL') + l2.daemon.wait_for_log(r'to CHANNELD_NORMAL') + + +@unittest.skipIf(TEST_NETWORK != 'regtest', 'elementsd doesnt yet support PSBT features we need') +@unittest.skipIf(not DEVELOPER, "uses dev-disconnect") +def test_v2_open_sigs_restart_while_dead(node_factory, bitcoind): + # Same thing as above, except the transaction mines + # while we're asleep + disconnects_1 = ['-WIRE_TX_SIGNATURES'] + disconnects_2 = ['+WIRE_TX_SIGNATURES'] + + l1, l2 = node_factory.get_nodes(2, + opts=[{'experimental-dual-fund': None, + 'disconnect': disconnects_1, + 'may_reconnect': True, + 'may_fail': True}, + {'experimental-dual-fund': None, + 'disconnect': disconnects_2, + 'may_reconnect': True, + 'may_fail': True}]) + + l1.rpc.connect(l2.info['id'], 'localhost', l2.port) + amount = 2**24 + chan_amount = 100000 + bitcoind.rpc.sendtoaddress(l1.rpc.newaddr()['bech32'], amount / 10**8 + 0.01) + bitcoind.generate_block(1) + # Wait for it to arrive. + wait_for(lambda: len(l1.rpc.listfunds()['outputs']) > 0) + + # Fund the channel, should appear to finish ok even though the + # peer fails + with pytest.raises(RpcError): + l1.rpc.fundchannel(l2.info['id'], chan_amount) + + chan_id = first_channel_id(l1, l2) + log = l1.daemon.is_in_log('{} psbt'.format(chan_id)) + assert log psbt = re.search("psbt (.*)", log).group(1) l1.rpc.connect(l2.info['id'], 'localhost', l2.port)