@@ -309,8 +309,10 @@ fn do_forward_checks_failure(check: ForwardCheckFail, intro_fails: bool) {
309309	// We need the session priv to construct a bogus onion packet later. 
310310	* nodes[ 0 ] . keys_manager . override_random_bytes . lock ( ) . unwrap ( )  = Some ( [ 3 ;  32 ] ) ; 
311311	create_announced_chan_between_nodes_with_value ( & nodes,  0 ,  1 ,  1_000_000 ,  0 ) ; 
312- 	let  chan_upd_1_2 = create_announced_chan_between_nodes_with_value ( & nodes,  1 ,  2 ,  1_000_000 ,  0 ) . 0 . contents ; 
313- 	let  chan_upd_2_3 = create_announced_chan_between_nodes_with_value ( & nodes,  2 ,  3 ,  1_000_000 ,  0 ) . 0 . contents ; 
312+ 	let  chan_1_2 = create_announced_chan_between_nodes_with_value ( & nodes,  1 ,  2 ,  1_000_000 ,  0 ) ; 
313+ 	let  chan_upd_1_2 = chan_1_2. 0 . contents ; 
314+ 	let  chan_2_3 = create_announced_chan_between_nodes_with_value ( & nodes,  2 ,  3 ,  1_000_000 ,  0 ) ; 
315+ 	let  chan_upd_2_3 = chan_2_3. 0 . contents ; 
314316
315317	let  amt_msat = 5000 ; 
316318	let  ( _,  payment_hash,  payment_secret)  = get_payment_preimage_hash ( & nodes[ 3 ] ,  Some ( amt_msat) ,  None ) ; 
@@ -364,18 +366,27 @@ fn do_forward_checks_failure(check: ForwardCheckFail, intro_fails: bool) {
364366	check_added_monitors ! ( nodes[ 1 ] ,  0 ) ; 
365367	do_commitment_signed_dance ( & nodes[ 1 ] ,  & nodes[ 0 ] ,  & updates_0_1. commitment_signed ,  true ,  true ) ; 
366368
369+ 	expect_pending_htlcs_forwardable ! ( nodes[ 1 ] ) ; 
370+ 	check_added_monitors ! ( nodes[ 1 ] ,  1 ) ; 
371+ 
367372	if  intro_fails { 
368373		let  mut  updates = get_htlc_update_msgs ! ( nodes[ 1 ] ,  nodes[ 0 ] . node. get_our_node_id( ) ) ; 
369374		nodes[ 0 ] . node . handle_update_fail_htlc ( nodes[ 1 ] . node . get_our_node_id ( ) ,  & updates. update_fail_htlcs [ 0 ] ) ; 
370375		do_commitment_signed_dance ( & nodes[ 0 ] ,  & nodes[ 1 ] ,  & updates. commitment_signed ,  false ,  false ) ; 
376+ 		let  failed_destination = match  check { 
377+ 			ForwardCheckFail :: InboundOnionCheck  => HTLCDestination :: InvalidOnion , 
378+ 			ForwardCheckFail :: ForwardPayloadEncodedAsReceive  => HTLCDestination :: FailedPayment  {  payment_hash } , 
379+ 			ForwardCheckFail :: OutboundChannelCheck  =>
380+ 				HTLCDestination :: NextHopChannel  {  node_id :  Some ( nodes[ 2 ] . node . get_our_node_id ( ) ) ,  channel_id :  chan_1_2. 2  } , 
381+ 		} ; 
382+ 		expect_htlc_handling_failed_destinations ! ( 
383+ 			nodes[ 1 ] . node. get_and_clear_pending_events( ) ,  & [ failed_destination. clone( ) ] 
384+ 		) ; 
371385		expect_payment_failed_conditions ( & nodes[ 0 ] ,  payment_hash,  false , 
372386			PaymentFailedConditions :: new ( ) . expected_htlc_error_data ( INVALID_ONION_BLINDING ,  & [ 0 ;  32 ] ) ) ; 
373387		return 
374388	} 
375389
376- 	expect_pending_htlcs_forwardable ! ( nodes[ 1 ] ) ; 
377- 	check_added_monitors ! ( nodes[ 1 ] ,  1 ) ; 
378- 
379390	let  mut  updates_1_2 = get_htlc_update_msgs ! ( nodes[ 1 ] ,  nodes[ 2 ] . node. get_our_node_id( ) ) ; 
380391	let  mut  update_add = & mut  updates_1_2. update_add_htlcs [ 0 ] ; 
381392
@@ -385,6 +396,17 @@ fn do_forward_checks_failure(check: ForwardCheckFail, intro_fails: bool) {
385396	check_added_monitors ! ( nodes[ 2 ] ,  0 ) ; 
386397	do_commitment_signed_dance ( & nodes[ 2 ] ,  & nodes[ 1 ] ,  & updates_1_2. commitment_signed ,  true ,  true ) ; 
387398
399+ 	expect_pending_htlcs_forwardable ! ( nodes[ 2 ] ) ; 
400+ 	let  failed_destination = match  check { 
401+ 		ForwardCheckFail :: InboundOnionCheck |ForwardCheckFail :: ForwardPayloadEncodedAsReceive  => HTLCDestination :: InvalidOnion , 
402+ 		ForwardCheckFail :: OutboundChannelCheck  =>
403+ 			HTLCDestination :: NextHopChannel  {  node_id :  Some ( nodes[ 3 ] . node . get_our_node_id ( ) ) ,  channel_id :  chan_2_3. 2  } , 
404+ 	} ; 
405+ 	expect_htlc_handling_failed_destinations ! ( 
406+ 		nodes[ 2 ] . node. get_and_clear_pending_events( ) ,  & [ failed_destination. clone( ) ] 
407+ 	) ; 
408+ 	check_added_monitors ! ( nodes[ 2 ] ,  1 ) ; 
409+ 
388410	let  mut  updates = get_htlc_update_msgs ! ( nodes[ 2 ] ,  nodes[ 1 ] . node. get_our_node_id( ) ) ; 
389411	let  update_malformed = & mut  updates. update_fail_malformed_htlcs [ 0 ] ; 
390412	assert_eq ! ( update_malformed. failure_code,  INVALID_ONION_BLINDING ) ; 
@@ -444,7 +466,10 @@ fn failed_backwards_to_intro_node() {
444466	nodes[ 2 ] . node . handle_update_add_htlc ( nodes[ 1 ] . node . get_our_node_id ( ) ,  & payment_event. msgs [ 0 ] ) ; 
445467	check_added_monitors ! ( nodes[ 2 ] ,  0 ) ; 
446468	do_commitment_signed_dance ( & nodes[ 2 ] ,  & nodes[ 1 ] ,  & payment_event. commitment_msg ,  true ,  true ) ; 
447- 	nodes[ 2 ] . node . process_pending_htlc_forwards ( ) ; 
469+ 
470+ 	expect_pending_htlcs_forwardable ! ( nodes[ 2 ] ) ; 
471+ 	expect_htlc_handling_failed_destinations ! ( nodes[ 2 ] . node. get_and_clear_pending_events( ) ,  & [ HTLCDestination :: InvalidOnion ] ) ; 
472+ 	check_added_monitors ( & nodes[ 2 ] ,  1 ) ; 
448473
449474	let  mut  updates = get_htlc_update_msgs ! ( nodes[ 2 ] ,  nodes[ 1 ] . node. get_our_node_id( ) ) ; 
450475	let  mut  update_malformed = & mut  updates. update_fail_malformed_htlcs [ 0 ] ; 
@@ -521,7 +546,7 @@ fn do_forward_fail_in_process_pending_htlc_fwds(check: ProcessPendingHTLCsCheck,
521546					// intro node will error backwards. 
522547					$curr_node. node. peer_disconnected( $next_node. node. get_our_node_id( ) ) ; 
523548					expect_pending_htlcs_forwardable!( $curr_node) ; 
524- 					expect_pending_htlcs_forwardable_and_htlc_handling_failed_ignore !( $curr_node, 
549+ 					expect_htlc_handling_failed_destinations !( $curr_node. node . get_and_clear_pending_events ( ) , 
525550						vec![ HTLCDestination :: NextHopChannel  {  node_id:  Some ( $next_node. node. get_our_node_id( ) ) ,  channel_id:  $failed_chan_id } ] ) ; 
526551				} , 
527552				ProcessPendingHTLCsCheck :: FwdChannelClosed  => { 
@@ -537,12 +562,12 @@ fn do_forward_fail_in_process_pending_htlc_fwds(check: ProcessPendingHTLCsCheck,
537562						crate :: events:: Event :: ChannelClosed  {  .. }  => { } , 
538563						_ => panic!( "Unexpected event {:?}" ,  events) , 
539564					} 
565+ 					check_closed_broadcast( & $curr_node,  1 ,  true ) ; 
566+ 					check_added_monitors!( $curr_node,  1 ) ; 
540567
541568					$curr_node. node. process_pending_htlc_forwards( ) ; 
542- 					expect_pending_htlcs_forwardable_and_htlc_handling_failed_ignore !( $curr_node, 
569+ 					expect_htlc_handling_failed_destinations !( $curr_node. node . get_and_clear_pending_events ( ) , 
543570						vec![ HTLCDestination :: UnknownNextHop  {  requested_forward_scid:  $failed_scid } ] ) ; 
544- 					check_closed_broadcast( & $curr_node,  1 ,  true ) ; 
545- 					check_added_monitors!( $curr_node,  1 ) ; 
546571					$curr_node. node. process_pending_htlc_forwards( ) ; 
547572				} , 
548573			} 
@@ -628,6 +653,7 @@ fn do_blinded_intercept_payment(intercept_node_fails: bool) {
628653	} ; 
629654	nodes[ 1 ] . node . handle_update_add_htlc ( nodes[ 0 ] . node . get_our_node_id ( ) ,  & payment_event. msgs [ 0 ] ) ; 
630655	commitment_signed_dance ! ( nodes[ 1 ] ,  nodes[ 0 ] ,  & payment_event. commitment_msg,  false ,  true ) ; 
656+ 	expect_pending_htlcs_forwardable ! ( nodes[ 1 ] ) ; 
631657
632658	let  events = nodes[ 1 ] . node . get_and_clear_pending_events ( ) ; 
633659	assert_eq ! ( events. len( ) ,  1 ) ; 
@@ -933,13 +959,19 @@ fn do_multi_hop_receiver_fail(check: ReceiveCheckFail) {
933959			nodes[ 2 ] . node . handle_update_add_htlc ( nodes[ 1 ] . node . get_our_node_id ( ) ,  update_add) ; 
934960			check_added_monitors ! ( nodes[ 2 ] ,  0 ) ; 
935961			do_commitment_signed_dance ( & nodes[ 2 ] ,  & nodes[ 1 ] ,  & payment_event_1_2. commitment_msg ,  true ,  true ) ; 
962+ 			expect_pending_htlcs_forwardable ! ( nodes[ 2 ] ) ; 
963+ 			expect_htlc_handling_failed_destinations ! ( nodes[ 2 ] . node. get_and_clear_pending_events( ) ,  & [ HTLCDestination :: InvalidOnion ] ) ; 
964+ 			check_added_monitors ( & nodes[ 2 ] ,  1 ) ; 
936965		} , 
937966		ReceiveCheckFail :: ReceiveRequirements  => { 
938967			let  update_add = & mut  payment_event_1_2. msgs [ 0 ] ; 
939968			update_add. amount_msat  -= 1 ; 
940969			nodes[ 2 ] . node . handle_update_add_htlc ( nodes[ 1 ] . node . get_our_node_id ( ) ,  update_add) ; 
941970			check_added_monitors ! ( nodes[ 2 ] ,  0 ) ; 
942971			do_commitment_signed_dance ( & nodes[ 2 ] ,  & nodes[ 1 ] ,  & payment_event_1_2. commitment_msg ,  true ,  true ) ; 
972+ 			expect_pending_htlcs_forwardable ! ( nodes[ 2 ] ) ; 
973+ 			expect_htlc_handling_failed_destinations ! ( nodes[ 2 ] . node. get_and_clear_pending_events( ) ,  & [ HTLCDestination :: FailedPayment  {  payment_hash } ] ) ; 
974+ 			check_added_monitors ( & nodes[ 2 ] ,  1 ) ; 
943975		} , 
944976		ReceiveCheckFail :: ChannelCheck  => { 
945977			nodes[ 2 ] . node . close_channel ( & chan_id_1_2,  & nodes[ 1 ] . node . get_our_node_id ( ) ) . unwrap ( ) ; 
@@ -953,6 +985,9 @@ fn do_multi_hop_receiver_fail(check: ReceiveCheckFail) {
953985
954986			nodes[ 2 ] . node . handle_shutdown ( nodes[ 1 ] . node . get_our_node_id ( ) ,  & node_1_shutdown) ; 
955987			commitment_signed_dance ! ( nodes[ 2 ] ,  nodes[ 1 ] ,  ( ) ,  false ,  true ,  false ,  false ) ; 
988+ 			expect_pending_htlcs_forwardable ! ( nodes[ 2 ] ) ; 
989+ 			expect_htlc_handling_failed_destinations ! ( nodes[ 2 ] . node. get_and_clear_pending_events( ) ,  & [ HTLCDestination :: FailedPayment  {  payment_hash } ] ) ; 
990+ 			check_added_monitors ( & nodes[ 2 ] ,  1 ) ; 
956991		} , 
957992		ReceiveCheckFail :: ProcessPendingHTLCsCheck  => { 
958993			assert_eq ! ( payment_event_1_2. msgs[ 0 ] . cltv_expiry,  nodes[ 0 ] . best_block_info( ) . 1  + 1  + excess_final_cltv_delta_opt. unwrap( )  as  u32  + TEST_FINAL_CLTV ) ; 
@@ -968,6 +1003,9 @@ fn do_multi_hop_receiver_fail(check: ReceiveCheckFail) {
9681003			nodes[ 2 ] . node . handle_update_add_htlc ( nodes[ 1 ] . node . get_our_node_id ( ) ,  & payment_event_1_2. msgs [ 0 ] ) ; 
9691004			check_added_monitors ! ( nodes[ 2 ] ,  0 ) ; 
9701005			do_commitment_signed_dance ( & nodes[ 2 ] ,  & nodes[ 1 ] ,  & payment_event_1_2. commitment_msg ,  true ,  true ) ; 
1006+ 			expect_pending_htlcs_forwardable ! ( nodes[ 2 ] ) ; 
1007+ 			expect_htlc_handling_failed_destinations ! ( nodes[ 2 ] . node. get_and_clear_pending_events( ) ,  & [ HTLCDestination :: FailedPayment  {  payment_hash } ] ) ; 
1008+ 			check_added_monitors ( & nodes[ 2 ] ,  1 ) ; 
9711009		} 
9721010	} 
9731011
@@ -1168,6 +1206,12 @@ fn min_htlc() {
11681206	nodes[ 1 ] . node . handle_update_add_htlc ( nodes[ 0 ] . node . get_our_node_id ( ) ,  & payment_event_0_1. msgs [ 0 ] ) ; 
11691207	check_added_monitors ! ( nodes[ 1 ] ,  0 ) ; 
11701208	do_commitment_signed_dance ( & nodes[ 1 ] ,  & nodes[ 0 ] ,  & payment_event_0_1. commitment_msg ,  true ,  true ) ; 
1209+ 	expect_pending_htlcs_forwardable ! ( nodes[ 1 ] ) ; 
1210+ 	expect_htlc_handling_failed_destinations ! ( 
1211+ 		nodes[ 1 ] . node. get_and_clear_pending_events( ) , 
1212+ 		& [ HTLCDestination :: NextHopChannel  {  node_id:  Some ( nodes[ 2 ] . node. get_our_node_id( ) ) ,  channel_id:  chan_1_2. 2  } ] 
1213+ 	) ; 
1214+ 	check_added_monitors ( & nodes[ 1 ] ,  1 ) ; 
11711215	let  mut  updates = get_htlc_update_msgs ! ( nodes[ 1 ] ,  nodes[ 0 ] . node. get_our_node_id( ) ) ; 
11721216	nodes[ 0 ] . node . handle_update_fail_htlc ( nodes[ 1 ] . node . get_our_node_id ( ) ,  & updates. update_fail_htlcs [ 0 ] ) ; 
11731217	do_commitment_signed_dance ( & nodes[ 0 ] ,  & nodes[ 1 ] ,  & updates. commitment_signed ,  false ,  false ) ; 
@@ -1497,9 +1541,11 @@ fn fails_receive_tlvs_authentication() {
14971541	let  mut  payment_event = SendEvent :: from_event ( ev) ; 
14981542
14991543	nodes[ 1 ] . node . handle_update_add_htlc ( nodes[ 0 ] . node . get_our_node_id ( ) ,  & payment_event. msgs [ 0 ] ) ; 
1500- 	check_added_monitors ! ( nodes[ 1 ] ,  0 ) ; 
15011544	do_commitment_signed_dance ( & nodes[ 1 ] ,  & nodes[ 0 ] ,  & payment_event. commitment_msg ,  true ,  true ) ; 
1545+ 	expect_pending_htlcs_forwardable ! ( nodes[ 1 ] ) ; 
15021546	nodes[ 1 ] . node . process_pending_htlc_forwards ( ) ; 
1547+ 	check_added_monitors ! ( nodes[ 1 ] ,  1 ) ; 
1548+ 	expect_htlc_handling_failed_destinations ! ( nodes[ 1 ] . node. get_and_clear_pending_events( ) ,  & [ HTLCDestination :: InvalidOnion ] ) ; 
15031549
15041550	let  mut  update_fail = get_htlc_update_msgs ! ( nodes[ 1 ] ,  nodes[ 0 ] . node. get_our_node_id( ) ) ; 
15051551	assert ! ( update_fail. update_fail_htlcs. len( )  == 1 ) ; 
0 commit comments