Skip to content

Commit e80ef0d

Browse files
fixup: refactor tests to match reviewed PR #3712. Also improve readability and reduce indentation in some places
1 parent 55f4a8a commit e80ef0d

File tree

2 files changed

+106
-137
lines changed

2 files changed

+106
-137
lines changed

lightning-liquidity/tests/common/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ type LockingWrapper<T> = lightning::routing::scoring::MultiThreadedLockableScore
6767
#[cfg(not(c_bindings))]
6868
type LockingWrapper<T> = std::sync::Mutex<T>;
6969

70-
pub(crate) type ChannelManager = channelmanager::ChannelManager<
70+
type ChannelManager = channelmanager::ChannelManager<
7171
Arc<ChainMonitor>,
7272
Arc<test_utils::TestBroadcaster>,
7373
Arc<KeysManager>,

lightning-liquidity/tests/lsps2_integration_tests.rs

Lines changed: 105 additions & 136 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,22 @@
22

33
mod common;
44

5-
use common::{create_service_and_client_nodes, ChannelManager};
5+
use common::create_service_and_client_nodes;
66
use common::{get_lsps_message, Node};
77

88
use lightning_liquidity::events::LiquidityEvent;
99
use lightning_liquidity::lsps0::ser::LSPSDateTime;
1010
use lightning_liquidity::lsps2::client::LSPS2ClientConfig;
11-
use lightning_liquidity::lsps2::client::LSPS2ClientHandler;
1211
use lightning_liquidity::lsps2::event::LSPS2ClientEvent;
1312
use lightning_liquidity::lsps2::event::LSPS2ServiceEvent;
1413
use lightning_liquidity::lsps2::msgs::LSPS2RawOpeningFeeParams;
15-
use lightning_liquidity::lsps2::service::{LSPS2ServiceConfig, LSPS2ServiceHandler};
14+
use lightning_liquidity::lsps2::service::LSPS2ServiceConfig;
1615
use lightning_liquidity::lsps2::utils::is_valid_opening_fee_params;
1716

1817
use lightning::ln::channelmanager::MIN_FINAL_CLTV_EXPIRY_DELTA;
1918
use lightning::ln::peer_handler::CustomMessageHandler;
2019
use lightning::log_error;
2120
use lightning::routing::router::{RouteHint, RouteHintHop};
22-
use lightning::sign::KeysManager;
2321
use lightning::util::logger::Logger;
2422

2523
use lightning_invoice::{Bolt11Invoice, InvoiceBuilder, RoutingFees};
@@ -31,21 +29,13 @@ use lightning_liquidity::LiquidityClientConfig;
3129
use lightning_liquidity::LiquidityServiceConfig;
3230

3331
use std::str::FromStr;
34-
use std::sync::Arc;
3532
use std::time::Duration;
3633

3734
const MAX_PENDING_REQUESTS_PER_PEER: usize = 10;
3835
const 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

9065
fn create_jit_invoice(
@@ -141,33 +116,29 @@ fn create_jit_invoice(
141116

142117
#[test]
143118
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();
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]
289260
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();
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]
335306
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();
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]
458431
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();
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

Comments
 (0)