99
1010use crate :: ln:: functional_test_utils:: * ;
1111use crate :: ln:: msgs:: { BaseMessageHandler , ChannelMessageHandler , MessageSendEvent } ;
12+ use crate :: util:: errors:: APIError ;
1213
1314/// Splicing test, simple splice-in flow. Starts with opening a V1 channel first.
1415/// Builds on test_channel_open_simple()
@@ -25,17 +26,15 @@ fn test_v1_splice_in() {
2526 let initiator_node = & nodes[ initiator_node_index] ;
2627 let acceptor_node = & nodes[ acceptor_node_index] ;
2728
28- // Instantiate channel parameters where we push the maximum msats given our funding satoshis
29- let channel_value_sat = 100_000 ; // same as funding satoshis
30- let push_msat = 0 ;
29+ let channel_value_sat = 100_000 ;
3130 let channel_reserve_amnt_sat = 1_000 ;
3231
3332 let ( _, _, channel_id, _) = create_announced_chan_between_nodes_with_value (
3433 & nodes,
3534 initiator_node_index,
3635 acceptor_node_index,
3736 channel_value_sat,
38- push_msat,
37+ 0 , // push_msat,
3938 ) ;
4039
4140 let expected_funded_channel_id =
@@ -50,19 +49,18 @@ fn test_v1_splice_in() {
5049 // ==== Channel is now ready for normal operation
5150
5251 // === Start of Splicing
53- println ! ( "Start of Splicing ..., channel_id {}" , channel_id) ;
5452
5553 // Amount being added to the channel through the splice-in
56- let splice_in_sats: u64 = 20000 ;
57- let funding_feerate_per_kw = 1024 ; // TODO
54+ let splice_in_sats = 20_000 ;
55+ let funding_feerate_per_kw = 1024 ;
5856
5957 // Create additional inputs
6058 let extra_splice_funding_input_sats = 35_000 ;
6159 let funding_inputs = create_dual_funding_utxos_with_prev_txs (
6260 & initiator_node,
6361 & [ extra_splice_funding_input_sats] ,
6462 ) ;
65- // Initiate splice-in (on initiator_node)
63+ // Initiate splice-in
6664 let _res = initiator_node
6765 . node
6866 . splice_channel (
@@ -74,7 +72,7 @@ fn test_v1_splice_in() {
7472 None , // locktime
7573 )
7674 . unwrap ( ) ;
77- // Extract the splice message from node0 to node1
75+ // Extract the splice_init message
7876 let splice_init_msg = get_event_msg ! (
7977 initiator_node,
8078 MessageSendEvent :: SendSpliceInit ,
@@ -88,7 +86,7 @@ fn test_v1_splice_in() {
8886 let _res = acceptor_node
8987 . node
9088 . handle_splice_init ( initiator_node. node . get_our_node_id ( ) , & splice_init_msg) ;
91- // Extract the splice_ack message from node1 to node0
89+ // Extract the splice_ack message
9290 let splice_ack_msg = get_event_msg ! (
9391 acceptor_node,
9492 MessageSendEvent :: SendSpliceAck ,
@@ -157,3 +155,38 @@ fn test_v1_splice_in() {
157155 acceptor_node. node. get_our_node_id( )
158156 ) ;
159157}
158+
159+ #[ test]
160+ fn test_v1_splice_in_negative_insufficient_inputs ( ) {
161+ let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
162+ let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
163+ let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , None ] ) ;
164+ let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
165+
166+ let ( _, _, channel_id, _) =
167+ create_announced_chan_between_nodes_with_value ( & nodes, 0 , 1 , 100_000 , 0 ) ;
168+
169+ // Amount being added to the channel through the splice-in
170+ let splice_in_sats = 20_000 ;
171+
172+ // Create additional inputs, but insufficient
173+ let extra_splice_funding_input_sats = splice_in_sats - 1 ;
174+ let funding_inputs =
175+ create_dual_funding_utxos_with_prev_txs ( & nodes[ 0 ] , & [ extra_splice_funding_input_sats] ) ;
176+
177+ // Initiate splice-in, with insufficient input contribution
178+ let res = nodes[ 0 ] . node . splice_channel (
179+ & channel_id,
180+ & nodes[ 1 ] . node . get_our_node_id ( ) ,
181+ splice_in_sats as i64 ,
182+ funding_inputs,
183+ 1024 , // funding_feerate_per_kw,
184+ None , // locktime
185+ ) ;
186+ match res {
187+ Err ( APIError :: APIMisuseError { err } ) => {
188+ assert ! ( err. contains( "Insufficient inputs for splicing" ) )
189+ } ,
190+ _ => panic ! ( "Wrong error {:?}" , res. err( ) . unwrap( ) ) ,
191+ }
192+ }
0 commit comments