From 8bea5213c3a55bfd26101073c52c86124440b958 Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Fri, 17 Jan 2025 16:19:05 +0000 Subject: [PATCH 1/9] refactor: [#1187] extract IoC Container --- src/app.rs | 51 +++++++++++++++++----------------------- src/bootstrap/app.rs | 24 +++++++++---------- src/console/profiling.rs | 4 ++-- src/container.rs | 15 ++++++++++++ src/lib.rs | 1 + src/main.rs | 4 ++-- 6 files changed, 53 insertions(+), 46 deletions(-) create mode 100644 src/container.rs diff --git a/src/app.rs b/src/app.rs index 14dc0b07f..64119aa34 100644 --- a/src/app.rs +++ b/src/app.rs @@ -21,19 +21,14 @@ //! - UDP trackers: the user can enable multiple UDP tracker on several ports. //! - HTTP trackers: the user can enable multiple HTTP tracker on several ports. //! - Tracker REST API: the tracker API can be enabled/disabled. -use std::sync::Arc; - -use tokio::sync::RwLock; use tokio::task::JoinHandle; use torrust_tracker_configuration::Configuration; use tracing::instrument; use crate::bootstrap::jobs::{health_check_api, http_tracker, torrent_cleanup, tracker_apis, udp_tracker}; -use crate::core::statistics::event::sender::Sender; -use crate::core::statistics::repository::Repository; +use crate::container::AppContainer; +use crate::servers; use crate::servers::registar::Registar; -use crate::servers::udp::server::banning::BanService; -use crate::{core, servers}; /// # Panics /// @@ -41,14 +36,8 @@ use crate::{core, servers}; /// /// - Can't retrieve tracker keys from database. /// - Can't load whitelist from database. -#[instrument(skip(config, tracker, ban_service, stats_event_sender, stats_repository))] -pub async fn start( - config: &Configuration, - tracker: Arc, - ban_service: Arc>, - stats_event_sender: Arc>>, - stats_repository: Arc, -) -> Vec> { +#[instrument(skip(config, app_container))] +pub async fn start(config: &Configuration, app_container: &AppContainer) -> Vec> { if config.http_api.is_none() && (config.udp_trackers.is_none() || config.udp_trackers.as_ref().map_or(true, std::vec::Vec::is_empty)) && (config.http_trackers.is_none() || config.http_trackers.as_ref().map_or(true, std::vec::Vec::is_empty)) @@ -61,16 +50,18 @@ pub async fn start( let registar = Registar::default(); // Load peer keys - if tracker.is_private() { - tracker + if app_container.tracker.is_private() { + app_container + .tracker .load_keys_from_database() .await .expect("Could not retrieve keys from database."); } // Load whitelisted torrents - if tracker.is_listed() { - tracker + if app_container.tracker.is_listed() { + app_container + .tracker .whitelist_manager .load_whitelist_from_database() .await @@ -80,7 +71,7 @@ pub async fn start( // Start the UDP blocks if let Some(udp_trackers) = &config.udp_trackers { for udp_tracker_config in udp_trackers { - if tracker.is_private() { + if app_container.tracker.is_private() { tracing::warn!( "Could not start UDP tracker on: {} while in private mode. UDP is not safe for private trackers!", udp_tracker_config.bind_address @@ -89,9 +80,9 @@ pub async fn start( jobs.push( udp_tracker::start_job( udp_tracker_config, - tracker.clone(), - stats_event_sender.clone(), - ban_service.clone(), + app_container.tracker.clone(), + app_container.stats_event_sender.clone(), + app_container.ban_service.clone(), registar.give_form(), ) .await, @@ -107,8 +98,8 @@ pub async fn start( for http_tracker_config in http_trackers { if let Some(job) = http_tracker::start_job( http_tracker_config, - tracker.clone(), - stats_event_sender.clone(), + app_container.tracker.clone(), + app_container.stats_event_sender.clone(), registar.give_form(), servers::http::Version::V1, ) @@ -125,10 +116,10 @@ pub async fn start( if let Some(http_api_config) = &config.http_api { if let Some(job) = tracker_apis::start_job( http_api_config, - tracker.clone(), - ban_service.clone(), - stats_event_sender.clone(), - stats_repository.clone(), + app_container.tracker.clone(), + app_container.ban_service.clone(), + app_container.stats_event_sender.clone(), + app_container.stats_repository.clone(), registar.give_form(), servers::apis::Version::V1, ) @@ -142,7 +133,7 @@ pub async fn start( // Start runners to remove torrents without peers, every interval if config.core.inactive_peer_cleanup_interval > 0 { - jobs.push(torrent_cleanup::start_job(&config.core, &tracker)); + jobs.push(torrent_cleanup::start_job(&config.core, &app_container.tracker)); } // Start Health Check API diff --git a/src/bootstrap/app.rs b/src/bootstrap/app.rs index d63b414e1..68ec93e38 100644 --- a/src/bootstrap/app.rs +++ b/src/bootstrap/app.rs @@ -21,10 +21,9 @@ use tracing::instrument; use super::config::initialize_configuration; use crate::bootstrap; +use crate::container::AppContainer; use crate::core::databases::Database; use crate::core::services::{initialize_database, initialize_whitelist, statistics, tracker_factory}; -use crate::core::statistics::event::sender::Sender; -use crate::core::statistics::repository::Repository; use crate::core::whitelist::WhiteListManager; use crate::core::Tracker; use crate::servers::udp::server::banning::BanService; @@ -38,15 +37,8 @@ use crate::shared::crypto::keys::{self, Keeper as _}; /// /// Setup can file if the configuration is invalid. #[must_use] -#[allow(clippy::type_complexity)] #[instrument(skip())] -pub fn setup() -> ( - Configuration, - Arc, - Arc>, - Arc>>, - Arc, -) { +pub fn setup() -> (Configuration, AppContainer) { #[cfg(not(test))] check_seed(); @@ -62,13 +54,21 @@ pub fn setup() -> ( let stats_event_sender = Arc::new(stats_event_sender); let stats_repository = Arc::new(stats_repository); - let udp_ban_service = Arc::new(RwLock::new(BanService::new(MAX_CONNECTION_ID_ERRORS_PER_IP))); + let ban_service = Arc::new(RwLock::new(BanService::new(MAX_CONNECTION_ID_ERRORS_PER_IP))); let tracker = initialize_with_configuration(&configuration); tracing::info!("Configuration:\n{}", configuration.clone().mask_secrets().to_json()); - (configuration, tracker, udp_ban_service, stats_event_sender, stats_repository) + ( + configuration, + AppContainer { + tracker, + ban_service, + stats_event_sender, + stats_repository, + }, + ) } /// checks if the seed is the instance seed in production. diff --git a/src/console/profiling.rs b/src/console/profiling.rs index 2f6471906..318fce1e8 100644 --- a/src/console/profiling.rs +++ b/src/console/profiling.rs @@ -179,9 +179,9 @@ pub async fn run() { return; }; - let (config, tracker, ban_service, stats_event_sender, stats_repository) = bootstrap::app::setup(); + let (config, app_container) = bootstrap::app::setup(); - let jobs = app::start(&config, tracker, ban_service, stats_event_sender, stats_repository).await; + let jobs = app::start(&config, &app_container).await; // Run the tracker for a fixed duration let run_duration = sleep(Duration::from_secs(duration_secs)); diff --git a/src/container.rs b/src/container.rs new file mode 100644 index 000000000..961b32a12 --- /dev/null +++ b/src/container.rs @@ -0,0 +1,15 @@ +use std::sync::Arc; + +use tokio::sync::RwLock; + +use crate::core::statistics::event::sender::Sender; +use crate::core::statistics::repository::Repository; +use crate::core::Tracker; +use crate::servers::udp::server::banning::BanService; + +pub struct AppContainer { + pub tracker: Arc, + pub ban_service: Arc>, + pub stats_event_sender: Arc>>, + pub stats_repository: Arc, +} diff --git a/src/lib.rs b/src/lib.rs index d7e4bc5b2..212430605 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -493,6 +493,7 @@ use torrust_tracker_clock::clock; pub mod app; pub mod bootstrap; pub mod console; +pub mod container; pub mod core; pub mod servers; pub mod shared; diff --git a/src/main.rs b/src/main.rs index e536124a2..f05de0327 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,9 +2,9 @@ use torrust_tracker_lib::{app, bootstrap}; #[tokio::main] async fn main() { - let (config, tracker, udp_ban_service, stats_event_sender, stats_repository) = bootstrap::app::setup(); + let (config, app_container) = bootstrap::app::setup(); - let jobs = app::start(&config, tracker, udp_ban_service, stats_event_sender, stats_repository).await; + let jobs = app::start(&config, &app_container).await; // handle the signals tokio::select! { From 747b58d88c7496c7eafbd135d07b524079aa65ec Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Fri, 17 Jan 2025 16:32:06 +0000 Subject: [PATCH 2/9] refactor: [#1187] extract one function and rename another one --- src/bootstrap/app.rs | 12 +++++++++--- src/bootstrap/jobs/http_tracker.rs | 4 ++-- src/bootstrap/jobs/tracker_apis.rs | 4 ++-- src/servers/apis/server.rs | 4 ++-- src/servers/http/server.rs | 4 ++-- src/servers/udp/server/mod.rs | 6 +++--- tests/servers/api/environment.rs | 6 +++--- tests/servers/http/environment.rs | 6 +++--- tests/servers/udp/environment.rs | 4 ++-- 9 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/bootstrap/app.rs b/src/bootstrap/app.rs index 68ec93e38..294de64e3 100644 --- a/src/bootstrap/app.rs +++ b/src/bootstrap/app.rs @@ -56,7 +56,7 @@ pub fn setup() -> (Configuration, AppContainer) { let ban_service = Arc::new(RwLock::new(BanService::new(MAX_CONNECTION_ID_ERRORS_PER_IP))); - let tracker = initialize_with_configuration(&configuration); + let tracker = initialize_globals_and_tracker(&configuration); tracing::info!("Configuration:\n{}", configuration.clone().mask_secrets().to_json()); @@ -88,10 +88,16 @@ pub fn check_seed() { /// The configuration may be obtained from the environment (via config file or env vars). #[must_use] #[instrument(skip())] -pub fn initialize_with_configuration(configuration: &Configuration) -> Arc { +pub fn initialize_globals_and_tracker(configuration: &Configuration) -> Arc { + initialize_global_services(configuration); + Arc::new(initialize_tracker(configuration)) +} + +/// It initializes the global services. +#[instrument(skip())] +pub fn initialize_global_services(configuration: &Configuration) { initialize_static(); initialize_logging(configuration); - Arc::new(initialize_tracker(configuration)) } /// It initializes the application static values. diff --git a/src/bootstrap/jobs/http_tracker.rs b/src/bootstrap/jobs/http_tracker.rs index 9135a8828..abb531049 100644 --- a/src/bootstrap/jobs/http_tracker.rs +++ b/src/bootstrap/jobs/http_tracker.rs @@ -86,7 +86,7 @@ mod tests { use torrust_tracker_test_helpers::configuration::ephemeral_public; - use crate::bootstrap::app::initialize_with_configuration; + use crate::bootstrap::app::initialize_globals_and_tracker; use crate::bootstrap::jobs::http_tracker::start_job; use crate::core::services::statistics; use crate::servers::http::Version; @@ -99,7 +99,7 @@ mod tests { let config = &http_tracker[0]; let (stats_event_sender, _stats_repository) = statistics::setup::factory(cfg.core.tracker_usage_statistics); let stats_event_sender = Arc::new(stats_event_sender); - let tracker = initialize_with_configuration(&cfg); + let tracker = initialize_globals_and_tracker(&cfg); let version = Version::V1; start_job(config, tracker, stats_event_sender, Registar::default().give_form(), version) diff --git a/src/bootstrap/jobs/tracker_apis.rs b/src/bootstrap/jobs/tracker_apis.rs index d84bb08a9..1932888de 100644 --- a/src/bootstrap/jobs/tracker_apis.rs +++ b/src/bootstrap/jobs/tracker_apis.rs @@ -140,7 +140,7 @@ mod tests { use tokio::sync::RwLock; use torrust_tracker_test_helpers::configuration::ephemeral_public; - use crate::bootstrap::app::initialize_with_configuration; + use crate::bootstrap::app::initialize_globals_and_tracker; use crate::bootstrap::jobs::tracker_apis::start_job; use crate::core::services::statistics; use crate::servers::apis::Version; @@ -158,7 +158,7 @@ mod tests { let stats_event_sender = Arc::new(stats_event_sender); let stats_repository = Arc::new(stats_repository); - let tracker = initialize_with_configuration(&cfg); + let tracker = initialize_globals_and_tracker(&cfg); let version = Version::V1; diff --git a/src/servers/apis/server.rs b/src/servers/apis/server.rs index bf1511edb..e0123a173 100644 --- a/src/servers/apis/server.rs +++ b/src/servers/apis/server.rs @@ -333,7 +333,7 @@ mod tests { use tokio::sync::RwLock; use torrust_tracker_test_helpers::configuration::ephemeral_public; - use crate::bootstrap::app::initialize_with_configuration; + use crate::bootstrap::app::initialize_globals_and_tracker; use crate::bootstrap::jobs::make_rust_tls; use crate::core::services::statistics; use crate::servers::apis::server::{ApiServer, Launcher}; @@ -350,7 +350,7 @@ mod tests { let (stats_event_sender, stats_repository) = statistics::setup::factory(cfg.core.tracker_usage_statistics); let stats_event_sender = Arc::new(stats_event_sender); let stats_repository = Arc::new(stats_repository); - let tracker = initialize_with_configuration(&cfg); + let tracker = initialize_globals_and_tracker(&cfg); let bind_to = config.bind_address; diff --git a/src/servers/http/server.rs b/src/servers/http/server.rs index 537fc37fb..40035bc52 100644 --- a/src/servers/http/server.rs +++ b/src/servers/http/server.rs @@ -242,7 +242,7 @@ mod tests { use torrust_tracker_test_helpers::configuration::ephemeral_public; - use crate::bootstrap::app::initialize_with_configuration; + use crate::bootstrap::app::initialize_globals_and_tracker; use crate::bootstrap::jobs::make_rust_tls; use crate::core::services::statistics; use crate::servers::http::server::{HttpServer, Launcher}; @@ -254,7 +254,7 @@ mod tests { let (stats_event_sender, _stats_repository) = statistics::setup::factory(cfg.core.tracker_usage_statistics); let stats_event_sender = Arc::new(stats_event_sender); - let tracker = initialize_with_configuration(&cfg); + let tracker = initialize_globals_and_tracker(&cfg); let http_trackers = cfg.http_trackers.clone().expect("missing HTTP trackers configuration"); let config = &http_trackers[0]; diff --git a/src/servers/udp/server/mod.rs b/src/servers/udp/server/mod.rs index 1b0a1da9a..373541f75 100644 --- a/src/servers/udp/server/mod.rs +++ b/src/servers/udp/server/mod.rs @@ -63,7 +63,7 @@ mod tests { use super::spawner::Spawner; use super::Server; - use crate::bootstrap::app::initialize_with_configuration; + use crate::bootstrap::app::initialize_globals_and_tracker; use crate::core::services::statistics; use crate::servers::registar::Registar; use crate::servers::udp::server::banning::BanService; @@ -76,7 +76,7 @@ mod tests { let (stats_event_sender, _stats_repository) = statistics::setup::factory(cfg.core.tracker_usage_statistics); let stats_event_sender = Arc::new(stats_event_sender); let ban_service = Arc::new(RwLock::new(BanService::new(MAX_CONNECTION_ID_ERRORS_PER_IP))); - let tracker = initialize_with_configuration(&cfg); + let tracker = initialize_globals_and_tracker(&cfg); let udp_trackers = cfg.udp_trackers.clone().expect("missing UDP trackers configuration"); let config = &udp_trackers[0]; @@ -110,7 +110,7 @@ mod tests { let (stats_event_sender, _stats_repository) = statistics::setup::factory(cfg.core.tracker_usage_statistics); let stats_event_sender = Arc::new(stats_event_sender); let ban_service = Arc::new(RwLock::new(BanService::new(MAX_CONNECTION_ID_ERRORS_PER_IP))); - let tracker = initialize_with_configuration(&cfg); + let tracker = initialize_globals_and_tracker(&cfg); let config = &cfg.udp_trackers.as_ref().unwrap().first().unwrap(); let bind_to = config.bind_address; diff --git a/tests/servers/api/environment.rs b/tests/servers/api/environment.rs index 6658c27da..32db0ab5d 100644 --- a/tests/servers/api/environment.rs +++ b/tests/servers/api/environment.rs @@ -6,7 +6,7 @@ use futures::executor::block_on; use tokio::sync::RwLock; use torrust_tracker_api_client::connection_info::{ConnectionInfo, Origin}; use torrust_tracker_configuration::{Configuration, HttpApi}; -use torrust_tracker_lib::bootstrap::app::initialize_with_configuration; +use torrust_tracker_lib::bootstrap::app::initialize_globals_and_tracker; use torrust_tracker_lib::bootstrap::jobs::make_rust_tls; use torrust_tracker_lib::core::services::statistics; use torrust_tracker_lib::core::statistics::event::sender::Sender; @@ -50,9 +50,9 @@ impl Environment { let stats_repository = Arc::new(stats_repository); let ban_service = Arc::new(RwLock::new(BanService::new(MAX_CONNECTION_ID_ERRORS_PER_IP))); - let tracker = initialize_with_configuration(configuration); + let tracker = initialize_globals_and_tracker(configuration); - // todo: instantiate outside of `initialize_with_configuration` + // todo: instantiate outside of `initialize_globals_and_tracker` let whitelist_manager = tracker.whitelist_manager.clone(); let config = Arc::new(configuration.http_api.clone().expect("missing API configuration")); diff --git a/tests/servers/http/environment.rs b/tests/servers/http/environment.rs index 845d9d440..b6f98f32c 100644 --- a/tests/servers/http/environment.rs +++ b/tests/servers/http/environment.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use bittorrent_primitives::info_hash::InfoHash; use futures::executor::block_on; use torrust_tracker_configuration::{Configuration, HttpTracker}; -use torrust_tracker_lib::bootstrap::app::initialize_with_configuration; +use torrust_tracker_lib::bootstrap::app::initialize_globals_and_tracker; use torrust_tracker_lib::bootstrap::jobs::make_rust_tls; use torrust_tracker_lib::core::services::statistics; use torrust_tracker_lib::core::statistics::event::sender::Sender; @@ -38,9 +38,9 @@ impl Environment { let stats_event_sender = Arc::new(stats_event_sender); let stats_repository = Arc::new(stats_repository); - let tracker = initialize_with_configuration(configuration); + let tracker = initialize_globals_and_tracker(configuration); - // todo: instantiate outside of `initialize_with_configuration` + // todo: instantiate outside of `initialize_globals_and_tracker` let whitelist_manager = tracker.whitelist_manager.clone(); let http_tracker = configuration diff --git a/tests/servers/udp/environment.rs b/tests/servers/udp/environment.rs index 06a22229e..69952ecda 100644 --- a/tests/servers/udp/environment.rs +++ b/tests/servers/udp/environment.rs @@ -4,7 +4,7 @@ use std::sync::Arc; use bittorrent_primitives::info_hash::InfoHash; use tokio::sync::RwLock; use torrust_tracker_configuration::{Configuration, UdpTracker, DEFAULT_TIMEOUT}; -use torrust_tracker_lib::bootstrap::app::initialize_with_configuration; +use torrust_tracker_lib::bootstrap::app::initialize_globals_and_tracker; use torrust_tracker_lib::core::services::statistics; use torrust_tracker_lib::core::statistics::event::sender::Sender; use torrust_tracker_lib::core::statistics::repository::Repository; @@ -49,7 +49,7 @@ impl Environment { let stats_repository = Arc::new(stats_repository); let ban_service = Arc::new(RwLock::new(BanService::new(MAX_CONNECTION_ID_ERRORS_PER_IP))); - let tracker = initialize_with_configuration(configuration); + let tracker = initialize_globals_and_tracker(configuration); let udp_tracker = configuration.udp_trackers.clone().expect("missing UDP tracker configuration"); From 4aea9db2215b64eedf44a1264d56f53ecaa63812 Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Fri, 17 Jan 2025 16:42:53 +0000 Subject: [PATCH 3/9] refactor: [#1187] extract fn initialize_app_container --- src/bootstrap/app.rs | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/src/bootstrap/app.rs b/src/bootstrap/app.rs index 294de64e3..65b0549ec 100644 --- a/src/bootstrap/app.rs +++ b/src/bootstrap/app.rs @@ -48,27 +48,13 @@ pub fn setup() -> (Configuration, AppContainer) { panic!("Configuration error: {e}"); } - // Initialize services - - let (stats_event_sender, stats_repository) = statistics::setup::factory(configuration.core.tracker_usage_statistics); - let stats_event_sender = Arc::new(stats_event_sender); - let stats_repository = Arc::new(stats_repository); - - let ban_service = Arc::new(RwLock::new(BanService::new(MAX_CONNECTION_ID_ERRORS_PER_IP))); - - let tracker = initialize_globals_and_tracker(&configuration); + initialize_global_services(&configuration); tracing::info!("Configuration:\n{}", configuration.clone().mask_secrets().to_json()); - ( - configuration, - AppContainer { - tracker, - ban_service, - stats_event_sender, - stats_repository, - }, - ) + let app_container = initialize_app_container(&configuration); + + (configuration, app_container) } /// checks if the seed is the instance seed in production. @@ -100,6 +86,25 @@ pub fn initialize_global_services(configuration: &Configuration) { initialize_logging(configuration); } +/// It initializes the stIoC Container. +#[instrument(skip())] +pub fn initialize_app_container(configuration: &Configuration) -> AppContainer { + let (stats_event_sender, stats_repository) = statistics::setup::factory(configuration.core.tracker_usage_statistics); + let stats_event_sender = Arc::new(stats_event_sender); + let stats_repository = Arc::new(stats_repository); + + let ban_service = Arc::new(RwLock::new(BanService::new(MAX_CONNECTION_ID_ERRORS_PER_IP))); + + let tracker = Arc::new(initialize_tracker(configuration)); + + AppContainer { + tracker, + ban_service, + stats_event_sender, + stats_repository, + } +} + /// It initializes the application static values. /// /// These values are accessible throughout the entire application: From 36db088fb6d79301984fb59a81698237f354a062 Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Fri, 17 Jan 2025 17:00:30 +0000 Subject: [PATCH 4/9] refactor: [#1187] inline fn initialize_globals_and_tracker --- src/bootstrap/app.rs | 12 +----------- src/bootstrap/jobs/http_tracker.rs | 8 ++++++-- src/bootstrap/jobs/tracker_apis.rs | 5 +++-- src/servers/apis/server.rs | 6 ++++-- src/servers/http/server.rs | 6 ++++-- src/servers/udp/server/mod.rs | 10 +++++++--- tests/servers/api/environment.rs | 7 ++++--- tests/servers/http/environment.rs | 7 ++++--- tests/servers/udp/environment.rs | 5 +++-- 9 files changed, 36 insertions(+), 30 deletions(-) diff --git a/src/bootstrap/app.rs b/src/bootstrap/app.rs index 65b0549ec..b44cf745a 100644 --- a/src/bootstrap/app.rs +++ b/src/bootstrap/app.rs @@ -69,16 +69,6 @@ pub fn check_seed() { assert_eq!(seed, instance, "maybe using zeroed seed in production!?"); } -/// It initializes the application with the given configuration. -/// -/// The configuration may be obtained from the environment (via config file or env vars). -#[must_use] -#[instrument(skip())] -pub fn initialize_globals_and_tracker(configuration: &Configuration) -> Arc { - initialize_global_services(configuration); - Arc::new(initialize_tracker(configuration)) -} - /// It initializes the global services. #[instrument(skip())] pub fn initialize_global_services(configuration: &Configuration) { @@ -86,7 +76,7 @@ pub fn initialize_global_services(configuration: &Configuration) { initialize_logging(configuration); } -/// It initializes the stIoC Container. +/// It initializes the IoC Container. #[instrument(skip())] pub fn initialize_app_container(configuration: &Configuration) -> AppContainer { let (stats_event_sender, stats_repository) = statistics::setup::factory(configuration.core.tracker_usage_statistics); diff --git a/src/bootstrap/jobs/http_tracker.rs b/src/bootstrap/jobs/http_tracker.rs index abb531049..aff9a2e11 100644 --- a/src/bootstrap/jobs/http_tracker.rs +++ b/src/bootstrap/jobs/http_tracker.rs @@ -86,7 +86,7 @@ mod tests { use torrust_tracker_test_helpers::configuration::ephemeral_public; - use crate::bootstrap::app::initialize_globals_and_tracker; + use crate::bootstrap::app::{initialize_global_services, initialize_tracker}; use crate::bootstrap::jobs::http_tracker::start_job; use crate::core::services::statistics; use crate::servers::http::Version; @@ -97,9 +97,13 @@ mod tests { let cfg = Arc::new(ephemeral_public()); let http_tracker = cfg.http_trackers.clone().expect("missing HTTP tracker configuration"); let config = &http_tracker[0]; + let (stats_event_sender, _stats_repository) = statistics::setup::factory(cfg.core.tracker_usage_statistics); let stats_event_sender = Arc::new(stats_event_sender); - let tracker = initialize_globals_and_tracker(&cfg); + + initialize_global_services(&cfg); + let tracker = Arc::new(initialize_tracker(&cfg)); + let version = Version::V1; start_job(config, tracker, stats_event_sender, Registar::default().give_form(), version) diff --git a/src/bootstrap/jobs/tracker_apis.rs b/src/bootstrap/jobs/tracker_apis.rs index 1932888de..e4d73849a 100644 --- a/src/bootstrap/jobs/tracker_apis.rs +++ b/src/bootstrap/jobs/tracker_apis.rs @@ -140,7 +140,7 @@ mod tests { use tokio::sync::RwLock; use torrust_tracker_test_helpers::configuration::ephemeral_public; - use crate::bootstrap::app::initialize_globals_and_tracker; + use crate::bootstrap::app::{initialize_global_services, initialize_tracker}; use crate::bootstrap::jobs::tracker_apis::start_job; use crate::core::services::statistics; use crate::servers::apis::Version; @@ -158,7 +158,8 @@ mod tests { let stats_event_sender = Arc::new(stats_event_sender); let stats_repository = Arc::new(stats_repository); - let tracker = initialize_globals_and_tracker(&cfg); + initialize_global_services(&cfg); + let tracker = Arc::new(initialize_tracker(&cfg)); let version = Version::V1; diff --git a/src/servers/apis/server.rs b/src/servers/apis/server.rs index e0123a173..edec7fc1a 100644 --- a/src/servers/apis/server.rs +++ b/src/servers/apis/server.rs @@ -333,7 +333,7 @@ mod tests { use tokio::sync::RwLock; use torrust_tracker_test_helpers::configuration::ephemeral_public; - use crate::bootstrap::app::initialize_globals_and_tracker; + use crate::bootstrap::app::{initialize_global_services, initialize_tracker}; use crate::bootstrap::jobs::make_rust_tls; use crate::core::services::statistics; use crate::servers::apis::server::{ApiServer, Launcher}; @@ -350,7 +350,9 @@ mod tests { let (stats_event_sender, stats_repository) = statistics::setup::factory(cfg.core.tracker_usage_statistics); let stats_event_sender = Arc::new(stats_event_sender); let stats_repository = Arc::new(stats_repository); - let tracker = initialize_globals_and_tracker(&cfg); + + initialize_global_services(&cfg); + let tracker = Arc::new(initialize_tracker(&cfg)); let bind_to = config.bind_address; diff --git a/src/servers/http/server.rs b/src/servers/http/server.rs index 40035bc52..ec466ae4a 100644 --- a/src/servers/http/server.rs +++ b/src/servers/http/server.rs @@ -242,7 +242,7 @@ mod tests { use torrust_tracker_test_helpers::configuration::ephemeral_public; - use crate::bootstrap::app::initialize_globals_and_tracker; + use crate::bootstrap::app::{initialize_global_services, initialize_tracker}; use crate::bootstrap::jobs::make_rust_tls; use crate::core::services::statistics; use crate::servers::http::server::{HttpServer, Launcher}; @@ -254,7 +254,9 @@ mod tests { let (stats_event_sender, _stats_repository) = statistics::setup::factory(cfg.core.tracker_usage_statistics); let stats_event_sender = Arc::new(stats_event_sender); - let tracker = initialize_globals_and_tracker(&cfg); + + initialize_global_services(&cfg); + let tracker = Arc::new(initialize_tracker(&cfg)); let http_trackers = cfg.http_trackers.clone().expect("missing HTTP trackers configuration"); let config = &http_trackers[0]; diff --git a/src/servers/udp/server/mod.rs b/src/servers/udp/server/mod.rs index 373541f75..950c0fa74 100644 --- a/src/servers/udp/server/mod.rs +++ b/src/servers/udp/server/mod.rs @@ -63,7 +63,7 @@ mod tests { use super::spawner::Spawner; use super::Server; - use crate::bootstrap::app::initialize_globals_and_tracker; + use crate::bootstrap::app::{initialize_global_services, initialize_tracker}; use crate::core::services::statistics; use crate::servers::registar::Registar; use crate::servers::udp::server::banning::BanService; @@ -76,7 +76,9 @@ mod tests { let (stats_event_sender, _stats_repository) = statistics::setup::factory(cfg.core.tracker_usage_statistics); let stats_event_sender = Arc::new(stats_event_sender); let ban_service = Arc::new(RwLock::new(BanService::new(MAX_CONNECTION_ID_ERRORS_PER_IP))); - let tracker = initialize_globals_and_tracker(&cfg); + + initialize_global_services(&cfg); + let tracker = Arc::new(initialize_tracker(&cfg)); let udp_trackers = cfg.udp_trackers.clone().expect("missing UDP trackers configuration"); let config = &udp_trackers[0]; @@ -110,7 +112,9 @@ mod tests { let (stats_event_sender, _stats_repository) = statistics::setup::factory(cfg.core.tracker_usage_statistics); let stats_event_sender = Arc::new(stats_event_sender); let ban_service = Arc::new(RwLock::new(BanService::new(MAX_CONNECTION_ID_ERRORS_PER_IP))); - let tracker = initialize_globals_and_tracker(&cfg); + + initialize_global_services(&cfg); + let tracker = Arc::new(initialize_tracker(&cfg)); let config = &cfg.udp_trackers.as_ref().unwrap().first().unwrap(); let bind_to = config.bind_address; diff --git a/tests/servers/api/environment.rs b/tests/servers/api/environment.rs index 32db0ab5d..e7fc319d8 100644 --- a/tests/servers/api/environment.rs +++ b/tests/servers/api/environment.rs @@ -6,7 +6,7 @@ use futures::executor::block_on; use tokio::sync::RwLock; use torrust_tracker_api_client::connection_info::{ConnectionInfo, Origin}; use torrust_tracker_configuration::{Configuration, HttpApi}; -use torrust_tracker_lib::bootstrap::app::initialize_globals_and_tracker; +use torrust_tracker_lib::bootstrap::app::{initialize_global_services, initialize_tracker}; use torrust_tracker_lib::bootstrap::jobs::make_rust_tls; use torrust_tracker_lib::core::services::statistics; use torrust_tracker_lib::core::statistics::event::sender::Sender; @@ -50,9 +50,10 @@ impl Environment { let stats_repository = Arc::new(stats_repository); let ban_service = Arc::new(RwLock::new(BanService::new(MAX_CONNECTION_ID_ERRORS_PER_IP))); - let tracker = initialize_globals_and_tracker(configuration); + initialize_global_services(configuration); + let tracker = Arc::new(initialize_tracker(configuration)); - // todo: instantiate outside of `initialize_globals_and_tracker` + // todo: instantiate outside of `initialize_tracker_dependencies` let whitelist_manager = tracker.whitelist_manager.clone(); let config = Arc::new(configuration.http_api.clone().expect("missing API configuration")); diff --git a/tests/servers/http/environment.rs b/tests/servers/http/environment.rs index b6f98f32c..2137ca0d4 100644 --- a/tests/servers/http/environment.rs +++ b/tests/servers/http/environment.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use bittorrent_primitives::info_hash::InfoHash; use futures::executor::block_on; use torrust_tracker_configuration::{Configuration, HttpTracker}; -use torrust_tracker_lib::bootstrap::app::initialize_globals_and_tracker; +use torrust_tracker_lib::bootstrap::app::{initialize_global_services, initialize_tracker}; use torrust_tracker_lib::bootstrap::jobs::make_rust_tls; use torrust_tracker_lib::core::services::statistics; use torrust_tracker_lib::core::statistics::event::sender::Sender; @@ -38,9 +38,10 @@ impl Environment { let stats_event_sender = Arc::new(stats_event_sender); let stats_repository = Arc::new(stats_repository); - let tracker = initialize_globals_and_tracker(configuration); + initialize_global_services(configuration); + let tracker = Arc::new(initialize_tracker(configuration)); - // todo: instantiate outside of `initialize_globals_and_tracker` + // todo: instantiate outside of `initialize_tracker_dependencies` let whitelist_manager = tracker.whitelist_manager.clone(); let http_tracker = configuration diff --git a/tests/servers/udp/environment.rs b/tests/servers/udp/environment.rs index 69952ecda..0a0125714 100644 --- a/tests/servers/udp/environment.rs +++ b/tests/servers/udp/environment.rs @@ -4,7 +4,7 @@ use std::sync::Arc; use bittorrent_primitives::info_hash::InfoHash; use tokio::sync::RwLock; use torrust_tracker_configuration::{Configuration, UdpTracker, DEFAULT_TIMEOUT}; -use torrust_tracker_lib::bootstrap::app::initialize_globals_and_tracker; +use torrust_tracker_lib::bootstrap::app::{initialize_global_services, initialize_tracker}; use torrust_tracker_lib::core::services::statistics; use torrust_tracker_lib::core::statistics::event::sender::Sender; use torrust_tracker_lib::core::statistics::repository::Repository; @@ -49,7 +49,8 @@ impl Environment { let stats_repository = Arc::new(stats_repository); let ban_service = Arc::new(RwLock::new(BanService::new(MAX_CONNECTION_ID_ERRORS_PER_IP))); - let tracker = initialize_globals_and_tracker(configuration); + initialize_global_services(configuration); + let tracker = Arc::new(initialize_tracker(configuration)); let udp_tracker = configuration.udp_trackers.clone().expect("missing UDP tracker configuration"); From a4d8da0eff07f1ccd471b31b21193682de35b955 Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Fri, 17 Jan 2025 17:23:04 +0000 Subject: [PATCH 5/9] refactor: [#1187] inline fn initialize_tracker --- src/bootstrap/app.rs | 19 +++---------------- src/bootstrap/jobs/http_tracker.rs | 9 ++++++--- src/bootstrap/jobs/tracker_apis.rs | 9 ++++++--- src/servers/apis/server.rs | 9 ++++++--- src/servers/http/server.rs | 9 ++++++--- src/servers/udp/server/mod.rs | 14 ++++++++++---- tests/servers/api/environment.rs | 10 +++++----- tests/servers/http/environment.rs | 10 +++++----- tests/servers/udp/environment.rs | 9 ++++++--- 9 files changed, 53 insertions(+), 45 deletions(-) diff --git a/src/bootstrap/app.rs b/src/bootstrap/app.rs index b44cf745a..b0df03404 100644 --- a/src/bootstrap/app.rs +++ b/src/bootstrap/app.rs @@ -25,7 +25,6 @@ use crate::container::AppContainer; use crate::core::databases::Database; use crate::core::services::{initialize_database, initialize_whitelist, statistics, tracker_factory}; use crate::core::whitelist::WhiteListManager; -use crate::core::Tracker; use crate::servers::udp::server::banning::BanService; use crate::servers::udp::server::launcher::MAX_CONNECTION_ID_ERRORS_PER_IP; use crate::shared::crypto::ephemeral_instance_keys; @@ -82,10 +81,10 @@ pub fn initialize_app_container(configuration: &Configuration) -> AppContainer { let (stats_event_sender, stats_repository) = statistics::setup::factory(configuration.core.tracker_usage_statistics); let stats_event_sender = Arc::new(stats_event_sender); let stats_repository = Arc::new(stats_repository); - let ban_service = Arc::new(RwLock::new(BanService::new(MAX_CONNECTION_ID_ERRORS_PER_IP))); - - let tracker = Arc::new(initialize_tracker(configuration)); + let database = initialize_database(configuration); + let whitelist_manager = initialize_whitelist(database.clone()); + let tracker = Arc::new(tracker_factory(configuration, &database, &whitelist_manager)); AppContainer { tracker, @@ -116,18 +115,6 @@ pub fn initialize_static() { lazy_static::initialize(&ephemeral_instance_keys::ZEROED_TEST_CIPHER_BLOWFISH); } -/// It builds the domain tracker -/// -/// The tracker is the domain layer service. It's the entrypoint to make requests to the domain layer. -/// It's used by other higher-level components like the UDP and HTTP trackers or the tracker API. -#[must_use] -#[instrument(skip(config))] -pub fn initialize_tracker(config: &Configuration) -> Tracker { - let (database, whitelist_manager) = initialize_tracker_dependencies(config); - - tracker_factory(config, &database, &whitelist_manager) -} - #[allow(clippy::type_complexity)] #[must_use] pub fn initialize_tracker_dependencies(config: &Configuration) -> (Arc>, Arc) { diff --git a/src/bootstrap/jobs/http_tracker.rs b/src/bootstrap/jobs/http_tracker.rs index aff9a2e11..0714cbd72 100644 --- a/src/bootstrap/jobs/http_tracker.rs +++ b/src/bootstrap/jobs/http_tracker.rs @@ -86,9 +86,9 @@ mod tests { use torrust_tracker_test_helpers::configuration::ephemeral_public; - use crate::bootstrap::app::{initialize_global_services, initialize_tracker}; + use crate::bootstrap::app::initialize_global_services; use crate::bootstrap::jobs::http_tracker::start_job; - use crate::core::services::statistics; + use crate::core::services::{initialize_database, initialize_whitelist, statistics, tracker_factory}; use crate::servers::http::Version; use crate::servers::registar::Registar; @@ -102,7 +102,10 @@ mod tests { let stats_event_sender = Arc::new(stats_event_sender); initialize_global_services(&cfg); - let tracker = Arc::new(initialize_tracker(&cfg)); + + let database = initialize_database(&cfg); + let whitelist_manager = initialize_whitelist(database.clone()); + let tracker = Arc::new(tracker_factory(&cfg, &database, &whitelist_manager)); let version = Version::V1; diff --git a/src/bootstrap/jobs/tracker_apis.rs b/src/bootstrap/jobs/tracker_apis.rs index e4d73849a..dabed1509 100644 --- a/src/bootstrap/jobs/tracker_apis.rs +++ b/src/bootstrap/jobs/tracker_apis.rs @@ -140,9 +140,9 @@ mod tests { use tokio::sync::RwLock; use torrust_tracker_test_helpers::configuration::ephemeral_public; - use crate::bootstrap::app::{initialize_global_services, initialize_tracker}; + use crate::bootstrap::app::initialize_global_services; use crate::bootstrap::jobs::tracker_apis::start_job; - use crate::core::services::statistics; + use crate::core::services::{initialize_database, initialize_whitelist, statistics, tracker_factory}; use crate::servers::apis::Version; use crate::servers::registar::Registar; use crate::servers::udp::server::banning::BanService; @@ -159,7 +159,10 @@ mod tests { let stats_repository = Arc::new(stats_repository); initialize_global_services(&cfg); - let tracker = Arc::new(initialize_tracker(&cfg)); + + let database = initialize_database(&cfg); + let whitelist_manager = initialize_whitelist(database.clone()); + let tracker = Arc::new(tracker_factory(&cfg, &database, &whitelist_manager)); let version = Version::V1; diff --git a/src/servers/apis/server.rs b/src/servers/apis/server.rs index edec7fc1a..e74b2265e 100644 --- a/src/servers/apis/server.rs +++ b/src/servers/apis/server.rs @@ -333,9 +333,9 @@ mod tests { use tokio::sync::RwLock; use torrust_tracker_test_helpers::configuration::ephemeral_public; - use crate::bootstrap::app::{initialize_global_services, initialize_tracker}; + use crate::bootstrap::app::initialize_global_services; use crate::bootstrap::jobs::make_rust_tls; - use crate::core::services::statistics; + use crate::core::services::{initialize_database, initialize_whitelist, statistics, tracker_factory}; use crate::servers::apis::server::{ApiServer, Launcher}; use crate::servers::registar::Registar; use crate::servers::udp::server::banning::BanService; @@ -352,7 +352,10 @@ mod tests { let stats_repository = Arc::new(stats_repository); initialize_global_services(&cfg); - let tracker = Arc::new(initialize_tracker(&cfg)); + + let database = initialize_database(&cfg); + let whitelist_manager = initialize_whitelist(database.clone()); + let tracker = Arc::new(tracker_factory(&cfg, &database, &whitelist_manager)); let bind_to = config.bind_address; diff --git a/src/servers/http/server.rs b/src/servers/http/server.rs index ec466ae4a..1cb8d7adb 100644 --- a/src/servers/http/server.rs +++ b/src/servers/http/server.rs @@ -242,9 +242,9 @@ mod tests { use torrust_tracker_test_helpers::configuration::ephemeral_public; - use crate::bootstrap::app::{initialize_global_services, initialize_tracker}; + use crate::bootstrap::app::initialize_global_services; use crate::bootstrap::jobs::make_rust_tls; - use crate::core::services::statistics; + use crate::core::services::{initialize_database, initialize_whitelist, statistics, tracker_factory}; use crate::servers::http::server::{HttpServer, Launcher}; use crate::servers::registar::Registar; @@ -256,7 +256,10 @@ mod tests { let stats_event_sender = Arc::new(stats_event_sender); initialize_global_services(&cfg); - let tracker = Arc::new(initialize_tracker(&cfg)); + + let database = initialize_database(&cfg); + let whitelist_manager = initialize_whitelist(database.clone()); + let tracker = Arc::new(tracker_factory(&cfg, &database, &whitelist_manager)); let http_trackers = cfg.http_trackers.clone().expect("missing HTTP trackers configuration"); let config = &http_trackers[0]; diff --git a/src/servers/udp/server/mod.rs b/src/servers/udp/server/mod.rs index 950c0fa74..d5fe554ea 100644 --- a/src/servers/udp/server/mod.rs +++ b/src/servers/udp/server/mod.rs @@ -63,8 +63,8 @@ mod tests { use super::spawner::Spawner; use super::Server; - use crate::bootstrap::app::{initialize_global_services, initialize_tracker}; - use crate::core::services::statistics; + use crate::bootstrap::app::initialize_global_services; + use crate::core::services::{initialize_database, initialize_whitelist, statistics, tracker_factory}; use crate::servers::registar::Registar; use crate::servers::udp::server::banning::BanService; use crate::servers::udp::server::launcher::MAX_CONNECTION_ID_ERRORS_PER_IP; @@ -78,7 +78,10 @@ mod tests { let ban_service = Arc::new(RwLock::new(BanService::new(MAX_CONNECTION_ID_ERRORS_PER_IP))); initialize_global_services(&cfg); - let tracker = Arc::new(initialize_tracker(&cfg)); + + let database = initialize_database(&cfg); + let whitelist_manager = initialize_whitelist(database.clone()); + let tracker = Arc::new(tracker_factory(&cfg, &database, &whitelist_manager)); let udp_trackers = cfg.udp_trackers.clone().expect("missing UDP trackers configuration"); let config = &udp_trackers[0]; @@ -114,7 +117,10 @@ mod tests { let ban_service = Arc::new(RwLock::new(BanService::new(MAX_CONNECTION_ID_ERRORS_PER_IP))); initialize_global_services(&cfg); - let tracker = Arc::new(initialize_tracker(&cfg)); + + let database = initialize_database(&cfg); + let whitelist_manager = initialize_whitelist(database.clone()); + let tracker = Arc::new(tracker_factory(&cfg, &database, &whitelist_manager)); let config = &cfg.udp_trackers.as_ref().unwrap().first().unwrap(); let bind_to = config.bind_address; diff --git a/tests/servers/api/environment.rs b/tests/servers/api/environment.rs index e7fc319d8..b230562f3 100644 --- a/tests/servers/api/environment.rs +++ b/tests/servers/api/environment.rs @@ -6,9 +6,9 @@ use futures::executor::block_on; use tokio::sync::RwLock; use torrust_tracker_api_client::connection_info::{ConnectionInfo, Origin}; use torrust_tracker_configuration::{Configuration, HttpApi}; -use torrust_tracker_lib::bootstrap::app::{initialize_global_services, initialize_tracker}; +use torrust_tracker_lib::bootstrap::app::initialize_global_services; use torrust_tracker_lib::bootstrap::jobs::make_rust_tls; -use torrust_tracker_lib::core::services::statistics; +use torrust_tracker_lib::core::services::{initialize_database, initialize_whitelist, statistics, tracker_factory}; use torrust_tracker_lib::core::statistics::event::sender::Sender; use torrust_tracker_lib::core::statistics::repository::Repository; use torrust_tracker_lib::core::whitelist::WhiteListManager; @@ -51,10 +51,10 @@ impl Environment { let ban_service = Arc::new(RwLock::new(BanService::new(MAX_CONNECTION_ID_ERRORS_PER_IP))); initialize_global_services(configuration); - let tracker = Arc::new(initialize_tracker(configuration)); - // todo: instantiate outside of `initialize_tracker_dependencies` - let whitelist_manager = tracker.whitelist_manager.clone(); + let database = initialize_database(configuration); + let whitelist_manager = initialize_whitelist(database.clone()); + let tracker = Arc::new(tracker_factory(configuration, &database, &whitelist_manager)); let config = Arc::new(configuration.http_api.clone().expect("missing API configuration")); diff --git a/tests/servers/http/environment.rs b/tests/servers/http/environment.rs index 2137ca0d4..3732e9341 100644 --- a/tests/servers/http/environment.rs +++ b/tests/servers/http/environment.rs @@ -3,9 +3,9 @@ use std::sync::Arc; use bittorrent_primitives::info_hash::InfoHash; use futures::executor::block_on; use torrust_tracker_configuration::{Configuration, HttpTracker}; -use torrust_tracker_lib::bootstrap::app::{initialize_global_services, initialize_tracker}; +use torrust_tracker_lib::bootstrap::app::initialize_global_services; use torrust_tracker_lib::bootstrap::jobs::make_rust_tls; -use torrust_tracker_lib::core::services::statistics; +use torrust_tracker_lib::core::services::{initialize_database, initialize_whitelist, statistics, tracker_factory}; use torrust_tracker_lib::core::statistics::event::sender::Sender; use torrust_tracker_lib::core::statistics::repository::Repository; use torrust_tracker_lib::core::whitelist::WhiteListManager; @@ -39,10 +39,10 @@ impl Environment { let stats_repository = Arc::new(stats_repository); initialize_global_services(configuration); - let tracker = Arc::new(initialize_tracker(configuration)); - // todo: instantiate outside of `initialize_tracker_dependencies` - let whitelist_manager = tracker.whitelist_manager.clone(); + let database = initialize_database(configuration); + let whitelist_manager = initialize_whitelist(database.clone()); + let tracker = Arc::new(tracker_factory(configuration, &database, &whitelist_manager)); let http_tracker = configuration .http_trackers diff --git a/tests/servers/udp/environment.rs b/tests/servers/udp/environment.rs index 0a0125714..34841df16 100644 --- a/tests/servers/udp/environment.rs +++ b/tests/servers/udp/environment.rs @@ -4,8 +4,8 @@ use std::sync::Arc; use bittorrent_primitives::info_hash::InfoHash; use tokio::sync::RwLock; use torrust_tracker_configuration::{Configuration, UdpTracker, DEFAULT_TIMEOUT}; -use torrust_tracker_lib::bootstrap::app::{initialize_global_services, initialize_tracker}; -use torrust_tracker_lib::core::services::statistics; +use torrust_tracker_lib::bootstrap::app::initialize_global_services; +use torrust_tracker_lib::core::services::{initialize_database, initialize_whitelist, statistics, tracker_factory}; use torrust_tracker_lib::core::statistics::event::sender::Sender; use torrust_tracker_lib::core::statistics::repository::Repository; use torrust_tracker_lib::core::Tracker; @@ -50,7 +50,10 @@ impl Environment { let ban_service = Arc::new(RwLock::new(BanService::new(MAX_CONNECTION_ID_ERRORS_PER_IP))); initialize_global_services(configuration); - let tracker = Arc::new(initialize_tracker(configuration)); + + let database = initialize_database(configuration); + let whitelist_manager = initialize_whitelist(database.clone()); + let tracker = Arc::new(tracker_factory(configuration, &database, &whitelist_manager)); let udp_tracker = configuration.udp_trackers.clone().expect("missing UDP tracker configuration"); From aa9f1c314e4b020a32d591f3e32338d18de4d609 Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Fri, 17 Jan 2025 17:31:19 +0000 Subject: [PATCH 6/9] refactor: [#1187] move fn initialize_tracker_dependencies --- src/app_test.rs | 18 ++++++++++++++++++ src/bootstrap/app.rs | 11 ----------- src/core/mod.rs | 2 +- src/core/services/statistics/mod.rs | 2 +- src/core/services/torrent.rs | 4 ++-- src/lib.rs | 1 + src/servers/http/v1/handlers/announce.rs | 2 +- src/servers/http/v1/handlers/scrape.rs | 2 +- src/servers/http/v1/services/announce.rs | 4 ++-- src/servers/http/v1/services/scrape.rs | 2 +- src/servers/udp/handlers.rs | 4 ++-- 11 files changed, 30 insertions(+), 22 deletions(-) create mode 100644 src/app_test.rs diff --git a/src/app_test.rs b/src/app_test.rs new file mode 100644 index 000000000..c50f87965 --- /dev/null +++ b/src/app_test.rs @@ -0,0 +1,18 @@ +//! This file contains only functions used for testing. +use std::sync::Arc; + +use torrust_tracker_configuration::Configuration; + +use crate::core::databases::Database; +use crate::core::services::{initialize_database, initialize_whitelist}; +use crate::core::whitelist::WhiteListManager; + +/// Initialize the tracker dependencies. +#[allow(clippy::type_complexity)] +#[must_use] +pub fn initialize_tracker_dependencies(config: &Configuration) -> (Arc>, Arc) { + let database = initialize_database(config); + let whitelist_manager = initialize_whitelist(database.clone()); + + (database, whitelist_manager) +} diff --git a/src/bootstrap/app.rs b/src/bootstrap/app.rs index b0df03404..fb3f50b65 100644 --- a/src/bootstrap/app.rs +++ b/src/bootstrap/app.rs @@ -22,9 +22,7 @@ use tracing::instrument; use super::config::initialize_configuration; use crate::bootstrap; use crate::container::AppContainer; -use crate::core::databases::Database; use crate::core::services::{initialize_database, initialize_whitelist, statistics, tracker_factory}; -use crate::core::whitelist::WhiteListManager; use crate::servers::udp::server::banning::BanService; use crate::servers::udp::server::launcher::MAX_CONNECTION_ID_ERRORS_PER_IP; use crate::shared::crypto::ephemeral_instance_keys; @@ -115,15 +113,6 @@ pub fn initialize_static() { lazy_static::initialize(&ephemeral_instance_keys::ZEROED_TEST_CIPHER_BLOWFISH); } -#[allow(clippy::type_complexity)] -#[must_use] -pub fn initialize_tracker_dependencies(config: &Configuration) -> (Arc>, Arc) { - let database = initialize_database(config); - let whitelist_manager = initialize_whitelist(database.clone()); - - (database, whitelist_manager) -} - /// It initializes the log threshold, format and channel. /// /// See [the logging setup](crate::bootstrap::logging::setup) for more info about logging. diff --git a/src/core/mod.rs b/src/core/mod.rs index 9aef1b2f2..a5f9988b9 100644 --- a/src/core/mod.rs +++ b/src/core/mod.rs @@ -1080,7 +1080,7 @@ mod tests { use torrust_tracker_primitives::DurationSinceUnixEpoch; use torrust_tracker_test_helpers::configuration; - use crate::bootstrap::app::initialize_tracker_dependencies; + use crate::app_test::initialize_tracker_dependencies; use crate::core::peer::Peer; use crate::core::services::tracker_factory; use crate::core::whitelist::WhiteListManager; diff --git a/src/core/services/statistics/mod.rs b/src/core/services/statistics/mod.rs index 657f3eb06..fd185a727 100644 --- a/src/core/services/statistics/mod.rs +++ b/src/core/services/statistics/mod.rs @@ -117,7 +117,7 @@ mod tests { use torrust_tracker_primitives::torrent_metrics::TorrentsMetrics; use torrust_tracker_test_helpers::configuration; - use crate::bootstrap::app::initialize_tracker_dependencies; + use crate::app_test::initialize_tracker_dependencies; use crate::core; use crate::core::services::statistics::{self, get_metrics, TrackerMetrics}; use crate::core::services::tracker_factory; diff --git a/src/core/services/torrent.rs b/src/core/services/torrent.rs index 9a1a2a725..445b8fb8f 100644 --- a/src/core/services/torrent.rs +++ b/src/core/services/torrent.rs @@ -129,7 +129,7 @@ mod tests { use torrust_tracker_configuration::Configuration; use torrust_tracker_test_helpers::configuration; - use crate::bootstrap::app::initialize_tracker_dependencies; + use crate::app_test::initialize_tracker_dependencies; use crate::core::services::torrent::tests::sample_peer; use crate::core::services::torrent::{get_torrent_info, Info}; use crate::core::services::tracker_factory; @@ -191,7 +191,7 @@ mod tests { use torrust_tracker_configuration::Configuration; use torrust_tracker_test_helpers::configuration; - use crate::bootstrap::app::initialize_tracker_dependencies; + use crate::app_test::initialize_tracker_dependencies; use crate::core::services::torrent::tests::sample_peer; use crate::core::services::torrent::{get_torrents_page, BasicInfo, Pagination}; use crate::core::services::tracker_factory; diff --git a/src/lib.rs b/src/lib.rs index 212430605..8e0e64db0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -491,6 +491,7 @@ use torrust_tracker_clock::clock; pub mod app; +pub mod app_test; pub mod bootstrap; pub mod console; pub mod container; diff --git a/src/servers/http/v1/handlers/announce.rs b/src/servers/http/v1/handlers/announce.rs index 1c8779625..6cfe0871f 100644 --- a/src/servers/http/v1/handlers/announce.rs +++ b/src/servers/http/v1/handlers/announce.rs @@ -205,7 +205,7 @@ mod tests { use bittorrent_primitives::info_hash::InfoHash; use torrust_tracker_test_helpers::configuration; - use crate::bootstrap::app::initialize_tracker_dependencies; + use crate::app_test::initialize_tracker_dependencies; use crate::core::services::{statistics, tracker_factory}; use crate::core::statistics::event::sender::Sender; use crate::core::Tracker; diff --git a/src/servers/http/v1/handlers/scrape.rs b/src/servers/http/v1/handlers/scrape.rs index 6ff8a61cf..553b50882 100644 --- a/src/servers/http/v1/handlers/scrape.rs +++ b/src/servers/http/v1/handlers/scrape.rs @@ -126,7 +126,7 @@ mod tests { use bittorrent_primitives::info_hash::InfoHash; use torrust_tracker_test_helpers::configuration; - use crate::bootstrap::app::initialize_tracker_dependencies; + use crate::app_test::initialize_tracker_dependencies; use crate::core::services::{statistics, tracker_factory}; use crate::core::Tracker; diff --git a/src/servers/http/v1/services/announce.rs b/src/servers/http/v1/services/announce.rs index 45bcb5843..263f5dbc7 100644 --- a/src/servers/http/v1/services/announce.rs +++ b/src/servers/http/v1/services/announce.rs @@ -65,7 +65,7 @@ mod tests { use torrust_tracker_primitives::{peer, DurationSinceUnixEpoch}; use torrust_tracker_test_helpers::configuration; - use crate::bootstrap::app::initialize_tracker_dependencies; + use crate::app_test::initialize_tracker_dependencies; use crate::core::services::{statistics, tracker_factory}; use crate::core::statistics::event::sender::Sender; use crate::core::Tracker; @@ -123,7 +123,7 @@ mod tests { use torrust_tracker_test_helpers::configuration; use super::{sample_peer_using_ipv4, sample_peer_using_ipv6}; - use crate::bootstrap::app::initialize_tracker_dependencies; + use crate::app_test::initialize_tracker_dependencies; use crate::core::{statistics, PeersWanted, Tracker}; use crate::servers::http::v1::services::announce::invoke; use crate::servers::http::v1::services::announce::tests::{public_tracker, sample_info_hash, sample_peer}; diff --git a/src/servers/http/v1/services/scrape.rs b/src/servers/http/v1/services/scrape.rs index 9805dd8a4..61542478d 100644 --- a/src/servers/http/v1/services/scrape.rs +++ b/src/servers/http/v1/services/scrape.rs @@ -80,7 +80,7 @@ mod tests { use torrust_tracker_primitives::{peer, DurationSinceUnixEpoch}; use torrust_tracker_test_helpers::configuration; - use crate::bootstrap::app::initialize_tracker_dependencies; + use crate::app_test::initialize_tracker_dependencies; use crate::core::services::tracker_factory; use crate::core::Tracker; diff --git a/src/servers/udp/handlers.rs b/src/servers/udp/handlers.rs index 9883de54b..cad246b6f 100644 --- a/src/servers/udp/handlers.rs +++ b/src/servers/udp/handlers.rs @@ -470,7 +470,7 @@ mod tests { use torrust_tracker_test_helpers::configuration; use super::gen_remote_fingerprint; - use crate::bootstrap::app::initialize_tracker_dependencies; + use crate::app_test::initialize_tracker_dependencies; use crate::core::services::{statistics, tracker_factory}; use crate::core::statistics::event::sender::Sender; use crate::core::Tracker; @@ -1318,7 +1318,7 @@ mod tests { use aquatic_udp_protocol::{InfoHash as AquaticInfoHash, PeerId as AquaticPeerId}; use mockall::predicate::eq; - use crate::bootstrap::app::initialize_tracker_dependencies; + use crate::app_test::initialize_tracker_dependencies; use crate::core::{self, statistics}; use crate::servers::udp::connection_cookie::make; use crate::servers::udp::handlers::handle_announce; From c45a12b9f595e9ac091701e11d6ea416b18e1aeb Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Fri, 17 Jan 2025 17:38:16 +0000 Subject: [PATCH 7/9] refactor: [#1187] rename fn tracker_factory to initialize_tracker --- src/bootstrap/app.rs | 5 +++-- src/bootstrap/jobs/http_tracker.rs | 4 ++-- src/bootstrap/jobs/tracker_apis.rs | 4 ++-- src/container.rs | 2 ++ src/core/mod.rs | 10 +++++----- src/core/services/mod.rs | 2 +- src/core/services/statistics/mod.rs | 4 ++-- src/core/services/torrent.rs | 18 +++++++++--------- src/servers/apis/server.rs | 4 ++-- src/servers/http/server.rs | 4 ++-- src/servers/http/v1/handlers/announce.rs | 10 +++++----- src/servers/http/v1/handlers/scrape.rs | 10 +++++----- src/servers/http/v1/services/announce.rs | 4 ++-- src/servers/http/v1/services/scrape.rs | 4 ++-- src/servers/udp/handlers.rs | 4 ++-- src/servers/udp/server/mod.rs | 6 +++--- tests/servers/api/environment.rs | 23 +++++++---------------- tests/servers/http/environment.rs | 4 ++-- tests/servers/udp/environment.rs | 4 ++-- 19 files changed, 60 insertions(+), 66 deletions(-) diff --git a/src/bootstrap/app.rs b/src/bootstrap/app.rs index fb3f50b65..d17aec3a7 100644 --- a/src/bootstrap/app.rs +++ b/src/bootstrap/app.rs @@ -22,7 +22,7 @@ use tracing::instrument; use super::config::initialize_configuration; use crate::bootstrap; use crate::container::AppContainer; -use crate::core::services::{initialize_database, initialize_whitelist, statistics, tracker_factory}; +use crate::core::services::{initialize_database, initialize_tracker, initialize_whitelist, statistics}; use crate::servers::udp::server::banning::BanService; use crate::servers::udp::server::launcher::MAX_CONNECTION_ID_ERRORS_PER_IP; use crate::shared::crypto::ephemeral_instance_keys; @@ -82,13 +82,14 @@ pub fn initialize_app_container(configuration: &Configuration) -> AppContainer { let ban_service = Arc::new(RwLock::new(BanService::new(MAX_CONNECTION_ID_ERRORS_PER_IP))); let database = initialize_database(configuration); let whitelist_manager = initialize_whitelist(database.clone()); - let tracker = Arc::new(tracker_factory(configuration, &database, &whitelist_manager)); + let tracker = Arc::new(initialize_tracker(configuration, &database, &whitelist_manager)); AppContainer { tracker, ban_service, stats_event_sender, stats_repository, + whitelist_manager, } } diff --git a/src/bootstrap/jobs/http_tracker.rs b/src/bootstrap/jobs/http_tracker.rs index 0714cbd72..d32e8d4aa 100644 --- a/src/bootstrap/jobs/http_tracker.rs +++ b/src/bootstrap/jobs/http_tracker.rs @@ -88,7 +88,7 @@ mod tests { use crate::bootstrap::app::initialize_global_services; use crate::bootstrap::jobs::http_tracker::start_job; - use crate::core::services::{initialize_database, initialize_whitelist, statistics, tracker_factory}; + use crate::core::services::{initialize_database, initialize_tracker, initialize_whitelist, statistics}; use crate::servers::http::Version; use crate::servers::registar::Registar; @@ -105,7 +105,7 @@ mod tests { let database = initialize_database(&cfg); let whitelist_manager = initialize_whitelist(database.clone()); - let tracker = Arc::new(tracker_factory(&cfg, &database, &whitelist_manager)); + let tracker = Arc::new(initialize_tracker(&cfg, &database, &whitelist_manager)); let version = Version::V1; diff --git a/src/bootstrap/jobs/tracker_apis.rs b/src/bootstrap/jobs/tracker_apis.rs index dabed1509..9c284fbfc 100644 --- a/src/bootstrap/jobs/tracker_apis.rs +++ b/src/bootstrap/jobs/tracker_apis.rs @@ -142,7 +142,7 @@ mod tests { use crate::bootstrap::app::initialize_global_services; use crate::bootstrap::jobs::tracker_apis::start_job; - use crate::core::services::{initialize_database, initialize_whitelist, statistics, tracker_factory}; + use crate::core::services::{initialize_database, initialize_tracker, initialize_whitelist, statistics}; use crate::servers::apis::Version; use crate::servers::registar::Registar; use crate::servers::udp::server::banning::BanService; @@ -162,7 +162,7 @@ mod tests { let database = initialize_database(&cfg); let whitelist_manager = initialize_whitelist(database.clone()); - let tracker = Arc::new(tracker_factory(&cfg, &database, &whitelist_manager)); + let tracker = Arc::new(initialize_tracker(&cfg, &database, &whitelist_manager)); let version = Version::V1; diff --git a/src/container.rs b/src/container.rs index 961b32a12..7a2b86d18 100644 --- a/src/container.rs +++ b/src/container.rs @@ -4,6 +4,7 @@ use tokio::sync::RwLock; use crate::core::statistics::event::sender::Sender; use crate::core::statistics::repository::Repository; +use crate::core::whitelist::WhiteListManager; use crate::core::Tracker; use crate::servers::udp::server::banning::BanService; @@ -12,4 +13,5 @@ pub struct AppContainer { pub ban_service: Arc>, pub stats_event_sender: Arc>>, pub stats_repository: Arc, + pub whitelist_manager: Arc, } diff --git a/src/core/mod.rs b/src/core/mod.rs index a5f9988b9..e802b2c43 100644 --- a/src/core/mod.rs +++ b/src/core/mod.rs @@ -1082,26 +1082,26 @@ mod tests { use crate::app_test::initialize_tracker_dependencies; use crate::core::peer::Peer; - use crate::core::services::tracker_factory; + use crate::core::services::initialize_tracker; use crate::core::whitelist::WhiteListManager; use crate::core::{TorrentsMetrics, Tracker}; fn public_tracker() -> Tracker { let config = configuration::ephemeral_public(); let (database, whitelist_manager) = initialize_tracker_dependencies(&config); - tracker_factory(&config, &database, &whitelist_manager) + initialize_tracker(&config, &database, &whitelist_manager) } fn private_tracker() -> Tracker { let config = configuration::ephemeral_private(); let (database, whitelist_manager) = initialize_tracker_dependencies(&config); - tracker_factory(&config, &database, &whitelist_manager) + initialize_tracker(&config, &database, &whitelist_manager) } fn whitelisted_tracker() -> (Tracker, Arc) { let config = configuration::ephemeral_listed(); let (database, whitelist_manager) = initialize_tracker_dependencies(&config); - let tracker = tracker_factory(&config, &database, &whitelist_manager); + let tracker = initialize_tracker(&config, &database, &whitelist_manager); (tracker, whitelist_manager) } @@ -1110,7 +1110,7 @@ mod tests { let mut config = configuration::ephemeral_listed(); config.core.tracker_policy.persistent_torrent_completed_stat = true; let (database, whitelist_manager) = initialize_tracker_dependencies(&config); - tracker_factory(&config, &database, &whitelist_manager) + initialize_tracker(&config, &database, &whitelist_manager) } fn sample_info_hash() -> InfoHash { diff --git a/src/core/services/mod.rs b/src/core/services/mod.rs index d3336068c..fd301b62d 100644 --- a/src/core/services/mod.rs +++ b/src/core/services/mod.rs @@ -24,7 +24,7 @@ use crate::core::Tracker; /// /// Will panic if tracker cannot be instantiated. #[must_use] -pub fn tracker_factory( +pub fn initialize_tracker( config: &Configuration, database: &Arc>, whitelist_manager: &Arc, diff --git a/src/core/services/statistics/mod.rs b/src/core/services/statistics/mod.rs index fd185a727..1e0403c2a 100644 --- a/src/core/services/statistics/mod.rs +++ b/src/core/services/statistics/mod.rs @@ -119,8 +119,8 @@ mod tests { use crate::app_test::initialize_tracker_dependencies; use crate::core; + use crate::core::services::initialize_tracker; use crate::core::services::statistics::{self, get_metrics, TrackerMetrics}; - use crate::core::services::tracker_factory; use crate::servers::udp::server::banning::BanService; use crate::servers::udp::server::launcher::MAX_CONNECTION_ID_ERRORS_PER_IP; @@ -136,7 +136,7 @@ mod tests { let (_stats_event_sender, stats_repository) = statistics::setup::factory(config.core.tracker_usage_statistics); let stats_repository = Arc::new(stats_repository); - let tracker = Arc::new(tracker_factory(&config, &database, &whitelist_manager)); + let tracker = Arc::new(initialize_tracker(&config, &database, &whitelist_manager)); let ban_service = Arc::new(RwLock::new(BanService::new(MAX_CONNECTION_ID_ERRORS_PER_IP))); diff --git a/src/core/services/torrent.rs b/src/core/services/torrent.rs index 445b8fb8f..593d8be8c 100644 --- a/src/core/services/torrent.rs +++ b/src/core/services/torrent.rs @@ -130,9 +130,9 @@ mod tests { use torrust_tracker_test_helpers::configuration; use crate::app_test::initialize_tracker_dependencies; + use crate::core::services::initialize_tracker; use crate::core::services::torrent::tests::sample_peer; use crate::core::services::torrent::{get_torrent_info, Info}; - use crate::core::services::tracker_factory; pub fn tracker_configuration() -> Configuration { configuration::ephemeral() @@ -143,7 +143,7 @@ mod tests { let config = tracker_configuration(); let (database, whitelist_manager) = initialize_tracker_dependencies(&config); - let tracker = tracker_factory(&config, &database, &whitelist_manager); + let tracker = initialize_tracker(&config, &database, &whitelist_manager); let tracker = Arc::new(tracker); @@ -161,7 +161,7 @@ mod tests { let config = tracker_configuration(); let (database, whitelist_manager) = initialize_tracker_dependencies(&config); - let tracker = Arc::new(tracker_factory(&config, &database, &whitelist_manager)); + let tracker = Arc::new(initialize_tracker(&config, &database, &whitelist_manager)); let hash = "9e0217d0fa71c87332cd8bf9dbeabcb2c2cf3c4d".to_owned(); let info_hash = InfoHash::from_str(&hash).unwrap(); @@ -192,9 +192,9 @@ mod tests { use torrust_tracker_test_helpers::configuration; use crate::app_test::initialize_tracker_dependencies; + use crate::core::services::initialize_tracker; use crate::core::services::torrent::tests::sample_peer; use crate::core::services::torrent::{get_torrents_page, BasicInfo, Pagination}; - use crate::core::services::tracker_factory; pub fn tracker_configuration() -> Configuration { configuration::ephemeral() @@ -205,7 +205,7 @@ mod tests { let config = tracker_configuration(); let (database, whitelist_manager) = initialize_tracker_dependencies(&config); - let tracker = Arc::new(tracker_factory(&config, &database, &whitelist_manager)); + let tracker = Arc::new(initialize_tracker(&config, &database, &whitelist_manager)); let torrents = get_torrents_page(tracker.clone(), Some(&Pagination::default())).await; @@ -217,7 +217,7 @@ mod tests { let config = tracker_configuration(); let (database, whitelist_manager) = initialize_tracker_dependencies(&config); - let tracker = Arc::new(tracker_factory(&config, &database, &whitelist_manager)); + let tracker = Arc::new(initialize_tracker(&config, &database, &whitelist_manager)); let hash = "9e0217d0fa71c87332cd8bf9dbeabcb2c2cf3c4d".to_owned(); let info_hash = InfoHash::from_str(&hash).unwrap(); @@ -242,7 +242,7 @@ mod tests { let config = tracker_configuration(); let (database, whitelist_manager) = initialize_tracker_dependencies(&config); - let tracker = Arc::new(tracker_factory(&config, &database, &whitelist_manager)); + let tracker = Arc::new(initialize_tracker(&config, &database, &whitelist_manager)); let hash1 = "9e0217d0fa71c87332cd8bf9dbeabcb2c2cf3c4d".to_owned(); let info_hash1 = InfoHash::from_str(&hash1).unwrap(); @@ -265,7 +265,7 @@ mod tests { let config = tracker_configuration(); let (database, whitelist_manager) = initialize_tracker_dependencies(&config); - let tracker = Arc::new(tracker_factory(&config, &database, &whitelist_manager)); + let tracker = Arc::new(initialize_tracker(&config, &database, &whitelist_manager)); let hash1 = "9e0217d0fa71c87332cd8bf9dbeabcb2c2cf3c4d".to_owned(); let info_hash1 = InfoHash::from_str(&hash1).unwrap(); @@ -297,7 +297,7 @@ mod tests { let config = tracker_configuration(); let (database, whitelist_manager) = initialize_tracker_dependencies(&config); - let tracker = Arc::new(tracker_factory(&config, &database, &whitelist_manager)); + let tracker = Arc::new(initialize_tracker(&config, &database, &whitelist_manager)); let hash1 = "9e0217d0fa71c87332cd8bf9dbeabcb2c2cf3c4d".to_owned(); let info_hash1 = InfoHash::from_str(&hash1).unwrap(); diff --git a/src/servers/apis/server.rs b/src/servers/apis/server.rs index e74b2265e..c4fae6ebf 100644 --- a/src/servers/apis/server.rs +++ b/src/servers/apis/server.rs @@ -335,7 +335,7 @@ mod tests { use crate::bootstrap::app::initialize_global_services; use crate::bootstrap::jobs::make_rust_tls; - use crate::core::services::{initialize_database, initialize_whitelist, statistics, tracker_factory}; + use crate::core::services::{initialize_database, initialize_tracker, initialize_whitelist, statistics}; use crate::servers::apis::server::{ApiServer, Launcher}; use crate::servers::registar::Registar; use crate::servers::udp::server::banning::BanService; @@ -355,7 +355,7 @@ mod tests { let database = initialize_database(&cfg); let whitelist_manager = initialize_whitelist(database.clone()); - let tracker = Arc::new(tracker_factory(&cfg, &database, &whitelist_manager)); + let tracker = Arc::new(initialize_tracker(&cfg, &database, &whitelist_manager)); let bind_to = config.bind_address; diff --git a/src/servers/http/server.rs b/src/servers/http/server.rs index 1cb8d7adb..82b65c2ff 100644 --- a/src/servers/http/server.rs +++ b/src/servers/http/server.rs @@ -244,7 +244,7 @@ mod tests { use crate::bootstrap::app::initialize_global_services; use crate::bootstrap::jobs::make_rust_tls; - use crate::core::services::{initialize_database, initialize_whitelist, statistics, tracker_factory}; + use crate::core::services::{initialize_database, initialize_tracker, initialize_whitelist, statistics}; use crate::servers::http::server::{HttpServer, Launcher}; use crate::servers::registar::Registar; @@ -259,7 +259,7 @@ mod tests { let database = initialize_database(&cfg); let whitelist_manager = initialize_whitelist(database.clone()); - let tracker = Arc::new(tracker_factory(&cfg, &database, &whitelist_manager)); + let tracker = Arc::new(initialize_tracker(&cfg, &database, &whitelist_manager)); let http_trackers = cfg.http_trackers.clone().expect("missing HTTP trackers configuration"); let config = &http_trackers[0]; diff --git a/src/servers/http/v1/handlers/announce.rs b/src/servers/http/v1/handlers/announce.rs index 6cfe0871f..24beadbc2 100644 --- a/src/servers/http/v1/handlers/announce.rs +++ b/src/servers/http/v1/handlers/announce.rs @@ -206,7 +206,7 @@ mod tests { use torrust_tracker_test_helpers::configuration; use crate::app_test::initialize_tracker_dependencies; - use crate::core::services::{statistics, tracker_factory}; + use crate::core::services::{initialize_tracker, statistics}; use crate::core::statistics::event::sender::Sender; use crate::core::Tracker; @@ -216,7 +216,7 @@ mod tests { let (database, whitelist_manager) = initialize_tracker_dependencies(&config); let (stats_event_sender, _stats_repository) = statistics::setup::factory(config.core.tracker_usage_statistics); - (tracker_factory(&config, &database, &whitelist_manager), stats_event_sender) + (initialize_tracker(&config, &database, &whitelist_manager), stats_event_sender) } fn whitelisted_tracker() -> (Tracker, Option>) { @@ -225,7 +225,7 @@ mod tests { let (database, whitelist_manager) = initialize_tracker_dependencies(&config); let (stats_event_sender, _stats_repository) = statistics::setup::factory(config.core.tracker_usage_statistics); - (tracker_factory(&config, &database, &whitelist_manager), stats_event_sender) + (initialize_tracker(&config, &database, &whitelist_manager), stats_event_sender) } fn tracker_on_reverse_proxy() -> (Tracker, Option>) { @@ -234,7 +234,7 @@ mod tests { let (database, whitelist_manager) = initialize_tracker_dependencies(&config); let (stats_event_sender, _stats_repository) = statistics::setup::factory(config.core.tracker_usage_statistics); - (tracker_factory(&config, &database, &whitelist_manager), stats_event_sender) + (initialize_tracker(&config, &database, &whitelist_manager), stats_event_sender) } fn tracker_not_on_reverse_proxy() -> (Tracker, Option>) { @@ -243,7 +243,7 @@ mod tests { let (database, whitelist_manager) = initialize_tracker_dependencies(&config); let (stats_event_sender, _stats_repository) = statistics::setup::factory(config.core.tracker_usage_statistics); - (tracker_factory(&config, &database, &whitelist_manager), stats_event_sender) + (initialize_tracker(&config, &database, &whitelist_manager), stats_event_sender) } fn sample_announce_request() -> Announce { diff --git a/src/servers/http/v1/handlers/scrape.rs b/src/servers/http/v1/handlers/scrape.rs index 553b50882..a5cf58129 100644 --- a/src/servers/http/v1/handlers/scrape.rs +++ b/src/servers/http/v1/handlers/scrape.rs @@ -127,7 +127,7 @@ mod tests { use torrust_tracker_test_helpers::configuration; use crate::app_test::initialize_tracker_dependencies; - use crate::core::services::{statistics, tracker_factory}; + use crate::core::services::{initialize_tracker, statistics}; use crate::core::Tracker; fn private_tracker() -> (Tracker, Option>) { @@ -136,7 +136,7 @@ mod tests { let (database, whitelist_manager) = initialize_tracker_dependencies(&config); let (stats_event_sender, _stats_repository) = statistics::setup::factory(config.core.tracker_usage_statistics); - (tracker_factory(&config, &database, &whitelist_manager), stats_event_sender) + (initialize_tracker(&config, &database, &whitelist_manager), stats_event_sender) } fn whitelisted_tracker() -> (Tracker, Option>) { @@ -145,7 +145,7 @@ mod tests { let (database, whitelist_manager) = initialize_tracker_dependencies(&config); let (stats_event_sender, _stats_repository) = statistics::setup::factory(config.core.tracker_usage_statistics); - (tracker_factory(&config, &database, &whitelist_manager), stats_event_sender) + (initialize_tracker(&config, &database, &whitelist_manager), stats_event_sender) } fn tracker_on_reverse_proxy() -> (Tracker, Option>) { @@ -154,7 +154,7 @@ mod tests { let (database, whitelist_manager) = initialize_tracker_dependencies(&config); let (stats_event_sender, _stats_repository) = statistics::setup::factory(config.core.tracker_usage_statistics); - (tracker_factory(&config, &database, &whitelist_manager), stats_event_sender) + (initialize_tracker(&config, &database, &whitelist_manager), stats_event_sender) } fn tracker_not_on_reverse_proxy() -> (Tracker, Option>) { @@ -163,7 +163,7 @@ mod tests { let (database, whitelist_manager) = initialize_tracker_dependencies(&config); let (stats_event_sender, _stats_repository) = statistics::setup::factory(config.core.tracker_usage_statistics); - (tracker_factory(&config, &database, &whitelist_manager), stats_event_sender) + (initialize_tracker(&config, &database, &whitelist_manager), stats_event_sender) } fn sample_scrape_request() -> Scrape { diff --git a/src/servers/http/v1/services/announce.rs b/src/servers/http/v1/services/announce.rs index 263f5dbc7..63a904182 100644 --- a/src/servers/http/v1/services/announce.rs +++ b/src/servers/http/v1/services/announce.rs @@ -66,7 +66,7 @@ mod tests { use torrust_tracker_test_helpers::configuration; use crate::app_test::initialize_tracker_dependencies; - use crate::core::services::{statistics, tracker_factory}; + use crate::core::services::{initialize_tracker, statistics}; use crate::core::statistics::event::sender::Sender; use crate::core::Tracker; @@ -77,7 +77,7 @@ mod tests { let (stats_event_sender, _stats_repository) = statistics::setup::factory(config.core.tracker_usage_statistics); let stats_event_sender = Arc::new(stats_event_sender); - let tracker = tracker_factory(&config, &database, &whitelist_manager); + let tracker = initialize_tracker(&config, &database, &whitelist_manager); (tracker, stats_event_sender) } diff --git a/src/servers/http/v1/services/scrape.rs b/src/servers/http/v1/services/scrape.rs index 61542478d..56c18cbb3 100644 --- a/src/servers/http/v1/services/scrape.rs +++ b/src/servers/http/v1/services/scrape.rs @@ -81,7 +81,7 @@ mod tests { use torrust_tracker_test_helpers::configuration; use crate::app_test::initialize_tracker_dependencies; - use crate::core::services::tracker_factory; + use crate::core::services::initialize_tracker; use crate::core::Tracker; fn public_tracker() -> Tracker { @@ -89,7 +89,7 @@ mod tests { let (database, whitelist_manager) = initialize_tracker_dependencies(&config); - tracker_factory(&config, &database, &whitelist_manager) + initialize_tracker(&config, &database, &whitelist_manager) } fn sample_info_hashes() -> Vec { diff --git a/src/servers/udp/handlers.rs b/src/servers/udp/handlers.rs index cad246b6f..a7d964391 100644 --- a/src/servers/udp/handlers.rs +++ b/src/servers/udp/handlers.rs @@ -471,7 +471,7 @@ mod tests { use super::gen_remote_fingerprint; use crate::app_test::initialize_tracker_dependencies; - use crate::core::services::{statistics, tracker_factory}; + use crate::core::services::{initialize_tracker, statistics}; use crate::core::statistics::event::sender::Sender; use crate::core::Tracker; use crate::CurrentClock; @@ -496,7 +496,7 @@ mod tests { let (database, whitelist_manager) = initialize_tracker_dependencies(config); let (stats_event_sender, _stats_repository) = statistics::setup::factory(config.core.tracker_usage_statistics); - (tracker_factory(config, &database, &whitelist_manager), stats_event_sender) + (initialize_tracker(config, &database, &whitelist_manager), stats_event_sender) } fn sample_ipv4_remote_addr() -> SocketAddr { diff --git a/src/servers/udp/server/mod.rs b/src/servers/udp/server/mod.rs index d5fe554ea..b5da9d326 100644 --- a/src/servers/udp/server/mod.rs +++ b/src/servers/udp/server/mod.rs @@ -64,7 +64,7 @@ mod tests { use super::spawner::Spawner; use super::Server; use crate::bootstrap::app::initialize_global_services; - use crate::core::services::{initialize_database, initialize_whitelist, statistics, tracker_factory}; + use crate::core::services::{initialize_database, initialize_tracker, initialize_whitelist, statistics}; use crate::servers::registar::Registar; use crate::servers::udp::server::banning::BanService; use crate::servers::udp::server::launcher::MAX_CONNECTION_ID_ERRORS_PER_IP; @@ -81,7 +81,7 @@ mod tests { let database = initialize_database(&cfg); let whitelist_manager = initialize_whitelist(database.clone()); - let tracker = Arc::new(tracker_factory(&cfg, &database, &whitelist_manager)); + let tracker = Arc::new(initialize_tracker(&cfg, &database, &whitelist_manager)); let udp_trackers = cfg.udp_trackers.clone().expect("missing UDP trackers configuration"); let config = &udp_trackers[0]; @@ -120,7 +120,7 @@ mod tests { let database = initialize_database(&cfg); let whitelist_manager = initialize_whitelist(database.clone()); - let tracker = Arc::new(tracker_factory(&cfg, &database, &whitelist_manager)); + let tracker = Arc::new(initialize_tracker(&cfg, &database, &whitelist_manager)); let config = &cfg.udp_trackers.as_ref().unwrap().first().unwrap(); let bind_to = config.bind_address; diff --git a/tests/servers/api/environment.rs b/tests/servers/api/environment.rs index b230562f3..dcfe526f1 100644 --- a/tests/servers/api/environment.rs +++ b/tests/servers/api/environment.rs @@ -6,9 +6,8 @@ use futures::executor::block_on; use tokio::sync::RwLock; use torrust_tracker_api_client::connection_info::{ConnectionInfo, Origin}; use torrust_tracker_configuration::{Configuration, HttpApi}; -use torrust_tracker_lib::bootstrap::app::initialize_global_services; +use torrust_tracker_lib::bootstrap::app::{initialize_app_container, initialize_global_services}; use torrust_tracker_lib::bootstrap::jobs::make_rust_tls; -use torrust_tracker_lib::core::services::{initialize_database, initialize_whitelist, statistics, tracker_factory}; use torrust_tracker_lib::core::statistics::event::sender::Sender; use torrust_tracker_lib::core::statistics::repository::Repository; use torrust_tracker_lib::core::whitelist::WhiteListManager; @@ -16,7 +15,6 @@ use torrust_tracker_lib::core::Tracker; use torrust_tracker_lib::servers::apis::server::{ApiServer, Launcher, Running, Stopped}; use torrust_tracker_lib::servers::registar::Registar; use torrust_tracker_lib::servers::udp::server::banning::BanService; -use torrust_tracker_lib::servers::udp::server::launcher::MAX_CONNECTION_ID_ERRORS_PER_IP; use torrust_tracker_primitives::peer; pub struct Environment @@ -45,16 +43,9 @@ where impl Environment { pub fn new(configuration: &Arc) -> Self { - let (stats_event_sender, stats_repository) = statistics::setup::factory(configuration.core.tracker_usage_statistics); - let stats_event_sender = Arc::new(stats_event_sender); - let stats_repository = Arc::new(stats_repository); - let ban_service = Arc::new(RwLock::new(BanService::new(MAX_CONNECTION_ID_ERRORS_PER_IP))); - initialize_global_services(configuration); - let database = initialize_database(configuration); - let whitelist_manager = initialize_whitelist(database.clone()); - let tracker = Arc::new(tracker_factory(configuration, &database, &whitelist_manager)); + let app_container = initialize_app_container(configuration); let config = Arc::new(configuration.http_api.clone().expect("missing API configuration")); @@ -66,11 +57,11 @@ impl Environment { Self { config, - tracker, - stats_event_sender, - stats_repository, - whitelist_manager, - ban_service, + tracker: app_container.tracker.clone(), + stats_event_sender: app_container.stats_event_sender.clone(), + stats_repository: app_container.stats_repository.clone(), + whitelist_manager: app_container.whitelist_manager.clone(), + ban_service: app_container.ban_service.clone(), registar: Registar::default(), server, } diff --git a/tests/servers/http/environment.rs b/tests/servers/http/environment.rs index 3732e9341..f1f0e8247 100644 --- a/tests/servers/http/environment.rs +++ b/tests/servers/http/environment.rs @@ -5,7 +5,7 @@ use futures::executor::block_on; use torrust_tracker_configuration::{Configuration, HttpTracker}; use torrust_tracker_lib::bootstrap::app::initialize_global_services; use torrust_tracker_lib::bootstrap::jobs::make_rust_tls; -use torrust_tracker_lib::core::services::{initialize_database, initialize_whitelist, statistics, tracker_factory}; +use torrust_tracker_lib::core::services::{initialize_database, initialize_tracker, initialize_whitelist, statistics}; use torrust_tracker_lib::core::statistics::event::sender::Sender; use torrust_tracker_lib::core::statistics::repository::Repository; use torrust_tracker_lib::core::whitelist::WhiteListManager; @@ -42,7 +42,7 @@ impl Environment { let database = initialize_database(configuration); let whitelist_manager = initialize_whitelist(database.clone()); - let tracker = Arc::new(tracker_factory(configuration, &database, &whitelist_manager)); + let tracker = Arc::new(initialize_tracker(configuration, &database, &whitelist_manager)); let http_tracker = configuration .http_trackers diff --git a/tests/servers/udp/environment.rs b/tests/servers/udp/environment.rs index 34841df16..10ef97f47 100644 --- a/tests/servers/udp/environment.rs +++ b/tests/servers/udp/environment.rs @@ -5,7 +5,7 @@ use bittorrent_primitives::info_hash::InfoHash; use tokio::sync::RwLock; use torrust_tracker_configuration::{Configuration, UdpTracker, DEFAULT_TIMEOUT}; use torrust_tracker_lib::bootstrap::app::initialize_global_services; -use torrust_tracker_lib::core::services::{initialize_database, initialize_whitelist, statistics, tracker_factory}; +use torrust_tracker_lib::core::services::{initialize_database, initialize_tracker, initialize_whitelist, statistics}; use torrust_tracker_lib::core::statistics::event::sender::Sender; use torrust_tracker_lib::core::statistics::repository::Repository; use torrust_tracker_lib::core::Tracker; @@ -53,7 +53,7 @@ impl Environment { let database = initialize_database(configuration); let whitelist_manager = initialize_whitelist(database.clone()); - let tracker = Arc::new(tracker_factory(configuration, &database, &whitelist_manager)); + let tracker = Arc::new(initialize_tracker(configuration, &database, &whitelist_manager)); let udp_tracker = configuration.udp_trackers.clone().expect("missing UDP tracker configuration"); From 3d0f4f820bcb7ff1348f59ad647e2efe5179de49 Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Fri, 17 Jan 2025 17:54:56 +0000 Subject: [PATCH 8/9] refactor: [#1187] use AppContainer in test environments --- tests/servers/http/environment.rs | 19 ++++++------------- tests/servers/udp/environment.rs | 21 ++++++--------------- 2 files changed, 12 insertions(+), 28 deletions(-) diff --git a/tests/servers/http/environment.rs b/tests/servers/http/environment.rs index f1f0e8247..131fe4ac1 100644 --- a/tests/servers/http/environment.rs +++ b/tests/servers/http/environment.rs @@ -3,9 +3,8 @@ use std::sync::Arc; use bittorrent_primitives::info_hash::InfoHash; use futures::executor::block_on; use torrust_tracker_configuration::{Configuration, HttpTracker}; -use torrust_tracker_lib::bootstrap::app::initialize_global_services; +use torrust_tracker_lib::bootstrap::app::{initialize_app_container, initialize_global_services}; use torrust_tracker_lib::bootstrap::jobs::make_rust_tls; -use torrust_tracker_lib::core::services::{initialize_database, initialize_tracker, initialize_whitelist, statistics}; use torrust_tracker_lib::core::statistics::event::sender::Sender; use torrust_tracker_lib::core::statistics::repository::Repository; use torrust_tracker_lib::core::whitelist::WhiteListManager; @@ -34,15 +33,9 @@ impl Environment { impl Environment { #[allow(dead_code)] pub fn new(configuration: &Arc) -> Self { - let (stats_event_sender, stats_repository) = statistics::setup::factory(configuration.core.tracker_usage_statistics); - let stats_event_sender = Arc::new(stats_event_sender); - let stats_repository = Arc::new(stats_repository); - initialize_global_services(configuration); - let database = initialize_database(configuration); - let whitelist_manager = initialize_whitelist(database.clone()); - let tracker = Arc::new(initialize_tracker(configuration, &database, &whitelist_manager)); + let app_container = initialize_app_container(configuration); let http_tracker = configuration .http_trackers @@ -59,10 +52,10 @@ impl Environment { Self { config, - tracker, - stats_event_sender, - stats_repository, - whitelist_manager, + tracker: app_container.tracker.clone(), + stats_event_sender: app_container.stats_event_sender.clone(), + stats_repository: app_container.stats_repository.clone(), + whitelist_manager: app_container.whitelist_manager.clone(), registar: Registar::default(), server, } diff --git a/tests/servers/udp/environment.rs b/tests/servers/udp/environment.rs index 10ef97f47..81e626e1c 100644 --- a/tests/servers/udp/environment.rs +++ b/tests/servers/udp/environment.rs @@ -4,14 +4,12 @@ use std::sync::Arc; use bittorrent_primitives::info_hash::InfoHash; use tokio::sync::RwLock; use torrust_tracker_configuration::{Configuration, UdpTracker, DEFAULT_TIMEOUT}; -use torrust_tracker_lib::bootstrap::app::initialize_global_services; -use torrust_tracker_lib::core::services::{initialize_database, initialize_tracker, initialize_whitelist, statistics}; +use torrust_tracker_lib::bootstrap::app::{initialize_app_container, initialize_global_services}; use torrust_tracker_lib::core::statistics::event::sender::Sender; use torrust_tracker_lib::core::statistics::repository::Repository; use torrust_tracker_lib::core::Tracker; use torrust_tracker_lib::servers::registar::Registar; use torrust_tracker_lib::servers::udp::server::banning::BanService; -use torrust_tracker_lib::servers::udp::server::launcher::MAX_CONNECTION_ID_ERRORS_PER_IP; use torrust_tracker_lib::servers::udp::server::spawner::Spawner; use torrust_tracker_lib::servers::udp::server::states::{Running, Stopped}; use torrust_tracker_lib::servers::udp::server::Server; @@ -44,16 +42,9 @@ where impl Environment { #[allow(dead_code)] pub fn new(configuration: &Arc) -> Self { - let (stats_event_sender, stats_repository) = statistics::setup::factory(configuration.core.tracker_usage_statistics); - let stats_event_sender = Arc::new(stats_event_sender); - let stats_repository = Arc::new(stats_repository); - let ban_service = Arc::new(RwLock::new(BanService::new(MAX_CONNECTION_ID_ERRORS_PER_IP))); - initialize_global_services(configuration); - let database = initialize_database(configuration); - let whitelist_manager = initialize_whitelist(database.clone()); - let tracker = Arc::new(initialize_tracker(configuration, &database, &whitelist_manager)); + let app_container = initialize_app_container(configuration); let udp_tracker = configuration.udp_trackers.clone().expect("missing UDP tracker configuration"); @@ -65,10 +56,10 @@ impl Environment { Self { config, - tracker, - stats_event_sender, - stats_repository, - ban_service, + tracker: app_container.tracker.clone(), + stats_event_sender: app_container.stats_event_sender.clone(), + stats_repository: app_container.stats_repository.clone(), + ban_service: app_container.ban_service.clone(), registar: Registar::default(), server, } From 20018abe446af1503463a9ac99631c616a0618dd Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Fri, 17 Jan 2025 18:14:57 +0000 Subject: [PATCH 9/9] fix: [#1187] doc link error --- src/bootstrap/app.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bootstrap/app.rs b/src/bootstrap/app.rs index d17aec3a7..53bf44f79 100644 --- a/src/bootstrap/app.rs +++ b/src/bootstrap/app.rs @@ -28,7 +28,7 @@ use crate::servers::udp::server::launcher::MAX_CONNECTION_ID_ERRORS_PER_IP; use crate::shared::crypto::ephemeral_instance_keys; use crate::shared::crypto::keys::{self, Keeper as _}; -/// It loads the configuration from the environment and builds the main domain [`Tracker`] struct. +/// It loads the configuration from the environment and builds app container. /// /// # Panics ///