Skip to content

Commit a43b1b8

Browse files
authored
Merge pull request #670 from input-output-hk/ensemble/663/refactor_crypto_helpers
Add MithrilFixture builder
2 parents 07b5e8b + aecd616 commit a43b1b8

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+752
-513
lines changed

mithril-aggregator/src/certificate_creator.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ pub enum CertificateCreationError {
1414
Codec(String),
1515
}
1616

17-
/// Define a way to create a [Certificate]
17+
/// Define a way to create a [Certificate][mithril_common::entities::Certificate]
1818
pub trait CertificateCreator {
19-
/// Create a [Certificate]
19+
/// Create a [Certificate][mithril_common::entities::Certificate]
2020
fn create_certificate(
2121
working: &WorkingCertificate,
2222
signatures_party_ids: &[PartyId],

mithril-aggregator/src/dependency.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ impl DependencyManager {
188188
/// * Fill the [VerificationKeyStore] with the given signers keys.
189189
/// * Fill the [StakeStore] with the given signers stakes.
190190
/// * Fill the [ProtocolParametersStore] with the given parameters.
191-
pub async fn simulate_genesis(
191+
pub async fn prepare_for_genesis(
192192
&self,
193193
genesis_signers: Vec<SignerWithStake>,
194194
second_epoch_signers: Vec<SignerWithStake>,
@@ -255,13 +255,13 @@ pub mod tests {
255255
MithrilSignerRegisterer, MultiSignerImpl, ProtocolParametersStore, SingleSignatureStore,
256256
SnapshotStoreType, SnapshotUploaderType, VerificationKeyStore,
257257
};
258-
use mithril_common::certificate_chain::MithrilCertificateVerifier;
259-
use mithril_common::crypto_helper::{key_encode_hex, ProtocolGenesisSigner};
260-
use mithril_common::digesters::{DumbImmutableDigester, DumbImmutableFileObserver};
261258
use mithril_common::{
259+
certificate_chain::MithrilCertificateVerifier,
262260
chain_observer::FakeObserver,
263-
fake_data,
261+
crypto_helper::{key_encode_hex, ProtocolGenesisSigner},
262+
digesters::{DumbImmutableDigester, DumbImmutableFileObserver},
264263
store::{adapter::MemoryAdapter, StakeStore},
264+
test_utils::fake_data,
265265
BeaconProviderImpl, CardanoNetwork,
266266
};
267267
use std::{path::PathBuf, sync::Arc};

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,9 @@ mod tests {
8282
const API_SPEC_FILE: &str = "../openapi.yaml";
8383

8484
use crate::http_server::SERVER_BASE_PATH;
85-
use mithril_common::apispec::APISpec;
8685
use mithril_common::store::adapter::FailStoreAdapter;
87-
use mithril_common::{entities, fake_data};
86+
use mithril_common::test_utils::apispec::APISpec;
87+
use mithril_common::{entities, test_utils::fake_data};
8888
use serde_json::Value::Null;
8989
use warp::http::Method;
9090
use warp::test::request;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ mod tests {
8484
const API_SPEC_FILE: &str = "../openapi.yaml";
8585

8686
use crate::http_server::SERVER_BASE_PATH;
87-
use mithril_common::apispec::APISpec;
87+
use mithril_common::test_utils::apispec::APISpec;
8888
use serde_json::Value::Null;
8989
use warp::http::Method;
9090
use warp::test::request;

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ mod tests {
5656
const API_SPEC_FILE: &str = "../openapi.yaml";
5757

5858
use crate::http_server::SERVER_BASE_PATH;
59-
use mithril_common::apispec::APISpec;
60-
use mithril_common::fake_data;
59+
use mithril_common::test_utils::apispec::APISpec;
60+
use mithril_common::test_utils::fake_data;
6161
use tokio::sync::RwLock;
6262
use warp::http::Method;
6363
use warp::test::request;

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,9 @@ mod handlers {
6767
mod tests {
6868
const API_SPEC_FILE: &str = "../openapi.yaml";
6969

70-
use mithril_common::apispec::APISpec;
7170
use mithril_common::crypto_helper::ProtocolRegistrationError;
72-
use mithril_common::fake_data;
71+
use mithril_common::test_utils::apispec::APISpec;
72+
use mithril_common::test_utils::fake_data;
7373
use warp::http::Method;
7474
use warp::test::request;
7575

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,8 @@ mod tests {
169169
const API_SPEC_FILE: &str = "../openapi.yaml";
170170

171171
use crate::http_server::SERVER_BASE_PATH;
172-
use mithril_common::apispec::APISpec;
173-
use mithril_common::fake_data;
172+
use mithril_common::test_utils::apispec::APISpec;
173+
use mithril_common::test_utils::fake_data;
174174
use serde_json::Value::Null;
175175

176176
use crate::initialize_dependencies;

mithril-aggregator/src/multi_signer.rs

Lines changed: 15 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -727,8 +727,8 @@ mod tests {
727727
};
728728
use mithril_common::{
729729
crypto_helper::tests_setup::*,
730-
fake_data,
731730
store::{adapter::MemoryAdapter, StakeStore},
731+
test_utils::{fake_data, MithrilFixtureBuilder},
732732
};
733733
use std::{collections::HashMap, sync::Arc};
734734

@@ -861,17 +861,9 @@ mod tests {
861861
#[tokio::test]
862862
async fn test_multi_signer_stake_distribution_ok() {
863863
let mut multi_signer = setup_multi_signer().await;
864+
let fixture = MithrilFixtureBuilder::default().with_signers(5).build();
865+
let mut stake_distribution_expected = fixture.protocol_stake_distribution();
864866

865-
let mut stake_distribution_expected: ProtocolStakeDistribution =
866-
setup_signers(5, &setup_protocol_parameters())
867-
.iter()
868-
.map(|(signer_with_stake, _, _)| {
869-
(
870-
signer_with_stake.party_id.to_owned(),
871-
signer_with_stake.stake,
872-
)
873-
})
874-
.collect::<_>();
875867
stake_distribution_expected.sort_by_key(|k| k.0.clone());
876868
multi_signer
877869
.update_stake_distribution(&stake_distribution_expected)
@@ -918,22 +910,15 @@ mod tests {
918910
.await
919911
.expect("update protocol parameters failed");
920912

921-
let signers = setup_signers(5, &protocol_parameters);
913+
let fixture = MithrilFixtureBuilder::default().with_signers(5).build();
914+
915+
let stake_distribution = fixture.protocol_stake_distribution();
922916

923-
let stake_distribution = &signers
924-
.iter()
925-
.map(|(signer_with_stake, _, _)| {
926-
(
927-
signer_with_stake.party_id.to_owned(),
928-
signer_with_stake.stake,
929-
)
930-
})
931-
.collect::<_>();
932917
multi_signer
933-
.update_stake_distribution(stake_distribution)
918+
.update_stake_distribution(&stake_distribution)
934919
.await
935920
.expect("update stake distribution failed");
936-
for (signer_with_stake, _, _) in &signers {
921+
for signer_with_stake in &fixture.signers_with_stake() {
937922
verification_key_store
938923
.save_verification_key(
939924
start_epoch.offset_to_recording_epoch(),
@@ -959,17 +944,20 @@ mod tests {
959944
let mut signatures = Vec::new();
960945

961946
let mut expected_certificate_signers: Vec<SignerWithStake> = Vec::new();
962-
for (signer_with_stake, protocol_signer, _protocol_initializer) in &signers {
963-
if let Some(signature) = protocol_signer.sign(message.compute_hash().as_bytes()) {
947+
for signer_fixture in fixture.signers_fixture() {
948+
if let Some(signature) = signer_fixture
949+
.protocol_signer
950+
.sign(message.compute_hash().as_bytes())
951+
{
964952
let won_indexes = signature.indexes.clone();
965953

966954
signatures.push(entities::SingleSignatures::new(
967-
signer_with_stake.party_id.to_owned(),
955+
signer_fixture.signer_with_stake.party_id.to_owned(),
968956
key_encode_hex(signature).unwrap(),
969957
won_indexes,
970958
));
971959

972-
expected_certificate_signers.push(signer_with_stake.to_owned())
960+
expected_certificate_signers.push(signer_fixture.signer_with_stake.to_owned())
973961
}
974962
}
975963

mithril-aggregator/src/runtime/runner.rs

Lines changed: 36 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -615,16 +615,16 @@ pub mod tests {
615615
use crate::{MithrilSignerRegisterer, ProtocolParametersStorer, SignerRegistrationRound};
616616
use mithril_common::chain_observer::FakeObserver;
617617
use mithril_common::crypto_helper::{
618-
key_decode_hex,
619-
tests_setup::{setup_certificate_chain, setup_signers},
620-
ProtocolMultiSignature,
618+
key_decode_hex, tests_setup::setup_certificate_chain, ProtocolMultiSignature,
621619
};
622620
use mithril_common::digesters::DumbImmutableFileObserver;
623621
use mithril_common::entities::{
624-
Beacon, CertificatePending, Epoch, HexEncodedKey, ProtocolMessage, SignerWithStake,
625-
StakeDistribution,
622+
Beacon, CertificatePending, Epoch, HexEncodedKey, ProtocolMessage, StakeDistribution,
623+
};
624+
use mithril_common::test_utils::MithrilFixtureBuilder;
625+
use mithril_common::{
626+
entities::ProtocolMessagePartKey, store::StakeStorer, test_utils::fake_data,
626627
};
627-
use mithril_common::{entities::ProtocolMessagePartKey, fake_data, store::StakeStorer};
628628
use mithril_common::{BeaconProviderImpl, CardanoNetwork};
629629
use std::collections::HashMap;
630630
use std::path::Path;
@@ -696,10 +696,18 @@ pub mod tests {
696696

697697
#[tokio::test]
698698
async fn test_update_stake_distribution() {
699-
let (deps, config) = initialize_dependencies().await;
699+
let (mut deps, config) = initialize_dependencies().await;
700+
let chain_observer = Arc::new(FakeObserver::default());
701+
deps.chain_observer = chain_observer.clone();
700702
let deps = Arc::new(deps);
701703
let runner = AggregatorRunner::new(config, deps.clone());
702704
let beacon = runner.get_beacon_from_chain().await.unwrap();
705+
let fixture = MithrilFixtureBuilder::default().with_signers(5).build();
706+
let expected = fixture.stake_distribution();
707+
708+
chain_observer
709+
.set_signers(fixture.signers_with_stake())
710+
.await;
703711
runner
704712
.update_beacon(&beacon)
705713
.await
@@ -709,13 +717,6 @@ pub mod tests {
709717
.await
710718
.expect("updating stake distribution should not return an error");
711719

712-
let current_stake_distribution = deps
713-
.chain_observer
714-
.get_current_stake_distribution()
715-
.await
716-
.unwrap()
717-
.expect("The stake distribution should not be None.");
718-
719720
let saved_stake_distribution = deps
720721
.stake_store
721722
.get_stakes(beacon.epoch.offset_to_recording_epoch())
@@ -728,13 +729,7 @@ pub mod tests {
728729
)
729730
});
730731

731-
assert_eq!(
732-
current_stake_distribution.len(),
733-
saved_stake_distribution.len()
734-
);
735-
for (party_id, stake) in current_stake_distribution.iter() {
736-
assert_eq!(stake, saved_stake_distribution.get(party_id).unwrap());
737-
}
732+
assert_eq!(expected, saved_stake_distribution);
738733
}
739734

740735
#[tokio::test]
@@ -815,11 +810,11 @@ pub mod tests {
815810
let beacon = runner.get_beacon_from_chain().await.unwrap();
816811
runner.update_beacon(&beacon).await.unwrap();
817812

818-
let signers = fake_data::signers_with_stakes(5);
819-
let current_signers = signers[1..3].to_vec();
820-
let next_signers = signers[2..5].to_vec();
813+
let fixture = MithrilFixtureBuilder::default().with_signers(5).build();
814+
let current_signers = fixture.signers_with_stake()[1..3].to_vec();
815+
let next_signers = fixture.signers_with_stake()[2..5].to_vec();
821816
let protocol_parameters = fake_data::protocol_parameters();
822-
deps.simulate_genesis(
817+
deps.prepare_for_genesis(
823818
current_signers.clone(),
824819
next_signers.clone(),
825820
&protocol_parameters.clone(),
@@ -853,17 +848,12 @@ pub mod tests {
853848
let beacon = runner.get_beacon_from_chain().await.unwrap();
854849
runner.update_beacon(&beacon).await.unwrap();
855850

856-
let protocol_parameters = fake_data::protocol_parameters();
857-
let signers = setup_signers(5, &protocol_parameters.clone().into())
858-
.into_iter()
859-
.map(|s| s.0)
860-
.collect::<Vec<SignerWithStake>>();
861-
let current_signers = signers[1..3].to_vec();
862-
let next_signers = signers[2..5].to_vec();
863-
deps.simulate_genesis(
864-
current_signers.clone(),
865-
next_signers.clone(),
866-
&protocol_parameters.clone(),
851+
let fixture = MithrilFixtureBuilder::default().with_signers(5).build();
852+
853+
deps.prepare_for_genesis(
854+
fixture.signers_with_stake(),
855+
fixture.signers_with_stake(),
856+
&fixture.protocol_parameters(),
867857
)
868858
.await;
869859

@@ -902,7 +892,7 @@ pub mod tests {
902892

903893
let mut expected = WorkingCertificate::from_pending_certificate(
904894
&certificate_pending,
905-
&current_signers,
895+
&fixture.signers_with_stake(),
906896
&message,
907897
&aggregate_verification_key,
908898
&sut.initiated_at,
@@ -956,18 +946,15 @@ pub mod tests {
956946
let (deps, config) = initialize_dependencies().await;
957947
let deps = Arc::new(deps);
958948
let runner = AggregatorRunner::new(config, deps.clone());
959-
let beacon = runner.get_beacon_from_chain().await.unwrap();
960949
let digest = "1+2+3+4=10".to_string();
961-
runner.update_beacon(&beacon).await.unwrap();
962-
for epoch in [
963-
beacon.epoch.offset_to_signer_retrieval_epoch().unwrap(),
964-
beacon.epoch.offset_to_next_signer_retrieval_epoch(),
965-
] {
966-
deps.protocol_parameters_store
967-
.save_protocol_parameters(epoch, fake_data::protocol_parameters())
968-
.await
969-
.unwrap();
970-
}
950+
runner.update_beacon(&fake_data::beacon()).await.unwrap();
951+
let fixture = MithrilFixtureBuilder::default().build();
952+
deps.prepare_for_genesis(
953+
fixture.signers_with_stake(),
954+
fixture.signers_with_stake(),
955+
&fixture.protocol_parameters(),
956+
)
957+
.await;
971958

972959
runner
973960
.update_message_in_multisigner(digest)
@@ -1061,15 +1048,8 @@ pub mod tests {
10611048
.expect_get_multi_signature()
10621049
.return_once(move || Ok(Some(multi_signature)));
10631050
deps.multi_signer = Arc::new(RwLock::new(mock_multi_signer));
1064-
let certificate_store = deps.certificate_store.clone();
1051+
deps.init_state_from_chain(&certificate_chain, vec![]).await;
10651052
let runner = AggregatorRunner::new(config, Arc::new(deps));
1066-
for certificate in certificate_chain[1..].iter().rev() {
1067-
certificate_store
1068-
.as_ref()
1069-
.save(certificate.to_owned())
1070-
.await
1071-
.expect("save certificate to store should not fail");
1072-
}
10731053

10741054
let certificate = runner
10751055
.create_and_save_certificate(&working_certificate)

mithril-aggregator/src/runtime/state_machine.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ mod tests {
322322

323323
use super::super::runner::MockAggregatorRunner;
324324
use super::*;
325-
use mithril_common::fake_data;
325+
use mithril_common::test_utils::fake_data;
326326
use mockall::predicate;
327327

328328
async fn init_runtime(

0 commit comments

Comments
 (0)