@@ -531,7 +531,7 @@ pub fn sign_funding_transaction<'a, 'b, 'c>(node_a: &Node<'a, 'b, 'c>, node_b: &
531531 let ( temporary_channel_id, tx, funding_output) = create_funding_transaction ( node_a, channel_value, 42 ) ;
532532 assert_eq ! ( temporary_channel_id, expected_temporary_channel_id) ;
533533
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 ( ) ) ;
535535 check_added_monitors ! ( node_a, 0 ) ;
536536
537537 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: &
559559 assert_eq ! ( node_a. tx_broadcaster. txn_broadcasted. lock( ) . unwrap( ) [ 0 ] , tx) ;
560560 node_a. tx_broadcaster . txn_broadcasted . lock ( ) . unwrap ( ) . clear ( ) ;
561561
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+
562567 tx
563568}
564569
@@ -1067,6 +1072,9 @@ macro_rules! expect_pending_htlcs_forwardable {
10671072 ( $node: expr) => { {
10681073 expect_pending_htlcs_forwardable_ignore!( $node) ;
10691074 $node. node. process_pending_htlc_forwards( ) ;
1075+
1076+ // Ensure process_pending_htlc_forwards is idempotent.
1077+ $node. node. process_pending_htlc_forwards( ) ;
10701078 } }
10711079}
10721080
@@ -1080,6 +1088,9 @@ macro_rules! expect_pending_htlcs_forwardable_from_events {
10801088 } ;
10811089 if $ignore {
10821090 $node. node. process_pending_htlc_forwards( ) ;
1091+
1092+ // Ensure process_pending_htlc_forwards is idempotent.
1093+ $node. node. process_pending_htlc_forwards( ) ;
10831094 }
10841095 } }
10851096}
@@ -1407,6 +1418,12 @@ pub fn do_claim_payment_along_route<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>,
14071418 last_update_fulfill_dance ! ( origin_node, expected_route. first( ) . unwrap( ) ) ;
14081419 }
14091420 }
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+
14101427 expected_total_fee_msat
14111428}
14121429pub 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
15511568 }
15521569 }
15531570 }
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 ) ;
15541577}
15551578
15561579pub 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