Skip to content

Commit e12d8e6

Browse files
committed
test: [#97] add test for optional statistics
Tracker statistics can be enabled or disabled using the configuration option `tracker_usage_statistics`. This commit adds tests for that behavior.
1 parent adee3b5 commit e12d8e6

File tree

3 files changed

+59
-16
lines changed

3 files changed

+59
-16
lines changed

src/main.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,7 @@ async fn main() {
2424
};
2525

2626
// Initialize stats tracker
27-
let mut stats_tracker = StatsTracker::new();
28-
29-
if config.tracker_usage_statistics {
30-
stats_tracker.run_worker();
31-
}
27+
let stats_tracker = StatsTracker::new_instance(config.tracker_usage_statistics);
3228

3329
// Initialize Torrust tracker
3430
let tracker = match TorrentTracker::new(config.clone(), Box::new(stats_tracker)) {

src/tracker/statistics.rs

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,27 @@ pub struct StatsTracker {
6262
}
6363

6464
impl StatsTracker {
65+
pub fn new_active_instance() -> Self {
66+
Self::new_instance(true)
67+
}
68+
69+
pub fn new_inactive_instance() -> Self {
70+
Self::new_instance(false)
71+
}
72+
73+
pub fn new_instance(active: bool) -> Self {
74+
let mut stats_tracker = Self {
75+
channel_sender: None,
76+
stats: Arc::new(RwLock::new(TrackerStatistics::new())),
77+
};
78+
79+
if active {
80+
stats_tracker.run_worker();
81+
}
82+
83+
stats_tracker
84+
}
85+
6586
pub fn new() -> Self {
6687
Self {
6788
channel_sender: None,
@@ -155,3 +176,33 @@ impl TrackerStatisticsRepository for StatsTracker {
155176
pub trait TrackerStatsService: TrackerStatisticsEventSender + TrackerStatisticsRepository {}
156177

157178
impl TrackerStatsService for StatsTracker {}
179+
180+
#[cfg(test)]
181+
mod test {
182+
183+
mod event_sender {
184+
use crate::statistics::{StatsTracker, TrackerStatisticsEvent, TrackerStatisticsEventSender};
185+
186+
#[tokio::test]
187+
async fn should_not_send_any_event_when_statistics_are_disabled() {
188+
let tracker_usage_statistics = false;
189+
190+
let inactive_stats_tracker = StatsTracker::new_instance(tracker_usage_statistics);
191+
192+
let result = inactive_stats_tracker.send_event(TrackerStatisticsEvent::Tcp4Announce).await;
193+
194+
assert!(result.is_none());
195+
}
196+
197+
#[tokio::test]
198+
async fn should_send_events_when_statistics_are_enabled() {
199+
let tracker_usage_statistics = true;
200+
201+
let active_stats_tracker = StatsTracker::new_instance(tracker_usage_statistics);
202+
203+
let result = active_stats_tracker.send_event(TrackerStatisticsEvent::Tcp4Announce).await;
204+
205+
assert!(result.is_some());
206+
}
207+
}
208+
}

src/udp/handlers.rs

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -271,23 +271,17 @@ mod tests {
271271

272272
fn initialized_public_tracker() -> Arc<TorrentTracker> {
273273
let configuration = Arc::new(TrackerConfigurationBuilder::default().with_mode(TrackerMode::Public).into());
274-
Arc::new(TorrentTracker::new(configuration, Box::new(initialized_stats_tracker())).unwrap())
274+
Arc::new(TorrentTracker::new(configuration, Box::new(StatsTracker::new_active_instance())).unwrap())
275275
}
276276

277277
fn initialized_private_tracker() -> Arc<TorrentTracker> {
278278
let configuration = Arc::new(TrackerConfigurationBuilder::default().with_mode(TrackerMode::Private).into());
279-
Arc::new(TorrentTracker::new(configuration, Box::new(initialized_stats_tracker())).unwrap())
279+
Arc::new(TorrentTracker::new(configuration, Box::new(StatsTracker::new_active_instance())).unwrap())
280280
}
281281

282282
fn initialized_whitelisted_tracker() -> Arc<TorrentTracker> {
283283
let configuration = Arc::new(TrackerConfigurationBuilder::default().with_mode(TrackerMode::Listed).into());
284-
Arc::new(TorrentTracker::new(configuration, Box::new(initialized_stats_tracker())).unwrap())
285-
}
286-
287-
fn initialized_stats_tracker() -> StatsTracker {
288-
let mut stats_tracker = StatsTracker::new();
289-
stats_tracker.run_worker();
290-
stats_tracker
284+
Arc::new(TorrentTracker::new(configuration, Box::new(StatsTracker::new_active_instance())).unwrap())
291285
}
292286

293287
fn sample_ipv4_remote_addr() -> SocketAddr {
@@ -965,16 +959,18 @@ mod tests {
965959

966960
use aquatic_udp_protocol::{InfoHash as AquaticInfoHash, PeerId as AquaticPeerId};
967961

962+
use crate::statistics::StatsTracker;
968963
use crate::tracker::tracker::TorrentTracker;
969964
use crate::udp::connection_cookie::{into_connection_id, make_connection_cookie};
970965
use crate::udp::handle_announce;
971966
use crate::udp::handlers::tests::announce_request::AnnounceRequestBuilder;
972-
use crate::udp::handlers::tests::{initialized_stats_tracker, TrackerConfigurationBuilder};
967+
use crate::udp::handlers::tests::TrackerConfigurationBuilder;
973968

974969
#[tokio::test]
975970
async fn the_peer_ip_should_be_changed_to_the_external_ip_in_the_tracker_configuration() {
976971
let configuration = Arc::new(TrackerConfigurationBuilder::default().with_external_ip("::126.0.0.1").into());
977-
let tracker = Arc::new(TorrentTracker::new(configuration, Box::new(initialized_stats_tracker())).unwrap());
972+
let tracker =
973+
Arc::new(TorrentTracker::new(configuration, Box::new(StatsTracker::new_active_instance())).unwrap());
978974

979975
let loopback_ipv4 = Ipv4Addr::new(127, 0, 0, 1);
980976
let loopback_ipv6 = Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1);

0 commit comments

Comments
 (0)