X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Fln%2Fpayment_tests.rs;h=518ccd3b0efe5fd6fc75e4ba72eaadbec690205c;hb=61518f97212fd6a4c40cdd62a3ee5ab7a15d1971;hp=1b9836621e7761a3a0316c4f441ac4d2e826abbc;hpb=ca103491eb2d1ed0ce25e8b46b194898d38a5ab5;p=rust-lightning diff --git a/lightning/src/ln/payment_tests.rs b/lightning/src/ln/payment_tests.rs index 1b983662..518ccd3b 100644 --- a/lightning/src/ln/payment_tests.rs +++ b/lightning/src/ln/payment_tests.rs @@ -14,11 +14,10 @@ use chain::{ChannelMonitorUpdateErr, Confirm, Listen, Watch}; use chain::channelmonitor::{ANTI_REORG_DELAY, ChannelMonitor, LATENCY_GRACE_PERIOD_BLOCKS}; use chain::transaction::OutPoint; -use ln::{PaymentPreimage, PaymentHash}; use ln::channelmanager::{BREAKDOWN_TIMEOUT, ChannelManager, ChannelManagerReadArgs, PaymentId, PaymentSendFailure}; use ln::features::InitFeatures; use ln::msgs; -use ln::msgs::{ChannelMessageHandler, ErrorAction}; +use ln::msgs::ChannelMessageHandler; use util::events::{ClosureReason, Event, MessageSendEvent, MessageSendEventsProvider}; use util::test_utils; use util::errors::APIError; @@ -26,8 +25,6 @@ use util::enforcing_trait_impls::EnforcingSigner; use util::ser::{ReadableArgs, Writeable}; use io; -use bitcoin::hashes::sha256::Hash as Sha256; -use bitcoin::hashes::Hash; use bitcoin::{Block, BlockHeader, BlockHash}; use prelude::*; @@ -296,7 +293,7 @@ fn do_retry_with_no_persist(confirm_before_reload: bool) { let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs); let (_, _, chan_id, funding_tx) = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known()); - create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::known(), InitFeatures::known()); + let (_, _, chan_id_2, _) = create_announced_chan_between_nodes(&nodes, 1, 2, InitFeatures::known(), InitFeatures::known()); // Serialize the ChannelManager prior to sending payments let nodes_0_serialized = nodes[0].node.encode(); @@ -445,7 +442,13 @@ fn do_retry_with_no_persist(confirm_before_reload: bool) { // Finally, retry the payment (which was reloaded from the ChannelMonitor when nodes[0] was // reloaded) via a route over the new channel, which work without issue and eventually be // received and claimed at the recipient just like any other payment. - let (new_route, _, _, _) = get_route_and_payment_hash!(nodes[0], nodes[2], 1_000_000); + let (mut new_route, _, _, _) = get_route_and_payment_hash!(nodes[0], nodes[2], 1_000_000); + + // Update the fee on the middle hop to ensure PaymentSent events have the correct (retried) fee + // and not the original fee. We also update node[1]'s relevant config as + // do_claim_payment_along_route expects us to never overpay. + nodes[1].node.channel_state.lock().unwrap().by_id.get_mut(&chan_id_2).unwrap().config.forwarding_fee_base_msat += 100_000; + new_route.paths[0][0].fee_msat += 100_000; assert!(nodes[0].node.retry_payment(&new_route, payment_id_1).is_err()); // Shouldn't be allowed to retry a fulfilled payment nodes[0].node.retry_payment(&new_route, payment_id).unwrap(); @@ -453,7 +456,8 @@ fn do_retry_with_no_persist(confirm_before_reload: bool) { let mut events = nodes[0].node.get_and_clear_pending_msg_events(); assert_eq!(events.len(), 1); pass_along_path(&nodes[0], &[&nodes[1], &nodes[2]], 1_000_000, payment_hash, Some(payment_secret), events.pop().unwrap(), true, None); - claim_payment_along_route(&nodes[0], &[&[&nodes[1], &nodes[2]]], false, payment_preimage); + do_claim_payment_along_route(&nodes[0], &[&[&nodes[1], &nodes[2]]], false, payment_preimage); + expect_payment_sent!(nodes[0], payment_preimage, Some(new_route.paths[0][0].fee_msat)); } #[test] @@ -657,7 +661,7 @@ fn test_fulfill_restart_failure() { check_added_monitors!(nodes[1], 1); let htlc_fulfill_updates = get_htlc_update_msgs!(nodes[1], nodes[0].node.get_our_node_id()); nodes[0].node.handle_update_fulfill_htlc(&nodes[1].node.get_our_node_id(), &htlc_fulfill_updates.update_fulfill_htlcs[0]); - expect_payment_sent!(nodes[0], payment_preimage); + expect_payment_sent_without_paths!(nodes[0], payment_preimage); // Now reload nodes[1]... persister = test_utils::TestPersister::new(); @@ -700,4 +704,5 @@ fn test_fulfill_restart_failure() { commitment_signed_dance!(nodes[0], nodes[1], htlc_fail_updates.commitment_signed, false); // nodes[0] shouldn't generate any events here, while it just got a payment failure completion // it had already considered the payment fulfilled, and now they just got free money. + assert!(nodes[0].node.get_and_clear_pending_events().is_empty()); }