Skip to content

Commit 57cf608

Browse files
committed
Add failure test cases for max_mpp_path_count.
1 parent 43373d4 commit 57cf608

File tree

1 file changed

+32
-6
lines changed

1 file changed

+32
-6
lines changed

lightning/src/routing/router.rs

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -871,7 +871,7 @@ where L::Target: Logger {
871871
HashMap::with_capacity(network_nodes.len());
872872

873873
// Keeping track of how much value we already collected across other paths. Helps to decide
874-
// when we want to stop looking for new paths.
874+
// when we want to stop looking for new paths.
875875
let mut already_collected_value_msat = 0;
876876

877877
for (_, channels) in first_hop_targets.iter_mut() {
@@ -4013,7 +4013,8 @@ mod tests {
40134013
let scorer = test_utils::TestScorer::with_penalty(0);
40144014
let keys_manager = test_utils::TestKeysInterface::new(&[0u8; 32], Network::Testnet);
40154015
let random_seed_bytes = keys_manager.get_secure_random_bytes();
4016-
let payment_params = PaymentParameters::from_node_id(nodes[2]).with_features(InvoiceFeatures::known());
4016+
let payment_params = PaymentParameters::from_node_id(nodes[2])
4017+
.with_features(InvoiceFeatures::known());
40174018

40184019
// We need a route consisting of 3 paths:
40194020
// From our node to node2 via node0, node7, node1 (three paths one hop each).
@@ -4106,15 +4107,39 @@ mod tests {
41064107
{
41074108
// Attempt to route more than available results in a failure.
41084109
if let Err(LightningError{err, action: ErrorAction::IgnoreError}) = get_route(
4109-
&our_id, &payment_params, &network_graph.read_only(), None, 300_000, 42, Arc::clone(&logger), &scorer, &random_seed_bytes) {
4110-
assert_eq!(err, "Failed to find a sufficient route to the given destination");
4110+
&our_id, &payment_params, &network_graph.read_only(), None, 300_000, 42,
4111+
Arc::clone(&logger), &scorer, &random_seed_bytes) {
4112+
assert_eq!(err, "Failed to find a sufficient route to the given destination");
4113+
} else { panic!(); }
4114+
}
4115+
4116+
{
4117+
// Attempt to route while setting max_mpp_path_count to 0 results in a failure..
4118+
let zero_payment_params = payment_params.clone().with_max_mpp_path_count(0);
4119+
if let Err(LightningError{err, action: ErrorAction::IgnoreError}) = get_route(
4120+
&our_id, &zero_payment_params, &network_graph.read_only(), None, 100, 42,
4121+
Arc::clone(&logger), &scorer, &random_seed_bytes) {
4122+
assert_eq!(err, "Can't find an MPP route with no paths allowed.");
4123+
} else { panic!(); }
4124+
}
4125+
4126+
{
4127+
// Attempt to route while setting max_mpp_path_count to 3 results in a failure..
4128+
// This is the case because the minimal_value_contribution_msat would require each path
4129+
// to account for 1/3 of the total value, which is violated by 2 out of 3 paths.
4130+
let fail_payment_params = payment_params.clone().with_max_mpp_path_count(3);
4131+
if let Err(LightningError{err, action: ErrorAction::IgnoreError}) = get_route(
4132+
&our_id, &fail_payment_params, &network_graph.read_only(), None, 250_000, 42,
4133+
Arc::clone(&logger), &scorer, &random_seed_bytes) {
4134+
assert_eq!(err, "Failed to find a sufficient route to the given destination");
41114135
} else { panic!(); }
41124136
}
41134137

41144138
{
41154139
// Now, attempt to route 250 sats (just a bit below the capacity).
41164140
// Our algorithm should provide us with these 3 paths.
4117-
let route = get_route(&our_id, &payment_params, &network_graph.read_only(), None, 250_000, 42, Arc::clone(&logger), &scorer, &random_seed_bytes).unwrap();
4141+
let route = get_route(&our_id, &payment_params, &network_graph.read_only(), None,
4142+
250_000, 42, Arc::clone(&logger), &scorer, &random_seed_bytes).unwrap();
41184143
assert_eq!(route.paths.len(), 3);
41194144
let mut total_amount_paid_msat = 0;
41204145
for path in &route.paths {
@@ -4127,7 +4152,8 @@ mod tests {
41274152

41284153
{
41294154
// Attempt to route an exact amount is also fine
4130-
let route = get_route(&our_id, &payment_params, &network_graph.read_only(), None, 290_000, 42, Arc::clone(&logger), &scorer, &random_seed_bytes).unwrap();
4155+
let route = get_route(&our_id, &payment_params, &network_graph.read_only(), None,
4156+
290_000, 42, Arc::clone(&logger), &scorer, &random_seed_bytes).unwrap();
41314157
assert_eq!(route.paths.len(), 3);
41324158
let mut total_amount_paid_msat = 0;
41334159
for path in &route.paths {

0 commit comments

Comments
 (0)