Skip to content

Commit 5bc7bfe

Browse files
Add test-only constructor for PublicHopCandidate.
We're about to add a field to this struct that has an obvious default. Add a constructor now in case this saves updating a bunch of callsites in the future.
1 parent 0c49f25 commit 5bc7bfe

File tree

2 files changed

+40
-132
lines changed

2 files changed

+40
-132
lines changed

lightning/src/routing/router.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1176,6 +1176,13 @@ pub struct PublicHopCandidate<'a> {
11761176
pub short_channel_id: u64,
11771177
}
11781178

1179+
impl<'a> PublicHopCandidate<'a> {
1180+
#[cfg(test)]
1181+
pub(super) fn new(info: DirectedChannelInfo<'a>, short_channel_id: u64) -> Self {
1182+
Self { info, short_channel_id }
1183+
}
1184+
}
1185+
11791186
/// A [`CandidateRouteHop::PrivateHop`] entry.
11801187
#[derive(Clone, Debug)]
11811188
pub struct PrivateHopCandidate<'a> {
@@ -7116,10 +7123,7 @@ mod tests {
71167123
let channels = network_graph.channels();
71177124
let channel = channels.get(&5).unwrap();
71187125
let info = channel.as_directed_from(&NodeId::from_pubkey(&nodes[3])).unwrap();
7119-
let candidate: CandidateRouteHop = CandidateRouteHop::PublicHop(PublicHopCandidate {
7120-
info: info.0,
7121-
short_channel_id: 5,
7122-
});
7126+
let candidate: CandidateRouteHop = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info.0, 5));
71237127
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &scorer_params), 456);
71247128

71257129
// Then check we can get a normal route

lightning/src/routing/scoring.rs

Lines changed: 32 additions & 128 deletions
Original file line numberDiff line numberDiff line change
@@ -2534,10 +2534,7 @@ mod tests {
25342534
let network_graph = network_graph.read_only();
25352535
let channel = network_graph.channel(42).unwrap();
25362536
let (info, _) = channel.as_directed_from(&source).unwrap();
2537-
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
2538-
info,
2539-
short_channel_id: 42,
2540-
});
2537+
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 42));
25412538
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), 0);
25422539
let usage = ChannelUsage { amount_msat: 10_240, ..usage };
25432540
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), 0);
@@ -2597,10 +2594,7 @@ mod tests {
25972594
};
25982595
let channel = network_graph.read_only().channel(42).unwrap().to_owned();
25992596
let (info, _) = channel.as_directed_from(&source).unwrap();
2600-
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
2601-
info,
2602-
short_channel_id: 42,
2603-
});
2597+
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 42));
26042598
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), 0);
26052599
let usage = ChannelUsage { amount_msat: 50, ..usage };
26062600
assert_ne!(scorer.channel_penalty_msat(&candidate, usage, &params), 0);
@@ -2628,10 +2622,7 @@ mod tests {
26282622
let successful_path = payment_path_for_amount(200);
26292623
let channel = &network_graph.read_only().channel(42).unwrap().to_owned();
26302624
let (info, _) = channel.as_directed_from(&source).unwrap();
2631-
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
2632-
info,
2633-
short_channel_id: 41,
2634-
});
2625+
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 41));
26352626

26362627
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), 301);
26372628

