Skip to content

Commit 662fff1

Browse files
committed
test: Modify test_peer_storage to check latest changes
Node should now determine lost states using retrieved peer storage.
1 parent 2b3fdb9 commit 662fff1

File tree

2 files changed

+53
-56
lines changed

2 files changed

+53
-56
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 48 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -17165,38 +17165,62 @@ mod tests {
1716517165

1716617166
#[test]
1716717167
#[rustfmt::skip]
17168+
#[cfg(peer_storage)]
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.")]
1716817172
fn test_peer_storage() {
1716917173
let chanmon_cfgs = create_chanmon_cfgs(2);
17174+
let (persister, chain_monitor);
1717017175
let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
17176+
let nodes_0_deserialized;
1717117177
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
17172-
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
17178+
let mut nodes = create_network(2, &node_cfgs, &node_chanmgrs);
1717317179

17174-
create_announced_chan_between_nodes(&nodes, 0, 1);
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);
1717517190

1717617191
let peer_storage_msg_events_node0 = nodes[0].chain_monitor.chain_monitor.get_and_clear_pending_msg_events();
1717717192
let peer_storage_msg_events_node1 = nodes[1].chain_monitor.chain_monitor.get_and_clear_pending_msg_events();
1717817193
assert_ne!(peer_storage_msg_events_node0.len(), 0);
1717917194
assert_ne!(peer_storage_msg_events_node1.len(), 0);
1718017195

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());
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"),
1718517203
}
17186-
_ => panic!("Unexpected event"),
1718717204
}
1718817205

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());
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"),
1719317213
}
17194-
_ => panic!("Unexpected event"),
1719517214
}
1719617215

17216+
1719717217
nodes[0].node.peer_disconnected(nodes[1].node.get_our_node_id());
1719817218
nodes[1].node.peer_disconnected(nodes[0].node.get_our_node_id());
1719917219

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+
1720017224
nodes[0].node.peer_connected(nodes[1].node.get_our_node_id(), &msgs::Init {
1720117225
features: nodes[1].node.init_features(), networks: None, remote_network_address: None
1720217226
}, true).unwrap();
@@ -17207,62 +17231,30 @@ mod tests {
1720717231
let node_1_events = nodes[1].node.get_and_clear_pending_msg_events();
1720817232
assert_eq!(node_1_events.len(), 2);
1720917233

17234+
// Since, node-0 does not have any memory it would not send any message.
1721017235
let node_0_events = nodes[0].node.get_and_clear_pending_msg_events();
17211-
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+
}
1721217245

17213-
for msg in node_1_events{
17246+
for msg in node_1_events {
1721417247
if let MessageSendEvent::SendChannelReestablish { ref node_id, ref msg } = msg {
1721517248
nodes[0].node.handle_channel_reestablish(nodes[1].node.get_our_node_id(), msg);
1721617249
assert_eq!(*node_id, nodes[0].node.get_our_node_id());
1721717250
} else if let MessageSendEvent::SendPeerStorageRetrieval { ref node_id, ref msg } = msg {
17251+
// Should Panic here!
1721817252
nodes[0].node.handle_peer_storage_retrieval(nodes[1].node.get_our_node_id(), msg.clone());
1721917253
assert_eq!(*node_id, nodes[0].node.get_our_node_id());
1722017254
} else {
1722117255
panic!("Unexpected event")
1722217256
}
1722317257
}
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-
}
1726617258
}
1726717259

1726817260
#[test]

lightning/src/util/test_utils.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1822,6 +1822,11 @@ impl TestChainSource {
18221822
self.watched_outputs.lock().unwrap().remove(&(outpoint, script_pubkey.clone()));
18231823
self.watched_txn.lock().unwrap().remove(&(outpoint.txid, script_pubkey));
18241824
}
1825+
1826+
pub fn clear_watched_txn_and_outputs(&self) {
1827+
self.watched_outputs.lock().unwrap().clear();
1828+
self.watched_txn.lock().unwrap().clear();
1829+
}
18251830
}
18261831

18271832
impl UtxoLookup for TestChainSource {

0 commit comments

Comments
 (0)