Skip to content

Commit f26a2d2

Browse files
Add test for sending an HTLC that would put the funder/remote under their channel reserve
1 parent 5471a66 commit f26a2d2

File tree

1 file changed

+28
-2
lines changed

1 file changed

+28
-2
lines changed

lightning/src/ln/channel.rs

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4432,10 +4432,10 @@ mod tests {
44324432
use bitcoin::hashes::hex::FromHex;
44334433
use hex;
44344434
use ln::channelmanager::{HTLCSource, PaymentPreimage, PaymentHash, PendingHTLCStatus, PendingHTLCInfo, PendingHTLCRouting};
4435-
use ln::channel::{Channel,ChannelKeys,InboundHTLCOutput,OutboundHTLCOutput,InboundHTLCState,OutboundHTLCState,HTLCOutputInCommitment,TxCreationKeys};
4435+
use ln::channel::{Channel,ChannelKeys,InboundHTLCOutput,OutboundHTLCOutput,InboundHTLCState,OutboundHTLCState,HTLCOutputInCommitment,TxCreationKeys, ChannelError};
44364436
use ln::channel::MAX_FUNDING_SATOSHIS;
44374437
use ln::features::{InitFeatures, NodeFeatures};
4438-
use ln::msgs::{OptionalField, DataLossProtect, UpdateAddHTLC, OnionErrorPacket};
4438+
use ln::msgs::{OptionalField, DataLossProtect, UpdateAddHTLC, OnionErrorPacket, OnionPacket};
44394439
use ln::{chan_utils, onion_utils};
44404440
use ln::chan_utils::{LocalCommitmentTransaction, ChannelPublicKeys};
44414441
use ln::features::ChannelFeatures;
@@ -4604,6 +4604,32 @@ mod tests {
46044604
}
46054605
}
46064606

4607+
#[test]
4608+
fn test_chan_reserve_violation_outbound_htlc_inbound_chan() {
4609+
let chan_cfgs = create_chan_cfgs(2);
4610+
let mut chans = create_channels(&chan_cfgs, 100000, 95000000);
4611+
4612+
// update_add_htlc would prevent us from letting their balance get
4613+
// this low, so we do it manually.
4614+
let min_remote_balance = chans[0].local_channel_reserve_satoshis + chans[1].next_remote_commit_tx_fee_msat(1);
4615+
chans[1].value_to_self_msat = 95000000 + (5000000 - min_remote_balance) + 1;
4616+
4617+
let dummy_htlc_src = HTLCSource::OutboundRoute{
4618+
path: vec![], session_priv: SecretKey::from_slice(&[7; 32]).unwrap(), first_hop_htlc_msat: 0
4619+
};
4620+
let dummy_onion_packet = OnionPacket{
4621+
version: 0,
4622+
public_key: Ok(chans[0].their_node_id),
4623+
hop_data: [0; 20*65],
4624+
hmac: [0;32],
4625+
};
4626+
4627+
match chans[1].send_htlc(1, PaymentHash([0;32]), 0, dummy_htlc_src, dummy_onion_packet) {
4628+
Err(ChannelError::Ignore(msg)) => assert_eq!(msg, "Cannot send value that would put them under remote channel reserve value"),
4629+
_ => panic!(),
4630+
}
4631+
}
4632+
46074633
#[test]
46084634
fn test_fee_spike_buffer_violation_inbound_htlc_inbound_chan() {
46094635
let chan_cfgs = create_chan_cfgs(2);

0 commit comments

Comments
 (0)