22
33mod common;
44
5- use common:: { create_service_and_client_nodes, ChannelManager } ;
5+ use common:: create_service_and_client_nodes;
66use common:: { get_lsps_message, Node } ;
77
88use lightning_liquidity:: events:: LiquidityEvent ;
99use lightning_liquidity:: lsps0:: ser:: LSPSDateTime ;
1010use lightning_liquidity:: lsps2:: client:: LSPS2ClientConfig ;
11- use lightning_liquidity:: lsps2:: client:: LSPS2ClientHandler ;
1211use lightning_liquidity:: lsps2:: event:: LSPS2ClientEvent ;
1312use lightning_liquidity:: lsps2:: event:: LSPS2ServiceEvent ;
1413use lightning_liquidity:: lsps2:: msgs:: LSPS2RawOpeningFeeParams ;
15- use lightning_liquidity:: lsps2:: service:: { LSPS2ServiceConfig , LSPS2ServiceHandler } ;
14+ use lightning_liquidity:: lsps2:: service:: LSPS2ServiceConfig ;
1615use lightning_liquidity:: lsps2:: utils:: is_valid_opening_fee_params;
1716
1817use lightning:: ln:: channelmanager:: MIN_FINAL_CLTV_EXPIRY_DELTA ;
1918use lightning:: ln:: peer_handler:: CustomMessageHandler ;
2019use lightning:: log_error;
2120use lightning:: routing:: router:: { RouteHint , RouteHintHop } ;
22- use lightning:: sign:: KeysManager ;
2321use lightning:: util:: logger:: Logger ;
2422
2523use lightning_invoice:: { Bolt11Invoice , InvoiceBuilder , RoutingFees } ;
@@ -31,21 +29,13 @@ use lightning_liquidity::LiquidityClientConfig;
3129use lightning_liquidity:: LiquidityServiceConfig ;
3230
3331use std:: str:: FromStr ;
34- use std:: sync:: Arc ;
3532use std:: time:: Duration ;
3633
3734const MAX_PENDING_REQUESTS_PER_PEER : usize = 10 ;
3835const MAX_TOTAL_PENDING_REQUESTS : usize = 1000 ;
3936
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 ] ) {
4939 let promise_secret = [ 42 ; 32 ] ;
5040 let signing_key = SecretKey :: from_slice ( & promise_secret) . unwrap ( ) ;
5141 let lsps2_service_config = LSPS2ServiceConfig { promise_secret } ;
@@ -65,26 +55,11 @@ fn setup_lsps2_test() -> (
6555 let ( service_node, client_node) =
6656 create_service_and_client_nodes ( "default_persist_dir" , service_config, client_config) ;
6757
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-
7558 let secp = bitcoin:: secp256k1:: Secp256k1 :: new ( ) ;
7659 let service_node_id = bitcoin:: secp256k1:: PublicKey :: from_secret_key ( & secp, & signing_key) ;
7760 let client_node_id = client_node. channel_manager . get_our_node_id ( ) ;
7861
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)
8863}
8964
9065fn create_jit_invoice (
@@ -141,33 +116,29 @@ fn create_jit_invoice(
141116
142117#[ test]
143118fn 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 ( ) ;
153124
154125 let get_info_request_id = client_handler. request_opening_params ( service_node_id, None ) ;
155126 let get_info_request = get_lsps_message ! ( client_node, service_node_id) ;
156127
157128 service_node. liquidity_manager . handle_custom_message ( get_info_request, client_node_id) . unwrap ( ) ;
158129
159130 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" ) ;
171142 }
172143
173144 let raw_opening_params = LSPS2RawOpeningFeeParams {
@@ -219,19 +190,19 @@ fn invoice_generation_flow() {
219190 service_node. liquidity_manager . handle_custom_message ( buy_request, client_node_id) . unwrap ( ) ;
220191
221192 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" ) ;
235206 }
236207
237208 let user_channel_id = 42 ;
@@ -254,22 +225,22 @@ fn invoice_generation_flow() {
254225 client_node. liquidity_manager . handle_custom_message ( buy_response, service_node_id) . unwrap ( ) ;
255226
256227 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+ }
273244
274245 let description = "asdf" ;
275246 let expiry_secs = 3600 ;
@@ -287,8 +258,8 @@ fn invoice_generation_flow() {
287258
288259#[ test]
289260fn 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 ( ) ;
292263
293264 for _ in 0 ..MAX_PENDING_REQUESTS_PER_PEER {
294265 let _ = client_handler. request_opening_params ( service_node_id, None ) ;
@@ -333,8 +304,10 @@ fn max_pending_requests_per_peer_rejected() {
333304
334305#[ test]
335306fn 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 ( ) ;
338311 let secp = Secp256k1 :: new ( ) ;
339312
340313 let special_sk_bytes = [ 99u8 ; 32 ] ;
@@ -456,15 +429,11 @@ fn max_total_requests_buy_rejected() {
456429
457430#[ test]
458431fn 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 ( ) ;
468437
469438 let token = Some ( "invalid_token" . to_string ( ) ) ;
470439 let get_info_request_id = client_handler. request_opening_params ( service_node_id, token) ;
@@ -473,40 +442,40 @@ fn invalid_token_flow() {
473442 service_node. liquidity_manager . handle_custom_message ( get_info_request, client_node_id) . unwrap ( ) ;
474443
475444 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+ ) ;
506475
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" ) ;
510479 }
511480
512481 let get_info_error_response = get_lsps_message ! ( service_node, client_node_id) ;
@@ -517,16 +486,16 @@ fn invalid_token_flow() {
517486 . unwrap_err ( ) ;
518487
519488 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" ) ;
531500 }
532501}
0 commit comments