From: Antoine Riard Date: Mon, 5 Nov 2018 02:17:33 +0000 (+0000) Subject: Add test_static_spendable_outputs_justice_tx_revoked_commitment_tx X-Git-Tag: v0.0.12~271^2~4 X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=commitdiff_plain;h=73415a89519b190e73c37bb3c20e3d1e811f5ebe;p=rust-lightning Add test_static_spendable_outputs_justice_tx_revoked_commitment_tx --- diff --git a/src/ln/channelmanager.rs b/src/ln/channelmanager.rs index 91639902..2fe0ec38 100644 --- a/src/ln/channelmanager.rs +++ b/src/ln/channelmanager.rs @@ -7781,4 +7781,36 @@ mod tests { let spend_tx = check_static_output!(events, nodes, 0, 0, 1, 1); check_spends!(spend_tx, node_txn[0].clone()); } + + #[test] + fn test_static_spendable_outputs_justice_tx_revoked_commitment_tx() { + let nodes = create_network(2); + + // Create some initial channels + let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1); + + let payment_preimage = route_payment(&nodes[0], &vec!(&nodes[1])[..], 3000000).0; + let revoked_local_txn = nodes[0].node.channel_state.lock().unwrap().by_id.iter().next().unwrap().1.last_local_commitment_txn.clone(); + assert_eq!(revoked_local_txn[0].input.len(), 1); + assert_eq!(revoked_local_txn[0].input[0].previous_output.txid, chan_1.3.txid()); + + claim_payment(&nodes[0], &vec!(&nodes[1])[..], payment_preimage); + + let header = BlockHeader { version: 0x20000000, prev_blockhash: Default::default(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 }; + nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: vec![revoked_local_txn[0].clone()] }, 1); + let events = nodes[1].node.get_and_clear_pending_msg_events(); + match events[0] { + MessageSendEvent::BroadcastChannelUpdate { .. } => {}, + _ => panic!("Unexpected event"), + } + let mut node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap(); + assert_eq!(node_txn.len(), 3); + assert_eq!(node_txn.pop().unwrap(), node_txn[0]); + assert_eq!(node_txn[0].input.len(), 2); + check_spends!(node_txn[0], revoked_local_txn[0].clone()); + + let events = nodes[1].chan_monitor.simple_monitor.get_and_clear_pending_events(); + let spend_tx = check_static_output!(events, nodes, 0, 0, 1, 1); + check_spends!(spend_tx, node_txn[0].clone()); + } }