@@ -2268,6 +2268,7 @@ mod tests {
2268
2268
2269
2269
let node_1_privkey = & SecretKey :: from_slice ( & [ 42 ; 32 ] ) . unwrap ( ) ;
2270
2270
let node_2_privkey = & SecretKey :: from_slice ( & [ 41 ; 32 ] ) . unwrap ( ) ;
2271
+ let node_2_id = PublicKey :: from_secret_key ( & secp_ctx, node_2_privkey) ;
2271
2272
2272
2273
{
2273
2274
// There is no nodes in the table at the beginning.
@@ -2357,7 +2358,54 @@ mod tests {
2357
2358
assert_eq ! ( network_graph. read_only( ) . channels( ) . len( ) , 0 ) ;
2358
2359
// Nodes are also deleted because there are no associated channels anymore
2359
2360
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 ) ;
2361
2409
}
2362
2410
2363
2411
#[ test]
0 commit comments