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) 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') l2.daemon.wait_for_log('sendrawtx exit 0') l1.stop() l2.stop() bitcoind.generate_block(6) l1.restart() l2.restart() # Make sure we're ok. l2.daemon.wait_for_log(r'to CHANNELD_NORMAL') l1.daemon.wait_for_log(r'to CHANNELD_NORMAL')
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')