Skip to content

Commit 0517dbc

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 2149475 commit 0517dbc

File tree

2 files changed

+81
-18
lines changed

2 files changed

+81
-18
lines changed

tests/common/mod.rs

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

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

293293
println!("\n== Node B ==");
294294
let mut config_b = random_config(anchor_channels);
295+
if second_node_is_hrn_resolver {
296+
config_b.node_config.is_hrn_resolver = true;
297+
}
295298
if allow_0conf {
296299
config_b.node_config.trusted_peers_0conf.push(node_a.node_id());
297300
}

tests/integration_tests_rust.rs

Lines changed: 77 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -47,71 +47,71 @@ use std::sync::Arc;
4747
fn channel_full_cycle() {
4848
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
4949
let chain_source = TestChainSource::Esplora(&electrsd);
50-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
50+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false, false);
5151
do_channel_full_cycle(node_a, node_b, &bitcoind.client, &electrsd.client, false, true, false);
5252
}
5353

5454
#[test]
5555
fn channel_full_cycle_electrum() {
5656
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
5757
let chain_source = TestChainSource::Electrum(&electrsd);
58-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
58+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false, false);
5959
do_channel_full_cycle(node_a, node_b, &bitcoind.client, &electrsd.client, false, true, false);
6060
}
6161

6262
#[test]
6363
fn channel_full_cycle_bitcoind_rpc_sync() {
6464
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
6565
let chain_source = TestChainSource::BitcoindRpcSync(&bitcoind);
66-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
66+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false, false);
6767
do_channel_full_cycle(node_a, node_b, &bitcoind.client, &electrsd.client, false, true, false);
6868
}
6969

7070
#[test]
7171
fn channel_full_cycle_bitcoind_rest_sync() {
7272
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
7373
let chain_source = TestChainSource::BitcoindRestSync(&bitcoind);
74-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
74+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false, false);
7575
do_channel_full_cycle(node_a, node_b, &bitcoind.client, &electrsd.client, false, true, false);
7676
}
7777

7878
#[test]
7979
fn channel_full_cycle_force_close() {
8080
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
8181
let chain_source = TestChainSource::Esplora(&electrsd);
82-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
82+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false, false);
8383
do_channel_full_cycle(node_a, node_b, &bitcoind.client, &electrsd.client, false, true, true);
8484
}
8585

8686
#[test]
8787
fn channel_full_cycle_force_close_trusted_no_reserve() {
8888
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
8989
let chain_source = TestChainSource::Esplora(&electrsd);
90-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, true);
90+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, true, false);
9191
do_channel_full_cycle(node_a, node_b, &bitcoind.client, &electrsd.client, false, true, true);
9292
}
9393

9494
#[test]
9595
fn channel_full_cycle_0conf() {
9696
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
9797
let chain_source = TestChainSource::Esplora(&electrsd);
98-
let (node_a, node_b) = setup_two_nodes(&chain_source, true, true, false);
98+
let (node_a, node_b) = setup_two_nodes(&chain_source, true, true, false, false);
9999
do_channel_full_cycle(node_a, node_b, &bitcoind.client, &electrsd.client, true, true, false)
100100
}
101101

102102
#[test]
103103
fn channel_full_cycle_legacy_staticremotekey() {
104104
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
105105
let chain_source = TestChainSource::Esplora(&electrsd);
106-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, false, false);
106+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, false, false, false);
107107
do_channel_full_cycle(node_a, node_b, &bitcoind.client, &electrsd.client, false, false, false);
108108
}
109109

110110
#[test]
111111
fn channel_open_fails_when_funds_insufficient() {
112112
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
113113
let chain_source = TestChainSource::Esplora(&electrsd);
114-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
114+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false, false);
115115

