@@ -203,10 +203,13 @@ impl_writeable_msg!(PaymentConstraints, {
203203
204204#[ cfg( test) ]
205205mod tests {
206- use bitcoin:: secp256k1:: PublicKey ;
206+ use bitcoin:: network:: constants:: Network ;
207+ use bitcoin:: secp256k1:: { PublicKey , Secp256k1 } ;
208+ use crate :: blinded_path:: BlindedPath ;
207209 use crate :: blinded_path:: payment:: { BlindedPaymentTlvs , PaymentConstraints , PaymentRelay } ;
208210 use crate :: ln:: PaymentSecret ;
209211 use crate :: ln:: features:: BlindedHopFeatures ;
212+ use crate :: util:: test_utils;
210213
211214 #[ test]
212215 fn compute_payinfo ( ) {
@@ -266,4 +269,47 @@ mod tests {
266269 assert_eq ! ( blinded_payinfo. cltv_expiry_delta, 0 ) ;
267270 assert_eq ! ( blinded_payinfo. htlc_minimum_msat, 1 ) ;
268271 }
272+
273+ #[ test]
274+ fn invalid_payloads ( ) {
275+ let dummy_pk = PublicKey :: from_slice ( & [ 2 ; 33 ] ) . unwrap ( ) ;
276+ let secp_ctx = Secp256k1 :: new ( ) ;
277+ let keys_manager = test_utils:: TestKeysInterface :: new ( & [ 42 as u8 ; 32 ] , Network :: Testnet ) ;
278+
279+ let out_of_order_payloads_path = vec ! [ ( dummy_pk, BlindedPaymentTlvs :: Receive {
280+ payment_secret: PaymentSecret ( [ 0 ; 32 ] ) ,
281+ payment_constraints: PaymentConstraints {
282+ max_cltv_expiry: 0 ,
283+ htlc_minimum_msat: 1 ,
284+ } ,
285+ } ) , ( dummy_pk, BlindedPaymentTlvs :: Forward {
286+ short_channel_id: 0 ,
287+ payment_relay: PaymentRelay {
288+ cltv_expiry_delta: 144 ,
289+ fee_proportional_millionths: 500 ,
290+ fee_base_msat: 100 ,
291+ } ,
292+ payment_constraints: PaymentConstraints {
293+ max_cltv_expiry: 0 ,
294+ htlc_minimum_msat: 100 ,
295+ } ,
296+ features: BlindedHopFeatures :: empty( ) ,
297+ } ) ] ;
298+ assert ! ( BlindedPath :: new_for_payment( & out_of_order_payloads_path[ ..] , & keys_manager, & secp_ctx) . is_err( ) ) ;
299+
300+ let multiple_recv_payloads_path = vec ! [ ( dummy_pk, BlindedPaymentTlvs :: Receive {
301+ payment_secret: PaymentSecret ( [ 0 ; 32 ] ) ,
302+ payment_constraints: PaymentConstraints {
303+ max_cltv_expiry: 0 ,
304+ htlc_minimum_msat: 1 ,
305+ } ,
306+ } ) , ( dummy_pk, BlindedPaymentTlvs :: Receive {
307+ payment_secret: PaymentSecret ( [ 0 ; 32 ] ) ,
308+ payment_constraints: PaymentConstraints {
309+ max_cltv_expiry: 0 ,
310+ htlc_minimum_msat: 1 ,
311+ } ,
312+ } ) ] ;
313+ assert ! ( BlindedPath :: new_for_payment( & multiple_recv_payloads_path[ ..] , & keys_manager, & secp_ctx) . is_err( ) ) ;
314+ }
269315}
0 commit comments