@@ -6256,3 +6256,61 @@ fn test_check_htlc_underpaying() {
6256
6256
}
6257
6257
nodes[ 1 ] . node . get_and_clear_pending_events ( ) ;
6258
6258
}
6259
+
6260
+ fn test_announce_disable_channels ( ) {
6261
+ // Create 2 channels between A and B. Disconnect B. Call timer_chan_freshness_every_min and check for generated
6262
+ // ChannelUpdate. Reconnect B, reestablish and check there is non-generated ChannelUpdate.
6263
+
6264
+ let nodes = create_network ( 2 , & [ None , None ] ) ;
6265
+
6266
+ let short_id_1 = create_announced_chan_between_nodes ( & nodes, 0 , 1 , LocalFeatures :: new ( ) , LocalFeatures :: new ( ) ) . 0 . contents . short_channel_id ;
6267
+ let short_id_2 = create_announced_chan_between_nodes ( & nodes, 1 , 0 , LocalFeatures :: new ( ) , LocalFeatures :: new ( ) ) . 0 . contents . short_channel_id ;
6268
+ let short_id_3 = create_announced_chan_between_nodes ( & nodes, 0 , 1 , LocalFeatures :: new ( ) , LocalFeatures :: new ( ) ) . 0 . contents . short_channel_id ;
6269
+
6270
+ // Disconnect peers
6271
+ nodes[ 0 ] . node . peer_disconnected ( & nodes[ 1 ] . node . get_our_node_id ( ) , false ) ;
6272
+ nodes[ 1 ] . node . peer_disconnected ( & nodes[ 0 ] . node . get_our_node_id ( ) , false ) ;
6273
+
6274
+ nodes[ 0 ] . node . timer_chan_freshness_every_min ( ) ;
6275
+ let msg_events = nodes[ 0 ] . node . get_and_clear_pending_msg_events ( ) ;
6276
+ assert_eq ! ( msg_events. len( ) , 3 ) ;
6277
+ for e in msg_events {
6278
+ match e {
6279
+ MessageSendEvent :: BroadcastChannelUpdate { ref msg } => {
6280
+ let short_id = msg. contents . short_channel_id ;
6281
+ // Check generated channel_update match list in PendingChannelUpdate
6282
+ if short_id != short_id_1 && short_id != short_id_2 && short_id != short_id_3 {
6283
+ panic ! ( "Generated ChannelUpdate for wrong chan!" ) ;
6284
+ }
6285
+ } ,
6286
+ _ => panic ! ( "Unexpected event" ) ,
6287
+ }
6288
+ }
6289
+ // Reconnect peers
6290
+ nodes[ 0 ] . node . peer_connected ( & nodes[ 1 ] . node . get_our_node_id ( ) ) ;
6291
+ let reestablish_1 = get_chan_reestablish_msgs ! ( nodes[ 0 ] , nodes[ 1 ] ) ;
6292
+ assert_eq ! ( reestablish_1. len( ) , 3 ) ;
6293
+ nodes[ 1 ] . node . peer_connected ( & nodes[ 0 ] . node . get_our_node_id ( ) ) ;
6294
+ let reestablish_2 = get_chan_reestablish_msgs ! ( nodes[ 1 ] , nodes[ 0 ] ) ;
6295
+ assert_eq ! ( reestablish_2. len( ) , 3 ) ;
6296
+
6297
+ // Reestablish chan_1
6298
+ nodes[ 0 ] . node . handle_channel_reestablish ( & nodes[ 1 ] . node . get_our_node_id ( ) , & reestablish_2[ 0 ] ) . unwrap ( ) ;
6299
+ handle_chan_reestablish_msgs ! ( nodes[ 0 ] , nodes[ 1 ] ) ;
6300
+ nodes[ 1 ] . node . handle_channel_reestablish ( & nodes[ 0 ] . node . get_our_node_id ( ) , & reestablish_1[ 0 ] ) . unwrap ( ) ;
6301
+ handle_chan_reestablish_msgs ! ( nodes[ 1 ] , nodes[ 0 ] ) ;
6302
+ // Reestablish chan_2
6303
+ nodes[ 0 ] . node . handle_channel_reestablish ( & nodes[ 1 ] . node . get_our_node_id ( ) , & reestablish_2[ 1 ] ) . unwrap ( ) ;
6304
+ handle_chan_reestablish_msgs ! ( nodes[ 0 ] , nodes[ 1 ] ) ;
6305
+ nodes[ 1 ] . node . handle_channel_reestablish ( & nodes[ 0 ] . node . get_our_node_id ( ) , & reestablish_1[ 1 ] ) . unwrap ( ) ;
6306
+ handle_chan_reestablish_msgs ! ( nodes[ 1 ] , nodes[ 0 ] ) ;
6307
+ // Reestablish chan_3
6308
+ nodes[ 0 ] . node . handle_channel_reestablish ( & nodes[ 1 ] . node . get_our_node_id ( ) , & reestablish_2[ 2 ] ) . unwrap ( ) ;
6309
+ handle_chan_reestablish_msgs ! ( nodes[ 0 ] , nodes[ 1 ] ) ;
6310
+ nodes[ 1 ] . node . handle_channel_reestablish ( & nodes[ 0 ] . node . get_our_node_id ( ) , & reestablish_1[ 2 ] ) . unwrap ( ) ;
6311
+ handle_chan_reestablish_msgs ! ( nodes[ 1 ] , nodes[ 0 ] ) ;
6312
+
6313
+ nodes[ 0 ] . node . timer_chan_freshness_every_min ( ) ;
6314
+ let msg_events = nodes[ 0 ] . node . get_and_clear_pending_msg_events ( ) ;
6315
+ assert_eq ! ( msg_events. len( ) , 0 ) ;
6316
+ }
0 commit comments