@@ -17165,38 +17165,61 @@ mod tests {
17165
17165
17166
17166
#[test]
17167
17167
#[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.")]
17168
17171
fn test_peer_storage() {
17169
17172
let chanmon_cfgs = create_chanmon_cfgs(2);
17173
+ let (persister, chain_monitor);
17170
17174
let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
17175
+ let nodes_0_deserialized;
17171
17176
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);
17175
17189
17176
17190
let peer_storage_msg_events_node0 = nodes[0].chain_monitor.chain_monitor.get_and_clear_pending_msg_events();
17177
17191
let peer_storage_msg_events_node1 = nodes[1].chain_monitor.chain_monitor.get_and_clear_pending_msg_events();
17178
17192
assert_ne!(peer_storage_msg_events_node0.len(), 0);
17179
17193
assert_ne!(peer_storage_msg_events_node1.len(), 0);
17180
17194
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"),
17185
17202
}
17186
- _ => panic!("Unexpected event"),
17187
17203
}
17188
17204
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"),
17193
17212
}
17194
- _ => panic!("Unexpected event"),
17195
17213
}
17196
17214
17215
+
17197
17216
nodes[0].node.peer_disconnected(nodes[1].node.get_our_node_id());
17198
17217
nodes[1].node.peer_disconnected(nodes[0].node.get_our_node_id());
17199
17218
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
+
17200
17223
nodes[0].node.peer_connected(nodes[1].node.get_our_node_id(), &msgs::Init {
17201
17224
features: nodes[1].node.init_features(), networks: None, remote_network_address: None
17202
17225
}, true).unwrap();
@@ -17207,62 +17230,30 @@ mod tests {
17207
17230
let node_1_events = nodes[1].node.get_and_clear_pending_msg_events();
17208
17231
assert_eq!(node_1_events.len(), 2);
17209
17232
17233
+ // Since, node-0 does not have any memory it would not send any message.
17210
17234
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
+ }
17212
17244
17213
- for msg in node_1_events{
17245
+ for msg in node_1_events {
17214
17246
if let MessageSendEvent::SendChannelReestablish { ref node_id, ref msg } = msg {
17215
17247
nodes[0].node.handle_channel_reestablish(nodes[1].node.get_our_node_id(), msg);
17216
17248
assert_eq!(*node_id, nodes[0].node.get_our_node_id());
17217
17249
} else if let MessageSendEvent::SendPeerStorageRetrieval { ref node_id, ref msg } = msg {
17250
+ // Should Panic here!
17218
17251
nodes[0].node.handle_peer_storage_retrieval(nodes[1].node.get_our_node_id(), msg.clone());
17219
17252
assert_eq!(*node_id, nodes[0].node.get_our_node_id());
17220
17253
} else {
17221
17254
panic!("Unexpected event")
17222
17255
}
17223
17256
}
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
- }
17266
17257
}
17267
17258
17268
17259
#[test]
0 commit comments