@@ -17544,38 +17544,58 @@ mod tests {
17544
17544
17545
17545
#[test]
17546
17546
#[rustfmt::skip]
17547
+ #[cfg(peer_storage)]
17547
17548
fn test_peer_storage() {
17548
17549
let chanmon_cfgs = create_chanmon_cfgs(2);
17550
+ let (persister, chain_monitor);
17549
17551
let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
17552
+ let nodes_0_deserialized;
17550
17553
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);
17552
17555
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);
17554
17566
17555
17567
let peer_storage_msg_events_node0 = nodes[0].chain_monitor.chain_monitor.get_and_clear_pending_msg_events();
17556
17568
let peer_storage_msg_events_node1 = nodes[1].chain_monitor.chain_monitor.get_and_clear_pending_msg_events();
17557
17569
assert_ne!(peer_storage_msg_events_node0.len(), 0);
17558
17570
assert_ne!(peer_storage_msg_events_node1.len(), 0);
17559
17571
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"),
17564
17579
}
17565
- _ => panic!("Unexpected event"),
17566
17580
}
17567
17581
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"),
17572
17589
}
17573
- _ => panic!("Unexpected event"),
17574
17590
}
17575
17591
17576
17592
nodes[0].node.peer_disconnected(nodes[1].node.get_our_node_id());
17577
17593
nodes[1].node.peer_disconnected(nodes[0].node.get_our_node_id());
17578
17594
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
+
17579
17599
nodes[0].node.peer_connected(nodes[1].node.get_our_node_id(), &msgs::Init {
17580
17600
features: nodes[1].node.init_features(), networks: None, remote_network_address: None
17581
17601
}, true).unwrap();
@@ -17586,62 +17606,41 @@ mod tests {
17586
17606
let node_1_events = nodes[1].node.get_and_clear_pending_msg_events();
17587
17607
assert_eq!(node_1_events.len(), 2);
17588
17608
17609
+ // Since, node-0 does not have any memory it would not send any message.
17589
17610
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 );
17591
17612
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 {
17593
17622
if let MessageSendEvent::SendChannelReestablish { ref node_id, ref msg } = msg {
17594
17623
nodes[0].node.handle_channel_reestablish(nodes[1].node.get_our_node_id(), msg);
17595
17624
assert_eq!(*node_id, nodes[0].node.get_our_node_id());
17596
17625
} else if let MessageSendEvent::SendPeerStorageRetrieval { ref node_id, ref msg } = msg {
17626
+ // Should Panic here!
17597
17627
nodes[0].node.handle_peer_storage_retrieval(nodes[1].node.get_our_node_id(), msg.clone());
17598
17628
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;
17599
17637
} else {
17600
17638
panic!("Unexpected event")
17601
17639
}
17602
17640
}
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());
17645
17644
}
17646
17645
17647
17646
#[test]
0 commit comments