@@ -566,8 +566,9 @@ mod tests {
566
566
let payment_preimage = PaymentPreimage ( [ 1 ; 32 ] ) ;
567
567
let invoice = invoice ( payment_preimage) ;
568
568
let payment_hash = PaymentHash ( invoice. payment_hash ( ) . clone ( ) . into_inner ( ) ) ;
569
+ let final_value_msat = invoice. amount_milli_satoshis ( ) . unwrap ( ) ;
569
570
570
- let payer = TestPayer :: new ( ) ;
571
+ let payer = TestPayer :: new ( ) . expect_send ( Amount :: ForInvoice ( final_value_msat ) ) ;
571
572
let router = TestRouter { } ;
572
573
let scorer = RefCell :: new ( TestScorer :: new ( ) ) ;
573
574
let logger = TestLogger :: new ( ) ;
@@ -595,8 +596,8 @@ mod tests {
595
596
let final_value_msat = invoice. amount_milli_satoshis ( ) . unwrap ( ) ;
596
597
597
598
let payer = TestPayer :: new ( )
598
- . expect_value_msat ( final_value_msat)
599
- . expect_value_msat ( final_value_msat / 2 ) ;
599
+ . expect_send ( Amount :: ForInvoice ( final_value_msat) )
600
+ . expect_send ( Amount :: OnRetry ( final_value_msat / 2 ) ) ;
600
601
let router = TestRouter { } ;
601
602
let scorer = RefCell :: new ( TestScorer :: new ( ) ) ;
602
603
let logger = TestLogger :: new ( ) ;
@@ -637,7 +638,9 @@ mod tests {
637
638
let payment_hash = PaymentHash ( invoice. payment_hash ( ) . clone ( ) . into_inner ( ) ) ;
638
639
let final_value_msat = invoice. amount_milli_satoshis ( ) . unwrap ( ) ;
639
640
640
- let payer = TestPayer :: new ( ) ;
641
+ let payer = TestPayer :: new ( )
642
+ . expect_send ( Amount :: OnRetry ( final_value_msat / 2 ) )
643
+ . expect_send ( Amount :: OnRetry ( final_value_msat / 2 ) ) ;
641
644
let router = TestRouter { } ;
642
645
let scorer = RefCell :: new ( TestScorer :: new ( ) ) ;
643
646
let logger = TestLogger :: new ( ) ;
@@ -680,9 +683,9 @@ mod tests {
680
683
let final_value_msat = invoice. amount_milli_satoshis ( ) . unwrap ( ) ;
681
684
682
685
let payer = TestPayer :: new ( )
683
- . expect_value_msat ( final_value_msat)
684
- . expect_value_msat ( final_value_msat / 2 )
685
- . expect_value_msat ( final_value_msat / 2 ) ;
686
+ . expect_send ( Amount :: ForInvoice ( final_value_msat) )
687
+ . expect_send ( Amount :: OnRetry ( final_value_msat / 2 ) )
688
+ . expect_send ( Amount :: OnRetry ( final_value_msat / 2 ) ) ;
686
689
let router = TestRouter { } ;
687
690
let scorer = RefCell :: new ( TestScorer :: new ( ) ) ;
688
691
let logger = TestLogger :: new ( ) ;
@@ -732,15 +735,17 @@ mod tests {
732
735
let event_handled = core:: cell:: RefCell :: new ( false ) ;
733
736
let event_handler = |_: & _ | { * event_handled. borrow_mut ( ) = true ; } ;
734
737
735
- let payer = TestPayer :: new ( ) ;
738
+ let payment_preimage = PaymentPreimage ( [ 1 ; 32 ] ) ;
739
+ let invoice = invoice ( payment_preimage) ;
740
+ let final_value_msat = invoice. amount_milli_satoshis ( ) . unwrap ( ) ;
741
+
742
+ let payer = TestPayer :: new ( ) . expect_send ( Amount :: ForInvoice ( final_value_msat) ) ;
736
743
let router = TestRouter { } ;
737
744
let scorer = RefCell :: new ( TestScorer :: new ( ) ) ;
738
745
let logger = TestLogger :: new ( ) ;
739
746
let invoice_payer =
740
747
InvoicePayer :: new ( & payer, router, & scorer, & logger, event_handler, RetryAttempts ( 2 ) ) ;
741
748
742
- let payment_preimage = PaymentPreimage ( [ 1 ; 32 ] ) ;
743
- let invoice = invoice ( payment_preimage) ;
744
749
let payment_id = Some ( invoice_payer. pay_invoice ( & invoice) . unwrap ( ) ) ;
745
750
assert_eq ! ( * payer. attempts. borrow( ) , 1 ) ;
746
751
@@ -783,15 +788,17 @@ mod tests {
783
788
let event_handled = core:: cell:: RefCell :: new ( false ) ;
784
789
let event_handler = |_: & _ | { * event_handled. borrow_mut ( ) = true ; } ;
785
790
786
- let payer = TestPayer :: new ( ) ;
791
+ let payment_preimage = PaymentPreimage ( [ 1 ; 32 ] ) ;
792
+ let invoice = invoice ( payment_preimage) ;
793
+ let final_value_msat = invoice. amount_milli_satoshis ( ) . unwrap ( ) ;
794
+
795
+ let payer = TestPayer :: new ( ) . expect_send ( Amount :: ForInvoice ( final_value_msat) ) ;
787
796
let router = TestRouter { } ;
788
797
let scorer = RefCell :: new ( TestScorer :: new ( ) ) ;
789
798
let logger = TestLogger :: new ( ) ;
790
799
let invoice_payer =
791
800
InvoicePayer :: new ( & payer, router, & scorer, & logger, event_handler, RetryAttempts ( 2 ) ) ;
792
801
793
- let payment_preimage = PaymentPreimage ( [ 1 ; 32 ] ) ;
794
- let invoice = invoice ( payment_preimage) ;
795
802
let payment_id = Some ( invoice_payer. pay_invoice ( & invoice) . unwrap ( ) ) ;
796
803
assert_eq ! ( * payer. attempts. borrow( ) , 1 ) ;
797
804
@@ -825,7 +832,8 @@ mod tests {
825
832
826
833
let payer = TestPayer :: new ( )
827
834
. fails_on_attempt ( 2 )
828
- . expect_value_msat ( final_value_msat) ;
835
+ . expect_send ( Amount :: ForInvoice ( final_value_msat) )
836
+ . expect_send ( Amount :: OnRetry ( final_value_msat / 2 ) ) ;
829
837
let router = TestRouter { } ;
830
838
let scorer = RefCell :: new ( TestScorer :: new ( ) ) ;
831
839
let logger = TestLogger :: new ( ) ;
@@ -855,15 +863,17 @@ mod tests {
855
863
let event_handled = core:: cell:: RefCell :: new ( false ) ;
856
864
let event_handler = |_: & _ | { * event_handled. borrow_mut ( ) = true ; } ;
857
865
858
- let payer = TestPayer :: new ( ) ;
866
+ let payment_preimage = PaymentPreimage ( [ 1 ; 32 ] ) ;
867
+ let invoice = invoice ( payment_preimage) ;
868
+ let final_value_msat = invoice. amount_milli_satoshis ( ) . unwrap ( ) ;
869
+
870
+ let payer = TestPayer :: new ( ) . expect_send ( Amount :: ForInvoice ( final_value_msat) ) ;
859
871
let router = TestRouter { } ;
860
872
let scorer = RefCell :: new ( TestScorer :: new ( ) ) ;
861
873
let logger = TestLogger :: new ( ) ;
862
874
let invoice_payer =
863
875
InvoicePayer :: new ( & payer, router, & scorer, & logger, event_handler, RetryAttempts ( 2 ) ) ;
864
876
865
- let payment_preimage = PaymentPreimage ( [ 1 ; 32 ] ) ;
866
- let invoice = invoice ( payment_preimage) ;
867
877
let payment_id = Some ( invoice_payer. pay_invoice ( & invoice) . unwrap ( ) ) ;
868
878
assert_eq ! ( * payer. attempts. borrow( ) , 1 ) ;
869
879
@@ -887,15 +897,19 @@ mod tests {
887
897
let event_handled = core:: cell:: RefCell :: new ( false ) ;
888
898
let event_handler = |_: & _ | { * event_handled. borrow_mut ( ) = true ; } ;
889
899
890
- let payer = TestPayer :: new ( ) ;
900
+ let payment_preimage = PaymentPreimage ( [ 1 ; 32 ] ) ;
901
+ let invoice = invoice ( payment_preimage) ;
902
+ let final_value_msat = invoice. amount_milli_satoshis ( ) . unwrap ( ) ;
903
+
904
+ let payer = TestPayer :: new ( )
905
+ . expect_send ( Amount :: ForInvoice ( final_value_msat) )
906
+ . expect_send ( Amount :: ForInvoice ( final_value_msat) ) ;
891
907
let router = TestRouter { } ;
892
908
let scorer = RefCell :: new ( TestScorer :: new ( ) ) ;
893
909
let logger = TestLogger :: new ( ) ;
894
910
let invoice_payer =
895
911
InvoicePayer :: new ( & payer, router, & scorer, & logger, event_handler, RetryAttempts ( 0 ) ) ;
896
912
897
- let payment_preimage = PaymentPreimage ( [ 1 ; 32 ] ) ;
898
- let invoice = invoice ( payment_preimage) ;
899
913
let payment_id = Some ( invoice_payer. pay_invoice ( & invoice) . unwrap ( ) ) ;
900
914
901
915
// Cannot repay an invoice pending payment.
@@ -946,15 +960,19 @@ mod tests {
946
960
947
961
#[ test]
948
962
fn fails_paying_invoice_with_sending_errors ( ) {
949
- let payer = TestPayer :: new ( ) . fails_on_attempt ( 1 ) ;
963
+ let payment_preimage = PaymentPreimage ( [ 1 ; 32 ] ) ;
964
+ let invoice = invoice ( payment_preimage) ;
965
+ let final_value_msat = invoice. amount_milli_satoshis ( ) . unwrap ( ) ;
966
+
967
+ let payer = TestPayer :: new ( )
968
+ . fails_on_attempt ( 1 )
969
+ . expect_send ( Amount :: ForInvoice ( final_value_msat) ) ;
950
970
let router = TestRouter { } ;
951
971
let scorer = RefCell :: new ( TestScorer :: new ( ) ) ;
952
972
let logger = TestLogger :: new ( ) ;
953
973
let invoice_payer =
954
974
InvoicePayer :: new ( & payer, router, & scorer, & logger, |_: & _ | { } , RetryAttempts ( 0 ) ) ;
955
975
956
- let payment_preimage = PaymentPreimage ( [ 1 ; 32 ] ) ;
957
- let invoice = invoice ( payment_preimage) ;
958
976
match invoice_payer. pay_invoice ( & invoice) {
959
977
Err ( PaymentError :: Sending ( _) ) => { } ,
960
978
Err ( _) => panic ! ( "unexpected error" ) ,
@@ -972,7 +990,7 @@ mod tests {
972
990
let payment_hash = PaymentHash ( invoice. payment_hash ( ) . clone ( ) . into_inner ( ) ) ;
973
991
let final_value_msat = 100 ;
974
992
975
- let payer = TestPayer :: new ( ) . expect_value_msat ( final_value_msat) ;
993
+ let payer = TestPayer :: new ( ) . expect_send ( Amount :: ForInvoice ( final_value_msat) ) ;
976
994
let router = TestRouter { } ;
977
995
let scorer = RefCell :: new ( TestScorer :: new ( ) ) ;
978
996
let logger = TestLogger :: new ( ) ;
@@ -1026,7 +1044,7 @@ mod tests {
1026
1044
1027
1045
let payer = TestPayer :: new ( )
1028
1046
. expect_send ( Amount :: Spontaneous ( final_value_msat) )
1029
- . expect_send ( Amount :: ForInvoiceOrRetry ( final_value_msat) ) ;
1047
+ . expect_send ( Amount :: OnRetry ( final_value_msat) ) ;
1030
1048
let router = TestRouter { } ;
1031
1049
let scorer = RefCell :: new ( TestScorer :: new ( ) ) ;
1032
1050
let logger = TestLogger :: new ( ) ;
@@ -1077,7 +1095,9 @@ mod tests {
1077
1095
let short_channel_id = Some ( path[ 0 ] . short_channel_id ) ;
1078
1096
1079
1097
// Expect that scorer is given short_channel_id upon handling the event.
1080
- let payer = TestPayer :: new ( ) ;
1098
+ let payer = TestPayer :: new ( )
1099
+ . expect_send ( Amount :: ForInvoice ( final_value_msat) )
1100
+ . expect_send ( Amount :: OnRetry ( final_value_msat / 2 ) ) ;
1081
1101
let router = TestRouter { } ;
1082
1102
let scorer = RefCell :: new ( TestScorer :: new ( ) . expect_channel_failure ( short_channel_id. unwrap ( ) ) ) ;
1083
1103
let logger = TestLogger :: new ( ) ;
@@ -1218,8 +1238,9 @@ mod tests {
1218
1238
1219
1239
#[ derive( Clone , Debug , PartialEq , Eq ) ]
1220
1240
enum Amount {
1221
- ForInvoiceOrRetry ( u64 ) ,
1241
+ ForInvoice ( u64 ) ,
1222
1242
Spontaneous ( u64 ) ,
1243
+ OnRetry ( u64 ) ,
1223
1244
}
1224
1245
1225
1246
impl TestPayer {
@@ -1231,11 +1252,6 @@ mod tests {
1231
1252
}
1232
1253
}
1233
1254
1234
- fn expect_value_msat ( self , value_msat : u64 ) -> Self {
1235
- self . expectations . borrow_mut ( ) . push_back ( Amount :: ForInvoiceOrRetry ( value_msat) ) ;
1236
- self
1237
- }
1238
-
1239
1255
fn expect_send ( self , value_msat : Amount ) -> Self {
1240
1256
self . expectations . borrow_mut ( ) . push_back ( value_msat) ;
1241
1257
self
@@ -1249,13 +1265,13 @@ mod tests {
1249
1265
}
1250
1266
}
1251
1267
1252
- fn check_attempts ( & self ) -> bool {
1268
+ fn check_attempts ( & self ) -> Result < PaymentId , PaymentSendFailure > {
1253
1269
let mut attempts = self . attempts . borrow_mut ( ) ;
1254
1270
* attempts += 1 ;
1255
1271
match self . failing_on_attempt {
1256
- None => true ,
1257
- Some ( attempt) if attempt != * attempts => true ,
1258
- Some ( _) => false ,
1272
+ None => Ok ( PaymentId ( [ 1 ; 32 ] ) ) ,
1273
+ Some ( attempt) if attempt != * attempts => Ok ( PaymentId ( [ 1 ; 32 ] ) ) ,
1274
+ Some ( _) => Err ( PaymentSendFailure :: ParameterError ( APIError :: MonitorUpdateFailed ) ) ,
1259
1275
}
1260
1276
}
1261
1277
@@ -1290,41 +1306,25 @@ mod tests {
1290
1306
}
1291
1307
1292
1308
fn send_payment (
1293
- & self ,
1294
- route : & Route ,
1295
- _payment_hash : PaymentHash ,
1309
+ & self , route : & Route , _payment_hash : PaymentHash ,
1296
1310
_payment_secret : & Option < PaymentSecret >
1297
1311
) -> Result < PaymentId , PaymentSendFailure > {
1298
- if self . check_attempts ( ) {
1299
- self . check_value_msats ( Amount :: ForInvoiceOrRetry ( route. get_total_amount ( ) ) ) ;
1300
- Ok ( PaymentId ( [ 1 ; 32 ] ) )
1301
- } else {
1302
- Err ( PaymentSendFailure :: ParameterError ( APIError :: MonitorUpdateFailed ) )
1303
- }
1312
+ self . check_value_msats ( Amount :: ForInvoice ( route. get_total_amount ( ) ) ) ;
1313
+ self . check_attempts ( )
1304
1314
}
1305
1315
1306
1316
fn send_spontaneous_payment (
1307
- & self ,
1308
- route : & Route ,
1309
- _payment_preimage : PaymentPreimage ,
1317
+ & self , route : & Route , _payment_preimage : PaymentPreimage ,
1310
1318
) -> Result < PaymentId , PaymentSendFailure > {
1311
- if self . check_attempts ( ) {
1312
- self . check_value_msats ( Amount :: Spontaneous ( route. get_total_amount ( ) ) ) ;
1313
- Ok ( PaymentId ( [ 1 ; 32 ] ) )
1314
- } else {
1315
- Err ( PaymentSendFailure :: ParameterError ( APIError :: MonitorUpdateFailed ) )
1316
- }
1319
+ self . check_value_msats ( Amount :: Spontaneous ( route. get_total_amount ( ) ) ) ;
1320
+ self . check_attempts ( )
1317
1321
}
1318
1322
1319
1323
fn retry_payment (
1320
1324
& self , route : & Route , _payment_id : PaymentId
1321
1325
) -> Result < ( ) , PaymentSendFailure > {
1322
- if self . check_attempts ( ) {
1323
- self . check_value_msats ( Amount :: ForInvoiceOrRetry ( route. get_total_amount ( ) ) ) ;
1324
- Ok ( ( ) )
1325
- } else {
1326
- Err ( PaymentSendFailure :: ParameterError ( APIError :: MonitorUpdateFailed ) )
1327
- }
1326
+ self . check_value_msats ( Amount :: OnRetry ( route. get_total_amount ( ) ) ) ;
1327
+ self . check_attempts ( ) . map ( |_| ( ) )
1328
1328
}
1329
1329
}
1330
1330
0 commit comments