Skip to content

Commit 3a2300e

Browse files
committed
Add end-to-end test for HRN resolution
This commit adds an end-to-end test that asserts that HRNs are properly parsed and resolved, and sending to the corresponding offer works
1 parent b463279 commit 3a2300e

File tree

3 files changed

+79
-23
lines changed

3 files changed

+79
-23
lines changed

src/payment/unified.rs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -160,19 +160,14 @@ impl UnifiedPayment {
160160
Error::HrnResolverNotConfigured
161161
})?;
162162

163-
println!("Parsing instructions...");
164-
165163
let instructions =
166164
PaymentInstructions::parse(uri_str, self.config.network, resolver.as_ref(), false)
167165
.await
168166
.map_err(|e| {
169167
log_error!(self.logger, "Failed to parse payment instructions: {:?}", e);
170-
println!("Failed to parse payment instructions: {:?}", e);
171168
Error::UriParameterParsingFailed
172169
})?;
173170

174-
println!("Sending...");
175-
176171
let resolved = match instructions {
177172
PaymentInstructions::ConfigurableAmount(instr) => {
178173
let amount = amount_msat.ok_or_else(|| {

tests/common/mod.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,14 +281,17 @@ pub(crate) use setup_builder;
281281

282282
pub(crate) fn setup_two_nodes(
283283
chain_source: &TestChainSource, allow_0conf: bool, anchor_channels: bool,
284-
anchors_trusted_no_reserve: bool,
284+
anchors_trusted_no_reserve: bool, second_node_is_hrn_resolver: bool,
285285
) -> (TestNode, TestNode) {
286286
println!("== Node A ==");
287287
let config_a = random_config(anchor_channels);
288288
let node_a = setup_node(chain_source, config_a, None);
289289

290290
println!("\n== Node B ==");
291291
let mut config_b = random_config(anchor_channels);
292+
if second_node_is_hrn_resolver {
293+
config_b.node_config.is_hrn_resolver = true;
294+
}
292295
if allow_0conf {
293296
config_b.node_config.trusted_peers_0conf.push(node_a.node_id());
294297
}

tests/integration_tests_rust.rs

Lines changed: 75 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -43,71 +43,71 @@ use log::LevelFilter;
4343
fn channel_full_cycle() {
4444
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
4545
let chain_source = TestChainSource::Esplora(&electrsd);
46-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
46+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false, false);
4747
do_channel_full_cycle(node_a, node_b, &bitcoind.client, &electrsd.client, false, true, false);
4848
}
4949

5050
#[test]
5151
fn channel_full_cycle_electrum() {
5252
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
5353
let chain_source = TestChainSource::Electrum(&electrsd);
54-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
54+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false, false);
5555
do_channel_full_cycle(node_a, node_b, &bitcoind.client, &electrsd.client, false, true, false);
5656
}
5757

5858
#[test]
5959
fn channel_full_cycle_bitcoind_rpc_sync() {
6060
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
6161
let chain_source = TestChainSource::BitcoindRpcSync(&bitcoind);
62-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
62+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false, false);
6363
do_channel_full_cycle(node_a, node_b, &bitcoind.client, &electrsd.client, false, true, false);
6464
}
6565

6666
#[test]
6767
fn channel_full_cycle_bitcoind_rest_sync() {
6868
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
6969
let chain_source = TestChainSource::BitcoindRestSync(&bitcoind);
70-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
70+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false, false);
7171
do_channel_full_cycle(node_a, node_b, &bitcoind.client, &electrsd.client, false, true, false);
7272
}
7373

7474
#[test]
7575
fn channel_full_cycle_force_close() {
7676
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
7777
let chain_source = TestChainSource::Esplora(&electrsd);
78-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
78+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false, false);
7979
do_channel_full_cycle(node_a, node_b, &bitcoind.client, &electrsd.client, false, true, true);
8080
}
8181

8282
#[test]
8383
fn channel_full_cycle_force_close_trusted_no_reserve() {
8484
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
8585
let chain_source = TestChainSource::Esplora(&electrsd);
86-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, true);
86+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, true, false);
8787
do_channel_full_cycle(node_a, node_b, &bitcoind.client, &electrsd.client, false, true, true);
8888
}
8989

9090
#[test]
9191
fn channel_full_cycle_0conf() {
9292
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
9393
let chain_source = TestChainSource::Esplora(&electrsd);
94-
let (node_a, node_b) = setup_two_nodes(&chain_source, true, true, false);
94+
let (node_a, node_b) = setup_two_nodes(&chain_source, true, true, false, false);
9595
do_channel_full_cycle(node_a, node_b, &bitcoind.client, &electrsd.client, true, true, false)
9696
}
9797

9898
#[test]
9999
fn channel_full_cycle_legacy_staticremotekey() {
100100
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
101101
let chain_source = TestChainSource::Esplora(&electrsd);
102-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, false, false);
102+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, false, false, false);
103103
do_channel_full_cycle(node_a, node_b, &bitcoind.client, &electrsd.client, false, false, false);
104104
}
105105

106106
#[test]
107107
fn channel_open_fails_when_funds_insufficient() {
108108
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
109109
let chain_source = TestChainSource::Esplora(&electrsd);
110-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
110+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false, false);
111111

