Skip to content

Commit 569c642

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 904c0d7 commit 569c642

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
@@ -14713,6 +14713,70 @@ mod tests {
1471314713
}
1471414714
}
1471514715

14716+
#[test]
14717+
fn test_peer_storage() {
14718+
let chanmon_cfgs = create_chanmon_cfgs(2);
14719+
let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
14720+
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
14721+
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
14722+
14723+
create_announced_chan_between_nodes(&nodes, 0, 1);
14724+
14725+
// Since we do not send peer storage, we manually simulate receiving a dummy
14726+
// `PeerStorage` from the channel partner.
14727+
nodes[0].node.handle_peer_storage(nodes[1].node.get_our_node_id(), &msgs::PeerStorage{data: vec![0; 100]});
14728+
14729+
nodes[0].node.peer_disconnected(nodes[1].node.get_our_node_id());
14730+
nodes[1].node.peer_disconnected(nodes[0].node.get_our_node_id());
14731+
14732+
nodes[0].node.peer_connected(nodes[1].node.get_our_node_id(), &msgs::Init {
14733+
features: nodes[1].node.init_features(), networks: None, remote_network_address: None
14734+
}, true).unwrap();
14735+
nodes[1].node.peer_connected(nodes[0].node.get_our_node_id(), &msgs::Init {
14736+
features: nodes[0].node.init_features(), networks: None, remote_network_address: None
14737+
}, false).unwrap();
14738+
14739+
let node_0_events = nodes[0].node.get_and_clear_pending_msg_events();
14740+
assert_eq!(node_0_events.len(), 2);
14741+
14742+
for msg in node_0_events{
14743+
if let MessageSendEvent::SendChannelReestablish { ref node_id, ref msg } = msg {
14744+
nodes[1].node.handle_channel_reestablish(nodes[0].node.get_our_node_id(), msg);
14745+
assert_eq!(*node_id, nodes[1].node.get_our_node_id());
14746+
} else if let MessageSendEvent::SendPeerStorageRetrieval { ref node_id, ref msg } = msg {
14747+
nodes[1].node.handle_peer_storage_retrieval(nodes[0].node.get_our_node_id(), msg);
14748+
assert_eq!(*node_id, nodes[1].node.get_our_node_id());
14749+
} else {
14750+
panic!("Unexpected event")
14751+
}
14752+
}
14753+
14754+
let msg_events_after_peer_storage_retrieval = nodes[1].node.get_and_clear_pending_msg_events();
14755+
14756+
// Check if we receive a warning message.
14757+
let peer_storage_warning: Vec<&MessageSendEvent> = msg_events_after_peer_storage_retrieval
14758+
.iter()
14759+
.filter(|event| match event {
14760+
MessageSendEvent::HandleError { .. } => true,
14761+
_ => false,
14762+
})
14763+
.collect();
14764+
14765+
assert_eq!(peer_storage_warning.len(), 1);
14766+
14767+
match peer_storage_warning[0] {
14768+
MessageSendEvent::HandleError { node_id, action } => {
14769+
assert_eq!(*node_id, nodes[0].node.get_our_node_id());
14770+
match action {
14771+
ErrorAction::SendWarningMessage { msg, .. } =>
14772+
assert_eq!(msg.data, "Invalid peer_storage_retrieval message received.".to_owned()),
14773+
_ => panic!("Unexpected error action"),
14774+
}
14775+
}
14776+
_ => panic!("Unexpected event"),
14777+
}
14778+
}
14779+
1471614780
#[test]
1471714781
fn test_keysend_dup_payment_hash() {
1471814782
// (1): Test that a keysend payment with a duplicate payment hash to an existing pending

0 commit comments

Comments
 (0)