Skip to content

Commit a728d1d

Browse files
committed
Add parsing tests for experimental offer TLVs
1 parent 6a708e2 commit a728d1d

File tree

1 file changed

+43
-1
lines changed

1 file changed

+43
-1
lines changed

lightning/src/offers/offer.rs

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

12351235
#[cfg(test)]
12361236
mod tests {
1237-
use super::{Amount, ExperimentalOfferTlvStreamRef, OFFER_TYPES, Offer, OfferTlvStreamRef, Quantity};
1237+
use super::{Amount, EXPERIMENTAL_OFFER_TYPES, ExperimentalOfferTlvStreamRef, OFFER_TYPES, Offer, OfferTlvStreamRef, Quantity};
12381238
#[cfg(not(c_bindings))]
12391239
use {
12401240
super::OfferBuilder,
@@ -1962,6 +1962,35 @@ mod tests {
19621962
}
19631963
}
19641964

1965+
#[test]
1966+
fn parses_offer_with_experimental_tlv_records() {
1967+
let offer = OfferBuilder::new(pubkey(42)).build().unwrap();
1968+
1969+
let mut encoded_offer = Vec::new();
1970+
offer.write(&mut encoded_offer).unwrap();
1971+
BigSize(EXPERIMENTAL_OFFER_TYPES.start + 1).write(&mut encoded_offer).unwrap();
1972+
BigSize(32).write(&mut encoded_offer).unwrap();
1973+
[42u8; 32].write(&mut encoded_offer).unwrap();
1974+
1975+
match Offer::try_from(encoded_offer.clone()) {
1976+
Ok(offer) => assert_eq!(offer.bytes, encoded_offer),
1977+
Err(e) => panic!("error parsing offer: {:?}", e),
1978+
}
1979+
1980+
let offer = OfferBuilder::new(pubkey(42)).build().unwrap();
1981+
1982+
let mut encoded_offer = Vec::new();
1983+
offer.write(&mut encoded_offer).unwrap();
1984+
BigSize(EXPERIMENTAL_OFFER_TYPES.start).write(&mut encoded_offer).unwrap();
1985+
BigSize(32).write(&mut encoded_offer).unwrap();
1986+
[42u8; 32].write(&mut encoded_offer).unwrap();
1987+
1988+
match Offer::try_from(encoded_offer) {
1989+
Ok(_) => panic!("expected error"),
1990+
Err(e) => assert_eq!(e, Bolt12ParseError::Decode(DecodeError::UnknownRequiredFeature)),
1991+
}
1992+
}
1993+
19651994
#[test]
19661995
fn fails_parsing_offer_with_out_of_range_tlv_records() {
19671996
let offer = OfferBuilder::new(pubkey(42)).build().unwrap();
@@ -1976,6 +2005,19 @@ mod tests {
19762005
Ok(_) => panic!("expected error"),
19772006
Err(e) => assert_eq!(e, Bolt12ParseError::Decode(DecodeError::InvalidValue)),
19782007
}
2008+
2009+
let offer = OfferBuilder::new(pubkey(42)).build().unwrap();
2010+
2011+
let mut encoded_offer = Vec::new();
2012+
offer.write(&mut encoded_offer).unwrap();
2013+
BigSize(EXPERIMENTAL_OFFER_TYPES.end).write(&mut encoded_offer).unwrap();
2014+
BigSize(32).write(&mut encoded_offer).unwrap();
2015+
[42u8; 32].write(&mut encoded_offer).unwrap();
2016+
2017+
match Offer::try_from(encoded_offer) {
2018+
Ok(_) => panic!("expected error"),
2019+
Err(e) => assert_eq!(e, Bolt12ParseError::Decode(DecodeError::InvalidValue)),
2020+
}
19792021
}
19802022
}
19812023

0 commit comments

Comments
 (0)