|
8 | 8 | mod common; |
9 | 9 |
|
10 | 10 | use common::{ |
11 | | - do_channel_full_cycle, expect_channel_pending_event, expect_channel_ready_event, expect_event, |
12 | | - expect_payment_received_event, expect_payment_successful_event, generate_blocks_and_wait, |
13 | | - logging::{init_log_logger, validate_log_entry, TestLogWriter}, |
14 | | - open_channel, premine_and_distribute_funds, random_config, random_listening_addresses, |
15 | | - setup_bitcoind_and_electrsd, setup_builder, setup_node, setup_two_nodes, wait_for_tx, |
16 | | - TestChainSource, TestSyncStore, |
| 11 | + bump_fee_and_broadcast, distribute_funds_unconfirmed, do_channel_full_cycle, |
| 12 | + expect_channel_pending_event, expect_channel_ready_event, expect_event, |
| 13 | + expect_payment_claimable_event, expect_payment_received_event, expect_payment_successful_event, |
| 14 | + expect_splice_pending_event, generate_blocks_and_wait, |
| 15 | + logging::{init_log_logger, validate_log_entry, MultiNodeLogger, TestLogWriter}, |
| 16 | + open_channel, open_channel_push_amt, premine_and_distribute_funds, premine_blocks, prepare_rbf, |
| 17 | + random_config, random_listening_addresses, setup_bitcoind_and_electrsd, setup_builder, |
| 18 | + setup_node, setup_node_for_async_payments, setup_two_nodes, wait_for_tx, TestChainSource, |
| 19 | + TestSyncStore, |
17 | 20 | }; |
18 | 21 |
|
19 | | -use ldk_node::config::EsploraSyncConfig; |
| 22 | +use ldk_node::config::{AsyncPaymentsRole, EsploraSyncConfig}; |
20 | 23 | use ldk_node::liquidity::{LSPS2ServiceConfig, LSPS4ServiceConfig}; |
21 | 24 | use ldk_node::payment::{ |
22 | | - ConfirmationStatus, PaymentDirection, PaymentKind, PaymentStatus, QrPaymentResult, |
23 | | - SendingParameters, |
| 25 | + ConfirmationStatus, PaymentDetails, PaymentDirection, PaymentKind, PaymentStatus, |
| 26 | + QrPaymentResult, |
24 | 27 | }; |
25 | | -use ldk_node::{Builder, Event, NodeError}; |
| 28 | +use ldk_node::{Builder, DynStore, Event, NodeError}; |
26 | 29 |
|
27 | 30 | use lightning::ln::channelmanager::PaymentId; |
28 | 31 | use lightning::routing::gossip::{NodeAlias, NodeId}; |
29 | | -use lightning::util::persist::KVStore; |
| 32 | +use lightning::routing::router::RouteParametersConfig; |
30 | 33 |
|
31 | 34 | use lightning_invoice::{Bolt11InvoiceDescription, Description}; |
| 35 | +use lightning_types::payment::{PaymentHash, PaymentPreimage}; |
32 | 36 |
|
33 | 37 | use bitcoin::address::NetworkUnchecked; |
| 38 | +use bitcoin::hashes::sha256::Hash as Sha256Hash; |
34 | 39 | use bitcoin::hashes::Hash; |
35 | | -use bitcoin::Address; |
36 | | -use bitcoin::Amount; |
| 40 | +use bitcoin::{Address, Amount, ScriptBuf}; |
| 41 | + |
37 | 42 | use log::LevelFilter; |
38 | 43 |
|
| 44 | +use std::collections::HashSet; |
39 | 45 | use std::str::FromStr; |
40 | 46 | use std::sync::Arc; |
41 | 47 |
|
42 | | -use bitcoin::address::NetworkUnchecked; |
43 | | -use bitcoin::hashes::sha256::Hash as Sha256Hash; |
44 | | -use bitcoin::hashes::Hash; |
45 | | -use bitcoin::{Address, Amount, ScriptBuf}; |
46 | | -use common::logging::{init_log_logger, validate_log_entry, MultiNodeLogger, TestLogWriter}; |
47 | | -use common::{ |
48 | | - bump_fee_and_broadcast, distribute_funds_unconfirmed, do_channel_full_cycle, |
49 | | - expect_channel_pending_event, expect_channel_ready_event, expect_event, |
50 | | - expect_payment_claimable_event, expect_payment_received_event, expect_payment_successful_event, |
51 | | - expect_splice_pending_event, generate_blocks_and_wait, open_channel, open_channel_push_amt, |
52 | | - premine_and_distribute_funds, premine_blocks, prepare_rbf, random_config, |
53 | | - random_listening_addresses, setup_bitcoind_and_electrsd, setup_builder, setup_node, |
54 | | - setup_node_for_async_payments, setup_two_nodes, wait_for_tx, TestChainSource, TestSyncStore, |
55 | | -}; |
56 | | -use ldk_node::config::{AsyncPaymentsRole, EsploraSyncConfig}; |
57 | | -use ldk_node::liquidity::LSPS2ServiceConfig; |
58 | | -use ldk_node::payment::{ |
59 | | - ConfirmationStatus, PaymentDetails, PaymentDirection, PaymentKind, PaymentStatus, |
60 | | - QrPaymentResult, |
61 | | -}; |
62 | | -use ldk_node::{Builder, DynStore, Event, NodeError}; |
63 | | -use lightning::ln::channelmanager::PaymentId; |
64 | | -use lightning::routing::gossip::{NodeAlias, NodeId}; |
65 | | -use lightning::routing::router::RouteParametersConfig; |
66 | | -use lightning_invoice::{Bolt11InvoiceDescription, Description}; |
67 | | -use lightning_types::payment::{PaymentHash, PaymentPreimage}; |
68 | | -use log::LevelFilter; |
69 | | - |
70 | 48 | #[tokio::test(flavor = "multi_thread", worker_threads = 1)] |
71 | 49 | async fn channel_full_cycle() { |
72 | 50 | let (bitcoind, electrsd) = setup_bitcoind_and_electrsd(); |
@@ -1934,8 +1912,8 @@ async fn do_lsps2_client_service_integration(client_trusts_lsp: bool) { |
1934 | 1912 | assert_eq!(client_node.payment(&payment_id).unwrap().status, PaymentStatus::Failed); |
1935 | 1913 | } |
1936 | 1914 |
|
1937 | | -#[test] |
1938 | | -fn lsps4_client_service_integration() { |
| 1915 | +#[tokio::test(flavor = "multi_thread", worker_threads = 1)] |
| 1916 | +async fn lsps4_client_service_integration() { |
1939 | 1917 | let (bitcoind, electrsd) = setup_bitcoind_and_electrsd(); |
1940 | 1918 |
|
1941 | 1919 | let esplora_url = format!("http://{}", electrsd.esplora_url.as_ref().unwrap()); |
@@ -2088,8 +2066,8 @@ fn lsps4_client_service_integration() { |
2088 | 2066 | assert_eq!(client_channels[0].channel_value_sats, expected_channel_size_sat); |
2089 | 2067 | } |
2090 | 2068 |
|
2091 | | -#[test] |
2092 | | -fn lsps4_channel_size_tiers_are_applied() { |
| 2069 | +#[tokio::test(flavor = "multi_thread", worker_threads = 1)] |
| 2070 | +async fn lsps4_channel_size_tiers_are_applied() { |
2093 | 2071 | let (bitcoind, electrsd) = setup_bitcoind_and_electrsd(); |
2094 | 2072 | let esplora_url = format!("http://{}", electrsd.esplora_url.as_ref().unwrap()); |
2095 | 2073 | let sync_config = EsploraSyncConfig { background_sync_config: None }; |
@@ -2165,59 +2143,64 @@ fn lsps4_channel_size_tiers_are_applied() { |
2165 | 2143 | }; |
2166 | 2144 |
|
2167 | 2145 | let mut expected_channel_values = Vec::new(); |
2168 | | - let mut pay_lsps4_invoice = |amount_sat: u64, expected_new_channel_value_sat: Option<u64>| { |
2169 | | - let amount_msat = amount_sat * 1000; |
2170 | | - let invoice_description = Bolt11InvoiceDescription::Direct( |
2171 | | - Description::new(format!("lsps4 tier test {}", amount_sat)).unwrap(), |
2172 | | - ); |
2173 | | - let invoice = client_node |
2174 | | - .bolt11_payment() |
2175 | | - .receive_via_lsps4_jit_channel(Some(amount_msat), &invoice_description, 1024) |
2176 | | - .unwrap(); |
2177 | | - let payment_id = payer_node.bolt11_payment().send(&invoice, None).unwrap(); |
2178 | | - |
2179 | | - if expected_new_channel_value_sat.is_some() { |
2180 | | - expect_channel_pending_event!(service_node, client_node.node_id()); |
2181 | | - expect_channel_ready_event!(service_node, client_node.node_id()); |
2182 | | - expect_channel_pending_event!(client_node, service_node.node_id()); |
2183 | | - expect_channel_ready_event!(client_node, service_node.node_id()); |
2184 | | - } |
2185 | 2146 |
|
2186 | | - expect_service_forward(amount_msat); |
2187 | | - expect_payment_successful_event!(payer_node, Some(payment_id), None); |
2188 | | - let client_payment_id = expect_payment_received_event!(client_node, amount_msat).unwrap(); |
2189 | | - let payment = client_node.payment(&client_payment_id).unwrap(); |
2190 | | - assert!(matches!(payment.kind, PaymentKind::Bolt11Jit { .. })); |
2191 | | - assert_eq!(payment.amount_msat, Some(amount_msat)); |
2192 | | - assert_eq!(payment.status, PaymentStatus::Succeeded); |
| 2147 | + macro_rules! pay_lsps4_invoice { |
| 2148 | + ($amount_sat:expr, $expected_new_channel_value_sat:expr) => {{ |
| 2149 | + let amount_sat = $amount_sat; |
| 2150 | + let expected_new_channel_value_sat = $expected_new_channel_value_sat; |
| 2151 | + let amount_msat = amount_sat * 1000; |
| 2152 | + let invoice_description = Bolt11InvoiceDescription::Direct( |
| 2153 | + Description::new(format!("lsps4 tier test {}", amount_sat)).unwrap(), |
| 2154 | + ); |
| 2155 | + let invoice = client_node |
| 2156 | + .bolt11_payment() |
| 2157 | + .receive_via_lsps4_jit_channel(Some(amount_msat), &invoice_description, 1024) |
| 2158 | + .unwrap(); |
| 2159 | + let payment_id = payer_node.bolt11_payment().send(&invoice, None).unwrap(); |
| 2160 | + |
| 2161 | + if expected_new_channel_value_sat.is_some() { |
| 2162 | + expect_channel_pending_event!(service_node, client_node.node_id()); |
| 2163 | + expect_channel_ready_event!(service_node, client_node.node_id()); |
| 2164 | + expect_channel_pending_event!(client_node, service_node.node_id()); |
| 2165 | + expect_channel_ready_event!(client_node, service_node.node_id()); |
| 2166 | + } |
2193 | 2167 |
|
2194 | | - if let Some(channel_value_sat) = expected_new_channel_value_sat { |
2195 | | - expected_channel_values.push(channel_value_sat); |
2196 | | - } |
| 2168 | + expect_service_forward(amount_msat); |
| 2169 | + expect_payment_successful_event!(payer_node, Some(payment_id), None); |
| 2170 | + let client_payment_id = expect_payment_received_event!(client_node, amount_msat).unwrap(); |
| 2171 | + let payment = client_node.payment(&client_payment_id).unwrap(); |
| 2172 | + assert!(matches!(payment.kind, PaymentKind::Bolt11Jit { .. })); |
| 2173 | + assert_eq!(payment.amount_msat, Some(amount_msat)); |
| 2174 | + assert_eq!(payment.status, PaymentStatus::Succeeded); |
2197 | 2175 |
|
2198 | | - let mut actual_channel_values: Vec<u64> = client_node |
2199 | | - .list_channels() |
2200 | | - .into_iter() |
2201 | | - .filter(|chan| chan.counterparty_node_id == service_node.node_id()) |
2202 | | - .map(|chan| chan.channel_value_sats) |
2203 | | - .collect(); |
2204 | | - actual_channel_values.sort_unstable(); |
2205 | | - let mut expected_sorted = expected_channel_values.clone(); |
2206 | | - expected_sorted.sort_unstable(); |
2207 | | - assert_eq!(actual_channel_values, expected_sorted); |
2208 | | - }; |
| 2176 | + if let Some(channel_value_sat) = expected_new_channel_value_sat { |
| 2177 | + expected_channel_values.push(channel_value_sat); |
| 2178 | + } |
| 2179 | + |
| 2180 | + let mut actual_channel_values: Vec<u64> = client_node |
| 2181 | + .list_channels() |
| 2182 | + .into_iter() |
| 2183 | + .filter(|chan| chan.counterparty_node_id == service_node.node_id()) |
| 2184 | + .map(|chan| chan.channel_value_sats) |
| 2185 | + .collect(); |
| 2186 | + actual_channel_values.sort_unstable(); |
| 2187 | + let mut expected_sorted = expected_channel_values.clone(); |
| 2188 | + expected_sorted.sort_unstable(); |
| 2189 | + assert_eq!(actual_channel_values, expected_sorted); |
| 2190 | + }}; |
| 2191 | + } |
2209 | 2192 |
|
2210 | | - pay_lsps4_invoice(50_000, Some(100_000)); |
2211 | | - pay_lsps4_invoice(100_000, Some(500_000)); |
| 2193 | + pay_lsps4_invoice!(50_000, Some(100_000)); |
| 2194 | + pay_lsps4_invoice!(100_000, Some(500_000)); |
2212 | 2195 |
|
2213 | 2196 | for _ in 0..5 { |
2214 | | - pay_lsps4_invoice(20_000, None); |
| 2197 | + pay_lsps4_invoice!(20_000, None); |
2215 | 2198 | } |
2216 | 2199 |
|
2217 | | - pay_lsps4_invoice(400_000, Some(1_000_000)); |
2218 | | - pay_lsps4_invoice(100_000, None); |
2219 | | - pay_lsps4_invoice(700_000, Some(1_000_000)); |
2220 | | - pay_lsps4_invoice(900_000, Some(1_000_000)); |
| 2200 | + pay_lsps4_invoice!(400_000, Some(1_000_000)); |
| 2201 | + pay_lsps4_invoice!(100_000, None); |
| 2202 | + pay_lsps4_invoice!(700_000, Some(1_000_000)); |
| 2203 | + pay_lsps4_invoice!(900_000, Some(1_000_000)); |
2221 | 2204 |
|
2222 | 2205 | assert_eq!(expected_channel_values, vec![100_000, 500_000, 1_000_000, 1_000_000, 1_000_000]); |
2223 | 2206 | } |
|
0 commit comments