@@ -113,7 +113,7 @@ pub struct TestRouter<'a> {
113113 > ,
114114 //pub entropy_source: &'a RandomBytes,
115115 pub network_graph : Arc < NetworkGraph < & ' a TestLogger > > ,
116- pub next_routes : Mutex < VecDeque < ( RouteParameters , Result < Route , LightningError > ) > > ,
116+ pub next_routes : Mutex < VecDeque < ( RouteParameters , Option < Result < Route , LightningError > > ) > > ,
117117 pub scorer : & ' a RwLock < TestScorer > ,
118118}
119119
@@ -133,7 +133,12 @@ impl<'a> TestRouter<'a> {
133133
134134 pub fn expect_find_route ( & self , query : RouteParameters , result : Result < Route , LightningError > ) {
135135 let mut expected_routes = self . next_routes . lock ( ) . unwrap ( ) ;
136- expected_routes. push_back ( ( query, result) ) ;
136+ expected_routes. push_back ( ( query, Some ( result) ) ) ;
137+ }
138+
139+ pub fn expect_find_route_query ( & self , query : RouteParameters ) {
140+ let mut expected_routes = self . next_routes . lock ( ) . unwrap ( ) ;
141+ expected_routes. push_back ( ( query, None ) ) ;
137142 }
138143}
139144
@@ -146,63 +151,67 @@ impl<'a> Router for TestRouter<'a> {
146151 let next_route_opt = self . next_routes . lock ( ) . unwrap ( ) . pop_front ( ) ;
147152 if let Some ( ( find_route_query, find_route_res) ) = next_route_opt {
148153 assert_eq ! ( find_route_query, * params) ;
149- if let Ok ( ref route) = find_route_res {
150- assert_eq ! ( route. route_params, Some ( find_route_query) ) ;
151- let scorer = self . scorer . read ( ) . unwrap ( ) ;
152- let scorer = ScorerAccountingForInFlightHtlcs :: new ( scorer, & inflight_htlcs) ;
153- for path in & route. paths {
154- let mut aggregate_msat = 0u64 ;
155- let mut prev_hop_node = payer;
156- for ( idx, hop) in path. hops . iter ( ) . rev ( ) . enumerate ( ) {
157- aggregate_msat += hop. fee_msat ;
158- let usage = ChannelUsage {
159- amount_msat : aggregate_msat,
160- inflight_htlc_msat : 0 ,
161- effective_capacity : EffectiveCapacity :: Unknown ,
162- } ;
163-
164- if idx == path. hops . len ( ) - 1 {
165- if let Some ( first_hops) = first_hops {
166- if let Some ( idx) = first_hops. iter ( ) . position ( |h| h. get_outbound_payment_scid ( ) == Some ( hop. short_channel_id ) ) {
167- let node_id = NodeId :: from_pubkey ( payer) ;
168- let candidate = CandidateRouteHop :: FirstHop ( FirstHopCandidate {
169- details : first_hops[ idx] ,
170- payer_node_id : & node_id,
171- } ) ;
172- scorer. channel_penalty_msat ( & candidate, usage, & Default :: default ( ) ) ;
173- continue ;
154+ if let Some ( res) = find_route_res {
155+ if let Ok ( ref route) = res {
156+ assert_eq ! ( route. route_params, Some ( find_route_query) ) ;
157+ let scorer = self . scorer . read ( ) . unwrap ( ) ;
158+ let scorer = ScorerAccountingForInFlightHtlcs :: new ( scorer, & inflight_htlcs) ;
159+ for path in & route. paths {
160+ let mut aggregate_msat = 0u64 ;
161+ let mut prev_hop_node = payer;
162+ for ( idx, hop) in path. hops . iter ( ) . rev ( ) . enumerate ( ) {
163+ aggregate_msat += hop. fee_msat ;
164+ let usage = ChannelUsage {
165+ amount_msat : aggregate_msat,
166+ inflight_htlc_msat : 0 ,
167+ effective_capacity : EffectiveCapacity :: Unknown ,
168+ } ;
169+
170+ if idx == path. hops . len ( ) - 1 {
171+ if let Some ( first_hops) = first_hops {
172+ if let Some ( idx) = first_hops. iter ( ) . position ( |h| h. get_outbound_payment_scid ( ) == Some ( hop. short_channel_id ) ) {
173+ let node_id = NodeId :: from_pubkey ( payer) ;
174+ let candidate = CandidateRouteHop :: FirstHop ( FirstHopCandidate {
175+ details : first_hops[ idx] ,
176+ payer_node_id : & node_id,
177+ } ) ;
178+ scorer. channel_penalty_msat ( & candidate, usage, & Default :: default ( ) ) ;
179+ continue ;
180+ }
174181 }
175182 }
183+ let network_graph = self . network_graph . read_only ( ) ;
184+ if let Some ( channel) = network_graph. channel ( hop. short_channel_id ) {
185+ let ( directed, _) = channel. as_directed_to ( & NodeId :: from_pubkey ( & hop. pubkey ) ) . unwrap ( ) ;
186+ let candidate = CandidateRouteHop :: PublicHop ( PublicHopCandidate {
187+ info : directed,
188+ short_channel_id : hop. short_channel_id ,
189+ } ) ;
190+ scorer. channel_penalty_msat ( & candidate, usage, & Default :: default ( ) ) ;
191+ } else {
192+ let target_node_id = NodeId :: from_pubkey ( & hop. pubkey ) ;
193+ let route_hint = RouteHintHop {
194+ src_node_id : * prev_hop_node,
195+ short_channel_id : hop. short_channel_id ,
196+ fees : RoutingFees { base_msat : 0 , proportional_millionths : 0 } ,
197+ cltv_expiry_delta : 0 ,
198+ htlc_minimum_msat : None ,
199+ htlc_maximum_msat : None ,
200+ } ;
201+ let candidate = CandidateRouteHop :: PrivateHop ( PrivateHopCandidate {
202+ hint : & route_hint,
203+ target_node_id : & target_node_id,
204+ } ) ;
205+ scorer. channel_penalty_msat ( & candidate, usage, & Default :: default ( ) ) ;
206+ }
207+ prev_hop_node = & hop. pubkey ;
176208 }
177- let network_graph = self . network_graph . read_only ( ) ;
178- if let Some ( channel) = network_graph. channel ( hop. short_channel_id ) {
179- let ( directed, _) = channel. as_directed_to ( & NodeId :: from_pubkey ( & hop. pubkey ) ) . unwrap ( ) ;
180- let candidate = CandidateRouteHop :: PublicHop ( PublicHopCandidate {
181- info : directed,
182- short_channel_id : hop. short_channel_id ,
183- } ) ;
184- scorer. channel_penalty_msat ( & candidate, usage, & Default :: default ( ) ) ;
185- } else {
186- let target_node_id = NodeId :: from_pubkey ( & hop. pubkey ) ;
187- let route_hint = RouteHintHop {
188- src_node_id : * prev_hop_node,
189- short_channel_id : hop. short_channel_id ,
190- fees : RoutingFees { base_msat : 0 , proportional_millionths : 0 } ,
191- cltv_expiry_delta : 0 ,
192- htlc_minimum_msat : None ,
193- htlc_maximum_msat : None ,
194- } ;
195- let candidate = CandidateRouteHop :: PrivateHop ( PrivateHopCandidate {
196- hint : & route_hint,
197- target_node_id : & target_node_id,
198- } ) ;
199- scorer. channel_penalty_msat ( & candidate, usage, & Default :: default ( ) ) ;
200- }
201- prev_hop_node = & hop. pubkey ;
202209 }
203210 }
211+ route_res = res;
212+ } else {
213+ route_res = self . router . find_route ( payer, params, first_hops, inflight_htlcs) ;
204214 }
205- route_res = find_route_res;
206215 } else {
207216 route_res = self . router . find_route ( payer, params, first_hops, inflight_htlcs) ;
208217 } ;
@@ -557,7 +566,7 @@ impl<Signer: sign::ecdsa::WriteableEcdsaChannelSigner> chainmonitor::Persist<Sig
557566 ret
558567 }
559568
560- fn archive_persisted_channel ( & self , funding_txo : OutPoint ) {
569+ fn archive_persisted_channel ( & self , funding_txo : OutPoint ) {
561570 // remove the channel from the offchain_monitor_updates map
562571 match self . offchain_monitor_updates . lock ( ) . unwrap ( ) . remove ( & funding_txo) {
563572 Some ( _) => { } ,
@@ -1383,7 +1392,7 @@ impl TestChainSource {
13831392 }
13841393 }
13851394 pub fn remove_watched_txn_and_outputs ( & self , outpoint : OutPoint , script_pubkey : ScriptBuf ) {
1386- self . watched_outputs . lock ( ) . unwrap ( ) . remove ( & ( outpoint, script_pubkey. clone ( ) ) ) ;
1395+ self . watched_outputs . lock ( ) . unwrap ( ) . remove ( & ( outpoint, script_pubkey. clone ( ) ) ) ;
13871396 self . watched_txn . lock ( ) . unwrap ( ) . remove ( & ( outpoint. txid , script_pubkey) ) ;
13881397 }
13891398}
0 commit comments