2
2
3
3
mod common;
4
4
5
- use common:: { create_service_and_client_nodes, ChannelManager } ;
5
+ use common:: create_service_and_client_nodes;
6
6
use common:: { get_lsps_message, Node } ;
7
7
8
8
use lightning_liquidity:: events:: LiquidityEvent ;
9
9
use lightning_liquidity:: lsps0:: ser:: LSPSDateTime ;
10
10
use lightning_liquidity:: lsps2:: client:: LSPS2ClientConfig ;
11
- use lightning_liquidity:: lsps2:: client:: LSPS2ClientHandler ;
12
11
use lightning_liquidity:: lsps2:: event:: LSPS2ClientEvent ;
13
12
use lightning_liquidity:: lsps2:: event:: LSPS2ServiceEvent ;
14
13
use lightning_liquidity:: lsps2:: msgs:: LSPS2RawOpeningFeeParams ;
15
- use lightning_liquidity:: lsps2:: service:: { LSPS2ServiceConfig , LSPS2ServiceHandler } ;
14
+ use lightning_liquidity:: lsps2:: service:: LSPS2ServiceConfig ;
16
15
use lightning_liquidity:: lsps2:: utils:: is_valid_opening_fee_params;
17
16
18
17
use lightning:: ln:: channelmanager:: MIN_FINAL_CLTV_EXPIRY_DELTA ;
19
18
use lightning:: ln:: peer_handler:: CustomMessageHandler ;
20
19
use lightning:: log_error;
21
20
use lightning:: routing:: router:: { RouteHint , RouteHintHop } ;
22
- use lightning:: sign:: KeysManager ;
23
21
use lightning:: util:: logger:: Logger ;
24
22
25
23
use lightning_invoice:: { Bolt11Invoice , InvoiceBuilder , RoutingFees } ;
@@ -31,21 +29,13 @@ use lightning_liquidity::LiquidityClientConfig;
31
29
use lightning_liquidity:: LiquidityServiceConfig ;
32
30
33
31
use std:: str:: FromStr ;
34
- use std:: sync:: Arc ;
35
32
use std:: time:: Duration ;
36
33
37
34
const MAX_PENDING_REQUESTS_PER_PEER : usize = 10 ;
38
35
const MAX_TOTAL_PENDING_REQUESTS : usize = 1000 ;
39
36
40
- fn setup_lsps2_test ( ) -> (
41
- & ' static LSPS2ClientHandler < Arc < KeysManager > > ,
42
- & ' static LSPS2ServiceHandler < Arc < ChannelManager > > ,
43
- bitcoin:: secp256k1:: PublicKey ,
44
- bitcoin:: secp256k1:: PublicKey ,
45
- & ' static Node ,
46
- & ' static Node ,
47
- [ u8 ; 32 ] ,
48
- ) {
37
+ fn setup_lsps2_test (
38
+ ) -> ( bitcoin:: secp256k1:: PublicKey , bitcoin:: secp256k1:: PublicKey , Node , Node , [ u8 ; 32 ] ) {
49
39
let promise_secret = [ 42 ; 32 ] ;
50
40
let signing_key = SecretKey :: from_slice ( & promise_secret) . unwrap ( ) ;
51
41
let lsps2_service_config = LSPS2ServiceConfig { promise_secret } ;
@@ -65,26 +55,11 @@ fn setup_lsps2_test() -> (
65
55
let ( service_node, client_node) =
66
56
create_service_and_client_nodes ( "default_persist_dir" , service_config, client_config) ;
67
57
68
- // Leak the nodes to extend their lifetime to 'static since this is test code
69
- let service_node = Box :: leak ( Box :: new ( service_node) ) ;
70
- let client_node = Box :: leak ( Box :: new ( client_node) ) ;
71
-
72
- let client_handler = client_node. liquidity_manager . lsps2_client_handler ( ) . unwrap ( ) ;
73
- let service_handler = service_node. liquidity_manager . lsps2_service_handler ( ) . unwrap ( ) ;
74
-
75
58
let secp = bitcoin:: secp256k1:: Secp256k1 :: new ( ) ;
76
59
let service_node_id = bitcoin:: secp256k1:: PublicKey :: from_secret_key ( & secp, & signing_key) ;
77
60
let client_node_id = client_node. channel_manager . get_our_node_id ( ) ;
78
61
79
- (
80
- client_handler,
81
- service_handler,
82
- service_node_id,
83
- client_node_id,
84
- service_node,
85
- client_node,
86
- promise_secret,
87
- )
62
+ ( service_node_id, client_node_id, service_node, client_node, promise_secret)
88
63
}
89
64
90
65
fn create_jit_invoice (
@@ -141,33 +116,29 @@ fn create_jit_invoice(
141
116
142
117
#[ test]
143
118
fn invoice_generation_flow ( ) {
144
- let (
145
- client_handler,
146
- service_handler,
147
- service_node_id,
148
- client_node_id,
149
- service_node,
150
- client_node,
151
- promise_secret,
152
- ) = setup_lsps2_test ( ) ;
119
+ let ( service_node_id, client_node_id, service_node, client_node, promise_secret) =
120
+ setup_lsps2_test ( ) ;
121
+
122
+ let client_handler = client_node. liquidity_manager . lsps2_client_handler ( ) . unwrap ( ) ;
123
+ let service_handler = service_node. liquidity_manager . lsps2_service_handler ( ) . unwrap ( ) ;
153
124
154
125
let get_info_request_id = client_handler. request_opening_params ( service_node_id, None ) ;
155
126
let get_info_request = get_lsps_message ! ( client_node, service_node_id) ;
156
127
157
128
service_node. liquidity_manager . handle_custom_message ( get_info_request, client_node_id) . unwrap ( ) ;
158
129
159
130
let get_info_event = service_node. liquidity_manager . next_event ( ) . unwrap ( ) ;
160
- match get_info_event {
161
- LiquidityEvent :: LSPS2Service ( LSPS2ServiceEvent :: GetInfo {
162
- request_id ,
163
- counterparty_node_id ,
164
- token ,
165
- } ) => {
166
- assert_eq ! ( request_id, get_info_request_id) ;
167
- assert_eq ! ( counterparty_node_id, client_node_id) ;
168
- assert_eq ! ( token, None ) ;
169
- } ,
170
- _ => panic ! ( "Unexpected event" ) ,
131
+ if let LiquidityEvent :: LSPS2Service ( LSPS2ServiceEvent :: GetInfo {
132
+ request_id ,
133
+ counterparty_node_id ,
134
+ token ,
135
+ } ) = get_info_event
136
+ {
137
+ assert_eq ! ( request_id, get_info_request_id) ;
138
+ assert_eq ! ( counterparty_node_id, client_node_id) ;
139
+ assert_eq ! ( token, None ) ;
140
+ } else {
141
+ panic ! ( "Unexpected event" ) ;
171
142
}
172
143
173
144
let raw_opening_params = LSPS2RawOpeningFeeParams {
@@ -219,19 +190,19 @@ fn invoice_generation_flow() {
219
190
service_node. liquidity_manager . handle_custom_message ( buy_request, client_node_id) . unwrap ( ) ;
220
191
221
192
let buy_event = service_node. liquidity_manager . next_event ( ) . unwrap ( ) ;
222
- match buy_event {
223
- LiquidityEvent :: LSPS2Service ( LSPS2ServiceEvent :: BuyRequest {
224
- request_id ,
225
- counterparty_node_id ,
226
- opening_fee_params : ofp ,
227
- payment_size_msat : psm ,
228
- } ) => {
229
- assert_eq ! ( request_id, buy_request_id) ;
230
- assert_eq ! ( counterparty_node_id, client_node_id) ;
231
- assert_eq ! ( opening_fee_params, ofp) ;
232
- assert_eq ! ( payment_size_msat, psm) ;
233
- } ,
234
- _ => panic ! ( "Unexpected event" ) ,
193
+ if let LiquidityEvent :: LSPS2Service ( LSPS2ServiceEvent :: BuyRequest {
194
+ request_id ,
195
+ counterparty_node_id ,
196
+ opening_fee_params : ofp ,
197
+ payment_size_msat : psm ,
198
+ } ) = buy_event
199
+ {
200
+ assert_eq ! ( request_id, buy_request_id) ;
201
+ assert_eq ! ( counterparty_node_id, client_node_id) ;
202
+ assert_eq ! ( opening_fee_params, ofp) ;
203
+ assert_eq ! ( payment_size_msat, psm) ;
204
+ } else {
205
+ panic ! ( "Unexpected event" ) ;
235
206
}
236
207
237
208
let user_channel_id = 42 ;
@@ -254,22 +225,22 @@ fn invoice_generation_flow() {
254
225
client_node. liquidity_manager . handle_custom_message ( buy_response, service_node_id) . unwrap ( ) ;
255
226
256
227
let invoice_params_event = client_node. liquidity_manager . next_event ( ) . unwrap ( ) ;
257
- match invoice_params_event {
258
- LiquidityEvent :: LSPS2Client ( LSPS2ClientEvent :: InvoiceParametersReady {
259
- request_id ,
260
- counterparty_node_id ,
261
- intercept_scid : iscid ,
262
- cltv_expiry_delta : ced ,
263
- payment_size_msat : psm ,
264
- } ) => {
265
- assert_eq ! ( request_id, buy_request_id) ;
266
- assert_eq ! ( counterparty_node_id, service_node_id) ;
267
- assert_eq ! ( intercept_scid, iscid) ;
268
- assert_eq ! ( cltv_expiry_delta, ced) ;
269
- assert_eq ! ( payment_size_msat, psm) ;
270
- } ,
271
- _ => panic ! ( "Unexpected event" ) ,
272
- } ;
228
+ if let LiquidityEvent :: LSPS2Client ( LSPS2ClientEvent :: InvoiceParametersReady {
229
+ request_id ,
230
+ counterparty_node_id ,
231
+ intercept_scid : iscid ,
232
+ cltv_expiry_delta : ced ,
233
+ payment_size_msat : psm ,
234
+ } ) = invoice_params_event
235
+ {
236
+ assert_eq ! ( request_id, buy_request_id) ;
237
+ assert_eq ! ( counterparty_node_id, service_node_id) ;
238
+ assert_eq ! ( intercept_scid, iscid) ;
239
+ assert_eq ! ( cltv_expiry_delta, ced) ;
240
+ assert_eq ! ( payment_size_msat, psm) ;
241
+ } else {
242
+ panic ! ( "Unexpected event" ) ;
243
+ }
273
244
274
245
let description = "asdf" ;
275
246
let expiry_secs = 3600 ;
@@ -287,8 +258,8 @@ fn invoice_generation_flow() {
287
258
288
259
#[ test]
289
260
fn max_pending_requests_per_peer_rejected ( ) {
290
- let ( client_handler , _ , service_node_id, client_node_id, service_node, client_node, _) =
291
- setup_lsps2_test ( ) ;
261
+ let ( service_node_id, client_node_id, service_node, client_node, _) = setup_lsps2_test ( ) ;
262
+ let client_handler = client_node . liquidity_manager . lsps2_client_handler ( ) . unwrap ( ) ;
292
263
293
264
for _ in 0 ..MAX_PENDING_REQUESTS_PER_PEER {
294
265
let _ = client_handler. request_opening_params ( service_node_id, None ) ;
@@ -333,8 +304,10 @@ fn max_pending_requests_per_peer_rejected() {
333
304
334
305
#[ test]
335
306
fn max_total_requests_buy_rejected ( ) {
336
- let ( client_handler, service_handler, service_node_id, _, service_node, client_node, _) =
337
- setup_lsps2_test ( ) ;
307
+ let ( service_node_id, _, service_node, client_node, _) = setup_lsps2_test ( ) ;
308
+
309
+ let client_handler = client_node. liquidity_manager . lsps2_client_handler ( ) . unwrap ( ) ;
310
+ let service_handler = service_node. liquidity_manager . lsps2_service_handler ( ) . unwrap ( ) ;
338
311
let secp = Secp256k1 :: new ( ) ;
339
312
340
313
let special_sk_bytes = [ 99u8 ; 32 ] ;
@@ -456,15 +429,11 @@ fn max_total_requests_buy_rejected() {
456
429
457
430
#[ test]
458
431
fn invalid_token_flow ( ) {
459
- let (
460
- client_handler,
461
- service_handler,
462
- service_node_id,
463
- client_node_id,
464
- service_node,
465
- client_node,
466
- _promise_secret,
467
- ) = setup_lsps2_test ( ) ;
432
+ let ( service_node_id, client_node_id, service_node, client_node, _promise_secret) =
433
+ setup_lsps2_test ( ) ;
434
+
435
+ let client_handler = client_node. liquidity_manager . lsps2_client_handler ( ) . unwrap ( ) ;
436
+ let service_handler = service_node. liquidity_manager . lsps2_service_handler ( ) . unwrap ( ) ;
468
437
469
438
let token = Some ( "invalid_token" . to_string ( ) ) ;
470
439
let get_info_request_id = client_handler. request_opening_params ( service_node_id, token) ;
@@ -473,40 +442,40 @@ fn invalid_token_flow() {
473
442
service_node. liquidity_manager . handle_custom_message ( get_info_request, client_node_id) . unwrap ( ) ;
474
443
475
444
let get_info_event = service_node. liquidity_manager . next_event ( ) . unwrap ( ) ;
476
- match get_info_event {
477
- LiquidityEvent :: LSPS2Service ( LSPS2ServiceEvent :: GetInfo {
478
- request_id ,
479
- counterparty_node_id ,
480
- token ,
481
- } ) => {
482
- assert_eq ! ( request_id, get_info_request_id) ;
483
- assert_eq ! ( counterparty_node_id, client_node_id) ;
484
- assert_eq ! ( token, Some ( "invalid_token" . to_string( ) ) ) ;
485
-
486
- // Service rejects the token as invalid
487
- service_handler. invalid_token_provided ( & client_node_id, request_id. clone ( ) ) . unwrap ( ) ;
488
-
489
- // Attempt to respond to the same request again which should fail
490
- // because the request has been removed from pending_requests
491
- let raw_opening_params = LSPS2RawOpeningFeeParams {
492
- min_fee_msat : 100 ,
493
- proportional : 21 ,
494
- valid_until : LSPSDateTime :: from_str ( "2035-05-20T08:30:45Z" ) . unwrap ( ) ,
495
- min_lifetime : 144 ,
496
- max_client_to_self_delay : 128 ,
497
- min_payment_size_msat : 1 ,
498
- max_payment_size_msat : 100_000_000 ,
499
- } ;
500
-
501
- let result = service_handler. opening_fee_params_generated (
502
- & client_node_id,
503
- request_id. clone ( ) ,
504
- vec ! [ raw_opening_params] ,
505
- ) ;
445
+ if let LiquidityEvent :: LSPS2Service ( LSPS2ServiceEvent :: GetInfo {
446
+ request_id ,
447
+ counterparty_node_id ,
448
+ token ,
449
+ } ) = get_info_event
450
+ {
451
+ assert_eq ! ( request_id, get_info_request_id) ;
452
+ assert_eq ! ( counterparty_node_id, client_node_id) ;
453
+ assert_eq ! ( token, Some ( "invalid_token" . to_string( ) ) ) ;
454
+
455
+ // Service rejects the token as invalid
456
+ service_handler. invalid_token_provided ( & client_node_id, request_id. clone ( ) ) . unwrap ( ) ;
457
+
458
+ // Attempt to respond to the same request again which should fail
459
+ // because the request has been removed from pending_requests
460
+ let raw_opening_params = LSPS2RawOpeningFeeParams {
461
+ min_fee_msat : 100 ,
462
+ proportional : 21 ,
463
+ valid_until : LSPSDateTime :: from_str ( "2035-05-20T08:30:45Z" ) . unwrap ( ) ,
464
+ min_lifetime : 144 ,
465
+ max_client_to_self_delay : 128 ,
466
+ min_payment_size_msat : 1 ,
467
+ max_payment_size_msat : 100_000_000 ,
468
+ } ;
469
+
470
+ let result = service_handler. opening_fee_params_generated (
471
+ & client_node_id,
472
+ request_id. clone ( ) ,
473
+ vec ! [ raw_opening_params] ,
474
+ ) ;
506
475
507
- assert ! ( result. is_err( ) , "Request should have been removed from pending_requests" ) ;
508
- } ,
509
- _ => panic ! ( "Unexpected event" ) ,
476
+ assert ! ( result. is_err( ) , "Request should have been removed from pending_requests" ) ;
477
+ } else {
478
+ panic ! ( "Unexpected event" ) ;
510
479
}
511
480
512
481
let get_info_error_response = get_lsps_message ! ( service_node, client_node_id) ;
@@ -517,16 +486,16 @@ fn invalid_token_flow() {
517
486
. unwrap_err ( ) ;
518
487
519
488
let error_event = client_node. liquidity_manager . next_event ( ) . unwrap ( ) ;
520
- match error_event {
521
- LiquidityEvent :: LSPS2Client ( LSPS2ClientEvent :: GetInfoFailed {
522
- request_id ,
523
- counterparty_node_id ,
524
- error ,
525
- } ) => {
526
- assert_eq ! ( request_id, get_info_request_id) ;
527
- assert_eq ! ( counterparty_node_id, service_node_id) ;
528
- assert_eq ! ( error. code, 200 ) ; // LSPS2_GET_INFO_REQUEST_UNRECOGNIZED_OR_STALE_TOKEN_ERROR_CODE
529
- } ,
530
- _ => panic ! ( "Expected LSPS2ClientEvent::GetInfoFailed event" ) ,
489
+ if let LiquidityEvent :: LSPS2Client ( LSPS2ClientEvent :: GetInfoFailed {
490
+ request_id ,
491
+ counterparty_node_id ,
492
+ error ,
493
+ } ) = error_event
494
+ {
495
+ assert_eq ! ( request_id, get_info_request_id) ;
496
+ assert_eq ! ( counterparty_node_id, service_node_id) ;
497
+ assert_eq ! ( error. code, 200 ) ; // LSPS2_GET_INFO_REQUEST_UNRECOGNIZED_OR_STALE_TOKEN_ERROR_CODE
498
+ } else {
499
+ panic ! ( "Expected LSPS2ClientEvent::GetInfoFailed event" ) ;
531
500
}
532
501
}
0 commit comments