Skip to content

Commit 69d5a72

Browse files
Add tests for LSPS5 client and service.
1 parent db7d789 commit 69d5a72

File tree

5 files changed

+1166
-23
lines changed

5 files changed

+1166
-23
lines changed

lightning-background-processor/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@ all-features = true
1414
rustdoc-args = ["--cfg", "docsrs"]
1515

1616
[features]
17+
default = ["std", "time"]
1718
std = ["lightning/std", "lightning-liquidity/std", "bitcoin-io/std", "bitcoin_hashes/std"]
19+
time = ["std", "lightning-liquidity/time"]
1820

19-
default = ["std"]
2021

2122
[dependencies]
2223
bitcoin = { version = "0.32.2", default-features = false }

lightning-background-processor/src/lib.rs

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,7 @@ use futures_util::{dummy_waker, OptionalSelector, Selector, SelectorOutput};
648648
/// # use std::sync::atomic::{AtomicBool, Ordering};
649649
/// # use std::time::SystemTime;
650650
/// # use lightning_background_processor::{process_events_async, GossipSync};
651+
/// # use lightning_liquidity::lsps5::service::TimeProvider;
651652
/// # struct Logger {}
652653
/// # impl lightning::util::logger::Logger for Logger {
653654
/// # fn log(&self, _record: lightning::util::logger::Record) {}
@@ -659,6 +660,16 @@ use futures_util::{dummy_waker, OptionalSelector, Selector, SelectorOutput};
659660
/// # fn remove(&self, primary_namespace: &str, secondary_namespace: &str, key: &str, lazy: bool) -> io::Result<()> { Ok(()) }
660661
/// # fn list(&self, primary_namespace: &str, secondary_namespace: &str) -> io::Result<Vec<String>> { Ok(Vec::new()) }
661662
/// # }
663+
/// #
664+
/// # use core::time::Duration;
665+
/// # struct DefaultTimeProvider;
666+
/// #
667+
/// # impl TimeProvider for DefaultTimeProvider {
668+
/// # fn duration_since_epoch(&self) -> Duration {
669+
/// # use std::time::{SystemTime, UNIX_EPOCH};
670+
/// # SystemTime::now().duration_since(UNIX_EPOCH).expect("system time before Unix epoch")
671+
/// # }
672+
/// # }
662673
/// # struct EventHandler {}
663674
/// # impl EventHandler {
664675
/// # async fn handle_event(&self, _: lightning::events::Event) -> Result<(), ReplayEvent> { Ok(()) }
@@ -674,7 +685,7 @@ use futures_util::{dummy_waker, OptionalSelector, Selector, SelectorOutput};
674685
/// # type P2PGossipSync<UL> = lightning::routing::gossip::P2PGossipSync<Arc<NetworkGraph>, Arc<UL>, Arc<Logger>>;
675686
/// # type ChannelManager<B, F, FE> = lightning::ln::channelmanager::SimpleArcChannelManager<ChainMonitor<B, F, FE>, B, FE, Logger>;
676687
/// # type OnionMessenger<B, F, FE> = lightning::onion_message::messenger::OnionMessenger<Arc<lightning::sign::KeysManager>, Arc<lightning::sign::KeysManager>, Arc<Logger>, Arc<ChannelManager<B, F, FE>>, Arc<lightning::onion_message::messenger::DefaultMessageRouter<Arc<NetworkGraph>, Arc<Logger>, Arc<lightning::sign::KeysManager>>>, Arc<ChannelManager<B, F, FE>>, lightning::ln::peer_handler::IgnoringMessageHandler, lightning::ln::peer_handler::IgnoringMessageHandler, lightning::ln::peer_handler::IgnoringMessageHandler>;
677-
/// # type LiquidityManager<B, F, FE> = lightning_liquidity::LiquidityManager<Arc<lightning::sign::KeysManager>, Arc<ChannelManager<B, F, FE>>, Arc<F>>;
688+
/// # type LiquidityManager<B, F, FE> = lightning_liquidity::LiquidityManager<Arc<lightning::sign::KeysManager>, Arc<ChannelManager<B, F, FE>>, Arc<F>, Arc<DefaultTimeProvider>>;
678689
/// # type Scorer = RwLock<lightning::routing::scoring::ProbabilisticScorer<Arc<NetworkGraph>, Arc<Logger>>>;
679690
/// # type PeerManager<B, F, FE, UL> = lightning::ln::peer_handler::SimpleArcPeerManager<SocketDescriptor, ChainMonitor<B, F, FE>, B, FE, Arc<UL>, Logger, F, Store>;
680691
/// #
@@ -1151,7 +1162,7 @@ impl Drop for BackgroundProcessor {
11511162
}
11521163
}
11531164

