Skip to content

Commit e55cc1e

Browse files
Aditya Sharmaadi2011
Aditya Sharma
authored andcommitted
Add test for peer storage handling
This test ensures that PeerStorage & PeerStorageRetrieval handling behaves as expected. It simulates receiving a dummy peer storage message, disconnecting and reconnecting peers, and validates that the correct messages are exchanged during reestablishment. - Added a test case `test_peer_storage` to verify the handling of `PeerStorageMessage` and the validation of warning messages in the event of invalid peer storage retrieval. - Simulated peer storage retrieval upon reconnection between nodes. - Validated that a warning message is generated when `PeerStorageRetrievalMessage` is received. - Ensured the warning message contains the expected error description.
1 parent ec18493 commit e55cc1e

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed

lightning/src/ln/channelmanager.rs

+64
Original file line numberDiff line numberDiff line change
@@ -14847,6 +14847,70 @@ mod tests {
1484714847
}
1484814848
}
1484914849

14850+
#[test]
14851+
fn test_peer_storage() {
14852+
let chanmon_cfgs = create_chanmon_cfgs(2);
14853+
let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
14854+
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
14855+
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
14856+
14857+
create_announced_chan_between_nodes(&nodes, 0, 1);
14858+
14859+
// Since we do not send peer storage, we manually simulate receiving a dummy
14860+
// `PeerStorage` from the channel partner.
14861+
nodes[0].node.handle_peer_storage(nodes[1].node.get_our_node_id(), msgs::PeerStorage{data: vec![0; 100]});
14862+
14863+
nodes[0].node.peer_disconnected(nodes[1].node.get_our_node_id());
14864+
nodes[1].node.peer_disconnected(nodes[0].node.get_our_node_id());
14865+
14866+
nodes[0].node.peer_connected(nodes[1].node.get_our_node_id(), &msgs::Init {
14867+
features: nodes[1].node.init_features(), networks: None, remote_network_address: None
14868+
}, true).unwrap();
14869+
nodes[1].node.peer_connected(nodes[0].node.get_our_node_id(), &msgs::Init {
14870+
features: nodes[0].node.init_features(), networks: None, remote_network_address: None
14871+
}, false).unwrap();
14872+
14873+
let node_0_events = nodes[0].node.get_and_clear_pending_msg_events();
14874+
assert_eq!(node_0_events.len(), 2);
14875+
14876+
for msg in node_0_events{
14877+
if let MessageSendEvent::SendChannelReestablish { ref node_id, ref msg } = msg {
14878+
nodes[1].node.handle_channel_reestablish(nodes[0].node.get_our_node_id(), msg);
14879+
assert_eq!(*node_id, nodes[1].node.get_our_node_id());
14880+
} else if let MessageSendEvent::SendPeerStorageRetrieval { ref node_id, ref msg } = msg {
14881+
nodes[1].node.handle_peer_storage_retrieval(nodes[0].node.get_our_node_id(), msg.clone());
14882+
assert_eq!(*node_id, nodes[1].node.get_our_node_id());
14883+
} else {
14884+
panic!("Unexpected event")
14885+
}
14886+
}
14887+
14888+
let msg_events_after_peer_storage_retrieval = nodes[1].node.get_and_clear_pending_msg_events();
14889+
14890+
// Check if we receive a warning message.
14891+
let peer_storage_warning: Vec<&MessageSendEvent> = msg_events_after_peer_storage_retrieval
14892+
.iter()
14893+
.filter(|event| match event {
14894+
MessageSendEvent::HandleError { .. } => true,
14895+
_ => false,
14896+
})
14897+
.collect();
14898+
14899+
assert_eq!(peer_storage_warning.len(), 1);
14900+
14901+
match peer_storage_warning[0] {
14902+
MessageSendEvent::HandleError { node_id, action } => {
14903+
assert_eq!(*node_id, nodes[0].node.get_our_node_id());
14904+
match action {
14905+
ErrorAction::SendWarningMessage { msg, .. } =>
14906+
assert_eq!(msg.data, "Invalid peer_storage_retrieval message received.".to_owned()),
14907+
_ => panic!("Unexpected error action"),
14908+
}
14909+
}
14910+
_ => panic!("Unexpected event"),
14911+
}
14912+
}
14913+
1485014914
#[test]
1485114915
fn test_keysend_dup_payment_hash() {
1485214916
// (1): Test that a keysend payment with a duplicate payment hash to an existing pending

0 commit comments

Comments
 (0)