Skip to content

Commit ab921f6

Browse files
committed
Add missing runner tests
1 parent e67b9db commit ab921f6

File tree

1 file changed

+244
-10
lines changed

1 file changed

+244
-10
lines changed

mithril-aggregator/src/runtime/runner.rs

Lines changed: 244 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -191,13 +191,6 @@ impl AggregatorRunnerTrait for AggregatorRunner {
191191
),
192192
];
193193

194-
// to be tested:
195-
// - if MithrilStakeDistribution not exist: Create and returns one (event if a CardanoImmutableFilesFull exist)
196-
// - if MithrilStakeDistribution exist but not certified returns it (event if a CardanoImmutableFilesFull exist)
197-
// - if MithrilStakeDistribution exist but certified:
198-
// -- existing not certified CardanoImmutableFilesFull ? returns it
199-
// -- existing certified CardanoImmutableFilesFull ? returns None
200-
// -- no existing CardanoImmutableFilesFull ? Create and returns one
201194
for signed_entity_type in signed_entity_types {
202195
let open_message = match self
203196
.dependencies
@@ -556,22 +549,63 @@ impl AggregatorRunnerTrait for AggregatorRunner {
556549
#[cfg(test)]
557550
pub mod tests {
558551
use crate::certifier_service::MockCertifierService;
552+
use crate::entities::OpenMessage;
559553
use crate::{
560554
initialize_dependencies,
561555
runtime::{AggregatorRunner, AggregatorRunnerTrait},
562556
};
563-
use crate::{MithrilSignerRegisterer, ProtocolParametersStorer, SignerRegistrationRound};
557+
use crate::{
558+
DependencyManager, MithrilSignerRegisterer, ProtocolParametersStorer,
559+
SignerRegistrationRound,
560+
};
561+
use async_trait::async_trait;
564562
use mithril_common::chain_observer::FakeObserver;
565563
use mithril_common::digesters::DumbImmutableFileObserver;
566564
use mithril_common::entities::{
567-
Beacon, CertificatePending, Epoch, SignedEntityType, StakeDistribution,
565+
Beacon, CertificatePending, Epoch, ProtocolMessage, SignedEntityType, StakeDistribution,
568566
};
567+
use mithril_common::signable_builder::SignableBuilderService;
569568
use mithril_common::store::StakeStorer;
570569
use mithril_common::test_utils::fake_data;
571570
use mithril_common::test_utils::MithrilFixtureBuilder;
572-
use mithril_common::{BeaconProviderImpl, CardanoNetwork};
571+
use mithril_common::{BeaconProviderImpl, CardanoNetwork, StdResult};
572+
use mockall::{mock, predicate::eq};
573573
use std::sync::Arc;
574574

575+
mock! {
576+
SignableBuilderServiceImpl { }
577+
578+
#[async_trait]
579+
impl SignableBuilderService for SignableBuilderServiceImpl
580+
{
581+
582+
async fn compute_protocol_message(
583+
&self,
584+
signed_entity_type: SignedEntityType,
585+
) -> StdResult<ProtocolMessage>;
586+
}
587+
}
588+
589+
async fn init_runner_from_dependencies(deps: DependencyManager) -> AggregatorRunner {
590+
let fixture = MithrilFixtureBuilder::default().with_signers(5).build();
591+
deps.init_state_from_fixture(
592+
&fixture,
593+
&[deps
594+
.chain_observer
595+
.get_current_epoch()
596+
.await
597+
.unwrap()
598+
.unwrap()],
599+
)
600+
.await;
601+
602+
let runner = AggregatorRunner::new(Arc::new(deps));
603+
let beacon = runner.get_beacon_from_chain().await.unwrap();
604+
runner.update_beacon(&beacon).await.unwrap();
605+
606+
runner
607+
}
608+
575609
#[tokio::test]
576610
async fn test_get_beacon_from_chain() {
577611
let expected_beacon = Beacon::new("private".to_string(), 2, 17);
@@ -869,4 +903,204 @@ pub mod tests {
869903
let runner = AggregatorRunner::new(Arc::new(deps));
870904
runner.certifier_inform_new_epoch(&Epoch(1)).await.unwrap();
871905
}
906+
907+
#[tokio::test]
908+
async fn test_get_current_non_certified_open_message_should_create_new_open_message_for_mithril_stake_distribution_if_none_exists(
909+
) {
910+
let open_message_expected = OpenMessage {
911+
signed_entity_type: SignedEntityType::MithrilStakeDistribution(
912+
fake_data::beacon().epoch,
913+
),
914+
is_certified: false,
915+
..OpenMessage::dummy()
916+
};
917+
let open_message_clone = open_message_expected.clone();
918+
919+
let mut mock_certifier_service = MockCertifierService::new();
920+
mock_certifier_service
921+
.expect_get_open_message()
922+
.return_once(|_| Ok(None))
923+
.times(1);
924+
mock_certifier_service
925+
.expect_create_open_message()
926+
.return_once(|_, _| Ok(open_message_clone))
927+
.times(1);
928+
929+
let mut deps = initialize_dependencies().await;
930+
deps.certifier_service = Arc::new(mock_certifier_service);
931+
932+
let runner = init_runner_from_dependencies(deps).await;
933+
934+
let open_message_returned = runner
935+
.get_current_non_certified_open_message()
936+
.await
937+
.unwrap();
938+
assert_eq!(Some(open_message_expected), open_message_returned);
939+
}
940+
941+
#[tokio::test]
942+
async fn test_get_current_non_certified_open_message_should_return_existing_open_message_for_mithril_stake_distribution_if_already_exists(
943+
) {
944+
let open_message_expected = OpenMessage {
945+
signed_entity_type: SignedEntityType::MithrilStakeDistribution(
946+
fake_data::beacon().epoch,
947+
),
948+
is_certified: false,
949+
..OpenMessage::dummy()
950+
};
951+
let open_message_clone = open_message_expected.clone();
952+
953+
let mut mock_certifier_service = MockCertifierService::new();
954+
mock_certifier_service
955+
.expect_get_open_message()
956+
.return_once(|_| Ok(Some(open_message_clone)))
957+
.times(1);
958+
mock_certifier_service.expect_create_open_message().never();
959+
960+
let mut deps = initialize_dependencies().await;
961+
deps.certifier_service = Arc::new(mock_certifier_service);
962+
963+
let runner = init_runner_from_dependencies(deps).await;
964+
965+
let open_message_returned = runner
966+
.get_current_non_certified_open_message()
967+
.await
968+
.unwrap();
969+
assert_eq!(Some(open_message_expected), open_message_returned);
970+
}
971+
972+
#[tokio::test]
973+
async fn test_get_current_non_certified_open_message_should_return_existing_open_message_for_cardano_immutables_if_already_exists_and_open_message_mithril_stake_distribution_already_certified(
974+
) {
975+
let open_message_already_certified = OpenMessage {
976+
signed_entity_type: SignedEntityType::MithrilStakeDistribution(
977+
fake_data::beacon().epoch,
978+
),
979+
is_certified: true,
980+
..OpenMessage::dummy()
981+
};
982+
let open_message_expected = OpenMessage {
983+
signed_entity_type: SignedEntityType::CardanoImmutableFilesFull(fake_data::beacon()),
984+
is_certified: false,
985+
..OpenMessage::dummy()
986+
};
987+
let open_message_clone = open_message_expected.clone();
988+
989+
let mut mock_certifier_service = MockCertifierService::new();
990+
mock_certifier_service
991+
.expect_get_open_message()
992+
.return_once(|_| Ok(Some(open_message_already_certified)))
993+
.times(1);
994+
mock_certifier_service
995+
.expect_get_open_message()
996+
.return_once(|_| Ok(Some(open_message_clone)))
997+
.times(1);
998+
mock_certifier_service.expect_create_open_message().never();
999+
1000+
let mut deps = initialize_dependencies().await;
1001+
deps.certifier_service = Arc::new(mock_certifier_service);
1002+
1003+
let runner = init_runner_from_dependencies(deps).await;
1004+
1005+
let open_message_returned = runner
1006+
.get_current_non_certified_open_message()
1007+
.await
1008+
.unwrap();
1009+
assert_eq!(Some(open_message_expected), open_message_returned);
1010+
}
1011+
1012+
#[tokio::test]
1013+
async fn test_get_current_non_certified_open_message_should_create_open_message_for_cardano_immutables_if_none_exists_and_open_message_mithril_stake_distribution_already_certified(
1014+
) {
1015+
let open_message_already_certified = OpenMessage {
1016+
signed_entity_type: SignedEntityType::MithrilStakeDistribution(
1017+
fake_data::beacon().epoch,
1018+
),
1019+
is_certified: true,
1020+
..OpenMessage::dummy()
1021+
};
1022+
let open_message_expected = OpenMessage {
1023+
signed_entity_type: SignedEntityType::CardanoImmutableFilesFull(fake_data::beacon()),
1024+
is_certified: false,
1025+
..OpenMessage::dummy()
1026+
};
1027+
let open_message_clone = open_message_expected.clone();
1028+
1029+
let mut mock_certifier_service = MockCertifierService::new();
1030+
mock_certifier_service
1031+
.expect_get_open_message()
1032+
.with(eq(open_message_already_certified
1033+
.signed_entity_type
1034+
.clone()))
1035+
.return_once(|_| Ok(Some(open_message_already_certified)))
1036+
.times(1);
1037+
mock_certifier_service
1038+
.expect_get_open_message()
1039+
.return_once(|_| Ok(None))
1040+
.times(1);
1041+
mock_certifier_service
1042+
.expect_create_open_message()
1043+
.return_once(|_, _| Ok(open_message_clone))
1044+
.times(1);
1045+
1046+
let mut mock_signable_builder_service = MockSignableBuilderServiceImpl::new();
1047+
mock_signable_builder_service
1048+
.expect_compute_protocol_message()
1049+
.return_once(|_| Ok(ProtocolMessage::default()));
1050+
1051+
let mut deps = initialize_dependencies().await;
1052+
deps.certifier_service = Arc::new(mock_certifier_service);
1053+
deps.signable_builder_service = Arc::new(mock_signable_builder_service);
1054+
1055+
let runner = init_runner_from_dependencies(deps).await;
1056+
1057+
let open_message_returned = runner
1058+
.get_current_non_certified_open_message()
1059+
.await
1060+
.unwrap();
1061+
assert_eq!(Some(open_message_expected), open_message_returned);
1062+
}
1063+
1064+
#[tokio::test]
1065+
async fn test_get_current_non_certified_open_message_should_return_none_if_all_open_message_already_certified(
1066+
) {
1067+
let open_message_already_certified_mithril_stake_distribution = OpenMessage {
1068+
signed_entity_type: SignedEntityType::MithrilStakeDistribution(
1069+
fake_data::beacon().epoch,
1070+
),
1071+
is_certified: true,
1072+
..OpenMessage::dummy()
1073+
};
1074+
let open_message_already_certified_cardano_immutable_files = OpenMessage {
1075+
signed_entity_type: SignedEntityType::CardanoImmutableFilesFull(fake_data::beacon()),
1076+
is_certified: true,
1077+
..OpenMessage::dummy()
1078+
};
1079+
1080+
let mut mock_certifier_service = MockCertifierService::new();
1081+
mock_certifier_service
1082+
.expect_get_open_message()
1083+
.return_once(|_| {
1084+
Ok(Some(
1085+
open_message_already_certified_mithril_stake_distribution,
1086+
))
1087+
})
1088+
.times(1);
1089+
mock_certifier_service
1090+
.expect_get_open_message()
1091+
.return_once(|_| Ok(Some(open_message_already_certified_cardano_immutable_files)))
1092+
.times(1);
1093+
mock_certifier_service.expect_create_open_message().never();
1094+
1095+
let mut deps = initialize_dependencies().await;
1096+
deps.certifier_service = Arc::new(mock_certifier_service);
1097+
1098+
let runner = init_runner_from_dependencies(deps).await;
1099+
1100+
let open_message_returned = runner
1101+
.get_current_non_certified_open_message()
1102+
.await
1103+
.unwrap();
1104+
assert!(open_message_returned.is_none());
1105+
}
8721106
}

0 commit comments

Comments
 (0)