@@ -112,7 +112,7 @@ pub struct TestRouter<'a> {
112
112
> ,
113
113
//pub entropy_source: &'a RandomBytes,
114
114
pub network_graph : Arc < NetworkGraph < & ' a TestLogger > > ,
115
- pub next_routes : Mutex < VecDeque < ( RouteParameters , Result < Route , LightningError > ) > > ,
115
+ pub next_routes : Mutex < VecDeque < ( RouteParameters , Option < Result < Route , LightningError > > ) > > ,
116
116
pub scorer : & ' a RwLock < TestScorer > ,
117
117
}
118
118
@@ -132,7 +132,12 @@ impl<'a> TestRouter<'a> {
132
132
133
133
pub fn expect_find_route ( & self , query : RouteParameters , result : Result < Route , LightningError > ) {
134
134
let mut expected_routes = self . next_routes . lock ( ) . unwrap ( ) ;
135
- expected_routes. push_back ( ( query, result) ) ;
135
+ expected_routes. push_back ( ( query, Some ( result) ) ) ;
136
+ }
137
+
138
+ pub fn expect_find_route_query ( & self , query : RouteParameters ) {
139
+ let mut expected_routes = self . next_routes . lock ( ) . unwrap ( ) ;
140
+ expected_routes. push_back ( ( query, None ) ) ;
136
141
}
137
142
}
138
143
@@ -145,63 +150,67 @@ impl<'a> Router for TestRouter<'a> {
145
150
let next_route_opt = self . next_routes . lock ( ) . unwrap ( ) . pop_front ( ) ;
146
151
if let Some ( ( find_route_query, find_route_res) ) = next_route_opt {
147
152
assert_eq ! ( find_route_query, * params) ;
148
- if let Ok ( ref route) = find_route_res {
149
- assert_eq ! ( route. route_params, Some ( find_route_query) ) ;
150
- let scorer = self . scorer . read ( ) . unwrap ( ) ;
151
- let scorer = ScorerAccountingForInFlightHtlcs :: new ( scorer, & inflight_htlcs) ;
152
- for path in & route. paths {
153
- let mut aggregate_msat = 0u64 ;
154
- let mut prev_hop_node = payer;
155
- for ( idx, hop) in path. hops . iter ( ) . rev ( ) . enumerate ( ) {
156
- aggregate_msat += hop. fee_msat ;
157
- let usage = ChannelUsage {
158
- amount_msat : aggregate_msat,
159
- inflight_htlc_msat : 0 ,
160
- effective_capacity : EffectiveCapacity :: Unknown ,
161
- } ;
162
-
163
- if idx == path. hops . len ( ) - 1 {
164
- if let Some ( first_hops) = first_hops {
165
- if let Some ( idx) = first_hops. iter ( ) . position ( |h| h. get_outbound_payment_scid ( ) == Some ( hop. short_channel_id ) ) {
166
- let node_id = NodeId :: from_pubkey ( payer) ;
167
- let candidate = CandidateRouteHop :: FirstHop ( FirstHopCandidate {
168
- details : first_hops[ idx] ,
169
- payer_node_id : & node_id,
170
- } ) ;
171
- scorer. channel_penalty_msat ( & candidate, usage, & Default :: default ( ) ) ;
172
- continue ;
153
+ if let Some ( res) = find_route_res {
154
+ if let Ok ( ref route) = res {
155
+ assert_eq ! ( route. route_params, Some ( find_route_query) ) ;
156
+ let scorer = self . scorer . read ( ) . unwrap ( ) ;
157
+ let scorer = ScorerAccountingForInFlightHtlcs :: new ( scorer, & inflight_htlcs) ;
158
+ for path in & route. paths {
159
+ let mut aggregate_msat = 0u64 ;
160
+ let mut prev_hop_node = payer;
161
+ for ( idx, hop) in path. hops . iter ( ) . rev ( ) . enumerate ( ) {
162
+ aggregate_msat += hop. fee_msat ;
163
+ let usage = ChannelUsage {
164
+ amount_msat : aggregate_msat,
165
+ inflight_htlc_msat : 0 ,
166
+ effective_capacity : EffectiveCapacity :: Unknown ,
167
+ } ;
168
+
169
+ if idx == path. hops . len ( ) - 1 {
170
+ if let Some ( first_hops) = first_hops {
171
+ if let Some ( idx) = first_hops. iter ( ) . position ( |h| h. get_outbound_payment_scid ( ) == Some ( hop. short_channel_id ) ) {
172
+ let node_id = NodeId :: from_pubkey ( payer) ;
173
+ let candidate = CandidateRouteHop :: FirstHop ( FirstHopCandidate {
174
+ details : first_hops[ idx] ,
175
+ payer_node_id : & node_id,
176
+ } ) ;
177
+ scorer. channel_penalty_msat ( & candidate, usage, & Default :: default ( ) ) ;
178
+ continue ;
179
+ }
173
180
}
174
181
}
182
+ let network_graph = self . network_graph . read_only ( ) ;
183
+ if let Some ( channel) = network_graph. channel ( hop. short_channel_id ) {
184
+ let ( directed, _) = channel. as_directed_to ( & NodeId :: from_pubkey ( & hop. pubkey ) ) . unwrap ( ) ;
185
+ let candidate = CandidateRouteHop :: PublicHop ( PublicHopCandidate {
186
+ info : directed,
187
+ short_channel_id : hop. short_channel_id ,
188
+ } ) ;
189
+ scorer. channel_penalty_msat ( & candidate, usage, & Default :: default ( ) ) ;
190
+ } else {
191
+ let target_node_id = NodeId :: from_pubkey ( & hop. pubkey ) ;
192
+ let route_hint = RouteHintHop {
193
+ src_node_id : * prev_hop_node,
194
+ short_channel_id : hop. short_channel_id ,
195
+ fees : RoutingFees { base_msat : 0 , proportional_millionths : 0 } ,
196
+ cltv_expiry_delta : 0 ,
197
+ htlc_minimum_msat : None ,
198
+ htlc_maximum_msat : None ,
199
+ } ;
200
+ let candidate = CandidateRouteHop :: PrivateHop ( PrivateHopCandidate {
201
+ hint : & route_hint,
202
+ target_node_id : & target_node_id,
203
+ } ) ;
204
+ scorer. channel_penalty_msat ( & candidate, usage, & Default :: default ( ) ) ;
205
+ }
206
+ prev_hop_node = & hop. pubkey ;
175
207
}
176
- let network_graph = self . network_graph . read_only ( ) ;
177
- if let Some ( channel) = network_graph. channel ( hop. short_channel_id ) {
178
- let ( directed, _) = channel. as_directed_to ( & NodeId :: from_pubkey ( & hop. pubkey ) ) . unwrap ( ) ;
179
- let candidate = CandidateRouteHop :: PublicHop ( PublicHopCandidate {
180
- info : directed,
181
- short_channel_id : hop. short_channel_id ,
182
- } ) ;
183
- scorer. channel_penalty_msat ( & candidate, usage, & Default :: default ( ) ) ;
184
- } else {
185
- let target_node_id = NodeId :: from_pubkey ( & hop. pubkey ) ;
186
- let route_hint = RouteHintHop {
187
- src_node_id : * prev_hop_node,
188
- short_channel_id : hop. short_channel_id ,
189
- fees : RoutingFees { base_msat : 0 , proportional_millionths : 0 } ,
190
- cltv_expiry_delta : 0 ,
191
- htlc_minimum_msat : None ,
192
- htlc_maximum_msat : None ,
193
- } ;
194
- let candidate = CandidateRouteHop :: PrivateHop ( PrivateHopCandidate {
195
- hint : & route_hint,
196
- target_node_id : & target_node_id,
197
- } ) ;
198
- scorer. channel_penalty_msat ( & candidate, usage, & Default :: default ( ) ) ;
199
- }
200
- prev_hop_node = & hop. pubkey ;
201
208
}
202
209
}
210
+ route_res = res;
211
+ } else {
212
+ route_res = self . router . find_route ( payer, params, first_hops, inflight_htlcs) ;
203
213
}
204
- route_res = find_route_res;
205
214
} else {
206
215
route_res = self . router . find_route ( payer, params, first_hops, inflight_htlcs) ;
207
216
} ;
@@ -552,7 +561,7 @@ impl<Signer: sign::ecdsa::EcdsaChannelSigner> chainmonitor::Persist<Signer> for
552
561
ret
553
562
}
554
563
555
- fn archive_persisted_channel ( & self , funding_txo : OutPoint ) {
564
+ fn archive_persisted_channel ( & self , funding_txo : OutPoint ) {
556
565
// remove the channel from the offchain_monitor_updates map
557
566
self . offchain_monitor_updates . lock ( ) . unwrap ( ) . remove ( & funding_txo) ;
558
567
}
@@ -1371,7 +1380,7 @@ impl TestChainSource {
1371
1380
}
1372
1381
}
1373
1382
pub fn remove_watched_txn_and_outputs ( & self , outpoint : OutPoint , script_pubkey : ScriptBuf ) {
1374
- self . watched_outputs . lock ( ) . unwrap ( ) . remove ( & ( outpoint, script_pubkey. clone ( ) ) ) ;
1383
+ self . watched_outputs . lock ( ) . unwrap ( ) . remove ( & ( outpoint, script_pubkey. clone ( ) ) ) ;
1375
1384
self . watched_txn . lock ( ) . unwrap ( ) . remove ( & ( outpoint. txid , script_pubkey) ) ;
1376
1385
}
1377
1386
}
0 commit comments