Skip to content

Commit 22d30e6

Browse files
committed
Add parsing tests for experimental refund TLVs
1 parent 9cf178f commit 22d30e6

File tree

1 file changed

+49
-1
lines changed

1 file changed

+49
-1
lines changed

lightning/src/offers/refund.rs

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -997,7 +997,7 @@ mod tests {
997997
use crate::ln::features::{InvoiceRequestFeatures, OfferFeatures};
998998
use crate::ln::inbound_payment::ExpandedKey;
999999
use crate::ln::msgs::{DecodeError, MAX_VALUE_MSAT};
1000-
use crate::offers::invoice_request::{ExperimentalInvoiceRequestTlvStreamRef, INVOICE_REQUEST_TYPES, InvoiceRequestTlvStreamRef};
1000+
use crate::offers::invoice_request::{EXPERIMENTAL_INVOICE_REQUEST_TYPES, ExperimentalInvoiceRequestTlvStreamRef, INVOICE_REQUEST_TYPES, InvoiceRequestTlvStreamRef};
10011001
use crate::offers::nonce::Nonce;
10021002
use crate::offers::offer::{ExperimentalOfferTlvStreamRef, OfferTlvStreamRef};
10031003
use crate::offers::parse::{Bolt12ParseError, Bolt12SemanticError};
@@ -1621,6 +1621,43 @@ mod tests {
16211621
}
16221622
}
16231623

1624+
#[test]
1625+
fn parses_refund_with_experimental_tlv_records() {
1626+
const UNKNOWN_ODD_TYPE: u64 = EXPERIMENTAL_INVOICE_REQUEST_TYPES.start + 1;
1627+
assert!(UNKNOWN_ODD_TYPE % 2 == 1);
1628+
1629+
let refund = RefundBuilder::new(vec![1; 32], payer_pubkey(), 1000).unwrap()
1630+
.build().unwrap();
1631+
1632+
let mut encoded_refund = Vec::new();
1633+
refund.write(&mut encoded_refund).unwrap();
1634+
BigSize(UNKNOWN_ODD_TYPE).write(&mut encoded_refund).unwrap();
1635+
BigSize(32).write(&mut encoded_refund).unwrap();
1636+
[42u8; 32].write(&mut encoded_refund).unwrap();
1637+
1638+
match Refund::try_from(encoded_refund.clone()) {
1639+
Ok(refund) => assert_eq!(refund.bytes, encoded_refund),
1640+
Err(e) => panic!("error parsing refund: {:?}", e),
1641+
}
1642+
1643+
const UNKNOWN_EVEN_TYPE: u64 = EXPERIMENTAL_INVOICE_REQUEST_TYPES.start;
1644+
assert!(UNKNOWN_EVEN_TYPE % 2 == 0);
1645+
1646+
let refund = RefundBuilder::new(vec![1; 32], payer_pubkey(), 1000).unwrap()
1647+
.build().unwrap();
1648+
1649+
let mut encoded_refund = Vec::new();
1650+
refund.write(&mut encoded_refund).unwrap();
1651+
BigSize(UNKNOWN_EVEN_TYPE).write(&mut encoded_refund).unwrap();
1652+
BigSize(32).write(&mut encoded_refund).unwrap();
1653+
[42u8; 32].write(&mut encoded_refund).unwrap();
1654+
1655+
match Refund::try_from(encoded_refund) {
1656+
Ok(_) => panic!("expected error"),
1657+
Err(e) => assert_eq!(e, Bolt12ParseError::Decode(DecodeError::UnknownRequiredFeature)),
1658+
}
1659+
}
1660+
16241661
#[test]
16251662
fn fails_parsing_refund_with_out_of_range_tlv_records() {
16261663
let secp_ctx = Secp256k1::new();
@@ -1638,5 +1675,16 @@ mod tests {
16381675
Ok(_) => panic!("expected error"),
16391676
Err(e) => assert_eq!(e, Bolt12ParseError::Decode(DecodeError::InvalidValue)),
16401677
}
1678+
1679+
let mut encoded_refund = Vec::new();
1680+
refund.write(&mut encoded_refund).unwrap();
1681+
BigSize(EXPERIMENTAL_INVOICE_REQUEST_TYPES.end).write(&mut encoded_refund).unwrap();
1682+
BigSize(32).write(&mut encoded_refund).unwrap();
1683+
[42u8; 32].write(&mut encoded_refund).unwrap();
1684+
1685+
match Refund::try_from(encoded_refund) {
1686+
Ok(_) => panic!("expected error"),
1687+
Err(e) => assert_eq!(e, Bolt12ParseError::Decode(DecodeError::InvalidValue)),
1688+
}
16411689
}
16421690
}

0 commit comments

Comments
 (0)