@@ -113,7 +113,7 @@ pub struct TestRouter<'a> {
113
113
> ,
114
114
//pub entropy_source: &'a RandomBytes,
115
115
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 > > ) > > ,
117
117
pub scorer : & ' a RwLock < TestScorer > ,
118
118
}
119
119
@@ -133,7 +133,12 @@ impl<'a> TestRouter<'a> {
133
133
134
134
pub fn expect_find_route ( & self , query : RouteParameters , result : Result < Route , LightningError > ) {
135
135
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 ) ) ;
137
142
}
138
143
}
139
144
@@ -146,63 +151,67 @@ impl<'a> Router for TestRouter<'a> {
146
151
let next_route_opt = self . next_routes . lock ( ) . unwrap ( ) . pop_front ( ) ;
147
152
if let Some ( ( find_route_query, find_route_res) ) = next_route_opt {
148
153
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
+ }
174
181
}
175
182
}
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 ;
176
208
}
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 ;
202
209
}
203
210
}
211
+ route_res = res;
212
+ } else {
213
+ route_res = self . router . find_route ( payer, params, first_hops, inflight_htlcs) ;
204
214
}
205
- route_res = find_route_res;
206
215
} else {
207
216
route_res = self . router . find_route ( payer, params, first_hops, inflight_htlcs) ;
208
217
} ;
@@ -557,7 +566,7 @@ impl<Signer: sign::ecdsa::WriteableEcdsaChannelSigner> chainmonitor::Persist<Sig
557
566
ret
558
567
}
559
568
560
- fn archive_persisted_channel ( & self , funding_txo : OutPoint ) {
569
+ fn archive_persisted_channel ( & self , funding_txo : OutPoint ) {
561
570
// remove the channel from the offchain_monitor_updates map
562
571
match self . offchain_monitor_updates . lock ( ) . unwrap ( ) . remove ( & funding_txo) {
563
572
Some ( _) => { } ,
@@ -1383,7 +1392,7 @@ impl TestChainSource {
1383
1392
}
1384
1393
}
1385
1394
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 ( ) ) ) ;
1387
1396
self . watched_txn . lock ( ) . unwrap ( ) . remove ( & ( outpoint. txid , script_pubkey) ) ;
1388
1397
}
1389
1398
}
0 commit comments