From 46f49005f722c98401689cec5160131acba2eaa4 Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Fri, 17 Mar 2023 07:45:14 +0000 Subject: [PATCH 01/12] refactor: add servers modules Move apps into a "servers" module. --- src/jobs/http_tracker.rs | 4 +- src/jobs/tracker_apis.rs | 2 +- src/jobs/udp_tracker.rs | 2 +- src/lib.rs | 4 +- src/{ => servers}/apis/mod.rs | 0 src/{ => servers}/apis/routes.rs | 0 src/{ => servers}/apis/server.rs | 2 +- .../apis/v1/context/auth_key/handlers.rs | 4 +- .../apis/v1/context/auth_key/mod.rs | 0 .../apis/v1/context/auth_key/resources.rs | 0 .../apis/v1/context/auth_key/responses.rs | 4 +- .../apis/v1/context/auth_key/routes.rs | 0 src/{ => servers}/apis/v1/context/mod.rs | 0 .../apis/v1/context/stats/handlers.rs | 0 .../apis/v1/context/stats/mod.rs | 0 .../apis/v1/context/stats/resources.rs | 0 .../apis/v1/context/stats/responses.rs | 0 .../apis/v1/context/stats/routes.rs | 0 .../apis/v1/context/torrent/handlers.rs | 4 +- .../apis/v1/context/torrent/mod.rs | 0 .../apis/v1/context/torrent/resources/mod.rs | 0 .../apis/v1/context/torrent/resources/peer.rs | 0 .../v1/context/torrent/resources/torrent.rs | 4 +- .../apis/v1/context/torrent/responses.rs | 0 .../apis/v1/context/torrent/routes.rs | 0 .../apis/v1/context/whitelist/handlers.rs | 4 +- .../apis/v1/context/whitelist/mod.rs | 0 .../apis/v1/context/whitelist/responses.rs | 2 +- .../apis/v1/context/whitelist/routes.rs | 0 src/{ => servers}/apis/v1/middlewares/auth.rs | 2 +- src/{ => servers}/apis/v1/middlewares/mod.rs | 0 src/{ => servers}/apis/v1/mod.rs | 0 src/{ => servers}/apis/v1/responses.rs | 0 src/{ => servers}/apis/v1/routes.rs | 0 src/{ => servers}/http/mod.rs | 0 src/{ => servers}/http/percent_encoding.rs | 2 +- src/{ => servers}/http/server.rs | 0 .../http/v1/extractors/announce_request.rs | 10 +-- .../http/v1/extractors/authentication_key.rs | 6 +- .../http/v1/extractors/client_ip_sources.rs | 2 +- src/{ => servers}/http/v1/extractors/mod.rs | 0 .../http/v1/extractors/scrape_request.rs | 10 +-- .../http/v1/handlers/announce.rs | 42 +++++----- .../http/v1/handlers/common/auth.rs | 2 +- .../http/v1/handlers/common/mod.rs | 0 .../http/v1/handlers/common/peer_ip.rs | 8 +- src/{ => servers}/http/v1/handlers/mod.rs | 0 src/{ => servers}/http/v1/handlers/scrape.rs | 34 ++++---- src/{ => servers}/http/v1/launcher.rs | 2 +- src/{ => servers}/http/v1/mod.rs | 0 src/{ => servers}/http/v1/query.rs | 8 +- .../http/v1/requests/announce.rs | 16 ++-- src/{ => servers}/http/v1/requests/mod.rs | 0 src/{ => servers}/http/v1/requests/scrape.rs | 14 ++-- .../http/v1/responses/announce.rs | 4 +- src/{ => servers}/http/v1/responses/error.rs | 0 src/{ => servers}/http/v1/responses/mod.rs | 0 src/{ => servers}/http/v1/responses/scrape.rs | 2 +- src/{ => servers}/http/v1/routes.rs | 0 .../http/v1/services/announce.rs | 4 +- src/{ => servers}/http/v1/services/mod.rs | 0 .../http/v1/services/peer_ip_resolver.rs | 4 +- src/{ => servers}/http/v1/services/scrape.rs | 12 ++- src/servers/mod.rs | 3 + src/{ => servers}/udp/connection_cookie.rs | 2 +- src/{ => servers}/udp/error.rs | 0 src/{ => servers}/udp/handlers.rs | 82 +++++++++---------- src/{ => servers}/udp/mod.rs | 0 src/{ => servers}/udp/peer_builder.rs | 0 src/{ => servers}/udp/request.rs | 0 src/{ => servers}/udp/server.rs | 4 +- src/setup.rs | 2 +- tests/servers/api/test_environment.rs | 2 +- tests/servers/api/v1/asserts.rs | 6 +- .../servers/api/v1/contract/context/stats.rs | 2 +- .../api/v1/contract/context/torrent.rs | 4 +- tests/servers/http/test_environment.rs | 2 +- tests/servers/http/v1/contract.rs | 2 +- tests/servers/udp/client.rs | 2 +- tests/servers/udp/contract.rs | 2 +- tests/servers/udp/test_environment.rs | 2 +- 81 files changed, 171 insertions(+), 166 deletions(-) rename src/{ => servers}/apis/mod.rs (100%) rename src/{ => servers}/apis/routes.rs (100%) rename src/{ => servers}/apis/server.rs (99%) rename src/{ => servers}/apis/v1/context/auth_key/handlers.rs (90%) rename src/{ => servers}/apis/v1/context/auth_key/mod.rs (100%) rename src/{ => servers}/apis/v1/context/auth_key/resources.rs (100%) rename src/{ => servers}/apis/v1/context/auth_key/responses.rs (86%) rename src/{ => servers}/apis/v1/context/auth_key/routes.rs (100%) rename src/{ => servers}/apis/v1/context/mod.rs (100%) rename src/{ => servers}/apis/v1/context/stats/handlers.rs (100%) rename src/{ => servers}/apis/v1/context/stats/mod.rs (100%) rename src/{ => servers}/apis/v1/context/stats/resources.rs (100%) rename src/{ => servers}/apis/v1/context/stats/responses.rs (100%) rename src/{ => servers}/apis/v1/context/stats/routes.rs (100%) rename src/{ => servers}/apis/v1/context/torrent/handlers.rs (94%) rename src/{ => servers}/apis/v1/context/torrent/mod.rs (100%) rename src/{ => servers}/apis/v1/context/torrent/resources/mod.rs (100%) rename src/{ => servers}/apis/v1/context/torrent/resources/peer.rs (100%) rename src/{ => servers}/apis/v1/context/torrent/resources/torrent.rs (96%) rename src/{ => servers}/apis/v1/context/torrent/responses.rs (100%) rename src/{ => servers}/apis/v1/context/torrent/routes.rs (100%) rename src/{ => servers}/apis/v1/context/whitelist/handlers.rs (92%) rename src/{ => servers}/apis/v1/context/whitelist/mod.rs (100%) rename src/{ => servers}/apis/v1/context/whitelist/responses.rs (89%) rename src/{ => servers}/apis/v1/context/whitelist/routes.rs (100%) rename src/{ => servers}/apis/v1/middlewares/auth.rs (95%) rename src/{ => servers}/apis/v1/middlewares/mod.rs (100%) rename src/{ => servers}/apis/v1/mod.rs (100%) rename src/{ => servers}/apis/v1/responses.rs (100%) rename src/{ => servers}/apis/v1/routes.rs (100%) rename src/{ => servers}/http/mod.rs (100%) rename src/{ => servers}/http/percent_encoding.rs (95%) rename src/{ => servers}/http/server.rs (100%) rename src/{ => servers}/http/v1/extractors/announce_request.rs (91%) rename src/{ => servers}/http/v1/extractors/authentication_key.rs (95%) rename src/{ => servers}/http/v1/extractors/client_ip_sources.rs (93%) rename src/{ => servers}/http/v1/extractors/mod.rs (100%) rename src/{ => servers}/http/v1/extractors/scrape_request.rs (93%) rename src/{ => servers}/http/v1/handlers/announce.rs (86%) rename src/{ => servers}/http/v1/handlers/common/auth.rs (96%) rename src/{ => servers}/http/v1/handlers/common/mod.rs (100%) rename src/{ => servers}/http/v1/handlers/common/peer_ip.rs (77%) rename src/{ => servers}/http/v1/handlers/mod.rs (100%) rename src/{ => servers}/http/v1/handlers/scrape.rs (86%) rename src/{ => servers}/http/v1/launcher.rs (98%) rename src/{ => servers}/http/v1/mod.rs (100%) rename src/{ => servers}/http/v1/query.rs (97%) rename src/{ => servers}/http/v1/requests/announce.rs (97%) rename src/{ => servers}/http/v1/requests/mod.rs (100%) rename src/{ => servers}/http/v1/requests/scrape.rs (89%) rename src/{ => servers}/http/v1/responses/announce.rs (98%) rename src/{ => servers}/http/v1/responses/error.rs (100%) rename src/{ => servers}/http/v1/responses/mod.rs (100%) rename src/{ => servers}/http/v1/responses/scrape.rs (97%) rename src/{ => servers}/http/v1/routes.rs (100%) rename src/{ => servers}/http/v1/services/announce.rs (97%) rename src/{ => servers}/http/v1/services/mod.rs (100%) rename src/{ => servers}/http/v1/services/peer_ip_resolver.rs (95%) rename src/{ => servers}/http/v1/services/scrape.rs (95%) create mode 100644 src/servers/mod.rs rename src/{ => servers}/udp/connection_cookie.rs (99%) rename src/{ => servers}/udp/error.rs (100%) rename src/{ => servers}/udp/handlers.rs (94%) rename src/{ => servers}/udp/mod.rs (100%) rename src/{ => servers}/udp/peer_builder.rs (100%) rename src/{ => servers}/udp/request.rs (100%) rename src/{ => servers}/udp/server.rs (98%) diff --git a/src/jobs/http_tracker.rs b/src/jobs/http_tracker.rs index e0091958b..43bd0076f 100644 --- a/src/jobs/http_tracker.rs +++ b/src/jobs/http_tracker.rs @@ -6,8 +6,8 @@ use tokio::sync::oneshot; use tokio::task::JoinHandle; use torrust_tracker_configuration::HttpTracker; -use crate::http::v1::launcher; -use crate::http::Version; +use crate::servers::http::v1::launcher; +use crate::servers::http::Version; use crate::tracker; #[derive(Debug)] diff --git a/src/jobs/tracker_apis.rs b/src/jobs/tracker_apis.rs index 939b58638..cdebc21a8 100644 --- a/src/jobs/tracker_apis.rs +++ b/src/jobs/tracker_apis.rs @@ -6,7 +6,7 @@ use tokio::sync::oneshot; use tokio::task::JoinHandle; use torrust_tracker_configuration::HttpApi; -use crate::apis::server; +use crate::servers::apis::server; use crate::tracker; #[derive(Debug)] diff --git a/src/jobs/udp_tracker.rs b/src/jobs/udp_tracker.rs index 57232855b..138222daf 100644 --- a/src/jobs/udp_tracker.rs +++ b/src/jobs/udp_tracker.rs @@ -4,8 +4,8 @@ use log::{error, info, warn}; use tokio::task::JoinHandle; use torrust_tracker_configuration::UdpTracker; +use crate::servers::udp::server::Udp; use crate::tracker; -use crate::udp::server::Udp; #[must_use] pub fn start_job(config: &UdpTracker, tracker: Arc) -> JoinHandle<()> { diff --git a/src/lib.rs b/src/lib.rs index f01ff0468..6c0ae464f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,14 +1,12 @@ -pub mod apis; pub mod databases; -pub mod http; pub mod jobs; pub mod logging; pub mod protocol; +pub mod servers; pub mod setup; pub mod signals; pub mod stats; pub mod tracker; -pub mod udp; #[macro_use] extern crate lazy_static; diff --git a/src/apis/mod.rs b/src/servers/apis/mod.rs similarity index 100% rename from src/apis/mod.rs rename to src/servers/apis/mod.rs diff --git a/src/apis/routes.rs b/src/servers/apis/routes.rs similarity index 100% rename from src/apis/routes.rs rename to src/servers/apis/routes.rs diff --git a/src/apis/server.rs b/src/servers/apis/server.rs similarity index 99% rename from src/apis/server.rs rename to src/servers/apis/server.rs index daac35999..002babbfb 100644 --- a/src/apis/server.rs +++ b/src/servers/apis/server.rs @@ -219,7 +219,7 @@ mod tests { use torrust_tracker_configuration::Configuration; use torrust_tracker_test_helpers::configuration; - use crate::apis::server::ApiServer; + use crate::servers::apis::server::ApiServer; use crate::tracker; use crate::tracker::statistics; diff --git a/src/apis/v1/context/auth_key/handlers.rs b/src/servers/apis/v1/context/auth_key/handlers.rs similarity index 90% rename from src/apis/v1/context/auth_key/handlers.rs rename to src/servers/apis/v1/context/auth_key/handlers.rs index cb1cd1113..d2e633206 100644 --- a/src/apis/v1/context/auth_key/handlers.rs +++ b/src/servers/apis/v1/context/auth_key/handlers.rs @@ -9,8 +9,8 @@ use serde::Deserialize; use super::responses::{ auth_key_response, failed_to_delete_key_response, failed_to_generate_key_response, failed_to_reload_keys_response, }; -use crate::apis::v1::context::auth_key::resources::AuthKey; -use crate::apis::v1::responses::{invalid_auth_key_param_response, ok_response}; +use crate::servers::apis::v1::context::auth_key::resources::AuthKey; +use crate::servers::apis::v1::responses::{invalid_auth_key_param_response, ok_response}; use crate::tracker::auth::Key; use crate::tracker::Tracker; diff --git a/src/apis/v1/context/auth_key/mod.rs b/src/servers/apis/v1/context/auth_key/mod.rs similarity index 100% rename from src/apis/v1/context/auth_key/mod.rs rename to src/servers/apis/v1/context/auth_key/mod.rs diff --git a/src/apis/v1/context/auth_key/resources.rs b/src/servers/apis/v1/context/auth_key/resources.rs similarity index 100% rename from src/apis/v1/context/auth_key/resources.rs rename to src/servers/apis/v1/context/auth_key/resources.rs diff --git a/src/apis/v1/context/auth_key/responses.rs b/src/servers/apis/v1/context/auth_key/responses.rs similarity index 86% rename from src/apis/v1/context/auth_key/responses.rs rename to src/servers/apis/v1/context/auth_key/responses.rs index 9b8fcebe2..4e3b0c711 100644 --- a/src/apis/v1/context/auth_key/responses.rs +++ b/src/servers/apis/v1/context/auth_key/responses.rs @@ -3,8 +3,8 @@ use std::error::Error; use axum::http::{header, StatusCode}; use axum::response::{IntoResponse, Response}; -use crate::apis::v1::context::auth_key::resources::AuthKey; -use crate::apis::v1::responses::unhandled_rejection_response; +use crate::servers::apis::v1::context::auth_key::resources::AuthKey; +use crate::servers::apis::v1::responses::unhandled_rejection_response; /// # Panics /// diff --git a/src/apis/v1/context/auth_key/routes.rs b/src/servers/apis/v1/context/auth_key/routes.rs similarity index 100% rename from src/apis/v1/context/auth_key/routes.rs rename to src/servers/apis/v1/context/auth_key/routes.rs diff --git a/src/apis/v1/context/mod.rs b/src/servers/apis/v1/context/mod.rs similarity index 100% rename from src/apis/v1/context/mod.rs rename to src/servers/apis/v1/context/mod.rs diff --git a/src/apis/v1/context/stats/handlers.rs b/src/servers/apis/v1/context/stats/handlers.rs similarity index 100% rename from src/apis/v1/context/stats/handlers.rs rename to src/servers/apis/v1/context/stats/handlers.rs diff --git a/src/apis/v1/context/stats/mod.rs b/src/servers/apis/v1/context/stats/mod.rs similarity index 100% rename from src/apis/v1/context/stats/mod.rs rename to src/servers/apis/v1/context/stats/mod.rs diff --git a/src/apis/v1/context/stats/resources.rs b/src/servers/apis/v1/context/stats/resources.rs similarity index 100% rename from src/apis/v1/context/stats/resources.rs rename to src/servers/apis/v1/context/stats/resources.rs diff --git a/src/apis/v1/context/stats/responses.rs b/src/servers/apis/v1/context/stats/responses.rs similarity index 100% rename from src/apis/v1/context/stats/responses.rs rename to src/servers/apis/v1/context/stats/responses.rs diff --git a/src/apis/v1/context/stats/routes.rs b/src/servers/apis/v1/context/stats/routes.rs similarity index 100% rename from src/apis/v1/context/stats/routes.rs rename to src/servers/apis/v1/context/stats/routes.rs diff --git a/src/apis/v1/context/torrent/handlers.rs b/src/servers/apis/v1/context/torrent/handlers.rs similarity index 94% rename from src/apis/v1/context/torrent/handlers.rs rename to src/servers/apis/v1/context/torrent/handlers.rs index fc816cdbf..45ffbcf22 100644 --- a/src/apis/v1/context/torrent/handlers.rs +++ b/src/servers/apis/v1/context/torrent/handlers.rs @@ -8,9 +8,9 @@ use serde::{de, Deserialize, Deserializer}; use super::resources::torrent::ListItem; use super::responses::{torrent_info_response, torrent_list_response, torrent_not_known_response}; -use crate::apis::v1::responses::invalid_info_hash_param_response; -use crate::apis::InfoHashParam; use crate::protocol::info_hash::InfoHash; +use crate::servers::apis::v1::responses::invalid_info_hash_param_response; +use crate::servers::apis::InfoHashParam; use crate::tracker::services::torrent::{get_torrent_info, get_torrents, Pagination}; use crate::tracker::Tracker; diff --git a/src/apis/v1/context/torrent/mod.rs b/src/servers/apis/v1/context/torrent/mod.rs similarity index 100% rename from src/apis/v1/context/torrent/mod.rs rename to src/servers/apis/v1/context/torrent/mod.rs diff --git a/src/apis/v1/context/torrent/resources/mod.rs b/src/servers/apis/v1/context/torrent/resources/mod.rs similarity index 100% rename from src/apis/v1/context/torrent/resources/mod.rs rename to src/servers/apis/v1/context/torrent/resources/mod.rs diff --git a/src/apis/v1/context/torrent/resources/peer.rs b/src/servers/apis/v1/context/torrent/resources/peer.rs similarity index 100% rename from src/apis/v1/context/torrent/resources/peer.rs rename to src/servers/apis/v1/context/torrent/resources/peer.rs diff --git a/src/apis/v1/context/torrent/resources/torrent.rs b/src/servers/apis/v1/context/torrent/resources/torrent.rs similarity index 96% rename from src/apis/v1/context/torrent/resources/torrent.rs rename to src/servers/apis/v1/context/torrent/resources/torrent.rs index 48f4c58f0..577ac279c 100644 --- a/src/apis/v1/context/torrent/resources/torrent.rs +++ b/src/servers/apis/v1/context/torrent/resources/torrent.rs @@ -75,10 +75,10 @@ mod tests { use aquatic_udp_protocol::{AnnounceEvent, NumberOfBytes}; use super::Torrent; - use crate::apis::v1::context::torrent::resources::peer::Peer; - use crate::apis::v1::context::torrent::resources::torrent::ListItem; use crate::protocol::clock::DurationSinceUnixEpoch; use crate::protocol::info_hash::InfoHash; + use crate::servers::apis::v1::context::torrent::resources::peer::Peer; + use crate::servers::apis::v1::context::torrent::resources::torrent::ListItem; use crate::tracker::peer; use crate::tracker::services::torrent::{BasicInfo, Info}; diff --git a/src/apis/v1/context/torrent/responses.rs b/src/servers/apis/v1/context/torrent/responses.rs similarity index 100% rename from src/apis/v1/context/torrent/responses.rs rename to src/servers/apis/v1/context/torrent/responses.rs diff --git a/src/apis/v1/context/torrent/routes.rs b/src/servers/apis/v1/context/torrent/routes.rs similarity index 100% rename from src/apis/v1/context/torrent/routes.rs rename to src/servers/apis/v1/context/torrent/routes.rs diff --git a/src/apis/v1/context/whitelist/handlers.rs b/src/servers/apis/v1/context/whitelist/handlers.rs similarity index 92% rename from src/apis/v1/context/whitelist/handlers.rs rename to src/servers/apis/v1/context/whitelist/handlers.rs index 325f20e26..2ca70cba7 100644 --- a/src/apis/v1/context/whitelist/handlers.rs +++ b/src/servers/apis/v1/context/whitelist/handlers.rs @@ -7,9 +7,9 @@ use axum::response::Response; use super::responses::{ failed_to_reload_whitelist_response, failed_to_remove_torrent_from_whitelist_response, failed_to_whitelist_torrent_response, }; -use crate::apis::v1::responses::{invalid_info_hash_param_response, ok_response}; -use crate::apis::InfoHashParam; use crate::protocol::info_hash::InfoHash; +use crate::servers::apis::v1::responses::{invalid_info_hash_param_response, ok_response}; +use crate::servers::apis::InfoHashParam; use crate::tracker::Tracker; pub async fn add_torrent_to_whitelist_handler( diff --git a/src/apis/v1/context/whitelist/mod.rs b/src/servers/apis/v1/context/whitelist/mod.rs similarity index 100% rename from src/apis/v1/context/whitelist/mod.rs rename to src/servers/apis/v1/context/whitelist/mod.rs diff --git a/src/apis/v1/context/whitelist/responses.rs b/src/servers/apis/v1/context/whitelist/responses.rs similarity index 89% rename from src/apis/v1/context/whitelist/responses.rs rename to src/servers/apis/v1/context/whitelist/responses.rs index 197d4c90b..06d4a9448 100644 --- a/src/apis/v1/context/whitelist/responses.rs +++ b/src/servers/apis/v1/context/whitelist/responses.rs @@ -2,7 +2,7 @@ use std::error::Error; use axum::response::Response; -use crate::apis::v1::responses::unhandled_rejection_response; +use crate::servers::apis::v1::responses::unhandled_rejection_response; #[must_use] pub fn failed_to_remove_torrent_from_whitelist_response(e: E) -> Response { diff --git a/src/apis/v1/context/whitelist/routes.rs b/src/servers/apis/v1/context/whitelist/routes.rs similarity index 100% rename from src/apis/v1/context/whitelist/routes.rs rename to src/servers/apis/v1/context/whitelist/routes.rs diff --git a/src/apis/v1/middlewares/auth.rs b/src/servers/apis/v1/middlewares/auth.rs similarity index 95% rename from src/apis/v1/middlewares/auth.rs rename to src/servers/apis/v1/middlewares/auth.rs index e729072b6..f0c63250b 100644 --- a/src/apis/v1/middlewares/auth.rs +++ b/src/servers/apis/v1/middlewares/auth.rs @@ -7,7 +7,7 @@ use axum::response::{IntoResponse, Response}; use serde::Deserialize; use torrust_tracker_configuration::{Configuration, HttpApi}; -use crate::apis::v1::responses::unhandled_rejection_response; +use crate::servers::apis::v1::responses::unhandled_rejection_response; #[derive(Deserialize, Debug)] pub struct QueryParams { diff --git a/src/apis/v1/middlewares/mod.rs b/src/servers/apis/v1/middlewares/mod.rs similarity index 100% rename from src/apis/v1/middlewares/mod.rs rename to src/servers/apis/v1/middlewares/mod.rs diff --git a/src/apis/v1/mod.rs b/src/servers/apis/v1/mod.rs similarity index 100% rename from src/apis/v1/mod.rs rename to src/servers/apis/v1/mod.rs diff --git a/src/apis/v1/responses.rs b/src/servers/apis/v1/responses.rs similarity index 100% rename from src/apis/v1/responses.rs rename to src/servers/apis/v1/responses.rs diff --git a/src/apis/v1/routes.rs b/src/servers/apis/v1/routes.rs similarity index 100% rename from src/apis/v1/routes.rs rename to src/servers/apis/v1/routes.rs diff --git a/src/http/mod.rs b/src/servers/http/mod.rs similarity index 100% rename from src/http/mod.rs rename to src/servers/http/mod.rs diff --git a/src/http/percent_encoding.rs b/src/servers/http/percent_encoding.rs similarity index 95% rename from src/http/percent_encoding.rs rename to src/servers/http/percent_encoding.rs index 3774519fb..c824c8df7 100644 --- a/src/http/percent_encoding.rs +++ b/src/servers/http/percent_encoding.rs @@ -21,8 +21,8 @@ pub fn percent_decode_peer_id(raw_peer_id: &str) -> Result responses::error::Error { mod tests { use super::parse_key; - use crate::http::v1::responses::error::Error; + use crate::servers::http::v1::responses::error::Error; fn assert_error_response(error: &Error, error_message: &str) { assert!( diff --git a/src/http/v1/extractors/client_ip_sources.rs b/src/servers/http/v1/extractors/client_ip_sources.rs similarity index 93% rename from src/http/v1/extractors/client_ip_sources.rs rename to src/servers/http/v1/extractors/client_ip_sources.rs index c8b3659f3..b291eba12 100644 --- a/src/http/v1/extractors/client_ip_sources.rs +++ b/src/servers/http/v1/extractors/client_ip_sources.rs @@ -8,7 +8,7 @@ use axum::http::request::Parts; use axum::response::Response; use axum_client_ip::RightmostXForwardedFor; -use crate::http::v1::services::peer_ip_resolver::ClientIpSources; +use crate::servers::http::v1::services::peer_ip_resolver::ClientIpSources; pub struct Extract(pub ClientIpSources); diff --git a/src/http/v1/extractors/mod.rs b/src/servers/http/v1/extractors/mod.rs similarity index 100% rename from src/http/v1/extractors/mod.rs rename to src/servers/http/v1/extractors/mod.rs diff --git a/src/http/v1/extractors/scrape_request.rs b/src/servers/http/v1/extractors/scrape_request.rs similarity index 93% rename from src/http/v1/extractors/scrape_request.rs rename to src/servers/http/v1/extractors/scrape_request.rs index d63470897..65a40bff2 100644 --- a/src/http/v1/extractors/scrape_request.rs +++ b/src/servers/http/v1/extractors/scrape_request.rs @@ -5,9 +5,9 @@ use axum::extract::FromRequestParts; use axum::http::request::Parts; use axum::response::{IntoResponse, Response}; -use crate::http::v1::query::Query; -use crate::http::v1::requests::scrape::{ParseScrapeQueryError, Scrape}; -use crate::http::v1::responses; +use crate::servers::http::v1::query::Query; +use crate::servers::http::v1::requests::scrape::{ParseScrapeQueryError, Scrape}; +use crate::servers::http::v1::responses; pub struct ExtractRequest(pub Scrape); @@ -53,9 +53,9 @@ mod tests { use std::str::FromStr; use super::extract_scrape_from; - use crate::http::v1::requests::scrape::Scrape; - use crate::http::v1::responses::error::Error; use crate::protocol::info_hash::InfoHash; + use crate::servers::http::v1::requests::scrape::Scrape; + use crate::servers::http::v1::responses::error::Error; struct TestInfoHash { pub bencoded: String, diff --git a/src/http/v1/handlers/announce.rs b/src/servers/http/v1/handlers/announce.rs similarity index 86% rename from src/http/v1/handlers/announce.rs rename to src/servers/http/v1/handlers/announce.rs index 1f10c3fa4..af8a4115e 100644 --- a/src/http/v1/handlers/announce.rs +++ b/src/servers/http/v1/handlers/announce.rs @@ -7,15 +7,15 @@ use axum::extract::State; use axum::response::{IntoResponse, Response}; use log::debug; -use crate::http::v1::extractors::announce_request::ExtractRequest; -use crate::http::v1::extractors::authentication_key::Extract as ExtractKey; -use crate::http::v1::extractors::client_ip_sources::Extract as ExtractClientIpSources; -use crate::http::v1::handlers::common::auth; -use crate::http::v1::requests::announce::{Announce, Compact, Event}; -use crate::http::v1::responses::{self, announce}; -use crate::http::v1::services::peer_ip_resolver::ClientIpSources; -use crate::http::v1::services::{self, peer_ip_resolver}; use crate::protocol::clock::{Current, Time}; +use crate::servers::http::v1::extractors::announce_request::ExtractRequest; +use crate::servers::http::v1::extractors::authentication_key::Extract as ExtractKey; +use crate::servers::http::v1::extractors::client_ip_sources::Extract as ExtractClientIpSources; +use crate::servers::http::v1::handlers::common::auth; +use crate::servers::http::v1::requests::announce::{Announce, Compact, Event}; +use crate::servers::http::v1::responses::{self, announce}; +use crate::servers::http::v1::services::peer_ip_resolver::ClientIpSources; +use crate::servers::http::v1::services::{self, peer_ip_resolver}; use crate::tracker::auth::Key; use crate::tracker::peer::Peer; use crate::tracker::{AnnounceData, Tracker}; @@ -141,10 +141,10 @@ mod tests { use torrust_tracker_test_helpers::configuration; - use crate::http::v1::requests::announce::Announce; - use crate::http::v1::responses; - use crate::http::v1::services::peer_ip_resolver::ClientIpSources; use crate::protocol::info_hash::InfoHash; + use crate::servers::http::v1::requests::announce::Announce; + use crate::servers::http::v1::responses; + use crate::servers::http::v1::services::peer_ip_resolver::ClientIpSources; use crate::tracker::services::common::tracker_factory; use crate::tracker::{peer, Tracker}; @@ -197,8 +197,8 @@ mod tests { use std::sync::Arc; use super::{private_tracker, sample_announce_request, sample_client_ip_sources}; - use crate::http::v1::handlers::announce::handle_announce; - use crate::http::v1::handlers::announce::tests::assert_error_response; + use crate::servers::http::v1::handlers::announce::handle_announce; + use crate::servers::http::v1::handlers::announce::tests::assert_error_response; use crate::tracker::auth; #[tokio::test] @@ -238,8 +238,8 @@ mod tests { use std::sync::Arc; use super::{sample_announce_request, sample_client_ip_sources, whitelisted_tracker}; - use crate::http::v1::handlers::announce::handle_announce; - use crate::http::v1::handlers::announce::tests::assert_error_response; + use crate::servers::http::v1::handlers::announce::handle_announce; + use crate::servers::http::v1::handlers::announce::tests::assert_error_response; #[tokio::test] async fn it_should_fail_when_the_announced_torrent_is_not_whitelisted() { @@ -266,9 +266,9 @@ mod tests { use std::sync::Arc; use super::{sample_announce_request, tracker_on_reverse_proxy}; - use crate::http::v1::handlers::announce::handle_announce; - use crate::http::v1::handlers::announce::tests::assert_error_response; - use crate::http::v1::services::peer_ip_resolver::ClientIpSources; + use crate::servers::http::v1::handlers::announce::handle_announce; + use crate::servers::http::v1::handlers::announce::tests::assert_error_response; + use crate::servers::http::v1::services::peer_ip_resolver::ClientIpSources; #[tokio::test] async fn it_should_fail_when_the_right_most_x_forwarded_for_header_ip_is_not_available() { @@ -295,9 +295,9 @@ mod tests { use std::sync::Arc; use super::{sample_announce_request, tracker_not_on_reverse_proxy}; - use crate::http::v1::handlers::announce::handle_announce; - use crate::http::v1::handlers::announce::tests::assert_error_response; - use crate::http::v1::services::peer_ip_resolver::ClientIpSources; + use crate::servers::http::v1::handlers::announce::handle_announce; + use crate::servers::http::v1::handlers::announce::tests::assert_error_response; + use crate::servers::http::v1::services::peer_ip_resolver::ClientIpSources; #[tokio::test] async fn it_should_fail_when_the_client_ip_from_the_connection_info_is_not_available() { diff --git a/src/http/v1/handlers/common/auth.rs b/src/servers/http/v1/handlers/common/auth.rs similarity index 96% rename from src/http/v1/handlers/common/auth.rs rename to src/servers/http/v1/handlers/common/auth.rs index 938fc3f01..644556e95 100644 --- a/src/http/v1/handlers/common/auth.rs +++ b/src/servers/http/v1/handlers/common/auth.rs @@ -2,7 +2,7 @@ use std::panic::Location; use thiserror::Error; -use crate::http::v1::responses; +use crate::servers::http::v1::responses; use crate::tracker::auth; #[derive(Debug, Error)] diff --git a/src/http/v1/handlers/common/mod.rs b/src/servers/http/v1/handlers/common/mod.rs similarity index 100% rename from src/http/v1/handlers/common/mod.rs rename to src/servers/http/v1/handlers/common/mod.rs diff --git a/src/http/v1/handlers/common/peer_ip.rs b/src/servers/http/v1/handlers/common/peer_ip.rs similarity index 77% rename from src/http/v1/handlers/common/peer_ip.rs rename to src/servers/http/v1/handlers/common/peer_ip.rs index e182c716b..685324b4a 100644 --- a/src/http/v1/handlers/common/peer_ip.rs +++ b/src/servers/http/v1/handlers/common/peer_ip.rs @@ -1,5 +1,5 @@ -use crate::http::v1::responses; -use crate::http::v1::services::peer_ip_resolver::PeerIpResolutionError; +use crate::servers::http::v1::responses; +use crate::servers::http::v1::services::peer_ip_resolver::PeerIpResolutionError; impl From for responses::error::Error { fn from(err: PeerIpResolutionError) -> Self { @@ -13,8 +13,8 @@ impl From for responses::error::Error { mod tests { use std::panic::Location; - use crate::http::v1::responses; - use crate::http::v1::services::peer_ip_resolver::PeerIpResolutionError; + use crate::servers::http::v1::responses; + use crate::servers::http::v1::services::peer_ip_resolver::PeerIpResolutionError; fn assert_error_response(error: &responses::error::Error, error_message: &str) { assert!( diff --git a/src/http/v1/handlers/mod.rs b/src/servers/http/v1/handlers/mod.rs similarity index 100% rename from src/http/v1/handlers/mod.rs rename to src/servers/http/v1/handlers/mod.rs diff --git a/src/http/v1/handlers/scrape.rs b/src/servers/http/v1/handlers/scrape.rs similarity index 86% rename from src/http/v1/handlers/scrape.rs rename to src/servers/http/v1/handlers/scrape.rs index 50f92cd36..75c5717de 100644 --- a/src/http/v1/handlers/scrape.rs +++ b/src/servers/http/v1/handlers/scrape.rs @@ -4,12 +4,12 @@ use axum::extract::State; use axum::response::{IntoResponse, Response}; use log::debug; -use crate::http::v1::extractors::authentication_key::Extract as ExtractKey; -use crate::http::v1::extractors::client_ip_sources::Extract as ExtractClientIpSources; -use crate::http::v1::extractors::scrape_request::ExtractRequest; -use crate::http::v1::requests::scrape::Scrape; -use crate::http::v1::services::peer_ip_resolver::{self, ClientIpSources}; -use crate::http::v1::{responses, services}; +use crate::servers::http::v1::extractors::authentication_key::Extract as ExtractKey; +use crate::servers::http::v1::extractors::client_ip_sources::Extract as ExtractClientIpSources; +use crate::servers::http::v1::extractors::scrape_request::ExtractRequest; +use crate::servers::http::v1::requests::scrape::Scrape; +use crate::servers::http::v1::services::peer_ip_resolver::{self, ClientIpSources}; +use crate::servers::http::v1::{responses, services}; use crate::tracker::auth::Key; use crate::tracker::{ScrapeData, Tracker}; @@ -99,10 +99,10 @@ mod tests { use torrust_tracker_test_helpers::configuration; - use crate::http::v1::requests::scrape::Scrape; - use crate::http::v1::responses; - use crate::http::v1::services::peer_ip_resolver::ClientIpSources; use crate::protocol::info_hash::InfoHash; + use crate::servers::http::v1::requests::scrape::Scrape; + use crate::servers::http::v1::responses; + use crate::servers::http::v1::services::peer_ip_resolver::ClientIpSources; use crate::tracker::services::common::tracker_factory; use crate::tracker::Tracker; @@ -147,7 +147,7 @@ mod tests { use std::sync::Arc; use super::{private_tracker, sample_client_ip_sources, sample_scrape_request}; - use crate::http::v1::handlers::scrape::handle_scrape; + use crate::servers::http::v1::handlers::scrape::handle_scrape; use crate::tracker::{auth, ScrapeData}; #[tokio::test] @@ -189,7 +189,7 @@ mod tests { use std::sync::Arc; use super::{sample_client_ip_sources, sample_scrape_request, whitelisted_tracker}; - use crate::http::v1::handlers::scrape::handle_scrape; + use crate::servers::http::v1::handlers::scrape::handle_scrape; use crate::tracker::ScrapeData; #[tokio::test] @@ -212,9 +212,9 @@ mod tests { use std::sync::Arc; use super::{sample_scrape_request, tracker_on_reverse_proxy}; - use crate::http::v1::handlers::scrape::handle_scrape; - use crate::http::v1::handlers::scrape::tests::assert_error_response; - use crate::http::v1::services::peer_ip_resolver::ClientIpSources; + use crate::servers::http::v1::handlers::scrape::handle_scrape; + use crate::servers::http::v1::handlers::scrape::tests::assert_error_response; + use crate::servers::http::v1::services::peer_ip_resolver::ClientIpSources; #[tokio::test] async fn it_should_fail_when_the_right_most_x_forwarded_for_header_ip_is_not_available() { @@ -240,9 +240,9 @@ mod tests { use std::sync::Arc; use super::{sample_scrape_request, tracker_not_on_reverse_proxy}; - use crate::http::v1::handlers::scrape::handle_scrape; - use crate::http::v1::handlers::scrape::tests::assert_error_response; - use crate::http::v1::services::peer_ip_resolver::ClientIpSources; + use crate::servers::http::v1::handlers::scrape::handle_scrape; + use crate::servers::http::v1::handlers::scrape::tests::assert_error_response; + use crate::servers::http::v1::services::peer_ip_resolver::ClientIpSources; #[tokio::test] async fn it_should_fail_when_the_client_ip_from_the_connection_info_is_not_available() { diff --git a/src/http/v1/launcher.rs b/src/servers/http/v1/launcher.rs similarity index 98% rename from src/http/v1/launcher.rs rename to src/servers/http/v1/launcher.rs index 45bc54664..4cfa4295d 100644 --- a/src/http/v1/launcher.rs +++ b/src/servers/http/v1/launcher.rs @@ -10,7 +10,7 @@ use futures::future::BoxFuture; use log::info; use super::routes::router; -use crate::http::server::HttpServerLauncher; +use crate::servers::http::server::HttpServerLauncher; use crate::tracker::Tracker; #[derive(Debug)] diff --git a/src/http/v1/mod.rs b/src/servers/http/v1/mod.rs similarity index 100% rename from src/http/v1/mod.rs rename to src/servers/http/v1/mod.rs diff --git a/src/http/v1/query.rs b/src/servers/http/v1/query.rs similarity index 97% rename from src/http/v1/query.rs rename to src/servers/http/v1/query.rs index 45484ea38..c40e7949f 100644 --- a/src/http/v1/query.rs +++ b/src/servers/http/v1/query.rs @@ -174,7 +174,7 @@ impl std::fmt::Display for FieldValuePairSet { mod tests { mod url_query { - use crate::http::v1::query::Query; + use crate::servers::http::v1::query::Query; #[test] fn should_parse_the_query_params_from_an_url_query_string() { @@ -227,7 +227,7 @@ mod tests { } mod should_allow_more_than_one_value_for_the_same_param { - use crate::http::v1::query::Query; + use crate::servers::http::v1::query::Query; #[test] fn instantiated_from_a_vector() { @@ -249,7 +249,7 @@ mod tests { } mod should_be_displayed { - use crate::http::v1::query::Query; + use crate::servers::http::v1::query::Query; #[test] fn with_one_param() { @@ -270,7 +270,7 @@ mod tests { } mod param_name_value_pair { - use crate::http::v1::query::NameValuePair; + use crate::servers::http::v1::query::NameValuePair; #[test] fn should_parse_a_single_query_param() { diff --git a/src/http/v1/requests/announce.rs b/src/servers/http/v1/requests/announce.rs similarity index 97% rename from src/http/v1/requests/announce.rs rename to src/servers/http/v1/requests/announce.rs index eeab97d5f..3b1e55cb9 100644 --- a/src/http/v1/requests/announce.rs +++ b/src/servers/http/v1/requests/announce.rs @@ -5,10 +5,10 @@ use std::str::FromStr; use thiserror::Error; use torrust_tracker_located_error::{Located, LocatedError}; -use crate::http::percent_encoding::{percent_decode_info_hash, percent_decode_peer_id}; -use crate::http::v1::query::{ParseQueryError, Query}; -use crate::http::v1::responses; use crate::protocol::info_hash::{ConversionError, InfoHash}; +use crate::servers::http::percent_encoding::{percent_decode_info_hash, percent_decode_peer_id}; +use crate::servers::http::v1::query::{ParseQueryError, Query}; +use crate::servers::http::v1::responses; use crate::tracker::peer::{self, IdConversionError}; pub type NumberOfBytes = i64; @@ -280,11 +280,11 @@ mod tests { mod announce_request { - use crate::http::v1::query::Query; - use crate::http::v1::requests::announce::{ + use crate::protocol::info_hash::InfoHash; + use crate::servers::http::v1::query::Query; + use crate::servers::http::v1::requests::announce::{ Announce, Compact, Event, COMPACT, DOWNLOADED, EVENT, INFO_HASH, LEFT, PEER_ID, PORT, UPLOADED, }; - use crate::protocol::info_hash::InfoHash; use crate::tracker::peer; #[test] @@ -350,8 +350,8 @@ mod tests { mod when_it_is_instantiated_from_the_url_query_params { - use crate::http::v1::query::Query; - use crate::http::v1::requests::announce::{ + use crate::servers::http::v1::query::Query; + use crate::servers::http::v1::requests::announce::{ Announce, COMPACT, DOWNLOADED, EVENT, INFO_HASH, LEFT, PEER_ID, PORT, UPLOADED, }; diff --git a/src/http/v1/requests/mod.rs b/src/servers/http/v1/requests/mod.rs similarity index 100% rename from src/http/v1/requests/mod.rs rename to src/servers/http/v1/requests/mod.rs diff --git a/src/http/v1/requests/scrape.rs b/src/servers/http/v1/requests/scrape.rs similarity index 89% rename from src/http/v1/requests/scrape.rs rename to src/servers/http/v1/requests/scrape.rs index 6257f0733..e50895c20 100644 --- a/src/http/v1/requests/scrape.rs +++ b/src/servers/http/v1/requests/scrape.rs @@ -3,10 +3,10 @@ use std::panic::Location; use thiserror::Error; use torrust_tracker_located_error::{Located, LocatedError}; -use crate::http::percent_encoding::percent_decode_info_hash; -use crate::http::v1::query::Query; -use crate::http::v1::responses; use crate::protocol::info_hash::{ConversionError, InfoHash}; +use crate::servers::http::percent_encoding::percent_decode_info_hash; +use crate::servers::http::v1::query::Query; +use crate::servers::http::v1::responses; pub type NumberOfBytes = i64; @@ -85,9 +85,9 @@ mod tests { mod scrape_request { - use crate::http::v1::query::Query; - use crate::http::v1::requests::scrape::{Scrape, INFO_HASH}; use crate::protocol::info_hash::InfoHash; + use crate::servers::http::v1::query::Query; + use crate::servers::http::v1::requests::scrape::{Scrape, INFO_HASH}; #[test] fn should_be_instantiated_from_the_url_query_with_only_one_infohash() { @@ -107,8 +107,8 @@ mod tests { mod when_it_is_instantiated_from_the_url_query_params { - use crate::http::v1::query::Query; - use crate::http::v1::requests::scrape::{Scrape, INFO_HASH}; + use crate::servers::http::v1::query::Query; + use crate::servers::http::v1::requests::scrape::{Scrape, INFO_HASH}; #[test] fn it_should_fail_if_the_query_does_not_include_the_info_hash_param() { diff --git a/src/http/v1/responses/announce.rs b/src/servers/http/v1/responses/announce.rs similarity index 98% rename from src/http/v1/responses/announce.rs rename to src/servers/http/v1/responses/announce.rs index 8b178ff7e..4902e0d62 100644 --- a/src/http/v1/responses/announce.rs +++ b/src/servers/http/v1/responses/announce.rs @@ -8,7 +8,7 @@ use bip_bencode::{ben_bytes, ben_int, ben_list, ben_map, BMutAccess, BencodeMut} use serde::{self, Deserialize, Serialize}; use thiserror::Error; -use crate::http::v1::responses; +use crate::servers::http::v1::responses; use crate::tracker::{self, AnnounceData}; /// Normal (non compact) "announce" response @@ -250,7 +250,7 @@ mod tests { use std::net::{IpAddr, Ipv4Addr, Ipv6Addr}; use super::{NonCompact, Peer}; - use crate::http::v1::responses::announce::{Compact, CompactPeer}; + use crate::servers::http::v1::responses::announce::{Compact, CompactPeer}; // Some ascii values used in tests: // diff --git a/src/http/v1/responses/error.rs b/src/servers/http/v1/responses/error.rs similarity index 100% rename from src/http/v1/responses/error.rs rename to src/servers/http/v1/responses/error.rs diff --git a/src/http/v1/responses/mod.rs b/src/servers/http/v1/responses/mod.rs similarity index 100% rename from src/http/v1/responses/mod.rs rename to src/servers/http/v1/responses/mod.rs diff --git a/src/http/v1/responses/scrape.rs b/src/servers/http/v1/responses/scrape.rs similarity index 97% rename from src/http/v1/responses/scrape.rs rename to src/servers/http/v1/responses/scrape.rs index 5cbe6502e..7d9e169c8 100644 --- a/src/http/v1/responses/scrape.rs +++ b/src/servers/http/v1/responses/scrape.rs @@ -55,8 +55,8 @@ impl IntoResponse for Bencoded { mod tests { mod scrape_response { - use crate::http::v1::responses::scrape::Bencoded; use crate::protocol::info_hash::InfoHash; + use crate::servers::http::v1::responses::scrape::Bencoded; use crate::tracker::torrent::SwarmMetadata; use crate::tracker::ScrapeData; diff --git a/src/http/v1/routes.rs b/src/servers/http/v1/routes.rs similarity index 100% rename from src/http/v1/routes.rs rename to src/servers/http/v1/routes.rs diff --git a/src/http/v1/services/announce.rs b/src/servers/http/v1/services/announce.rs similarity index 97% rename from src/http/v1/services/announce.rs rename to src/servers/http/v1/services/announce.rs index a8b9f0d06..3f8c5a839 100644 --- a/src/http/v1/services/announce.rs +++ b/src/servers/http/v1/services/announce.rs @@ -77,8 +77,8 @@ mod tests { use torrust_tracker_test_helpers::configuration; use super::{sample_peer_using_ipv4, sample_peer_using_ipv6}; - use crate::http::v1::services::announce::invoke; - use crate::http::v1::services::announce::tests::{public_tracker, sample_info_hash, sample_peer}; + use crate::servers::http::v1::services::announce::invoke; + use crate::servers::http::v1::services::announce::tests::{public_tracker, sample_info_hash, sample_peer}; use crate::tracker::peer::Peer; use crate::tracker::torrent::SwarmStats; use crate::tracker::{statistics, AnnounceData, Tracker}; diff --git a/src/http/v1/services/mod.rs b/src/servers/http/v1/services/mod.rs similarity index 100% rename from src/http/v1/services/mod.rs rename to src/servers/http/v1/services/mod.rs diff --git a/src/http/v1/services/peer_ip_resolver.rs b/src/servers/http/v1/services/peer_ip_resolver.rs similarity index 95% rename from src/http/v1/services/peer_ip_resolver.rs rename to src/servers/http/v1/services/peer_ip_resolver.rs index c7bc183b4..ac5b8c79f 100644 --- a/src/http/v1/services/peer_ip_resolver.rs +++ b/src/servers/http/v1/services/peer_ip_resolver.rs @@ -73,7 +73,7 @@ mod tests { use std::str::FromStr; use super::invoke; - use crate::http::v1::services::peer_ip_resolver::{ClientIpSources, PeerIpResolutionError}; + use crate::servers::http::v1::services::peer_ip_resolver::{ClientIpSources, PeerIpResolutionError}; #[test] fn it_should_get_the_peer_ip_from_the_connection_info() { @@ -112,7 +112,7 @@ mod tests { use std::net::IpAddr; use std::str::FromStr; - use crate::http::v1::services::peer_ip_resolver::{invoke, ClientIpSources, PeerIpResolutionError}; + use crate::servers::http::v1::services::peer_ip_resolver::{invoke, ClientIpSources, PeerIpResolutionError}; #[test] fn it_should_get_the_peer_ip_from_the_right_most_ip_in_the_x_forwarded_for_header() { diff --git a/src/http/v1/services/scrape.rs b/src/servers/http/v1/services/scrape.rs similarity index 95% rename from src/http/v1/services/scrape.rs rename to src/servers/http/v1/services/scrape.rs index b6f319375..1044634ad 100644 --- a/src/http/v1/services/scrape.rs +++ b/src/servers/http/v1/services/scrape.rs @@ -77,8 +77,10 @@ mod tests { use mockall::predicate::eq; use torrust_tracker_test_helpers::configuration; - use crate::http::v1::services::scrape::invoke; - use crate::http::v1::services::scrape::tests::{public_tracker, sample_info_hash, sample_info_hashes, sample_peer}; + use crate::servers::http::v1::services::scrape::invoke; + use crate::servers::http::v1::services::scrape::tests::{ + public_tracker, sample_info_hash, sample_info_hashes, sample_peer, + }; use crate::tracker::torrent::SwarmMetadata; use crate::tracker::{statistics, ScrapeData, Tracker}; @@ -167,8 +169,10 @@ mod tests { use mockall::predicate::eq; use torrust_tracker_test_helpers::configuration; - use crate::http::v1::services::scrape::fake; - use crate::http::v1::services::scrape::tests::{public_tracker, sample_info_hash, sample_info_hashes, sample_peer}; + use crate::servers::http::v1::services::scrape::fake; + use crate::servers::http::v1::services::scrape::tests::{ + public_tracker, sample_info_hash, sample_info_hashes, sample_peer, + }; use crate::tracker::{statistics, ScrapeData, Tracker}; #[tokio::test] diff --git a/src/servers/mod.rs b/src/servers/mod.rs new file mode 100644 index 000000000..17005b56d --- /dev/null +++ b/src/servers/mod.rs @@ -0,0 +1,3 @@ +pub mod apis; +pub mod http; +pub mod udp; diff --git a/src/udp/connection_cookie.rs b/src/servers/udp/connection_cookie.rs similarity index 99% rename from src/udp/connection_cookie.rs rename to src/servers/udp/connection_cookie.rs index ef2a8b219..a55d40801 100644 --- a/src/udp/connection_cookie.rs +++ b/src/servers/udp/connection_cookie.rs @@ -92,7 +92,7 @@ mod tests { use super::cookie_builder::{self}; use crate::protocol::clock::time_extent::{self, Extent}; use crate::protocol::clock::{Stopped, StoppedTime}; - use crate::udp::connection_cookie::{check, make, Cookie, COOKIE_LIFETIME}; + use crate::servers::udp::connection_cookie::{check, make, Cookie, COOKIE_LIFETIME}; // #![feature(const_socketaddr)] // const REMOTE_ADDRESS_IPV4_ZERO: SocketAddr = SocketAddr::new(IpAddr::V4(Ipv4Addr::UNSPECIFIED), 0); diff --git a/src/udp/error.rs b/src/servers/udp/error.rs similarity index 100% rename from src/udp/error.rs rename to src/servers/udp/error.rs diff --git a/src/udp/handlers.rs b/src/servers/udp/handlers.rs similarity index 94% rename from src/udp/handlers.rs rename to src/servers/udp/handlers.rs index 41b1184dc..1544e13cc 100644 --- a/src/udp/handlers.rs +++ b/src/servers/udp/handlers.rs @@ -11,10 +11,10 @@ use log::debug; use super::connection_cookie::{check, from_connection_id, into_connection_id, make}; use crate::protocol::common::MAX_SCRAPE_TORRENTS; use crate::protocol::info_hash::InfoHash; +use crate::servers::udp::error::Error; +use crate::servers::udp::peer_builder; +use crate::servers::udp::request::AnnounceWrapper; use crate::tracker::{statistics, Tracker}; -use crate::udp::error::Error; -use crate::udp::peer_builder; -use crate::udp::request::AnnounceWrapper; pub async fn handle_packet(remote_addr: SocketAddr, payload: Vec, tracker: &Tracker) -> Response { match Request::from_bytes(&payload[..payload.len()], MAX_SCRAPE_TORRENTS).map_err(|e| Error::InternalServer { @@ -354,10 +354,10 @@ mod tests { use mockall::predicate::eq; use super::{sample_ipv4_socket_address, sample_ipv6_remote_addr, tracker_configuration}; + use crate::servers::udp::connection_cookie::{into_connection_id, make}; + use crate::servers::udp::handlers::handle_connect; + use crate::servers::udp::handlers::tests::{public_tracker, sample_ipv4_remote_addr}; use crate::tracker::{self, statistics}; - use crate::udp::connection_cookie::{into_connection_id, make}; - use crate::udp::handlers::handle_connect; - use crate::udp::handlers::tests::{public_tracker, sample_ipv4_remote_addr}; fn sample_connect_request() -> ConnectRequest { ConnectRequest { @@ -451,8 +451,8 @@ mod tests { TransactionId, }; - use crate::udp::connection_cookie::{into_connection_id, make}; - use crate::udp::handlers::tests::sample_ipv4_remote_addr; + use crate::servers::udp::connection_cookie::{into_connection_id, make}; + use crate::servers::udp::handlers::tests::sample_ipv4_remote_addr; struct AnnounceRequestBuilder { request: AnnounceRequest, @@ -525,13 +525,13 @@ mod tests { }; use mockall::predicate::eq; - use crate::tracker::{self, peer, statistics}; - use crate::udp::connection_cookie::{into_connection_id, make}; - use crate::udp::handlers::handle_announce; - use crate::udp::handlers::tests::announce_request::AnnounceRequestBuilder; - use crate::udp::handlers::tests::{ + use crate::servers::udp::connection_cookie::{into_connection_id, make}; + use crate::servers::udp::handlers::handle_announce; + use crate::servers::udp::handlers::tests::announce_request::AnnounceRequestBuilder; + use crate::servers::udp::handlers::tests::{ public_tracker, sample_ipv4_socket_address, tracker_configuration, TorrentPeerBuilder, }; + use crate::tracker::{self, peer, statistics}; #[tokio::test] async fn an_announced_peer_should_be_added_to_the_tracker() { @@ -692,11 +692,11 @@ mod tests { use aquatic_udp_protocol::{InfoHash as AquaticInfoHash, PeerId as AquaticPeerId}; + use crate::servers::udp::connection_cookie::{into_connection_id, make}; + use crate::servers::udp::handlers::handle_announce; + use crate::servers::udp::handlers::tests::announce_request::AnnounceRequestBuilder; + use crate::servers::udp::handlers::tests::{public_tracker, TorrentPeerBuilder}; use crate::tracker::peer; - use crate::udp::connection_cookie::{into_connection_id, make}; - use crate::udp::handlers::handle_announce; - use crate::udp::handlers::tests::announce_request::AnnounceRequestBuilder; - use crate::udp::handlers::tests::{public_tracker, TorrentPeerBuilder}; #[tokio::test] async fn the_peer_ip_should_be_changed_to_the_external_ip_in_the_tracker_configuration_if_defined() { @@ -746,13 +746,13 @@ mod tests { }; use mockall::predicate::eq; - use crate::tracker::{self, peer, statistics}; - use crate::udp::connection_cookie::{into_connection_id, make}; - use crate::udp::handlers::handle_announce; - use crate::udp::handlers::tests::announce_request::AnnounceRequestBuilder; - use crate::udp::handlers::tests::{ + use crate::servers::udp::connection_cookie::{into_connection_id, make}; + use crate::servers::udp::handlers::handle_announce; + use crate::servers::udp::handlers::tests::announce_request::AnnounceRequestBuilder; + use crate::servers::udp::handlers::tests::{ public_tracker, sample_ipv6_remote_addr, tracker_configuration, TorrentPeerBuilder, }; + use crate::tracker::{self, peer, statistics}; #[tokio::test] async fn an_announced_peer_should_be_added_to_the_tracker() { @@ -921,12 +921,12 @@ mod tests { use aquatic_udp_protocol::{InfoHash as AquaticInfoHash, PeerId as AquaticPeerId}; + use crate::servers::udp::connection_cookie::{into_connection_id, make}; + use crate::servers::udp::handlers::handle_announce; + use crate::servers::udp::handlers::tests::announce_request::AnnounceRequestBuilder; + use crate::servers::udp::handlers::tests::TrackerConfigurationBuilder; use crate::tracker; use crate::tracker::statistics::Keeper; - use crate::udp::connection_cookie::{into_connection_id, make}; - use crate::udp::handlers::handle_announce; - use crate::udp::handlers::tests::announce_request::AnnounceRequestBuilder; - use crate::udp::handlers::tests::TrackerConfigurationBuilder; #[tokio::test] async fn the_peer_ip_should_be_changed_to_the_external_ip_in_the_tracker_configuration() { @@ -983,10 +983,10 @@ mod tests { }; use super::TorrentPeerBuilder; + use crate::servers::udp::connection_cookie::{into_connection_id, make}; + use crate::servers::udp::handlers::handle_scrape; + use crate::servers::udp::handlers::tests::{public_tracker, sample_ipv4_remote_addr}; use crate::tracker::{self, peer}; - use crate::udp::connection_cookie::{into_connection_id, make}; - use crate::udp::handlers::handle_scrape; - use crate::udp::handlers::tests::{public_tracker, sample_ipv4_remote_addr}; fn zeroed_torrent_statistics() -> TorrentScrapeStatistics { TorrentScrapeStatistics { @@ -1067,8 +1067,8 @@ mod tests { mod with_a_public_tracker { use aquatic_udp_protocol::{NumberOfDownloads, NumberOfPeers, TorrentScrapeStatistics}; - use crate::udp::handlers::tests::public_tracker; - use crate::udp::handlers::tests::scrape_request::{add_a_sample_seeder_and_scrape, match_scrape_response}; + use crate::servers::udp::handlers::tests::public_tracker; + use crate::servers::udp::handlers::tests::scrape_request::{add_a_sample_seeder_and_scrape, match_scrape_response}; #[tokio::test] async fn should_return_torrent_statistics_when_the_tracker_has_the_requested_torrent() { @@ -1090,11 +1090,11 @@ mod tests { use aquatic_udp_protocol::InfoHash; - use crate::udp::handlers::handle_scrape; - use crate::udp::handlers::tests::scrape_request::{ + use crate::servers::udp::handlers::handle_scrape; + use crate::servers::udp::handlers::tests::scrape_request::{ add_a_sample_seeder_and_scrape, build_scrape_request, match_scrape_response, zeroed_torrent_statistics, }; - use crate::udp::handlers::tests::{private_tracker, sample_ipv4_remote_addr}; + use crate::servers::udp::handlers::tests::{private_tracker, sample_ipv4_remote_addr}; #[tokio::test] async fn should_return_zeroed_statistics_when_the_tracker_does_not_have_the_requested_torrent() { @@ -1128,11 +1128,11 @@ mod tests { mod with_a_whitelisted_tracker { use aquatic_udp_protocol::{InfoHash, NumberOfDownloads, NumberOfPeers, TorrentScrapeStatistics}; - use crate::udp::handlers::handle_scrape; - use crate::udp::handlers::tests::scrape_request::{ + use crate::servers::udp::handlers::handle_scrape; + use crate::servers::udp::handlers::tests::scrape_request::{ add_a_seeder, build_scrape_request, match_scrape_response, zeroed_torrent_statistics, }; - use crate::udp::handlers::tests::{sample_ipv4_remote_addr, whitelisted_tracker}; + use crate::servers::udp::handlers::tests::{sample_ipv4_remote_addr, whitelisted_tracker}; #[tokio::test] async fn should_return_the_torrent_statistics_when_the_requested_torrent_is_whitelisted() { @@ -1195,9 +1195,9 @@ mod tests { use mockall::predicate::eq; use super::sample_scrape_request; + use crate::servers::udp::handlers::handle_scrape; + use crate::servers::udp::handlers::tests::{sample_ipv4_remote_addr, tracker_configuration}; use crate::tracker::{self, statistics}; - use crate::udp::handlers::handle_scrape; - use crate::udp::handlers::tests::{sample_ipv4_remote_addr, tracker_configuration}; #[tokio::test] async fn should_send_the_upd4_scrape_event() { @@ -1227,9 +1227,9 @@ mod tests { use mockall::predicate::eq; use super::sample_scrape_request; + use crate::servers::udp::handlers::handle_scrape; + use crate::servers::udp::handlers::tests::{sample_ipv6_remote_addr, tracker_configuration}; use crate::tracker::{self, statistics}; - use crate::udp::handlers::handle_scrape; - use crate::udp::handlers::tests::{sample_ipv6_remote_addr, tracker_configuration}; #[tokio::test] async fn should_send_the_upd6_scrape_event() { diff --git a/src/udp/mod.rs b/src/servers/udp/mod.rs similarity index 100% rename from src/udp/mod.rs rename to src/servers/udp/mod.rs diff --git a/src/udp/peer_builder.rs b/src/servers/udp/peer_builder.rs similarity index 100% rename from src/udp/peer_builder.rs rename to src/servers/udp/peer_builder.rs diff --git a/src/udp/request.rs b/src/servers/udp/request.rs similarity index 100% rename from src/udp/request.rs rename to src/servers/udp/request.rs diff --git a/src/udp/server.rs b/src/servers/udp/server.rs similarity index 98% rename from src/udp/server.rs rename to src/servers/udp/server.rs index e52b8fd52..f44f37f5f 100644 --- a/src/udp/server.rs +++ b/src/servers/udp/server.rs @@ -9,10 +9,10 @@ use log::{debug, error, info}; use tokio::net::UdpSocket; use tokio::task::JoinHandle; +use crate::servers::udp::handlers::handle_packet; +use crate::servers::udp::MAX_PACKET_SIZE; use crate::signals::shutdown_signal; use crate::tracker::Tracker; -use crate::udp::handlers::handle_packet; -use crate::udp::MAX_PACKET_SIZE; #[derive(Debug)] pub enum Error { diff --git a/src/setup.rs b/src/setup.rs index 86de0723c..c8e5e4113 100644 --- a/src/setup.rs +++ b/src/setup.rs @@ -4,8 +4,8 @@ use log::warn; use tokio::task::JoinHandle; use torrust_tracker_configuration::Configuration; -use crate::http::Version; use crate::jobs::{http_tracker, torrent_cleanup, tracker_apis, udp_tracker}; +use crate::servers::http::Version; use crate::tracker; /// # Panics diff --git a/tests/servers/api/test_environment.rs b/tests/servers/api/test_environment.rs index b6f5ca990..07ba46fff 100644 --- a/tests/servers/api/test_environment.rs +++ b/tests/servers/api/test_environment.rs @@ -1,7 +1,7 @@ use std::sync::Arc; -use torrust_tracker::apis::server::{ApiServer, RunningApiServer, StoppedApiServer}; use torrust_tracker::protocol::info_hash::InfoHash; +use torrust_tracker::servers::apis::server::{ApiServer, RunningApiServer, StoppedApiServer}; use torrust_tracker::tracker::peer::Peer; use torrust_tracker::tracker::Tracker; diff --git a/tests/servers/api/v1/asserts.rs b/tests/servers/api/v1/asserts.rs index d37bcdbb4..1b1f204a2 100644 --- a/tests/servers/api/v1/asserts.rs +++ b/tests/servers/api/v1/asserts.rs @@ -1,9 +1,9 @@ // code-review: should we use macros to return the exact line where the assert fails? use reqwest::Response; -use torrust_tracker::apis::v1::context::auth_key::resources::AuthKey; -use torrust_tracker::apis::v1::context::stats::resources::Stats; -use torrust_tracker::apis::v1::context::torrent::resources::torrent::{ListItem, Torrent}; +use torrust_tracker::servers::apis::v1::context::auth_key::resources::AuthKey; +use torrust_tracker::servers::apis::v1::context::stats::resources::Stats; +use torrust_tracker::servers::apis::v1::context::torrent::resources::torrent::{ListItem, Torrent}; // Resource responses diff --git a/tests/servers/api/v1/contract/context/stats.rs b/tests/servers/api/v1/contract/context/stats.rs index 3929a4270..038272963 100644 --- a/tests/servers/api/v1/contract/context/stats.rs +++ b/tests/servers/api/v1/contract/context/stats.rs @@ -1,7 +1,7 @@ use std::str::FromStr; -use torrust_tracker::apis::v1::context::stats::resources::Stats; use torrust_tracker::protocol::info_hash::InfoHash; +use torrust_tracker::servers::apis::v1::context::stats::resources::Stats; use torrust_tracker_test_helpers::configuration; use crate::common::fixtures::PeerBuilder; diff --git a/tests/servers/api/v1/contract/context/torrent.rs b/tests/servers/api/v1/contract/context/torrent.rs index 702a8bcd4..69d600a8b 100644 --- a/tests/servers/api/v1/contract/context/torrent.rs +++ b/tests/servers/api/v1/contract/context/torrent.rs @@ -1,8 +1,8 @@ use std::str::FromStr; -use torrust_tracker::apis::v1::context::torrent::resources::peer::Peer; -use torrust_tracker::apis::v1::context::torrent::resources::torrent::{self, Torrent}; use torrust_tracker::protocol::info_hash::InfoHash; +use torrust_tracker::servers::apis::v1::context::torrent::resources::peer::Peer; +use torrust_tracker::servers::apis::v1::context::torrent::resources::torrent::{self, Torrent}; use torrust_tracker_test_helpers::configuration; use crate::common::fixtures::PeerBuilder; diff --git a/tests/servers/http/test_environment.rs b/tests/servers/http/test_environment.rs index 459c2fbe6..aa414d62e 100644 --- a/tests/servers/http/test_environment.rs +++ b/tests/servers/http/test_environment.rs @@ -1,7 +1,7 @@ use std::sync::Arc; -use torrust_tracker::http::server::{HttpServer, HttpServerLauncher, RunningHttpServer, StoppedHttpServer}; use torrust_tracker::protocol::info_hash::InfoHash; +use torrust_tracker::servers::http::server::{HttpServer, HttpServerLauncher, RunningHttpServer, StoppedHttpServer}; use torrust_tracker::tracker::peer::Peer; use torrust_tracker::tracker::Tracker; diff --git a/tests/servers/http/v1/contract.rs b/tests/servers/http/v1/contract.rs index 501c0f6fa..f67b0c5e5 100644 --- a/tests/servers/http/v1/contract.rs +++ b/tests/servers/http/v1/contract.rs @@ -2,7 +2,7 @@ use torrust_tracker_test_helpers::configuration; use crate::servers::http::test_environment::running_test_environment; -pub type V1 = torrust_tracker::http::v1::launcher::Launcher; +pub type V1 = torrust_tracker::servers::http::v1::launcher::Launcher; #[tokio::test] async fn test_environment_should_be_started_and_stopped() { diff --git a/tests/servers/udp/client.rs b/tests/servers/udp/client.rs index a13845b97..75467055e 100644 --- a/tests/servers/udp/client.rs +++ b/tests/servers/udp/client.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use aquatic_udp_protocol::{Request, Response}; use tokio::net::UdpSocket; -use torrust_tracker::udp::MAX_PACKET_SIZE; +use torrust_tracker::servers::udp::MAX_PACKET_SIZE; use crate::servers::udp::source_address; diff --git a/tests/servers/udp/contract.rs b/tests/servers/udp/contract.rs index 311cf5e49..3187d9871 100644 --- a/tests/servers/udp/contract.rs +++ b/tests/servers/udp/contract.rs @@ -6,7 +6,7 @@ use core::panic; use aquatic_udp_protocol::{ConnectRequest, ConnectionId, Response, TransactionId}; -use torrust_tracker::udp::MAX_PACKET_SIZE; +use torrust_tracker::servers::udp::MAX_PACKET_SIZE; use torrust_tracker_test_helpers::configuration; use crate::servers::udp::asserts::is_error_response; diff --git a/tests/servers/udp/test_environment.rs b/tests/servers/udp/test_environment.rs index f729777a1..11a2cf6cd 100644 --- a/tests/servers/udp/test_environment.rs +++ b/tests/servers/udp/test_environment.rs @@ -2,9 +2,9 @@ use std::net::SocketAddr; use std::sync::Arc; use torrust_tracker::protocol::info_hash::InfoHash; +use torrust_tracker::servers::udp::server::{RunningUdpServer, StoppedUdpServer, UdpServer}; use torrust_tracker::tracker::peer::Peer; use torrust_tracker::tracker::Tracker; -use torrust_tracker::udp::server::{RunningUdpServer, StoppedUdpServer, UdpServer}; use crate::common::tracker::new_tracker; From 389771b5b221a37908e7f0a584da5864d855f501 Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Fri, 17 Mar 2023 08:22:25 +0000 Subject: [PATCH 02/12] refactor: move databases mod to tracker mod Database is only use inisde the `tracker` mod. --- src/lib.rs | 1 - src/{ => tracker}/databases/driver.rs | 0 src/{ => tracker}/databases/error.rs | 0 src/{ => tracker}/databases/mod.rs | 0 src/{ => tracker}/databases/mysql.rs | 2 +- src/{ => tracker}/databases/sqlite.rs | 2 +- src/tracker/mod.rs | 3 ++- 7 files changed, 4 insertions(+), 4 deletions(-) rename src/{ => tracker}/databases/driver.rs (100%) rename src/{ => tracker}/databases/error.rs (100%) rename src/{ => tracker}/databases/mod.rs (100%) rename src/{ => tracker}/databases/mysql.rs (99%) rename src/{ => tracker}/databases/sqlite.rs (99%) diff --git a/src/lib.rs b/src/lib.rs index 6c0ae464f..442b687fa 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,4 +1,3 @@ -pub mod databases; pub mod jobs; pub mod logging; pub mod protocol; diff --git a/src/databases/driver.rs b/src/tracker/databases/driver.rs similarity index 100% rename from src/databases/driver.rs rename to src/tracker/databases/driver.rs diff --git a/src/databases/error.rs b/src/tracker/databases/error.rs similarity index 100% rename from src/databases/error.rs rename to src/tracker/databases/error.rs diff --git a/src/databases/mod.rs b/src/tracker/databases/mod.rs similarity index 100% rename from src/databases/mod.rs rename to src/tracker/databases/mod.rs diff --git a/src/databases/mysql.rs b/src/tracker/databases/mysql.rs similarity index 99% rename from src/databases/mysql.rs rename to src/tracker/databases/mysql.rs index f6918974f..ded9e1617 100644 --- a/src/databases/mysql.rs +++ b/src/tracker/databases/mysql.rs @@ -9,7 +9,7 @@ use r2d2_mysql::mysql::{params, Opts, OptsBuilder}; use r2d2_mysql::MySqlConnectionManager; use torrust_tracker_primitives::DatabaseDriver; -use crate::databases::{Database, Error}; +use super::{Database, Error}; use crate::protocol::common::AUTH_KEY_LENGTH; use crate::protocol::info_hash::InfoHash; use crate::tracker::auth::{self, Key}; diff --git a/src/databases/sqlite.rs b/src/tracker/databases/sqlite.rs similarity index 99% rename from src/databases/sqlite.rs rename to src/tracker/databases/sqlite.rs index adb201def..e230ac18f 100644 --- a/src/databases/sqlite.rs +++ b/src/tracker/databases/sqlite.rs @@ -6,7 +6,7 @@ use r2d2::Pool; use r2d2_sqlite::SqliteConnectionManager; use torrust_tracker_primitives::DatabaseDriver; -use crate::databases::{Database, Error}; +use super::{Database, Error}; use crate::protocol::clock::DurationSinceUnixEpoch; use crate::protocol::info_hash::InfoHash; use crate::tracker::auth::{self, Key}; diff --git a/src/tracker/mod.rs b/src/tracker/mod.rs index 71bb41f90..9ed28b684 100644 --- a/src/tracker/mod.rs +++ b/src/tracker/mod.rs @@ -1,4 +1,5 @@ pub mod auth; +pub mod databases; pub mod error; pub mod peer; pub mod services; @@ -21,8 +22,8 @@ use self::auth::Key; use self::error::Error; use self::peer::Peer; use self::torrent::{SwarmMetadata, SwarmStats}; -use crate::databases::{self, Database}; use crate::protocol::info_hash::InfoHash; +use crate::tracker::databases::Database; pub struct Tracker { pub config: Arc, From 06ea911ef3a5da68d7d53624eb6b83b54ad5ab49 Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Fri, 17 Mar 2023 08:48:01 +0000 Subject: [PATCH 03/12] refactor: move signals to servers mod --- src/lib.rs | 1 - src/servers/apis/server.rs | 2 +- src/servers/http/server.rs | 2 +- src/servers/mod.rs | 1 + src/{ => servers}/signals.rs | 0 src/servers/udp/server.rs | 2 +- 6 files changed, 4 insertions(+), 4 deletions(-) rename src/{ => servers}/signals.rs (100%) diff --git a/src/lib.rs b/src/lib.rs index 442b687fa..1eb54edbd 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,7 +3,6 @@ pub mod logging; pub mod protocol; pub mod servers; pub mod setup; -pub mod signals; pub mod stats; pub mod tracker; diff --git a/src/servers/apis/server.rs b/src/servers/apis/server.rs index 002babbfb..e4714cd9a 100644 --- a/src/servers/apis/server.rs +++ b/src/servers/apis/server.rs @@ -9,7 +9,7 @@ use futures::Future; use log::info; use super::routes::router; -use crate::signals::shutdown_signal; +use crate::servers::signals::shutdown_signal; use crate::tracker::Tracker; #[derive(Debug)] diff --git a/src/servers/http/server.rs b/src/servers/http/server.rs index 98160777c..510c685d4 100644 --- a/src/servers/http/server.rs +++ b/src/servers/http/server.rs @@ -4,7 +4,7 @@ use std::sync::Arc; use futures::future::BoxFuture; -use crate::signals::shutdown_signal; +use crate::servers::signals::shutdown_signal; use crate::tracker::Tracker; /// Trait to be implemented by a http server launcher for the tracker. diff --git a/src/servers/mod.rs b/src/servers/mod.rs index 17005b56d..a71b3f029 100644 --- a/src/servers/mod.rs +++ b/src/servers/mod.rs @@ -1,3 +1,4 @@ pub mod apis; pub mod http; +pub mod signals; pub mod udp; diff --git a/src/signals.rs b/src/servers/signals.rs similarity index 100% rename from src/signals.rs rename to src/servers/signals.rs diff --git a/src/servers/udp/server.rs b/src/servers/udp/server.rs index f44f37f5f..9eb9836fe 100644 --- a/src/servers/udp/server.rs +++ b/src/servers/udp/server.rs @@ -9,9 +9,9 @@ use log::{debug, error, info}; use tokio::net::UdpSocket; use tokio::task::JoinHandle; +use crate::servers::signals::shutdown_signal; use crate::servers::udp::handlers::handle_packet; use crate::servers::udp::MAX_PACKET_SIZE; -use crate::signals::shutdown_signal; use crate::tracker::Tracker; #[derive(Debug)] From 5dab523174894e195e6e3905e0f2ed818baf952a Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Fri, 17 Mar 2023 09:40:48 +0000 Subject: [PATCH 04/12] refactor: extract bootstrap mod --- src/{ => bootstrap}/jobs/http_tracker.rs | 0 src/{setup.rs => bootstrap/jobs/mod.rs} | 6 +++++- src/{ => bootstrap}/jobs/torrent_cleanup.rs | 0 src/{ => bootstrap}/jobs/tracker_apis.rs | 0 src/{ => bootstrap}/jobs/udp_tracker.rs | 0 src/{ => bootstrap}/logging.rs | 0 src/bootstrap/mod.rs | 3 +++ src/{ => bootstrap}/stats.rs | 8 ++++---- src/jobs/mod.rs | 4 ---- src/lib.rs | 5 +---- src/main.rs | 10 +++++----- tests/common/tracker.rs | 4 ++-- 12 files changed, 20 insertions(+), 20 deletions(-) rename src/{ => bootstrap}/jobs/http_tracker.rs (100%) rename src/{setup.rs => bootstrap/jobs/mod.rs} (95%) rename src/{ => bootstrap}/jobs/torrent_cleanup.rs (100%) rename src/{ => bootstrap}/jobs/tracker_apis.rs (100%) rename src/{ => bootstrap}/jobs/udp_tracker.rs (100%) rename src/{ => bootstrap}/logging.rs (100%) create mode 100644 src/bootstrap/mod.rs rename src/{ => bootstrap}/stats.rs (66%) delete mode 100644 src/jobs/mod.rs diff --git a/src/jobs/http_tracker.rs b/src/bootstrap/jobs/http_tracker.rs similarity index 100% rename from src/jobs/http_tracker.rs rename to src/bootstrap/jobs/http_tracker.rs diff --git a/src/setup.rs b/src/bootstrap/jobs/mod.rs similarity index 95% rename from src/setup.rs rename to src/bootstrap/jobs/mod.rs index c8e5e4113..cbe3f509c 100644 --- a/src/setup.rs +++ b/src/bootstrap/jobs/mod.rs @@ -1,10 +1,14 @@ +pub mod http_tracker; +pub mod torrent_cleanup; +pub mod tracker_apis; +pub mod udp_tracker; + use std::sync::Arc; use log::warn; use tokio::task::JoinHandle; use torrust_tracker_configuration::Configuration; -use crate::jobs::{http_tracker, torrent_cleanup, tracker_apis, udp_tracker}; use crate::servers::http::Version; use crate::tracker; diff --git a/src/jobs/torrent_cleanup.rs b/src/bootstrap/jobs/torrent_cleanup.rs similarity index 100% rename from src/jobs/torrent_cleanup.rs rename to src/bootstrap/jobs/torrent_cleanup.rs diff --git a/src/jobs/tracker_apis.rs b/src/bootstrap/jobs/tracker_apis.rs similarity index 100% rename from src/jobs/tracker_apis.rs rename to src/bootstrap/jobs/tracker_apis.rs diff --git a/src/jobs/udp_tracker.rs b/src/bootstrap/jobs/udp_tracker.rs similarity index 100% rename from src/jobs/udp_tracker.rs rename to src/bootstrap/jobs/udp_tracker.rs diff --git a/src/logging.rs b/src/bootstrap/logging.rs similarity index 100% rename from src/logging.rs rename to src/bootstrap/logging.rs diff --git a/src/bootstrap/mod.rs b/src/bootstrap/mod.rs new file mode 100644 index 000000000..fd51d9b90 --- /dev/null +++ b/src/bootstrap/mod.rs @@ -0,0 +1,3 @@ +pub mod jobs; +pub mod logging; +pub mod stats; diff --git a/src/stats.rs b/src/bootstrap/stats.rs similarity index 66% rename from src/stats.rs rename to src/bootstrap/stats.rs index 8f87c01a3..3b109f297 100644 --- a/src/stats.rs +++ b/src/bootstrap/stats.rs @@ -1,7 +1,7 @@ use crate::tracker::statistics; #[must_use] -pub fn setup_statistics(tracker_usage_statistics: bool) -> (Option>, statistics::Repo) { +pub fn setup(tracker_usage_statistics: bool) -> (Option>, statistics::Repo) { let mut stats_event_sender = None; let mut stats_tracker = statistics::Keeper::new(); @@ -15,13 +15,13 @@ pub fn setup_statistics(tracker_usage_statistics: bool) -> (Option Date: Fri, 17 Mar 2023 10:18:35 +0000 Subject: [PATCH 05/12] refactor: extract app setup and app start mods --- src/app.rs | 68 +++++++++++++++++++++++++++ src/bootstrap/app.rs | 49 +++++++++++++++++++ src/bootstrap/jobs/mod.rs | 68 --------------------------- src/bootstrap/jobs/torrent_cleanup.rs | 2 +- src/bootstrap/mod.rs | 1 + src/lib.rs | 1 + src/main.rs | 44 ++--------------- 7 files changed, 124 insertions(+), 109 deletions(-) create mode 100644 src/app.rs create mode 100644 src/bootstrap/app.rs diff --git a/src/app.rs b/src/app.rs new file mode 100644 index 000000000..5f75449ca --- /dev/null +++ b/src/app.rs @@ -0,0 +1,68 @@ +use std::sync::Arc; + +use log::warn; +use tokio::task::JoinHandle; +use torrust_tracker_configuration::Configuration; + +use crate::bootstrap::jobs::{http_tracker, torrent_cleanup, tracker_apis, udp_tracker}; +use crate::servers::http::Version; +use crate::tracker; + +/// # Panics +/// +/// Will panic if the socket address for API can't be parsed. +pub async fn start(config: Arc, tracker: Arc) -> Vec> { + let mut jobs: Vec> = Vec::new(); + + // Load peer keys + if tracker.is_private() { + tracker + .load_keys_from_database() + .await + .expect("Could not retrieve keys from database."); + } + + // Load whitelisted torrents + if tracker.is_whitelisted() { + tracker + .load_whitelist_from_database() + .await + .expect("Could not load whitelist from database."); + } + + // Start the UDP blocks + for udp_tracker_config in &config.udp_trackers { + if !udp_tracker_config.enabled { + continue; + } + + if tracker.is_private() { + warn!( + "Could not start UDP tracker on: {} while in {:?}. UDP is not safe for private trackers!", + udp_tracker_config.bind_address, config.mode + ); + } else { + jobs.push(udp_tracker::start_job(udp_tracker_config, tracker.clone())); + } + } + + // Start the HTTP blocks + for http_tracker_config in &config.http_trackers { + if !http_tracker_config.enabled { + continue; + } + jobs.push(http_tracker::start_job(http_tracker_config, tracker.clone(), Version::V1).await); + } + + // Start HTTP API + if config.http_api.enabled { + jobs.push(tracker_apis::start_job(&config.http_api, tracker.clone()).await); + } + + // Remove torrents without peers, every interval + if config.inactive_peer_cleanup_interval > 0 { + jobs.push(torrent_cleanup::start_job(&config, &tracker)); + } + + jobs +} diff --git a/src/bootstrap/app.rs b/src/bootstrap/app.rs new file mode 100644 index 000000000..557203b0e --- /dev/null +++ b/src/bootstrap/app.rs @@ -0,0 +1,49 @@ +use std::env; +use std::sync::Arc; + +use torrust_tracker_configuration::Configuration; + +use crate::bootstrap::stats; +use crate::tracker::Tracker; +use crate::{bootstrap, ephemeral_instance_keys, static_time, tracker}; + +/// # Panics +/// +/// Will panic if it can't load the configuration from either +/// `./config.toml` file or env var `TORRUST_TRACKER_CONFIG`. +#[must_use] +pub fn setup() -> (Arc, Arc) { + const CONFIG_PATH: &str = "./config.toml"; + const CONFIG_ENV_VAR_NAME: &str = "TORRUST_TRACKER_CONFIG"; + + // Set the time of Torrust app starting + lazy_static::initialize(&static_time::TIME_AT_APP_START); + + // Initialize the Ephemeral Instance Random Seed + lazy_static::initialize(&ephemeral_instance_keys::RANDOM_SEED); + + // Initialize Torrust config + let config = if env::var(CONFIG_ENV_VAR_NAME).is_ok() { + println!("Loading configuration from env var {CONFIG_ENV_VAR_NAME}"); + Arc::new(Configuration::load_from_env_var(CONFIG_ENV_VAR_NAME).unwrap()) + } else { + println!("Loading configuration from config file {CONFIG_PATH}"); + Arc::new(Configuration::load_from_file(CONFIG_PATH).unwrap()) + }; + + // Initialize statistics + let (stats_event_sender, stats_repository) = stats::setup(config.tracker_usage_statistics); + + // Initialize Torrust tracker + let tracker = match tracker::Tracker::new(config.clone(), stats_event_sender, stats_repository) { + Ok(tracker) => Arc::new(tracker), + Err(error) => { + panic!("{}", error) + } + }; + + // Initialize logging + bootstrap::logging::setup(&config); + + (config, tracker) +} diff --git a/src/bootstrap/jobs/mod.rs b/src/bootstrap/jobs/mod.rs index cbe3f509c..ba44a56ad 100644 --- a/src/bootstrap/jobs/mod.rs +++ b/src/bootstrap/jobs/mod.rs @@ -2,71 +2,3 @@ pub mod http_tracker; pub mod torrent_cleanup; pub mod tracker_apis; pub mod udp_tracker; - -use std::sync::Arc; - -use log::warn; -use tokio::task::JoinHandle; -use torrust_tracker_configuration::Configuration; - -use crate::servers::http::Version; -use crate::tracker; - -/// # Panics -/// -/// Will panic if the socket address for API can't be parsed. -pub async fn setup(config: &Configuration, tracker: Arc) -> Vec> { - let mut jobs: Vec> = Vec::new(); - - // Load peer keys - if tracker.is_private() { - tracker - .load_keys_from_database() - .await - .expect("Could not retrieve keys from database."); - } - - // Load whitelisted torrents - if tracker.is_whitelisted() { - tracker - .load_whitelist_from_database() - .await - .expect("Could not load whitelist from database."); - } - - // Start the UDP blocks - for udp_tracker_config in &config.udp_trackers { - if !udp_tracker_config.enabled { - continue; - } - - if tracker.is_private() { - warn!( - "Could not start UDP tracker on: {} while in {:?}. UDP is not safe for private trackers!", - udp_tracker_config.bind_address, config.mode - ); - } else { - jobs.push(udp_tracker::start_job(udp_tracker_config, tracker.clone())); - } - } - - // Start the HTTP blocks - for http_tracker_config in &config.http_trackers { - if !http_tracker_config.enabled { - continue; - } - jobs.push(http_tracker::start_job(http_tracker_config, tracker.clone(), Version::V1).await); - } - - // Start HTTP API - if config.http_api.enabled { - jobs.push(tracker_apis::start_job(&config.http_api, tracker.clone()).await); - } - - // Remove torrents without peers, every interval - if config.inactive_peer_cleanup_interval > 0 { - jobs.push(torrent_cleanup::start_job(config, &tracker)); - } - - jobs -} diff --git a/src/bootstrap/jobs/torrent_cleanup.rs b/src/bootstrap/jobs/torrent_cleanup.rs index 4c4ed1f53..64240bffe 100644 --- a/src/bootstrap/jobs/torrent_cleanup.rs +++ b/src/bootstrap/jobs/torrent_cleanup.rs @@ -8,7 +8,7 @@ use torrust_tracker_configuration::Configuration; use crate::tracker; #[must_use] -pub fn start_job(config: &Configuration, tracker: &Arc) -> JoinHandle<()> { +pub fn start_job(config: &Arc, tracker: &Arc) -> JoinHandle<()> { let weak_tracker = std::sync::Arc::downgrade(tracker); let interval = config.inactive_peer_cleanup_interval; diff --git a/src/bootstrap/mod.rs b/src/bootstrap/mod.rs index fd51d9b90..b4ee0558e 100644 --- a/src/bootstrap/mod.rs +++ b/src/bootstrap/mod.rs @@ -1,3 +1,4 @@ +pub mod app; pub mod jobs; pub mod logging; pub mod stats; diff --git a/src/lib.rs b/src/lib.rs index 5cf4ab8eb..70f0c4a4f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,4 @@ +pub mod app; pub mod bootstrap; pub mod protocol; pub mod servers; diff --git a/src/main.rs b/src/main.rs index f8f218fca..87c0fc367 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,49 +1,13 @@ -use std::env; -use std::sync::Arc; - use log::info; -use torrust_tracker::bootstrap::stats::setup; -use torrust_tracker::{bootstrap, ephemeral_instance_keys, static_time, tracker}; -use torrust_tracker_configuration::Configuration; +use torrust_tracker::{app, bootstrap}; #[tokio::main] async fn main() { - const CONFIG_PATH: &str = "./config.toml"; - const CONFIG_ENV_VAR_NAME: &str = "TORRUST_TRACKER_CONFIG"; - - // Set the time of Torrust app starting - lazy_static::initialize(&static_time::TIME_AT_APP_START); - - // Initialize the Ephemeral Instance Random Seed - lazy_static::initialize(&ephemeral_instance_keys::RANDOM_SEED); - - // Initialize Torrust config - let config = if env::var(CONFIG_ENV_VAR_NAME).is_ok() { - println!("Loading configuration from env var {CONFIG_ENV_VAR_NAME}"); - Arc::new(Configuration::load_from_env_var(CONFIG_ENV_VAR_NAME).unwrap()) - } else { - println!("Loading configuration from config file {CONFIG_PATH}"); - Arc::new(Configuration::load_from_file(CONFIG_PATH).unwrap()) - }; - - // Initialize statistics - let (stats_event_sender, stats_repository) = setup(config.tracker_usage_statistics); - - // Initialize Torrust tracker - let tracker = match tracker::Tracker::new(config.clone(), stats_event_sender, stats_repository) { - Ok(tracker) => Arc::new(tracker), - Err(error) => { - panic!("{}", error) - } - }; - - // Initialize logging - bootstrap::logging::setup(&config); + let (config, tracker) = bootstrap::app::setup(); - // Run jobs - let jobs = bootstrap::jobs::setup(&config, tracker.clone()).await; + let jobs = app::start(config.clone(), tracker.clone()).await; - // handle the signals here + // handle the signals tokio::select! { _ = tokio::signal::ctrl_c() => { info!("Torrust shutting down.."); From 9ffcd6bec0c111c896bb4ab3280c71df7b2d7190 Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Fri, 17 Mar 2023 11:21:49 +0000 Subject: [PATCH 06/12] refactor: rename mod and extract bit_torrent mod `protocol` nod contains logic not only for BitTorrent protocol. --- src/lib.rs | 2 +- src/protocol/mod.rs | 5 ----- src/servers/apis/v1/context/auth_key/resources.rs | 4 ++-- src/servers/apis/v1/context/torrent/handlers.rs | 2 +- .../apis/v1/context/torrent/resources/torrent.rs | 4 ++-- src/servers/apis/v1/context/whitelist/handlers.rs | 2 +- src/servers/http/percent_encoding.rs | 4 ++-- .../http/v1/extractors/announce_request.rs | 2 +- src/servers/http/v1/extractors/scrape_request.rs | 2 +- src/servers/http/v1/handlers/announce.rs | 4 ++-- src/servers/http/v1/handlers/scrape.rs | 2 +- src/servers/http/v1/requests/announce.rs | 4 ++-- src/servers/http/v1/requests/scrape.rs | 4 ++-- src/servers/http/v1/responses/scrape.rs | 2 +- src/servers/http/v1/services/announce.rs | 6 +++--- src/servers/http/v1/services/scrape.rs | 6 +++--- src/servers/udp/connection_cookie.rs | 10 +++++----- src/servers/udp/handlers.rs | 6 +++--- src/servers/udp/peer_builder.rs | 2 +- src/servers/udp/request.rs | 2 +- src/{protocol => shared/bit_torrent}/common.rs | 0 src/{protocol => shared/bit_torrent}/info_hash.rs | 0 src/shared/bit_torrent/mod.rs | 2 ++ src/{protocol => shared}/clock/mod.rs | 15 ++++++++------- src/{protocol => shared}/clock/time_extent.rs | 4 ++-- src/{protocol => shared/clock}/utils.rs | 2 +- src/{protocol => shared}/crypto.rs | 4 ++-- src/shared/mod.rs | 3 +++ src/tracker/auth.rs | 6 +++--- src/tracker/databases/mod.rs | 2 +- src/tracker/databases/mysql.rs | 4 ++-- src/tracker/databases/sqlite.rs | 4 ++-- src/tracker/error.rs | 2 +- src/tracker/mod.rs | 10 +++++----- src/tracker/peer.rs | 10 ++++------ src/tracker/services/torrent.rs | 8 ++++---- src/tracker/torrent.rs | 6 +++--- tests/common/fixtures.rs | 2 +- tests/servers/api/test_environment.rs | 2 +- tests/servers/api/v1/contract/context/stats.rs | 2 +- tests/servers/api/v1/contract/context/torrent.rs | 2 +- .../servers/api/v1/contract/context/whitelist.rs | 2 +- tests/servers/http/requests/announce.rs | 2 +- tests/servers/http/requests/scrape.rs | 2 +- tests/servers/http/test_environment.rs | 2 +- tests/servers/http/v1/contract.rs | 12 ++++++------ tests/servers/udp/test_environment.rs | 2 +- 47 files changed, 93 insertions(+), 94 deletions(-) delete mode 100644 src/protocol/mod.rs rename src/{protocol => shared/bit_torrent}/common.rs (100%) rename src/{protocol => shared/bit_torrent}/info_hash.rs (100%) create mode 100644 src/shared/bit_torrent/mod.rs rename src/{protocol => shared}/clock/mod.rs (96%) rename src/{protocol => shared}/clock/time_extent.rs (99%) rename src/{protocol => shared/clock}/utils.rs (89%) rename src/{protocol => shared}/crypto.rs (94%) create mode 100644 src/shared/mod.rs diff --git a/src/lib.rs b/src/lib.rs index 70f0c4a4f..cf4439c3e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,7 +1,7 @@ pub mod app; pub mod bootstrap; -pub mod protocol; pub mod servers; +pub mod shared; pub mod tracker; #[macro_use] diff --git a/src/protocol/mod.rs b/src/protocol/mod.rs deleted file mode 100644 index bd4310dcf..000000000 --- a/src/protocol/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -pub mod clock; -pub mod common; -pub mod crypto; -pub mod info_hash; -pub mod utils; diff --git a/src/servers/apis/v1/context/auth_key/resources.rs b/src/servers/apis/v1/context/auth_key/resources.rs index cf43a6f3d..400b34eb7 100644 --- a/src/servers/apis/v1/context/auth_key/resources.rs +++ b/src/servers/apis/v1/context/auth_key/resources.rs @@ -2,7 +2,7 @@ use std::convert::From; use serde::{Deserialize, Serialize}; -use crate::protocol::clock::convert_from_iso_8601_to_timestamp; +use crate::shared::clock::convert_from_iso_8601_to_timestamp; use crate::tracker::auth::{self, Key}; #[derive(Serialize, Deserialize, Debug, PartialEq, Eq)] @@ -36,7 +36,7 @@ mod tests { use std::time::Duration; use super::AuthKey; - use crate::protocol::clock::{Current, TimeNow}; + use crate::shared::clock::{Current, TimeNow}; use crate::tracker::auth::{self, Key}; struct TestTime { diff --git a/src/servers/apis/v1/context/torrent/handlers.rs b/src/servers/apis/v1/context/torrent/handlers.rs index 45ffbcf22..4032f2e9a 100644 --- a/src/servers/apis/v1/context/torrent/handlers.rs +++ b/src/servers/apis/v1/context/torrent/handlers.rs @@ -8,9 +8,9 @@ use serde::{de, Deserialize, Deserializer}; use super::resources::torrent::ListItem; use super::responses::{torrent_info_response, torrent_list_response, torrent_not_known_response}; -use crate::protocol::info_hash::InfoHash; use crate::servers::apis::v1::responses::invalid_info_hash_param_response; use crate::servers::apis::InfoHashParam; +use crate::shared::bit_torrent::info_hash::InfoHash; use crate::tracker::services::torrent::{get_torrent_info, get_torrents, Pagination}; use crate::tracker::Tracker; diff --git a/src/servers/apis/v1/context/torrent/resources/torrent.rs b/src/servers/apis/v1/context/torrent/resources/torrent.rs index 577ac279c..e328f80c4 100644 --- a/src/servers/apis/v1/context/torrent/resources/torrent.rs +++ b/src/servers/apis/v1/context/torrent/resources/torrent.rs @@ -75,10 +75,10 @@ mod tests { use aquatic_udp_protocol::{AnnounceEvent, NumberOfBytes}; use super::Torrent; - use crate::protocol::clock::DurationSinceUnixEpoch; - use crate::protocol::info_hash::InfoHash; use crate::servers::apis::v1::context::torrent::resources::peer::Peer; use crate::servers::apis::v1::context::torrent::resources::torrent::ListItem; + use crate::shared::bit_torrent::info_hash::InfoHash; + use crate::shared::clock::DurationSinceUnixEpoch; use crate::tracker::peer; use crate::tracker::services::torrent::{BasicInfo, Info}; diff --git a/src/servers/apis/v1/context/whitelist/handlers.rs b/src/servers/apis/v1/context/whitelist/handlers.rs index 2ca70cba7..25e285c0b 100644 --- a/src/servers/apis/v1/context/whitelist/handlers.rs +++ b/src/servers/apis/v1/context/whitelist/handlers.rs @@ -7,9 +7,9 @@ use axum::response::Response; use super::responses::{ failed_to_reload_whitelist_response, failed_to_remove_torrent_from_whitelist_response, failed_to_whitelist_torrent_response, }; -use crate::protocol::info_hash::InfoHash; use crate::servers::apis::v1::responses::{invalid_info_hash_param_response, ok_response}; use crate::servers::apis::InfoHashParam; +use crate::shared::bit_torrent::info_hash::InfoHash; use crate::tracker::Tracker; pub async fn add_torrent_to_whitelist_handler( diff --git a/src/servers/http/percent_encoding.rs b/src/servers/http/percent_encoding.rs index c824c8df7..019735e0f 100644 --- a/src/servers/http/percent_encoding.rs +++ b/src/servers/http/percent_encoding.rs @@ -1,4 +1,4 @@ -use crate::protocol::info_hash::{ConversionError, InfoHash}; +use crate::shared::bit_torrent::info_hash::{ConversionError, InfoHash}; use crate::tracker::peer::{self, IdConversionError}; /// # Errors @@ -21,8 +21,8 @@ pub fn percent_decode_peer_id(raw_peer_id: &str) -> Result, info_hashes: &Vec, original_peer_ip: &IpAddr) -> ScrapeData { @@ -39,8 +39,8 @@ mod tests { use aquatic_udp_protocol::{AnnounceEvent, NumberOfBytes}; use torrust_tracker_test_helpers::configuration; - use crate::protocol::clock::DurationSinceUnixEpoch; - use crate::protocol::info_hash::InfoHash; + use crate::shared::bit_torrent::info_hash::InfoHash; + use crate::shared::clock::DurationSinceUnixEpoch; use crate::tracker::services::common::tracker_factory; use crate::tracker::{peer, Tracker}; diff --git a/src/servers/udp/connection_cookie.rs b/src/servers/udp/connection_cookie.rs index a55d40801..4a75145c1 100644 --- a/src/servers/udp/connection_cookie.rs +++ b/src/servers/udp/connection_cookie.rs @@ -4,7 +4,7 @@ use std::panic::Location; use aquatic_udp_protocol::ConnectionId; use super::error::Error; -use crate::protocol::clock::time_extent::{Extent, TimeExtent}; +use crate::shared::clock::time_extent::{Extent, TimeExtent}; pub type Cookie = [u8; 8]; @@ -61,8 +61,8 @@ mod cookie_builder { use std::net::SocketAddr; use super::{Cookie, SinceUnixEpochTimeExtent, COOKIE_LIFETIME}; - use crate::protocol::clock::time_extent::{DefaultTimeExtentMaker, Extent, Make, TimeExtent}; - use crate::protocol::crypto::keys::seeds::{Current, Keeper}; + use crate::shared::clock::time_extent::{DefaultTimeExtentMaker, Extent, Make, TimeExtent}; + use crate::shared::crypto::keys::seeds::{Current, Keeper}; pub(super) fn get_last_time_extent() -> SinceUnixEpochTimeExtent { DefaultTimeExtentMaker::now(&COOKIE_LIFETIME.increment) @@ -90,9 +90,9 @@ mod tests { use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr}; use super::cookie_builder::{self}; - use crate::protocol::clock::time_extent::{self, Extent}; - use crate::protocol::clock::{Stopped, StoppedTime}; use crate::servers::udp::connection_cookie::{check, make, Cookie, COOKIE_LIFETIME}; + use crate::shared::clock::time_extent::{self, Extent}; + use crate::shared::clock::{Stopped, StoppedTime}; // #![feature(const_socketaddr)] // const REMOTE_ADDRESS_IPV4_ZERO: SocketAddr = SocketAddr::new(IpAddr::V4(Ipv4Addr::UNSPECIFIED), 0); diff --git a/src/servers/udp/handlers.rs b/src/servers/udp/handlers.rs index 1544e13cc..7eb971d05 100644 --- a/src/servers/udp/handlers.rs +++ b/src/servers/udp/handlers.rs @@ -9,11 +9,11 @@ use aquatic_udp_protocol::{ use log::debug; use super::connection_cookie::{check, from_connection_id, into_connection_id, make}; -use crate::protocol::common::MAX_SCRAPE_TORRENTS; -use crate::protocol::info_hash::InfoHash; use crate::servers::udp::error::Error; use crate::servers::udp::peer_builder; use crate::servers::udp::request::AnnounceWrapper; +use crate::shared::bit_torrent::common::MAX_SCRAPE_TORRENTS; +use crate::shared::bit_torrent::info_hash::InfoHash; use crate::tracker::{statistics, Tracker}; pub async fn handle_packet(remote_addr: SocketAddr, payload: Vec, tracker: &Tracker) -> Response { @@ -241,7 +241,7 @@ mod tests { use torrust_tracker_configuration::Configuration; use torrust_tracker_test_helpers::configuration; - use crate::protocol::clock::{Current, Time}; + use crate::shared::clock::{Current, Time}; use crate::tracker::services::common::tracker_factory; use crate::tracker::{self, peer}; diff --git a/src/servers/udp/peer_builder.rs b/src/servers/udp/peer_builder.rs index 84eae64f9..8d8852dc7 100644 --- a/src/servers/udp/peer_builder.rs +++ b/src/servers/udp/peer_builder.rs @@ -1,7 +1,7 @@ use std::net::{IpAddr, SocketAddr}; use super::request::AnnounceWrapper; -use crate::protocol::clock::{Current, Time}; +use crate::shared::clock::{Current, Time}; use crate::tracker::peer::{Id, Peer}; #[must_use] diff --git a/src/servers/udp/request.rs b/src/servers/udp/request.rs index 28d75f860..4be99e6d0 100644 --- a/src/servers/udp/request.rs +++ b/src/servers/udp/request.rs @@ -1,6 +1,6 @@ use aquatic_udp_protocol::AnnounceRequest; -use crate::protocol::info_hash::InfoHash; +use crate::shared::bit_torrent::info_hash::InfoHash; pub struct AnnounceWrapper { pub announce_request: AnnounceRequest, diff --git a/src/protocol/common.rs b/src/shared/bit_torrent/common.rs similarity index 100% rename from src/protocol/common.rs rename to src/shared/bit_torrent/common.rs diff --git a/src/protocol/info_hash.rs b/src/shared/bit_torrent/info_hash.rs similarity index 100% rename from src/protocol/info_hash.rs rename to src/shared/bit_torrent/info_hash.rs diff --git a/src/shared/bit_torrent/mod.rs b/src/shared/bit_torrent/mod.rs new file mode 100644 index 000000000..7579a0780 --- /dev/null +++ b/src/shared/bit_torrent/mod.rs @@ -0,0 +1,2 @@ +pub mod common; +pub mod info_hash; diff --git a/src/protocol/clock/mod.rs b/src/shared/clock/mod.rs similarity index 96% rename from src/protocol/clock/mod.rs rename to src/shared/clock/mod.rs index 73df37b58..399fb6b9b 100644 --- a/src/protocol/clock/mod.rs +++ b/src/shared/clock/mod.rs @@ -1,3 +1,6 @@ +pub mod time_extent; +pub mod utils; + use std::num::IntErrorKind; use std::str::FromStr; use std::time::Duration; @@ -77,7 +80,7 @@ pub fn convert_from_timestamp_to_datetime_utc(duration: DurationSinceUnixEpoch) mod tests { use std::any::TypeId; - use crate::protocol::clock::{Current, Stopped, Time, Working}; + use crate::shared::clock::{Current, Stopped, Time, Working}; #[test] fn it_should_be_the_stopped_clock_as_default_when_testing() { @@ -95,7 +98,7 @@ mod tests { mod timestamp { use chrono::{DateTime, NaiveDateTime, Utc}; - use crate::protocol::clock::{ + use crate::shared::clock::{ convert_from_datetime_utc_to_timestamp, convert_from_iso_8601_to_timestamp, convert_from_timestamp_to_datetime_utc, DurationSinceUnixEpoch, }; @@ -227,7 +230,7 @@ mod stopped_clock { use std::thread; use std::time::Duration; - use crate::protocol::clock::{DurationSinceUnixEpoch, Stopped, StoppedTime, Time, TimeNow, Working}; + use crate::shared::clock::{DurationSinceUnixEpoch, Stopped, StoppedTime, Time, TimeNow, Working}; #[test] fn it_should_default_to_zero_when_testing() { @@ -286,7 +289,7 @@ mod stopped_clock { use std::cell::RefCell; use std::time::SystemTime; - use crate::protocol::clock::DurationSinceUnixEpoch; + use crate::shared::clock::DurationSinceUnixEpoch; use crate::static_time; pub fn get_app_start_time() -> DurationSinceUnixEpoch { @@ -311,7 +314,7 @@ mod stopped_clock { mod tests { use std::time::Duration; - use crate::protocol::clock::stopped_clock::detail::{get_app_start_time, get_default_fixed_time}; + use crate::shared::clock::stopped_clock::detail::{get_app_start_time, get_default_fixed_time}; #[test] fn it_should_get_the_zero_start_time_when_testing() { @@ -326,5 +329,3 @@ mod stopped_clock { } } } - -pub mod time_extent; diff --git a/src/protocol/clock/time_extent.rs b/src/shared/clock/time_extent.rs similarity index 99% rename from src/protocol/clock/time_extent.rs rename to src/shared/clock/time_extent.rs index b4c20cd70..64142c404 100644 --- a/src/protocol/clock/time_extent.rs +++ b/src/shared/clock/time_extent.rs @@ -176,10 +176,10 @@ pub type DefaultTimeExtentMaker = StoppedTimeExtentMaker; #[cfg(test)] mod test { - use crate::protocol::clock::time_extent::{ + use crate::shared::clock::time_extent::{ checked_duration_from_nanos, Base, DefaultTimeExtentMaker, Extent, Make, Multiplier, Product, TimeExtent, MAX, ZERO, }; - use crate::protocol::clock::{Current, DurationSinceUnixEpoch, StoppedTime}; + use crate::shared::clock::{Current, DurationSinceUnixEpoch, StoppedTime}; const TIME_EXTENT_VAL: TimeExtent = TimeExtent::from_sec(2, &239_812_388_723); diff --git a/src/protocol/utils.rs b/src/shared/clock/utils.rs similarity index 89% rename from src/protocol/utils.rs rename to src/shared/clock/utils.rs index cec02ceaf..9127f97b1 100644 --- a/src/protocol/utils.rs +++ b/src/shared/clock/utils.rs @@ -1,4 +1,4 @@ -use super::clock::DurationSinceUnixEpoch; +use super::DurationSinceUnixEpoch; /// # Errors /// diff --git a/src/protocol/crypto.rs b/src/shared/crypto.rs similarity index 94% rename from src/protocol/crypto.rs rename to src/shared/crypto.rs index a335e2dba..848dcd36b 100644 --- a/src/protocol/crypto.rs +++ b/src/shared/crypto.rs @@ -74,8 +74,8 @@ pub mod keys { use std::convert::TryInto; use crate::ephemeral_instance_keys::RANDOM_SEED; - use crate::protocol::crypto::keys::seeds::detail::ZEROED_TEST_SEED; - use crate::protocol::crypto::keys::seeds::CURRENT_SEED; + use crate::shared::crypto::keys::seeds::detail::ZEROED_TEST_SEED; + use crate::shared::crypto::keys::seeds::CURRENT_SEED; #[test] fn it_should_have_a_zero_test_seed() { diff --git a/src/shared/mod.rs b/src/shared/mod.rs new file mode 100644 index 000000000..4b0d9138e --- /dev/null +++ b/src/shared/mod.rs @@ -0,0 +1,3 @@ +pub mod bit_torrent; +pub mod clock; +pub mod crypto; diff --git a/src/tracker/auth.rs b/src/tracker/auth.rs index 75bc543a8..31e1f50e4 100644 --- a/src/tracker/auth.rs +++ b/src/tracker/auth.rs @@ -11,8 +11,8 @@ use serde::{Deserialize, Serialize}; use thiserror::Error; use torrust_tracker_located_error::LocatedError; -use crate::protocol::clock::{convert_from_timestamp_to_datetime_utc, Current, DurationSinceUnixEpoch, Time, TimeNow}; -use crate::protocol::common::AUTH_KEY_LENGTH; +use crate::shared::bit_torrent::common::AUTH_KEY_LENGTH; +use crate::shared::clock::{convert_from_timestamp_to_datetime_utc, Current, DurationSinceUnixEpoch, Time, TimeNow}; #[must_use] /// # Panics @@ -146,7 +146,7 @@ mod tests { use std::str::FromStr; use std::time::Duration; - use crate::protocol::clock::{Current, StoppedTime}; + use crate::shared::clock::{Current, StoppedTime}; use crate::tracker::auth; #[test] diff --git a/src/tracker/databases/mod.rs b/src/tracker/databases/mod.rs index 0af6f5723..f68288bbe 100644 --- a/src/tracker/databases/mod.rs +++ b/src/tracker/databases/mod.rs @@ -8,7 +8,7 @@ use std::marker::PhantomData; use async_trait::async_trait; use self::error::Error; -use crate::protocol::info_hash::InfoHash; +use crate::shared::bit_torrent::info_hash::InfoHash; use crate::tracker::auth::{self, Key}; pub(self) struct Builder diff --git a/src/tracker/databases/mysql.rs b/src/tracker/databases/mysql.rs index ded9e1617..7e4aab99e 100644 --- a/src/tracker/databases/mysql.rs +++ b/src/tracker/databases/mysql.rs @@ -10,8 +10,8 @@ use r2d2_mysql::MySqlConnectionManager; use torrust_tracker_primitives::DatabaseDriver; use super::{Database, Error}; -use crate::protocol::common::AUTH_KEY_LENGTH; -use crate::protocol::info_hash::InfoHash; +use crate::shared::bit_torrent::common::AUTH_KEY_LENGTH; +use crate::shared::bit_torrent::info_hash::InfoHash; use crate::tracker::auth::{self, Key}; const DRIVER: DatabaseDriver = DatabaseDriver::MySQL; diff --git a/src/tracker/databases/sqlite.rs b/src/tracker/databases/sqlite.rs index e230ac18f..931289183 100644 --- a/src/tracker/databases/sqlite.rs +++ b/src/tracker/databases/sqlite.rs @@ -7,8 +7,8 @@ use r2d2_sqlite::SqliteConnectionManager; use torrust_tracker_primitives::DatabaseDriver; use super::{Database, Error}; -use crate::protocol::clock::DurationSinceUnixEpoch; -use crate::protocol::info_hash::InfoHash; +use crate::shared::bit_torrent::info_hash::InfoHash; +use crate::shared::clock::DurationSinceUnixEpoch; use crate::tracker::auth::{self, Key}; const DRIVER: DatabaseDriver = DatabaseDriver::Sqlite3; diff --git a/src/tracker/error.rs b/src/tracker/error.rs index 10ca5ec19..aaf755e0d 100644 --- a/src/tracker/error.rs +++ b/src/tracker/error.rs @@ -16,7 +16,7 @@ pub enum Error { // Authorization errors #[error("The torrent: {info_hash}, is not whitelisted, {location}")] TorrentNotWhitelisted { - info_hash: crate::protocol::info_hash::InfoHash, + info_hash: crate::shared::bit_torrent::info_hash::InfoHash, location: &'static Location<'static>, }, } diff --git a/src/tracker/mod.rs b/src/tracker/mod.rs index 9ed28b684..6b8c27076 100644 --- a/src/tracker/mod.rs +++ b/src/tracker/mod.rs @@ -22,7 +22,7 @@ use self::auth::Key; use self::error::Error; use self::peer::Peer; use self::torrent::{SwarmMetadata, SwarmStats}; -use crate::protocol::info_hash::InfoHash; +use crate::shared::bit_torrent::info_hash::InfoHash; use crate::tracker::databases::Database; pub struct Tracker { @@ -557,8 +557,8 @@ mod tests { use aquatic_udp_protocol::{AnnounceEvent, NumberOfBytes}; use torrust_tracker_test_helpers::configuration; - use crate::protocol::clock::DurationSinceUnixEpoch; - use crate::protocol::info_hash::InfoHash; + use crate::shared::bit_torrent::info_hash::InfoHash; + use crate::shared::clock::DurationSinceUnixEpoch; use crate::tracker::peer::{self, Peer}; use crate::tracker::services::common::tracker_factory; use crate::tracker::{TorrentsMetrics, Tracker}; @@ -911,7 +911,7 @@ mod tests { use std::net::{IpAddr, Ipv4Addr}; - use crate::protocol::info_hash::InfoHash; + use crate::shared::bit_torrent::info_hash::InfoHash; use crate::tracker::tests::the_tracker::{complete_peer, incomplete_peer, public_tracker}; use crate::tracker::{ScrapeData, SwarmMetadata}; @@ -1068,7 +1068,7 @@ mod tests { mod handling_an_scrape_request { - use crate::protocol::info_hash::InfoHash; + use crate::shared::bit_torrent::info_hash::InfoHash; use crate::tracker::tests::the_tracker::{ complete_peer, incomplete_peer, peer_ip, sample_info_hash, whitelisted_tracker, }; diff --git a/src/tracker/peer.rs b/src/tracker/peer.rs index 3012770bb..6a298c9df 100644 --- a/src/tracker/peer.rs +++ b/src/tracker/peer.rs @@ -6,9 +6,9 @@ use serde; use serde::Serialize; use thiserror::Error; -use crate::protocol::clock::DurationSinceUnixEpoch; -use crate::protocol::common::{AnnounceEventDef, NumberOfBytesDef}; -use crate::protocol::utils::ser_unix_time_value; +use crate::shared::bit_torrent::common::{AnnounceEventDef, NumberOfBytesDef}; +use crate::shared::clock::utils::ser_unix_time_value; +use crate::shared::clock::DurationSinceUnixEpoch; #[derive(PartialEq, Eq, Debug)] pub enum IPVersion { @@ -28,8 +28,6 @@ pub struct Peer { pub downloaded: NumberOfBytes, #[serde(with = "NumberOfBytesDef")] pub left: NumberOfBytes, // The number of bytes this peer still has to download - // code-review: aquatic_udp_protocol::request::AnnounceEvent is used also for the HTTP tracker. - // Maybe we should use our own enum and use the”is one only for the UDP tracker. #[serde(with = "AnnounceEventDef")] pub event: AnnounceEvent, } @@ -397,7 +395,7 @@ mod test { use aquatic_udp_protocol::{AnnounceEvent, NumberOfBytes}; use serde_json::Value; - use crate::protocol::clock::{Current, Time}; + use crate::shared::clock::{Current, Time}; use crate::tracker::peer::{self, Peer}; #[test] diff --git a/src/tracker/services/torrent.rs b/src/tracker/services/torrent.rs index b04b4e1dc..e9e254582 100644 --- a/src/tracker/services/torrent.rs +++ b/src/tracker/services/torrent.rs @@ -2,7 +2,7 @@ use std::sync::Arc; use serde::Deserialize; -use crate::protocol::info_hash::InfoHash; +use crate::shared::bit_torrent::info_hash::InfoHash; use crate::tracker::peer::Peer; use crate::tracker::Tracker; @@ -117,7 +117,7 @@ mod tests { use aquatic_udp_protocol::{AnnounceEvent, NumberOfBytes}; - use crate::protocol::clock::DurationSinceUnixEpoch; + use crate::shared::clock::DurationSinceUnixEpoch; use crate::tracker::peer; fn sample_peer() -> peer::Peer { @@ -140,7 +140,7 @@ mod tests { use torrust_tracker_configuration::Configuration; use torrust_tracker_test_helpers::configuration; - use crate::protocol::info_hash::InfoHash; + use crate::shared::bit_torrent::info_hash::InfoHash; use crate::tracker::services::common::tracker_factory; use crate::tracker::services::torrent::tests::sample_peer; use crate::tracker::services::torrent::{get_torrent_info, Info}; @@ -195,7 +195,7 @@ mod tests { use torrust_tracker_configuration::Configuration; use torrust_tracker_test_helpers::configuration; - use crate::protocol::info_hash::InfoHash; + use crate::shared::bit_torrent::info_hash::InfoHash; use crate::tracker::services::common::tracker_factory; use crate::tracker::services::torrent::tests::sample_peer; use crate::tracker::services::torrent::{get_torrents, BasicInfo, Pagination}; diff --git a/src/tracker/torrent.rs b/src/tracker/torrent.rs index 4a871aa89..882e52ff1 100644 --- a/src/tracker/torrent.rs +++ b/src/tracker/torrent.rs @@ -4,8 +4,8 @@ use aquatic_udp_protocol::AnnounceEvent; use serde::{Deserialize, Serialize}; use super::peer::{self, Peer}; -use crate::protocol::clock::{Current, TimeNow}; -use crate::protocol::common::MAX_SCRAPE_TORRENTS; +use crate::shared::bit_torrent::common::MAX_SCRAPE_TORRENTS; +use crate::shared::clock::{Current, TimeNow}; #[derive(Serialize, Deserialize, Clone, Debug)] pub struct Entry { @@ -134,7 +134,7 @@ mod tests { use aquatic_udp_protocol::{AnnounceEvent, NumberOfBytes}; - use crate::protocol::clock::{Current, DurationSinceUnixEpoch, Stopped, StoppedTime, Time, Working}; + use crate::shared::clock::{Current, DurationSinceUnixEpoch, Stopped, StoppedTime, Time, Working}; use crate::tracker::peer; use crate::tracker::torrent::Entry; diff --git a/tests/common/fixtures.rs b/tests/common/fixtures.rs index d4b3e9812..7062c8376 100644 --- a/tests/common/fixtures.rs +++ b/tests/common/fixtures.rs @@ -1,7 +1,7 @@ use std::net::{IpAddr, Ipv4Addr, SocketAddr}; use aquatic_udp_protocol::{AnnounceEvent, NumberOfBytes}; -use torrust_tracker::protocol::clock::DurationSinceUnixEpoch; +use torrust_tracker::shared::clock::DurationSinceUnixEpoch; use torrust_tracker::tracker::peer::{self, Id, Peer}; pub struct PeerBuilder { diff --git a/tests/servers/api/test_environment.rs b/tests/servers/api/test_environment.rs index 07ba46fff..c9b693320 100644 --- a/tests/servers/api/test_environment.rs +++ b/tests/servers/api/test_environment.rs @@ -1,7 +1,7 @@ use std::sync::Arc; -use torrust_tracker::protocol::info_hash::InfoHash; use torrust_tracker::servers::apis::server::{ApiServer, RunningApiServer, StoppedApiServer}; +use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker::tracker::peer::Peer; use torrust_tracker::tracker::Tracker; diff --git a/tests/servers/api/v1/contract/context/stats.rs b/tests/servers/api/v1/contract/context/stats.rs index 038272963..45f7e604a 100644 --- a/tests/servers/api/v1/contract/context/stats.rs +++ b/tests/servers/api/v1/contract/context/stats.rs @@ -1,7 +1,7 @@ use std::str::FromStr; -use torrust_tracker::protocol::info_hash::InfoHash; use torrust_tracker::servers::apis::v1::context::stats::resources::Stats; +use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker_test_helpers::configuration; use crate::common::fixtures::PeerBuilder; diff --git a/tests/servers/api/v1/contract/context/torrent.rs b/tests/servers/api/v1/contract/context/torrent.rs index 69d600a8b..ab497787f 100644 --- a/tests/servers/api/v1/contract/context/torrent.rs +++ b/tests/servers/api/v1/contract/context/torrent.rs @@ -1,8 +1,8 @@ use std::str::FromStr; -use torrust_tracker::protocol::info_hash::InfoHash; use torrust_tracker::servers::apis::v1::context::torrent::resources::peer::Peer; use torrust_tracker::servers::apis::v1::context::torrent::resources::torrent::{self, Torrent}; +use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker_test_helpers::configuration; use crate::common::fixtures::PeerBuilder; diff --git a/tests/servers/api/v1/contract/context/whitelist.rs b/tests/servers/api/v1/contract/context/whitelist.rs index 67992642f..60ab4c901 100644 --- a/tests/servers/api/v1/contract/context/whitelist.rs +++ b/tests/servers/api/v1/contract/context/whitelist.rs @@ -1,6 +1,6 @@ use std::str::FromStr; -use torrust_tracker::protocol::info_hash::InfoHash; +use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker_test_helpers::configuration; use crate::servers::api::connection_info::{connection_with_invalid_token, connection_with_no_token}; diff --git a/tests/servers/http/requests/announce.rs b/tests/servers/http/requests/announce.rs index 414c118ef..20c5ddaa7 100644 --- a/tests/servers/http/requests/announce.rs +++ b/tests/servers/http/requests/announce.rs @@ -3,7 +3,7 @@ use std::net::{IpAddr, Ipv4Addr}; use std::str::FromStr; use serde_repr::Serialize_repr; -use torrust_tracker::protocol::info_hash::InfoHash; +use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker::tracker::peer::Id; use crate::servers::http::{percent_encode_byte_array, ByteArray20}; diff --git a/tests/servers/http/requests/scrape.rs b/tests/servers/http/requests/scrape.rs index d7f7cd581..9e4257d6c 100644 --- a/tests/servers/http/requests/scrape.rs +++ b/tests/servers/http/requests/scrape.rs @@ -1,7 +1,7 @@ use std::fmt; use std::str::FromStr; -use torrust_tracker::protocol::info_hash::InfoHash; +use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use crate::servers::http::{percent_encode_byte_array, ByteArray20}; diff --git a/tests/servers/http/test_environment.rs b/tests/servers/http/test_environment.rs index aa414d62e..e6013540d 100644 --- a/tests/servers/http/test_environment.rs +++ b/tests/servers/http/test_environment.rs @@ -1,7 +1,7 @@ use std::sync::Arc; -use torrust_tracker::protocol::info_hash::InfoHash; use torrust_tracker::servers::http::server::{HttpServer, HttpServerLauncher, RunningHttpServer, StoppedHttpServer}; +use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker::tracker::peer::Peer; use torrust_tracker::tracker::Tracker; diff --git a/tests/servers/http/v1/contract.rs b/tests/servers/http/v1/contract.rs index f67b0c5e5..b508dfc39 100644 --- a/tests/servers/http/v1/contract.rs +++ b/tests/servers/http/v1/contract.rs @@ -72,7 +72,7 @@ mod for_all_config_modes { use local_ip_address::local_ip; use reqwest::Response; - use torrust_tracker::protocol::info_hash::InfoHash; + use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker::tracker::peer; use torrust_tracker_test_helpers::configuration; @@ -833,7 +833,7 @@ mod for_all_config_modes { use std::net::IpAddr; use std::str::FromStr; - use torrust_tracker::protocol::info_hash::InfoHash; + use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker::tracker::peer; use torrust_tracker_test_helpers::configuration; @@ -1055,7 +1055,7 @@ mod configured_as_whitelisted { mod and_receiving_an_announce_request { use std::str::FromStr; - use torrust_tracker::protocol::info_hash::InfoHash; + use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker_test_helpers::configuration; use crate::servers::http::asserts::{assert_is_announce_response, assert_torrent_not_in_whitelist_error_response}; @@ -1104,7 +1104,7 @@ mod configured_as_whitelisted { mod receiving_an_scrape_request { use std::str::FromStr; - use torrust_tracker::protocol::info_hash::InfoHash; + use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker::tracker::peer; use torrust_tracker_test_helpers::configuration; @@ -1201,7 +1201,7 @@ mod configured_as_private { use std::str::FromStr; use std::time::Duration; - use torrust_tracker::protocol::info_hash::InfoHash; + use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker::tracker::auth::Key; use torrust_tracker_test_helpers::configuration; @@ -1278,7 +1278,7 @@ mod configured_as_private { use std::str::FromStr; use std::time::Duration; - use torrust_tracker::protocol::info_hash::InfoHash; + use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker::tracker::auth::Key; use torrust_tracker::tracker::peer; use torrust_tracker_test_helpers::configuration; diff --git a/tests/servers/udp/test_environment.rs b/tests/servers/udp/test_environment.rs index 11a2cf6cd..c9f67c987 100644 --- a/tests/servers/udp/test_environment.rs +++ b/tests/servers/udp/test_environment.rs @@ -1,8 +1,8 @@ use std::net::SocketAddr; use std::sync::Arc; -use torrust_tracker::protocol::info_hash::InfoHash; use torrust_tracker::servers::udp::server::{RunningUdpServer, StoppedUdpServer, UdpServer}; +use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker::tracker::peer::Peer; use torrust_tracker::tracker::Tracker; From 2d99866931a6dfc8bf3ad65e2d438145cafd2b1c Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Fri, 17 Mar 2023 11:55:51 +0000 Subject: [PATCH 07/12] refactor: move static vars --- src/bootstrap/app.rs | 4 +++- src/lib.rs | 19 ------------------- src/shared/clock/mod.rs | 4 ++-- src/shared/clock/static_time.rs | 5 +++++ src/shared/crypto.rs | 21 ++++++++++++++++----- tests/common/tracker.rs | 4 +++- 6 files changed, 29 insertions(+), 28 deletions(-) create mode 100644 src/shared/clock/static_time.rs diff --git a/src/bootstrap/app.rs b/src/bootstrap/app.rs index 557203b0e..7fb1bf7ca 100644 --- a/src/bootstrap/app.rs +++ b/src/bootstrap/app.rs @@ -4,8 +4,10 @@ use std::sync::Arc; use torrust_tracker_configuration::Configuration; use crate::bootstrap::stats; +use crate::shared::clock::static_time; +use crate::shared::crypto::ephemeral_instance_keys; use crate::tracker::Tracker; -use crate::{bootstrap, ephemeral_instance_keys, static_time, tracker}; +use crate::{bootstrap, tracker}; /// # Panics /// diff --git a/src/lib.rs b/src/lib.rs index cf4439c3e..bd775f8cf 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -6,22 +6,3 @@ pub mod tracker; #[macro_use] extern crate lazy_static; - -pub mod static_time { - use std::time::SystemTime; - - lazy_static! { - pub static ref TIME_AT_APP_START: SystemTime = SystemTime::now(); - } -} - -pub mod ephemeral_instance_keys { - use rand::rngs::ThreadRng; - use rand::Rng; - - pub type Seed = [u8; 32]; - - lazy_static! { - pub static ref RANDOM_SEED: Seed = Rng::gen(&mut ThreadRng::default()); - } -} diff --git a/src/shared/clock/mod.rs b/src/shared/clock/mod.rs index 399fb6b9b..b5001e10e 100644 --- a/src/shared/clock/mod.rs +++ b/src/shared/clock/mod.rs @@ -1,3 +1,4 @@ +pub mod static_time; pub mod time_extent; pub mod utils; @@ -289,8 +290,7 @@ mod stopped_clock { use std::cell::RefCell; use std::time::SystemTime; - use crate::shared::clock::DurationSinceUnixEpoch; - use crate::static_time; + use crate::shared::clock::{static_time, DurationSinceUnixEpoch}; pub fn get_app_start_time() -> DurationSinceUnixEpoch { (*static_time::TIME_AT_APP_START) diff --git a/src/shared/clock/static_time.rs b/src/shared/clock/static_time.rs new file mode 100644 index 000000000..f916cec9c --- /dev/null +++ b/src/shared/clock/static_time.rs @@ -0,0 +1,5 @@ +use std::time::SystemTime; + +lazy_static! { + pub static ref TIME_AT_APP_START: SystemTime = SystemTime::now(); +} diff --git a/src/shared/crypto.rs b/src/shared/crypto.rs index 848dcd36b..c10a417c1 100644 --- a/src/shared/crypto.rs +++ b/src/shared/crypto.rs @@ -1,8 +1,19 @@ +pub mod ephemeral_instance_keys { + use rand::rngs::ThreadRng; + use rand::Rng; + + pub type Seed = [u8; 32]; + + lazy_static! { + pub static ref RANDOM_SEED: Seed = Rng::gen(&mut ThreadRng::default()); + } +} + pub mod keys { pub mod seeds { use self::detail::CURRENT_SEED; - use crate::ephemeral_instance_keys::{Seed, RANDOM_SEED}; + use crate::shared::crypto::ephemeral_instance_keys::{Seed, RANDOM_SEED}; pub trait Keeper { type Seed: Sized + Default + AsMut<[u8]>; @@ -33,7 +44,7 @@ pub mod keys { mod tests { use super::detail::ZEROED_TEST_SEED; use super::{Current, Instance, Keeper}; - use crate::ephemeral_instance_keys::Seed; + use crate::shared::crypto::ephemeral_instance_keys::Seed; pub struct ZeroedTestSeed; @@ -58,7 +69,7 @@ pub mod keys { } mod detail { - use crate::ephemeral_instance_keys::Seed; + use crate::shared::crypto::ephemeral_instance_keys::Seed; #[allow(dead_code)] pub const ZEROED_TEST_SEED: &Seed = &[0u8; 32]; @@ -67,13 +78,13 @@ pub mod keys { pub use ZEROED_TEST_SEED as CURRENT_SEED; #[cfg(not(test))] - pub use crate::ephemeral_instance_keys::RANDOM_SEED as CURRENT_SEED; + pub use crate::shared::crypto::ephemeral_instance_keys::RANDOM_SEED as CURRENT_SEED; #[cfg(test)] mod tests { use std::convert::TryInto; - use crate::ephemeral_instance_keys::RANDOM_SEED; + use crate::shared::crypto::ephemeral_instance_keys::RANDOM_SEED; use crate::shared::crypto::keys::seeds::detail::ZEROED_TEST_SEED; use crate::shared::crypto::keys::seeds::CURRENT_SEED; diff --git a/tests/common/tracker.rs b/tests/common/tracker.rs index 1d06009ba..92c1df7bf 100644 --- a/tests/common/tracker.rs +++ b/tests/common/tracker.rs @@ -1,8 +1,10 @@ use std::sync::Arc; +use torrust_tracker::bootstrap; +use torrust_tracker::shared::clock::static_time; +use torrust_tracker::shared::crypto::ephemeral_instance_keys; use torrust_tracker::tracker::services::common::tracker_factory; use torrust_tracker::tracker::Tracker; -use torrust_tracker::{bootstrap, ephemeral_instance_keys, static_time}; // TODO: Move to test-helpers crate once `Tracker` is isolated. #[allow(clippy::module_name_repetitions)] From e2553b85b4ea4e18ea44417410fb6bbfd90f5437 Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Fri, 17 Mar 2023 12:11:52 +0000 Subject: [PATCH 08/12] refactor: extract mod into file --- src/shared/crypto.rs | 109 ------------------- src/shared/crypto/ephemeral_instance_keys.rs | 8 ++ src/shared/crypto/keys.rs | 95 ++++++++++++++++ src/shared/crypto/mod.rs | 2 + 4 files changed, 105 insertions(+), 109 deletions(-) delete mode 100644 src/shared/crypto.rs create mode 100644 src/shared/crypto/ephemeral_instance_keys.rs create mode 100644 src/shared/crypto/keys.rs create mode 100644 src/shared/crypto/mod.rs diff --git a/src/shared/crypto.rs b/src/shared/crypto.rs deleted file mode 100644 index c10a417c1..000000000 --- a/src/shared/crypto.rs +++ /dev/null @@ -1,109 +0,0 @@ -pub mod ephemeral_instance_keys { - use rand::rngs::ThreadRng; - use rand::Rng; - - pub type Seed = [u8; 32]; - - lazy_static! { - pub static ref RANDOM_SEED: Seed = Rng::gen(&mut ThreadRng::default()); - } -} - -pub mod keys { - - pub mod seeds { - use self::detail::CURRENT_SEED; - use crate::shared::crypto::ephemeral_instance_keys::{Seed, RANDOM_SEED}; - - pub trait Keeper { - type Seed: Sized + Default + AsMut<[u8]>; - fn get_seed() -> &'static Self::Seed; - } - - pub struct Instance; - pub struct Current; - - impl Keeper for Instance { - type Seed = Seed; - - fn get_seed() -> &'static Self::Seed { - &RANDOM_SEED - } - } - - impl Keeper for Current { - type Seed = Seed; - - #[allow(clippy::needless_borrow)] - fn get_seed() -> &'static Self::Seed { - &CURRENT_SEED - } - } - - #[cfg(test)] - mod tests { - use super::detail::ZEROED_TEST_SEED; - use super::{Current, Instance, Keeper}; - use crate::shared::crypto::ephemeral_instance_keys::Seed; - - pub struct ZeroedTestSeed; - - impl Keeper for ZeroedTestSeed { - type Seed = Seed; - - #[allow(clippy::needless_borrow)] - fn get_seed() -> &'static Self::Seed { - &ZEROED_TEST_SEED - } - } - - #[test] - fn the_default_seed_and_the_zeroed_seed_should_be_the_same_when_testing() { - assert_eq!(Current::get_seed(), ZeroedTestSeed::get_seed()); - } - - #[test] - fn the_default_seed_and_the_instance_seed_should_be_different_when_testing() { - assert_ne!(Current::get_seed(), Instance::get_seed()); - } - } - - mod detail { - use crate::shared::crypto::ephemeral_instance_keys::Seed; - - #[allow(dead_code)] - pub const ZEROED_TEST_SEED: &Seed = &[0u8; 32]; - - #[cfg(test)] - pub use ZEROED_TEST_SEED as CURRENT_SEED; - - #[cfg(not(test))] - pub use crate::shared::crypto::ephemeral_instance_keys::RANDOM_SEED as CURRENT_SEED; - - #[cfg(test)] - mod tests { - use std::convert::TryInto; - - use crate::shared::crypto::ephemeral_instance_keys::RANDOM_SEED; - use crate::shared::crypto::keys::seeds::detail::ZEROED_TEST_SEED; - use crate::shared::crypto::keys::seeds::CURRENT_SEED; - - #[test] - fn it_should_have_a_zero_test_seed() { - assert_eq!(*ZEROED_TEST_SEED, [0u8; 32]); - } - - #[test] - fn it_should_default_to_zeroed_seed_when_testing() { - assert_eq!(*CURRENT_SEED, *ZEROED_TEST_SEED); - } - - #[test] - fn it_should_have_a_large_random_seed() { - assert!(u128::from_ne_bytes((*RANDOM_SEED)[..16].try_into().unwrap()) > u128::from(u64::MAX)); - assert!(u128::from_ne_bytes((*RANDOM_SEED)[16..].try_into().unwrap()) > u128::from(u64::MAX)); - } - } - } - } -} diff --git a/src/shared/crypto/ephemeral_instance_keys.rs b/src/shared/crypto/ephemeral_instance_keys.rs new file mode 100644 index 000000000..635d10fbd --- /dev/null +++ b/src/shared/crypto/ephemeral_instance_keys.rs @@ -0,0 +1,8 @@ +use rand::rngs::ThreadRng; +use rand::Rng; + +pub type Seed = [u8; 32]; + +lazy_static! { + pub static ref RANDOM_SEED: Seed = Rng::gen(&mut ThreadRng::default()); +} diff --git a/src/shared/crypto/keys.rs b/src/shared/crypto/keys.rs new file mode 100644 index 000000000..5e04eb551 --- /dev/null +++ b/src/shared/crypto/keys.rs @@ -0,0 +1,95 @@ +pub mod seeds { + use self::detail::CURRENT_SEED; + use crate::shared::crypto::ephemeral_instance_keys::{Seed, RANDOM_SEED}; + + pub trait Keeper { + type Seed: Sized + Default + AsMut<[u8]>; + fn get_seed() -> &'static Self::Seed; + } + + pub struct Instance; + pub struct Current; + + impl Keeper for Instance { + type Seed = Seed; + + fn get_seed() -> &'static Self::Seed { + &RANDOM_SEED + } + } + + impl Keeper for Current { + type Seed = Seed; + + #[allow(clippy::needless_borrow)] + fn get_seed() -> &'static Self::Seed { + &CURRENT_SEED + } + } + + #[cfg(test)] + mod tests { + use super::detail::ZEROED_TEST_SEED; + use super::{Current, Instance, Keeper}; + use crate::shared::crypto::ephemeral_instance_keys::Seed; + + pub struct ZeroedTestSeed; + + impl Keeper for ZeroedTestSeed { + type Seed = Seed; + + #[allow(clippy::needless_borrow)] + fn get_seed() -> &'static Self::Seed { + &ZEROED_TEST_SEED + } + } + + #[test] + fn the_default_seed_and_the_zeroed_seed_should_be_the_same_when_testing() { + assert_eq!(Current::get_seed(), ZeroedTestSeed::get_seed()); + } + + #[test] + fn the_default_seed_and_the_instance_seed_should_be_different_when_testing() { + assert_ne!(Current::get_seed(), Instance::get_seed()); + } + } + + mod detail { + use crate::shared::crypto::ephemeral_instance_keys::Seed; + + #[allow(dead_code)] + pub const ZEROED_TEST_SEED: &Seed = &[0u8; 32]; + + #[cfg(test)] + pub use ZEROED_TEST_SEED as CURRENT_SEED; + + #[cfg(not(test))] + pub use crate::shared::crypto::ephemeral_instance_keys::RANDOM_SEED as CURRENT_SEED; + + #[cfg(test)] + mod tests { + use std::convert::TryInto; + + use crate::shared::crypto::ephemeral_instance_keys::RANDOM_SEED; + use crate::shared::crypto::keys::seeds::detail::ZEROED_TEST_SEED; + use crate::shared::crypto::keys::seeds::CURRENT_SEED; + + #[test] + fn it_should_have_a_zero_test_seed() { + assert_eq!(*ZEROED_TEST_SEED, [0u8; 32]); + } + + #[test] + fn it_should_default_to_zeroed_seed_when_testing() { + assert_eq!(*CURRENT_SEED, *ZEROED_TEST_SEED); + } + + #[test] + fn it_should_have_a_large_random_seed() { + assert!(u128::from_ne_bytes((*RANDOM_SEED)[..16].try_into().unwrap()) > u128::from(u64::MAX)); + assert!(u128::from_ne_bytes((*RANDOM_SEED)[16..].try_into().unwrap()) > u128::from(u64::MAX)); + } + } + } +} diff --git a/src/shared/crypto/mod.rs b/src/shared/crypto/mod.rs new file mode 100644 index 000000000..066eb0f46 --- /dev/null +++ b/src/shared/crypto/mod.rs @@ -0,0 +1,2 @@ +pub mod ephemeral_instance_keys; +pub mod keys; From 84c45827cb498cc962e91c6ec88ecd7a3eb732a5 Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Fri, 17 Mar 2023 12:21:16 +0000 Subject: [PATCH 09/12] refactor: remove duplicate code for static vars initialization --- src/bootstrap/app.rs | 14 +++++++++----- tests/common/tracker.rs | 8 +------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/bootstrap/app.rs b/src/bootstrap/app.rs index 7fb1bf7ca..8fa6194f2 100644 --- a/src/bootstrap/app.rs +++ b/src/bootstrap/app.rs @@ -9,6 +9,14 @@ use crate::shared::crypto::ephemeral_instance_keys; use crate::tracker::Tracker; use crate::{bootstrap, tracker}; +pub fn initialize_static() { + // Set the time of Torrust app starting + lazy_static::initialize(&static_time::TIME_AT_APP_START); + + // Initialize the Ephemeral Instance Random Seed + lazy_static::initialize(&ephemeral_instance_keys::RANDOM_SEED); +} + /// # Panics /// /// Will panic if it can't load the configuration from either @@ -18,11 +26,7 @@ pub fn setup() -> (Arc, Arc) { const CONFIG_PATH: &str = "./config.toml"; const CONFIG_ENV_VAR_NAME: &str = "TORRUST_TRACKER_CONFIG"; - // Set the time of Torrust app starting - lazy_static::initialize(&static_time::TIME_AT_APP_START); - - // Initialize the Ephemeral Instance Random Seed - lazy_static::initialize(&ephemeral_instance_keys::RANDOM_SEED); + initialize_static(); // Initialize Torrust config let config = if env::var(CONFIG_ENV_VAR_NAME).is_ok() { diff --git a/tests/common/tracker.rs b/tests/common/tracker.rs index 92c1df7bf..8579609d9 100644 --- a/tests/common/tracker.rs +++ b/tests/common/tracker.rs @@ -1,19 +1,13 @@ use std::sync::Arc; use torrust_tracker::bootstrap; -use torrust_tracker::shared::clock::static_time; -use torrust_tracker::shared::crypto::ephemeral_instance_keys; use torrust_tracker::tracker::services::common::tracker_factory; use torrust_tracker::tracker::Tracker; // TODO: Move to test-helpers crate once `Tracker` is isolated. #[allow(clippy::module_name_repetitions)] pub fn new_tracker(configuration: Arc) -> Arc { - // Set the time of Torrust app starting - lazy_static::initialize(&static_time::TIME_AT_APP_START); - - // Initialize the Ephemeral Instance Random Seed - lazy_static::initialize(&ephemeral_instance_keys::RANDOM_SEED); + bootstrap::app::initialize_static(); // Initialize logging bootstrap::logging::setup(&configuration); From fe392c792e28728341a1d1410991bbc155db09e2 Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Fri, 17 Mar 2023 12:51:46 +0000 Subject: [PATCH 10/12] refactor: reorganize tracker factory mod --- src/bootstrap/app.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 | 2 +- src/servers/http/v1/services/scrape.rs | 2 +- src/servers/udp/handlers.rs | 12 +++++------ src/tracker/mod.rs | 2 +- src/tracker/services/common.rs | 25 ---------------------- src/tracker/services/mod.rs | 27 +++++++++++++++++++++++- src/tracker/services/statistics.rs | 2 +- src/tracker/services/torrent.rs | 4 ++-- tests/common/tracker.rs | 5 +---- 12 files changed, 41 insertions(+), 45 deletions(-) delete mode 100644 src/tracker/services/common.rs diff --git a/src/bootstrap/app.rs b/src/bootstrap/app.rs index 8fa6194f2..b76641ecd 100644 --- a/src/bootstrap/app.rs +++ b/src/bootstrap/app.rs @@ -48,7 +48,6 @@ pub fn setup() -> (Arc, Arc) { } }; - // Initialize logging bootstrap::logging::setup(&config); (config, tracker) diff --git a/src/servers/http/v1/handlers/announce.rs b/src/servers/http/v1/handlers/announce.rs index a93dccabb..db41388ab 100644 --- a/src/servers/http/v1/handlers/announce.rs +++ b/src/servers/http/v1/handlers/announce.rs @@ -145,7 +145,7 @@ mod tests { use crate::servers::http::v1::responses; use crate::servers::http::v1::services::peer_ip_resolver::ClientIpSources; use crate::shared::bit_torrent::info_hash::InfoHash; - use crate::tracker::services::common::tracker_factory; + use crate::tracker::services::tracker_factory; use crate::tracker::{peer, Tracker}; fn private_tracker() -> Tracker { diff --git a/src/servers/http/v1/handlers/scrape.rs b/src/servers/http/v1/handlers/scrape.rs index 9912723b8..f55194810 100644 --- a/src/servers/http/v1/handlers/scrape.rs +++ b/src/servers/http/v1/handlers/scrape.rs @@ -103,7 +103,7 @@ mod tests { use crate::servers::http::v1::responses; use crate::servers::http::v1::services::peer_ip_resolver::ClientIpSources; use crate::shared::bit_torrent::info_hash::InfoHash; - use crate::tracker::services::common::tracker_factory; + use crate::tracker::services::tracker_factory; use crate::tracker::Tracker; fn private_tracker() -> Tracker { diff --git a/src/servers/http/v1/services/announce.rs b/src/servers/http/v1/services/announce.rs index 58867634f..116dc1e95 100644 --- a/src/servers/http/v1/services/announce.rs +++ b/src/servers/http/v1/services/announce.rs @@ -32,7 +32,7 @@ mod tests { use crate::shared::bit_torrent::info_hash::InfoHash; use crate::shared::clock::DurationSinceUnixEpoch; - use crate::tracker::services::common::tracker_factory; + use crate::tracker::services::tracker_factory; use crate::tracker::{peer, Tracker}; fn public_tracker() -> Tracker { diff --git a/src/servers/http/v1/services/scrape.rs b/src/servers/http/v1/services/scrape.rs index 120a5068d..82ecc72e0 100644 --- a/src/servers/http/v1/services/scrape.rs +++ b/src/servers/http/v1/services/scrape.rs @@ -41,7 +41,7 @@ mod tests { use crate::shared::bit_torrent::info_hash::InfoHash; use crate::shared::clock::DurationSinceUnixEpoch; - use crate::tracker::services::common::tracker_factory; + use crate::tracker::services::tracker_factory; use crate::tracker::{peer, Tracker}; fn public_tracker() -> Tracker { diff --git a/src/servers/udp/handlers.rs b/src/servers/udp/handlers.rs index 7eb971d05..e00203cfc 100644 --- a/src/servers/udp/handlers.rs +++ b/src/servers/udp/handlers.rs @@ -242,8 +242,8 @@ mod tests { use torrust_tracker_test_helpers::configuration; use crate::shared::clock::{Current, Time}; - use crate::tracker::services::common::tracker_factory; - use crate::tracker::{self, peer}; + use crate::tracker::services::tracker_factory; + use crate::tracker::{peer, Tracker}; fn tracker_configuration() -> Arc { Arc::new(default_testing_tracker_configuration()) @@ -253,19 +253,19 @@ mod tests { configuration::ephemeral() } - fn public_tracker() -> Arc { + fn public_tracker() -> Arc { initialized_tracker(configuration::ephemeral_mode_public().into()) } - fn private_tracker() -> Arc { + fn private_tracker() -> Arc { initialized_tracker(configuration::ephemeral_mode_private().into()) } - fn whitelisted_tracker() -> Arc { + fn whitelisted_tracker() -> Arc { initialized_tracker(configuration::ephemeral_mode_whitelisted().into()) } - fn initialized_tracker(configuration: Arc) -> Arc { + fn initialized_tracker(configuration: Arc) -> Arc { tracker_factory(configuration).into() } diff --git a/src/tracker/mod.rs b/src/tracker/mod.rs index 6b8c27076..a89d6df2c 100644 --- a/src/tracker/mod.rs +++ b/src/tracker/mod.rs @@ -560,7 +560,7 @@ mod tests { use crate::shared::bit_torrent::info_hash::InfoHash; use crate::shared::clock::DurationSinceUnixEpoch; use crate::tracker::peer::{self, Peer}; - use crate::tracker::services::common::tracker_factory; + use crate::tracker::services::tracker_factory; use crate::tracker::{TorrentsMetrics, Tracker}; fn public_tracker() -> Tracker { diff --git a/src/tracker/services/common.rs b/src/tracker/services/common.rs deleted file mode 100644 index 757725263..000000000 --- a/src/tracker/services/common.rs +++ /dev/null @@ -1,25 +0,0 @@ -use std::sync::Arc; - -use torrust_tracker_configuration::Configuration; - -use crate::tracker::statistics::Keeper; -use crate::tracker::Tracker; - -/// # Panics -/// -/// Will panic if tracker cannot be instantiated. -#[must_use] -pub fn tracker_factory(configuration: Arc) -> Tracker { - // todo: the tracker initialization is duplicated in many places. - - // Initialize stats tracker - let (stats_event_sender, stats_repository) = Keeper::new_active_instance(); - - // Initialize Torrust tracker - match Tracker::new(configuration, Some(stats_event_sender), stats_repository) { - Ok(tracker) => tracker, - Err(error) => { - panic!("{}", error) - } - } -} diff --git a/src/tracker/services/mod.rs b/src/tracker/services/mod.rs index 2fd557d54..69b0320e8 100644 --- a/src/tracker/services/mod.rs +++ b/src/tracker/services/mod.rs @@ -1,3 +1,28 @@ -pub mod common; pub mod statistics; pub mod torrent; + +use std::sync::Arc; + +use torrust_tracker_configuration::Configuration; + +use crate::tracker::statistics::Keeper; +use crate::tracker::Tracker; + +/// # Panics +/// +/// Will panic if tracker cannot be instantiated. +#[must_use] +pub fn tracker_factory(configuration: Arc) -> Tracker { + // todo: the tracker initialization is duplicated in many places. + + // Initialize stats tracker + let (stats_event_sender, stats_repository) = Keeper::new_active_instance(); + + // Initialize Torrust tracker + match Tracker::new(configuration, Some(stats_event_sender), stats_repository) { + Ok(tracker) => tracker, + Err(error) => { + panic!("{}", error) + } + } +} diff --git a/src/tracker/services/statistics.rs b/src/tracker/services/statistics.rs index 28cd0b962..cf05fcf90 100644 --- a/src/tracker/services/statistics.rs +++ b/src/tracker/services/statistics.rs @@ -40,8 +40,8 @@ mod tests { use torrust_tracker_test_helpers::configuration; use crate::tracker; - use crate::tracker::services::common::tracker_factory; use crate::tracker::services::statistics::{get_metrics, TrackerMetrics}; + use crate::tracker::services::tracker_factory; pub fn tracker_configuration() -> Arc { Arc::new(configuration::ephemeral()) diff --git a/src/tracker/services/torrent.rs b/src/tracker/services/torrent.rs index e9e254582..30d24eb00 100644 --- a/src/tracker/services/torrent.rs +++ b/src/tracker/services/torrent.rs @@ -141,9 +141,9 @@ mod tests { use torrust_tracker_test_helpers::configuration; use crate::shared::bit_torrent::info_hash::InfoHash; - use crate::tracker::services::common::tracker_factory; use crate::tracker::services::torrent::tests::sample_peer; use crate::tracker::services::torrent::{get_torrent_info, Info}; + use crate::tracker::services::tracker_factory; pub fn tracker_configuration() -> Arc { Arc::new(configuration::ephemeral()) @@ -196,9 +196,9 @@ mod tests { use torrust_tracker_test_helpers::configuration; use crate::shared::bit_torrent::info_hash::InfoHash; - use crate::tracker::services::common::tracker_factory; use crate::tracker::services::torrent::tests::sample_peer; use crate::tracker::services::torrent::{get_torrents, BasicInfo, Pagination}; + use crate::tracker::services::tracker_factory; pub fn tracker_configuration() -> Arc { Arc::new(configuration::ephemeral()) diff --git a/tests/common/tracker.rs b/tests/common/tracker.rs index 8579609d9..d95573702 100644 --- a/tests/common/tracker.rs +++ b/tests/common/tracker.rs @@ -1,15 +1,12 @@ use std::sync::Arc; use torrust_tracker::bootstrap; -use torrust_tracker::tracker::services::common::tracker_factory; +use torrust_tracker::tracker::services::tracker_factory; use torrust_tracker::tracker::Tracker; -// TODO: Move to test-helpers crate once `Tracker` is isolated. -#[allow(clippy::module_name_repetitions)] pub fn new_tracker(configuration: Arc) -> Arc { bootstrap::app::initialize_static(); - // Initialize logging bootstrap::logging::setup(&configuration); Arc::new(tracker_factory(configuration)) From cbca065142781f47db827f24f94f9b4566094a19 Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Fri, 17 Mar 2023 12:56:36 +0000 Subject: [PATCH 11/12] refactor: rename mod and function To follow production code conventions. --- tests/common/{tracker.rs => app.rs} | 2 +- tests/common/mod.rs | 2 +- tests/servers/api/test_environment.rs | 4 ++-- tests/servers/http/test_environment.rs | 4 ++-- tests/servers/udp/test_environment.rs | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) rename tests/common/{tracker.rs => app.rs} (72%) diff --git a/tests/common/tracker.rs b/tests/common/app.rs similarity index 72% rename from tests/common/tracker.rs rename to tests/common/app.rs index d95573702..132faeb06 100644 --- a/tests/common/tracker.rs +++ b/tests/common/app.rs @@ -4,7 +4,7 @@ use torrust_tracker::bootstrap; use torrust_tracker::tracker::services::tracker_factory; use torrust_tracker::tracker::Tracker; -pub fn new_tracker(configuration: Arc) -> Arc { +pub fn setup_with_config(configuration: Arc) -> Arc { bootstrap::app::initialize_static(); bootstrap::logging::setup(&configuration); diff --git a/tests/common/mod.rs b/tests/common/mod.rs index 9452cc111..51a8a5b03 100644 --- a/tests/common/mod.rs +++ b/tests/common/mod.rs @@ -1,4 +1,4 @@ +pub mod app; pub mod fixtures; pub mod http; -pub mod tracker; pub mod udp; diff --git a/tests/servers/api/test_environment.rs b/tests/servers/api/test_environment.rs index c9b693320..be767f05e 100644 --- a/tests/servers/api/test_environment.rs +++ b/tests/servers/api/test_environment.rs @@ -6,7 +6,7 @@ use torrust_tracker::tracker::peer::Peer; use torrust_tracker::tracker::Tracker; use super::connection_info::ConnectionInfo; -use crate::common::tracker::new_tracker; +use crate::common::app::setup_with_config; #[allow(clippy::module_name_repetitions, dead_code)] pub type StoppedTestEnvironment = TestEnvironment; @@ -39,7 +39,7 @@ impl TestEnvironment { pub fn new_stopped(cfg: torrust_tracker_configuration::Configuration) -> Self { let cfg = Arc::new(cfg); - let tracker = new_tracker(cfg.clone()); + let tracker = setup_with_config(cfg.clone()); let api_server = api_server(cfg.http_api.clone()); diff --git a/tests/servers/http/test_environment.rs b/tests/servers/http/test_environment.rs index e6013540d..a1b3444dd 100644 --- a/tests/servers/http/test_environment.rs +++ b/tests/servers/http/test_environment.rs @@ -5,7 +5,7 @@ use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker::tracker::peer::Peer; use torrust_tracker::tracker::Tracker; -use crate::common::tracker::new_tracker; +use crate::common::app::setup_with_config; #[allow(clippy::module_name_repetitions, dead_code)] pub type StoppedTestEnvironment = TestEnvironment>; @@ -39,7 +39,7 @@ impl TestEnvironment> { pub fn new_stopped(cfg: torrust_tracker_configuration::Configuration) -> Self { let cfg = Arc::new(cfg); - let tracker = new_tracker(cfg.clone()); + let tracker = setup_with_config(cfg.clone()); let http_server = http_server(cfg.http_trackers[0].clone()); diff --git a/tests/servers/udp/test_environment.rs b/tests/servers/udp/test_environment.rs index c9f67c987..fdbb9036d 100644 --- a/tests/servers/udp/test_environment.rs +++ b/tests/servers/udp/test_environment.rs @@ -6,7 +6,7 @@ use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker::tracker::peer::Peer; use torrust_tracker::tracker::Tracker; -use crate::common::tracker::new_tracker; +use crate::common::app::setup_with_config; #[allow(clippy::module_name_repetitions, dead_code)] pub type StoppedTestEnvironment = TestEnvironment; @@ -41,7 +41,7 @@ impl TestEnvironment { pub fn new_stopped(cfg: torrust_tracker_configuration::Configuration) -> Self { let cfg = Arc::new(cfg); - let tracker = new_tracker(cfg.clone()); + let tracker = setup_with_config(cfg.clone()); let udp_server = udp_server(cfg.udp_trackers[0].clone()); From de5775759e0c5abdd615e5b4faceb5abd9031c28 Mon Sep 17 00:00:00 2001 From: Jose Celano Date: Fri, 17 Mar 2023 13:48:27 +0000 Subject: [PATCH 12/12] refactor: remove duplicate app initialization code There was a lot of duplicate code for app initialization between prod and testing code. --- src/bootstrap/app.rs | 54 ++++++++++--------- src/bootstrap/mod.rs | 1 - src/tracker/services/mod.rs | 11 ++-- .../{statistics.rs => statistics/mod.rs} | 2 + .../services/statistics/setup.rs} | 8 +-- tests/common/app.rs | 9 +--- tests/servers/api/test_environment.rs | 4 +- tests/servers/http/test_environment.rs | 4 +- tests/servers/udp/test_environment.rs | 4 +- 9 files changed, 48 insertions(+), 49 deletions(-) rename src/tracker/services/{statistics.rs => statistics/mod.rs} (99%) rename src/{bootstrap/stats.rs => tracker/services/statistics/setup.rs} (69%) diff --git a/src/bootstrap/app.rs b/src/bootstrap/app.rs index b76641ecd..e845feac0 100644 --- a/src/bootstrap/app.rs +++ b/src/bootstrap/app.rs @@ -3,11 +3,26 @@ use std::sync::Arc; use torrust_tracker_configuration::Configuration; -use crate::bootstrap::stats; +use crate::bootstrap; use crate::shared::clock::static_time; use crate::shared::crypto::ephemeral_instance_keys; +use crate::tracker::services::tracker_factory; use crate::tracker::Tracker; -use crate::{bootstrap, tracker}; + +#[must_use] +pub fn setup() -> (Arc, Arc) { + let configuration = Arc::new(initialize_configuration()); + let tracker = initialize_with_configuration(&configuration); + + (configuration, tracker) +} + +#[must_use] +pub fn initialize_with_configuration(configuration: &Arc) -> Arc { + initialize_static(); + initialize_logging(configuration); + Arc::new(initialize_tracker(configuration)) +} pub fn initialize_static() { // Set the time of Torrust app starting @@ -20,35 +35,26 @@ pub fn initialize_static() { /// # Panics /// /// Will panic if it can't load the configuration from either -/// `./config.toml` file or env var `TORRUST_TRACKER_CONFIG`. +/// `./config.toml` file or the env var `TORRUST_TRACKER_CONFIG`. #[must_use] -pub fn setup() -> (Arc, Arc) { +fn initialize_configuration() -> Configuration { const CONFIG_PATH: &str = "./config.toml"; const CONFIG_ENV_VAR_NAME: &str = "TORRUST_TRACKER_CONFIG"; - initialize_static(); - - // Initialize Torrust config - let config = if env::var(CONFIG_ENV_VAR_NAME).is_ok() { + if env::var(CONFIG_ENV_VAR_NAME).is_ok() { println!("Loading configuration from env var {CONFIG_ENV_VAR_NAME}"); - Arc::new(Configuration::load_from_env_var(CONFIG_ENV_VAR_NAME).unwrap()) + Configuration::load_from_env_var(CONFIG_ENV_VAR_NAME).unwrap() } else { println!("Loading configuration from config file {CONFIG_PATH}"); - Arc::new(Configuration::load_from_file(CONFIG_PATH).unwrap()) - }; - - // Initialize statistics - let (stats_event_sender, stats_repository) = stats::setup(config.tracker_usage_statistics); - - // Initialize Torrust tracker - let tracker = match tracker::Tracker::new(config.clone(), stats_event_sender, stats_repository) { - Ok(tracker) => Arc::new(tracker), - Err(error) => { - panic!("{}", error) - } - }; + Configuration::load_from_file(CONFIG_PATH).unwrap() + } +} - bootstrap::logging::setup(&config); +#[must_use] +pub fn initialize_tracker(config: &Arc) -> Tracker { + tracker_factory(config.clone()) +} - (config, tracker) +pub fn initialize_logging(config: &Arc) { + bootstrap::logging::setup(config); } diff --git a/src/bootstrap/mod.rs b/src/bootstrap/mod.rs index b4ee0558e..e3b6467ee 100644 --- a/src/bootstrap/mod.rs +++ b/src/bootstrap/mod.rs @@ -1,4 +1,3 @@ pub mod app; pub mod jobs; pub mod logging; -pub mod stats; diff --git a/src/tracker/services/mod.rs b/src/tracker/services/mod.rs index 69b0320e8..8667f79a9 100644 --- a/src/tracker/services/mod.rs +++ b/src/tracker/services/mod.rs @@ -5,21 +5,18 @@ use std::sync::Arc; use torrust_tracker_configuration::Configuration; -use crate::tracker::statistics::Keeper; use crate::tracker::Tracker; /// # Panics /// /// Will panic if tracker cannot be instantiated. #[must_use] -pub fn tracker_factory(configuration: Arc) -> Tracker { - // todo: the tracker initialization is duplicated in many places. - - // Initialize stats tracker - let (stats_event_sender, stats_repository) = Keeper::new_active_instance(); +pub fn tracker_factory(config: Arc) -> Tracker { + // Initialize statistics + let (stats_event_sender, stats_repository) = statistics::setup::factory(config.tracker_usage_statistics); // Initialize Torrust tracker - match Tracker::new(configuration, Some(stats_event_sender), stats_repository) { + match Tracker::new(config, stats_event_sender, stats_repository) { Ok(tracker) => tracker, Err(error) => { panic!("{}", error) diff --git a/src/tracker/services/statistics.rs b/src/tracker/services/statistics/mod.rs similarity index 99% rename from src/tracker/services/statistics.rs rename to src/tracker/services/statistics/mod.rs index cf05fcf90..cae4d1d69 100644 --- a/src/tracker/services/statistics.rs +++ b/src/tracker/services/statistics/mod.rs @@ -1,3 +1,5 @@ +pub mod setup; + use std::sync::Arc; use crate::tracker::statistics::Metrics; diff --git a/src/bootstrap/stats.rs b/src/tracker/services/statistics/setup.rs similarity index 69% rename from src/bootstrap/stats.rs rename to src/tracker/services/statistics/setup.rs index 3b109f297..b7cb831cb 100644 --- a/src/bootstrap/stats.rs +++ b/src/tracker/services/statistics/setup.rs @@ -1,7 +1,7 @@ use crate::tracker::statistics; #[must_use] -pub fn setup(tracker_usage_statistics: bool) -> (Option>, statistics::Repo) { +pub fn factory(tracker_usage_statistics: bool) -> (Option>, statistics::Repo) { let mut stats_event_sender = None; let mut stats_tracker = statistics::Keeper::new(); @@ -15,13 +15,13 @@ pub fn setup(tracker_usage_statistics: bool) -> (Option) -> Arc { - bootstrap::app::initialize_static(); - - bootstrap::logging::setup(&configuration); - - Arc::new(tracker_factory(configuration)) +pub fn setup_with_configuration(configuration: &Arc) -> Arc { + bootstrap::app::initialize_with_configuration(configuration) } diff --git a/tests/servers/api/test_environment.rs b/tests/servers/api/test_environment.rs index be767f05e..dbb23dcfa 100644 --- a/tests/servers/api/test_environment.rs +++ b/tests/servers/api/test_environment.rs @@ -6,7 +6,7 @@ use torrust_tracker::tracker::peer::Peer; use torrust_tracker::tracker::Tracker; use super::connection_info::ConnectionInfo; -use crate::common::app::setup_with_config; +use crate::common::app::setup_with_configuration; #[allow(clippy::module_name_repetitions, dead_code)] pub type StoppedTestEnvironment = TestEnvironment; @@ -39,7 +39,7 @@ impl TestEnvironment { pub fn new_stopped(cfg: torrust_tracker_configuration::Configuration) -> Self { let cfg = Arc::new(cfg); - let tracker = setup_with_config(cfg.clone()); + let tracker = setup_with_configuration(&cfg); let api_server = api_server(cfg.http_api.clone()); diff --git a/tests/servers/http/test_environment.rs b/tests/servers/http/test_environment.rs index a1b3444dd..8d0aaba02 100644 --- a/tests/servers/http/test_environment.rs +++ b/tests/servers/http/test_environment.rs @@ -5,7 +5,7 @@ use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker::tracker::peer::Peer; use torrust_tracker::tracker::Tracker; -use crate::common::app::setup_with_config; +use crate::common::app::setup_with_configuration; #[allow(clippy::module_name_repetitions, dead_code)] pub type StoppedTestEnvironment = TestEnvironment>; @@ -39,7 +39,7 @@ impl TestEnvironment> { pub fn new_stopped(cfg: torrust_tracker_configuration::Configuration) -> Self { let cfg = Arc::new(cfg); - let tracker = setup_with_config(cfg.clone()); + let tracker = setup_with_configuration(&cfg); let http_server = http_server(cfg.http_trackers[0].clone()); diff --git a/tests/servers/udp/test_environment.rs b/tests/servers/udp/test_environment.rs index fdbb9036d..15266d881 100644 --- a/tests/servers/udp/test_environment.rs +++ b/tests/servers/udp/test_environment.rs @@ -6,7 +6,7 @@ use torrust_tracker::shared::bit_torrent::info_hash::InfoHash; use torrust_tracker::tracker::peer::Peer; use torrust_tracker::tracker::Tracker; -use crate::common::app::setup_with_config; +use crate::common::app::setup_with_configuration; #[allow(clippy::module_name_repetitions, dead_code)] pub type StoppedTestEnvironment = TestEnvironment; @@ -41,7 +41,7 @@ impl TestEnvironment { pub fn new_stopped(cfg: torrust_tracker_configuration::Configuration) -> Self { let cfg = Arc::new(cfg); - let tracker = setup_with_config(cfg.clone()); + let tracker = setup_with_configuration(&cfg); let udp_server = udp_server(cfg.udp_trackers[0].clone());