Skip to content

Commit 9ff2493

Browse files
committed
test(aggregator): cover the aggregator startup at epoch zero
Check that `inform_epoch` and the epoch settings discrepancy handling succeed at epoch zero with a clamped signer retrieval epoch.
1 parent 1a8c0f3 commit 9ff2493

2 files changed

Lines changed: 63 additions & 1 deletion

File tree

mithril-aggregator/src/services/epoch_service.rs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -954,7 +954,7 @@ mod tests {
954954

955955
async fn build(self) -> MithrilEpochService {
956956
let signer_retrieval_epoch =
957-
self.current_epoch.offset_to_signer_retrieval_epoch().unwrap();
957+
self.current_epoch.offset_to_signer_retrieval_epoch_saturating();
958958
let next_signer_retrieval_epoch =
959959
self.current_epoch.offset_to_next_signer_retrieval_epoch();
960960

@@ -1095,6 +1095,29 @@ mod tests {
10951095
);
10961096
}
10971097

1098+
#[tokio::test]
1099+
async fn inform_epoch_at_epoch_zero_retrieves_signers_at_epoch_zero() {
1100+
let epoch = Epoch(0);
1101+
let epoch_fixture = MithrilFixtureBuilder::default().with_signers(3).build();
1102+
1103+
let mut service = EpochServiceBuilder::new(epoch, epoch_fixture.clone()).build().await;
1104+
1105+
service
1106+
.inform_epoch(epoch)
1107+
.await
1108+
.expect("inform_epoch should not fail at epoch zero");
1109+
1110+
assert_eq!(epoch, service.epoch_of_current_data().unwrap());
1111+
assert_eq!(
1112+
epoch_fixture.signers(),
1113+
service.current_signers().unwrap().clone()
1114+
);
1115+
assert_eq!(
1116+
epoch_fixture.signers(),
1117+
service.next_signers().unwrap().clone()
1118+
);
1119+
}
1120+
10981121
#[tokio::test]
10991122
async fn inform_epoch_get_signed_entity_config_from_its_dependencies_and_store() {
11001123
let epoch = Epoch(5);

mithril-aggregator/src/store/epoch_settings_storer.rs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,4 +244,43 @@ mod tests {
244244
let epoch_settings_stored = store.get_epoch_settings(epoch + 2).await.unwrap();
245245
assert!(epoch_settings_stored.is_none());
246246
}
247+
248+
#[tokio::test]
249+
async fn test_handle_discrepancies_at_startup_at_epoch_zero_clamps_the_aggregation_epoch() {
250+
let epoch_settings = AggregatorEpochSettings::dummy();
251+
let mut aggregation_epoch_settings = epoch_settings.clone();
252+
aggregation_epoch_settings.protocol_parameters.k += 15;
253+
254+
let mut next_aggregation_epoch_settings = epoch_settings.clone();
255+
next_aggregation_epoch_settings.protocol_parameters.k += 26;
256+
257+
let mut registration_epoch_settings = epoch_settings.clone();
258+
registration_epoch_settings.protocol_parameters.k += 37;
259+
260+
let epoch = Epoch(0);
261+
let store = FakeEpochSettingsStorer::new(vec![]);
262+
store
263+
.handle_discrepancies_at_startup(&MithrilNetworkConfiguration {
264+
epoch,
265+
configuration_for_aggregation: aggregation_epoch_settings
266+
.clone()
267+
.into_network_configuration_for_epoch(BTreeSet::new()),
268+
configuration_for_next_aggregation: next_aggregation_epoch_settings
269+
.into_network_configuration_for_epoch(BTreeSet::new()),
270+
configuration_for_registration: registration_epoch_settings
271+
.clone()
272+
.into_network_configuration_for_epoch(BTreeSet::new()),
273+
})
274+
.await
275+
.unwrap();
276+
277+
let epoch_settings_stored = store.get_epoch_settings(Epoch(0)).await.unwrap();
278+
assert_eq!(Some(aggregation_epoch_settings), epoch_settings_stored);
279+
280+
let epoch_settings_stored = store.get_epoch_settings(Epoch(1)).await.unwrap();
281+
assert_eq!(Some(registration_epoch_settings), epoch_settings_stored);
282+
283+
let epoch_settings_stored = store.get_epoch_settings(Epoch(2)).await.unwrap();
284+
assert!(epoch_settings_stored.is_none());
285+
}
247286
}

0 commit comments

Comments
 (0)