@@ -11689,6 +11689,56 @@ mod tests {
11689
11689
}
11690
11690
}
11691
11691
11692
+ #[test]
11693
+ fn test_channel_update_cached() {
11694
+ let chanmon_cfgs = create_chanmon_cfgs(3);
11695
+ let node_cfgs = create_node_cfgs(3, &chanmon_cfgs);
11696
+ let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, None, None]);
11697
+ let nodes = create_network(3, &node_cfgs, &node_chanmgrs);
11698
+
11699
+ let chan = create_announced_chan_between_nodes(&nodes, 0, 1);
11700
+
11701
+ nodes[0].node.force_close_channel_with_peer(&chan.2, &nodes[1].node.get_our_node_id(), None, true).unwrap();
11702
+ check_added_monitors!(nodes[0], 1);
11703
+ check_closed_event!(nodes[0], 1, ClosureReason::HolderForceClosed, [nodes[1].node.get_our_node_id()], 100000);
11704
+
11705
+ {
11706
+ // Assert that ChannelUpdate message has been added to node[0] pending broadcast messages
11707
+ let pending_broadcast_messages= nodes[0].node.pending_broadcast_messages.lock().unwrap();
11708
+ assert_eq!(pending_broadcast_messages.len(), 1);
11709
+ }
11710
+
11711
+ // Confirm that the channel_update was not sent immediately to node[1] but was cached.
11712
+ let node_1_events = nodes[1].node.get_and_clear_pending_msg_events();
11713
+ assert_eq!(node_1_events.len(), 0);
11714
+
11715
+ // Test that we do not retrieve the pending broadcast messages when we are not connected to any peer
11716
+ nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id());
11717
+ nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id());
11718
+
11719
+ nodes[0].node.peer_disconnected(&nodes[2].node.get_our_node_id());
11720
+ nodes[2].node.peer_disconnected(&nodes[0].node.get_our_node_id());
11721
+
11722
+ let node_0_events = nodes[0].node.get_and_clear_pending_msg_events();
11723
+ assert_eq!(node_0_events.len(), 0);
11724
+
11725
+ // Now we reconnect to a peer
11726
+ nodes[0].node.peer_connected(&nodes[2].node.get_our_node_id(), &msgs::Init {
11727
+ features: nodes[2].node.init_features(), networks: None, remote_network_address: None
11728
+ }, true).unwrap();
11729
+ nodes[2].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init {
11730
+ features: nodes[0].node.init_features(), networks: None, remote_network_address: None
11731
+ }, false).unwrap();
11732
+
11733
+ // Confirm that get_and_clear_pending_msg_events correctly captures pending broadcast messages
11734
+ let node_0_events = nodes[0].node.get_and_clear_pending_msg_events();
11735
+ assert_eq!(node_0_events.len(), 1);
11736
+ match &node_0_events[0] {
11737
+ MessageSendEvent::BroadcastChannelUpdate { .. } => (),
11738
+ _ => panic!("Unexpected event"),
11739
+ }
11740
+ }
11741
+
11692
11742
#[test]
11693
11743
fn test_drop_disconnected_peers_when_removing_channels() {
11694
11744
let chanmon_cfgs = create_chanmon_cfgs(3);
0 commit comments