@@ -2661,10 +2652,7 @@ mod tests {
26612652
};
26622653
let channel = network_graph.read_only().channel(42).unwrap().to_owned();
26632654
let (info, _) = channel.as_directed_from(&source).unwrap();
2664-
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
2665-
info,
2666-
short_channel_id: 42,
2667-
});
2655+
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 42));
26682656
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), 128);
26692657
let usage = ChannelUsage { amount_msat: 500, ..usage };
26702658
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), 301);
@@ -2701,10 +2689,7 @@ mod tests {
27012689
};
27022690
let channel = network_graph.read_only().channel(42).unwrap().to_owned();
27032691
let (info, _) = channel.as_directed_from(&source).unwrap();
2704-
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
2705-
info,
2706-
short_channel_id: 42,
2707-
});
2692+
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 42));
27082693
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), 128);
27092694
let usage = ChannelUsage { amount_msat: 500, ..usage };
27102695
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), 301);
@@ -2767,50 +2752,32 @@ mod tests {
27672752
};
27682753
let channel = network_graph.read_only().channel(42).unwrap().to_owned();
27692754
let (info, _) = channel.as_directed_from(&node_a).unwrap();
2770-
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
2771-
info,
2772-
short_channel_id: 42,
2773-
});
2755+
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 42));
27742756
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), 128);
27752757
// Note that a default liquidity bound is used for B -> C as no channel exists
27762758
let channel = network_graph.read_only().channel(42).unwrap().to_owned();
27772759
let (info, _) = channel.as_directed_from(&node_b).unwrap();
2778-
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
2779-
info,
2780-
short_channel_id: 43,
2781-
});
2760+
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 43));
27822761
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), 128);
27832762
let channel = network_graph.read_only().channel(44).unwrap().to_owned();
27842763
let (info, _) = channel.as_directed_from(&node_c).unwrap();
2785-
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
2786-
info,
2787-
short_channel_id: 44,
2788-
});
2764+
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 44));
27892765
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), 128);
27902766

27912767
scorer.payment_path_failed(&Path { hops: path, blinded_tail: None }, 43, Duration::ZERO);
27922768

27932769
let channel = network_graph.read_only().channel(42).unwrap().to_owned();
27942770
let (info, _) = channel.as_directed_from(&node_a).unwrap();
2795-
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
2796-
info,
2797-
short_channel_id: 42,
2798-
});
2771+
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 42));
27992772
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), 80);
28002773
// Note that a default liquidity bound is used for B -> C as no channel exists
28012774
let channel = network_graph.read_only().channel(42).unwrap().to_owned();
28022775
let (info, _) = channel.as_directed_from(&node_b).unwrap();
2803-
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
2804-
info,
2805-
short_channel_id: 43,
2806-
});
2776+
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 43));
28072777
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), 128);
28082778
let channel = network_graph.read_only().channel(44).unwrap().to_owned();
28092779
let (info, _) = channel.as_directed_from(&node_c).unwrap();
2810-
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
2811-
info,
2812-
short_channel_id: 44,
2813-
});
2780+
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 44));
28142781
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), 128);
28152782
}
28162783

@@ -2833,20 +2800,11 @@ mod tests {
28332800
let channel_42 = network_graph.get(&42).unwrap();
28342801
let channel_43 = network_graph.get(&43).unwrap();
28352802
let (info, _) = channel_42.as_directed_from(&source).unwrap();
2836-
let candidate_41 = CandidateRouteHop::PublicHop(PublicHopCandidate {
2837-
info,
2838-
short_channel_id: 41,
2839-
});
2803+
let candidate_41 = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 41));
28402804
let (info, target) = channel_42.as_directed_from(&source).unwrap();
2841-
let candidate_42 = CandidateRouteHop::PublicHop(PublicHopCandidate {
2842-
info,
2843-
short_channel_id: 42,
2844-
});
2805+
let candidate_42 = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 42));
28452806
let (info, _) = channel_43.as_directed_from(&target).unwrap();
2846-
let candidate_43 = CandidateRouteHop::PublicHop(PublicHopCandidate {
2847-
info,
2848-
short_channel_id: 43,
2849-
});
2807+
let candidate_43 = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 43));
28502808
assert_eq!(scorer.channel_penalty_msat(&candidate_41, usage, &params), 128);
28512809
assert_eq!(scorer.channel_penalty_msat(&candidate_42, usage, &params), 128);
28522810
assert_eq!(scorer.channel_penalty_msat(&candidate_43, usage, &params), 128);
@@ -2881,10 +2839,7 @@ mod tests {
28812839
};
28822840
let channel = network_graph.read_only().channel(42).unwrap().to_owned();
28832841
let (info, _) = channel.as_directed_from(&source).unwrap();
2884-
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
2885-
info,
2886-
short_channel_id: 42,
2887-
});
2842+
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 42));
28882843
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), 0);
28892844
let usage = ChannelUsage { amount_msat: 1_023, ..usage };
28902845
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), 2_000);
@@ -2970,10 +2925,7 @@ mod tests {
29702925
};
29712926
let channel = network_graph.read_only().channel(42).unwrap().to_owned();
29722927
let (info, _) = channel.as_directed_from(&source).unwrap();
2973-
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
2974-
info,
2975-
short_channel_id: 42,
2976-
});
2928+
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 42));
29772929

