@@ -37,7 +37,7 @@ use lightning::chain::transaction::OutPoint;
3737use lightning:: sign:: { InMemorySigner , Recipient , KeyMaterial , EntropySource , NodeSigner , SignerProvider } ;
3838use lightning:: events:: Event ;
3939use lightning:: ln:: { ChannelId , PaymentHash , PaymentPreimage , PaymentSecret } ;
40- use lightning:: ln:: channelmanager:: { ChainParameters , ChannelDetails , ChannelManager , PaymentId , RecipientOnionFields , Retry } ;
40+ use lightning:: ln:: channelmanager:: { ChainParameters , ChannelDetails , ChannelManager , PaymentId , RecipientOnionFields , Retry , InterceptId } ;
4141use lightning:: ln:: peer_handler:: { MessageHandler , PeerManager , SocketDescriptor , IgnoringMessageHandler } ;
4242use lightning:: ln:: msgs:: { self , DecodeError } ;
4343use lightning:: ln:: script:: ShutdownScript ;
@@ -505,6 +505,7 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
505505
506506 let mut should_forward = false ;
507507 let mut payments_received: Vec < PaymentHash > = Vec :: new ( ) ;
508+ let mut intercepted_htlcs: Vec < InterceptId > = Vec :: new ( ) ;
508509 let mut payments_sent: u16 = 0 ;
509510 let mut pending_funding_generation: Vec < ( ChannelId , PublicKey , u64 , ScriptBuf ) > = Vec :: new ( ) ;
510511 let mut pending_funding_signatures = HashMap :: new ( ) ;
@@ -580,6 +581,19 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
580581 PaymentId ( payment_hash. 0 ) , params, Retry :: Attempts ( 2 )
581582 ) ;
582583 } ,
584+ 17 => {
585+ let final_value_msat = slice_to_be24 ( get_slice ! ( 3 ) ) as u64 ;
586+ let payment_params = PaymentParameters :: from_node_id ( get_pubkey ! ( ) , 42 ) ;
587+ let params = RouteParameters :: from_payment_params_and_value (
588+ payment_params, final_value_msat) ;
589+ let _ = channelmanager. send_preflight_probes ( params, None ) ;
590+ } ,
591+ 18 => {
592+ let idx = u16:: from_be_bytes ( get_bytes ! ( 2 ) ) % cmp:: max ( payments_sent, 1 ) ;
593+ let mut payment_id = PaymentId ( [ 0 ; 32 ] ) ;
594+ payment_id. 0 [ 0 ..2 ] . copy_from_slice ( & idx. to_be_bytes ( ) ) ;
595+ channelmanager. abandon_payment ( payment_id) ;
596+ } ,
583597 5 => {
584598 let peer_id = get_slice ! ( 1 ) [ 0 ] ;
585599 if !peers. borrow ( ) [ peer_id as usize ] { return ; }
@@ -714,7 +728,36 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
714728 channels. sort_by ( |a, b| { a. channel_id . cmp ( & b. channel_id ) } ) ;
715729 channelmanager. force_close_broadcasting_latest_txn ( & channels[ channel_id] . channel_id , & channels[ channel_id] . counterparty . node_id ) . unwrap ( ) ;
716730 } ,
717- // 15 is above
731+ // 15, 16, 17, 18 is above
732+ 19 => {
733+ let mut list = loss_detector. handler . get_peer_node_ids ( ) ;
734+ list. sort_by_key ( |v| v. 0 ) ;
735+ if let Some ( ( id, _) ) = list. get ( 0 ) {
736+ loss_detector. handler . disconnect_by_node_id ( * id) ;
737+ }
738+ } ,
739+ 20 => loss_detector. handler . disconnect_all_peers ( ) ,
740+ 21 => loss_detector. handler . timer_tick_occurred ( ) ,
741+ 22 =>
742+ loss_detector. handler . broadcast_node_announcement ( [ 42 ; 3 ] , [ 43 ; 32 ] , Vec :: new ( ) ) ,
743+ 32 => channelmanager. timer_tick_occurred ( ) ,
744+ 33 => {
745+ for id in intercepted_htlcs. drain ( ..) {
746+ channelmanager. fail_intercepted_htlc ( id) . unwrap ( ) ;
747+ }
748+ }
749+ 34 => {
750+ let amt = u64:: from_be_bytes ( get_bytes ! ( 8 ) ) ;
751+ let chans = channelmanager. list_channels ( ) ;
752+ for id in intercepted_htlcs. drain ( ..) {
753+ if chans. is_empty ( ) {
754+ channelmanager. fail_intercepted_htlc ( id) . unwrap ( ) ;
755+ } else {
756+ let chan = & chans[ amt as usize % chans. len ( ) ] ;
757+ channelmanager. forward_intercepted_htlc ( id, & chan. channel_id , chan. counterparty . node_id , amt) . unwrap ( ) ;
758+ }
759+ }
760+ }
718761 _ => return ,
719762 }
720763 loss_detector. handler . process_events ( ) ;
@@ -730,6 +773,11 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
730773 Event :: PendingHTLCsForwardable { ..} => {
731774 should_forward = true ;
732775 } ,
776+ Event :: HTLCIntercepted { intercept_id, .. } => {
777+ if !intercepted_htlcs. contains ( & intercept_id) {
778+ intercepted_htlcs. push ( intercept_id) ;
779+ }
780+ } ,
733781 _ => { } ,
734782 }
735783 }
0 commit comments