11use std:: sync:: Arc ;
22
3+ use slog_scope:: warn;
34use warp:: Filter ;
45
6+ use crate :: dependency_injection:: EpochServiceWrapper ;
57use crate :: http_server:: routes:: middlewares;
68use crate :: DependencyContainer ;
79
@@ -31,7 +33,7 @@ fn register_signer(
3133 . and ( middlewares:: with_event_transmitter (
3234 dependency_manager. clone ( ) ,
3335 ) )
34- . and ( middlewares:: with_ticker_service ( dependency_manager) )
36+ . and ( middlewares:: with_epoch_service ( dependency_manager) )
3537 . and_then ( handlers:: register_signer)
3638}
3739
@@ -56,19 +58,30 @@ fn registered_signers(
5658 . and_then ( handlers:: registered_signers)
5759}
5860
61+ async fn fetch_epoch_header_value ( epoch_service : EpochServiceWrapper ) -> String {
62+ match epoch_service. read ( ) . await . epoch_of_current_data ( ) {
63+ Ok ( epoch) => format ! ( "{epoch}" ) ,
64+ Err ( e) => {
65+ warn ! ( "Could not fetch epoch header value from Epoch service: {e}" ) ;
66+ String :: new ( )
67+ }
68+ }
69+ }
70+
5971mod handlers {
6072 use crate :: database:: repository:: SignerGetter ;
73+ use crate :: dependency_injection:: EpochServiceWrapper ;
6174 use crate :: entities:: {
6275 SignerRegistrationsMessage , SignerTickerListItemMessage , SignersTickersMessage ,
6376 } ;
6477 use crate :: event_store:: { EventMessage , TransmitterService } ;
78+ use crate :: http_server:: routes:: signer_routes:: fetch_epoch_header_value;
6579 use crate :: {
6680 http_server:: routes:: reply, Configuration , SignerRegisterer , SignerRegistrationError ,
6781 } ;
6882 use crate :: { FromRegisterSignerAdapter , VerificationKeyStorer } ;
6983 use mithril_common:: entities:: Epoch ;
7084 use mithril_common:: messages:: { RegisterSignerMessage , TryFromMessageAdapter } ;
71- use mithril_common:: TickerService ;
7285 use slog_scope:: { debug, trace, warn} ;
7386 use std:: convert:: Infallible ;
7487 use std:: sync:: Arc ;
@@ -80,7 +93,7 @@ mod handlers {
8093 register_signer_message : RegisterSignerMessage ,
8194 signer_registerer : Arc < dyn SignerRegisterer > ,
8295 event_transmitter : Arc < TransmitterService < EventMessage > > ,
83- ticker_service : Arc < dyn TickerService > ,
96+ epoch_service : EpochServiceWrapper ,
8497 ) -> Result < impl warp:: Reply , Infallible > {
8598 debug ! (
8699 "⇄ HTTP SERVER: register_signer/{:?}" ,
@@ -109,13 +122,7 @@ mod handlers {
109122 None => Vec :: new ( ) ,
110123 } ;
111124
112- let epoch_str = match ticker_service. get_current_epoch ( ) . await {
113- Ok ( epoch) => format ! ( "{epoch}" ) ,
114- Err ( e) => {
115- warn ! ( "Could not read epoch to add in event: {e}" ) ;
116- String :: new ( )
117- }
118- } ;
125+ let epoch_str = fetch_epoch_header_value ( epoch_service) . await ;
119126 if !epoch_str. is_empty ( ) {
120127 headers. push ( ( "epoch" , epoch_str. as_str ( ) ) ) ;
121128 }
@@ -238,15 +245,17 @@ mod tests {
238245 use anyhow:: anyhow;
239246 use mockall:: predicate:: eq;
240247 use serde_json:: Value :: Null ;
248+ use tokio:: sync:: RwLock ;
241249 use warp:: {
242250 http:: { Method , StatusCode } ,
243251 test:: request,
244252 } ;
245253
246- use mithril_common:: entities:: Epoch ;
247254 use mithril_common:: {
248255 crypto_helper:: ProtocolRegistrationError ,
256+ entities:: Epoch ,
249257 messages:: RegisterSignerMessage ,
258+ test_utils:: MithrilFixtureBuilder ,
250259 test_utils:: { apispec:: APISpec , fake_data} ,
251260 } ;
252261 use mithril_persistence:: store:: adapter:: AdapterError ;
@@ -255,6 +264,7 @@ mod tests {
255264 database:: { record:: SignerRecord , repository:: MockSignerGetter } ,
256265 http_server:: SERVER_BASE_PATH ,
257266 initialize_dependencies,
267+ services:: FakeEpochService ,
258268 signer_registerer:: MockSignerRegisterer ,
259269 store:: MockVerificationKeyStorer ,
260270 SignerRegistrationError ,
@@ -650,4 +660,26 @@ mod tests {
650660 )
651661 . unwrap ( ) ;
652662 }
663+
664+ #[ tokio:: test]
665+ async fn test_fetch_epoch_header_value_when_epoch_service_return_epoch ( ) {
666+ let fixture = MithrilFixtureBuilder :: default ( ) . build ( ) ;
667+ let epoch_service = Arc :: new ( RwLock :: new ( FakeEpochService :: from_fixture (
668+ Epoch ( 84 ) ,
669+ & fixture,
670+ ) ) ) ;
671+
672+ let epoch_str = fetch_epoch_header_value ( epoch_service) . await ;
673+
674+ assert_eq ! ( epoch_str, "84" . to_string( ) ) ;
675+ }
676+
677+ #[ tokio:: test]
678+ async fn test_fetch_epoch_header_value_when_epoch_service_error_return_empty_string ( ) {
679+ let epoch_service = Arc :: new ( RwLock :: new ( FakeEpochService :: without_data ( ) ) ) ;
680+
681+ let epoch_str = fetch_epoch_header_value ( epoch_service) . await ;
682+
683+ assert_eq ! ( epoch_str, "" . to_string( ) ) ;
684+ }
653685}
0 commit comments