Skip to content

Commit 381f3f8

Browse files
committed
Add parsing tests for experimental offer TLVs
1 parent 0dbf5f2 commit 381f3f8

File tree

1 file changed

+42
-1
lines changed

1 file changed

+42
-1
lines changed

lightning/src/offers/offer.rs

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1228,7 +1228,7 @@ impl core::fmt::Display for Offer {
12281228

12291229
#[cfg(test)]
12301230
mod tests {
1231-
use super::{Amount, ExperimentalOfferTlvStreamRef, OFFER_TYPES, Offer, OfferTlvStreamRef, Quantity};
1231+
use super::{Amount, EXPERIMENTAL_OFFER_TYPES, ExperimentalOfferTlvStreamRef, OFFER_TYPES, Offer, OfferTlvStreamRef, Quantity};
12321232
#[cfg(not(c_bindings))]
12331233
use {
12341234
super::OfferBuilder,
@@ -1960,6 +1960,34 @@ mod tests {
19601960
}
19611961
}
19621962

1963+
#[test]
1964+
fn parses_offer_with_experimental_tlv_records() {
1965+
let offer = OfferBuilder::new(pubkey(42)).build().unwrap();
1966+
1967+
let mut encoded_offer = Vec::new();
1968+
offer.write(&mut encoded_offer).unwrap();
1969+
BigSize(EXPERIMENTAL_OFFER_TYPES.start + 1).write(&mut encoded_offer).unwrap();
1970+
BigSize(32).write(&mut encoded_offer).unwrap();
1971+
[42u8; 32].write(&mut encoded_offer).unwrap();
1972+
1973+
if let Err(e) = Offer::try_from(encoded_offer) {
1974+
panic!("error parsing offer: {:?}", e);
1975+
}
1976+
1977+
let offer = OfferBuilder::new(pubkey(42)).build().unwrap();
1978+
1979+
let mut encoded_offer = Vec::new();
1980+
offer.write(&mut encoded_offer).unwrap();
1981+
BigSize(EXPERIMENTAL_OFFER_TYPES.start).write(&mut encoded_offer).unwrap();
1982+
BigSize(32).write(&mut encoded_offer).unwrap();
1983+
[42u8; 32].write(&mut encoded_offer).unwrap();
1984+
1985+
match Offer::try_from(encoded_offer) {
1986+
Ok(_) => panic!("expected error"),
1987+
Err(e) => assert_eq!(e, Bolt12ParseError::Decode(DecodeError::UnknownRequiredFeature)),
1988+
}
1989+
}
1990+
19631991
#[test]
19641992
fn fails_parsing_offer_with_out_of_range_tlv_records() {
19651993
let offer = OfferBuilder::new(pubkey(42)).build().unwrap();
@@ -1974,6 +2002,19 @@ mod tests {
19742002
Ok(_) => panic!("expected error"),
19752003
Err(e) => assert_eq!(e, Bolt12ParseError::Decode(DecodeError::InvalidValue)),
19762004
}
2005+
2006+
let offer = OfferBuilder::new(pubkey(42)).build().unwrap();
2007+
2008+
let mut encoded_offer = Vec::new();
2009+
offer.write(&mut encoded_offer).unwrap();
2010+
BigSize(EXPERIMENTAL_OFFER_TYPES.end).write(&mut encoded_offer).unwrap();
2011+
BigSize(32).write(&mut encoded_offer).unwrap();
2012+
[42u8; 32].write(&mut encoded_offer).unwrap();
2013+
2014+
match Offer::try_from(encoded_offer) {
2015+
Ok(_) => panic!("expected error"),
2016+
Err(e) => assert_eq!(e, Bolt12ParseError::Decode(DecodeError::InvalidValue)),
2017+
}
19772018
}
19782019
}
19792020

0 commit comments

Comments
 (0)