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