Skip to content

Commit 724d51b

Browse files
committed
gossip: Test NodeFailure events
1 parent 002ef78 commit 724d51b

File tree

1 file changed

+49
-1
lines changed

1 file changed

+49
-1
lines changed

lightning/src/routing/gossip.rs

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2268,6 +2268,7 @@ mod tests {
22682268

22692269
let node_1_privkey = &SecretKey::from_slice(&[42; 32]).unwrap();
22702270
let node_2_privkey = &SecretKey::from_slice(&[41; 32]).unwrap();
2271+
let node_2_id = PublicKey::from_secret_key(&secp_ctx, node_2_privkey);
22712272

22722273
{
22732274
// There is no nodes in the table at the beginning.
@@ -2357,7 +2358,54 @@ mod tests {
23572358
assert_eq!(network_graph.read_only().channels().len(), 0);
23582359
// Nodes are also deleted because there are no associated channels anymore
23592360
assert_eq!(network_graph.read_only().nodes().len(), 0);
2360-
// TODO: Test NetworkUpdate::NodeFailure, which is not implemented yet.
2361+
2362+
// Announce a channel to test permanent node failure
2363+
let valid_channel_announcement = get_signed_channel_announcement(|_| {}, node_1_privkey, node_2_privkey, &secp_ctx);
2364+
let short_channel_id = valid_channel_announcement.contents.short_channel_id;
2365+
let chain_source: Option<&test_utils::TestChainSource> = None;
2366+
assert!(network_graph.update_channel_from_announcement(&valid_channel_announcement, &chain_source).is_ok());
2367+
assert!(network_graph.read_only().channels().get(&short_channel_id).is_some());
2368+
2369+
// Non-permanent node failure does not delete any nodes or channels
2370+
network_graph.handle_event(&Event::PaymentPathFailed {
2371+
payment_id: None,
2372+
payment_hash: PaymentHash([0; 32]),
2373+
rejected_by_dest: false,
2374+
all_paths_failed: true,
2375+
path: vec![],
2376+
network_update: Some(NetworkUpdate::NodeFailure {
2377+
node_id: node_2_id,
2378+
is_permanent: false,
2379+
}),
2380+
short_channel_id: None,
2381+
retry: None,
2382+
error_code: None,
2383+
error_data: None,
2384+
});
2385+
2386+
assert!(network_graph.read_only().channels().get(&short_channel_id).is_some());
2387+
assert!(network_graph.read_only().nodes().get(&NodeId::from_pubkey(&node_2_id)).is_some());
2388+
2389+
// Permanent node failure deletes node and its channels
2390+
network_graph.handle_event(&Event::PaymentPathFailed {
2391+
payment_id: None,
2392+
payment_hash: PaymentHash([0; 32]),
2393+
rejected_by_dest: false,
2394+
all_paths_failed: true,
2395+
path: vec![],
2396+
network_update: Some(NetworkUpdate::NodeFailure {
2397+
node_id: node_2_id,
2398+
is_permanent: true,
2399+
}),
2400+
short_channel_id: None,
2401+
retry: None,
2402+
error_code: None,
2403+
error_data: None,
2404+
});
2405+
2406+
assert_eq!(network_graph.read_only().nodes().len(), 0);
2407+
// Channels are also deleted because the associated node has been deleted
2408+
assert_eq!(network_graph.read_only().channels().len(), 0);
23612409
}
23622410

23632411
#[test]

0 commit comments

Comments
 (0)