@@ -19,7 +19,7 @@ use crate::ln::channelmanager::{self, ChannelManager, ChannelManagerReadArgs, HT
1919use crate :: ln:: onion_utils;
2020use crate :: routing:: gossip:: { NetworkUpdate , RoutingFees } ;
2121use crate :: routing:: router:: { get_route, PaymentParameters , Route , RouteHint , RouteHintHop } ;
22- use crate :: ln:: features:: InitFeatures ;
22+ use crate :: ln:: features:: { InitFeatures , InvoiceFeatures } ;
2323use crate :: ln:: msgs;
2424use crate :: ln:: msgs:: { ChannelMessageHandler , ChannelUpdate } ;
2525use crate :: ln:: wire:: Encode ;
@@ -791,7 +791,10 @@ fn test_onion_failure_stale_channel_update() {
791791}
792792
793793#[ test]
794- fn test_always_create_onion_payload_tlv_format ( ) {
794+ fn test_always_create_tlv_format_onion_payloads ( ) {
795+ // Verify that we always generate tlv onion format payloads, even if the features specifically
796+ // specifies no support for variable length onions, as the legacy payload format has been
797+ // deprecated in BOLT4.
795798 let chanmon_cfgs = create_chanmon_cfgs ( 3 ) ;
796799 let mut node_cfgs = create_node_cfgs ( 3 , & chanmon_cfgs) ;
797800
@@ -808,26 +811,32 @@ fn test_always_create_onion_payload_tlv_format() {
808811 create_announced_chan_between_nodes ( & nodes, 0 , 1 , InitFeatures :: empty ( ) , InitFeatures :: empty ( ) ) ;
809812 create_announced_chan_between_nodes ( & nodes, 1 , 2 , InitFeatures :: empty ( ) , InitFeatures :: empty ( ) ) ;
810813
811- let ( route, _payment_hash, _payment_preimage, _payment_secret) = get_route_and_payment_hash ! ( nodes[ 0 ] , nodes[ 2 ] , 40000 ) ;
814+ let payment_params = PaymentParameters :: from_node_id ( nodes[ 2 ] . node . get_our_node_id ( ) )
815+ . with_features ( InvoiceFeatures :: empty ( ) ) ;
816+ let ( route, _payment_hash, _payment_preimage, _payment_secret) = get_route_and_payment_hash ! ( nodes[ 0 ] , nodes[ 2 ] , payment_params, 40000 , TEST_FINAL_CLTV ) ;
812817
813818 let hops = & route. paths [ 0 ] ;
814- // Asserts that the first hop to `node[1]` returns `false` for
815- // `node_features.supports_variable_length_onion()`
819+ // Asserts that the first hop to `node[1]` signals no support for variable length onions.
816820 assert ! ( !hops[ 0 ] . node_features. supports_variable_length_onion( ) ) ;
817- // Asserts that the second hop to `node[2]` returns `true` for
818- // `node_features.supports_variable_length_onion()`
819- assert ! ( hops[ 1 ] . node_features. supports_variable_length_onion( ) ) ;
821+ // Asserts that the first hop to `node[1]` signals no support for variable length onions.
822+ assert ! ( !hops[ 1 ] . node_features. supports_variable_length_onion( ) ) ;
820823
821824 let cur_height = nodes[ 0 ] . best_block_info ( ) . 1 + 1 ;
822825 let ( onion_payloads, _htlc_msat, _htlc_cltv) = onion_utils:: build_onion_payloads ( & route. paths [ 0 ] , 40000 , & None , cur_height, & None ) . unwrap ( ) ;
823826
824- for onion_payload in onion_payloads. iter ( ) {
825- match onion_payload. format {
826- msgs:: OnionHopDataFormat :: Legacy { ..} => {
827- panic ! ( "`onion_utils::build_onion_payloads` generated a `msgs::OnionHopDataFormat::Legacy` payload" ) ;
828- }
829- _ => { }
830- }
827+ match onion_payloads[ 0 ] . format {
828+ msgs:: OnionHopDataFormat :: NonFinalNode { ..} => { } ,
829+ _ => { panic ! (
830+ "Should have generated a `msgs::OnionHopDataFormat::NonFinalNode` payload for `hops[0]`,
831+ despite that the features signals no support for variable length onions"
832+ ) }
833+ }
834+ match onion_payloads[ 1 ] . format {
835+ msgs:: OnionHopDataFormat :: FinalNode { ..} => { } ,
836+ _ => { panic ! (
837+ "Should have generated a `msgs::OnionHopDataFormat::FinalNode` payload for `hops[1]`,
838+ despite that the features signals no support for variable length onions"
839+ ) }
831840 }
832841}
833842
0 commit comments