@@ -3940,6 +3940,32 @@ fn test_funding_peer_disconnect() {
3940
3940
assert ! ( found_announcement) ;
3941
3941
}
3942
3942
3943
+ #[ test]
3944
+ fn test_funding_locked_without_best_block_updated ( ) {
3945
+ // Previously, if we were offline when a funding transaction was locked in, and then we came
3946
+ // back online, calling best_block_updated once followed by transactions_confirmed, we'd not
3947
+ // generate a funding_locked until a later best_block_updated. This tests that we generate the
3948
+ // funding_locked immediately instead.
3949
+ let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
3950
+ let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
3951
+ let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , None ] ) ;
3952
+ let mut nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
3953
+ * nodes[ 0 ] . connect_style . borrow_mut ( ) = ConnectStyle :: BestBlockFirstSkippingBlocks ;
3954
+
3955
+ let funding_tx = create_chan_between_nodes_with_value_init ( & nodes[ 0 ] , & nodes[ 1 ] , 1_000_000 , 0 , InitFeatures :: known ( ) , InitFeatures :: known ( ) ) ;
3956
+
3957
+ let conf_height = nodes[ 0 ] . best_block_info ( ) . 1 + 1 ;
3958
+ connect_blocks ( & nodes[ 0 ] , CHAN_CONFIRM_DEPTH ) ;
3959
+ let block_txn = [ funding_tx] ;
3960
+ let conf_txn: Vec < _ > = block_txn. iter ( ) . enumerate ( ) . collect ( ) ;
3961
+ let conf_block_header = nodes[ 0 ] . get_block_header ( conf_height) ;
3962
+ nodes[ 0 ] . node . transactions_confirmed ( & conf_block_header, & conf_txn[ ..] , conf_height) ;
3963
+
3964
+ // Ensure nodes[0] generates a funding_locked after the transactions_confirmed
3965
+ let as_funding_locked = get_event_msg ! ( nodes[ 0 ] , MessageSendEvent :: SendFundingLocked , nodes[ 1 ] . node. get_our_node_id( ) ) ;
3966
+ nodes[ 1 ] . node . handle_funding_locked ( & nodes[ 0 ] . node . get_our_node_id ( ) , & as_funding_locked) ;
3967
+ }
3968
+
3943
3969
#[ test]
3944
3970
fn test_drop_messages_peer_disconnect_dual_htlc ( ) {
3945
3971
// Test that we can handle reconnecting when both sides of a channel have pending
0 commit comments