@@ -37,7 +37,7 @@ use lightning::chain::transaction::OutPoint;
37
37
use lightning:: sign:: { InMemorySigner , Recipient , KeyMaterial , EntropySource , NodeSigner , SignerProvider } ;
38
38
use lightning:: events:: Event ;
39
39
use 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 } ;
41
41
use lightning:: ln:: peer_handler:: { MessageHandler , PeerManager , SocketDescriptor , IgnoringMessageHandler } ;
42
42
use lightning:: ln:: msgs:: { self , DecodeError } ;
43
43
use lightning:: ln:: script:: ShutdownScript ;
@@ -505,6 +505,7 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
505
505
506
506
let mut should_forward = false ;
507
507
let mut payments_received: Vec < PaymentHash > = Vec :: new ( ) ;
508
+ let mut intercepted_htlcs: Vec < InterceptId > = Vec :: new ( ) ;
508
509
let mut payments_sent: u16 = 0 ;
509
510
let mut pending_funding_generation: Vec < ( ChannelId , PublicKey , u64 , ScriptBuf ) > = Vec :: new ( ) ;
510
511
let mut pending_funding_signatures = HashMap :: new ( ) ;
@@ -580,6 +581,19 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
580
581
PaymentId ( payment_hash. 0 ) , params, Retry :: Attempts ( 2 )
581
582
) ;
582
583
} ,
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
+ } ,
583
597
5 => {
584
598
let peer_id = get_slice ! ( 1 ) [ 0 ] ;
585
599
if !peers. borrow ( ) [ peer_id as usize ] { return ; }
@@ -712,7 +726,36 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
712
726
channels. sort_by ( |a, b| { a. channel_id . cmp ( & b. channel_id ) } ) ;
713
727
channelmanager. force_close_broadcasting_latest_txn ( & channels[ channel_id] . channel_id , & channels[ channel_id] . counterparty . node_id ) . unwrap ( ) ;
714
728
} ,
715
- // 15 is above
729
+ // 15, 16, 17, 18 is above
730
+ 19 => {
731
+ let mut list = loss_detector. handler . get_peer_node_ids ( ) ;
732
+ list. sort_by_key ( |v| v. 0 ) ;
733
+ if let Some ( ( id, _) ) = list. get ( 0 ) {
734
+ loss_detector. handler . disconnect_by_node_id ( * id) ;
735
+ }
736
+ } ,
737
+ 20 => loss_detector. handler . disconnect_all_peers ( ) ,
738
+ 21 => loss_detector. handler . timer_tick_occurred ( ) ,
739
+ 22 =>
740
+ loss_detector. handler . broadcast_node_announcement ( [ 42 ; 3 ] , [ 43 ; 32 ] , Vec :: new ( ) ) ,
741
+ 32 => channelmanager. timer_tick_occurred ( ) ,
742
+ 33 => {
743
+ for id in intercepted_htlcs. drain ( ..) {
744
+ channelmanager. fail_intercepted_htlc ( id) . unwrap ( ) ;
745
+ }
746
+ }
747
+ 34 => {
748
+ let amt = u64:: from_be_bytes ( get_bytes ! ( 8 ) ) ;
749
+ let chans = channelmanager. list_channels ( ) ;
750
+ for id in intercepted_htlcs. drain ( ..) {
751
+ if chans. is_empty ( ) {
752
+ channelmanager. fail_intercepted_htlc ( id) . unwrap ( ) ;
753
+ } else {
754
+ let chan = & chans[ amt as usize % chans. len ( ) ] ;
755
+ channelmanager. forward_intercepted_htlc ( id, & chan. channel_id , chan. counterparty . node_id , amt) . unwrap ( ) ;
756
+ }
757
+ }
758
+ }
716
759
_ => return ,
717
760
}
718
761
loss_detector. handler . process_events ( ) ;
@@ -728,6 +771,11 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
728
771
Event :: PendingHTLCsForwardable { ..} => {
729
772
should_forward = true ;
730
773
} ,
774
+ Event :: HTLCIntercepted { intercept_id, .. } => {
775
+ if !intercepted_htlcs. contains ( & intercept_id) {
776
+ intercepted_htlcs. push ( intercept_id) ;
777
+ }
778
+ } ,
731
779
_ => { } ,
732
780
}
733
781
}
0 commit comments