Merge pull request #916 from TheBlueMatt/2021-05-fix-disabled-announcements
[rust-lightning] / lightning / src / ln / functional_tests.rs
index 4a94b6c6e4d2781f2efaef2138c846fa9d2f8fb8..10270e68a92ad3a4c45e1a4ca4104ae7b18b00b0 100644 (file)
@@ -7582,16 +7582,17 @@ fn test_announce_disable_channels() {
        nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
        nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
 
-       nodes[0].node.timer_tick_occurred(); // dirty -> stagged
-       nodes[0].node.timer_tick_occurred(); // staged -> fresh
+       nodes[0].node.timer_tick_occurred(); // Enabled -> DisabledStaged
+       nodes[0].node.timer_tick_occurred(); // DisabledStaged -> Disabled
        let msg_events = nodes[0].node.get_and_clear_pending_msg_events();
        assert_eq!(msg_events.len(), 3);
+       let mut chans_disabled: HashSet<u64> = [short_id_1, short_id_2, short_id_3].iter().map(|a| *a).collect();
        for e in msg_events {
                match e {
                        MessageSendEvent::BroadcastChannelUpdate { ref msg } => {
-                               let short_id = msg.contents.short_channel_id;
-                               // Check generated channel_update match list in PendingChannelUpdate
-                               if short_id != short_id_1 && short_id != short_id_2 && short_id != short_id_3 {
+                               assert_eq!(msg.contents.flags & (1<<1), 1<<1); // The "channel disabled" bit should be set
+                               // Check that each channel gets updated exactly once
+                               if !chans_disabled.remove(&msg.contents.short_channel_id) {
                                        panic!("Generated ChannelUpdate for wrong chan!");
                                }
                        },
@@ -7624,6 +7625,22 @@ fn test_announce_disable_channels() {
 
        nodes[0].node.timer_tick_occurred();
        assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
+       nodes[0].node.timer_tick_occurred();
+       let msg_events = nodes[0].node.get_and_clear_pending_msg_events();
+       assert_eq!(msg_events.len(), 3);
+       chans_disabled = [short_id_1, short_id_2, short_id_3].iter().map(|a| *a).collect();
+       for e in msg_events {
+               match e {
+                       MessageSendEvent::BroadcastChannelUpdate { ref msg } => {
+                               assert_eq!(msg.contents.flags & (1<<1), 0); // The "channel disabled" bit should be off
+                               // Check that each channel gets updated exactly once
+                               if !chans_disabled.remove(&msg.contents.short_channel_id) {
+                                       panic!("Generated ChannelUpdate for wrong chan!");
+                               }
+                       },
+                       _ => panic!("Unexpected event"),
+               }
+       }
 }
 
 #[test]