@@ -6171,3 +6171,62 @@ fn test_data_loss_protect() {
6171
6171
assert_eq ! ( spend_txn. len( ) , 1 ) ;
6172
6172
check_spends ! ( spend_txn[ 0 ] , node_txn[ 0 ] . clone( ) ) ;
6173
6173
}
6174
+
6175
+ #[ test]
6176
+ fn test_announce_disable_channels ( ) {
6177
+ // Create 2 channels between A and B. Disconnect B. Call timer_chan_freshness_every_min and check for generated
6178
+ // ChannelUpdate. Reconnect B, reestablish and check there is non-generated ChannelUpdate.
6179
+
6180
+ let nodes = create_network ( 2 , & [ None , None ] ) ;
6181
+
6182
+ let short_id_1 = create_announced_chan_between_nodes ( & nodes, 0 , 1 , LocalFeatures :: new ( ) , LocalFeatures :: new ( ) ) . 0 . contents . short_channel_id ;
6183
+ let short_id_2 = create_announced_chan_between_nodes ( & nodes, 1 , 0 , LocalFeatures :: new ( ) , LocalFeatures :: new ( ) ) . 0 . contents . short_channel_id ;
6184
+ let short_id_3 = create_announced_chan_between_nodes ( & nodes, 0 , 1 , LocalFeatures :: new ( ) , LocalFeatures :: new ( ) ) . 0 . contents . short_channel_id ;
6185
+
6186
+ // Disconnect peers
6187
+ nodes[ 0 ] . node . peer_disconnected ( & nodes[ 1 ] . node . get_our_node_id ( ) , false ) ;
6188
+ nodes[ 1 ] . node . peer_disconnected ( & nodes[ 0 ] . node . get_our_node_id ( ) , false ) ;
6189
+
6190
+ nodes[ 0 ] . node . timer_chan_freshness_every_min ( ) ;
6191
+ let msg_events = nodes[ 0 ] . node . get_and_clear_pending_msg_events ( ) ;
6192
+ assert_eq ! ( msg_events. len( ) , 3 ) ;
6193
+ for e in msg_events {
6194
+ match e {
6195
+ MessageSendEvent :: BroadcastChannelUpdate { ref msg } => {
6196
+ let short_id = msg. contents . short_channel_id ;
6197
+ // Check generated channel_update match list in PendingChannelUpdate
6198
+ if short_id != short_id_1 && short_id != short_id_2 && short_id != short_id_3 {
6199
+ panic ! ( "Generated ChannelUpdate for wrong chan!" ) ;
6200
+ }
6201
+ } ,
6202
+ _ => panic ! ( "Unexpected event" ) ,
6203
+ }
6204
+ }
6205
+ // Reconnect peers
6206
+ nodes[ 0 ] . node . peer_connected ( & nodes[ 1 ] . node . get_our_node_id ( ) ) ;
6207
+ let reestablish_1 = get_chan_reestablish_msgs ! ( nodes[ 0 ] , nodes[ 1 ] ) ;
6208
+ assert_eq ! ( reestablish_1. len( ) , 3 ) ;
6209
+ nodes[ 1 ] . node . peer_connected ( & nodes[ 0 ] . node . get_our_node_id ( ) ) ;
6210
+ let reestablish_2 = get_chan_reestablish_msgs ! ( nodes[ 1 ] , nodes[ 0 ] ) ;
6211
+ assert_eq ! ( reestablish_2. len( ) , 3 ) ;
6212
+
6213
+ // Reestablish chan_1
6214
+ nodes[ 0 ] . node . handle_channel_reestablish ( & nodes[ 1 ] . node . get_our_node_id ( ) , & reestablish_2[ 0 ] ) . unwrap ( ) ;
6215
+ handle_chan_reestablish_msgs ! ( nodes[ 0 ] , nodes[ 1 ] ) ;
6216
+ nodes[ 1 ] . node . handle_channel_reestablish ( & nodes[ 0 ] . node . get_our_node_id ( ) , & reestablish_1[ 0 ] ) . unwrap ( ) ;
6217
+ handle_chan_reestablish_msgs ! ( nodes[ 1 ] , nodes[ 0 ] ) ;
6218
+ // Reestablish chan_2
6219
+ nodes[ 0 ] . node . handle_channel_reestablish ( & nodes[ 1 ] . node . get_our_node_id ( ) , & reestablish_2[ 1 ] ) . unwrap ( ) ;
6220
+ handle_chan_reestablish_msgs ! ( nodes[ 0 ] , nodes[ 1 ] ) ;
6221
+ nodes[ 1 ] . node . handle_channel_reestablish ( & nodes[ 0 ] . node . get_our_node_id ( ) , & reestablish_1[ 1 ] ) . unwrap ( ) ;
6222
+ handle_chan_reestablish_msgs ! ( nodes[ 1 ] , nodes[ 0 ] ) ;
6223
+ // Reestablish chan_3
6224
+ nodes[ 0 ] . node . handle_channel_reestablish ( & nodes[ 1 ] . node . get_our_node_id ( ) , & reestablish_2[ 2 ] ) . unwrap ( ) ;
6225
+ handle_chan_reestablish_msgs ! ( nodes[ 0 ] , nodes[ 1 ] ) ;
6226
+ nodes[ 1 ] . node . handle_channel_reestablish ( & nodes[ 0 ] . node . get_our_node_id ( ) , & reestablish_1[ 2 ] ) . unwrap ( ) ;
6227
+ handle_chan_reestablish_msgs ! ( nodes[ 1 ] , nodes[ 0 ] ) ;
6228
+
6229
+ nodes[ 0 ] . node . timer_chan_freshness_every_min ( ) ;
6230
+ let msg_events = nodes[ 0 ] . node . get_and_clear_pending_msg_events ( ) ;
6231
+ assert_eq ! ( msg_events. len( ) , 0 ) ;
6232
+ }
0 commit comments