Skip to content

Commit 4e70069

Browse files
committed
refactor: replace ticker service with epoch service in /register-signer
1 parent 3c7fdab commit 4e70069

File tree

2 files changed

+44
-19
lines changed

2 files changed

+44
-19
lines changed

mithril-aggregator/src/http_server/routes/middlewares.rs

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ use std::sync::Arc;
33

44
use warp::Filter;
55

6+
use mithril_common::api_version::APIVersionProvider;
67
use mithril_common::entities::SignedEntityConfig;
7-
use mithril_common::{api_version::APIVersionProvider, TickerService};
88

99
use crate::database::repository::SignerGetter;
1010
use crate::dependency_injection::EpochServiceWrapper;
@@ -64,13 +64,6 @@ pub fn with_certifier_service(
6464
warp::any().map(move || dependency_manager.certifier_service.clone())
6565
}
6666

67-
/// With ticker service middleware
68-
pub fn with_ticker_service(
69-
dependency_manager: Arc<DependencyContainer>,
70-
) -> impl Filter<Extract = (Arc<dyn TickerService>,), Error = Infallible> + Clone {
71-
warp::any().map(move || dependency_manager.ticker_service.clone())
72-
}
73-
7467
/// With epoch service middleware
7568
pub fn with_epoch_service(
7669
dependency_manager: Arc<DependencyContainer>,

mithril-aggregator/src/http_server/routes/signer_routes.rs

Lines changed: 43 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
use std::sync::Arc;
22

3+
use slog_scope::warn;
34
use warp::Filter;
45

6+
use crate::dependency_injection::EpochServiceWrapper;
57
use crate::http_server::routes::middlewares;
68
use 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+
5971
mod 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

Comments
 (0)