Skip to content

Commit 13feab6

Browse files
committed
DRY SpendableOutput tests in monitor_tests.rs
1 parent e4cc7db commit 13feab6

File tree

1 file changed

+20
-67
lines changed

1 file changed

+20
-67
lines changed

lightning/src/ln/monitor_tests.rs

Lines changed: 20 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ use util::events::{Event, MessageSendEvent, MessageSendEventsProvider, ClosureRe
2020
use bitcoin::blockdata::script::Builder;
2121
use bitcoin::blockdata::opcodes;
2222
use bitcoin::secp256k1::Secp256k1;
23+
use bitcoin::Transaction;
2324

2425
use prelude::*;
2526

@@ -82,6 +83,17 @@ fn chanmon_fail_from_stale_commitment() {
8283
expect_payment_failed_with_update!(nodes[0], payment_hash, false, update_a.contents.short_channel_id, true);
8384
}
8485

86+
fn test_spendable_output<'a, 'b, 'c, 'd>(node: &'a Node<'b, 'c, 'd>, spendable_tx: &Transaction) {
87+
let mut spendable = node.chain_monitor.chain_monitor.get_and_clear_pending_events();
88+
assert_eq!(spendable.len(), 1);
89+
if let Event::SpendableOutputs { outputs } = spendable.pop().unwrap() {
90+
assert_eq!(outputs.len(), 1);
91+
let spend_tx = node.keys_manager.backing.spend_spendable_outputs(&[&outputs[0]], Vec::new(),
92+
Builder::new().push_opcode(opcodes::all::OP_RETURN).into_script(), 253, &Secp256k1::new()).unwrap();
93+
check_spends!(spend_tx, spendable_tx);
94+
}
95+
}
96+
8597
#[test]
8698
fn chanmon_claim_value_coop_close() {
8799
// Tests `get_claimable_balances` returns the correct values across a simple cooperative claim.
@@ -155,23 +167,9 @@ fn chanmon_claim_value_coop_close() {
155167
assert_eq!(Vec::<Balance>::new(),
156168
nodes[1].chain_monitor.chain_monitor.get_monitor(funding_outpoint).unwrap().get_claimable_balances());
157169

158-
let mut node_a_spendable = nodes[0].chain_monitor.chain_monitor.get_and_clear_pending_events();
159-
assert_eq!(node_a_spendable.len(), 1);
160-
if let Event::SpendableOutputs { outputs } = node_a_spendable.pop().unwrap() {
161-
assert_eq!(outputs.len(), 1);
162-
let spend_tx = nodes[0].keys_manager.backing.spend_spendable_outputs(&[&outputs[0]], Vec::new(),
163-
Builder::new().push_opcode(opcodes::all::OP_RETURN).into_script(), 253, &Secp256k1::new()).unwrap();
164-
check_spends!(spend_tx, shutdown_tx[0]);
165-
}
170+
test_spendable_output(&nodes[0], &shutdown_tx[0]);
171+
test_spendable_output(&nodes[1], &shutdown_tx[0]);
166172

167-
let mut node_b_spendable = nodes[1].chain_monitor.chain_monitor.get_and_clear_pending_events();
168-
assert_eq!(node_b_spendable.len(), 1);
169-
if let Event::SpendableOutputs { outputs } = node_b_spendable.pop().unwrap() {
170-
assert_eq!(outputs.len(), 1);
171-
let spend_tx = nodes[1].keys_manager.backing.spend_spendable_outputs(&[&outputs[0]], Vec::new(),
172-
Builder::new().push_opcode(opcodes::all::OP_RETURN).into_script(), 253, &Secp256k1::new()).unwrap();
173-
check_spends!(spend_tx, shutdown_tx[0]);
174-
}
175173
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure);
176174
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure);
177175
}
@@ -384,15 +382,7 @@ fn do_test_claim_value_force_close(prev_commitment_tx: bool) {
384382
}]),
385383
sorted_vec(nodes[1].chain_monitor.chain_monitor.get_monitor(funding_outpoint).unwrap().get_claimable_balances()));
386384

387-
let mut node_a_spendable = nodes[0].chain_monitor.chain_monitor.get_and_clear_pending_events();
388-
assert_eq!(node_a_spendable.len(), 1);
389-
if let Event::SpendableOutputs { outputs } = node_a_spendable.pop().unwrap() {
390-
assert_eq!(outputs.len(), 1);
391-
let spend_tx = nodes[0].keys_manager.backing.spend_spendable_outputs(&[&outputs[0]], Vec::new(),
392-
Builder::new().push_opcode(opcodes::all::OP_RETURN).into_script(), 253, &Secp256k1::new()).unwrap();
393-
check_spends!(spend_tx, remote_txn[0]);
394-
}
395-
385+
test_spendable_output(&nodes[0], &remote_txn[0]);
396386
assert!(nodes[1].chain_monitor.chain_monitor.get_and_clear_pending_events().is_empty());
397387

398388
// After broadcasting the HTLC claim transaction, node A will still consider the HTLC
@@ -449,14 +439,7 @@ fn do_test_claim_value_force_close(prev_commitment_tx: bool) {
449439
nodes[0].chain_monitor.chain_monitor.get_monitor(funding_outpoint).unwrap().get_claimable_balances());
450440
expect_payment_failed!(nodes[0], timeout_payment_hash, true);
451441

