Skip to content

Commit c1ae0ed

Browse files
committed
Expand test to cover Bolt11 custom TLVs
Extends the payment flow test to assert that custom TLVs passed to `pay_for_bolt11_invoice` are preserved and delivered correctly.
1 parent 2ea54b8 commit c1ae0ed

File tree

1 file changed

+35
-7
lines changed

1 file changed

+35
-7
lines changed

lightning/src/ln/invoice_utils.rs

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -614,6 +614,7 @@ where
614614
mod test {
615615
use super::*;
616616
use crate::chain::channelmonitor::HTLC_FAIL_BACK_BUFFER;
617+
use crate::events::Event;
617618
use crate::ln::channelmanager::{
618619
Bolt11InvoiceParameters, PaymentId, PhantomRouteHints, RecipientOnionFields, Retry,
619620
MIN_FINAL_CLTV_EXPIRY_DELTA,
@@ -663,7 +664,7 @@ mod test {
663664
}
664665

665666
#[test]
666-
fn create_and_pay_for_bolt11_invoice() {
667+
fn create_and_pay_for_bolt11_invoice_with_custom_tlvs() {
667668
let chanmon_cfgs = create_chanmon_cfgs(2);
668669
let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
669670
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
@@ -694,6 +695,11 @@ mod test {
694695
Duration::from_secs(non_default_invoice_expiry_secs.into())
695696
);
696697

698+
let (payment_hash, payment_secret) =
699+
(PaymentHash(invoice.payment_hash().to_byte_array()), *invoice.payment_secret());
700+
701+
let preimage = nodes[1].node.get_payment_preimage(payment_hash, payment_secret).unwrap();
702+
697703
// Invoice SCIDs should always use inbound SCID aliases over the real channel ID, if one is
698704
// available.
699705
let chan = &nodes[1].node.list_usable_channels()[0];
@@ -708,13 +714,15 @@ mod test {
708714
assert_eq!(invoice.route_hints()[0].0[0].htlc_maximum_msat, chan.inbound_htlc_maximum_msat);
709715

710716
let retry = Retry::Attempts(0);
717+
let custom_tlvs = vec![(65537, vec![42; 42])];
718+
711719
nodes[0]
712720
.node
713721
.pay_for_bolt11_invoice(
714722
&invoice,
715723
PaymentId([42; 32]),
716724
None,
717-
vec![],
725+
custom_tlvs.clone(),
718726
Default::default(),
719727
retry,
720728
)
@@ -725,10 +733,30 @@ mod test {
725733
assert_eq!(events.len(), 1);
726734
let payment_event = SendEvent::from_event(events.remove(0));
727735
nodes[1].node.handle_update_add_htlc(node_a_id, &payment_event.msgs[0]);
728-
nodes[1].node.handle_commitment_signed_batch_test(node_a_id, &payment_event.commitment_msg);
729-
check_added_monitors(&nodes[1], 1);
730-
let events = nodes[1].node.get_and_clear_pending_msg_events();
731-
assert_eq!(events.len(), 2);
736+
check_added_monitors!(&nodes[1], 0);
737+
do_commitment_signed_dance(
738+
&nodes[1],
739+
&nodes[0],
740+
&payment_event.commitment_msg,
741+
false,
742+
false,
743+
);
744+
expect_and_process_pending_htlcs(&nodes[1], false);
745+
746+
let events = nodes[1].node.get_and_clear_pending_events();
747+
assert_eq!(events.len(), 1);
748+
749+
match events[0] {
750+
Event::PaymentClaimable { ref onion_fields, .. } => {
751+
assert_eq!(onion_fields.clone().unwrap().custom_tlvs().clone(), custom_tlvs);
752+
},
753+
_ => panic!("Unexpected event"),
754+
}
755+
756+
claim_payment_along_route(
757+
ClaimAlongRouteArgs::new(&nodes[0], &[&[&nodes[1]]], preimage)
758+
.with_custom_tlvs(custom_tlvs),
759+
);
732760
}
733761

734762
fn do_create_invoice_min_final_cltv_delta(with_custom_delta: bool) {
@@ -1214,7 +1242,7 @@ mod test {
12141242
}
12151243

12161244
fn do_test_multi_node_receive(user_generated_pmt_hash: bool) {
1217-
use crate::events::{Event, EventsProvider};
1245+
use crate::events::EventsProvider;
12181246
use core::cell::RefCell;
12191247

12201248
let mut chanmon_cfgs = create_chanmon_cfgs(3);

0 commit comments

Comments
 (0)