Skip to content

Commit b67267c

Browse files
Tests: DRY failing a blinded HTLC backwards
Blinded HTLCs are always failed back with the same error, so DRY the test code that fails them backwards. This util will also be used for async payments testing in upcoming commits.
1 parent aa2c6fe commit b67267c

File tree

1 file changed

+35
-41
lines changed

1 file changed

+35
-41
lines changed

lightning/src/ln/blinded_payment_tests.rs

Lines changed: 35 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,37 @@ pub fn get_blinded_route_parameters(
105105
)
106106
}
107107

108+
pub fn fail_blinded_htlc_backwards(
109+
payment_hash: PaymentHash, intro_node_idx: usize, nodes: &[&Node],
110+
) {
111+
for i in (0..nodes.len()).rev() {
112+
match i {
113+
0 => {
114+
let mut payment_failed_conditions = PaymentFailedConditions::new()
115+
.expected_htlc_error_data(INVALID_ONION_BLINDING, &[0; 32]);
116+
expect_payment_failed_conditions(&nodes[0], payment_hash, false, payment_failed_conditions);
117+
},
118+
i if i <= intro_node_idx => {
119+
let unblinded_node_updates = get_htlc_update_msgs!(nodes[i], nodes[i-1].node.get_our_node_id());
120+
assert_eq!(unblinded_node_updates.update_fail_htlcs.len(), 1);
121+
nodes[i-1].node.handle_update_fail_htlc(
122+
nodes[i].node.get_our_node_id(), &unblinded_node_updates.update_fail_htlcs[i-1]
123+
);
124+
do_commitment_signed_dance(&nodes[i-1], &nodes[i], &unblinded_node_updates.commitment_signed, false, false);
125+
},
126+
_ => {
127+
let blinded_node_updates = get_htlc_update_msgs!(nodes[i], nodes[i-1].node.get_our_node_id());
128+
assert_eq!(blinded_node_updates.update_fail_malformed_htlcs.len(), 1);
129+
let update_malformed = &blinded_node_updates.update_fail_malformed_htlcs[0];
130+
assert_eq!(update_malformed.sha256_of_onion, [0; 32]);
131+
assert_eq!(update_malformed.failure_code, INVALID_ONION_BLINDING);
132+
nodes[i-1].node.handle_update_fail_malformed_htlc(nodes[i].node.get_our_node_id(), update_malformed);
133+
do_commitment_signed_dance(&nodes[i-1], &nodes[i], &blinded_node_updates.commitment_signed, true, false);
134+
}
135+
}
136+
}
137+
}
138+
108139
#[test]
109140
fn one_hop_blinded_path() {
110141
do_one_hop_blinded_path(true);
@@ -361,11 +392,7 @@ fn do_forward_checks_failure(check: ForwardCheckFail, intro_fails: bool) {
361392
do_commitment_signed_dance(&nodes[1], &nodes[0], &updates_0_1.commitment_signed, true, true);
362393

363394
if intro_fails {
364-
let mut updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
365-
nodes[0].node.handle_update_fail_htlc(nodes[1].node.get_our_node_id(), &updates.update_fail_htlcs[0]);
366-
do_commitment_signed_dance(&nodes[0], &nodes[1], &updates.commitment_signed, false, false);
367-
expect_payment_failed_conditions(&nodes[0], payment_hash, false,
368-
PaymentFailedConditions::new().expected_htlc_error_data(INVALID_ONION_BLINDING, &[0; 32]));
395+
fail_blinded_htlc_backwards(payment_hash, 1, &[&nodes[0], &nodes[1]]);
369396
return
370397
}
371398

@@ -547,13 +574,8 @@ fn do_forward_fail_in_process_pending_htlc_fwds(check: ProcessPendingHTLCsCheck,
547574

548575
if intro_fails {
549576
cause_error!(nodes[0], nodes[1], nodes[2], chan_id_1_2, chan_upd_1_2.short_channel_id);
550-
let mut updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
551-
nodes[0].node.handle_update_fail_htlc(nodes[1].node.get_our_node_id(), &updates.update_fail_htlcs[0]);
552577
check_added_monitors!(nodes[1], 1);
553-
do_commitment_signed_dance(&nodes[0], &nodes[1], &updates.commitment_signed, false, false);
554-
555-
expect_payment_failed_conditions(&nodes[0], payment_hash, false,
556-
PaymentFailedConditions::new().expected_htlc_error_data(INVALID_ONION_BLINDING, &[0; 32]));
578+
fail_blinded_htlc_backwards(payment_hash, 1, &[&nodes[0], &nodes[1]]);
557579
return
558580
}
559581

@@ -643,14 +665,8 @@ fn do_blinded_intercept_payment(intercept_node_fails: bool) {
643665
nodes[1].node.fail_intercepted_htlc(intercept_id).unwrap();
644666
expect_pending_htlcs_forwardable_and_htlc_handling_failed_ignore!(nodes[1], vec![HTLCDestination::UnknownNextHop { requested_forward_scid: intercept_scid }]);
645667
nodes[1].node.process_pending_htlc_forwards();
646-
let update_fail = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
647668
check_added_monitors!(&nodes[1], 1);
648-
assert!(update_fail.update_fail_htlcs.len() == 1);
649-
let fail_msg = update_fail.update_fail_htlcs[0].clone();
650-
nodes[0].node.handle_update_fail_htlc(nodes[1].node.get_our_node_id(), &fail_msg);
651-
commitment_signed_dance!(nodes[0], nodes[1], update_fail.commitment_signed, false);
652-
expect_payment_failed_conditions(&nodes[0], payment_hash, false,
653-
PaymentFailedConditions::new().expected_htlc_error_data(INVALID_ONION_BLINDING, &[0; 32]));
669+
fail_blinded_htlc_backwards(payment_hash, 1, &[&nodes[0], &nodes[1]]);
654670
return
655671
}
656672

@@ -756,29 +772,7 @@ fn three_hop_blinded_path_fail() {
756772
);
757773
nodes[3].node.process_pending_htlc_forwards();
758774
check_added_monitors!(nodes[3], 1);
759-
760-
let updates_3_2 = get_htlc_update_msgs!(nodes[3], nodes[2].node.get_our_node_id());
761-
assert_eq!(updates_3_2.update_fail_malformed_htlcs.len(), 1);
762-
let update_malformed = &updates_3_2.update_fail_malformed_htlcs[0];
763-
assert_eq!(update_malformed.sha256_of_onion, [0; 32]);
764-
assert_eq!(update_malformed.failure_code, INVALID_ONION_BLINDING);
765-
nodes[2].node.handle_update_fail_malformed_htlc(nodes[3].node.get_our_node_id(), update_malformed);
766-
do_commitment_signed_dance(&nodes[2], &nodes[3], &updates_3_2.commitment_signed, true, false);
767-
768-
let updates_2_1 = get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id());
769-
assert_eq!(updates_2_1.update_fail_malformed_htlcs.len(), 1);
770-
let update_malformed = &updates_2_1.update_fail_malformed_htlcs[0];
771-
assert_eq!(update_malformed.sha256_of_onion, [0; 32]);
772-
assert_eq!(update_malformed.failure_code, INVALID_ONION_BLINDING);
773-
nodes[1].node.handle_update_fail_malformed_htlc(nodes[2].node.get_our_node_id(), update_malformed);
774-
do_commitment_signed_dance(&nodes[1], &nodes[2], &updates_2_1.commitment_signed, true, false);
775-
776-
let updates_1_0 = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
777-
assert_eq!(updates_1_0.update_fail_htlcs.len(), 1);
778-
nodes[0].node.handle_update_fail_htlc(nodes[1].node.get_our_node_id(), &updates_1_0.update_fail_htlcs[0]);
779-
do_commitment_signed_dance(&nodes[0], &nodes[1], &updates_1_0.commitment_signed, false, false);
780-
expect_payment_failed_conditions(&nodes[0], payment_hash, false,
781-
PaymentFailedConditions::new().expected_htlc_error_data(INVALID_ONION_BLINDING, &[0; 32]));
775+
fail_blinded_htlc_backwards(payment_hash, 1, &[&nodes[0], &nodes[1], &nodes[2], &nodes[3]]);
782776
}
783777

784778
#[derive(PartialEq)]

0 commit comments

Comments
 (0)