@@ -2756,9 +2756,9 @@ fn do_no_missing_sent_on_midpoint_reload(persist_manager_with_payment: bool) {
2756
2756
let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
2757
2757
let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
2758
2758
let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , None ] ) ;
2759
- let ( persister_a, persister_b) ;
2760
- let ( chain_monitor_a, chain_monitor_b) ;
2761
- let ( nodes_0_deserialized, nodes_0_deserialized_b) ;
2759
+ let ( persister_a, persister_b, persister_c ) ;
2760
+ let ( chain_monitor_a, chain_monitor_b, chain_monitor_c ) ;
2761
+ let ( nodes_0_deserialized, nodes_0_deserialized_b, nodes_0_deserialized_c ) ;
2762
2762
let mut nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
2763
2763
2764
2764
let chan_id = create_announced_chan_between_nodes ( & nodes, 0 , 1 ) . 2 ;
@@ -2794,6 +2794,8 @@ fn do_no_missing_sent_on_midpoint_reload(persist_manager_with_payment: bool) {
2794
2794
if let Event :: PaymentSent { payment_preimage, .. } = events[ 1 ] { assert_eq ! ( payment_preimage, our_payment_preimage) ; } else { panic ! ( ) ; }
2795
2795
// Note that we don't get a PaymentPathSuccessful here as we leave the HTLC pending to avoid
2796
2796
// the double-claim that would otherwise appear at the end of this test.
2797
+ let as_broadcasted_txn = nodes[ 0 ] . tx_broadcaster . txn_broadcasted . lock ( ) . unwrap ( ) . split_off ( 0 ) ;
2798
+ assert_eq ! ( as_broadcasted_txn. len( ) , 1 ) ;
2797
2799
2798
2800
// Ensure that, even after some time, if we restart we still include *something* in the current
2799
2801
// `ChannelManager` which prevents a `PaymentFailed` when we restart even if pending resolved
@@ -2806,6 +2808,19 @@ fn do_no_missing_sent_on_midpoint_reload(persist_manager_with_payment: bool) {
2806
2808
reload_node ! ( nodes[ 0 ] , test_default_channel_config( ) , & nodes[ 0 ] . node. encode( ) , & [ & chan_0_monitor_serialized] , persister_b, chain_monitor_b, nodes_0_deserialized_b) ;
2807
2809
let events = nodes[ 0 ] . node . get_and_clear_pending_events ( ) ;
2808
2810
assert ! ( events. is_empty( ) ) ;
2811
+
2812
+ // Ensure that we don't generate any further events even after the channel-closing commitment
2813
+ // transaction is confirmed on-chain.
2814
+ confirm_transaction ( & nodes[ 0 ] , & as_broadcasted_txn[ 0 ] ) ;
2815
+ for _ in 0 ..( IDEMPOTENCY_TIMEOUT_TICKS * 2 ) { nodes[ 0 ] . node . timer_tick_occurred ( ) ; }
2816
+
2817
+ let events = nodes[ 0 ] . node . get_and_clear_pending_events ( ) ;
2818
+ assert ! ( events. is_empty( ) ) ;
2819
+
2820
+ let chan_0_monitor_serialized = get_monitor ! ( nodes[ 0 ] , chan_id) . encode ( ) ;
2821
+ reload_node ! ( nodes[ 0 ] , test_default_channel_config( ) , & nodes[ 0 ] . node. encode( ) , & [ & chan_0_monitor_serialized] , persister_c, chain_monitor_c, nodes_0_deserialized_c) ;
2822
+ let events = nodes[ 0 ] . node . get_and_clear_pending_events ( ) ;
2823
+ assert ! ( events. is_empty( ) ) ;
2809
2824
}
2810
2825
2811
2826
#[ test]
0 commit comments