From fac2be86cedc8e4df650766653d963dee046aae0 Mon Sep 17 00:00:00 2001 From: Warm Beer Date: Fri, 3 Mar 2023 01:35:03 +0100 Subject: [PATCH] fix: all http tracker tests --- src/apis/server.rs | 2 +- .../{server.rs => launcher.rs} | 18 +- src/http/axum_implementation/mod.rs | 2 +- src/http/axum_implementation/routes.rs | 2 +- .../{server.rs => launcher.rs} | 6 +- src/http/warp_implementation/mod.rs | 2 +- src/jobs/http_tracker.rs | 8 +- src/main.rs | 2 +- src/tracker/mod.rs | 29 +-- src/tracker/services/common.rs | 2 +- src/tracker/services/statistics.rs | 2 +- src/tracker/services/torrent.rs | 14 +- src/udp/handlers.rs | 22 +- tests/common/tracker.rs | 15 +- tests/http/test_environment.rs | 18 +- tests/http_tracker.rs | 232 +++++++++++++++++- 16 files changed, 283 insertions(+), 93 deletions(-) rename src/http/axum_implementation/{server.rs => launcher.rs} (90%) rename src/http/warp_implementation/{server.rs => launcher.rs} (97%) diff --git a/src/apis/server.rs b/src/apis/server.rs index 4594456f..8d4c703b 100644 --- a/src/apis/server.rs +++ b/src/apis/server.rs @@ -201,7 +201,7 @@ mod tests { async fn it_should_be_able_to_start_from_stopped_state_and_then_stop_again() { let cfg = tracker_configuration(); - let tracker = Arc::new(tracker::Tracker::new(&cfg, None, statistics::Repo::new()).unwrap()); + let tracker = Arc::new(tracker::Tracker::new(cfg.clone(), None, statistics::Repo::new()).unwrap()); let stopped_api_server = ApiServer::new(cfg.http_api.clone(), tracker); diff --git a/src/http/axum_implementation/server.rs b/src/http/axum_implementation/launcher.rs similarity index 90% rename from src/http/axum_implementation/server.rs rename to src/http/axum_implementation/launcher.rs index a12d6033..95fa9f2b 100644 --- a/src/http/axum_implementation/server.rs +++ b/src/http/axum_implementation/launcher.rs @@ -19,9 +19,9 @@ pub enum Error { Error(String), } -pub struct Server; +pub struct Launcher; -impl Server { +impl Launcher { pub fn start_from_tcp_listener_with_graceful_shutdown( tcp_listener: std::net::TcpListener, tracker: Arc, @@ -30,12 +30,12 @@ impl Server { where F: Future + Send + 'static, { - let app = router(&tracker); + let app = router(tracker); Box::pin(async { axum::Server::from_tcp(tcp_listener) .expect("Could not bind to tcp listener.") - .serve(app.into_make_service()) + .serve(app.into_make_service_with_connect_info::()) .with_graceful_shutdown(shutdown_signal) .await .expect("Axum server crashed."); @@ -51,7 +51,7 @@ impl Server { where F: Future + Send + 'static, { - let app = router(&tracker); + let app = router(tracker); let handle = Handle::new(); @@ -69,7 +69,7 @@ impl Server { axum_server::from_tcp_rustls(tcp_listener, tls_config) .handle(handle) - .serve(app.into_make_service()) + .serve(app.into_make_service_with_connect_info::()) .await .expect("Axum server crashed."); }) @@ -77,7 +77,7 @@ impl Server { } #[async_trait] -impl HttpServerLauncher for Server { +impl HttpServerLauncher for Launcher { fn new() -> Self { Self {} } @@ -114,7 +114,7 @@ impl HttpServerLauncher for Server { } } -pub fn start(socket_addr: std::net::SocketAddr, tracker: &Arc) -> impl Future> { +pub fn start(socket_addr: std::net::SocketAddr, tracker: Arc) -> impl Future> { let app = router(tracker); let server = axum::Server::bind(&socket_addr).serve(app.into_make_service_with_connect_info::()); @@ -128,7 +128,7 @@ pub fn start(socket_addr: std::net::SocketAddr, tracker: &Arc) -> impl pub fn start_tls( socket_addr: std::net::SocketAddr, ssl_config: RustlsConfig, - tracker: &Arc, + tracker: Arc, ) -> impl Future> { let app = router(tracker); diff --git a/src/http/axum_implementation/mod.rs b/src/http/axum_implementation/mod.rs index ecc60e1f..79d23025 100644 --- a/src/http/axum_implementation/mod.rs +++ b/src/http/axum_implementation/mod.rs @@ -1,8 +1,8 @@ pub mod extractors; pub mod handlers; +pub mod launcher; pub mod query; pub mod requests; pub mod responses; pub mod routes; -pub mod server; pub mod services; diff --git a/src/http/axum_implementation/routes.rs b/src/http/axum_implementation/routes.rs index af987ece..b0f30453 100644 --- a/src/http/axum_implementation/routes.rs +++ b/src/http/axum_implementation/routes.rs @@ -7,7 +7,7 @@ use axum_client_ip::SecureClientIpSource; use super::handlers::{announce, scrape}; use crate::tracker::Tracker; -pub fn router(tracker: &Arc) -> Router { +pub fn router(tracker: Arc) -> Router { Router::new() // Announce request .route("/announce", get(announce::handle_without_key).with_state(tracker.clone())) diff --git a/src/http/warp_implementation/server.rs b/src/http/warp_implementation/launcher.rs similarity index 97% rename from src/http/warp_implementation/server.rs rename to src/http/warp_implementation/launcher.rs index 8d01559f..777bd930 100644 --- a/src/http/warp_implementation/server.rs +++ b/src/http/warp_implementation/launcher.rs @@ -15,9 +15,9 @@ pub enum Error { Error(String), } -pub struct Server; +pub struct Launcher; -impl Server { +impl Launcher { pub fn start_with_graceful_shutdown( addr: SocketAddr, tracker: Arc, @@ -50,7 +50,7 @@ impl Server { } } -impl HttpServerLauncher for Server { +impl HttpServerLauncher for Launcher { fn new() -> Self { Self {} } diff --git a/src/http/warp_implementation/mod.rs b/src/http/warp_implementation/mod.rs index 2ceda2e6..c0e046f4 100644 --- a/src/http/warp_implementation/mod.rs +++ b/src/http/warp_implementation/mod.rs @@ -2,11 +2,11 @@ pub mod error; pub mod filter_helpers; pub mod filters; pub mod handlers; +pub mod launcher; pub mod peer_builder; pub mod request; pub mod response; pub mod routes; -pub mod server; use warp::Rejection; diff --git a/src/jobs/http_tracker.rs b/src/jobs/http_tracker.rs index ce546f60..40caa8e8 100644 --- a/src/jobs/http_tracker.rs +++ b/src/jobs/http_tracker.rs @@ -7,8 +7,8 @@ use tokio::sync::oneshot; use tokio::task::JoinHandle; use torrust_tracker_configuration::HttpTracker; -use crate::http::axum_implementation::server; -use crate::http::warp_implementation::server::Http; +use crate::http::axum_implementation::launcher; +use crate::http::warp_implementation::launcher::Http; use crate::http::Version; use crate::tracker; @@ -98,7 +98,7 @@ async fn start_axum(config: &HttpTracker, tracker: Arc) -> Joi if !ssl_enabled { info!("Starting Torrust HTTP tracker server on: http://{}", bind_addr); - let handle = server::start(bind_addr, &tracker); + let handle = launcher::start(bind_addr, tracker); tx.send(ServerJobStarted()) .expect("the HTTP tracker server should not be dropped"); @@ -113,7 +113,7 @@ async fn start_axum(config: &HttpTracker, tracker: Arc) -> Joi .await .unwrap(); - let handle = server::start_tls(bind_addr, ssl_config, &tracker); + let handle = launcher::start_tls(bind_addr, ssl_config, tracker); tx.send(ServerJobStarted()) .expect("the HTTP tracker server should not be dropped"); diff --git a/src/main.rs b/src/main.rs index fcb8331a..b0cc68b1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -30,7 +30,7 @@ async fn main() { let (stats_event_sender, stats_repository) = setup_statistics(config.tracker_usage_statistics); // Initialize Torrust tracker - let tracker = match tracker::Tracker::new(&config.clone(), stats_event_sender, stats_repository) { + let tracker = match tracker::Tracker::new(config.clone(), stats_event_sender, stats_repository) { Ok(tracker) => Arc::new(tracker), Err(error) => { panic!("{}", error) diff --git a/src/tracker/mod.rs b/src/tracker/mod.rs index 18ada69e..874233d9 100644 --- a/src/tracker/mod.rs +++ b/src/tracker/mod.rs @@ -91,15 +91,17 @@ impl Tracker { /// /// Will return a `databases::error::Error` if unable to connect to database. pub fn new( - config: &Arc, + config: Arc, stats_event_sender: Option>, stats_repository: statistics::Repo, ) -> Result { let database = databases::driver::build(&config.db_driver, &config.db_path)?; + let mode = config.mode; + Ok(Tracker { - config: config.clone(), - mode: config.mode, + config, + mode, keys: RwLock::new(std::collections::HashMap::new()), whitelist: RwLock::new(std::collections::HashSet::new()), torrents: RwLock::new(std::collections::BTreeMap::new()), @@ -550,17 +552,15 @@ mod tests { use std::net::{IpAddr, Ipv4Addr, SocketAddr}; use std::str::FromStr; - use std::sync::Arc; use aquatic_udp_protocol::{AnnounceEvent, NumberOfBytes}; - use torrust_tracker_configuration::Configuration; use torrust_tracker_primitives::TrackerMode; - use torrust_tracker_test_helpers::configuration::{self}; + use torrust_tracker_test_helpers::configuration; use crate::protocol::clock::DurationSinceUnixEpoch; use crate::protocol::info_hash::InfoHash; use crate::tracker::peer::{self, Peer}; - use crate::tracker::statistics::Keeper; + use crate::tracker::services::common::tracker_factory; use crate::tracker::{TorrentsMetrics, Tracker}; pub fn public_tracker() -> Tracker { @@ -587,21 +587,6 @@ mod tests { tracker_factory(configuration) } - pub fn tracker_factory(configuration: Configuration) -> Tracker { - // code-review: the tracker initialization is duplicated in many places. Consider make this function public. - - // Initialize stats tracker - let (stats_event_sender, stats_repository) = Keeper::new_active_instance(); - - // Initialize Torrust tracker - match Tracker::new(&Arc::new(configuration), Some(stats_event_sender), stats_repository) { - Ok(tracker) => tracker, - Err(error) => { - panic!("{}", error) - } - } - } - fn sample_info_hash() -> InfoHash { "3b245504cf5f11bbdbe1201cea6a6bf45aee1bc0".parse::().unwrap() } diff --git a/src/tracker/services/common.rs b/src/tracker/services/common.rs index 39aa3cc0..75772526 100644 --- a/src/tracker/services/common.rs +++ b/src/tracker/services/common.rs @@ -9,7 +9,7 @@ use crate::tracker::Tracker; /// /// Will panic if tracker cannot be instantiated. #[must_use] -pub fn tracker_factory(configuration: &Arc) -> Tracker { +pub fn tracker_factory(configuration: Arc) -> Tracker { // todo: the tracker initialization is duplicated in many places. // Initialize stats tracker diff --git a/src/tracker/services/statistics.rs b/src/tracker/services/statistics.rs index 94a9b1bd..35fd49db 100644 --- a/src/tracker/services/statistics.rs +++ b/src/tracker/services/statistics.rs @@ -48,7 +48,7 @@ mod tests { #[tokio::test] async fn the_statistics_service_should_return_the_tracker_metrics() { - let tracker = Arc::new(tracker_factory(&tracker_configuration())); + let tracker = Arc::new(tracker_factory(tracker_configuration())); let tracker_metrics = get_metrics(tracker.clone()).await; diff --git a/src/tracker/services/torrent.rs b/src/tracker/services/torrent.rs index fc5686e2..50b17744 100644 --- a/src/tracker/services/torrent.rs +++ b/src/tracker/services/torrent.rs @@ -150,7 +150,7 @@ mod tests { #[tokio::test] async fn should_return_none_if_the_tracker_does_not_have_the_torrent() { - let tracker = Arc::new(tracker_factory(&tracker_configuration())); + let tracker = Arc::new(tracker_factory(tracker_configuration())); let torrent_info = get_torrent_info( tracker.clone(), @@ -163,7 +163,7 @@ mod tests { #[tokio::test] async fn should_return_the_torrent_info_if_the_tracker_has_the_torrent() { - let tracker = Arc::new(tracker_factory(&tracker_configuration())); + let tracker = Arc::new(tracker_factory(tracker_configuration())); let hash = "9e0217d0fa71c87332cd8bf9dbeabcb2c2cf3c4d".to_owned(); let info_hash = InfoHash::from_str(&hash).unwrap(); @@ -204,7 +204,7 @@ mod tests { #[tokio::test] async fn should_return_an_empty_result_if_the_tracker_does_not_have_any_torrent() { - let tracker = Arc::new(tracker_factory(&tracker_configuration())); + let tracker = Arc::new(tracker_factory(tracker_configuration())); let torrents = get_torrents(tracker.clone(), &Pagination::default()).await; @@ -213,7 +213,7 @@ mod tests { #[tokio::test] async fn should_return_a_summarized_info_for_all_torrents() { - let tracker = Arc::new(tracker_factory(&tracker_configuration())); + let tracker = Arc::new(tracker_factory(tracker_configuration())); let hash = "9e0217d0fa71c87332cd8bf9dbeabcb2c2cf3c4d".to_owned(); let info_hash = InfoHash::from_str(&hash).unwrap(); @@ -237,7 +237,7 @@ mod tests { #[tokio::test] async fn should_allow_limiting_the_number_of_torrents_in_the_result() { - let tracker = Arc::new(tracker_factory(&tracker_configuration())); + let tracker = Arc::new(tracker_factory(tracker_configuration())); let hash1 = "9e0217d0fa71c87332cd8bf9dbeabcb2c2cf3c4d".to_owned(); let info_hash1 = InfoHash::from_str(&hash1).unwrap(); @@ -261,7 +261,7 @@ mod tests { #[tokio::test] async fn should_allow_using_pagination_in_the_result() { - let tracker = Arc::new(tracker_factory(&tracker_configuration())); + let tracker = Arc::new(tracker_factory(tracker_configuration())); let hash1 = "9e0217d0fa71c87332cd8bf9dbeabcb2c2cf3c4d".to_owned(); let info_hash1 = InfoHash::from_str(&hash1).unwrap(); @@ -294,7 +294,7 @@ mod tests { #[tokio::test] async fn should_return_torrents_ordered_by_info_hash() { - let tracker = Arc::new(tracker_factory(&tracker_configuration())); + let tracker = Arc::new(tracker_factory(tracker_configuration())); let hash1 = "9e0217d0fa71c87332cd8bf9dbeabcb2c2cf3c4d".to_owned(); let info_hash1 = InfoHash::from_str(&hash1).unwrap(); diff --git a/src/udp/handlers.rs b/src/udp/handlers.rs index 411590d2..074f362f 100644 --- a/src/udp/handlers.rs +++ b/src/udp/handlers.rs @@ -266,20 +266,20 @@ mod tests { fn initialized_public_tracker() -> Arc { let configuration = Arc::new(TrackerConfigurationBuilder::default().with_mode(TrackerMode::Public).into()); - initialized_tracker(&configuration) + initialized_tracker(configuration) } fn initialized_private_tracker() -> Arc { let configuration = Arc::new(TrackerConfigurationBuilder::default().with_mode(TrackerMode::Private).into()); - initialized_tracker(&configuration) + initialized_tracker(configuration) } fn initialized_whitelisted_tracker() -> Arc { let configuration = Arc::new(TrackerConfigurationBuilder::default().with_mode(TrackerMode::Listed).into()); - initialized_tracker(&configuration) + initialized_tracker(configuration) } - fn initialized_tracker(configuration: &Arc) -> Arc { + fn initialized_tracker(configuration: Arc) -> Arc { let (stats_event_sender, stats_repository) = statistics::Keeper::new_active_instance(); Arc::new(tracker::Tracker::new(configuration, Some(stats_event_sender), stats_repository).unwrap()) } @@ -436,7 +436,7 @@ mod tests { let client_socket_address = sample_ipv4_socket_address(); let torrent_tracker = Arc::new( - tracker::Tracker::new(&tracker_configuration(), Some(stats_event_sender), statistics::Repo::new()).unwrap(), + tracker::Tracker::new(tracker_configuration(), Some(stats_event_sender), statistics::Repo::new()).unwrap(), ); handle_connect(client_socket_address, &sample_connect_request(), torrent_tracker) .await @@ -454,7 +454,7 @@ mod tests { let stats_event_sender = Box::new(stats_event_sender_mock); let torrent_tracker = Arc::new( - tracker::Tracker::new(&tracker_configuration(), Some(stats_event_sender), statistics::Repo::new()).unwrap(), + tracker::Tracker::new(tracker_configuration(), Some(stats_event_sender), statistics::Repo::new()).unwrap(), ); handle_connect(sample_ipv6_remote_addr(), &sample_connect_request(), torrent_tracker) .await @@ -697,7 +697,7 @@ mod tests { let stats_event_sender = Box::new(stats_event_sender_mock); let tracker = Arc::new( - tracker::Tracker::new(&tracker_configuration(), Some(stats_event_sender), statistics::Repo::new()).unwrap(), + tracker::Tracker::new(tracker_configuration(), Some(stats_event_sender), statistics::Repo::new()).unwrap(), ); handle_announce( @@ -927,7 +927,7 @@ mod tests { let stats_event_sender = Box::new(stats_event_sender_mock); let tracker = Arc::new( - tracker::Tracker::new(&tracker_configuration(), Some(stats_event_sender), statistics::Repo::new()).unwrap(), + tracker::Tracker::new(tracker_configuration(), Some(stats_event_sender), statistics::Repo::new()).unwrap(), ); let remote_addr = sample_ipv6_remote_addr(); @@ -959,7 +959,7 @@ mod tests { let configuration = Arc::new(TrackerConfigurationBuilder::default().with_external_ip("::126.0.0.1").into()); let (stats_event_sender, stats_repository) = Keeper::new_active_instance(); let tracker = - Arc::new(tracker::Tracker::new(&configuration, Some(stats_event_sender), stats_repository).unwrap()); + Arc::new(tracker::Tracker::new(configuration, Some(stats_event_sender), stats_repository).unwrap()); let loopback_ipv4 = Ipv4Addr::new(127, 0, 0, 1); let loopback_ipv6 = Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1); @@ -1242,7 +1242,7 @@ mod tests { let remote_addr = sample_ipv4_remote_addr(); let tracker = Arc::new( - tracker::Tracker::new(&tracker_configuration(), Some(stats_event_sender), statistics::Repo::new()).unwrap(), + tracker::Tracker::new(tracker_configuration(), Some(stats_event_sender), statistics::Repo::new()).unwrap(), ); handle_scrape(remote_addr, &sample_scrape_request(&remote_addr), tracker.clone()) @@ -1274,7 +1274,7 @@ mod tests { let remote_addr = sample_ipv6_remote_addr(); let tracker = Arc::new( - tracker::Tracker::new(&tracker_configuration(), Some(stats_event_sender), statistics::Repo::new()).unwrap(), + tracker::Tracker::new(tracker_configuration(), Some(stats_event_sender), statistics::Repo::new()).unwrap(), ); handle_scrape(remote_addr, &sample_scrape_request(&remote_addr), tracker.clone()) diff --git a/tests/common/tracker.rs b/tests/common/tracker.rs index 7451bbc3..ed2d8392 100644 --- a/tests/common/tracker.rs +++ b/tests/common/tracker.rs @@ -1,6 +1,6 @@ use std::sync::Arc; -use torrust_tracker::tracker::statistics::Keeper; +use torrust_tracker::tracker::services::common::tracker_factory; use torrust_tracker::tracker::Tracker; use torrust_tracker::{ephemeral_instance_keys, logging, static_time}; @@ -12,19 +12,8 @@ pub fn new_tracker(configuration: Arc Arc::new(tracker), - Err(error) => { - panic!("{}", error) - } - }; - // Initialize logging logging::setup(&configuration); - tracker + Arc::new(tracker_factory(configuration)) } diff --git a/tests/http/test_environment.rs b/tests/http/test_environment.rs index a2cb4619..40e504b0 100644 --- a/tests/http/test_environment.rs +++ b/tests/http/test_environment.rs @@ -41,7 +41,7 @@ impl TestEnvironment> { let tracker = new_tracker(cfg.clone()); - let http_server = stopped_http_server(cfg.http_trackers[0].clone()); + let http_server = http_server(cfg.http_trackers[0].clone()); Self { cfg, @@ -61,10 +61,12 @@ impl TestEnvironment> { } } + #[allow(dead_code)] pub fn config(&self) -> &torrust_tracker_configuration::HttpTracker { &self.state.http_server.cfg } + #[allow(dead_code)] pub fn config_mut(&mut self) -> &mut torrust_tracker_configuration::HttpTracker { &mut self.state.http_server.cfg } @@ -91,12 +93,13 @@ impl TestEnvironment> { &self.state.http_server.state.bind_addr } + #[allow(dead_code)] pub fn config(&self) -> &torrust_tracker_configuration::HttpTracker { &self.state.http_server.cfg } } -#[allow(clippy::module_name_repetitions)] +#[allow(clippy::module_name_repetitions, dead_code)] pub fn stopped_test_environment( cfg: torrust_tracker_configuration::Configuration, ) -> StoppedTestEnvironment { @@ -110,17 +113,8 @@ pub async fn running_test_environment( TestEnvironment::new_running(cfg).await } -pub fn stopped_http_server( - cfg: torrust_tracker_configuration::HttpTracker, -) -> StoppedHttpServer { +pub fn http_server(cfg: torrust_tracker_configuration::HttpTracker) -> StoppedHttpServer { let http_server = I::new(); HttpServer::new(cfg, http_server) } - -pub async fn running_http_server( - cfg: torrust_tracker_configuration::HttpTracker, - tracker: Arc, -) -> RunningHttpServer { - stopped_http_server(cfg).start(tracker).await.unwrap() -} diff --git a/tests/http_tracker.rs b/tests/http_tracker.rs index 22a6c44f..d29f674e 100644 --- a/tests/http_tracker.rs +++ b/tests/http_tracker.rs @@ -12,8 +12,8 @@ mod common; mod http; -pub type Axum = torrust_tracker::http::axum_implementation::server::Server; -pub type Warp = torrust_tracker::http::warp_implementation::server::Server; +pub type Axum = torrust_tracker::http::axum_implementation::launcher::Launcher; +pub type Warp = torrust_tracker::http::warp_implementation::launcher::Launcher; mod test_env_test_environment { use crate::http::test_environment::running_test_environment; @@ -46,7 +46,7 @@ mod warp_test_env { }; use crate::http::client::Client; use crate::http::requests::announce::QueryBuilder; - use crate::http::test_environment::{running_test_environment, stopped_test_environment}; + use crate::http::test_environment::running_test_environment; use crate::Warp; #[tokio::test] @@ -65,6 +65,8 @@ mod warp_test_env { .await; assert_could_not_find_remote_address_on_xff_header_error_response(response).await; + + test_env.stop().await; } #[tokio::test] @@ -80,6 +82,8 @@ mod warp_test_env { .await; assert_invalid_remote_address_on_xff_header_error_response(response).await; + + test_env.stop().await; } } @@ -132,6 +136,8 @@ mod warp_test_env { .await; assert_is_announce_response(response).await; + + test_env.stop().await; } #[tokio::test] @@ -182,6 +188,8 @@ mod warp_test_env { .await; assert_internal_server_error_response(response).await; + + test_env.stop().await; } #[tokio::test] @@ -199,6 +207,8 @@ mod warp_test_env { assert_invalid_info_hash_error_response(response).await; } + + test_env.stop().await; } #[tokio::test] @@ -219,6 +229,8 @@ mod warp_test_env { .await; assert_is_announce_response(response).await; + + test_env.stop().await; } #[tokio::test] @@ -238,6 +250,8 @@ mod warp_test_env { assert_internal_server_error_response(response).await; } + + test_env.stop().await; } #[tokio::test] @@ -257,6 +271,8 @@ mod warp_test_env { assert_internal_server_error_response(response).await; } + + test_env.stop().await; } #[tokio::test] @@ -283,6 +299,8 @@ mod warp_test_env { assert_invalid_peer_id_error_response(response).await; } + + test_env.stop().await; } #[tokio::test] @@ -302,6 +320,8 @@ mod warp_test_env { assert_internal_server_error_response(response).await; } + + test_env.stop().await; } #[tokio::test] @@ -321,6 +341,8 @@ mod warp_test_env { assert_internal_server_error_response(response).await; } + + test_env.stop().await; } #[tokio::test] @@ -350,6 +372,8 @@ mod warp_test_env { assert_is_announce_response(response).await; } + + test_env.stop().await; } #[tokio::test] @@ -369,6 +393,8 @@ mod warp_test_env { assert_internal_server_error_response(response).await; } + + test_env.stop().await; } #[tokio::test] @@ -395,6 +421,8 @@ mod warp_test_env { }, ) .await; + + test_env.stop().await; } #[tokio::test] @@ -434,6 +462,8 @@ mod warp_test_env { }, ) .await; + + test_env.stop().await; } #[tokio::test] @@ -457,6 +487,8 @@ mod warp_test_env { let response = Client::new(test_env.bind_address().clone()).announce(&announce_query).await; assert_empty_announce_response(response).await; + + test_env.stop().await; } #[tokio::test] @@ -497,6 +529,8 @@ mod warp_test_env { }; assert_compact_announce_response(response, &expected_response).await; + + test_env.stop().await; } #[tokio::test] @@ -531,6 +565,8 @@ mod warp_test_env { .await; assert!(!is_a_compact_announce_response(response).await); + + test_env.stop().await; } async fn is_a_compact_announce_response(response: Response) -> bool { @@ -551,6 +587,10 @@ mod warp_test_env { let stats = test_env.tracker.get_stats().await; assert_eq!(stats.tcp4_connections_handled, 1); + + drop(stats); + + test_env.stop().await; } #[tokio::test] @@ -565,6 +605,10 @@ mod warp_test_env { let stats = test_env.tracker.get_stats().await; assert_eq!(stats.tcp6_connections_handled, 1); + + drop(stats); + + test_env.stop().await; } #[tokio::test] @@ -585,6 +629,10 @@ mod warp_test_env { let stats = test_env.tracker.get_stats().await; assert_eq!(stats.tcp6_connections_handled, 0); + + drop(stats); + + test_env.stop().await; } #[tokio::test] @@ -599,6 +647,10 @@ mod warp_test_env { let stats = test_env.tracker.get_stats().await; assert_eq!(stats.tcp4_announces_handled, 1); + + drop(stats); + + test_env.stop().await; } #[tokio::test] @@ -613,6 +665,10 @@ mod warp_test_env { let stats = test_env.tracker.get_stats().await; assert_eq!(stats.tcp6_announces_handled, 1); + + drop(stats); + + test_env.stop().await; } #[tokio::test] @@ -633,6 +689,10 @@ mod warp_test_env { let stats = test_env.tracker.get_stats().await; assert_eq!(stats.tcp6_announces_handled, 0); + + drop(stats); + + test_env.stop().await; } #[tokio::test] @@ -657,6 +717,8 @@ mod warp_test_env { assert_eq!(peer_addr.ip(), client_ip); assert_ne!(peer_addr.ip(), IpAddr::from_str("2.2.2.2").unwrap()); + + test_env.stop().await; } #[tokio::test] @@ -692,6 +754,8 @@ mod warp_test_env { assert_eq!(peer_addr.ip(), test_env.tracker.config.get_ext_ip().unwrap()); assert_ne!(peer_addr.ip(), IpAddr::from_str("2.2.2.2").unwrap()); + + test_env.stop().await; } #[tokio::test] @@ -727,6 +791,8 @@ mod warp_test_env { assert_eq!(peer_addr.ip(), test_env.tracker.config.get_ext_ip().unwrap()); assert_ne!(peer_addr.ip(), IpAddr::from_str("2.2.2.2").unwrap()); + + test_env.stop().await; } #[tokio::test] @@ -760,6 +826,8 @@ mod warp_test_env { let peer_addr = peers[0].peer_addr; assert_eq!(peer_addr.ip(), IpAddr::from_str("150.172.238.178").unwrap()); + + test_env.stop().await; } } @@ -795,6 +863,8 @@ mod warp_test_env { let response = Client::new(test_env.bind_address().clone()).get("scrape").await; assert_internal_server_error_response(response).await; + + test_env.stop().await; } #[tokio::test] @@ -814,6 +884,8 @@ mod warp_test_env { // code-review: it's not returning the invalid info hash error assert_internal_server_error_response(response).await; } + + test_env.stop().await; } #[tokio::test] @@ -853,6 +925,8 @@ mod warp_test_env { .build(); assert_scrape_response(response, &expected_scrape_response).await; + + test_env.stop().await; } #[tokio::test] @@ -892,6 +966,8 @@ mod warp_test_env { .build(); assert_scrape_response(response, &expected_scrape_response).await; + + test_env.stop().await; } #[tokio::test] @@ -910,6 +986,8 @@ mod warp_test_env { .await; assert_scrape_response(response, &scrape::Response::with_one_file(info_hash.bytes(), File::zeroed())).await; + + test_env.stop().await; } #[tokio::test] @@ -935,6 +1013,8 @@ mod warp_test_env { .build(); assert_scrape_response(response, &expected_scrape_response).await; + + test_env.stop().await; } #[tokio::test] @@ -955,6 +1035,10 @@ mod warp_test_env { let stats = test_env.tracker.get_stats().await; assert_eq!(stats.tcp4_scrapes_handled, 1); + + drop(stats); + + test_env.stop().await; } #[tokio::test] @@ -975,6 +1059,10 @@ mod warp_test_env { let stats = test_env.tracker.get_stats().await; assert_eq!(stats.tcp6_scrapes_handled, 1); + + drop(stats); + + test_env.stop().await; } } } @@ -1005,6 +1093,8 @@ mod warp_test_env { .await; assert_torrent_not_in_whitelist_error_response(response).await; + + test_env.stop().await; } #[tokio::test] @@ -1027,6 +1117,8 @@ mod warp_test_env { .await; assert_is_announce_response(response).await; + + test_env.stop().await; } } @@ -1073,6 +1165,8 @@ mod warp_test_env { let expected_scrape_response = ResponseBuilder::default().add_file(info_hash.bytes(), File::zeroed()).build(); assert_scrape_response(response, &expected_scrape_response).await; + + test_env.stop().await; } #[tokio::test] @@ -1119,6 +1213,8 @@ mod warp_test_env { .build(); assert_scrape_response(response, &expected_scrape_response).await; + + test_env.stop().await; } } } @@ -1153,6 +1249,8 @@ mod warp_test_env { .await; assert_is_announce_response(response).await; + + test_env.stop().await; } #[tokio::test] @@ -1182,6 +1280,8 @@ mod warp_test_env { .await; assert_warp_invalid_authentication_key_error_response(response).await; + + test_env.stop().await; } } @@ -1230,6 +1330,8 @@ mod warp_test_env { let expected_scrape_response = ResponseBuilder::default().add_file(info_hash.bytes(), File::zeroed()).build(); assert_scrape_response(response, &expected_scrape_response).await; + + test_env.stop().await; } #[tokio::test] @@ -1271,6 +1373,8 @@ mod warp_test_env { .build(); assert_scrape_response(response, &expected_scrape_response).await; + + test_env.stop().await; } #[tokio::test] @@ -1305,6 +1409,8 @@ mod warp_test_env { let expected_scrape_response = ResponseBuilder::default().add_file(info_hash.bytes(), File::zeroed()).build(); assert_scrape_response(response, &expected_scrape_response).await; + + test_env.stop().await; } } } @@ -1347,6 +1453,8 @@ mod axum_test_env { .await; assert_could_not_find_remote_address_on_x_forwarded_for_header_error_response(response).await; + + test_env.stop().await; } #[tokio::test] @@ -1362,6 +1470,8 @@ mod axum_test_env { .await; assert_could_not_find_remote_address_on_x_forwarded_for_header_error_response(response).await; + + test_env.stop().await; } } @@ -1413,6 +1523,8 @@ mod axum_test_env { .await; assert_is_announce_response(response).await; + + test_env.stop().await; } #[tokio::test] @@ -1422,6 +1534,8 @@ mod axum_test_env { let response = Client::new(test_env.bind_address().clone()).get("announce").await; assert_missing_query_params_for_announce_request_error_response(response).await; + + test_env.stop().await; } #[tokio::test] @@ -1435,6 +1549,8 @@ mod axum_test_env { .await; assert_cannot_parse_query_param_error_response(response, "invalid param a=b=c").await; + + test_env.stop().await; } #[tokio::test] @@ -1476,6 +1592,8 @@ mod axum_test_env { .await; assert_bad_announce_request_error_response(response, "missing param port").await; + + test_env.stop().await; } #[tokio::test] @@ -1493,6 +1611,8 @@ mod axum_test_env { assert_cannot_parse_query_params_error_response(response, "").await; } + + test_env.stop().await; } #[tokio::test] @@ -1513,6 +1633,8 @@ mod axum_test_env { .await; assert_is_announce_response(response).await; + + test_env.stop().await; } #[tokio::test] @@ -1532,6 +1654,8 @@ mod axum_test_env { assert_bad_announce_request_error_response(response, "invalid param value").await; } + + test_env.stop().await; } #[tokio::test] @@ -1551,6 +1675,8 @@ mod axum_test_env { assert_bad_announce_request_error_response(response, "invalid param value").await; } + + test_env.stop().await; } #[tokio::test] @@ -1577,6 +1703,8 @@ mod axum_test_env { assert_bad_announce_request_error_response(response, "invalid param value").await; } + + test_env.stop().await; } #[tokio::test] @@ -1596,6 +1724,8 @@ mod axum_test_env { assert_bad_announce_request_error_response(response, "invalid param value").await; } + + test_env.stop().await; } #[tokio::test] @@ -1615,6 +1745,8 @@ mod axum_test_env { assert_bad_announce_request_error_response(response, "invalid param value").await; } + + test_env.stop().await; } #[tokio::test] @@ -1642,6 +1774,8 @@ mod axum_test_env { assert_bad_announce_request_error_response(response, "invalid param value").await; } + + test_env.stop().await; } #[tokio::test] @@ -1661,6 +1795,8 @@ mod axum_test_env { assert_bad_announce_request_error_response(response, "invalid param value").await; } + + test_env.stop().await; } #[tokio::test] @@ -1687,6 +1823,8 @@ mod axum_test_env { }, ) .await; + + test_env.stop().await; } #[tokio::test] @@ -1726,6 +1864,8 @@ mod axum_test_env { }, ) .await; + + test_env.stop().await; } #[tokio::test] @@ -1775,6 +1915,8 @@ mod axum_test_env { }, ) .await; + + test_env.stop().await; } #[tokio::test] @@ -1798,6 +1940,8 @@ mod axum_test_env { let response = Client::new(test_env.bind_address().clone()).announce(&announce_query).await; assert_empty_announce_response(response).await; + + test_env.stop().await; } #[tokio::test] @@ -1838,6 +1982,8 @@ mod axum_test_env { }; assert_compact_announce_response(response, &expected_response).await; + + test_env.stop().await; } #[tokio::test] @@ -1872,6 +2018,8 @@ mod axum_test_env { .await; assert!(!is_a_compact_announce_response(response).await); + + test_env.stop().await; } async fn is_a_compact_announce_response(response: Response) -> bool { @@ -1892,6 +2040,10 @@ mod axum_test_env { let stats = test_env.tracker.get_stats().await; assert_eq!(stats.tcp4_connections_handled, 1); + + drop(stats); + + test_env.stop().await; } #[tokio::test] @@ -1906,6 +2058,10 @@ mod axum_test_env { let stats = test_env.tracker.get_stats().await; assert_eq!(stats.tcp6_connections_handled, 1); + + drop(stats); + + test_env.stop().await; } #[tokio::test] @@ -1926,6 +2082,10 @@ mod axum_test_env { let stats = test_env.tracker.get_stats().await; assert_eq!(stats.tcp6_connections_handled, 0); + + drop(stats); + + test_env.stop().await; } #[tokio::test] @@ -1933,13 +2093,19 @@ mod axum_test_env { let test_env = running_test_environment::(torrust_tracker_test_helpers::configuration::ephemeral_mode_public()).await; - Client::new(test_env.bind_address().clone()) + let res = Client::new(test_env.bind_address().clone()) .announce(&QueryBuilder::default().query()) .await; + println!("{:?}", res.text().await.unwrap()); + let stats = test_env.tracker.get_stats().await; assert_eq!(stats.tcp4_announces_handled, 1); + + drop(stats); + + test_env.stop().await; } #[tokio::test] @@ -1954,6 +2120,10 @@ mod axum_test_env { let stats = test_env.tracker.get_stats().await; assert_eq!(stats.tcp6_announces_handled, 1); + + drop(stats); + + test_env.stop().await; } #[tokio::test] @@ -1974,6 +2144,10 @@ mod axum_test_env { let stats = test_env.tracker.get_stats().await; assert_eq!(stats.tcp6_announces_handled, 0); + + drop(stats); + + test_env.stop().await; } #[tokio::test] @@ -1998,6 +2172,8 @@ mod axum_test_env { assert_eq!(peer_addr.ip(), client_ip); assert_ne!(peer_addr.ip(), IpAddr::from_str("2.2.2.2").unwrap()); + + test_env.stop().await; } #[tokio::test] @@ -2033,6 +2209,8 @@ mod axum_test_env { assert_eq!(peer_addr.ip(), test_env.tracker.config.get_ext_ip().unwrap()); assert_ne!(peer_addr.ip(), IpAddr::from_str("2.2.2.2").unwrap()); + + test_env.stop().await; } #[tokio::test] @@ -2068,6 +2246,8 @@ mod axum_test_env { assert_eq!(peer_addr.ip(), test_env.tracker.config.get_ext_ip().unwrap()); assert_ne!(peer_addr.ip(), IpAddr::from_str("2.2.2.2").unwrap()); + + test_env.stop().await; } #[tokio::test] @@ -2101,6 +2281,8 @@ mod axum_test_env { let peer_addr = peers[0].peer_addr; assert_eq!(peer_addr.ip(), IpAddr::from_str("150.172.238.178").unwrap()); + + test_env.stop().await; } } @@ -2140,6 +2322,8 @@ mod axum_test_env { let response = Client::new(test_env.bind_address().clone()).get("scrape").await; assert_missing_query_params_for_scrape_request_error_response(response).await; + + test_env.stop().await; } #[tokio::test] @@ -2158,6 +2342,8 @@ mod axum_test_env { assert_cannot_parse_query_params_error_response(response, "").await; } + + test_env.stop().await; } #[tokio::test] @@ -2197,6 +2383,8 @@ mod axum_test_env { .build(); assert_scrape_response(response, &expected_scrape_response).await; + + test_env.stop().await; } #[tokio::test] @@ -2236,6 +2424,8 @@ mod axum_test_env { .build(); assert_scrape_response(response, &expected_scrape_response).await; + + test_env.stop().await; } #[tokio::test] @@ -2254,6 +2444,8 @@ mod axum_test_env { .await; assert_scrape_response(response, &scrape::Response::with_one_file(info_hash.bytes(), File::zeroed())).await; + + test_env.stop().await; } #[tokio::test] @@ -2279,6 +2471,8 @@ mod axum_test_env { .build(); assert_scrape_response(response, &expected_scrape_response).await; + + test_env.stop().await; } #[tokio::test] @@ -2299,6 +2493,10 @@ mod axum_test_env { let stats = test_env.tracker.get_stats().await; assert_eq!(stats.tcp4_scrapes_handled, 1); + + drop(stats); + + test_env.stop().await; } #[tokio::test] @@ -2319,6 +2517,10 @@ mod axum_test_env { let stats = test_env.tracker.get_stats().await; assert_eq!(stats.tcp6_scrapes_handled, 1); + + drop(stats); + + test_env.stop().await; } } } @@ -2349,6 +2551,8 @@ mod axum_test_env { .await; assert_torrent_not_in_whitelist_error_response(response).await; + + test_env.stop().await; } #[tokio::test] @@ -2370,6 +2574,8 @@ mod axum_test_env { .await; assert_is_announce_response(response).await; + + test_env.stop().await; } } @@ -2416,6 +2622,8 @@ mod axum_test_env { let expected_scrape_response = ResponseBuilder::default().add_file(info_hash.bytes(), File::zeroed()).build(); assert_scrape_response(response, &expected_scrape_response).await; + + test_env.stop().await; } #[tokio::test] @@ -2462,6 +2670,8 @@ mod axum_test_env { .build(); assert_scrape_response(response, &expected_scrape_response).await; + + test_env.stop().await; } } } @@ -2493,6 +2703,8 @@ mod axum_test_env { .await; assert_is_announce_response(response).await; + + test_env.stop().await; } #[tokio::test] @@ -2507,6 +2719,8 @@ mod axum_test_env { .await; assert_authentication_error_response(response).await; + + test_env.stop().await; } #[tokio::test] @@ -2533,11 +2747,13 @@ mod axum_test_env { // The tracker does not have this key let unregistered_key = Key::from_str("YZSl4lMZupRuOpSRC3krIKR5BPB14nrJ").unwrap(); - let response = Client::authenticated(test_env.bind_address().clone(), unregistered_key) + let response = Client::authenticated(test_env.bind_address(), unregistered_key) .announce(&QueryBuilder::default().query()) .await; assert_authentication_error_response(response).await; + + test_env.stop().await; } } @@ -2602,6 +2818,8 @@ mod axum_test_env { let expected_scrape_response = ResponseBuilder::default().add_file(info_hash.bytes(), File::zeroed()).build(); assert_scrape_response(response, &expected_scrape_response).await; + + test_env.stop().await; } #[tokio::test] @@ -2643,6 +2861,8 @@ mod axum_test_env { .build(); assert_scrape_response(response, &expected_scrape_response).await; + + test_env.stop().await; } #[tokio::test] @@ -2678,6 +2898,8 @@ mod axum_test_env { let expected_scrape_response = ResponseBuilder::default().add_file(info_hash.bytes(), File::zeroed()).build(); assert_scrape_response(response, &expected_scrape_response).await; + + test_env.stop().await; } } }