@@ -531,7 +531,7 @@ pub fn sign_funding_transaction<'a, 'b, 'c>(node_a: &Node<'a, 'b, 'c>, node_b: &
531
531
let ( temporary_channel_id, tx, funding_output) = create_funding_transaction ( node_a, channel_value, 42 ) ;
532
532
assert_eq ! ( temporary_channel_id, expected_temporary_channel_id) ;
533
533
534
- node_a. node . funding_transaction_generated ( & temporary_channel_id, tx. clone ( ) ) . unwrap ( ) ;
534
+ assert ! ( node_a. node. funding_transaction_generated( & temporary_channel_id, tx. clone( ) ) . is_ok ( ) ) ;
535
535
check_added_monitors ! ( node_a, 0 ) ;
536
536
537
537
let funding_created_msg = get_event_msg ! ( node_a, MessageSendEvent :: SendFundingCreated , node_b. node. get_our_node_id( ) ) ;
@@ -559,6 +559,11 @@ pub fn sign_funding_transaction<'a, 'b, 'c>(node_a: &Node<'a, 'b, 'c>, node_b: &
559
559
assert_eq ! ( node_a. tx_broadcaster. txn_broadcasted. lock( ) . unwrap( ) [ 0 ] , tx) ;
560
560
node_a. tx_broadcaster . txn_broadcasted . lock ( ) . unwrap ( ) . clear ( ) ;
561
561
562
+ // Ensure that funding_transaction_generated is idempotent.
563
+ assert ! ( node_a. node. funding_transaction_generated( & temporary_channel_id, tx. clone( ) ) . is_err( ) ) ;
564
+ assert ! ( node_a. node. get_and_clear_pending_msg_events( ) . is_empty( ) ) ;
565
+ check_added_monitors ! ( node_a, 0 ) ;
566
+
562
567
tx
563
568
}
564
569
@@ -1067,6 +1072,9 @@ macro_rules! expect_pending_htlcs_forwardable {
1067
1072
( $node: expr) => { {
1068
1073
expect_pending_htlcs_forwardable_ignore!( $node) ;
1069
1074
$node. node. process_pending_htlc_forwards( ) ;
1075
+
1076
+ // Ensure process_pending_htlc_forwards is idempotent.
1077
+ $node. node. process_pending_htlc_forwards( ) ;
1070
1078
} }
1071
1079
}
1072
1080
@@ -1080,6 +1088,9 @@ macro_rules! expect_pending_htlcs_forwardable_from_events {
1080
1088
} ;
1081
1089
if $ignore {
1082
1090
$node. node. process_pending_htlc_forwards( ) ;
1091
+
1092
+ // Ensure process_pending_htlc_forwards is idempotent.
1093
+ $node. node. process_pending_htlc_forwards( ) ;
1083
1094
}
1084
1095
} }
1085
1096
}
@@ -1407,6 +1418,12 @@ pub fn do_claim_payment_along_route<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>,
1407
1418
last_update_fulfill_dance ! ( origin_node, expected_route. first( ) . unwrap( ) ) ;
1408
1419
}
1409
1420
}
1421
+
1422
+ // Ensure that claim_funds is idempotent.
1423
+ assert ! ( !expected_paths[ 0 ] . last( ) . unwrap( ) . node. claim_funds( our_payment_preimage) ) ;
1424
+ assert ! ( expected_paths[ 0 ] . last( ) . unwrap( ) . node. get_and_clear_pending_msg_events( ) . is_empty( ) ) ;
1425
+ check_added_monitors ! ( expected_paths[ 0 ] . last( ) . unwrap( ) , 0 ) ;
1426
+
1410
1427
expected_total_fee_msat
1411
1428
}
1412
1429
pub fn claim_payment_along_route < ' a , ' b , ' c > ( origin_node : & Node < ' a , ' b , ' c > , expected_paths : & [ & [ & Node < ' a , ' b , ' c > ] ] , skip_last : bool , our_payment_preimage : PaymentPreimage ) {
@@ -1551,6 +1568,12 @@ pub fn fail_payment_along_route<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expe
1551
1568
}
1552
1569
}
1553
1570
}
1571
+
1572
+ // Ensure that fail_htlc_backwards is idempotent.
1573
+ assert ! ( !expected_paths[ 0 ] . last( ) . unwrap( ) . node. fail_htlc_backwards( & our_payment_hash) ) ;
1574
+ assert ! ( expected_paths[ 0 ] . last( ) . unwrap( ) . node. get_and_clear_pending_events( ) . is_empty( ) ) ;
1575
+ assert ! ( expected_paths[ 0 ] . last( ) . unwrap( ) . node. get_and_clear_pending_msg_events( ) . is_empty( ) ) ;
1576
+ check_added_monitors ! ( expected_paths[ 0 ] . last( ) . unwrap( ) , 0 ) ;
1554
1577
}
1555
1578
1556
1579
pub fn fail_payment < ' a , ' b , ' c > ( origin_node : & Node < ' a , ' b , ' c > , expected_path : & [ & Node < ' a , ' b , ' c > ] , our_payment_hash : PaymentHash ) {
0 commit comments