1154-
#[cfg(all(feature = "std", test))]
1165+
#[cfg(all(feature = "std", feature = "time", test))]
11551166
mod tests {
11561167
use super::{BackgroundProcessor, GossipSync, FRESHNESS_TIMER};
11571168
use bitcoin::constants::{genesis_block, ChainHash};
@@ -1196,7 +1207,8 @@ mod tests {
11961207
use lightning::util::sweep::{OutputSpendStatus, OutputSweeperSync, PRUNE_DELAY_BLOCKS};
11971208
use lightning::util::test_utils;
11981209
use lightning::{get_event, get_event_msg};
1199-
use lightning_liquidity::lsps5::service::TimeProvider;
1210+
#[cfg(feature = "time")]
1211+
use lightning_liquidity::lsps5::service::DefaultTimeProvider;
12001212
use lightning_liquidity::LiquidityManager;
12011213
use lightning_persister::fs_store::FilesystemStore;
12021214
use lightning_rapid_gossip_sync::RapidGossipSync;
@@ -1293,8 +1305,12 @@ mod tests {
12931305
IgnoringMessageHandler,
12941306
>;
12951307

1296-
type LM =
1297-
LiquidityManager<Arc<KeysManager>, Arc<ChannelManager>, Arc<dyn Filter + Sync + Send>>;
1308+
type LM = LiquidityManager<
1309+
Arc<KeysManager>,
1310+
Arc<ChannelManager>,
1311+
Arc<dyn Filter + Sync + Send>,
1312+
Arc<DefaultTimeProvider>,
1313+
>;
12981314

12991315
struct Node {
13001316
node: Arc<ChannelManager>,
@@ -1635,16 +1651,6 @@ mod tests {
16351651
path.to_str().unwrap().to_string()
16361652
}
16371653

1638-
pub struct DefaultTimeProvider;
1639-
1640-
#[cfg(feature = "std")]
1641-
impl TimeProvider for DefaultTimeProvider {
1642-
fn duration_since_epoch(&self) -> Duration {
1643-
use std::time::{SystemTime, UNIX_EPOCH};
1644-
SystemTime::now().duration_since(UNIX_EPOCH).expect("system time before Unix epoch")
1645-
}
1646-
}
1647-
16481654
fn create_nodes(num_nodes: usize, persist_dir: &str) -> (String, Vec<Node>) {
16491655
let persist_temp_path = env::temp_dir().join(persist_dir);
16501656
let persist_dir = persist_temp_path.to_string_lossy().to_string();
@@ -1746,15 +1752,13 @@ mod tests {
17461752
Arc::clone(&logger),
17471753
Arc::clone(&keys_manager),
17481754
));
1749-
let time_provider = Arc::new(DefaultTimeProvider);
1750-
let liquidity_manager = Arc::new(LiquidityManager::new_with_custom_time_provider(
1755+
let liquidity_manager = Arc::new(LiquidityManager::new(
17511756
Arc::clone(&keys_manager),
17521757
Arc::clone(&manager),
17531758
None,
17541759
None,
17551760
None,
17561761
None,
1757-
time_provider,
17581762
));
17591763
let node = Node {
17601764
node: manager,

lightning-liquidity/tests/lsps0_integration_tests.rs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1-
#![cfg(all(test, feature = "std"))]
1+
#![cfg(all(test, feature = "time"))]
22

33
mod common;
44

5+
use std::time::Duration;
6+
7+
use bitcoin::secp256k1::SecretKey;
58
use common::{create_service_and_client_nodes, get_lsps_message, LSPSNodes};
69

710
use lightning_liquidity::events::LiquidityEvent;
@@ -12,6 +15,8 @@ use lightning_liquidity::lsps1::client::LSPS1ClientConfig;
1215
use lightning_liquidity::lsps1::service::LSPS1ServiceConfig;
1316
use lightning_liquidity::lsps2::client::LSPS2ClientConfig;
1417
use lightning_liquidity::lsps2::service::LSPS2ServiceConfig;
18+
use lightning_liquidity::lsps5::client::LSPS5ClientConfig;
19+
use lightning_liquidity::lsps5::service::{DefaultTimeProvider, LSPS5ServiceConfig};
1520
use lightning_liquidity::{LiquidityClientConfig, LiquidityServiceConfig};
1621

1722
use lightning::ln::functional_test_utils::{
@@ -30,22 +35,32 @@ fn list_protocols_integration_test() {
3035
let lsps2_service_config = LSPS2ServiceConfig { promise_secret };
3136
#[cfg(lsps1_service)]
3237
let lsps1_service_config = LSPS1ServiceConfig { supported_options: None, token: None };
38+
let signing_key = SecretKey::from_slice(&[42; 32]).unwrap();
39+
let mut lsps5_service_config = LSPS5ServiceConfig {
40+
max_webhooks_per_client: 10,
41+
signing_key,
42+
notification_cooldown_hours: Duration::from_secs(3600),
43+
};
44+
lsps5_service_config.signing_key = signing_key;
3345
let service_config = LiquidityServiceConfig {
3446
#[cfg(lsps1_service)]
3547
lsps1_service_config: Some(lsps1_service_config),
3648
lsps2_service_config: Some(lsps2_service_config),
49+
lsps5_service_config: Some(lsps5_service_config),
3750
advertise_service: true,
3851
};
3952

4053
let lsps2_client_config = LSPS2ClientConfig::default();
4154
#[cfg(lsps1_service)]
4255
let lsps1_client_config: LSPS1ClientConfig = LSPS1ClientConfig { max_channel_fees_msat: None };
56+
let lsps5_client_config = LSPS5ClientConfig::default();
4357
let client_config = LiquidityClientConfig {
4458
#[cfg(lsps1_service)]
4559
lsps1_client_config: Some(lsps1_client_config),
4660
#[cfg(not(lsps1_service))]
4761
lsps1_client_config: None,
4862
lsps2_client_config: Some(lsps2_client_config),
63+
lsps5_client_config: Some(lsps5_client_config),
4964
};
5065

5166
let service_node_id = nodes[0].node.get_our_node_id();
@@ -82,11 +97,12 @@ fn list_protocols_integration_test() {
8297
{
8398
assert!(protocols.contains(&1));
8499
assert!(protocols.contains(&2));
85-
assert_eq!(protocols.len(), 2);
100+
assert!(protocols.contains(&5));
101+
assert_eq!(protocols.len(), 3);
86102
}
87103

88104
#[cfg(not(lsps1_service))]
89-
assert_eq!(protocols, vec![2]);
105+
assert_eq!(protocols, vec![2, 5]);
90106
},
91107
_ => panic!("Unexpected event"),
92108
}

lightning-liquidity/tests/lsps2_integration_tests.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#![cfg(all(test, feature = "std"))]
1+
#![cfg(all(test, feature = "std", feature = "time"))]
22

33
mod common;
44

@@ -49,13 +49,15 @@ fn setup_test_lsps2_nodes<'a, 'b, 'c>(
4949
#[cfg(lsps1_service)]
5050
lsps1_service_config: None,
5151
lsps2_service_config: Some(lsps2_service_config),
52+
lsps5_service_config: None,
5253
advertise_service: true,
5354
};
5455

5556
let lsps2_client_config = LSPS2ClientConfig::default();
5657
let client_config = LiquidityClientConfig {
5758
lsps1_client_config: None,
5859
lsps2_client_config: Some(lsps2_client_config),
60+
lsps5_client_config: None,
5961
};
6062
let lsps_nodes = create_service_and_client_nodes(nodes, service_config, client_config);
6163

0 commit comments

Comments
 (0)