Skip to content

Commit 0f776db

Browse files
TestRouter: support checking only that route params are as expected.
1 parent a44bcb0 commit 0f776db

File tree

1 file changed

+64
-55
lines changed

1 file changed

+64
-55
lines changed

lightning/src/util/test_utils.rs

+64-55
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)