@@ -1878,7 +1878,7 @@ mod tests {
1878
1878
use routing:: router:: { get_route, build_route_from_hops_internal, add_random_cltv_offset, default_node_features,
1879
1879
PaymentParameters , Route , RouteHint , RouteHintHop , RouteHop , RoutingFees ,
1880
1880
DEFAULT_MAX_TOTAL_CLTV_EXPIRY_DELTA , MAX_PATH_LENGTH_ESTIMATE } ;
1881
- use routing:: scoring:: { ChannelUsage , Score } ;
1881
+ use routing:: scoring:: { ChannelUsage , Score , ProbabilisticScorer , ProbabilisticScoringParameters } ;
1882
1882
use chain:: transaction:: OutPoint ;
1883
1883
use chain:: keysinterface:: KeysInterface ;
1884
1884
use ln:: features:: { ChannelFeatures , InitFeatures , InvoiceFeatures , NodeFeatures } ;
@@ -5712,6 +5712,33 @@ mod tests {
5712
5712
}
5713
5713
}
5714
5714
}
5715
+
5716
+ #[ test]
5717
+ fn avoids_banned_nodes ( ) {
5718
+ let ( secp_ctx, network_graph, _, _, logger) = build_line_graph ( ) ;
5719
+ let ( _, our_id, _, nodes) = get_nodes ( & secp_ctx) ;
5720
+
5721
+ let keys_manager = test_utils:: TestKeysInterface :: new ( & [ 0u8 ; 32 ] , Network :: Testnet ) ;
5722
+ let random_seed_bytes = keys_manager. get_secure_random_bytes ( ) ;
5723
+
5724
+ let scorer_params = ProbabilisticScoringParameters :: default ( ) ;
5725
+ let mut scorer = ProbabilisticScorer :: new ( scorer_params. clone ( ) , Arc :: clone ( & network_graph) , Arc :: clone ( & logger) ) ;
5726
+
5727
+ // First check we can get a route.
5728
+ let payment_params = PaymentParameters :: from_node_id ( nodes[ 10 ] ) ;
5729
+ let route = get_route ( & our_id, & payment_params, & network_graph. read_only ( ) , None , 100 , 42 , Arc :: clone ( & logger) , & scorer, & random_seed_bytes) ;
5730
+ assert ! ( route. is_ok( ) ) ;
5731
+
5732
+ // Then check that we can't get a route if we ban an intermediate node.
5733
+ scorer. add_banned ( & NodeId :: from_pubkey ( & nodes[ 3 ] ) ) ;
5734
+ let route = get_route ( & our_id, & payment_params, & network_graph. read_only ( ) , None , 100 , 42 , Arc :: clone ( & logger) , & scorer, & random_seed_bytes) ;
5735
+ assert ! ( route. is_err( ) ) ;
5736
+
5737
+ // Finally make sure we can route again, when we remove the ban.
5738
+ scorer. remove_banned ( & NodeId :: from_pubkey ( & nodes[ 3 ] ) ) ;
5739
+ let route = get_route ( & our_id, & payment_params, & network_graph. read_only ( ) , None , 100 , 42 , Arc :: clone ( & logger) , & scorer, & random_seed_bytes) ;
5740
+ assert ! ( route. is_ok( ) ) ;
5741
+ }
5715
5742
}
5716
5743
5717
5744
#[ cfg( all( test, not( feature = "no-std" ) ) ) ]
0 commit comments