Skip to content

Commit 3c935ad

Browse files
committed
Fix missing runner inform new epoch
1 parent 37aba66 commit 3c935ad

File tree

2 files changed

+49
-4
lines changed

2 files changed

+49
-4
lines changed

mithril-aggregator/src/runtime/runner.rs

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,12 @@ pub trait AggregatorRunnerTrait: Sync + Send {
169169
beacon: &Beacon,
170170
) -> Result<(), Box<dyn StdError + Sync + Send>>;
171171

172+
/// Certifier inform new epoch
173+
async fn certifier_inform_new_epoch(
174+
&self,
175+
epoch: &Epoch,
176+
) -> Result<(), Box<dyn StdError + Sync + Send>>;
177+
172178
/// Create new open message
173179
async fn create_open_message(
174180
&self,
@@ -689,6 +695,18 @@ impl AggregatorRunnerTrait for AggregatorRunner {
689695
Ok(())
690696
}
691697

698+
async fn certifier_inform_new_epoch(
699+
&self,
700+
epoch: &Epoch,
701+
) -> Result<(), Box<dyn StdError + Sync + Send>> {
702+
self.dependencies
703+
.certifier_service
704+
.inform_epoch(*epoch)
705+
.await?;
706+
707+
Ok(())
708+
}
709+
692710
async fn create_open_message(
693711
&self,
694712
signed_entity_type: &SignedEntityType,
@@ -703,6 +721,7 @@ impl AggregatorRunnerTrait for AggregatorRunner {
703721

704722
#[cfg(test)]
705723
pub mod tests {
724+
use crate::certifier_service::MockCertifierService;
706725
use crate::dependency::SimulateFromChainParams;
707726
use crate::multi_signer::MockMultiSigner;
708727
use crate::runtime::WorkingCertificate;
@@ -713,12 +732,10 @@ pub mod tests {
713732
};
714733
use crate::{MithrilSignerRegisterer, ProtocolParametersStorer, SignerRegistrationRound};
715734
use mithril_common::chain_observer::FakeObserver;
716-
use mithril_common::crypto_helper::{
717-
tests_setup::setup_certificate_chain, };
735+
use mithril_common::crypto_helper::tests_setup::setup_certificate_chain;
718736
use mithril_common::digesters::DumbImmutableFileObserver;
719737
use mithril_common::entities::{
720-
Beacon, CertificatePending, ProtocolMessage, SignedEntityType,
721-
StakeDistribution,
738+
Beacon, CertificatePending, Epoch, ProtocolMessage, SignedEntityType, StakeDistribution,
722739
};
723740
use mithril_common::store::StakeStorer;
724741
use mithril_common::test_utils::MithrilFixtureBuilder;
@@ -1215,4 +1232,19 @@ pub mod tests {
12151232
runner.update_era_checker(&beacon).await.unwrap();
12161233
assert_eq!(beacon.epoch, era_checker.current_epoch());
12171234
}
1235+
1236+
#[tokio::test]
1237+
async fn test_certifier_inform_new_epoch() {
1238+
let mut mock_certifier_service = MockCertifierService::new();
1239+
mock_certifier_service
1240+
.expect_inform_epoch()
1241+
.returning(|_| Ok(()))
1242+
.times(1);
1243+
1244+
let (mut deps, config) = initialize_dependencies().await;
1245+
deps.certifier_service = Arc::new(mock_certifier_service);
1246+
1247+
let runner = AggregatorRunner::new(config, Arc::new(deps));
1248+
runner.certifier_inform_new_epoch(&Epoch(1)).await.unwrap();
1249+
}
12181250
}

mithril-aggregator/src/runtime/state_machine.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,9 @@ impl AggregatorRuntime {
245245
.update_era_checker(&new_beacon)
246246
.await
247247
.map_err(|e| RuntimeError::critical("transiting IDLE → READY", Some(e)))?;
248+
self.runner
249+
.certifier_inform_new_epoch(&new_beacon.epoch)
250+
.await?;
248251
self.runner.update_stake_distribution(&new_beacon).await?;
249252
self.runner
250253
.open_signer_registration_round(&new_beacon)
@@ -437,6 +440,11 @@ mod tests {
437440
.with(predicate::eq(fake_data::beacon()))
438441
.once()
439442
.returning(|_| Ok(()));
443+
runner
444+
.expect_certifier_inform_new_epoch()
445+
.with(predicate::eq(fake_data::beacon().epoch))
446+
.once()
447+
.returning(|_| Ok(()));
440448

441449
let mut runtime = init_runtime(
442450
Some(AggregatorState::Idle(IdleState {
@@ -489,6 +497,11 @@ mod tests {
489497
.with(predicate::eq(fake_data::beacon()))
490498
.once()
491499
.returning(|_| Ok(()));
500+
runner
501+
.expect_certifier_inform_new_epoch()
502+
.with(predicate::eq(fake_data::beacon().epoch))
503+
.once()
504+
.returning(|_| Ok(()));
492505

493506
let mut runtime = init_runtime(
494507
Some(AggregatorState::Idle(IdleState {

0 commit comments

Comments
 (0)