@@ -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 ;
@@ -510,6 +510,7 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
510
510
511
511
let mut should_forward = false ;
512
512
let mut payments_received: Vec < PaymentHash > = Vec :: new ( ) ;
513
+ let mut intercepted_htlcs: Vec < InterceptId > = Vec :: new ( ) ;
513
514
let mut payments_sent: u16 = 0 ;
514
515
let mut pending_funding_generation: Vec < ( ChannelId , PublicKey , u64 , ScriptBuf ) > = Vec :: new ( ) ;
515
516
let mut pending_funding_signatures = HashMap :: new ( ) ;
@@ -585,6 +586,19 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
585
586
PaymentId ( payment_hash. 0 ) , params, Retry :: Attempts ( 2 )
586
587
) ;
587
588
} ,
589
+ 17 => {
590
+ let final_value_msat = slice_to_be24 ( get_slice ! ( 3 ) ) as u64 ;
591
+ let payment_params = PaymentParameters :: from_node_id ( get_pubkey ! ( ) , 42 ) ;
592
+ let params = RouteParameters :: from_payment_params_and_value (
593
+ payment_params, final_value_msat) ;
594
+ let _ = channelmanager. send_preflight_probes ( params, None ) ;
595
+ } ,
596
+ 18 => {
597
+ let idx = u16:: from_be_bytes ( get_bytes ! ( 2 ) ) % cmp:: max ( payments_sent, 1 ) ;
598
+ let mut payment_id = PaymentId ( [ 0 ; 32 ] ) ;
599
+ payment_id. 0 [ 0 ..2 ] . copy_from_slice ( & idx. to_be_bytes ( ) ) ;
600
+ channelmanager. abandon_payment ( payment_id) ;
601
+ } ,
588
602
5 => {
589
603
let peer_id = get_slice ! ( 1 ) [ 0 ] ;
590
604
if !peers. borrow ( ) [ peer_id as usize ] { return ; }
@@ -717,7 +731,36 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
717
731
channels. sort_by ( |a, b| { a. channel_id . cmp ( & b. channel_id ) } ) ;
718
732
channelmanager. force_close_broadcasting_latest_txn ( & channels[ channel_id] . channel_id , & channels[ channel_id] . counterparty . node_id ) . unwrap ( ) ;
719
733
} ,
720
- // 15 is above
734
+ // 15, 16, 17, 18 is above
735
+ 19 => {
736
+ let mut list = loss_detector. handler . get_peer_node_ids ( ) ;
737
+ list. sort_by_key ( |v| v. 0 ) ;
738
+ if let Some ( ( id, _) ) = list. get ( 0 ) {
739
+ loss_detector. handler . disconnect_by_node_id ( * id) ;
740
+ }
741
+ } ,
742
+ 20 => loss_detector. handler . disconnect_all_peers ( ) ,
743
+ 21 => loss_detector. handler . timer_tick_occurred ( ) ,
744
+ 22 =>
745
+ loss_detector. handler . broadcast_node_announcement ( [ 42 ; 3 ] , [ 43 ; 32 ] , Vec :: new ( ) ) ,
746
+ 32 => channelmanager. timer_tick_occurred ( ) ,
747
+ 33 => {
748
+ for id in intercepted_htlcs. drain ( ..) {
749
+ channelmanager. fail_intercepted_htlc ( id) . unwrap ( ) ;
750
+ }
751
+ }
752
+ 34 => {
753
+ let amt = u64:: from_be_bytes ( get_bytes ! ( 8 ) ) ;
754
+ let chans = channelmanager. list_channels ( ) ;
755
+ for id in intercepted_htlcs. drain ( ..) {
756
+ if chans. is_empty ( ) {
757
+ channelmanager. fail_intercepted_htlc ( id) . unwrap ( ) ;
758
+ } else {
759
+ let chan = & chans[ amt as usize % chans. len ( ) ] ;
760
+ channelmanager. forward_intercepted_htlc ( id, & chan. channel_id , chan. counterparty . node_id , amt) . unwrap ( ) ;
761
+ }
762
+ }
763
+ }
721
764
_ => return ,
722
765
}
723
766
loss_detector. handler . process_events ( ) ;
@@ -733,6 +776,11 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
733
776
Event :: PendingHTLCsForwardable { ..} => {
734
777
should_forward = true ;
735
778
} ,
779
+ Event :: HTLCIntercepted { intercept_id, .. } => {
780
+ if !intercepted_htlcs. contains ( & intercept_id) {
781
+ intercepted_htlcs. push ( intercept_id) ;
782
+ }
783
+ } ,
736
784
_ => { } ,
737
785
}
738
786
}
0 commit comments