Skip to content

Commit c35584c

Browse files
committed
Make test_duplicate_payment_hash_one_failure_one_success robust
`test_duplicate_payment_hash_one_failure_one_success` currently fails if the "wrong" HTLC is picked to be claimed. Given the HTLCs are identical, there's no way to figure out which we should claim. The test instead relies on a magic value - the first one is the right one....unless we change our CSPRNG implementation. When we try to do so, the test randomly fails. Here we change one HTLC to a lower amount so we can figure out which transaction to broadcast to make the test robust against CSPRNG changes.
1 parent 8bb6614 commit c35584c

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

lightning/src/ln/functional_tests.rs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4718,8 +4718,8 @@ fn test_duplicate_payment_hash_one_failure_one_success() {
47184718
// ACCEPTED_HTLC_SCRIPT_WEIGHT.
47194719
let payment_params = PaymentParameters::from_node_id(nodes[3].node.get_our_node_id())
47204720
.with_features(nodes[3].node.invoice_features());
4721-
let (route, _, _, _) = get_route_and_payment_hash!(nodes[0], nodes[3], payment_params, 900000, TEST_FINAL_CLTV - 40);
4722-
send_along_route_with_secret(&nodes[0], route, &[&[&nodes[1], &nodes[2], &nodes[3]]], 900000, duplicate_payment_hash, payment_secret);
4721+
let (route, _, _, _) = get_route_and_payment_hash!(nodes[0], nodes[3], payment_params, 800_000, TEST_FINAL_CLTV - 40);
4722+
send_along_route_with_secret(&nodes[0], route, &[&[&nodes[1], &nodes[2], &nodes[3]]], 800_000, duplicate_payment_hash, payment_secret);
47234723

47244724
let commitment_txn = get_local_commitment_txn!(nodes[2], chan_2.2);
47254725
assert_eq!(commitment_txn[0].input.len(), 1);
@@ -4739,25 +4739,34 @@ fn test_duplicate_payment_hash_one_failure_one_success() {
47394739

47404740
check_spends!(node_txn[0], commitment_txn[0]);
47414741
assert_eq!(node_txn[0].input.len(), 1);
4742+
assert_eq!(node_txn[0].output.len(), 1);
47424743

47434744
if node_txn.len() > 2 {
47444745
check_spends!(node_txn[1], commitment_txn[0]);
47454746
assert_eq!(node_txn[1].input.len(), 1);
4747+
assert_eq!(node_txn[2].output.len(), 1);
47464748
assert_eq!(node_txn[0].input[0].previous_output, node_txn[1].input[0].previous_output);
47474749

47484750
check_spends!(node_txn[2], commitment_txn[0]);
4751+
assert_eq!(node_txn[2].input.len(), 1);
4752+
assert_eq!(node_txn[2].output.len(), 1);
47494753
assert_ne!(node_txn[0].input[0].previous_output, node_txn[2].input[0].previous_output);
47504754
} else {
47514755
check_spends!(node_txn[1], commitment_txn[0]);
4756+
assert_eq!(node_txn[1].input.len(), 1);
4757+
assert_eq!(node_txn[1].output.len(), 1);
47524758
assert_ne!(node_txn[0].input[0].previous_output, node_txn[1].input[0].previous_output);
47534759
}
47544760

47554761
assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
47564762
assert_eq!(node_txn[1].input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
4763+
// Assign htlc_timeout_tx to the second HTLC (with value ~800 sats).
47574764
if node_txn.len() > 2 {
47584765
assert_eq!(node_txn[2].input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
4766+
htlc_timeout_tx = if node_txn[2].output[0].value < 900 { node_txn[2].clone() } else { node_txn[0].clone() };
4767+
} else {
4768+
htlc_timeout_tx = if node_txn[0].output[0].value < 900 { node_txn[1].clone() } else { node_txn[0].clone() };
47594769
}
4760-
htlc_timeout_tx = node_txn[0].clone();
47614770
}
47624771

47634772
nodes[2].node.claim_funds(our_payment_preimage);
@@ -4808,7 +4817,7 @@ fn test_duplicate_payment_hash_one_failure_one_success() {
48084817
// Note that the fee paid is effectively double as the HTLC value (including the nodes[1] fee
48094818
// and nodes[2] fee) is rounded down and then claimed in full.
48104819
mine_transaction(&nodes[1], &htlc_success_txn[1]);
4811-
expect_payment_forwarded!(nodes[1], nodes[0], nodes[2], Some(196*2), true, true);
4820+
expect_payment_forwarded!(nodes[1], nodes[0], nodes[2], Some(196), true, true);
48124821
let updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id());
48134822
assert!(updates.update_add_htlcs.is_empty());
48144823
assert!(updates.update_fail_htlcs.is_empty());

0 commit comments

Comments
 (0)