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