@@ -285,9 +285,9 @@ mod tests {
285285 }
286286
287287 fn initialized_tracker ( configuration : Arc < Configuration > ) -> Arc < TorrentTracker > {
288- let ( stats_tracker, _stats_event_sender ) = StatsTracker :: new_active_instance ( ) ;
289- Arc :: new ( TorrentTracker :: new ( configuration, Box :: new ( stats_tracker) ) . unwrap ( ) )
290- }
288+ let ( stats_tracker, stats_event_sender ) = StatsTracker :: new_active_instance ( ) ;
289+ Arc :: new ( TorrentTracker :: new ( configuration, Box :: new ( stats_tracker) , Some ( stats_event_sender ) ) . unwrap ( ) )
290+ }
291291
292292 fn sample_ipv4_remote_addr ( ) -> SocketAddr {
293293 sample_ipv4_socket_address ( )
@@ -371,6 +371,30 @@ mod tests {
371371 }
372372 }
373373
374+ struct StatsEventSenderMock {
375+ expected_event : Option < TrackerStatisticsEvent > ,
376+ }
377+
378+ impl StatsEventSenderMock {
379+ fn new ( ) -> Self {
380+ Self { expected_event : None }
381+ }
382+
383+ fn should_throw_event ( & mut self , expected_event : TrackerStatisticsEvent ) {
384+ self . expected_event = Some ( expected_event) ;
385+ }
386+ }
387+
388+ #[ async_trait]
389+ impl TrackerStatisticsEventSender for StatsEventSenderMock {
390+ async fn send_event ( & self , _event : TrackerStatisticsEvent ) -> Option < Result < ( ) , SendError < TrackerStatisticsEvent > > > {
391+ if self . expected_event . is_some ( ) {
392+ assert_eq ! ( _event, * self . expected_event. as_ref( ) . unwrap( ) ) ;
393+ }
394+ None
395+ }
396+ }
397+
374398 #[ async_trait]
375399 impl TrackerStatisticsRepository for TrackerStatsServiceMock {
376400 async fn get_stats ( & self ) -> RwLockReadGuard < ' _ , TrackerStatistics > {
@@ -413,7 +437,10 @@ mod tests {
413437
414438 use aquatic_udp_protocol:: { ConnectRequest , ConnectResponse , Response , TransactionId } ;
415439
416- use super :: { default_tracker_config, sample_ipv4_socket_address, sample_ipv6_remote_addr, TrackerStatsServiceMock } ;
440+ use super :: {
441+ default_tracker_config, sample_ipv4_socket_address, sample_ipv6_remote_addr, StatsEventSenderMock ,
442+ TrackerStatsServiceMock ,
443+ } ;
417444 use crate :: statistics:: TrackerStatisticsEvent ;
418445 use crate :: tracker:: tracker:: TorrentTracker ;
419446 use crate :: udp:: connection_cookie:: { into_connection_id, make_connection_cookie} ;
@@ -467,11 +494,13 @@ mod tests {
467494 #[ tokio:: test]
468495 async fn it_should_send_the_upd4_connect_event_when_a_client_tries_to_connect_using_a_ip4_socket_address ( ) {
469496 let mut tracker_stats_service = Box :: new ( TrackerStatsServiceMock :: new ( ) ) ;
497+ let stats_event_sender = Box :: new ( StatsEventSenderMock :: new ( ) ) ;
470498
471499 let client_socket_address = sample_ipv4_socket_address ( ) ;
472500 tracker_stats_service. should_throw_event ( TrackerStatisticsEvent :: Udp4Connect ) ;
473501
474- let torrent_tracker = Arc :: new ( TorrentTracker :: new ( default_tracker_config ( ) , tracker_stats_service) . unwrap ( ) ) ;
502+ let torrent_tracker =
503+ Arc :: new ( TorrentTracker :: new ( default_tracker_config ( ) , tracker_stats_service, Some ( stats_event_sender) ) . unwrap ( ) ) ;
475504 handle_connect ( client_socket_address, & sample_connect_request ( ) , torrent_tracker)
476505 . await
477506 . unwrap ( ) ;
@@ -480,10 +509,12 @@ mod tests {
480509 #[ tokio:: test]
481510 async fn it_should_send_the_upd6_connect_event_when_a_client_tries_to_connect_using_a_ip6_socket_address ( ) {
482511 let mut tracker_stats_service = Box :: new ( TrackerStatsServiceMock :: new ( ) ) ;
512+ let stats_event_sender = Box :: new ( StatsEventSenderMock :: new ( ) ) ;
483513
484514 tracker_stats_service. should_throw_event ( TrackerStatisticsEvent :: Udp6Connect ) ;
485515
486- let torrent_tracker = Arc :: new ( TorrentTracker :: new ( default_tracker_config ( ) , tracker_stats_service) . unwrap ( ) ) ;
516+ let torrent_tracker =
517+ Arc :: new ( TorrentTracker :: new ( default_tracker_config ( ) , tracker_stats_service, Some ( stats_event_sender) ) . unwrap ( ) ) ;
487518 handle_connect ( sample_ipv6_remote_addr ( ) , & sample_connect_request ( ) , torrent_tracker)
488519 . await
489520 . unwrap ( ) ;
@@ -577,8 +608,8 @@ mod tests {
577608 use crate :: udp:: handle_announce;
578609 use crate :: udp:: handlers:: tests:: announce_request:: AnnounceRequestBuilder ;
579610 use crate :: udp:: handlers:: tests:: {
580- default_tracker_config, initialized_public_tracker, sample_ipv4_socket_address, TorrentPeerBuilder ,
581- TrackerStatsServiceMock ,
611+ default_tracker_config, initialized_public_tracker, sample_ipv4_socket_address, StatsEventSenderMock ,
612+ TorrentPeerBuilder , TrackerStatsServiceMock ,
582613 } ;
583614 use crate :: PeerId ;
584615
@@ -718,10 +749,13 @@ mod tests {
718749 #[ tokio:: test]
719750 async fn should_send_the_upd4_announce_event ( ) {
720751 let mut tracker_stats_service = Box :: new ( TrackerStatsServiceMock :: new ( ) ) ;
752+ let stats_event_sender = Box :: new ( StatsEventSenderMock :: new ( ) ) ;
721753
722754 tracker_stats_service. should_throw_event ( TrackerStatisticsEvent :: Udp4Announce ) ;
723755
724- let tracker = Arc :: new ( TorrentTracker :: new ( default_tracker_config ( ) , tracker_stats_service) . unwrap ( ) ) ;
756+ let tracker = Arc :: new (
757+ TorrentTracker :: new ( default_tracker_config ( ) , tracker_stats_service, Some ( stats_event_sender) ) . unwrap ( ) ,
758+ ) ;
725759 handle_announce (
726760 sample_ipv4_socket_address ( ) ,
727761 & AnnounceRequestBuilder :: default ( ) . into ( ) ,
@@ -794,8 +828,8 @@ mod tests {
794828 use crate :: udp:: handle_announce;
795829 use crate :: udp:: handlers:: tests:: announce_request:: AnnounceRequestBuilder ;
796830 use crate :: udp:: handlers:: tests:: {
797- default_tracker_config, initialized_public_tracker, sample_ipv6_remote_addr, TorrentPeerBuilder ,
798- TrackerStatsServiceMock ,
831+ default_tracker_config, initialized_public_tracker, sample_ipv6_remote_addr, StatsEventSenderMock ,
832+ TorrentPeerBuilder , TrackerStatsServiceMock ,
799833 } ;
800834 use crate :: PeerId ;
801835
@@ -942,10 +976,13 @@ mod tests {
942976 #[ tokio:: test]
943977 async fn should_send_the_upd6_announce_event ( ) {
944978 let mut tracker_stats_service = Box :: new ( TrackerStatsServiceMock :: new ( ) ) ;
979+ let stats_event_sender = Box :: new ( StatsEventSenderMock :: new ( ) ) ;
945980
946981 tracker_stats_service. should_throw_event ( TrackerStatisticsEvent :: Udp6Announce ) ;
947982
948- let tracker = Arc :: new ( TorrentTracker :: new ( default_tracker_config ( ) , tracker_stats_service) . unwrap ( ) ) ;
983+ let tracker = Arc :: new (
984+ TorrentTracker :: new ( default_tracker_config ( ) , tracker_stats_service, Some ( stats_event_sender) ) . unwrap ( ) ,
985+ ) ;
949986
950987 let remote_addr = sample_ipv6_remote_addr ( ) ;
951988
@@ -974,8 +1011,9 @@ mod tests {
9741011 #[ tokio:: test]
9751012 async fn the_peer_ip_should_be_changed_to_the_external_ip_in_the_tracker_configuration ( ) {
9761013 let configuration = Arc :: new ( TrackerConfigurationBuilder :: default ( ) . with_external_ip ( "::126.0.0.1" ) . into ( ) ) ;
977- let ( stats_tracker, _stats_event_sender) = StatsTracker :: new_active_instance ( ) ;
978- let tracker = Arc :: new ( TorrentTracker :: new ( configuration, Box :: new ( stats_tracker) ) . unwrap ( ) ) ;
1014+ let ( stats_tracker, stats_event_sender) = StatsTracker :: new_active_instance ( ) ;
1015+ let tracker =
1016+ Arc :: new ( TorrentTracker :: new ( configuration, Box :: new ( stats_tracker) , Some ( stats_event_sender) ) . unwrap ( ) ) ;
9791017
9801018 let loopback_ipv4 = Ipv4Addr :: new ( 127 , 0 , 0 , 1 ) ;
9811019 let loopback_ipv6 = Ipv6Addr :: new ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 ) ;
@@ -1243,16 +1281,21 @@ mod tests {
12431281 use crate :: statistics:: TrackerStatisticsEvent ;
12441282 use crate :: tracker:: tracker:: TorrentTracker ;
12451283 use crate :: udp:: handlers:: handle_scrape;
1246- use crate :: udp:: handlers:: tests:: { default_tracker_config, sample_ipv4_remote_addr, TrackerStatsServiceMock } ;
1284+ use crate :: udp:: handlers:: tests:: {
1285+ default_tracker_config, sample_ipv4_remote_addr, StatsEventSenderMock , TrackerStatsServiceMock ,
1286+ } ;
12471287
12481288 #[ tokio:: test]
12491289 async fn should_send_the_upd4_scrape_event ( ) {
12501290 let mut tracker_stats_service = Box :: new ( TrackerStatsServiceMock :: new ( ) ) ;
1291+ let stats_event_sender = Box :: new ( StatsEventSenderMock :: new ( ) ) ;
12511292
12521293 tracker_stats_service. should_throw_event ( TrackerStatisticsEvent :: Udp4Scrape ) ;
12531294
12541295 let remote_addr = sample_ipv4_remote_addr ( ) ;
1255- let tracker = Arc :: new ( TorrentTracker :: new ( default_tracker_config ( ) , tracker_stats_service) . unwrap ( ) ) ;
1296+ let tracker = Arc :: new (
1297+ TorrentTracker :: new ( default_tracker_config ( ) , tracker_stats_service, Some ( stats_event_sender) ) . unwrap ( ) ,
1298+ ) ;
12561299
12571300 handle_scrape ( remote_addr, & sample_scrape_request ( & remote_addr) , tracker. clone ( ) )
12581301 . await
@@ -1267,16 +1310,21 @@ mod tests {
12671310 use crate :: statistics:: TrackerStatisticsEvent ;
12681311 use crate :: tracker:: tracker:: TorrentTracker ;
12691312 use crate :: udp:: handlers:: handle_scrape;
1270- use crate :: udp:: handlers:: tests:: { default_tracker_config, sample_ipv6_remote_addr, TrackerStatsServiceMock } ;
1313+ use crate :: udp:: handlers:: tests:: {
1314+ default_tracker_config, sample_ipv6_remote_addr, StatsEventSenderMock , TrackerStatsServiceMock ,
1315+ } ;
12711316
12721317 #[ tokio:: test]
12731318 async fn should_send_the_upd6_scrape_event ( ) {
12741319 let mut tracker_stats_service = Box :: new ( TrackerStatsServiceMock :: new ( ) ) ;
1320+ let stats_event_sender = Box :: new ( StatsEventSenderMock :: new ( ) ) ;
12751321
12761322 tracker_stats_service. should_throw_event ( TrackerStatisticsEvent :: Udp6Scrape ) ;
12771323
12781324 let remote_addr = sample_ipv6_remote_addr ( ) ;
1279- let tracker = Arc :: new ( TorrentTracker :: new ( default_tracker_config ( ) , tracker_stats_service) . unwrap ( ) ) ;
1325+ let tracker = Arc :: new (
1326+ TorrentTracker :: new ( default_tracker_config ( ) , tracker_stats_service, Some ( stats_event_sender) ) . unwrap ( ) ,
1327+ ) ;
12801328
12811329 handle_scrape ( remote_addr, & sample_scrape_request ( & remote_addr) , tracker. clone ( ) )
12821330 . await
0 commit comments