112112
let addr_a = node_a.onchain_payment().new_address().unwrap();
113113
let addr_b = node_b.onchain_payment().new_address().unwrap();
@@ -308,7 +308,7 @@ fn start_stop_reinit() {
308308
fn onchain_send_receive() {
309309
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
310310
let chain_source = TestChainSource::Esplora(&electrsd);
311-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
311+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false, false);
312312

313313
let addr_a = node_a.onchain_payment().new_address().unwrap();
314314
let addr_b = node_b.onchain_payment().new_address().unwrap();
@@ -508,7 +508,7 @@ fn onchain_send_receive() {
508508
fn onchain_send_all_retains_reserve() {
509509
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
510510
let chain_source = TestChainSource::Esplora(&electrsd);
511-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
511+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false, false);
512512

513513
// Setup nodes
514514
let addr_a = node_a.onchain_payment().new_address().unwrap();
@@ -840,7 +840,7 @@ fn connection_restart_behavior() {
840840
fn do_connection_restart_behavior(persist: bool) {
841841
let (_bitcoind, electrsd) = setup_bitcoind_and_electrsd();
842842
let chain_source = TestChainSource::Esplora(&electrsd);
843-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, false, false);
843+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, false, false, false);
844844

845845
let node_id_a = node_a.node_id();
846846
let node_id_b = node_b.node_id();
@@ -887,7 +887,7 @@ fn do_connection_restart_behavior(persist: bool) {
887887
fn concurrent_connections_succeed() {
888888
let (_bitcoind, electrsd) = setup_bitcoind_and_electrsd();
889889
let chain_source = TestChainSource::Esplora(&electrsd);
890-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
890+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false, false);
891891

892892
let node_a = Arc::new(node_a);
893893
let node_b = Arc::new(node_b);
@@ -914,7 +914,7 @@ fn concurrent_connections_succeed() {
914914
fn simple_bolt12_send_receive() {
915915
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
916916
let chain_source = TestChainSource::Esplora(&electrsd);
917-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
917+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false, false);
918918

919919
let address_a = node_a.onchain_payment().new_address().unwrap();
920920
let premine_amount_sat = 5_000_000;
@@ -1364,7 +1364,7 @@ fn generate_bip21_uri() {
13641364
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
13651365
let chain_source = TestChainSource::Esplora(&electrsd);
13661366

1367-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
1367+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false, false);
13681368

13691369
let address_a = node_a.onchain_payment().new_address().unwrap();
13701370
let premined_sats = 5_000_000;
@@ -1418,7 +1418,7 @@ async fn unified_send_receive_qr_uri() {
14181418
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
14191419
let chain_source = TestChainSource::Esplora(&electrsd);
14201420

1421-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
1421+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false, false);
14221422

14231423
let address_a = node_a.onchain_payment().new_address().unwrap();
14241424
let premined_sats = 5_000_000;
@@ -1523,6 +1523,64 @@ async fn unified_send_receive_qr_uri() {
15231523
assert_eq!(node_b.list_balances().total_lightning_balance_sats, 200_000);
15241524
}
15251525

1526+
#[tokio::test(flavor = "multi_thread")]
1527+
async fn unified_send_to_hrn() {
1528+
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
1529+
let chain_source = TestChainSource::Esplora(&electrsd);
1530+
1531+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false, true);
1532+
1533+
let address_a = node_a.onchain_payment().new_address().unwrap();
1534+
let premined_sats = 5_000_000;
1535+
1536+
premine_and_distribute_funds(
1537+
&bitcoind.client,
1538+
&electrsd.client,
1539+
vec![address_a],
1540+
Amount::from_sat(premined_sats),
1541+
);
1542+
1543+
node_a.sync_wallets().unwrap();
1544+
open_channel(&node_a, &node_b, 4_000_000, true, &electrsd);
1545+
generate_blocks_and_wait(&bitcoind.client, &electrsd.client, 6);
1546+
1547+
node_a.sync_wallets().unwrap();
1548+
node_b.sync_wallets().unwrap();
1549+
1550+
expect_channel_ready_event!(node_a, node_b.node_id());
1551+
expect_channel_ready_event!(node_b, node_a.node_id());
1552+
1553+
// Sleep until we broadcast a node announcement.
1554+
while node_b.status().latest_node_announcement_broadcast_timestamp.is_none() {
1555+
std::thread::sleep(std::time::Duration::from_millis(10));
1556+
}
1557+
1558+
//let offer = node_b.bolt12_payment().receive(1000000, "test offer", None, None).unwrap();
1559+
//println!("offer! {:?}", offer.to_string());
1560+
1561+
// Sleep one more sec to make sure the node announcement propagates.
1562+
std::thread::sleep(std::time::Duration::from_secs(1));
1563+
1564+
let hrn = "[email protected]";
1565+
let offer_payment_id: PaymentId = match node_a.unified_payment().send(&hrn, None).await {
1566+
Ok(UnifiedPaymentResult::Bolt12 { payment_id }) => {
1567+
println!("\nBolt12 payment sent successfully with PaymentID: {:?}", payment_id);
1568+
payment_id
1569+
},
1570+
Ok(UnifiedPaymentResult::Bolt11 { payment_id: _ }) => {
1571+
panic!("Expected Bolt12 payment but got Bolt11");
1572+
},
1573+
Ok(UnifiedPaymentResult::Onchain { txid: _ }) => {
1574+
panic!("Expected Bolt12 payment but got On-chain transaction");
1575+
},
1576+
Err(e) => {
1577+
panic!("Expected Bolt12 payment but got error: {:?}", e);
1578+
},
1579+
};
1580+
1581+
expect_payment_successful_event!(node_a, Some(offer_payment_id), None);
1582+
}
1583+
15261584
#[test]
15271585
fn lsps2_client_service_integration() {
15281586
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
@@ -1766,7 +1824,7 @@ fn facade_logging() {
17661824
fn spontaneous_send_with_custom_preimage() {
17671825
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
17681826
let chain_source = TestChainSource::Esplora(&electrsd);
1769-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
1827+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false, false);
17701828

17711829
let address_a = node_a.onchain_payment().new_address().unwrap();
17721830
let premine_sat = 1_000_000;

0 commit comments

Comments
 (0)