X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Fln%2Freorg_tests.rs;h=0025598e4c2400702503fe072b1d8b7459f58b39;hb=a534a5e7af4923122a359005a99f01cfb33b451c;hp=8eb39cfe92a98cacc6ab0bd854d85334a8ded939;hpb=c244c781f63618c4241324b460e6a6d77f525e73;p=rust-lightning diff --git a/lightning/src/ln/reorg_tests.rs b/lightning/src/ln/reorg_tests.rs index 8eb39cfe..0025598e 100644 --- a/lightning/src/ln/reorg_tests.rs +++ b/lightning/src/ln/reorg_tests.rs @@ -60,10 +60,11 @@ fn do_test_onchain_htlc_reorg(local_commitment: bool, claim: bool) { connect_blocks(&nodes[1], 2*CHAN_CONFIRM_DEPTH + 1 - nodes[1].best_block_info().1); connect_blocks(&nodes[2], 2*CHAN_CONFIRM_DEPTH + 1 - nodes[2].best_block_info().1); - let (our_payment_preimage, our_payment_hash, _) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 1000000); + let (our_payment_preimage, our_payment_hash, _) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 1_000_000); // Provide preimage to node 2 by claiming payment nodes[2].node.claim_funds(our_payment_preimage); + expect_payment_claimed!(nodes[2], our_payment_hash, 1_000_000); check_added_monitors!(nodes[2], 1); get_htlc_update_msgs!(nodes[2], nodes[1].node.get_our_node_id()); @@ -138,7 +139,7 @@ fn do_test_onchain_htlc_reorg(local_commitment: bool, claim: bool) { // ChannelManager only polls chain::Watch::release_pending_monitor_events when we // probe it for events, so we probe non-message events here (which should just be the // PaymentForwarded event). - expect_payment_forwarded!(nodes[1], Some(1000), true); + expect_payment_forwarded!(nodes[1], nodes[0], nodes[2], Some(1000), true, true); } else { // Confirm the timeout tx and check that we fail the HTLC backwards let block = Block { @@ -209,14 +210,14 @@ fn do_test_unconf_chan(reload_node: bool, reorg_after_reload: bool, use_funding_ let relevant_txids = nodes[0].node.get_relevant_txids(); assert_eq!(&relevant_txids[..], &[chan.3.txid()]); nodes[0].node.transaction_unconfirmed(&relevant_txids[0]); + } else if connect_style == ConnectStyle::FullBlockViaListen { + disconnect_blocks(&nodes[0], CHAN_CONFIRM_DEPTH - 1); + assert_eq!(nodes[0].node.list_usable_channels().len(), 1); + disconnect_blocks(&nodes[0], 1); } else { disconnect_all_blocks(&nodes[0]); } - if connect_style == ConnectStyle::FullBlockViaListen && !use_funding_unconfirmed { - handle_announce_close_broadcast_events(&nodes, 0, 1, true, "Channel closed because of an exception: Funding transaction was un-confirmed. Locked at 6 confs, now have 2 confs."); - } else { - handle_announce_close_broadcast_events(&nodes, 0, 1, true, "Channel closed because of an exception: Funding transaction was un-confirmed. Locked at 6 confs, now have 0 confs."); - } + handle_announce_close_broadcast_events(&nodes, 0, 1, true, "Channel closed because of an exception: Funding transaction was un-confirmed. Locked at 6 confs, now have 0 confs."); check_added_monitors!(nodes[1], 1); { let channel_state = nodes[0].node.channel_state.lock().unwrap(); @@ -277,14 +278,14 @@ fn do_test_unconf_chan(reload_node: bool, reorg_after_reload: bool, use_funding_ let relevant_txids = nodes[0].node.get_relevant_txids(); assert_eq!(&relevant_txids[..], &[chan.3.txid()]); nodes[0].node.transaction_unconfirmed(&relevant_txids[0]); + } else if connect_style == ConnectStyle::FullBlockViaListen { + disconnect_blocks(&nodes[0], CHAN_CONFIRM_DEPTH - 1); + assert_eq!(nodes[0].node.list_channels().len(), 1); + disconnect_blocks(&nodes[0], 1); } else { disconnect_all_blocks(&nodes[0]); } - if connect_style == ConnectStyle::FullBlockViaListen && !use_funding_unconfirmed { - handle_announce_close_broadcast_events(&nodes, 0, 1, true, "Channel closed because of an exception: Funding transaction was un-confirmed. Locked at 6 confs, now have 2 confs."); - } else { - handle_announce_close_broadcast_events(&nodes, 0, 1, true, "Channel closed because of an exception: Funding transaction was un-confirmed. Locked at 6 confs, now have 0 confs."); - } + handle_announce_close_broadcast_events(&nodes, 0, 1, true, "Channel closed because of an exception: Funding transaction was un-confirmed. Locked at 6 confs, now have 0 confs."); check_added_monitors!(nodes[1], 1); { let channel_state = nodes[0].node.channel_state.lock().unwrap(); @@ -297,11 +298,7 @@ fn do_test_unconf_chan(reload_node: bool, reorg_after_reload: bool, use_funding_ *nodes[0].chain_monitor.expect_channel_force_closed.lock().unwrap() = Some((chan.2, true)); nodes[0].node.test_process_background_events(); // Required to free the pending background monitor update check_added_monitors!(nodes[0], 1); - let expected_err = if connect_style == ConnectStyle::FullBlockViaListen && !use_funding_unconfirmed { - "Funding transaction was un-confirmed. Locked at 6 confs, now have 2 confs." - } else { - "Funding transaction was un-confirmed. Locked at 6 confs, now have 0 confs." - }; + let expected_err = "Funding transaction was un-confirmed. Locked at 6 confs, now have 0 confs."; check_closed_event!(nodes[1], 1, ClosureReason::CounterpartyForceClosed { peer_msg: "Channel closed because of an exception: ".to_owned() + expected_err }); check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: expected_err.to_owned() }); assert_eq!(nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap().len(), 1); @@ -318,6 +315,11 @@ fn test_unconf_chan() { do_test_unconf_chan(false, true, false, ConnectStyle::BestBlockFirstSkippingBlocks); do_test_unconf_chan(true, false, false, ConnectStyle::BestBlockFirstSkippingBlocks); do_test_unconf_chan(false, false, false, ConnectStyle::BestBlockFirstSkippingBlocks); + + do_test_unconf_chan(true, true, false, ConnectStyle::BestBlockFirstReorgsOnlyTip); + do_test_unconf_chan(false, true, false, ConnectStyle::BestBlockFirstReorgsOnlyTip); + do_test_unconf_chan(true, false, false, ConnectStyle::BestBlockFirstReorgsOnlyTip); + do_test_unconf_chan(false, false, false, ConnectStyle::BestBlockFirstReorgsOnlyTip); } #[test] @@ -335,6 +337,11 @@ fn test_unconf_chan_via_funding_unconfirmed() { do_test_unconf_chan(true, false, true, ConnectStyle::BestBlockFirstSkippingBlocks); do_test_unconf_chan(false, false, true, ConnectStyle::BestBlockFirstSkippingBlocks); + do_test_unconf_chan(true, true, true, ConnectStyle::BestBlockFirstReorgsOnlyTip); + do_test_unconf_chan(false, true, true, ConnectStyle::BestBlockFirstReorgsOnlyTip); + do_test_unconf_chan(true, false, true, ConnectStyle::BestBlockFirstReorgsOnlyTip); + do_test_unconf_chan(false, false, true, ConnectStyle::BestBlockFirstReorgsOnlyTip); + do_test_unconf_chan(true, true, true, ConnectStyle::FullBlockViaListen); do_test_unconf_chan(false, true, true, ConnectStyle::FullBlockViaListen); do_test_unconf_chan(true, false, true, ConnectStyle::FullBlockViaListen); @@ -352,8 +359,8 @@ fn test_set_outpoints_partial_claiming() { let nodes = create_network(2, &node_cfgs, &node_chanmgrs); let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1000000, 59000000, InitFeatures::known(), InitFeatures::known()); - let payment_preimage_1 = route_payment(&nodes[1], &vec!(&nodes[0])[..], 3_000_000).0; - let payment_preimage_2 = route_payment(&nodes[1], &vec!(&nodes[0])[..], 3_000_000).0; + let (payment_preimage_1, payment_hash_1, _) = route_payment(&nodes[1], &[&nodes[0]], 3_000_000); + let (payment_preimage_2, payment_hash_2, _) = route_payment(&nodes[1], &[&nodes[0]], 3_000_000); // Remote commitment txn with 4 outputs: to_local, to_remote, 2 outgoing HTLC let remote_txn = get_local_commitment_txn!(nodes[1], chan.2); @@ -367,9 +374,10 @@ fn test_set_outpoints_partial_claiming() { // Connect blocks on node A to advance height towards TEST_FINAL_CLTV // Provide node A with both preimage nodes[0].node.claim_funds(payment_preimage_1); + expect_payment_claimed!(nodes[0], payment_hash_1, 3_000_000); nodes[0].node.claim_funds(payment_preimage_2); + expect_payment_claimed!(nodes[0], payment_hash_2, 3_000_000); check_added_monitors!(nodes[0], 2); - nodes[0].node.get_and_clear_pending_events(); nodes[0].node.get_and_clear_pending_msg_events(); // Connect blocks on node A commitment transaction @@ -543,7 +551,9 @@ fn do_test_to_remote_after_local_detection(style: ConnectStyle) { fn test_to_remote_after_local_detection() { do_test_to_remote_after_local_detection(ConnectStyle::BestBlockFirst); do_test_to_remote_after_local_detection(ConnectStyle::BestBlockFirstSkippingBlocks); + do_test_to_remote_after_local_detection(ConnectStyle::BestBlockFirstReorgsOnlyTip); do_test_to_remote_after_local_detection(ConnectStyle::TransactionsFirst); do_test_to_remote_after_local_detection(ConnectStyle::TransactionsFirstSkippingBlocks); + do_test_to_remote_after_local_detection(ConnectStyle::TransactionsFirstReorgsOnlyTip); do_test_to_remote_after_local_detection(ConnectStyle::FullBlockViaListen); }