diff --git a/ci/check-lint.sh b/ci/check-lint.sh index 75b7124801a..cd013dfd17e 100755 --- a/ci/check-lint.sh +++ b/ci/check-lint.sh @@ -1,99 +1,113 @@ #!/bin/sh set -e set -x -RUSTFLAGS='-D warnings' cargo clippy -- \ - `# Things where clippy is just wrong` \ - -A clippy::unwrap-or-default \ - `# Errors` \ - -A clippy::erasing_op \ - -A clippy::never_loop \ - `# Warnings` \ - -A renamed_and_removed_lints \ - -A clippy::blocks_in_conditions \ - -A clippy::borrow_deref_ref \ - -A clippy::clone_on_copy \ - -A clippy::collapsible_else_if \ - -A clippy::collapsible_if \ - -A clippy::collapsible_match \ - -A clippy::comparison_chain \ - -A clippy::doc_lazy_continuation \ - -A clippy::drain_collect \ - -A clippy::drop_non_drop \ - -A clippy::enum_variant_names \ - -A clippy::explicit_auto_deref \ - -A clippy::extra_unused_lifetimes \ - -A clippy::for_kv_map \ - -A clippy::from_over_into \ - -A clippy::get_first \ - -A clippy::identity_op \ - -A clippy::if_same_then_else \ - -A clippy::inconsistent_digit_grouping \ - -A clippy::iter_kv_map \ - -A clippy::iter_skip_next \ - -A clippy::large_enum_variant \ - -A clippy::legacy_numeric_constants \ - -A clippy::len_without_is_empty \ - -A clippy::len_zero \ - -A clippy::let_and_return \ - -A clippy::manual_div_ceil `# to be removed once we hit MSRV 1.73.0` \ - -A clippy::manual_filter \ - -A clippy::manual_map \ - -A clippy::manual_memcpy \ - -A clippy::manual_inspect \ - -A clippy::manual_range_contains \ - -A clippy::manual_range_patterns \ - -A clippy::manual_saturating_arithmetic \ - -A clippy::manual_strip \ - -A clippy::map_clone \ - -A clippy::map_flatten \ - -A clippy::match_like_matches_macro \ - -A clippy::match_ref_pats \ - -A clippy::multiple_bound_locations \ - -A clippy::mut_mutex_lock \ - -A clippy::needless_bool \ - -A clippy::needless_borrow \ - -A clippy::needless_borrowed_reference \ - -A clippy::needless_borrows_for_generic_args \ - -A clippy::needless_lifetimes \ - -A clippy::needless_question_mark \ - -A clippy::needless_range_loop \ - -A clippy::needless_return \ - -A clippy::new_without_default \ - -A clippy::non_minimal_cfg \ - -A clippy::op_ref \ - -A clippy::option_as_ref_deref \ - -A clippy::option_map_or_none \ - -A clippy::option_map_unit_fn \ - -A clippy::precedence \ - -A clippy::ptr_arg \ - -A clippy::question_mark \ - -A clippy::readonly_write_lock \ - -A clippy::redundant_closure \ - -A clippy::redundant_field_names \ - -A clippy::redundant_guards \ - -A clippy::redundant_pattern_matching \ - -A clippy::redundant_slicing \ - -A clippy::redundant_static_lifetimes \ - -A clippy::result_large_err \ - -A clippy::result_unit_err \ - -A clippy::search_is_some \ - -A clippy::single_char_pattern \ - -A clippy::single_match \ - -A clippy::slow_vector_initialization \ - -A clippy::tabs_in_doc_comments \ - -A clippy::to_string_in_format_args \ - -A clippy::too_many_arguments \ - -A clippy::toplevel_ref_arg \ - -A clippy::type_complexity \ - -A clippy::unnecessary_cast \ - -A clippy::unnecessary_get_then_check \ - -A clippy::unnecessary_lazy_evaluations \ - -A clippy::unnecessary_mut_passed \ - -A clippy::unnecessary_sort_by \ - -A clippy::unnecessary_to_owned \ - -A clippy::unnecessary_unwrap \ - -A clippy::unused_unit \ - -A clippy::useless_conversion \ - -A clippy::unnecessary_map_or `# to be removed once we hit MSRV 1.70` \ - -A clippy::manual_repeat_n `# to be removed once we hit MSRV 1.86` \ - -A clippy::io_other_error `# to be removed once we hit MSRV 1.74` + +CLIPPY() { + # shellcheck disable=SC2086 + RUSTFLAGS='-D warnings' cargo clippy $1 -- $2 \ + `# Things clippy defaults to allowing but we should avoid` \ + -D clippy::clone_on_ref_ptr \ + `# Things where clippy is just wrong` \ + -A clippy::unwrap-or-default \ + -A clippy::upper_case_acronyms \ + `# Things where we do odd stuff on purpose ` \ + -A clippy::unusual_byte_groupings \ + -A clippy::unit_arg \ + `# Errors` \ + -A clippy::erasing_op \ + -A clippy::never_loop \ + `# Warnings` \ + -A renamed_and_removed_lints \ + -A clippy::blocks_in_conditions \ + -A clippy::borrow_deref_ref \ + -A clippy::clone_on_copy \ + -A clippy::collapsible_else_if \ + -A clippy::collapsible_if \ + -A clippy::collapsible_match \ + -A clippy::comparison_chain \ + -A clippy::doc_lazy_continuation \ + -A clippy::drain_collect \ + -A clippy::drop_non_drop \ + -A clippy::enum_variant_names \ + -A clippy::explicit_auto_deref \ + -A clippy::extra_unused_lifetimes \ + -A clippy::for_kv_map \ + -A clippy::from_over_into \ + -A clippy::get_first \ + -A clippy::identity_op \ + -A clippy::if_same_then_else \ + -A clippy::inconsistent_digit_grouping \ + -A clippy::iter_kv_map \ + -A clippy::iter_skip_next \ + -A clippy::large_enum_variant \ + -A clippy::legacy_numeric_constants \ + -A clippy::len_without_is_empty \ + -A clippy::len_zero \ + -A clippy::let_and_return \ + -A clippy::manual_div_ceil `# to be removed once we hit MSRV 1.73.0` \ + -A clippy::manual_filter \ + -A clippy::manual_map \ + -A clippy::manual_memcpy \ + -A clippy::manual_inspect \ + -A clippy::manual_range_contains \ + -A clippy::manual_range_patterns \ + -A clippy::manual_saturating_arithmetic \ + -A clippy::manual_strip \ + -A clippy::map_clone \ + -A clippy::map_flatten \ + -A clippy::match_like_matches_macro \ + -A clippy::match_ref_pats \ + -A clippy::multiple_bound_locations \ + -A clippy::mut_mutex_lock \ + -A clippy::needless_bool \ + -A clippy::needless_borrow \ + -A clippy::needless_borrowed_reference \ + -A clippy::needless_borrows_for_generic_args \ + -A clippy::needless_lifetimes \ + -A clippy::needless_question_mark \ + -A clippy::needless_range_loop \ + -A clippy::needless_return \ + -A clippy::new_without_default \ + -A clippy::non_minimal_cfg \ + -A clippy::op_ref \ + -A clippy::option_as_ref_deref \ + -A clippy::option_map_or_none \ + -A clippy::option_map_unit_fn \ + -A clippy::precedence \ + -A clippy::ptr_arg \ + -A clippy::question_mark \ + -A clippy::readonly_write_lock \ + -A clippy::redundant_closure \ + -A clippy::redundant_field_names \ + -A clippy::redundant_guards \ + -A clippy::redundant_pattern_matching \ + -A clippy::redundant_slicing \ + -A clippy::redundant_static_lifetimes \ + -A clippy::result_large_err \ + -A clippy::result_unit_err \ + -A clippy::search_is_some \ + -A clippy::single_char_pattern \ + -A clippy::single_match \ + -A clippy::slow_vector_initialization \ + -A clippy::tabs_in_doc_comments \ + -A clippy::to_string_in_format_args \ + -A clippy::too_many_arguments \ + -A clippy::toplevel_ref_arg \ + -A clippy::type_complexity \ + -A clippy::unnecessary_cast \ + -A clippy::unnecessary_get_then_check \ + -A clippy::unnecessary_lazy_evaluations \ + -A clippy::unnecessary_mut_passed \ + -A clippy::unnecessary_sort_by \ + -A clippy::unnecessary_to_owned \ + -A clippy::unnecessary_unwrap \ + -A clippy::unused_unit \ + -A clippy::useless_conversion \ + -A clippy::unnecessary_map_or `# to be removed once we hit MSRV 1.70` \ + -A clippy::manual_repeat_n `# to be removed once we hit MSRV 1.86` \ + -A clippy::io_other_error `# to be removed once we hit MSRV 1.74` +} + +CLIPPY +# We allow some additional warnings in tests which we should fix, but which aren't currently a priority +CLIPPY --tests "-A clippy::bool_assert_comparison -A clippy::assertions_on_constants -A clippy::needless-late-init -A clippy::field_reassign_with_default -A clippy::unnecessary_literal_unwrap -A clippy::useless_vec" diff --git a/lightning-background-processor/src/lib.rs b/lightning-background-processor/src/lib.rs index dda54362e35..96c8ecc798a 100644 --- a/lightning-background-processor/src/lib.rs +++ b/lightning-background-processor/src/lib.rs @@ -1021,7 +1021,7 @@ impl BackgroundProcessor { K::Target: 'static + KVStore, { let stop_thread = Arc::new(AtomicBool::new(false)); - let stop_thread_clone = stop_thread.clone(); + let stop_thread_clone = Arc::clone(&stop_thread); let handle = thread::spawn(move || -> Result<(), std::io::Error> { let event_handler = |event| { let network_graph = gossip_sync.network_graph(); @@ -1343,7 +1343,7 @@ mod tests { Arc, Arc, > { - GossipSync::P2P(self.p2p_gossip_sync.clone()) + GossipSync::P2P(Arc::clone(&self.p2p_gossip_sync)) } fn rapid_gossip_sync( @@ -1355,7 +1355,7 @@ mod tests { Arc, Arc, > { - GossipSync::Rapid(self.rapid_gossip_sync.clone()) + GossipSync::Rapid(Arc::clone(&self.rapid_gossip_sync)) } fn no_gossip_sync( @@ -1644,20 +1644,20 @@ mod tests { let fee_estimator = Arc::new(test_utils::TestFeeEstimator::new(253)); let logger = Arc::new(test_utils::TestLogger::with_id(format!("node {}", i))); let genesis_block = genesis_block(network); - let network_graph = Arc::new(NetworkGraph::new(network, logger.clone())); + let network_graph = Arc::new(NetworkGraph::new(network, Arc::clone(&logger))); let scorer = Arc::new(LockingWrapper::new(TestScorer::new())); let now = Duration::from_secs(genesis_block.header.time as u64); let seed = [i as u8; 32]; let keys_manager = Arc::new(KeysManager::new(&seed, now.as_secs(), now.subsec_nanos())); let router = Arc::new(DefaultRouter::new( - network_graph.clone(), - logger.clone(), + Arc::clone(&network_graph), + Arc::clone(&logger), Arc::clone(&keys_manager), - scorer.clone(), + Arc::clone(&scorer), Default::default(), )); let msg_router = Arc::new(DefaultMessageRouter::new( - network_graph.clone(), + Arc::clone(&network_graph), Arc::clone(&keys_manager), )); let chain_source = Arc::new(test_utils::TestChainSource::new(Network::Bitcoin)); @@ -1666,38 +1666,38 @@ mod tests { let now = Duration::from_secs(genesis_block.header.time as u64); let keys_manager = Arc::new(KeysManager::new(&seed, now.as_secs(), now.subsec_nanos())); let chain_monitor = Arc::new(chainmonitor::ChainMonitor::new( - Some(chain_source.clone()), - tx_broadcaster.clone(), - logger.clone(), - fee_estimator.clone(), - kv_store.clone(), - keys_manager.clone(), + Some(Arc::clone(&chain_source)), + Arc::clone(&tx_broadcaster), + Arc::clone(&logger), + Arc::clone(&fee_estimator), + Arc::clone(&kv_store), + Arc::clone(&keys_manager), keys_manager.get_peer_storage_key(), )); let best_block = BestBlock::from_network(network); let params = ChainParameters { network, best_block }; let manager = Arc::new(ChannelManager::new( - fee_estimator.clone(), - chain_monitor.clone(), - tx_broadcaster.clone(), - router.clone(), - msg_router.clone(), - logger.clone(), - keys_manager.clone(), - keys_manager.clone(), - keys_manager.clone(), + Arc::clone(&fee_estimator), + Arc::clone(&chain_monitor), + Arc::clone(&tx_broadcaster), + Arc::clone(&router), + Arc::clone(&msg_router), + Arc::clone(&logger), + Arc::clone(&keys_manager), + Arc::clone(&keys_manager), + Arc::clone(&keys_manager), UserConfig::default(), params, genesis_block.header.time, )); let messenger = Arc::new(OnionMessenger::new( - keys_manager.clone(), - keys_manager.clone(), - logger.clone(), - manager.clone(), - msg_router.clone(), + Arc::clone(&keys_manager), + Arc::clone(&keys_manager), + Arc::clone(&logger), + Arc::clone(&manager), + Arc::clone(&msg_router), IgnoringMessageHandler {}, - manager.clone(), + Arc::clone(&manager), IgnoringMessageHandler {}, IgnoringMessageHandler {}, )); @@ -1713,18 +1713,18 @@ mod tests { Arc::clone(&logger), )); let p2p_gossip_sync = Arc::new(P2PGossipSync::new( - network_graph.clone(), - Some(chain_source.clone()), - logger.clone(), + Arc::clone(&network_graph), + Some(Arc::clone(&chain_source)), + Arc::clone(&logger), )); let rapid_gossip_sync = - Arc::new(RapidGossipSync::new(network_graph.clone(), logger.clone())); + Arc::new(RapidGossipSync::new(Arc::clone(&network_graph), Arc::clone(&logger))); let msg_handler = MessageHandler { chan_handler: Arc::new(test_utils::TestChannelMessageHandler::new( ChainHash::using_genesis_block(Network::Testnet), )), route_handler: Arc::new(test_utils::TestRoutingMessageHandler::new()), - onion_message_handler: messenger.clone(), + onion_message_handler: Arc::clone(&messenger), custom_message_handler: IgnoringMessageHandler {}, send_only_message_handler: IgnoringMessageHandler {}, }; @@ -1732,8 +1732,8 @@ mod tests { msg_handler, 0, &seed, - logger.clone(), - keys_manager.clone(), + Arc::clone(&logger), + Arc::clone(&keys_manager), )); let liquidity_manager = Arc::new(LiquidityManager::new( Arc::clone(&keys_manager), @@ -1941,15 +1941,15 @@ mod tests { let bg_processor = BackgroundProcessor::start( persister, event_handler, - nodes[0].chain_monitor.clone(), - nodes[0].node.clone(), - Some(nodes[0].messenger.clone()), + Arc::clone(&nodes[0].chain_monitor), + Arc::clone(&nodes[0].node), + Some(Arc::clone(&nodes[0].messenger)), nodes[0].p2p_gossip_sync(), - nodes[0].peer_manager.clone(), + Arc::clone(&nodes[0].peer_manager), Some(Arc::clone(&nodes[0].liquidity_manager)), - Some(nodes[0].sweeper.clone()), - nodes[0].logger.clone(), - Some(nodes[0].scorer.clone()), + Some(Arc::clone(&nodes[0].sweeper)), + Arc::clone(&nodes[0].logger), + Some(Arc::clone(&nodes[0].scorer)), ); macro_rules! check_persisted_data { @@ -2036,15 +2036,15 @@ mod tests { let bg_processor = BackgroundProcessor::start( persister, event_handler, - nodes[0].chain_monitor.clone(), - nodes[0].node.clone(), - Some(nodes[0].messenger.clone()), + Arc::clone(&nodes[0].chain_monitor), + Arc::clone(&nodes[0].node), + Some(Arc::clone(&nodes[0].messenger)), nodes[0].no_gossip_sync(), - nodes[0].peer_manager.clone(), + Arc::clone(&nodes[0].peer_manager), Some(Arc::clone(&nodes[0].liquidity_manager)), - Some(nodes[0].sweeper.clone()), - nodes[0].logger.clone(), - Some(nodes[0].scorer.clone()), + Some(Arc::clone(&nodes[0].sweeper)), + Arc::clone(&nodes[0].logger), + Some(Arc::clone(&nodes[0].scorer)), ); loop { let log_entries = nodes[0].logger.lines.lock().unwrap(); @@ -2080,15 +2080,15 @@ mod tests { let bg_processor = BackgroundProcessor::start( persister, event_handler, - nodes[0].chain_monitor.clone(), - nodes[0].node.clone(), - Some(nodes[0].messenger.clone()), + Arc::clone(&nodes[0].chain_monitor), + Arc::clone(&nodes[0].node), + Some(Arc::clone(&nodes[0].messenger)), nodes[0].no_gossip_sync(), - nodes[0].peer_manager.clone(), + Arc::clone(&nodes[0].peer_manager), Some(Arc::clone(&nodes[0].liquidity_manager)), - Some(nodes[0].sweeper.clone()), - nodes[0].logger.clone(), - Some(nodes[0].scorer.clone()), + Some(Arc::clone(&nodes[0].sweeper)), + Arc::clone(&nodes[0].logger), + Some(Arc::clone(&nodes[0].scorer)), ); match bg_processor.join() { Ok(_) => panic!("Expected error persisting manager"), @@ -2113,15 +2113,15 @@ mod tests { let bp_future = super::process_events_async( persister, |_: _| async { Ok(()) }, - nodes[0].chain_monitor.clone(), - nodes[0].node.clone(), - Some(nodes[0].messenger.clone()), + Arc::clone(&nodes[0].chain_monitor), + Arc::clone(&nodes[0].node), + Some(Arc::clone(&nodes[0].messenger)), nodes[0].rapid_gossip_sync(), - nodes[0].peer_manager.clone(), + Arc::clone(&nodes[0].peer_manager), Some(Arc::clone(&nodes[0].liquidity_manager)), Some(nodes[0].sweeper.sweeper_async()), - nodes[0].logger.clone(), - Some(nodes[0].scorer.clone()), + Arc::clone(&nodes[0].logger), + Some(Arc::clone(&nodes[0].scorer)), move |dur: Duration| { Box::pin(async move { tokio::time::sleep(dur).await; @@ -2151,15 +2151,15 @@ mod tests { let bg_processor = BackgroundProcessor::start( persister, event_handler, - nodes[0].chain_monitor.clone(), - nodes[0].node.clone(), - Some(nodes[0].messenger.clone()), + Arc::clone(&nodes[0].chain_monitor), + Arc::clone(&nodes[0].node), + Some(Arc::clone(&nodes[0].messenger)), nodes[0].p2p_gossip_sync(), - nodes[0].peer_manager.clone(), + Arc::clone(&nodes[0].peer_manager), Some(Arc::clone(&nodes[0].liquidity_manager)), - Some(nodes[0].sweeper.clone()), - nodes[0].logger.clone(), - Some(nodes[0].scorer.clone()), + Some(Arc::clone(&nodes[0].sweeper)), + Arc::clone(&nodes[0].logger), + Some(Arc::clone(&nodes[0].scorer)), ); match bg_processor.stop() { @@ -2182,15 +2182,15 @@ mod tests { let bg_processor = BackgroundProcessor::start( persister, event_handler, - nodes[0].chain_monitor.clone(), - nodes[0].node.clone(), - Some(nodes[0].messenger.clone()), + Arc::clone(&nodes[0].chain_monitor), + Arc::clone(&nodes[0].node), + Some(Arc::clone(&nodes[0].messenger)), nodes[0].no_gossip_sync(), - nodes[0].peer_manager.clone(), + Arc::clone(&nodes[0].peer_manager), Some(Arc::clone(&nodes[0].liquidity_manager)), - Some(nodes[0].sweeper.clone()), - nodes[0].logger.clone(), - Some(nodes[0].scorer.clone()), + Some(Arc::clone(&nodes[0].sweeper)), + Arc::clone(&nodes[0].logger), + Some(Arc::clone(&nodes[0].scorer)), ); match bg_processor.stop() { @@ -2230,15 +2230,15 @@ mod tests { let bg_processor = BackgroundProcessor::start( persister, event_handler, - nodes[0].chain_monitor.clone(), - nodes[0].node.clone(), - Some(nodes[0].messenger.clone()), + Arc::clone(&nodes[0].chain_monitor), + Arc::clone(&nodes[0].node), + Some(Arc::clone(&nodes[0].messenger)), nodes[0].no_gossip_sync(), - nodes[0].peer_manager.clone(), + Arc::clone(&nodes[0].peer_manager), Some(Arc::clone(&nodes[0].liquidity_manager)), - Some(nodes[0].sweeper.clone()), - nodes[0].logger.clone(), - Some(nodes[0].scorer.clone()), + Some(Arc::clone(&nodes[0].sweeper)), + Arc::clone(&nodes[0].logger), + Some(Arc::clone(&nodes[0].scorer)), ); // Open a channel and check that the FundingGenerationReady event was handled. @@ -2255,7 +2255,7 @@ mod tests { get_event!(nodes[1], Event::ChannelPending); let msg_1 = get_event_msg!(nodes[1], MessageSendEvent::SendFundingSigned, node_0_id); nodes[0].node.handle_funding_signed(node_1_id, &msg_1); - let _ = channel_pending_recv + channel_pending_recv .recv_timeout(Duration::from_secs(EVENT_DEADLINE)) .expect("ChannelPending not handled within deadline"); @@ -2294,15 +2294,15 @@ mod tests { let bg_processor = BackgroundProcessor::start( persister, event_handler, - nodes[0].chain_monitor.clone(), - nodes[0].node.clone(), - Some(nodes[0].messenger.clone()), + Arc::clone(&nodes[0].chain_monitor), + Arc::clone(&nodes[0].node), + Some(Arc::clone(&nodes[0].messenger)), nodes[0].no_gossip_sync(), - nodes[0].peer_manager.clone(), + Arc::clone(&nodes[0].peer_manager), Some(Arc::clone(&nodes[0].liquidity_manager)), - Some(nodes[0].sweeper.clone()), - nodes[0].logger.clone(), - Some(nodes[0].scorer.clone()), + Some(Arc::clone(&nodes[0].sweeper)), + Arc::clone(&nodes[0].logger), + Some(Arc::clone(&nodes[0].scorer)), ); // Force close the channel and check that the SpendableOutputs event was handled. @@ -2346,7 +2346,7 @@ mod tests { advance_chain(&mut nodes[0], 3); - let tx_broadcaster = nodes[0].tx_broadcaster.clone(); + let tx_broadcaster = Arc::clone(&nodes[0].tx_broadcaster); let wait_for_sweep_tx = || -> Transaction { loop { let sweep_tx = tx_broadcaster.txn_broadcasted.lock().unwrap().pop(); @@ -2459,15 +2459,15 @@ mod tests { let bg_processor = BackgroundProcessor::start( persister, event_handler, - nodes[0].chain_monitor.clone(), - nodes[0].node.clone(), - Some(nodes[0].messenger.clone()), + Arc::clone(&nodes[0].chain_monitor), + Arc::clone(&nodes[0].node), + Some(Arc::clone(&nodes[0].messenger)), nodes[0].no_gossip_sync(), - nodes[0].peer_manager.clone(), + Arc::clone(&nodes[0].peer_manager), Some(Arc::clone(&nodes[0].liquidity_manager)), - Some(nodes[0].sweeper.clone()), - nodes[0].logger.clone(), - Some(nodes[0].scorer.clone()), + Some(Arc::clone(&nodes[0].sweeper)), + Arc::clone(&nodes[0].logger), + Some(Arc::clone(&nodes[0].scorer)), ); begin_open_channel!(nodes[0], nodes[1], channel_value); @@ -2490,15 +2490,15 @@ mod tests { let bg_processor = BackgroundProcessor::start( persister, event_handler, - nodes[0].chain_monitor.clone(), - nodes[0].node.clone(), - Some(nodes[0].messenger.clone()), + Arc::clone(&nodes[0].chain_monitor), + Arc::clone(&nodes[0].node), + Some(Arc::clone(&nodes[0].messenger)), nodes[0].no_gossip_sync(), - nodes[0].peer_manager.clone(), + Arc::clone(&nodes[0].peer_manager), Some(Arc::clone(&nodes[0].liquidity_manager)), - Some(nodes[0].sweeper.clone()), - nodes[0].logger.clone(), - Some(nodes[0].scorer.clone()), + Some(Arc::clone(&nodes[0].sweeper)), + Arc::clone(&nodes[0].logger), + Some(Arc::clone(&nodes[0].scorer)), ); loop { @@ -2587,15 +2587,15 @@ mod tests { let background_processor = BackgroundProcessor::start( persister, event_handler, - nodes[0].chain_monitor.clone(), - nodes[0].node.clone(), - Some(nodes[0].messenger.clone()), + Arc::clone(&nodes[0].chain_monitor), + Arc::clone(&nodes[0].node), + Some(Arc::clone(&nodes[0].messenger)), nodes[0].rapid_gossip_sync(), - nodes[0].peer_manager.clone(), + Arc::clone(&nodes[0].peer_manager), Some(Arc::clone(&nodes[0].liquidity_manager)), - Some(nodes[0].sweeper.clone()), - nodes[0].logger.clone(), - Some(nodes[0].scorer.clone()), + Some(Arc::clone(&nodes[0].sweeper)), + Arc::clone(&nodes[0].logger), + Some(Arc::clone(&nodes[0].scorer)), ); do_test_not_pruning_network_graph_until_graph_sync_completion!( @@ -2620,15 +2620,15 @@ mod tests { let bp_future = super::process_events_async( persister, |_: _| async { Ok(()) }, - nodes[0].chain_monitor.clone(), - nodes[0].node.clone(), - Some(nodes[0].messenger.clone()), + Arc::clone(&nodes[0].chain_monitor), + Arc::clone(&nodes[0].node), + Some(Arc::clone(&nodes[0].messenger)), nodes[0].rapid_gossip_sync(), - nodes[0].peer_manager.clone(), + Arc::clone(&nodes[0].peer_manager), Some(Arc::clone(&nodes[0].liquidity_manager)), Some(nodes[0].sweeper.sweeper_async()), - nodes[0].logger.clone(), - Some(nodes[0].scorer.clone()), + Arc::clone(&nodes[0].logger), + Some(Arc::clone(&nodes[0].scorer)), move |dur: Duration| { let mut exit_receiver = exit_receiver.clone(); Box::pin(async move { @@ -2784,15 +2784,15 @@ mod tests { let bg_processor = BackgroundProcessor::start( persister, event_handler, - nodes[0].chain_monitor.clone(), - nodes[0].node.clone(), - Some(nodes[0].messenger.clone()), + Arc::clone(&nodes[0].chain_monitor), + Arc::clone(&nodes[0].node), + Some(Arc::clone(&nodes[0].messenger)), nodes[0].no_gossip_sync(), - nodes[0].peer_manager.clone(), + Arc::clone(&nodes[0].peer_manager), Some(Arc::clone(&nodes[0].liquidity_manager)), - Some(nodes[0].sweeper.clone()), - nodes[0].logger.clone(), - Some(nodes[0].scorer.clone()), + Some(Arc::clone(&nodes[0].sweeper)), + Arc::clone(&nodes[0].logger), + Some(Arc::clone(&nodes[0].scorer)), ); do_test_payment_path_scoring!( @@ -2835,15 +2835,15 @@ mod tests { let bp_future = super::process_events_async( persister, event_handler, - nodes[0].chain_monitor.clone(), - nodes[0].node.clone(), - Some(nodes[0].messenger.clone()), + Arc::clone(&nodes[0].chain_monitor), + Arc::clone(&nodes[0].node), + Some(Arc::clone(&nodes[0].messenger)), nodes[0].no_gossip_sync(), - nodes[0].peer_manager.clone(), + Arc::clone(&nodes[0].peer_manager), Some(Arc::clone(&nodes[0].liquidity_manager)), Some(nodes[0].sweeper.sweeper_async()), - nodes[0].logger.clone(), - Some(nodes[0].scorer.clone()), + Arc::clone(&nodes[0].logger), + Some(Arc::clone(&nodes[0].scorer)), move |dur: Duration| { let mut exit_receiver = exit_receiver.clone(); Box::pin(async move { diff --git a/lightning-invoice/src/de.rs b/lightning-invoice/src/de.rs index 85a0924ce22..fd3c4addaef 100644 --- a/lightning-invoice/src/de.rs +++ b/lightning-invoice/src/de.rs @@ -1025,37 +1025,38 @@ mod test { fqxu92d8lr6fvg0r5gv0heeeqgcrqlnm6jhphu9y00rrhy4grqszsvpcgpy9qqqqqqgqqqqq7qqzq".as_bytes() ); - let mut expected = Vec::::new(); - expected.push(RouteHintHop { - src_node_id: PublicKey::from_slice( - &[ - 0x02u8, 0x9e, 0x03, 0xa9, 0x01, 0xb8, 0x55, 0x34, 0xff, 0x1e, 0x92, 0xc4, 0x3c, - 0x74, 0x43, 0x1f, 0x7c, 0xe7, 0x20, 0x46, 0x06, 0x0f, 0xcf, 0x7a, 0x95, 0xc3, - 0x7e, 0x14, 0x8f, 0x78, 0xc7, 0x72, 0x55, - ][..], - ) - .unwrap(), - short_channel_id: 0x0102030405060708, - fees: RoutingFees { base_msat: 1, proportional_millionths: 20 }, - cltv_expiry_delta: 3, - htlc_minimum_msat: None, - htlc_maximum_msat: None, - }); - expected.push(RouteHintHop { - src_node_id: PublicKey::from_slice( - &[ - 0x03u8, 0x9e, 0x03, 0xa9, 0x01, 0xb8, 0x55, 0x34, 0xff, 0x1e, 0x92, 0xc4, 0x3c, - 0x74, 0x43, 0x1f, 0x7c, 0xe7, 0x20, 0x46, 0x06, 0x0f, 0xcf, 0x7a, 0x95, 0xc3, - 0x7e, 0x14, 0x8f, 0x78, 0xc7, 0x72, 0x55, - ][..], - ) - .unwrap(), - short_channel_id: 0x030405060708090a, - fees: RoutingFees { base_msat: 2, proportional_millionths: 30 }, - cltv_expiry_delta: 4, - htlc_minimum_msat: None, - htlc_maximum_msat: None, - }); + let expected = vec![ + RouteHintHop { + src_node_id: PublicKey::from_slice( + &[ + 0x02u8, 0x9e, 0x03, 0xa9, 0x01, 0xb8, 0x55, 0x34, 0xff, 0x1e, 0x92, 0xc4, + 0x3c, 0x74, 0x43, 0x1f, 0x7c, 0xe7, 0x20, 0x46, 0x06, 0x0f, 0xcf, 0x7a, + 0x95, 0xc3, 0x7e, 0x14, 0x8f, 0x78, 0xc7, 0x72, 0x55, + ][..], + ) + .unwrap(), + short_channel_id: 0x0102030405060708, + fees: RoutingFees { base_msat: 1, proportional_millionths: 20 }, + cltv_expiry_delta: 3, + htlc_minimum_msat: None, + htlc_maximum_msat: None, + }, + RouteHintHop { + src_node_id: PublicKey::from_slice( + &[ + 0x03u8, 0x9e, 0x03, 0xa9, 0x01, 0xb8, 0x55, 0x34, 0xff, 0x1e, 0x92, 0xc4, + 0x3c, 0x74, 0x43, 0x1f, 0x7c, 0xe7, 0x20, 0x46, 0x06, 0x0f, 0xcf, 0x7a, + 0x95, 0xc3, 0x7e, 0x14, 0x8f, 0x78, 0xc7, 0x72, 0x55, + ][..], + ) + .unwrap(), + short_channel_id: 0x030405060708090a, + fees: RoutingFees { base_msat: 2, proportional_millionths: 30 }, + cltv_expiry_delta: 4, + htlc_minimum_msat: None, + htlc_maximum_msat: None, + }, + ]; assert_eq!(PrivateRoute::from_base32(&input), Ok(PrivateRoute(RouteHint(expected)))); @@ -1316,7 +1317,7 @@ mod test { "0001020304050607080900010203040506070809000102030405060708090102", ) .unwrap(); - let description = std::iter::repeat("A").take(639).collect::(); + let description = "A".repeat(639); let fallback_addr = crate::Fallback::SegWitProgram { version: bitcoin::WitnessVersion::V0, program: vec![0; 32], diff --git a/lightning-invoice/src/test_ser_de.rs b/lightning-invoice/src/test_ser_de.rs index 92b6c778d6c..e2e4d764ac2 100644 --- a/lightning-invoice/src/test_ser_de.rs +++ b/lightning-invoice/src/test_ser_de.rs @@ -269,7 +269,7 @@ fn private_route() { use crate::{PrivateRoute, PublicKey, RouteHint, RouteHintHop, RoutingFees}; let private_route = PrivateRoute(RouteHint(vec![RouteHintHop { - src_node_id: PublicKey::from_slice(&vec![2; 33]).unwrap(), + src_node_id: PublicKey::from_slice(&[2; 33]).unwrap(), short_channel_id: 0x0102030405060708, fees: RoutingFees { base_msat: 1, proportional_millionths: 20 }, cltv_expiry_delta: 3, diff --git a/lightning-liquidity/src/lsps0/service.rs b/lightning-liquidity/src/lsps0/service.rs index be9549e7519..4a595ab3d2f 100644 --- a/lightning-liquidity/src/lsps0/service.rs +++ b/lightning-liquidity/src/lsps0/service.rs @@ -93,7 +93,8 @@ mod tests { let protocols: Vec = vec![]; let pending_messages = Arc::new(MessageQueue::new()); - let lsps0_handler = Arc::new(LSPS0ServiceHandler::new(protocols, pending_messages.clone())); + let lsps0_handler = + Arc::new(LSPS0ServiceHandler::new(protocols, Arc::clone(&pending_messages))); let list_protocols_request = LSPS0Message::Request( LSPSRequestId("xyz123".to_string()), diff --git a/lightning-liquidity/src/tests/utils.rs b/lightning-liquidity/src/tests/utils.rs index 204873ed11a..24c2aa39672 100644 --- a/lightning-liquidity/src/tests/utils.rs +++ b/lightning-liquidity/src/tests/utils.rs @@ -40,10 +40,7 @@ pub fn to_compressed_pubkey(hex: &str) -> Option { Some(bytes) => bytes, None => return None, }; - match PublicKey::from_slice(&data) { - Ok(pk) => Some(pk), - Err(_) => None, - } + PublicKey::from_slice(&data).ok() } pub fn parse_pubkey(pubkey_str: &str) -> Result { diff --git a/lightning-liquidity/tests/common/mod.rs b/lightning-liquidity/tests/common/mod.rs index 7d5ff0280e0..ebf2afdaadd 100644 --- a/lightning-liquidity/tests/common/mod.rs +++ b/lightning-liquidity/tests/common/mod.rs @@ -408,16 +408,16 @@ pub(crate) fn create_liquidity_node( let fee_estimator = Arc::new(test_utils::TestFeeEstimator::new(253)); let logger = Arc::new(test_utils::TestLogger::with_id(format!("node {}", i))); let genesis_block = genesis_block(network); - let network_graph = Arc::new(NetworkGraph::new(network, logger.clone())); + let network_graph = Arc::new(NetworkGraph::new(network, Arc::clone(&logger))); let scorer = Arc::new(LockingWrapper::new(TestScorer::new())); let now = Duration::from_secs(genesis_block.header.time as u64); let seed = [i as u8; 32]; let keys_manager = Arc::new(KeysManager::new(&seed, now.as_secs(), now.subsec_nanos())); let router = Arc::new(DefaultRouter::new( Arc::clone(&network_graph), - logger.clone(), - keys_manager.clone(), - scorer.clone(), + Arc::clone(&logger), + Arc::clone(&keys_manager), + Arc::clone(&scorer), Default::default(), )); let msg_router = @@ -426,34 +426,34 @@ pub(crate) fn create_liquidity_node( let kv_store = Arc::new(FilesystemStore::new(format!("{}_persister_{}", &persist_dir, i).into())); let chain_monitor = Arc::new(chainmonitor::ChainMonitor::new( - Some(chain_source.clone()), - tx_broadcaster.clone(), - logger.clone(), - fee_estimator.clone(), - kv_store.clone(), - keys_manager.clone(), + Some(Arc::clone(&chain_source)), + Arc::clone(&tx_broadcaster), + Arc::clone(&logger), + Arc::clone(&fee_estimator), + Arc::clone(&kv_store), + Arc::clone(&keys_manager), keys_manager.get_peer_storage_key(), )); let best_block = BestBlock::from_network(network); let chain_params = ChainParameters { network, best_block }; let channel_manager = Arc::new(ChannelManager::new( - fee_estimator.clone(), - chain_monitor.clone(), - tx_broadcaster.clone(), - router.clone(), - msg_router.clone(), - logger.clone(), - keys_manager.clone(), - keys_manager.clone(), - keys_manager.clone(), + Arc::clone(&fee_estimator), + Arc::clone(&chain_monitor), + Arc::clone(&tx_broadcaster), + Arc::clone(&router), + Arc::clone(&msg_router), + Arc::clone(&logger), + Arc::clone(&keys_manager), + Arc::clone(&keys_manager), + Arc::clone(&keys_manager), UserConfig::default(), chain_params, genesis_block.header.time, )); let p2p_gossip_sync = Arc::new(P2PGossipSync::new( - network_graph.clone(), - Some(chain_source.clone()), - logger.clone(), + Arc::clone(&network_graph), + Some(Arc::clone(&chain_source)), + Arc::clone(&logger), )); let liquidity_manager = Arc::new(LiquidityManager::new( @@ -474,13 +474,13 @@ pub(crate) fn create_liquidity_node( send_only_message_handler: Arc::clone(&chain_monitor), }; let peer_manager = - Arc::new(PeerManager::new(msg_handler, 0, &seed, logger.clone(), keys_manager.clone())); + PeerManager::new(msg_handler, 0, &seed, Arc::clone(&logger), Arc::clone(&keys_manager)); Node { channel_manager, keys_manager, p2p_gossip_sync, - peer_manager, + peer_manager: Arc::new(peer_manager), liquidity_manager, chain_monitor, kv_store, diff --git a/lightning-liquidity/tests/lsps0_integration_tests.rs b/lightning-liquidity/tests/lsps0_integration_tests.rs index 3b224b53648..50444971746 100644 --- a/lightning-liquidity/tests/lsps0_integration_tests.rs +++ b/lightning-liquidity/tests/lsps0_integration_tests.rs @@ -51,7 +51,7 @@ fn list_protocols_integration_test() { let client_handler = client_node.liquidity_manager.lsps0_client_handler(); let client_node_id = client_node.channel_manager.get_our_node_id(); - let _ = client_handler.list_protocols(&service_node_id); + client_handler.list_protocols(&service_node_id); let list_protocols_request = get_lsps_message!(client_node, service_node_id); service_node diff --git a/lightning-net-tokio/src/lib.rs b/lightning-net-tokio/src/lib.rs index ea23e5a0115..ec26ae8c461 100644 --- a/lightning-net-tokio/src/lib.rs +++ b/lightning-net-tokio/src/lib.rs @@ -183,7 +183,7 @@ impl Connection { // a chance to do some work. let mut buf = [0; 4096]; - let mut our_descriptor = SocketDescriptor::new(us.clone()); + let mut our_descriptor = SocketDescriptor::new(Arc::clone(&us)); // An enum describing why we did/are disconnecting: enum Disconnect { // Rust-Lightning told us to disconnect, either by returning an Err or by calling @@ -338,7 +338,7 @@ where let handle_opt = if peer_manager .as_ref() - .new_inbound_connection(SocketDescriptor::new(us.clone()), remote_addr) + .new_inbound_connection(SocketDescriptor::new(Arc::clone(&us)), remote_addr) .is_ok() { let handle = tokio::spawn(Connection::schedule_read( @@ -391,7 +391,7 @@ where let last_us = Arc::clone(&us); let handle_opt = if let Ok(initial_send) = peer_manager.as_ref().new_outbound_connection( their_node_id, - SocketDescriptor::new(us.clone()), + SocketDescriptor::new(Arc::clone(&us)), remote_addr, ) { let handle = tokio::spawn(async move { @@ -402,7 +402,7 @@ where // and use a relatively tight timeout. let send_fut = async { loop { - match SocketDescriptor::new(us.clone()).send_data(&initial_send, true) { + match SocketDescriptor::new(Arc::clone(&us)).send_data(&initial_send, true) { v if v == initial_send.len() => break Ok(()), 0 => { write_receiver.recv().await; diff --git a/lightning-persister/src/test_utils.rs b/lightning-persister/src/test_utils.rs index 8af33cef55b..c69652c1455 100644 --- a/lightning-persister/src/test_utils.rs +++ b/lightning-persister/src/test_utils.rs @@ -46,7 +46,7 @@ pub(crate) fn do_read_write_remove_list_persist(kv_s // Ensure we have no issue operating with primary_namespace/secondary_namespace/key being // KVSTORE_NAMESPACE_KEY_MAX_LEN - let max_chars: String = std::iter::repeat('A').take(KVSTORE_NAMESPACE_KEY_MAX_LEN).collect(); + let max_chars = "A".repeat(KVSTORE_NAMESPACE_KEY_MAX_LEN); kv_store.write(&max_chars, &max_chars, &max_chars, &data).unwrap(); let listed_keys = kv_store.list(&max_chars, &max_chars).unwrap(); diff --git a/lightning/src/chain/channelmonitor.rs b/lightning/src/chain/channelmonitor.rs index 41f4751fbd3..de2872b951d 100644 --- a/lightning/src/chain/channelmonitor.rs +++ b/lightning/src/chain/channelmonitor.rs @@ -5598,7 +5598,7 @@ mod tests { // and provides the claim preimages for the two pending HTLCs. The first update generates // an error, but the point of this test is to ensure the later updates are still applied. let monitor_updates = nodes[1].chain_monitor.monitor_updates.lock().unwrap(); - let mut replay_update = monitor_updates.get(&channel.2).unwrap().iter().rev().next().unwrap().clone(); + let mut replay_update = monitor_updates.get(&channel.2).unwrap().iter().next_back().unwrap().clone(); assert_eq!(replay_update.updates.len(), 1); if let ChannelMonitorUpdateStep::LatestCounterpartyCommitmentTXInfo { .. } = replay_update.updates[0] { } else { panic!(); } @@ -5736,7 +5736,7 @@ mod tests { let nondust_htlcs = dummy_commitment_tx.nondust_htlcs(); monitor.provide_latest_holder_commitment_tx(dummy_commitment_tx.clone(), - nondust_htlcs.into_iter().map(|htlc| (htlc.clone(), Some(dummy_sig), Some(dummy_source.clone()))).collect()); + nondust_htlcs.iter().map(|htlc| (htlc.clone(), Some(dummy_sig), Some(dummy_source.clone()))).collect()); monitor.provide_latest_counterparty_commitment_tx(Txid::from_byte_array(Sha256::hash(b"1").to_byte_array()), preimages_slice_to_htlc_outputs!(preimages[5..15]), 281474976710655, dummy_key, &logger); monitor.provide_latest_counterparty_commitment_tx(Txid::from_byte_array(Sha256::hash(b"2").to_byte_array()), @@ -5776,7 +5776,7 @@ mod tests { // These HTLCs now have their output indices assigned let nondust_htlcs = dummy_commitment_tx.nondust_htlcs(); monitor.provide_latest_holder_commitment_tx(dummy_commitment_tx.clone(), - nondust_htlcs.into_iter().map(|htlc| (htlc.clone(), Some(dummy_sig), Some(dummy_source.clone()))).collect()); + nondust_htlcs.iter().map(|htlc| (htlc.clone(), Some(dummy_sig), Some(dummy_source.clone()))).collect()); secret[0..32].clone_from_slice(&>::from_hex("2273e227a5b7449b6e70f1fb4652864038b1cbf9cd7c043a7d6456b7fc275ad8").unwrap()); monitor.provide_secret(281474976710653, secret.clone()).unwrap(); assert_eq!(monitor.inner.lock().unwrap().payment_preimages.len(), 12); @@ -5789,7 +5789,7 @@ mod tests { // These HTLCs now have their output indices assigned let nondust_htlcs = dummy_commitment_tx.nondust_htlcs(); monitor.provide_latest_holder_commitment_tx(dummy_commitment_tx.clone(), - nondust_htlcs.into_iter().map(|htlc| (htlc.clone(), Some(dummy_sig), Some(dummy_source.clone()))).collect()); + nondust_htlcs.iter().map(|htlc| (htlc.clone(), Some(dummy_sig), Some(dummy_source.clone()))).collect()); secret[0..32].clone_from_slice(&>::from_hex("27cddaa5624534cb6cb9d7da077cf2b22ab21e9b506fd4998a51d54502e99116").unwrap()); monitor.provide_secret(281474976710652, secret.clone()).unwrap(); assert_eq!(monitor.inner.lock().unwrap().payment_preimages.len(), 5); diff --git a/lightning/src/ln/blinded_payment_tests.rs b/lightning/src/ln/blinded_payment_tests.rs index b714f76616f..d65fa53a544 100644 --- a/lightning/src/ln/blinded_payment_tests.rs +++ b/lightning/src/ln/blinded_payment_tests.rs @@ -207,7 +207,7 @@ fn mpp_to_one_hop_blinded_path() { create_announced_chan_between_nodes(&nodes, 0, 1); create_announced_chan_between_nodes(&nodes, 0, 2); let chan_upd_1_3 = create_announced_chan_between_nodes(&nodes, 1, 3).0.contents; - create_announced_chan_between_nodes(&nodes, 2, 3).0.contents; + create_announced_chan_between_nodes(&nodes, 2, 3); // Ensure all nodes start at the same height. connect_blocks(&nodes[0], 4*CHAN_CONFIRM_DEPTH + 1 - nodes[0].best_block_info().1); @@ -1976,7 +1976,7 @@ fn test_trampoline_inbound_payment_decoding() { &carol_update_add, &carol_node_signer, &logger, &secp_ctx ).unwrap_or_else(|_| panic!()); - let _carol_trampoline_update_add = if let onion_utils::Hop::TrampolineForward { next_trampoline_hop_data, .. } = carol_peeled_onion { + if let onion_utils::Hop::TrampolineForward { next_trampoline_hop_data, .. } = carol_peeled_onion { assert_eq!(next_trampoline_hop_data.next_trampoline, dave_node_id); } else { panic!(); diff --git a/lightning/src/ln/functional_test_utils.rs b/lightning/src/ln/functional_test_utils.rs index ebed3af4880..ce794cd7cb5 100644 --- a/lightning/src/ln/functional_test_utils.rs +++ b/lightning/src/ln/functional_test_utils.rs @@ -1089,9 +1089,9 @@ macro_rules! unwrap_send_err { let events = $node.node.get_and_clear_pending_events(); assert!(events.len() == 2); match &events[0] { - crate::events::Event::PaymentPathFailed { failure, .. } => { + $crate::events::Event::PaymentPathFailed { failure, .. } => { match failure { - crate::events::PathFailure::InitialSend { err } => { + $crate::events::PathFailure::InitialSend { err } => { match err { $type => { $check }, _ => panic!() @@ -1103,7 +1103,7 @@ macro_rules! unwrap_send_err { _ => panic!() } match &events[1] { - crate::events::Event::PaymentFailed { .. } => {}, + $crate::events::Event::PaymentFailed { .. } => {}, _ => panic!() } } @@ -2203,7 +2203,7 @@ macro_rules! get_payment_preimage_hash { get_payment_preimage_hash!($dest_node, None) }; ($dest_node: expr, $min_value_msat: expr) => { - crate::get_payment_preimage_hash!($dest_node, $min_value_msat, None) + $crate::get_payment_preimage_hash!($dest_node, $min_value_msat, None) }; ($dest_node: expr, $min_value_msat: expr, $min_final_cltv_expiry_delta: expr) => { $crate::ln::functional_test_utils::get_payment_preimage_hash(&$dest_node, $min_value_msat, $min_final_cltv_expiry_delta) @@ -3355,8 +3355,8 @@ pub fn create_node_cfgs_with_persisters<'a>(node_count: usize, chanmon_cfgs: &'a logger: &chanmon_cfgs[i].logger, tx_broadcaster: &chanmon_cfgs[i].tx_broadcaster, fee_estimator: &chanmon_cfgs[i].fee_estimator, - router: test_utils::TestRouter::new(network_graph.clone(), &chanmon_cfgs[i].logger, &chanmon_cfgs[i].scorer), - message_router: test_utils::TestMessageRouter::new(network_graph.clone(), &chanmon_cfgs[i].keys_manager), + router: test_utils::TestRouter::new(Arc::clone(&network_graph), &chanmon_cfgs[i].logger, &chanmon_cfgs[i].scorer), + message_router: test_utils::TestMessageRouter::new(Arc::clone(&network_graph), &chanmon_cfgs[i].keys_manager), chain_monitor, keys_manager: &chanmon_cfgs[i].keys_manager, node_seed: seed, @@ -3425,19 +3425,19 @@ pub fn create_network<'a, 'b: 'a, 'c: 'b>(node_count: usize, cfgs: &'b Vec { - assert_eq!(*&node_b_id, *counterparty_node_id); + assert_eq!(node_b_id, *counterparty_node_id); }, _ => panic!("Unexpected event"), }; @@ -7959,7 +7961,7 @@ pub fn test_preimage_storage() { let node_a_id = nodes[0].node.get_our_node_id(); - create_announced_chan_between_nodes(&nodes, 0, 1).0.contents.short_channel_id; + create_announced_chan_between_nodes(&nodes, 0, 1); { let (payment_hash, payment_secret) = @@ -8002,7 +8004,7 @@ pub fn test_bad_secret_hash() { let node_a_id = nodes[0].node.get_our_node_id(); let node_b_id = nodes[1].node.get_our_node_id(); - create_announced_chan_between_nodes(&nodes, 0, 1).0.contents.short_channel_id; + create_announced_chan_between_nodes(&nodes, 0, 1); let random_hash = PaymentHash([42; 32]); let random_secret = PaymentSecret([43; 32]); @@ -8195,7 +8197,7 @@ pub fn test_concurrent_monitor_claim() { send_payment(&nodes[0], &[&nodes[1]], 10_000_000); // Route a HTLC from node 0 to node 1 (but don't settle) - route_payment(&nodes[0], &[&nodes[1]], 9_000_000).0; + route_payment(&nodes[0], &[&nodes[1]], 9_000_000); // Copy ChainMonitor to simulate watchtower Alice and update block height her ChannelMonitor timeout HTLC onchain let chain_source = test_utils::TestChainSource::new(Network::Testnet); @@ -10088,7 +10090,7 @@ fn do_test_max_dust_htlc_exposure( } { let mut feerate_lock = chanmon_cfgs[0].fee_estimator.sat_per_kw.lock().unwrap(); - *feerate_lock = *feerate_lock * 10; + *feerate_lock *= 10; } nodes[0].node.timer_tick_occurred(); check_added_monitors(&nodes[0], 1); @@ -11745,7 +11747,7 @@ pub fn test_funding_signed_event() { }; match &events[1] { crate::events::Event::ChannelPending { counterparty_node_id, .. } => { - assert_eq!(*&node_b_id, *counterparty_node_id); + assert_eq!(node_b_id, *counterparty_node_id); }, _ => panic!("Unexpected event"), }; diff --git a/lightning/src/ln/monitor_tests.rs b/lightning/src/ln/monitor_tests.rs index d1e0a235193..cdcb570af68 100644 --- a/lightning/src/ln/monitor_tests.rs +++ b/lightning/src/ln/monitor_tests.rs @@ -761,7 +761,7 @@ fn do_test_claim_value_force_close(anchors: bool, prev_commitment_tx: bool) { // Confirm node B's claim for node A to remove that claim from the aggregated claim transaction. mine_transaction(&nodes[0], &b_broadcast_txn[0]); let a_broadcast_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap().split_off(0); - let a_htlc_timeout_tx = a_broadcast_txn.into_iter().last().unwrap(); + let a_htlc_timeout_tx = a_broadcast_txn.into_iter().next_back().unwrap(); // Once the HTLC-Timeout transaction confirms, A will no longer consider the HTLC // "MaybeClaimable", but instead move it to "AwaitingConfirmations". diff --git a/lightning/src/ln/msgs.rs b/lightning/src/ln/msgs.rs index dcafc27d482..2b18901591e 100644 --- a/lightning/src/ln/msgs.rs +++ b/lightning/src/ln/msgs.rs @@ -4563,7 +4563,7 @@ mod tests { } if disable { let flag = target_value.last_mut().unwrap(); - *flag = *flag | 1 << 1; + *flag |= 1 << 1; } target_value .append(&mut >::from_hex("009000000000000f42400000271000000014").unwrap()); diff --git a/lightning/src/ln/payment_tests.rs b/lightning/src/ln/payment_tests.rs index 389d0f15fb9..9c8c63208dd 100644 --- a/lightning/src/ln/payment_tests.rs +++ b/lightning/src/ln/payment_tests.rs @@ -1747,7 +1747,7 @@ fn claimed_send_payment_idempotent() { let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]); let nodes = create_network(2, &node_cfgs, &node_chanmgrs); - create_announced_chan_between_nodes(&nodes, 0, 1).2; + create_announced_chan_between_nodes(&nodes, 0, 1); let (route, hash_b, preimage_b, second_payment_secret) = get_route_and_payment_hash!(nodes[0], nodes[1], 100_000); @@ -1830,7 +1830,7 @@ fn abandoned_send_payment_idempotent() { let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]); let nodes = create_network(2, &node_cfgs, &node_chanmgrs); - create_announced_chan_between_nodes(&nodes, 0, 1).2; + create_announced_chan_between_nodes(&nodes, 0, 1); let (route, hash_b, second_payment_preimage, second_payment_secret) = get_route_and_payment_hash!(nodes[0], nodes[1], 100_000); @@ -2434,14 +2434,14 @@ fn do_accept_underpaying_htlcs_config(num_mpp_parts: usize) { assert_eq!(events.len(), 1); match events[0] { crate::events::Event::PaymentClaimable { - ref payment_hash, + payment_hash: pmt_hash, ref purpose, amount_msat, counterparty_skimmed_fee_msat, receiver_node_id, .. } => { - assert_eq!(payment_hash, payment_hash); + assert_eq!(pmt_hash, payment_hash); assert_eq!(amt_msat - skimmed_fee_msat * num_mpp_parts as u64, amount_msat); assert_eq!(skimmed_fee_msat * num_mpp_parts as u64, counterparty_skimmed_fee_msat); assert_eq!(node_c_id, receiver_node_id.unwrap()); @@ -3065,7 +3065,7 @@ fn fails_paying_after_rejected_by_payee() { let node_a_id = nodes[0].node.get_our_node_id(); let node_b_id = nodes[1].node.get_our_node_id(); - create_announced_chan_between_nodes(&nodes, 0, 1).0.contents.short_channel_id; + create_announced_chan_between_nodes(&nodes, 0, 1); // Marshall data to send the payment let amt_msat = 20_000; @@ -4159,7 +4159,6 @@ fn do_claim_from_closed_chan(fail_payment: bool) { send_msgs.sort_by(|a, _| { let a_node_id = if let MessageSendEvent::UpdateHTLCs { node_id, .. } = a { node_id } else { panic!() }; - let node_b_id = node_b_id; if *a_node_id == node_b_id { Ordering::Less } else { diff --git a/lightning/src/ln/priv_short_conf_tests.rs b/lightning/src/ln/priv_short_conf_tests.rs index 8f0ab5e39ed..3715b9fc13f 100644 --- a/lightning/src/ln/priv_short_conf_tests.rs +++ b/lightning/src/ln/priv_short_conf_tests.rs @@ -234,7 +234,7 @@ fn test_routed_scid_alias() { let node_chanmgrs = create_node_chanmgrs(3, &node_cfgs, &[None, Some(no_announce_cfg), None]); let mut nodes = create_network(3, &node_cfgs, &node_chanmgrs); - create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1_000_000, 500_000_000).2; + create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1_000_000, 500_000_000); let mut as_channel_ready = create_unannounced_chan_between_nodes_with_value(&nodes, 1, 2, 1_000_000, 500_000_000).0; let last_hop = nodes[2].node.list_usable_channels(); diff --git a/lightning/src/onion_message/dns_resolution.rs b/lightning/src/onion_message/dns_resolution.rs index 8c270eebe69..43eba33810f 100644 --- a/lightning/src/onion_message/dns_resolution.rs +++ b/lightning/src/onion_message/dns_resolution.rs @@ -459,9 +459,7 @@ impl OMNameResolver { .filter_map( |rr| if let RR::Txt(txt) = rr { Some(txt.data.as_vec()) } else { None }, ) - .filter_map( - |data| if let Ok(s) = String::from_utf8(data) { Some(s) } else { None }, - ) + .filter_map(|data| String::from_utf8(data).ok()) .filter(|data_string| data_string.len() > URI_PREFIX.len()) .filter(|data_string| { data_string[..URI_PREFIX.len()].eq_ignore_ascii_case(URI_PREFIX) diff --git a/lightning/src/onion_message/functional_tests.rs b/lightning/src/onion_message/functional_tests.rs index b28819ee692..087a587487a 100644 --- a/lightning/src/onion_message/functional_tests.rs +++ b/lightning/src/onion_message/functional_tests.rs @@ -266,8 +266,8 @@ impl MessengerCfg { fn create_nodes_using_cfgs(cfgs: Vec) -> Vec { let gossip_logger = Arc::new(TestLogger::with_id("gossip".to_string())); - let network_graph = Arc::new(NetworkGraph::new(Network::Testnet, gossip_logger.clone())); - let gossip_sync = Arc::new(P2PGossipSync::new(network_graph.clone(), None, gossip_logger)); + let network_graph = Arc::new(NetworkGraph::new(Network::Testnet, Arc::clone(&gossip_logger))); + let gossip_sync = Arc::new(P2PGossipSync::new(Arc::clone(&network_graph), None, gossip_logger)); let mut nodes = Vec::new(); for (i, cfg) in cfgs.into_iter().enumerate() { @@ -280,34 +280,34 @@ fn create_nodes_using_cfgs(cfgs: Vec) -> Vec { let node_id_lookup = Arc::new(EmptyNodeIdLookUp {}); let message_router = - Arc::new(DefaultMessageRouter::new(network_graph.clone(), entropy_source.clone())); + DefaultMessageRouter::new(Arc::clone(&network_graph), Arc::clone(&entropy_source)); let offers_message_handler = Arc::new(TestOffersMessageHandler {}); let async_payments_message_handler = Arc::new(TestAsyncPaymentsMessageHandler {}); let dns_resolver_message_handler = Arc::new(TestDNSResolverMessageHandler {}); let custom_message_handler = Arc::new(TestCustomMessageHandler::new()); let messenger = if cfg.intercept_offline_peer_oms { OnionMessenger::new_with_offline_peer_interception( - entropy_source.clone(), - node_signer.clone(), - logger.clone(), + Arc::clone(&entropy_source), + Arc::clone(&node_signer), + logger, node_id_lookup, - message_router, + Arc::new(message_router), offers_message_handler, async_payments_message_handler, dns_resolver_message_handler, - custom_message_handler.clone(), + Arc::clone(&custom_message_handler), ) } else { OnionMessenger::new( - entropy_source.clone(), - node_signer.clone(), - logger.clone(), + Arc::clone(&entropy_source), + Arc::clone(&node_signer), + logger, node_id_lookup, - message_router, + Arc::new(message_router), offers_message_handler, async_payments_message_handler, dns_resolver_message_handler, - custom_message_handler.clone(), + Arc::clone(&custom_message_handler), ) }; nodes.push(MessengerNode { @@ -316,7 +316,7 @@ fn create_nodes_using_cfgs(cfgs: Vec) -> Vec { entropy_source, messenger, custom_message_handler, - gossip_sync: gossip_sync.clone(), + gossip_sync: Arc::clone(&gossip_sync), }); } for i in 0..nodes.len() - 1 { @@ -361,7 +361,7 @@ fn add_channel_to_graph( fn pass_along_path(path: &Vec) { let mut prev_node = &path[0]; - for node in path.into_iter().skip(1) { + for node in path.iter().skip(1) { let events = prev_node.messenger.release_pending_msgs(); let onion_msg = { let msgs = events.get(&node.node_id).unwrap(); diff --git a/lightning/src/routing/gossip.rs b/lightning/src/routing/gossip.rs index 43ec6b2dda0..077f10621cd 100644 --- a/lightning/src/routing/gossip.rs +++ b/lightning/src/routing/gossip.rs @@ -4162,7 +4162,7 @@ pub(crate) mod tests { fn displays_node_alias() { let format_str_alias = |alias: &str| { let mut bytes = [0u8; 32]; - bytes[..alias.as_bytes().len()].copy_from_slice(alias.as_bytes()); + bytes[..alias.len()].copy_from_slice(alias.as_bytes()); format!("{}", NodeAlias(bytes)) }; diff --git a/lightning/src/routing/router.rs b/lightning/src/routing/router.rs index 1a76e682668..b1a2d833da5 100644 --- a/lightning/src/routing/router.rs +++ b/lightning/src/routing/router.rs @@ -6346,7 +6346,7 @@ mod tests { let scorer = ln_test_utils::TestScorer::new(); let random_seed_bytes = [42; 32]; let config = UserConfig::default(); - let payment_params = PaymentParameters::from_node_id(PublicKey::from_slice(&[02; 33]).unwrap(), 42) + let payment_params = PaymentParameters::from_node_id(PublicKey::from_slice(&[2; 33]).unwrap(), 42) .with_bolt11_features(channelmanager::provided_bolt11_invoice_features(&config)).unwrap() .with_route_hints(vec![RouteHint(vec![RouteHintHop { src_node_id: nodes[2], @@ -8414,8 +8414,8 @@ mod tests { let secp_ctx = Secp256k1::new(); let logger = Arc::new(ln_test_utils::TestLogger::new()); let network_graph = Arc::new(NetworkGraph::new(Network::Testnet, Arc::clone(&logger))); - let gossip_sync = P2PGossipSync::new(network_graph.clone(), None, logger.clone()); - let scorer = ProbabilisticScorer::new(ProbabilisticScoringDecayParameters::default(), network_graph.clone(), logger.clone()); + let gossip_sync = P2PGossipSync::new(Arc::clone(&network_graph), None, Arc::clone(&logger)); + let scorer = ProbabilisticScorer::new(ProbabilisticScoringDecayParameters::default(), Arc::clone(&network_graph), Arc::clone(&logger)); let random_seed_bytes = [42; 32]; let config = UserConfig::default(); @@ -8478,7 +8478,7 @@ mod tests { let secp_ctx = Secp256k1::new(); let logger = Arc::new(ln_test_utils::TestLogger::new()); let network_graph = Arc::new(NetworkGraph::new(Network::Testnet, Arc::clone(&logger))); - let scorer = ProbabilisticScorer::new(ProbabilisticScoringDecayParameters::default(), network_graph.clone(), logger.clone()); + let scorer = ProbabilisticScorer::new(ProbabilisticScoringDecayParameters::default(), Arc::clone(&network_graph), Arc::clone(&logger)); let random_seed_bytes = [42; 32]; let config = UserConfig::default(); diff --git a/lightning/src/routing/scoring.rs b/lightning/src/routing/scoring.rs index 245cee4ca71..6224955e0c5 100644 --- a/lightning/src/routing/scoring.rs +++ b/lightning/src/routing/scoring.rs @@ -3969,7 +3969,6 @@ mod tests { let decay_params = ProbabilisticScoringDecayParameters { liquidity_offset_half_life: Duration::from_secs(60 * 60), historical_no_updates_half_life: Duration::from_secs(10), - ..ProbabilisticScoringDecayParameters::default() }; let capacity_msat = 100_000_000_000; diff --git a/lightning/src/util/persist.rs b/lightning/src/util/persist.rs index 6f1f9d0862a..5b283aee890 100644 --- a/lightning/src/util/persist.rs +++ b/lightning/src/util/persist.rs @@ -1462,6 +1462,6 @@ mod tests { #[test] fn kvstore_trait_object_usage() { let store: Arc = Arc::new(TestStore::new(false)); - assert!(persist_fn::<_, TestChannelSigner>(store.clone())); + assert!(persist_fn::<_, TestChannelSigner>(Arc::clone(&store))); } } diff --git a/lightning/src/util/sweep.rs b/lightning/src/util/sweep.rs index 0fae91bebc2..cea8dd76031 100644 --- a/lightning/src/util/sweep.rs +++ b/lightning/src/util/sweep.rs @@ -992,7 +992,7 @@ where pub fn sweeper_async( &self, ) -> Arc>, E, F, K, L, O>> { - self.sweeper.clone() + Arc::clone(&self.sweeper) } } diff --git a/lightning/src/util/test_utils.rs b/lightning/src/util/test_utils.rs index a861409ceec..b26794a30c6 100644 --- a/lightning/src/util/test_utils.rs +++ b/lightning/src/util/test_utils.rs @@ -157,7 +157,7 @@ impl<'a> TestRouter<'a> { let next_blinded_payment_paths = Mutex::new(Vec::new()); Self { router: DefaultRouter::new( - network_graph.clone(), + Arc::clone(&network_graph), logger, entropy_source, scorer, @@ -955,7 +955,7 @@ pub struct TestChannelMessageHandler { impl TestChannelMessageHandler { thread_local! { - pub static MESSAGE_FETCH_COUNTER: AtomicUsize = AtomicUsize::new(0); + pub static MESSAGE_FETCH_COUNTER: AtomicUsize = const { AtomicUsize::new(0) }; } } @@ -1435,17 +1435,9 @@ impl TestLogger { impl Logger for TestLogger { fn log(&self, record: Record) { - let s = format!( - "{:<55} {}", - format_args!( - "{} {} [{}:{}]", - self.id, - record.level.to_string(), - record.module_path, - record.line - ), - record.args - ); + let context = + format!("{} {} [{}:{}]", self.id, record.level, record.module_path, record.line); + let s = format!("{:<55} {}", context, record.args); #[cfg(ldk_bench)] { // When benchmarking, we don't actually want to print logs, but we do want to format diff --git a/lightning/src/util/time.rs b/lightning/src/util/time.rs index d79dddc6950..c6041543572 100644 --- a/lightning/src/util/time.rs +++ b/lightning/src/util/time.rs @@ -24,7 +24,7 @@ mod test { impl Instant { thread_local! { - static ELAPSED: Cell = core::cell::Cell::new(Duration::from_secs(0)); + static ELAPSED: Cell = const { Cell::new(Duration::from_secs(0)) }; } pub fn advance(duration: Duration) { diff --git a/lightning/src/util/wakers.rs b/lightning/src/util/wakers.rs index 2c2a13a7d5a..e7553d9416b 100644 --- a/lightning/src/util/wakers.rs +++ b/lightning/src/util/wakers.rs @@ -449,7 +449,7 @@ mod tests { let thread_notifier = Arc::clone(&persistence_notifier); let exit_thread = Arc::new(AtomicBool::new(false)); - let exit_thread_clone = exit_thread.clone(); + let exit_thread_clone = Arc::clone(&exit_thread); thread::spawn(move || loop { thread_notifier.notify(); if exit_thread_clone.load(Ordering::SeqCst) { @@ -458,7 +458,7 @@ mod tests { }); // Check that we can block indefinitely until updates are available. - let _ = persistence_notifier.get_future().wait(); + persistence_notifier.get_future().wait(); // Check that the Notifier will return after the given duration if updates are // available.