29782930
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), 300);
29792931

@@ -3025,10 +2977,7 @@ mod tests {
30252977
scorer.payment_path_failed(&payment_path_for_amount(500), 42, Duration::ZERO);
30262978
let channel = network_graph.read_only().channel(42).unwrap().to_owned();
30272979
let (info, _) = channel.as_directed_from(&source).unwrap();
3028-
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
3029-
info,
3030-
short_channel_id: 42,
3031-
});
2980+
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 42));
30322981
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), u64::max_value());
30332982

30342983
scorer.time_passed(Duration::from_secs(10));
@@ -3069,10 +3018,7 @@ mod tests {
30693018
scorer.payment_path_failed(&payment_path_for_amount(500), 42, Duration::ZERO);
30703019
let channel = network_graph.read_only().channel(42).unwrap().to_owned();
30713020
let (info, _) = channel.as_directed_from(&source).unwrap();
3072-
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
3073-
info,
3074-
short_channel_id: 42,
3075-
});
3021+
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 42));
30763022
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), u64::max_value());
30773023

30783024
if decay_before_reload {
@@ -3121,10 +3067,7 @@ mod tests {
31213067
};
31223068
let channel = network_graph.read_only().channel(42).unwrap().to_owned();
31233069
let (info, _) = channel.as_directed_from(&source).unwrap();
3124-
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
3125-
info,
3126-
short_channel_id: 42,
3127-
});
3070+
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 42));
31283071
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), 11497);
31293072
let usage = ChannelUsage {
31303073
effective_capacity: EffectiveCapacity::Total { capacity_msat: 1_950_000_000, htlc_maximum_msat: 1_000 }, ..usage
@@ -3186,10 +3129,7 @@ mod tests {
31863129
let scorer = ProbabilisticScorer::new(ProbabilisticScoringDecayParameters::default(), &network_graph, &logger);
31873130
let channel = network_graph.read_only().channel(42).unwrap().to_owned();
31883131
let (info, _) = channel.as_directed_from(&source).unwrap();
3189-
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
3190-
info,
3191-
short_channel_id: 42,
3192-
});
3132+
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 42));
31933133
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), 58);
31943134

31953135
let params = ProbabilisticScoringFeeParameters {
@@ -3228,10 +3168,7 @@ mod tests {
32283168
let scorer = ProbabilisticScorer::new(ProbabilisticScoringDecayParameters::default(), &network_graph, &logger);
32293169
let channel = network_graph.read_only().channel(42).unwrap().to_owned();
32303170
let (info, _) = channel.as_directed_from(&source).unwrap();
3231-
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
3232-
info,
3233-
short_channel_id: 42,
3234-
});
3171+
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 42));
32353172
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), 300);
32363173

32373174
let params = ProbabilisticScoringFeeParameters {
@@ -3260,10 +3197,7 @@ mod tests {
32603197
let decay_params = ProbabilisticScoringDecayParameters::zero_penalty();
32613198
let channel = network_graph.read_only().channel(42).unwrap().to_owned();
32623199
let (info, _) = channel.as_directed_from(&source).unwrap();
3263-
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
3264-
info,
3265-
short_channel_id: 42,
3266-
});
3200+
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 42));
32673201
let scorer = ProbabilisticScorer::new(decay_params, &network_graph, &logger);
32683202
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), 80_000);
32693203
}
@@ -3287,10 +3221,7 @@ mod tests {
32873221
let network_graph = network_graph.read_only();
32883222
let channel = network_graph.channel(42).unwrap();
32893223
let (info, _) = channel.as_directed_from(&source).unwrap();
3290-
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
3291-
info,
3292-
short_channel_id: 42,
3293-
});
3224+
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 42));
32943225
assert_ne!(scorer.channel_penalty_msat(&candidate, usage, &params), u64::max_value());
32953226

