@@ -530,7 +530,7 @@ pub fn sign_funding_transaction<'a, 'b, 'c>(node_a: &Node<'a, 'b, 'c>, node_b: &
530
530
let ( temporary_channel_id, tx, funding_output) = create_funding_transaction ( node_a, channel_value, 42 ) ;
531
531
assert_eq ! ( temporary_channel_id, expected_temporary_channel_id) ;
532
532
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 ( ) ) ;
534
534
check_added_monitors ! ( node_a, 0 ) ;
535
535
536
536
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: &
558
558
assert_eq ! ( node_a. tx_broadcaster. txn_broadcasted. lock( ) . unwrap( ) [ 0 ] , tx) ;
559
559
node_a. tx_broadcaster . txn_broadcasted . lock ( ) . unwrap ( ) . clear ( ) ;
560
560
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
+
561
566
tx
562
567
}
563
568
@@ -1057,6 +1062,9 @@ macro_rules! expect_pending_htlcs_forwardable {
1057
1062
( $node: expr) => { {
1058
1063
expect_pending_htlcs_forwardable_ignore!( $node) ;
1059
1064
$node. node. process_pending_htlc_forwards( ) ;
1065
+
1066
+ // Ensure process_pending_htlc_forwards is idempotent.
1067
+ $node. node. process_pending_htlc_forwards( ) ;
1060
1068
} }
1061
1069
}
1062
1070
@@ -1070,6 +1078,9 @@ macro_rules! expect_pending_htlcs_forwardable_from_events {
1070
1078
} ;
1071
1079
if $ignore {
1072
1080
$node. node. process_pending_htlc_forwards( ) ;
1081
+
1082
+ // Ensure process_pending_htlc_forwards is idempotent.
1083
+ $node. node. process_pending_htlc_forwards( ) ;
1073
1084
}
1074
1085
} }
1075
1086
}
@@ -1392,6 +1403,12 @@ pub fn do_claim_payment_along_route<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>,
1392
1403
last_update_fulfill_dance ! ( origin_node, expected_route. first( ) . unwrap( ) ) ;
1393
1404
}
1394
1405
}
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
+
1395
1412
expected_total_fee_msat
1396
1413
}
1397
1414
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 ) {
@@ -1536,6 +1553,12 @@ pub fn fail_payment_along_route<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expe
1536
1553
}
1537
1554
}
1538
1555
}
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 ) ;
1539
1562
}
1540
1563
1541
1564
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