Skip to content

Commit 551f1f2

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 a7c4371 commit 551f1f2

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
@@ -14784,6 +14784,70 @@ mod tests {
1478414784
}
1478514785
}
1478614786

14787+
#[test]
14788+
fn test_peer_storage() {
14789+
let chanmon_cfgs = create_chanmon_cfgs(2);
14790+
let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
14791+
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
14792+
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
14793+
14794+
create_announced_chan_between_nodes(&nodes, 0, 1);
14795+
14796+
// Since we do not send peer storage, we manually simulate receiving a dummy
14797+
// `PeerStorage` from the channel partner.
14798+
nodes[0].node.handle_peer_storage(nodes[1].node.get_our_node_id(), msgs::PeerStorage{data: vec![0; 100]});
14799+
14800+
nodes[0].node.peer_disconnected(nodes[1].node.get_our_node_id());
14801+
nodes[1].node.peer_disconnected(nodes[0].node.get_our_node_id());
14802+
14803+
nodes[0].node.peer_connected(nodes[1].node.get_our_node_id(), &msgs::Init {
14804+
features: nodes[1].node.init_features(), networks: None, remote_network_address: None
14805+
}, true).unwrap();
14806+
nodes[1].node.peer_connected(nodes[0].node.get_our_node_id(), &msgs::Init {
14807+
features: nodes[0].node.init_features(), networks: None, remote_network_address: None
14808+
}, false).unwrap();
14809+
14810+
let node_0_events = nodes[0].node.get_and_clear_pending_msg_events();
14811+
assert_eq!(node_0_events.len(), 2);
14812+
14813+
for msg in node_0_events{
14814+
if let MessageSendEvent::SendChannelReestablish { ref node_id, ref msg } = msg {
14815+
nodes[1].node.handle_channel_reestablish(nodes[0].node.get_our_node_id(), msg);
14816+
assert_eq!(*node_id, nodes[1].node.get_our_node_id());
14817+
} else if let MessageSendEvent::SendPeerStorageRetrieval { ref node_id, ref msg } = msg {
14818+
nodes[1].node.handle_peer_storage_retrieval(nodes[0].node.get_our_node_id(), msg.clone());
14819+
assert_eq!(*node_id, nodes[1].node.get_our_node_id());
14820+
} else {
14821+
panic!("Unexpected event")
14822+
}
14823+
}
14824+
14825+
let msg_events_after_peer_storage_retrieval = nodes[1].node.get_and_clear_pending_msg_events();
14826+
14827+
// Check if we receive a warning message.
14828+
let peer_storage_warning: Vec<&MessageSendEvent> = msg_events_after_peer_storage_retrieval
14829+
.iter()
14830+
.filter(|event| match event {
14831+
MessageSendEvent::HandleError { .. } => true,
14832+
_ => false,
14833+
})
14834+
.collect();
14835+
14836+
assert_eq!(peer_storage_warning.len(), 1);
14837+
14838+
match peer_storage_warning[0] {
14839+
MessageSendEvent::HandleError { node_id, action } => {
14840+
assert_eq!(*node_id, nodes[0].node.get_our_node_id());
14841+
match action {
14842+
ErrorAction::SendWarningMessage { msg, .. } =>
14843+
assert_eq!(msg.data, "Invalid peer_storage_retrieval message received.".to_owned()),
14844+
_ => panic!("Unexpected error action"),
14845+
}
14846+
}
14847+
_ => panic!("Unexpected event"),
14848+
}
14849+
}
14850+
1478714851
#[test]
1478814852
fn test_keysend_dup_payment_hash() {
1478914853
// (1): Test that a keysend payment with a duplicate payment hash to an existing pending

0 commit comments

Comments
 (0)