Skip to content

Commit 336c77c

Browse files
TestRouter: support checking only that route params are as expected.
1 parent 960dd65 commit 336c77c

File tree

1 file changed

+64
-55
lines changed

1 file changed

+64
-55
lines changed

lightning/src/util/test_utils.rs

Lines changed: 64 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ pub struct TestRouter<'a> {
112112
>,
113113
//pub entropy_source: &'a RandomBytes,
114114
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>>)>>,
116116
pub scorer: &'a RwLock<TestScorer>,
117117
}
118118

@@ -132,7 +132,12 @@ impl<'a> TestRouter<'a> {
132132

133133
pub fn expect_find_route(&self, query: RouteParameters, result: Result<Route, LightningError>) {
134134
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));
136141
}
137142
}
138143

@@ -145,63 +150,67 @@ impl<'a> Router for TestRouter<'a> {
145150
let next_route_opt = self.next_routes.lock().unwrap().pop_front();
146151
if let Some((find_route_query, find_route_res)) = next_route_opt {
147152
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+
}
173180
}
174181
}
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;
175207
}
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;
201208
}
202209
}
210+
route_res = res;
211+
} else {
212+
route_res = self.router.find_route(payer, params, first_hops, inflight_htlcs);
203213
}
204-
route_res = find_route_res;
205214
} else {
206215
route_res = self.router.find_route(payer, params, first_hops, inflight_htlcs);
207216
};
@@ -552,7 +561,7 @@ impl<Signer: sign::ecdsa::EcdsaChannelSigner> chainmonitor::Persist<Signer> for
552561
ret
553562
}
554563

555-
fn archive_persisted_channel(&self, funding_txo: OutPoint) {
564+
fn archive_persisted_channel(&self, funding_txo: OutPoint) {
556565
// remove the channel from the offchain_monitor_updates map
557566
self.offchain_monitor_updates.lock().unwrap().remove(&funding_txo);
558567
}
@@ -1371,7 +1380,7 @@ impl TestChainSource {
13711380
}
13721381
}
13731382
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()));
13751384
self.watched_txn.lock().unwrap().remove(&(outpoint.txid, script_pubkey));
13761385
}
13771386
}

0 commit comments

Comments
 (0)