116116
let addr_a = node_a.onchain_payment().new_address().unwrap();
117117
let addr_b = node_b.onchain_payment().new_address().unwrap();
@@ -312,7 +312,7 @@ fn start_stop_reinit() {
312312
fn onchain_send_receive() {
313313
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
314314
let chain_source = TestChainSource::Esplora(&electrsd);
315-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
315+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false, false);
316316

317317
let addr_a = node_a.onchain_payment().new_address().unwrap();
318318
let addr_b = node_b.onchain_payment().new_address().unwrap();
@@ -512,7 +512,7 @@ fn onchain_send_receive() {
512512
fn onchain_send_all_retains_reserve() {
513513
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
514514
let chain_source = TestChainSource::Esplora(&electrsd);
515-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
515+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false, false);
516516

517517
// Setup nodes
518518
let addr_a = node_a.onchain_payment().new_address().unwrap();
@@ -829,7 +829,7 @@ fn connection_restart_behavior() {
829829
fn do_connection_restart_behavior(persist: bool) {
830830
let (_bitcoind, electrsd) = setup_bitcoind_and_electrsd();
831831
let chain_source = TestChainSource::Esplora(&electrsd);
832-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, false, false);
832+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, false, false, false);
833833

834834
let node_id_a = node_a.node_id();
835835
let node_id_b = node_b.node_id();
@@ -881,7 +881,7 @@ fn do_connection_restart_behavior(persist: bool) {
881881
fn concurrent_connections_succeed() {
882882
let (_bitcoind, electrsd) = setup_bitcoind_and_electrsd();
883883
let chain_source = TestChainSource::Esplora(&electrsd);
884-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
884+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false, false);
885885

886886
let node_a = Arc::new(node_a);
887887
let node_b = Arc::new(node_b);
@@ -912,7 +912,7 @@ fn concurrent_connections_succeed() {
912912
fn simple_bolt12_send_receive() {
913913
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
914914
let chain_source = TestChainSource::Esplora(&electrsd);
915-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
915+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false, false);
916916

917917
let address_a = node_a.onchain_payment().new_address().unwrap();
918918
let premine_amount_sat = 5_000_000;
@@ -1225,7 +1225,7 @@ fn generate_bip21_uri() {
12251225
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
12261226
let chain_source = TestChainSource::Esplora(&electrsd);
12271227

1228-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
1228+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false, false);
12291229

12301230
let address_a = node_a.onchain_payment().new_address().unwrap();
12311231
let premined_sats = 5_000_000;
@@ -1279,7 +1279,7 @@ async fn unified_send_receive_qr_uri() {
12791279
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
12801280
let chain_source = TestChainSource::Esplora(&electrsd);
12811281

1282-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
1282+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false, false);
12831283

12841284
let address_a = node_a.onchain_payment().new_address().unwrap();
12851285
let premined_sats = 5_000_000;
@@ -1384,6 +1384,66 @@ async fn unified_send_receive_qr_uri() {
13841384
assert_eq!(node_b.list_balances().total_lightning_balance_sats, 200_000);
13851385
}
13861386

1387+
#[tokio::test(flavor = "multi_thread")]
1388+
async fn unified_send_to_hrn() {
1389+
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
1390+
let chain_source = TestChainSource::Esplora(&electrsd);
1391+
1392+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false, true);
1393+
1394+
let address_a = node_a.onchain_payment().new_address().unwrap();
1395+
let premined_sats = 5_000_000;
1396+
1397+
premine_and_distribute_funds(
1398+
&bitcoind.client,
1399+
&electrsd.client,
1400+
vec![address_a],
1401+
Amount::from_sat(premined_sats),
1402+
);
1403+
1404+
node_a.sync_wallets().unwrap();
1405+
open_channel(&node_a, &node_b, 4_000_000, true, &electrsd);
1406+
generate_blocks_and_wait(&bitcoind.client, &electrsd.client, 6);
1407+
1408+
node_a.sync_wallets().unwrap();
1409+
node_b.sync_wallets().unwrap();
1410+
1411+
expect_channel_ready_event!(node_a, node_b.node_id());
1412+
expect_channel_ready_event!(node_b, node_a.node_id());
1413+
1414+
// Sleep until we broadcast a node announcement.
1415+
while node_b.status().latest_node_announcement_broadcast_timestamp.is_none() {
1416+
std::thread::sleep(std::time::Duration::from_millis(10));
1417+
}
1418+
1419+
println!("node_b has broadcasted node announcement!");
1420+
1421+
//let offer = node_b.bolt12_payment().receive(1000000, "test offer", None, None).unwrap();
1422+
//println!("offer! {:?}", offer.to_string());
1423+
1424+
// Sleep one more sec to make sure the node announcement propagates.
1425+
std::thread::sleep(std::time::Duration::from_secs(1));
1426+
1427+
let hrn = "chuks@peepswire.com";
1428+
let offer_payment_id: PaymentId = match node_a.unified_payment().send(&hrn, None).await {
1429+
Ok(UnifiedPaymentResult::Bolt12 { payment_id }) => {
1430+
println!("\nBolt12 payment sent successfully with PaymentID: {:?}", payment_id);
1431+
payment_id
1432+
},
1433+
Ok(UnifiedPaymentResult::Bolt11 { payment_id: _ }) => {
1434+
panic!("Expected Bolt12 payment but got Bolt11");
1435+
},
1436+
Ok(UnifiedPaymentResult::Onchain { txid: _ }) => {
1437+
panic!("Expected Bolt12 payment but got On-chain transaction");
1438+
},
1439+
Err(e) => {
1440+
panic!("Expected Bolt12 payment but got error: {:?}", e);
1441+
},
1442+
};
1443+
1444+
expect_payment_successful_event!(node_a, Some(offer_payment_id), None);
1445+
}
1446+
13871447
#[test]
13881448
fn lsps2_client_service_integration() {
13891449
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
@@ -1627,7 +1687,7 @@ fn facade_logging() {
16271687
fn spontaneous_send_with_custom_preimage() {
16281688
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
16291689
let chain_source = TestChainSource::Esplora(&electrsd);
1630-
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
1690+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false, false);
16311691

16321692
let address_a = node_a.onchain_payment().new_address().unwrap();
16331693
let premine_sat = 1_000_000;

0 commit comments

Comments
 (0)