Skip to content

Commit 44e95c2

Browse files
committed
f - test coverage for handling closing_signed while waiting on signer
1 parent 4e84cd5 commit 44e95c2

File tree

1 file changed

+43
-1
lines changed

1 file changed

+43
-1
lines changed

lightning/src/ln/async_signer_tests.rs

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
//! properly with a signer implementation that asynchronously derives signatures.
1212
1313
use std::collections::HashSet;
14-
14+
use bitcoin::key::Secp256k1;
1515
use bitcoin::{Transaction, TxOut, TxIn, Amount};
1616
use bitcoin::locktime::absolute::LockTime;
1717
use bitcoin::transaction::Version;
@@ -20,10 +20,13 @@ use crate::chain::channelmonitor::LATENCY_GRACE_PERIOD_BLOCKS;
2020
use crate::chain::ChannelMonitorUpdateStatus;
2121
use crate::events::bump_transaction::WalletSource;
2222
use crate::events::{ClosureReason, Event, MessageSendEvent, MessageSendEventsProvider};
23+
use crate::ln::chan_utils::ClosingTransaction;
2324
use crate::ln::{functional_test_utils::*, msgs};
2425
use crate::ln::channel_state::{ChannelDetails, ChannelShutdownState};
2526
use crate::ln::msgs::ChannelMessageHandler;
2627
use crate::ln::channelmanager::{PaymentId, RAACommitmentOrder, RecipientOnionFields};
28+
use crate::sign::ecdsa::EcdsaChannelSigner;
29+
use crate::sign::SignerProvider;
2730
use crate::util::test_channel_signer::SignerOp;
2831
use crate::util::logger::Logger;
2932

@@ -851,6 +854,11 @@ fn test_async_holder_signatures_remote_commitment_anchors() {
851854

852855
#[test]
853856
fn test_closing_signed() {
857+
do_test_closing_signed(false);
858+
do_test_closing_signed(true);
859+
}
860+
861+
fn do_test_closing_signed(extra_closing_signed: bool) {
854862
// Based off of `expect_channel_shutdown_state`.
855863
// Test that we can asynchronously sign closing transactions.
856864
let chanmon_cfgs = create_chanmon_cfgs(2);
@@ -898,6 +906,40 @@ fn test_closing_signed() {
898906
nodes[0].disable_channel_signer_op(&nodes[1].node.get_our_node_id(), &chan_1.2, SignerOp::SignClosingTransaction);
899907
nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed);
900908
nodes[0].enable_channel_signer_op(&nodes[1].node.get_our_node_id(), &chan_1.2, SignerOp::SignClosingTransaction);
909+
910+
if extra_closing_signed {
911+
let node_1_closing_signed_2_bad = {
912+
let mut node_1_closing_signed_2 = node_1_closing_signed.clone();
913+
//node_1_closing_signed_2.signature.
914+
let holder_script = nodes[0].keys_manager.get_shutdown_scriptpubkey().unwrap();
915+
let counterparty_script = nodes[1].keys_manager.get_shutdown_scriptpubkey().unwrap();
916+
let funding_outpoint = bitcoin::OutPoint { txid: chan_1.3.txid(), vout: 0 };
917+
let closing_tx_2 = ClosingTransaction::new(50000, 0, holder_script.into(),
918+
counterparty_script.into(), funding_outpoint);
919+
920+
let per_peer_state = nodes[1].node.per_peer_state.read().unwrap();
921+
let mut chan_lock = per_peer_state.get(&nodes[0].node.get_our_node_id()).unwrap().lock().unwrap();
922+
let chan = chan_lock.channel_by_id.get_mut(&chan_1.2).map(|phase| phase.context_mut()).unwrap();
923+
924+
let signer = chan.get_mut_signer().as_mut_ecdsa().unwrap();
925+
let signature = signer.sign_closing_transaction(&closing_tx_2, &Secp256k1::new()).unwrap();
926+
node_1_closing_signed_2.signature = signature;
927+
node_1_closing_signed_2
928+
};
929+
nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed_2_bad);
930+
931+
let events = nodes[0].node.get_and_clear_pending_msg_events();
932+
assert_eq!(events.len(), 1);
933+
match events[0] {
934+
MessageSendEvent::HandleError {
935+
action: msgs::ErrorAction::SendWarningMessage { .. }, ref node_id
936+
} => {
937+
assert_eq!(node_id, &nodes[1].node.get_our_node_id());
938+
},
939+
_ => panic!("Unexpected event: {:?}", events[0]),
940+
};
941+
}
942+
901943
nodes[0].node.signer_unblocked(None);
902944
let (_, node_0_2nd_closing_signed) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
903945

0 commit comments

Comments
 (0)