452-
let mut node_a_spendable = nodes[0].chain_monitor.chain_monitor.get_and_clear_pending_events();
453-
assert_eq!(node_a_spendable.len(), 1);
454-
if let Event::SpendableOutputs { outputs } = node_a_spendable.pop().unwrap() {
455-
assert_eq!(outputs.len(), 1);
456-
let spend_tx = nodes[0].keys_manager.backing.spend_spendable_outputs(&[&outputs[0]], Vec::new(),
457-
Builder::new().push_opcode(opcodes::all::OP_RETURN).into_script(), 253, &Secp256k1::new()).unwrap();
458-
check_spends!(spend_tx, a_broadcast_txn[2]);
459-
} else { panic!(); }
442+
test_spendable_output(&nodes[0], &a_broadcast_txn[2]);
460443

461444
// Node B will no longer consider the HTLC "contentious" after the HTLC claim transaction
462445
// confirms, and consider it simply "awaiting confirmations". Note that it has to wait for the
@@ -479,15 +462,7 @@ fn do_test_claim_value_force_close(prev_commitment_tx: bool) {
479462
// After reaching the commitment output CSV, we'll get a SpendableOutputs event for it and have
480463
// only the HTLCs claimable on node B.
481464
connect_blocks(&nodes[1], node_b_commitment_claimable - nodes[1].best_block_info().1);
482-
483-
let mut node_b_spendable = nodes[1].chain_monitor.chain_monitor.get_and_clear_pending_events();
484-
assert_eq!(node_b_spendable.len(), 1);
485-
if let Event::SpendableOutputs { outputs } = node_b_spendable.pop().unwrap() {
486-
assert_eq!(outputs.len(), 1);
487-
let spend_tx = nodes[1].keys_manager.backing.spend_spendable_outputs(&[&outputs[0]], Vec::new(),
488-
Builder::new().push_opcode(opcodes::all::OP_RETURN).into_script(), 253, &Secp256k1::new()).unwrap();
489-
check_spends!(spend_tx, remote_txn[0]);
490-
}
465+
test_spendable_output(&nodes[1], &remote_txn[0]);
491466

492467
assert_eq!(sorted_vec(vec![Balance::ClaimableAwaitingConfirmations {
493468
claimable_amount_satoshis: 3_000,
@@ -501,15 +476,7 @@ fn do_test_claim_value_force_close(prev_commitment_tx: bool) {
501476
// After reaching the claimed HTLC output CSV, we'll get a SpendableOutptus event for it and
502477
// have only one HTLC output left spendable.
503478
connect_blocks(&nodes[1], node_b_htlc_claimable - nodes[1].best_block_info().1);
504-
505-
let mut node_b_spendable = nodes[1].chain_monitor.chain_monitor.get_and_clear_pending_events();
506-
assert_eq!(node_b_spendable.len(), 1);
507-
if let Event::SpendableOutputs { outputs } = node_b_spendable.pop().unwrap() {
508-
assert_eq!(outputs.len(), 1);
509-
let spend_tx = nodes[1].keys_manager.backing.spend_spendable_outputs(&[&outputs[0]], Vec::new(),
510-
Builder::new().push_opcode(opcodes::all::OP_RETURN).into_script(), 253, &Secp256k1::new()).unwrap();
511-
check_spends!(spend_tx, b_broadcast_txn[0]);
512-
} else { panic!(); }
479+
test_spendable_output(&nodes[1], &b_broadcast_txn[0]);
513480

514481
assert_eq!(vec![Balance::ContentiousClaimable {
515482
claimable_amount_satoshis: 4_000,
@@ -704,25 +671,11 @@ fn test_balances_on_local_commitment_htlcs() {
704671
confirmation_height: node_a_htlc_claimable,
705672
}],
706673
nodes[0].chain_monitor.chain_monitor.get_monitor(funding_outpoint).unwrap().get_claimable_balances());
707-
let mut node_a_spendable = nodes[0].chain_monitor.chain_monitor.get_and_clear_pending_events();
708-
assert_eq!(node_a_spendable.len(), 1);
709-
if let Event::SpendableOutputs { outputs } = node_a_spendable.pop().unwrap() {
710-
assert_eq!(outputs.len(), 1);
711-
let spend_tx = nodes[0].keys_manager.backing.spend_spendable_outputs(&[&outputs[0]], Vec::new(),
712-
Builder::new().push_opcode(opcodes::all::OP_RETURN).into_script(), 253, &Secp256k1::new()).unwrap();
713-
check_spends!(spend_tx, as_txn[0]);
714-
}
674+
test_spendable_output(&nodes[0], &as_txn[0]);
715675

716676
// Connect blocks until the HTLC-Timeout's CSV expires, providing us the relevant
717677
// `SpendableOutputs` event and removing the claimable balance entry.
718678
connect_blocks(&nodes[0], node_a_htlc_claimable - nodes[0].best_block_info().1);
719679
assert!(nodes[0].chain_monitor.chain_monitor.get_monitor(funding_outpoint).unwrap().get_claimable_balances().is_empty());
720-
let mut node_a_spendable = nodes[0].chain_monitor.chain_monitor.get_and_clear_pending_events();
721-
assert_eq!(node_a_spendable.len(), 1);
722-
if let Event::SpendableOutputs { outputs } = node_a_spendable.pop().unwrap() {
723-
assert_eq!(outputs.len(), 1);
724-
let spend_tx = nodes[0].keys_manager.backing.spend_spendable_outputs(&[&outputs[0]], Vec::new(),
725-
Builder::new().push_opcode(opcodes::all::OP_RETURN).into_script(), 253, &Secp256k1::new()).unwrap();
726-
check_spends!(spend_tx, as_txn[1]);
727-
}
680+
test_spendable_output(&nodes[0], &as_txn[1]);
728681
}

0 commit comments

Comments
 (0)