Skip to content

Commit 7ee43a9

Browse files
committed
Add Trampoline packet encoding test.
1 parent fede78e commit 7ee43a9

File tree

1 file changed

+41
-2
lines changed

1 file changed

+41
-2
lines changed

lightning/src/ln/msgs.rs

+41-2
Original file line numberDiff line numberDiff line change
@@ -2875,10 +2875,10 @@ mod tests {
28752875
use crate::ln::{PaymentPreimage, PaymentHash, PaymentSecret};
28762876
use crate::ln::ChannelId;
28772877
use crate::ln::features::{ChannelFeatures, ChannelTypeFeatures, InitFeatures, NodeFeatures};
2878-
use crate::ln::msgs::{self, FinalOnionHopData, OnionErrorPacket};
2878+
use crate::ln::msgs::{self, FinalOnionHopData, OnionErrorPacket, VariableLengthOnionPacket};
28792879
use crate::ln::msgs::SocketAddress;
28802880
use crate::routing::gossip::{NodeAlias, NodeId};
2881-
use crate::util::ser::{Writeable, Readable, ReadableArgs, Hostname, TransactionU16LenLimited};
2881+
use crate::util::ser::{Writeable, Readable, ReadableArgs, Hostname, TransactionU16LenLimited, BigSize};
28822882
use crate::util::test_utils;
28832883

28842884
use bitcoin::hashes::hex::FromHex;
@@ -4168,6 +4168,45 @@ mod tests {
41684168
} else { panic!(); }
41694169
}
41704170

4171+
#[test]
4172+
fn encoding_final_onion_hop_data_with_trampoline_packet() {
4173+
let secp_ctx = Secp256k1::new();
4174+
let (private_key, public_key) = get_keys_from!("0101010101010101010101010101010101010101010101010101010101010101", secp_ctx);
4175+
4176+
let compressed_public_key = public_key.serialize();
4177+
assert_eq!(compressed_public_key.len(), 33);
4178+
4179+
let trampoline_packet = VariableLengthOnionPacket {
4180+
version: 0,
4181+
public_key: Ok(public_key),
4182+
hop_data: vec![1; 650], // this should be the standard encoded length
4183+
hmac: [2; 32],
4184+
};
4185+
let encoded_trampoline_packet = trampoline_packet.encode();
4186+
assert_eq!(encoded_trampoline_packet.len(), 718);
4187+
4188+
let msg = msgs::OutboundOnionPayload::Receive {
4189+
payment_data: None,
4190+
payment_metadata: None,
4191+
keysend_preimage: None,
4192+
custom_tlvs: Vec::new(),
4193+
amt_msat: 0x0badf00d01020304,
4194+
outgoing_cltv_value: 0xffffffff,
4195+
trampoline_packet: Some(trampoline_packet)
4196+
};
4197+
let encoded_payload = msg.encode();
4198+
4199+
let trampoline_type_bytes = &encoded_payload[19..=23];
4200+
let mut trampoline_type_cursor = Cursor::new(trampoline_type_bytes);
4201+
let trampoline_type_big_size: BigSize = Readable::read(&mut trampoline_type_cursor).unwrap();
4202+
assert_eq!(trampoline_type_big_size.0, 66100);
4203+
4204+
let trampoline_length_bytes = &encoded_payload[24..=26];
4205+
let mut trampoline_length_cursor = Cursor::new(trampoline_length_bytes);
4206+
let trampoline_length_big_size: BigSize = Readable::read(&mut trampoline_length_cursor).unwrap();
4207+
assert_eq!(trampoline_length_big_size.0, encoded_trampoline_packet.len() as u64);
4208+
}
4209+
41714210
#[test]
41724211
fn query_channel_range_end_blocknum() {
41734212
let tests: Vec<(u32, u32, u32)> = vec![

0 commit comments

Comments
 (0)