Skip to content

Commit 51c475e

Browse files
committed
test: Modify test_peer_storage to check latest changes
Node should now determine lost states using retrieved peer storage.
1 parent 33d466a commit 51c475e

File tree

1 file changed

+55
-56
lines changed

1 file changed

+55
-56
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 55 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)