Skip to content

Commit 93f8c84

Browse files
committed
Add InvoiceBuilder::features_unchecked
In order to test handling of unknown required features in a Bolt12Invoice, add a test-only function to allow setting arbitrary feature bits.
1 parent b2d71ed commit 93f8c84

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

lightning/src/offers/invoice.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,8 @@ use crate::ln::features::{BlindedHopFeatures, Bolt12InvoiceFeatures, InvoiceRequ
117117
use crate::ln::inbound_payment::{ExpandedKey, IV_LEN};
118118
use crate::ln::msgs::DecodeError;
119119
use crate::offers::invoice_macros::{invoice_accessors_common, invoice_builder_methods_common};
120+
#[cfg(test)]
121+
use crate::offers::invoice_macros::invoice_builder_methods_test;
120122
use crate::offers::invoice_request::{INVOICE_REQUEST_PAYER_ID_TYPE, INVOICE_REQUEST_TYPES, IV_BYTES as INVOICE_REQUEST_IV_BYTES, InvoiceRequest, InvoiceRequestContents, InvoiceRequestTlvStream, InvoiceRequestTlvStreamRef};
121123
use crate::offers::merkle::{SignError, SignFn, SignatureTlvStream, SignatureTlvStreamRef, TaggedHash, TlvStream, WithoutSignatures, self};
122124
use crate::offers::nonce::Nonce;
@@ -385,6 +387,9 @@ impl<'a> InvoiceBuilder<'a, DerivedSigningPubkey> {
385387
impl<'a, S: SigningPubkeyStrategy> InvoiceBuilder<'a, S> {
386388
invoice_builder_methods!(self, Self, Self, self, S, mut);
387389
invoice_builder_methods_common!(self, Self, self.invoice.fields_mut(), Self, self, S, Bolt12Invoice, mut);
390+
391+
#[cfg(test)]
392+
invoice_builder_methods_test!(self, Self, self.invoice.fields_mut(), Self, self, mut);
388393
}
389394

390395
#[cfg(all(c_bindings, not(test)))]
@@ -399,6 +404,7 @@ impl<'a> InvoiceWithExplicitSigningPubkeyBuilder<'a> {
399404
invoice_explicit_signing_pubkey_builder_methods!(self, &mut Self);
400405
invoice_builder_methods!(self, &mut Self, &mut Self, self, ExplicitSigningPubkey);
401406
invoice_builder_methods_common!(self, &mut Self, self.invoice.fields_mut(), &mut Self, self, ExplicitSigningPubkey, Bolt12Invoice);
407+
invoice_builder_methods_test!(self, &mut Self, self.invoice.fields_mut(), &mut Self, self);
402408
}
403409

404410
#[cfg(all(c_bindings, not(test)))]
@@ -413,6 +419,7 @@ impl<'a> InvoiceWithDerivedSigningPubkeyBuilder<'a> {
413419
invoice_derived_signing_pubkey_builder_methods!(self, &mut Self);
414420
invoice_builder_methods!(self, &mut Self, &mut Self, self, DerivedSigningPubkey);
415421
invoice_builder_methods_common!(self, &mut Self, self.invoice.fields_mut(), &mut Self, self, DerivedSigningPubkey, Bolt12Invoice);
422+
invoice_builder_methods_test!(self, &mut Self, self.invoice.fields_mut(), &mut Self, self);
416423
}
417424

418425
#[cfg(c_bindings)]

lightning/src/offers/invoice_macros.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,21 @@ macro_rules! invoice_builder_methods_common { (
8282
}
8383
} }
8484

85+
#[cfg(test)]
86+
macro_rules! invoice_builder_methods_test { (
87+
$self: ident, $self_type: ty, $invoice_fields: expr, $return_type: ty, $return_value: expr
88+
$(, $self_mut: tt)?
89+
) => {
90+
#[cfg_attr(c_bindings, allow(dead_code))]
91+
pub(crate) fn features_unchecked(
92+
$($self_mut)* $self: $self_type, features: Bolt12InvoiceFeatures
93+
) -> $return_type {
94+
$invoice_fields.features = features;
95+
$return_value
96+
}
97+
98+
} }
99+
85100
macro_rules! invoice_accessors_common { ($self: ident, $contents: expr, $invoice_type: ty) => {
86101
/// Paths to the recipient originating from publicly reachable nodes, including information
87102
/// needed for routing payments across them.
@@ -133,3 +148,5 @@ macro_rules! invoice_accessors_common { ($self: ident, $contents: expr, $invoice
133148

134149
pub(super) use invoice_accessors_common;
135150
pub(super) use invoice_builder_methods_common;
151+
#[cfg(test)]
152+
pub(super) use invoice_builder_methods_test;

0 commit comments

Comments
 (0)