Skip to content

Commit 6c8e7e4

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 068549d commit 6c8e7e4

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
@@ -14848,6 +14848,70 @@ mod tests {
1484814848
}
1484914849
}
1485014850

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

0 commit comments

Comments
 (0)