Skip to content

Commit 56d8f26

Browse files
Add tests for LSPS5 client and service. Also tests for checking the correctness of the signing logic
1 parent 22a5941 commit 56d8f26

File tree

4 files changed

+1507
-7
lines changed

4 files changed

+1507
-7
lines changed

lightning-liquidity/tests/common/mod.rs

+66-5
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#![allow(unused_imports)]
55
#![allow(unused_macros)]
66

7+
use bitcoin::secp256k1::SecretKey;
78
use lightning::chain::Filter;
89
use lightning::sign::EntropySource;
910

@@ -34,6 +35,8 @@ use lightning::util::persist::{
3435
SCORER_PERSISTENCE_SECONDARY_NAMESPACE,
3536
};
3637
use lightning::util::test_utils;
38+
use lightning_liquidity::lsps5::client::{LSPS5ClientConfig, LSPS5ClientHandler};
39+
use lightning_liquidity::lsps5::service::{LSPS5ServiceConfig, LSPS5ServiceHandler, TimeProvider};
3740
use lightning_liquidity::{LiquidityClientConfig, LiquidityManager, LiquidityServiceConfig};
3841
use lightning_persister::fs_store::FilesystemStore;
3942

@@ -400,7 +403,7 @@ fn get_full_filepath(filepath: String, filename: String) -> String {
400403

401404
pub(crate) fn create_liquidity_node(
402405
i: usize, persist_dir: &str, network: Network, service_config: Option<LiquidityServiceConfig>,
403-
client_config: Option<LiquidityClientConfig>,
406+
client_config: Option<LiquidityClientConfig>, time_provider: Option<Arc<dyn TimeProvider>>,
404407
) -> Node {
405408
let tx_broadcaster = Arc::new(test_utils::TestBroadcaster::new(network));
406409
let fee_estimator = Arc::new(test_utils::TestFeeEstimator::new(253));
@@ -459,7 +462,7 @@ pub(crate) fn create_liquidity_node(
459462
Some(chain_params),
460463
service_config,
461464
client_config,
462-
None,
465+
time_provider,
463466
));
464467
let msg_handler = MessageHandler {
465468
chan_handler: Arc::new(test_utils::TestChannelMessageHandler::new(
@@ -489,14 +492,23 @@ pub(crate) fn create_liquidity_node(
489492
}
490493

491494
pub(crate) fn create_service_and_client_nodes(
492-
persist_dir: &str, service_config: LiquidityServiceConfig, client_config: LiquidityClientConfig,
495+
persist_dir: &str, service_config: LiquidityServiceConfig,
496+
client_config: LiquidityClientConfig, time_provider: Option<Arc<dyn TimeProvider>>,
493497
) -> (Node, Node) {
494498
let persist_temp_path = env::temp_dir().join(persist_dir);
495499
let persist_dir = persist_temp_path.to_string_lossy().to_string();
496500
let network = Network::Bitcoin;
497501

498-
let service_node = create_liquidity_node(1, &persist_dir, network, Some(service_config), None);
499-
let client_node = create_liquidity_node(2, &persist_dir, network, None, Some(client_config));
502+
let service_node = create_liquidity_node(
503+
1,
504+
&persist_dir,
505+
network,
506+
Some(service_config),
507+
None,
508+
time_provider.clone(),
509+
);
510+
let client_node =
511+
create_liquidity_node(2, &persist_dir, network, None, Some(client_config), time_provider);
500512

501513
service_node
502514
.channel_manager
@@ -672,3 +684,52 @@ fn advance_chain(node: &mut Node, num_blocks: u32) {
672684
}
673685
}
674686
}
687+
688+
pub(crate) fn get_client_and_service(
689+
time_provider: Option<Arc<dyn TimeProvider>>,
690+
) -> (
691+
&'static LSPS5ClientHandler<Arc<KeysManager>>,
692+
&'static LSPS5ServiceHandler<Arc<ChannelManager>>,
693+
bitcoin::secp256k1::PublicKey,
694+
bitcoin::secp256k1::PublicKey,
695+
&'static Node,
696+
&'static Node,
697+
) {
698+
let signing_key = SecretKey::from_slice(&[42; 32]).unwrap();
699+
let mut lsps5_service_config = LSPS5ServiceConfig::default();
700+
lsps5_service_config.signing_key = signing_key;
701+
let service_config = LiquidityServiceConfig {
702+
#[cfg(lsps1_service)]
703+
lsps1_service_config: None,
704+
lsps2_service_config: None,
705+
lsps5_service_config: Some(lsps5_service_config),
706+
advertise_service: true,
707+
};
708+
709+
let lsps5_client_config = LSPS5ClientConfig::default();
710+
let client_config = LiquidityClientConfig {
711+
lsps1_client_config: None,
712+
lsps2_client_config: None,
713+
lsps5_client_config: Some(lsps5_client_config),
714+
};
715+
716+
let (service_node, client_node) = create_service_and_client_nodes(
717+
"webhook_registration_flow",
718+
service_config,
719+
client_config,
720+
time_provider,
721+
);
722+
723+
// Leak the nodes to extend their lifetime to 'static since this is test code
724+
let service_node = Box::leak(Box::new(service_node));
725+
let client_node = Box::leak(Box::new(client_node));
726+
727+
let client_handler = client_node.liquidity_manager.lsps5_client_handler().unwrap();
728+
let service_handler = service_node.liquidity_manager.lsps5_service_handler().unwrap();
729+
730+
let secp = bitcoin::secp256k1::Secp256k1::new();
731+
let service_node_id = bitcoin::secp256k1::PublicKey::from_secret_key(&secp, &signing_key);
732+
let client_node_id = client_node.channel_manager.get_our_node_id();
733+
734+
(client_handler, service_handler, service_node_id, client_node_id, service_node, client_node)
735+
}

lightning-liquidity/tests/lsps2_integration_tests.rs

+8-2
Original file line numberDiff line numberDiff line change
@@ -88,17 +88,23 @@ fn invoice_generation_flow() {
8888
#[cfg(lsps1_service)]
8989
lsps1_service_config: None,
9090
lsps2_service_config: Some(lsps2_service_config),
91+
lsps5_service_config: None,
9192
advertise_service: true,
9293
};
9394

9495
let lsps2_client_config = LSPS2ClientConfig::default();
9596
let client_config = LiquidityClientConfig {
9697
lsps1_client_config: None,
9798
lsps2_client_config: Some(lsps2_client_config),
99+
lsps5_client_config: None,
98100
};
99101

100-
let (service_node, client_node) =
101-
create_service_and_client_nodes("invoice_generation_flow", service_config, client_config);
102+
let (service_node, client_node) = create_service_and_client_nodes(
103+
"invoice_generation_flow",
104+
service_config,
105+
client_config,
106+
None,
107+
);
102108

103109
let service_handler = service_node.liquidity_manager.lsps2_service_handler().unwrap();
104110
let service_node_id = service_node.channel_manager.get_our_node_id();

0 commit comments

Comments
 (0)