Skip to content

Commit 6870049

Browse files
committed
Add Trampoline packet encoding test.
1 parent 1225322 commit 6870049

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
@@ -2878,10 +2878,10 @@ mod tests {
28782878
use crate::ln::{PaymentPreimage, PaymentHash, PaymentSecret};
28792879
use crate::ln::ChannelId;
28802880
use crate::ln::features::{ChannelFeatures, ChannelTypeFeatures, InitFeatures, NodeFeatures};
2881-
use crate::ln::msgs::{self, FinalOnionHopData, OnionErrorPacket};
2881+
use crate::ln::msgs::{self, FinalOnionHopData, OnionErrorPacket, VariableLengthOnionPacket};
28822882
use crate::ln::msgs::SocketAddress;
28832883
use crate::routing::gossip::{NodeAlias, NodeId};
2884-
use crate::util::ser::{Writeable, Readable, ReadableArgs, Hostname, TransactionU16LenLimited};
2884+
use crate::util::ser::{Writeable, Readable, ReadableArgs, Hostname, TransactionU16LenLimited, BigSize};
28852885
use crate::util::test_utils;
28862886

28872887
use bitcoin::hashes::hex::FromHex;
@@ -4171,6 +4171,45 @@ mod tests {
41714171
} else { panic!(); }
41724172
}
41734173

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

0 commit comments

Comments
 (0)