@@ -17166,38 +17166,61 @@ mod tests {
1716617166
1716717167 #[test]
1716817168 #[rustfmt::skip]
17169+ #[should_panic(expected = "Lost channel state for channel ae3367da2c13bc1ceb86bf56418f62828f7ce9d6bfb15a46af5ba1f1ed8b124f.\n\
17170+ Received peer storage with a more recent state than what our node had.\n\
17171+ Use the FundRecoverer to initiate a force close and sweep the funds.")]
1716917172 fn test_peer_storage() {
1717017173 let chanmon_cfgs = create_chanmon_cfgs(2);
17174+ let (persister, chain_monitor);
1717117175 let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
17176+ let nodes_0_deserialized;
1717217177 let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
17173- let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
17174-
17175- create_announced_chan_between_nodes(&nodes, 0, 1);
17178+ let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
17179+
17180+ let (_, _, cid, _) = create_announced_chan_between_nodes(&nodes, 0, 1);
17181+ send_payment(&nodes[0], &vec!(&nodes[1])[..], 1000);
17182+ let nodes_0_serialized = nodes[0].node.encode();
17183+ let old_state_monitor = get_monitor!(nodes[0], cid).encode();
17184+ send_payment(&nodes[0], &vec!(&nodes[1])[..], 10000);
17185+ send_payment(&nodes[0], &vec!(&nodes[1])[..], 9999);
17186+
17187+ // Update peer storage with latest commitment txns
17188+ connect_blocks(&nodes[0], 1);
17189+ connect_blocks(&nodes[0], 1);
1717617190
1717717191 let peer_storage_msg_events_node0 = nodes[0].chain_monitor.chain_monitor.get_and_clear_pending_msg_events();
1717817192 let peer_storage_msg_events_node1 = nodes[1].chain_monitor.chain_monitor.get_and_clear_pending_msg_events();
1717917193 assert_ne!(peer_storage_msg_events_node0.len(), 0);
1718017194 assert_ne!(peer_storage_msg_events_node1.len(), 0);
1718117195
17182- match peer_storage_msg_events_node0[0] {
17183- MessageSendEvent::SendPeerStorage { ref node_id, ref msg } => {
17184- assert_eq!(*node_id, nodes[1].node.get_our_node_id());
17185- nodes[1].node.handle_peer_storage(nodes[0].node.get_our_node_id(), msg.clone());
17196+ for ps_msg in peer_storage_msg_events_node0 {
17197+ match ps_msg {
17198+ MessageSendEvent::SendPeerStorage { ref node_id, ref msg } => {
17199+ assert_eq!(*node_id, nodes[1].node.get_our_node_id());
17200+ nodes[1].node.handle_peer_storage(nodes[0].node.get_our_node_id(), msg.clone());
17201+ }
17202+ _ => panic!("Unexpected event"),
1718617203 }
17187- _ => panic!("Unexpected event"),
1718817204 }
1718917205
17190- match peer_storage_msg_events_node1[0] {
17191- MessageSendEvent::SendPeerStorage { ref node_id, ref msg } => {
17192- assert_eq!(*node_id, nodes[0].node.get_our_node_id());
17193- nodes[0].node.handle_peer_storage(nodes[1].node.get_our_node_id(), msg.clone());
17206+ for ps_msg in peer_storage_msg_events_node1 {
17207+ match ps_msg {
17208+ MessageSendEvent::SendPeerStorage { ref node_id, ref msg } => {
17209+ assert_eq!(*node_id, nodes[0].node.get_our_node_id());
17210+ nodes[0].node.handle_peer_storage(nodes[1].node.get_our_node_id(), msg.clone());
17211+ }
17212+ _ => panic!("Unexpected event"),
1719417213 }
17195- _ => panic!("Unexpected event"),
1719617214 }
1719717215
17216+
1719817217 nodes[0].node.peer_disconnected(nodes[1].node.get_our_node_id());
1719917218 nodes[1].node.peer_disconnected(nodes[0].node.get_our_node_id());
1720017219
17220+ // Reload Node!
17221+ // nodes[0].chain_source.clear_watched_txn_and_outputs();
17222+ reload_node!(nodes[0], test_default_channel_config(), &nodes_0_serialized, &[&old_state_monitor[..]], persister, chain_monitor, nodes_0_deserialized);
17223+
1720117224 nodes[0].node.peer_connected(nodes[1].node.get_our_node_id(), &msgs::Init {
1720217225 features: nodes[1].node.init_features(), networks: None, remote_network_address: None
1720317226 }, true).unwrap();
@@ -17208,62 +17231,30 @@ mod tests {
1720817231 let node_1_events = nodes[1].node.get_and_clear_pending_msg_events();
1720917232 assert_eq!(node_1_events.len(), 2);
1721017233
17234+ // Since, node-0 does not have any memory it would not send any message.
1721117235 let node_0_events = nodes[0].node.get_and_clear_pending_msg_events();
17212- assert_eq!(node_0_events.len(), 2);
17236+ assert_eq!(node_0_events.len(), 1);
17237+
17238+ match node_0_events[0] {
17239+ MessageSendEvent::SendChannelReestablish { ref node_id, .. } => {
17240+ assert_eq!(*node_id, nodes[1].node.get_our_node_id());
17241+ // nodes[0] would send a bogus channel reestablish, so there's no need to handle this.
17242+ }
17243+ _ => panic!("Unexpected event"),
17244+ }
1721317245
17214- for msg in node_1_events{
17246+ for msg in node_1_events {
1721517247 if let MessageSendEvent::SendChannelReestablish { ref node_id, ref msg } = msg {
1721617248 nodes[0].node.handle_channel_reestablish(nodes[1].node.get_our_node_id(), msg);
1721717249 assert_eq!(*node_id, nodes[0].node.get_our_node_id());
1721817250 } else if let MessageSendEvent::SendPeerStorageRetrieval { ref node_id, ref msg } = msg {
17251+ // Should Panic here!
1721917252 nodes[0].node.handle_peer_storage_retrieval(nodes[1].node.get_our_node_id(), msg.clone());
1722017253 assert_eq!(*node_id, nodes[0].node.get_our_node_id());
1722117254 } else {
1722217255 panic!("Unexpected event")
1722317256 }
1722417257 }
17225-
17226- for msg in node_0_events{
17227- if let MessageSendEvent::SendChannelReestablish { ref node_id, ref msg } = msg {
17228- nodes[1].node.handle_channel_reestablish(nodes[0].node.get_our_node_id(), msg);
17229- assert_eq!(*node_id, nodes[1].node.get_our_node_id());
17230- } else if let MessageSendEvent::SendPeerStorageRetrieval { ref node_id, ref msg } = msg {
17231- nodes[1].node.handle_peer_storage_retrieval(nodes[0].node.get_our_node_id(), msg.clone());
17232- assert_eq!(*node_id, nodes[1].node.get_our_node_id());
17233- } else {
17234- panic!("Unexpected event")
17235- }
17236- }
17237-
17238- let node_1_msg_events = nodes[1].node.get_and_clear_pending_msg_events();
17239- let node_0_msg_events = nodes[0].node.get_and_clear_pending_msg_events();
17240-
17241- assert_eq!(node_1_msg_events.len(), 3);
17242- assert_eq!(node_0_msg_events.len(), 3);
17243-
17244- for msg in node_1_msg_events {
17245- if let MessageSendEvent::SendChannelReady { ref node_id, .. } = msg {
17246- assert_eq!(*node_id, nodes[0].node.get_our_node_id());
17247- } else if let MessageSendEvent::SendAnnouncementSignatures { ref node_id, .. } = msg {
17248- assert_eq!(*node_id, nodes[0].node.get_our_node_id());
17249- } else if let MessageSendEvent::SendChannelUpdate { ref node_id, .. } = msg {
17250- assert_eq!(*node_id, nodes[0].node.get_our_node_id());
17251- } else {
17252- panic!("Unexpected event")
17253- }
17254- }
17255-
17256- for msg in node_0_msg_events {
17257- if let MessageSendEvent::SendChannelReady { ref node_id, .. } = msg {
17258- assert_eq!(*node_id, nodes[1].node.get_our_node_id());
17259- } else if let MessageSendEvent::SendAnnouncementSignatures { ref node_id, .. } = msg {
17260- assert_eq!(*node_id, nodes[1].node.get_our_node_id());
17261- } else if let MessageSendEvent::SendChannelUpdate { ref node_id, .. } = msg {
17262- assert_eq!(*node_id, nodes[1].node.get_our_node_id());
17263- } else {
17264- panic!("Unexpected event")
17265- }
17266- }
1726717258 }
1726817259
1726917260 #[test]
0 commit comments