Skip to content

Commit 04d64f0

Browse files
committed
Check entire TLV stream instead of by field
This causes a compilation error if a new field is added but missed in the tests.
1 parent b25c8df commit 04d64f0

File tree

3 files changed

+56
-41
lines changed

3 files changed

+56
-41
lines changed

lightning/src/offers/invoice_request.rs

Lines changed: 37 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,7 @@ impl TryFrom<PartialInvoiceRequestTlvStream> for InvoiceRequestContents {
471471

472472
#[cfg(test)]
473473
mod tests {
474-
use super::InvoiceRequest;
474+
use super::{InvoiceRequest, InvoiceRequestTlvStreamRef};
475475

476476
use bitcoin::blockdata::constants::ChainHash;
477477
use bitcoin::network::constants::Network;
@@ -483,9 +483,10 @@ mod tests {
483483
use core::time::Duration;
484484
use crate::ln::features::InvoiceRequestFeatures;
485485
use crate::ln::msgs::{DecodeError, MAX_VALUE_MSAT};
486-
use crate::offers::merkle::SignError;
487-
use crate::offers::offer::{Amount, OfferBuilder, Quantity};
486+
use crate::offers::merkle::{SignError, SignatureTlvStreamRef};
487+
use crate::offers::offer::{Amount, OfferBuilder, OfferTlvStreamRef, Quantity};
488488
use crate::offers::parse::{ParseError, SemanticError};
489+
use crate::offers::payer::PayerTlvStreamRef;
489490
use crate::util::ser::{BigSize, Writeable};
490491
use crate::util::string::PrintableString;
491492

@@ -517,14 +518,13 @@ mod tests {
517518

518519
#[test]
519520
fn builds_invoice_request_with_defaults() {
520-
let offer = OfferBuilder::new("foo".into(), recipient_pubkey())
521+
let invoice_request = OfferBuilder::new("foo".into(), recipient_pubkey())
521522
.amount_msats(1000)
522-
.build().unwrap();
523-
let invoice_request = offer.request_invoice(vec![1; 32], payer_pubkey()).unwrap()
524-
.build().unwrap().sign(payer_sign).unwrap();
523+
.build().unwrap()
524+
.request_invoice(vec![1; 32], payer_pubkey()).unwrap()
525+
.build().unwrap()
526+
.sign(payer_sign).unwrap();
525527

526-
let (payer_tlv_stream, offer_tlv_stream, invoice_request_tlv_stream, signature_tlv_stream) =
527-
invoice_request.as_tlv_stream();
528528
let mut buffer = Vec::new();
529529
invoice_request.write(&mut buffer).unwrap();
530530

@@ -538,25 +538,34 @@ mod tests {
538538
assert_eq!(invoice_request.payer_note(), None);
539539
assert!(invoice_request.signature().is_some());
540540

541-
assert_eq!(payer_tlv_stream.metadata, Some(&vec![1; 32]));
542-
assert_eq!(offer_tlv_stream.chains, None);
543-
assert_eq!(offer_tlv_stream.metadata, None);
544-
assert_eq!(offer_tlv_stream.currency, None);
545-
assert_eq!(offer_tlv_stream.amount, Some(1000));
546-
assert_eq!(offer_tlv_stream.description, Some(&String::from("foo")));
547-
assert_eq!(offer_tlv_stream.features, None);
548-
assert_eq!(offer_tlv_stream.absolute_expiry, None);
549-
assert_eq!(offer_tlv_stream.paths, None);
550-
assert_eq!(offer_tlv_stream.issuer, None);
551-
assert_eq!(offer_tlv_stream.quantity_max, None);
552-
assert_eq!(offer_tlv_stream.node_id, Some(&recipient_pubkey()));
553-
assert_eq!(invoice_request_tlv_stream.chain, None);
554-
assert_eq!(invoice_request_tlv_stream.amount, None);
555-
assert_eq!(invoice_request_tlv_stream.features, None);
556-
assert_eq!(invoice_request_tlv_stream.quantity, None);
557-
assert_eq!(invoice_request_tlv_stream.payer_id, Some(&payer_pubkey()));
558-
assert_eq!(invoice_request_tlv_stream.payer_note, None);
559-
assert!(signature_tlv_stream.signature.is_some());
541+
assert_eq!(
542+
invoice_request.as_tlv_stream(),
543+
(
544+
PayerTlvStreamRef { metadata: Some(&vec![1; 32]) },
545+
OfferTlvStreamRef {
546+
chains: None,
547+
metadata: None,
548+
currency: None,
549+
amount: Some(1000),
550+
description: Some(&String::from("foo")),
551+
features: None,
552+
absolute_expiry: None,
553+
paths: None,
554+
issuer: None,
555+
quantity_max: None,
556+
node_id: Some(&recipient_pubkey()),
557+
},
558+
InvoiceRequestTlvStreamRef {
559+
chain: None,
560+
amount: None,
561+
features: None,
562+
quantity: None,
563+
payer_id: Some(&payer_pubkey()),
564+
payer_note: None,
565+
},
566+
SignatureTlvStreamRef { signature: invoice_request.signature().as_ref() },
567+
),
568+
);
560569

561570
if let Err(e) = InvoiceRequest::try_from(buffer) {
562571
panic!("error parsing invoice request: {:?}", e);

lightning/src/offers/offer.rs

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -653,7 +653,7 @@ impl core::fmt::Display for Offer {
653653

654654
#[cfg(test)]
655655
mod tests {
656-
use super::{Amount, Offer, OfferBuilder, Quantity};
656+
use super::{Amount, Offer, OfferBuilder, OfferTlvStreamRef, Quantity};
657657

658658
use bitcoin::blockdata::constants::ChainHash;
659659
use bitcoin::network::constants::Network;
@@ -680,7 +680,7 @@ mod tests {
680680
#[test]
681681
fn builds_offer_with_defaults() {
682682
let offer = OfferBuilder::new("foo".into(), pubkey(42)).build().unwrap();
683-
let tlv_stream = offer.as_tlv_stream();
683+
684684
let mut buffer = Vec::new();
685685
offer.write(&mut buffer).unwrap();
686686

@@ -699,17 +699,22 @@ mod tests {
699699
assert_eq!(offer.supported_quantity(), Quantity::one());
700700
assert_eq!(offer.signing_pubkey(), pubkey(42));
701701

702-
assert_eq!(tlv_stream.chains, None);
703-
assert_eq!(tlv_stream.metadata, None);
704-
assert_eq!(tlv_stream.currency, None);
705-
assert_eq!(tlv_stream.amount, None);
706-
assert_eq!(tlv_stream.description, Some(&String::from("foo")));
707-
assert_eq!(tlv_stream.features, None);
708-
assert_eq!(tlv_stream.absolute_expiry, None);
709-
assert_eq!(tlv_stream.paths, None);
710-
assert_eq!(tlv_stream.issuer, None);
711-
assert_eq!(tlv_stream.quantity_max, None);
712-
assert_eq!(tlv_stream.node_id, Some(&pubkey(42)));
702+
assert_eq!(
703+
offer.as_tlv_stream(),
704+
OfferTlvStreamRef {
705+
chains: None,
706+
metadata: None,
707+
currency: None,
708+
amount: None,
709+
description: Some(&String::from("foo")),
710+
features: None,
711+
absolute_expiry: None,
712+
paths: None,
713+
issuer: None,
714+
quantity_max: None,
715+
node_id: Some(&pubkey(42)),
716+
},
717+
);
713718

714719
if let Err(e) = Offer::try_from(buffer) {
715720
panic!("error parsing offer: {:?}", e);

lightning/src/util/ser_macros.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -510,6 +510,7 @@ macro_rules! tlv_stream {
510510
)*
511511
}
512512

513+
#[derive(Debug, PartialEq)]
513514
pub(super) struct $nameref<'a> {
514515
$(
515516
pub(super) $field: Option<tlv_record_ref_type!($fieldty)>,

0 commit comments

Comments
 (0)