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