@@ -17544,38 +17544,58 @@ mod tests {
1754417544
1754517545 #[test]
1754617546 #[rustfmt::skip]
17547+ #[cfg(peer_storage)]
1754717548 fn test_peer_storage() {
1754817549 let chanmon_cfgs = create_chanmon_cfgs(2);
17550+ let (persister, chain_monitor);
1754917551 let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
17552+ let nodes_0_deserialized;
1755017553 let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
17551- let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
17554+ let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1755217555
17553- create_announced_chan_between_nodes(&nodes, 0, 1);
17556+ let (_, _, cid, _) = create_announced_chan_between_nodes(&nodes, 0, 1);
17557+ send_payment(&nodes[0], &[&nodes[1]], 1000);
17558+ let nodes_0_serialized = nodes[0].node.encode();
17559+ let old_state_monitor = get_monitor!(nodes[0], cid).encode();
17560+ send_payment(&nodes[0], &[&nodes[1]], 10000);
17561+ send_payment(&nodes[0], &[&nodes[1]], 9999);
17562+
17563+ // Update peer storage with latest commitment txns
17564+ connect_blocks(&nodes[0], 1);
17565+ connect_blocks(&nodes[0], 1);
1755417566
1755517567 let peer_storage_msg_events_node0 = nodes[0].chain_monitor.chain_monitor.get_and_clear_pending_msg_events();
1755617568 let peer_storage_msg_events_node1 = nodes[1].chain_monitor.chain_monitor.get_and_clear_pending_msg_events();
1755717569 assert_ne!(peer_storage_msg_events_node0.len(), 0);
1755817570 assert_ne!(peer_storage_msg_events_node1.len(), 0);
1755917571
17560- match peer_storage_msg_events_node0[0] {
17561- MessageSendEvent::SendPeerStorage { ref node_id, ref msg } => {
17562- assert_eq!(*node_id, nodes[1].node.get_our_node_id());
17563- nodes[1].node.handle_peer_storage(nodes[0].node.get_our_node_id(), msg.clone());
17572+ for ps_msg in peer_storage_msg_events_node0 {
17573+ match ps_msg {
17574+ MessageSendEvent::SendPeerStorage { ref node_id, ref msg } => {
17575+ assert_eq!(*node_id, nodes[1].node.get_our_node_id());
17576+ nodes[1].node.handle_peer_storage(nodes[0].node.get_our_node_id(), msg.clone());
17577+ }
17578+ _ => panic!("Unexpected event"),
1756417579 }
17565- _ => panic!("Unexpected event"),
1756617580 }
1756717581
17568- match peer_storage_msg_events_node1[0] {
17569- MessageSendEvent::SendPeerStorage { ref node_id, ref msg } => {
17570- assert_eq!(*node_id, nodes[0].node.get_our_node_id());
17571- nodes[0].node.handle_peer_storage(nodes[1].node.get_our_node_id(), msg.clone());
17582+ for ps_msg in peer_storage_msg_events_node1 {
17583+ match ps_msg {
17584+ MessageSendEvent::SendPeerStorage { ref node_id, ref msg } => {
17585+ assert_eq!(*node_id, nodes[0].node.get_our_node_id());
17586+ nodes[0].node.handle_peer_storage(nodes[1].node.get_our_node_id(), msg.clone());
17587+ }
17588+ _ => panic!("Unexpected event"),
1757217589 }
17573- _ => panic!("Unexpected event"),
1757417590 }
1757517591
1757617592 nodes[0].node.peer_disconnected(nodes[1].node.get_our_node_id());
1757717593 nodes[1].node.peer_disconnected(nodes[0].node.get_our_node_id());
1757817594
17595+ // Reload Node!
17596+ // TODO: Handle the case where we've completely forgotten about an active channel.
17597+ reload_node!(nodes[0], test_default_channel_config(), &nodes_0_serialized, &[&old_state_monitor[..]], persister, chain_monitor, nodes_0_deserialized);
17598+
1757917599 nodes[0].node.peer_connected(nodes[1].node.get_our_node_id(), &msgs::Init {
1758017600 features: nodes[1].node.init_features(), networks: None, remote_network_address: None
1758117601 }, true).unwrap();
@@ -17586,62 +17606,41 @@ mod tests {
1758617606 let node_1_events = nodes[1].node.get_and_clear_pending_msg_events();
1758717607 assert_eq!(node_1_events.len(), 2);
1758817608
17609+ // Since, node-0 does not have any memory it would not send any message.
1758917610 let node_0_events = nodes[0].node.get_and_clear_pending_msg_events();
17590- assert_eq!(node_0_events.len(), 2 );
17611+ assert_eq!(node_0_events.len(), 1 );
1759117612
17592- for msg in node_1_events{
17613+ match node_0_events[0] {
17614+ MessageSendEvent::SendChannelReestablish { ref node_id, .. } => {
17615+ assert_eq!(*node_id, nodes[1].node.get_our_node_id());
17616+ // nodes[0] would send a bogus channel reestablish, so there's no need to handle this.
17617+ }
17618+ _ => panic!("Unexpected event"),
17619+ }
17620+
17621+ for msg in node_1_events {
1759317622 if let MessageSendEvent::SendChannelReestablish { ref node_id, ref msg } = msg {
1759417623 nodes[0].node.handle_channel_reestablish(nodes[1].node.get_our_node_id(), msg);
1759517624 assert_eq!(*node_id, nodes[0].node.get_our_node_id());
1759617625 } else if let MessageSendEvent::SendPeerStorageRetrieval { ref node_id, ref msg } = msg {
17626+ // Should Panic here!
1759717627 nodes[0].node.handle_peer_storage_retrieval(nodes[1].node.get_our_node_id(), msg.clone());
1759817628 assert_eq!(*node_id, nodes[0].node.get_our_node_id());
17629+ // Should Panic here!
17630+ let res = std::panic::catch_unwind(|| {
17631+ nodes[0]
17632+ .node
17633+ .handle_peer_storage_retrieval(nodes[1].node.get_our_node_id(), msg.clone())
17634+ });
17635+ assert!(res.is_err());
17636+ break;
1759917637 } else {
1760017638 panic!("Unexpected event")
1760117639 }
1760217640 }
17603-
17604- for msg in node_0_events{
17605- if let MessageSendEvent::SendChannelReestablish { ref node_id, ref msg } = msg {
17606- nodes[1].node.handle_channel_reestablish(nodes[0].node.get_our_node_id(), msg);
17607- assert_eq!(*node_id, nodes[1].node.get_our_node_id());
17608- } else if let MessageSendEvent::SendPeerStorageRetrieval { ref node_id, ref msg } = msg {
17609- nodes[1].node.handle_peer_storage_retrieval(nodes[0].node.get_our_node_id(), msg.clone());
17610- assert_eq!(*node_id, nodes[1].node.get_our_node_id());
17611- } else {
17612- panic!("Unexpected event")
17613- }
17614- }
17615-
17616- let node_1_msg_events = nodes[1].node.get_and_clear_pending_msg_events();
17617- let node_0_msg_events = nodes[0].node.get_and_clear_pending_msg_events();
17618-
17619- assert_eq!(node_1_msg_events.len(), 3);
17620- assert_eq!(node_0_msg_events.len(), 3);
17621-
17622- for msg in node_1_msg_events {
17623- if let MessageSendEvent::SendChannelReady { ref node_id, .. } = msg {
17624- assert_eq!(*node_id, nodes[0].node.get_our_node_id());
17625- } else if let MessageSendEvent::SendAnnouncementSignatures { ref node_id, .. } = msg {
17626- assert_eq!(*node_id, nodes[0].node.get_our_node_id());
17627- } else if let MessageSendEvent::SendChannelUpdate { ref node_id, .. } = msg {
17628- assert_eq!(*node_id, nodes[0].node.get_our_node_id());
17629- } else {
17630- panic!("Unexpected event")
17631- }
17632- }
17633-
17634- for msg in node_0_msg_events {
17635- if let MessageSendEvent::SendChannelReady { ref node_id, .. } = msg {
17636- assert_eq!(*node_id, nodes[1].node.get_our_node_id());
17637- } else if let MessageSendEvent::SendAnnouncementSignatures { ref node_id, .. } = msg {
17638- assert_eq!(*node_id, nodes[1].node.get_our_node_id());
17639- } else if let MessageSendEvent::SendChannelUpdate { ref node_id, .. } = msg {
17640- assert_eq!(*node_id, nodes[1].node.get_our_node_id());
17641- } else {
17642- panic!("Unexpected event")
17643- }
17644- }
17641+ // When we panic'd, we expect to panic on `Drop`.
17642+ let res = std::panic::catch_unwind(|| drop(nodes));
17643+ assert!(res.is_err());
1764517644 }
1764617645
1764717646 #[test]
0 commit comments