@@ -530,7 +530,7 @@ pub fn sign_funding_transaction<'a, 'b, 'c>(node_a: &Node<'a, 'b, 'c>, node_b: &
530530 let ( temporary_channel_id, tx, funding_output) = create_funding_transaction ( node_a, channel_value, 42 ) ;
531531 assert_eq ! ( temporary_channel_id, expected_temporary_channel_id) ;
532532
533- node_a. node . funding_transaction_generated ( & temporary_channel_id, tx. clone ( ) ) . unwrap ( ) ;
533+ assert ! ( node_a. node. funding_transaction_generated( & temporary_channel_id, tx. clone( ) ) . is_ok ( ) ) ;
534534 check_added_monitors ! ( node_a, 0 ) ;
535535
536536 let funding_created_msg = get_event_msg ! ( node_a, MessageSendEvent :: SendFundingCreated , node_b. node. get_our_node_id( ) ) ;
@@ -558,6 +558,11 @@ pub fn sign_funding_transaction<'a, 'b, 'c>(node_a: &Node<'a, 'b, 'c>, node_b: &
558558 assert_eq ! ( node_a. tx_broadcaster. txn_broadcasted. lock( ) . unwrap( ) [ 0 ] , tx) ;
559559 node_a. tx_broadcaster . txn_broadcasted . lock ( ) . unwrap ( ) . clear ( ) ;
560560
561+ // Ensure that funding_transaction_generated is idempotent.
562+ assert ! ( node_a. node. funding_transaction_generated( & temporary_channel_id, tx. clone( ) ) . is_err( ) ) ;
563+ assert ! ( node_a. node. get_and_clear_pending_msg_events( ) . is_empty( ) ) ;
564+ check_added_monitors ! ( node_a, 0 ) ;
565+
561566 tx
562567}
563568
@@ -1057,6 +1062,9 @@ macro_rules! expect_pending_htlcs_forwardable {
10571062 ( $node: expr) => { {
10581063 expect_pending_htlcs_forwardable_ignore!( $node) ;
10591064 $node. node. process_pending_htlc_forwards( ) ;
1065+
1066+ // Ensure process_pending_htlc_forwards is idempotent.
1067+ $node. node. process_pending_htlc_forwards( ) ;
10601068 } }
10611069}
10621070
@@ -1070,6 +1078,9 @@ macro_rules! expect_pending_htlcs_forwardable_from_events {
10701078 } ;
10711079 if $ignore {
10721080 $node. node. process_pending_htlc_forwards( ) ;
1081+
1082+ // Ensure process_pending_htlc_forwards is idempotent.
1083+ $node. node. process_pending_htlc_forwards( ) ;
10731084 }
10741085 } }
10751086}
@@ -1392,6 +1403,12 @@ pub fn do_claim_payment_along_route<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>,
13921403 last_update_fulfill_dance ! ( origin_node, expected_route. first( ) . unwrap( ) ) ;
13931404 }
13941405 }
1406+
1407+ // Ensure that claim_funds is idempotent.
1408+ assert ! ( !expected_paths[ 0 ] . last( ) . unwrap( ) . node. claim_funds( our_payment_preimage) ) ;
1409+ assert ! ( expected_paths[ 0 ] . last( ) . unwrap( ) . node. get_and_clear_pending_msg_events( ) . is_empty( ) ) ;
1410+ check_added_monitors ! ( expected_paths[ 0 ] . last( ) . unwrap( ) , 0 ) ;
1411+
13951412 expected_total_fee_msat
13961413}
13971414pub 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 ) {
@@ -1536,6 +1553,12 @@ pub fn fail_payment_along_route<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expe
15361553 }
15371554 }
15381555 }
1556+
1557+ // Ensure that fail_htlc_backwards is idempotent.
1558+ assert ! ( !expected_paths[ 0 ] . last( ) . unwrap( ) . node. fail_htlc_backwards( & our_payment_hash) ) ;
1559+ assert ! ( expected_paths[ 0 ] . last( ) . unwrap( ) . node. get_and_clear_pending_events( ) . is_empty( ) ) ;
1560+ assert ! ( expected_paths[ 0 ] . last( ) . unwrap( ) . node. get_and_clear_pending_msg_events( ) . is_empty( ) ) ;
1561+ check_added_monitors ! ( expected_paths[ 0 ] . last( ) . unwrap( ) , 0 ) ;
15391562}
15401563
15411564pub 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