32963227
let usage = ChannelUsage { inflight_htlc_msat: 251, ..usage };
@@ -3314,10 +3245,7 @@ mod tests {
33143245
let network_graph = network_graph.read_only();
33153246
let channel = network_graph.channel(42).unwrap();
33163247
let (info, _) = channel.as_directed_from(&source).unwrap();
3317-
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
3318-
info,
3319-
short_channel_id: 42,
3320-
});
3248+
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 42));
33213249
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), base_penalty_msat);
33223250

33233251
let usage = ChannelUsage { amount_msat: 1_000, ..usage };
@@ -3359,10 +3287,7 @@ mod tests {
33593287
let network_graph = network_graph.read_only();
33603288
let channel = network_graph.channel(42).unwrap();
33613289
let (info, _) = channel.as_directed_from(&source).unwrap();
3362-
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
3363-
info,
3364-
short_channel_id: 42,
3365-
});
3290+
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 42));
33663291

33673292
// With no historical data the normal liquidity penalty calculation is used.
33683293
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), 168);
@@ -3377,10 +3302,7 @@ mod tests {
33773302
let network_graph = network_graph.read_only();
33783303
let channel = network_graph.channel(42).unwrap();
33793304
let (info, _) = channel.as_directed_from(&source).unwrap();
3380-
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
3381-
info,
3382-
short_channel_id: 42,
3383-
});
3305+
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 42));
33843306

33853307
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), 2048);
33863308
assert_eq!(scorer.channel_penalty_msat(&candidate, usage_1, &params), 249);
@@ -3402,10 +3324,7 @@ mod tests {
34023324
let network_graph = network_graph.read_only();
34033325
let channel = network_graph.channel(42).unwrap();
34043326
let (info, _) = channel.as_directed_from(&source).unwrap();
3405-
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
3406-
info,
3407-
short_channel_id: 42,
3408-
});
3327+
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 42));
34093328

34103329
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), 105);
34113330
}
@@ -3432,10 +3351,7 @@ mod tests {
34323351
let network_graph = network_graph.read_only();
34333352
let channel = network_graph.channel(42).unwrap();
34343353
let (info, _) = channel.as_directed_from(&source).unwrap();
3435-
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
3436-
info,
3437-
short_channel_id: 42,
3438-
});
3354+
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 42));
34393355

34403356
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), 168);
34413357
}
@@ -3455,10 +3371,7 @@ mod tests {
34553371
let network_graph = network_graph.read_only();
34563372
let channel = network_graph.channel(42).unwrap();
34573373
let (info, _) = channel.as_directed_from(&source).unwrap();
3458-
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
3459-
info,
3460-
short_channel_id: 42,
3461-
});
3374+
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 42));
34623375

34633376
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), 2050);
34643377

@@ -3508,10 +3421,7 @@ mod tests {
35083421
let network_graph = network_graph.read_only();
35093422
let channel = network_graph.channel(42).unwrap();
35103423
let (info, _) = channel.as_directed_from(&source).unwrap();
3511-
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
3512-
info,
3513-
short_channel_id: 42,
3514-
});
3424+
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 42));
35153425
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), 0);
35163426

35173427
// Check we receive anti-probing penalty for htlc_maximum_msat == channel_capacity.
@@ -3558,10 +3468,7 @@ mod tests {
35583468
};
35593469
let channel = network_graph.read_only().channel(42).unwrap().to_owned();
35603470
let (info, target) = channel.as_directed_from(&source).unwrap();
3561-
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
3562-
info,
3563-
short_channel_id: 42,
3564-
});
3471+
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 42));
35653472
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), 300);
35663473

35673474
let mut path = payment_path_for_amount(768);
@@ -3627,10 +3534,7 @@ mod tests {
36273534
};
36283535
let channel = network_graph.read_only().channel(42).unwrap().to_owned();
36293536
let (info, target) = channel.as_directed_from(&source).unwrap();
3630-
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate {
3631-
info,
3632-
short_channel_id: 42,
3633-
});
3537+
let candidate = CandidateRouteHop::PublicHop(PublicHopCandidate::new(info, 42));
36343538
// With no historical data the normal liquidity penalty calculation is used, which results
36353539
// in a success probability of ~75%.
36363540
assert_eq!(scorer.channel_penalty_msat(&candidate, usage, &params), 1269);

0 commit comments

Comments
 (0)