Skip to content

Commit 2ded4cd

Browse files
committed
Add simple BOLT12 send/receive test
1 parent 30afbc0 commit 2ded4cd

File tree

2 files changed

+74
-2
lines changed

2 files changed

+74
-2
lines changed

tests/common/mod.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,9 @@ macro_rules! expect_payment_successful_event {
102102
match $node.wait_next_event() {
103103
ref e @ Event::PaymentSuccessful { payment_id, fee_paid_msat, .. } => {
104104
println!("{} got event {:?}", $node.node_id(), e);
105-
assert_eq!(fee_paid_msat, $fee_paid_msat);
105+
if let Some(fee_msat) = $fee_paid_msat {
106+
assert_eq!(fee_paid_msat, fee_msat);
107+
}
106108
assert_eq!(payment_id, $payment_id);
107109
$node.event_handled();
108110
},

tests/integration_tests_rust.rs

Lines changed: 71 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use common::{
77
setup_node, setup_two_nodes, wait_for_tx, TestSyncStore,
88
};
99

10+
use ldk_node::payment::PaymentKind;
1011
use ldk_node::{Builder, Event, NodeError};
1112

1213
use lightning::util::persist::KVStore;
@@ -15,6 +16,8 @@ use bitcoin::{Amount, Network};
1516

1617
use std::sync::Arc;
1718

19+
use crate::common::expect_channel_ready_event;
20+
1821
#[test]
1922
fn channel_full_cycle() {
2023
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
@@ -138,7 +141,7 @@ fn multi_hop_sending() {
138141

139142
let payment_id = expect_payment_received_event!(&nodes[4], 2_500_000);
140143
let fee_paid_msat = Some(2000);
141-
expect_payment_successful_event!(nodes[0], payment_id, fee_paid_msat);
144+
expect_payment_successful_event!(nodes[0], payment_id, Some(fee_paid_msat));
142145
}
143146

144147
#[test]
@@ -366,3 +369,70 @@ fn concurrent_connections_succeed() {
366369
h.join().unwrap();
367370
}
368371
}
372+
373+
#[test]
374+
fn simple_bolt12_send_receive() {
375+
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
376+
let (node_a, node_b) = setup_two_nodes(&electrsd, false);
377+
378+
let address_a = node_a.onchain_payment().new_address().unwrap();
379+
let premine_amount_sat = 5_000_000;
380+
premine_and_distribute_funds(
381+
&bitcoind.client,
382+
&electrsd.client,
383+
vec![address_a],
384+
Amount::from_sat(premine_amount_sat),
385+
);
386+
387+
node_a.sync_wallets().unwrap();
388+
open_channel(&node_a, &node_b, 1_000_000, true, &electrsd);
389+
390+
generate_blocks_and_wait(&bitcoind.client, &electrsd.client, 6);
391+
392+
node_a.sync_wallets().unwrap();
393+
node_b.sync_wallets().unwrap();
394+
395+
expect_channel_ready_event!(node_a, node_b.node_id());
396+
expect_channel_ready_event!(node_b, node_a.node_id());
397+
398+
// Sleep until we broadcasted a node announcement.
399+
while node_b.status().latest_node_announcement_broadcast_timestamp.is_none() {
400+
std::thread::sleep(std::time::Duration::from_millis(10));
401+
}
402+
403+
// Sleep one more sec to make sure the node announcement propagates.
404+
std::thread::sleep(std::time::Duration::from_secs(1));
405+
406+
let expected_amount_msat = 100_000_000;
407+
let offer = node_b.bolt12_payment().receive(expected_amount_msat, "asdf").unwrap();
408+
let payment_id = node_a.bolt12_payment().send(&offer, None).unwrap();
409+
410+
expect_payment_successful_event!(node_a, Some(payment_id), None);
411+
let node_a_payments = node_a.list_payments();
412+
assert_eq!(node_a_payments.len(), 1);
413+
match node_a_payments.first().unwrap().kind {
414+
PaymentKind::Bolt12 { hash, preimage, secret: _ } => {
415+
assert!(hash.is_some());
416+
assert!(preimage.is_some());
417+
//TODO: We should eventually set and assert the secret sender-side, too, but the BOLT12
418+
//API currently doesn't allow to do that.
419+
},
420+
_ => {
421+
panic!("Unexpected payment kind");
422+
},
423+
}
424+
425+
expect_payment_received_event!(node_b, expected_amount_msat);
426+
let node_b_payments = node_b.list_payments();
427+
assert_eq!(node_b_payments.len(), 1);
428+
match node_b_payments.first().unwrap().kind {
429+
PaymentKind::Bolt12 { hash, preimage, secret } => {
430+
assert!(hash.is_some());
431+
assert!(preimage.is_some());
432+
assert!(secret.is_some());
433+
},
434+
_ => {
435+
panic!("Unexpected payment kind");
436+
},
437+
}
438+
}

0 commit comments

Comments
 (0)