Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion mithril-aggregator/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "mithril-aggregator"
version = "0.5.76"
version = "0.5.77"
description = "A Mithril Aggregator server"
authors = { workspace = true }
edition = { workspace = true }
Expand Down
9 changes: 1 addition & 8 deletions mithril-aggregator/src/http_server/routes/middlewares.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ use std::sync::Arc;

use warp::Filter;

use mithril_common::api_version::APIVersionProvider;
use mithril_common::entities::SignedEntityConfig;
use mithril_common::{api_version::APIVersionProvider, TickerService};

use crate::database::repository::SignerGetter;
use crate::dependency_injection::EpochServiceWrapper;
Expand Down Expand Up @@ -64,13 +64,6 @@ pub fn with_certifier_service(
warp::any().map(move || dependency_manager.certifier_service.clone())
}

/// With ticker service middleware
pub fn with_ticker_service(
dependency_manager: Arc<DependencyContainer>,
) -> impl Filter<Extract = (Arc<dyn TickerService>,), Error = Infallible> + Clone {
warp::any().map(move || dependency_manager.ticker_service.clone())
}

/// With epoch service middleware
pub fn with_epoch_service(
dependency_manager: Arc<DependencyContainer>,
Expand Down
54 changes: 43 additions & 11 deletions mithril-aggregator/src/http_server/routes/signer_routes.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
use std::sync::Arc;

use slog_scope::warn;
use warp::Filter;

use crate::dependency_injection::EpochServiceWrapper;
use crate::http_server::routes::middlewares;
use crate::DependencyContainer;

Expand Down Expand Up @@ -31,7 +33,7 @@ fn register_signer(
.and(middlewares::with_event_transmitter(
dependency_manager.clone(),
))
.and(middlewares::with_ticker_service(dependency_manager))
.and(middlewares::with_epoch_service(dependency_manager))
.and_then(handlers::register_signer)
}

Expand All @@ -56,19 +58,30 @@ fn registered_signers(
.and_then(handlers::registered_signers)
}

async fn fetch_epoch_header_value(epoch_service: EpochServiceWrapper) -> String {
match epoch_service.read().await.epoch_of_current_data() {
Ok(epoch) => format!("{epoch}"),
Err(e) => {
warn!("Could not fetch epoch header value from Epoch service: {e}");
String::new()
}
}
}

mod handlers {
use crate::database::repository::SignerGetter;
use crate::dependency_injection::EpochServiceWrapper;
use crate::entities::{
SignerRegistrationsMessage, SignerTickerListItemMessage, SignersTickersMessage,
};
use crate::event_store::{EventMessage, TransmitterService};
use crate::http_server::routes::signer_routes::fetch_epoch_header_value;
use crate::{
http_server::routes::reply, Configuration, SignerRegisterer, SignerRegistrationError,
};
use crate::{FromRegisterSignerAdapter, VerificationKeyStorer};
use mithril_common::entities::Epoch;
use mithril_common::messages::{RegisterSignerMessage, TryFromMessageAdapter};
use mithril_common::TickerService;
use slog_scope::{debug, trace, warn};
use std::convert::Infallible;
use std::sync::Arc;
Expand All @@ -80,7 +93,7 @@ mod handlers {
register_signer_message: RegisterSignerMessage,
signer_registerer: Arc<dyn SignerRegisterer>,
event_transmitter: Arc<TransmitterService<EventMessage>>,
ticker_service: Arc<dyn TickerService>,
epoch_service: EpochServiceWrapper,
) -> Result<impl warp::Reply, Infallible> {
debug!(
"⇄ HTTP SERVER: register_signer/{:?}",
Expand Down Expand Up @@ -109,13 +122,7 @@ mod handlers {
None => Vec::new(),
};

let epoch_str = match ticker_service.get_current_epoch().await {
Ok(epoch) => format!("{epoch}"),
Err(e) => {
warn!("Could not read epoch to add in event: {e}");
String::new()
}
};
let epoch_str = fetch_epoch_header_value(epoch_service).await;
if !epoch_str.is_empty() {
headers.push(("epoch", epoch_str.as_str()));
}
Expand Down Expand Up @@ -238,15 +245,17 @@ mod tests {
use anyhow::anyhow;
use mockall::predicate::eq;
use serde_json::Value::Null;
use tokio::sync::RwLock;
use warp::{
http::{Method, StatusCode},
test::request,
};

use mithril_common::entities::Epoch;
use mithril_common::{
crypto_helper::ProtocolRegistrationError,
entities::Epoch,
messages::RegisterSignerMessage,
test_utils::MithrilFixtureBuilder,
test_utils::{apispec::APISpec, fake_data},
};
use mithril_persistence::store::adapter::AdapterError;
Expand All @@ -255,6 +264,7 @@ mod tests {
database::{record::SignerRecord, repository::MockSignerGetter},
http_server::SERVER_BASE_PATH,
initialize_dependencies,
services::FakeEpochService,
signer_registerer::MockSignerRegisterer,
store::MockVerificationKeyStorer,
SignerRegistrationError,
Expand Down Expand Up @@ -650,4 +660,26 @@ mod tests {
)
.unwrap();
}

#[tokio::test]
async fn test_fetch_epoch_header_value_when_epoch_service_return_epoch() {
let fixture = MithrilFixtureBuilder::default().build();
let epoch_service = Arc::new(RwLock::new(FakeEpochService::from_fixture(
Epoch(84),
&fixture,
)));

let epoch_str = fetch_epoch_header_value(epoch_service).await;

assert_eq!(epoch_str, "84".to_string());
}

#[tokio::test]
async fn test_fetch_epoch_header_value_when_epoch_service_error_return_empty_string() {
let epoch_service = Arc::new(RwLock::new(FakeEpochService::without_data()));

let epoch_str = fetch_epoch_header_value(epoch_service).await;

assert_eq!(epoch_str, "".to_string());
}
}
Loading