Skip to content

Commit dc7a906

Browse files
committed
Add parsing tests for experimental offer TLVs
1 parent 50e525d commit dc7a906

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,
@@ -1955,6 +1955,34 @@ mod tests {
19551955
}
19561956
}
19571957

1958+
#[test]
1959+
fn parses_offer_with_experimental_tlv_records() {
1960+
let offer = OfferBuilder::new(pubkey(42)).build().unwrap();
1961+
1962+
let mut encoded_offer = Vec::new();
1963+
offer.write(&mut encoded_offer).unwrap();
1964+
BigSize(EXPERIMENTAL_OFFER_TYPES.start + 1).write(&mut encoded_offer).unwrap();
1965+
BigSize(32).write(&mut encoded_offer).unwrap();
1966+
[42u8; 32].write(&mut encoded_offer).unwrap();
1967+
1968+
if let Err(e) = Offer::try_from(encoded_offer) {
1969+
panic!("error parsing offer: {:?}", e);
1970+
}
1971+
1972+
let offer = OfferBuilder::new(pubkey(42)).build().unwrap();
1973+
1974+
let mut encoded_offer = Vec::new();
1975+
offer.write(&mut encoded_offer).unwrap();
1976+
BigSize(EXPERIMENTAL_OFFER_TYPES.start).write(&mut encoded_offer).unwrap();
1977+
BigSize(32).write(&mut encoded_offer).unwrap();
1978+
[42u8; 32].write(&mut encoded_offer).unwrap();
1979+
1980+
match Offer::try_from(encoded_offer) {
1981+
Ok(_) => panic!("expected error"),
1982+
Err(e) => assert_eq!(e, Bolt12ParseError::Decode(DecodeError::UnknownRequiredFeature)),
1983+
}
1984+
}
1985+
19581986
#[test]
19591987
fn fails_parsing_offer_with_out_of_range_tlv_records() {
19601988
let offer = OfferBuilder::new(pubkey(42)).build().unwrap();
@@ -1969,6 +1997,19 @@ mod tests {
19691997
Ok(_) => panic!("expected error"),
19701998
Err(e) => assert_eq!(e, Bolt12ParseError::Decode(DecodeError::InvalidValue)),
19711999
}
2000+
2001+
let offer = OfferBuilder::new(pubkey(42)).build().unwrap();
2002+
2003+
let mut encoded_offer = Vec::new();
2004+
offer.write(&mut encoded_offer).unwrap();
2005+
BigSize(EXPERIMENTAL_OFFER_TYPES.end).write(&mut encoded_offer).unwrap();
2006+
BigSize(32).write(&mut encoded_offer).unwrap();
2007+
[42u8; 32].write(&mut encoded_offer).unwrap();
2008+
2009+
match Offer::try_from(encoded_offer) {
2010+
Ok(_) => panic!("expected error"),
2011+
Err(e) => assert_eq!(e, Bolt12ParseError::Decode(DecodeError::InvalidValue)),
2012+
}
19722013
}
19732014
}
19742015

0 commit comments

Comments
 (0)