Skip to content

Commit df9d556

Browse files
committed
Use MithrilFixtureBuilder with aggregator tests
1 parent b8e4ddc commit df9d556

File tree

13 files changed

+154
-165
lines changed

13 files changed

+154
-165
lines changed

mithril-aggregator/src/dependency.rs

Lines changed: 1 addition & 1 deletion
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>,

mithril-aggregator/src/multi_signer.rs

Lines changed: 15 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -729,6 +729,7 @@ mod tests {
729729
crypto_helper::tests_setup::*,
730730
fake_data,
731731
store::{adapter::MemoryAdapter, StakeStore},
732+
test_utils::MithrilFixtureBuilder,
732733
};
733734
use std::{collections::HashMap, sync::Arc};
734735

@@ -861,17 +862,9 @@ mod tests {
861862
#[tokio::test]
862863
async fn test_multi_signer_stake_distribution_ok() {
863864
let mut multi_signer = setup_multi_signer().await;
865+
let fixture = MithrilFixtureBuilder::default().with_signers(5).build();
866+
let mut stake_distribution_expected = fixture.protocol_stake_distribution();
864867

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::<_>();
875868
stake_distribution_expected.sort_by_key(|k| k.0.clone());
876869
multi_signer
877870
.update_stake_distribution(&stake_distribution_expected)
@@ -918,22 +911,15 @@ mod tests {
918911
.await
919912
.expect("update protocol parameters failed");
920913

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

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::<_>();
932918
multi_signer
933-
.update_stake_distribution(stake_distribution)
919+
.update_stake_distribution(&stake_distribution)
934920
.await
935921
.expect("update stake distribution failed");
936-
for (signer_with_stake, _, _) in &signers {
922+
for signer_with_stake in &fixture.signers_with_stake() {
937923
verification_key_store
938924
.save_verification_key(
939925
start_epoch.offset_to_recording_epoch(),
@@ -959,17 +945,20 @@ mod tests {
959945
let mut signatures = Vec::new();
960946

961947
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()) {
948+
for signer_fixture in fixture.signers_fixture() {
949+
if let Some(signature) = signer_fixture
950+
.protocol_signer
951+
.sign(message.compute_hash().as_bytes())
952+
{
964953
let won_indexes = signature.indexes.clone();
965954

966955
signatures.push(entities::SingleSignatures::new(
967-
signer_with_stake.party_id.to_owned(),
956+
signer_fixture.signer_with_stake.party_id.to_owned(),
968957
key_encode_hex(signature).unwrap(),
969958
won_indexes,
970959
));
971960

972-
expected_certificate_signers.push(signer_with_stake.to_owned())
961+
expected_certificate_signers.push(signer_fixture.signer_with_stake.to_owned())
973962
}
974963
}
975964

mithril-aggregator/src/runtime/runner.rs

Lines changed: 33 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -615,15 +615,13 @@ 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,
626623
};
624+
use mithril_common::test_utils::MithrilFixtureBuilder;
627625
use mithril_common::{entities::ProtocolMessagePartKey, fake_data, store::StakeStorer};
628626
use mithril_common::{BeaconProviderImpl, CardanoNetwork};
629627
use std::collections::HashMap;
@@ -696,10 +694,18 @@ pub mod tests {
696694

697695
#[tokio::test]
698696
async fn test_update_stake_distribution() {
699-
let (deps, config) = initialize_dependencies().await;
697+
let (mut deps, config) = initialize_dependencies().await;
698+
let chain_observer = Arc::new(FakeObserver::default());
699+
deps.chain_observer = chain_observer.clone();
700700
let deps = Arc::new(deps);
701701
let runner = AggregatorRunner::new(config, deps.clone());
702702
let beacon = runner.get_beacon_from_chain().await.unwrap();
703+
let fixture = MithrilFixtureBuilder::default().with_signers(5).build();
704+
let expected = fixture.stake_distribution();
705+
706+
chain_observer
707+
.set_signers(fixture.signers_with_stake())
708+
.await;
703709
runner
704710
.update_beacon(&beacon)
705711
.await
@@ -709,13 +715,6 @@ pub mod tests {
709715
.await
710716
.expect("updating stake distribution should not return an error");
711717

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-
719718
let saved_stake_distribution = deps
720719
.stake_store
721720
.get_stakes(beacon.epoch.offset_to_recording_epoch())
@@ -728,13 +727,7 @@ pub mod tests {
728727
)
729728
});
730729

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-
}
730+
assert_eq!(expected, saved_stake_distribution);
738731
}
739732

740733
#[tokio::test]
@@ -815,11 +808,11 @@ pub mod tests {
815808
let beacon = runner.get_beacon_from_chain().await.unwrap();
816809
runner.update_beacon(&beacon).await.unwrap();
817810

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();
811+
let fixture = MithrilFixtureBuilder::default().with_signers(5).build();
812+
let current_signers = fixture.signers_with_stake()[1..3].to_vec();
813+
let next_signers = fixture.signers_with_stake()[2..5].to_vec();
821814
let protocol_parameters = fake_data::protocol_parameters();
822-
deps.simulate_genesis(
815+
deps.prepare_for_genesis(
823816
current_signers.clone(),
824817
next_signers.clone(),
825818
&protocol_parameters.clone(),
@@ -853,17 +846,12 @@ pub mod tests {
853846
let beacon = runner.get_beacon_from_chain().await.unwrap();
854847
runner.update_beacon(&beacon).await.unwrap();
855848

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(),
849+
let fixture = MithrilFixtureBuilder::default().with_signers(5).build();
850+
851+
deps.prepare_for_genesis(
852+
fixture.signers_with_stake(),
853+
fixture.signers_with_stake(),
854+
&fixture.protocol_parameters(),
867855
)
868856
.await;
869857

@@ -902,7 +890,7 @@ pub mod tests {
902890

903891
let mut expected = WorkingCertificate::from_pending_certificate(
904892
&certificate_pending,
905-
&current_signers,
893+
&fixture.signers_with_stake(),
906894
&message,
907895
&aggregate_verification_key,
908896
&sut.initiated_at,
@@ -956,18 +944,15 @@ pub mod tests {
956944
let (deps, config) = initialize_dependencies().await;
957945
let deps = Arc::new(deps);
958946
let runner = AggregatorRunner::new(config, deps.clone());
959-
let beacon = runner.get_beacon_from_chain().await.unwrap();
960947
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-
}
948+
runner.update_beacon(&fake_data::beacon()).await.unwrap();
949+
let fixture = MithrilFixtureBuilder::default().build();
950+
deps.prepare_for_genesis(
951+
fixture.signers_with_stake(),
952+
fixture.signers_with_stake(),
953+
&fixture.protocol_parameters(),
954+
)
955+
.await;
971956

972957
runner
973958
.update_message_in_multisigner(digest)
@@ -1061,15 +1046,8 @@ pub mod tests {
10611046
.expect_get_multi_signature()
10621047
.return_once(move || Ok(Some(multi_signature)));
10631048
deps.multi_signer = Arc::new(RwLock::new(mock_multi_signer));
1064-
let certificate_store = deps.certificate_store.clone();
1049+
deps.init_state_from_chain(&certificate_chain, vec![]).await;
10651050
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-
}
10731051

10741052
let certificate = runner
10751053
.create_and_save_certificate(&working_certificate)

mithril-aggregator/src/signer_registerer.rs

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -201,10 +201,9 @@ mod tests {
201201

202202
use mithril_common::{
203203
chain_observer::FakeObserver,
204-
crypto_helper::tests_setup::setup_signers,
205204
entities::{Epoch, PartyId, Signer},
206-
fake_data,
207205
store::adapter::MemoryAdapter,
206+
test_utils::MithrilFixtureBuilder,
208207
};
209208

210209
use crate::{
@@ -222,13 +221,9 @@ mod tests {
222221
let signer_registerer =
223222
MithrilSignerRegisterer::new(Arc::new(chain_observer), verification_key_store.clone());
224223
let registration_epoch = Epoch(1);
225-
let signers = setup_signers(5, &fake_data::protocol_parameters().into());
226-
let signer_to_register: Signer = signers[0].0.clone().into();
227-
assert!(signer_to_register.operational_certificate.is_some());
228-
let stake_distribution = signers
229-
.into_iter()
230-
.map(|s| (s.0.party_id, s.0.stake))
231-
.collect::<HashMap<_, _>>();
224+
let fixture = MithrilFixtureBuilder::default().with_signers(5).build();
225+
let signer_to_register: Signer = fixture.signers()[0].to_owned();
226+
let stake_distribution = fixture.stake_distribution();
232227

233228
signer_registerer
234229
.open_registration_round(registration_epoch, stake_distribution)
@@ -264,13 +259,12 @@ mod tests {
264259
let signer_registerer =
265260
MithrilSignerRegisterer::new(Arc::new(chain_observer), verification_key_store.clone());
266261
let registration_epoch = Epoch(1);
267-
let signers = setup_signers(5, &fake_data::protocol_parameters().into());
268-
let signer_to_register: Signer = signers[1].0.clone().into();
269-
assert!(signer_to_register.operational_certificate.is_none());
270-
let stake_distribution = signers
271-
.into_iter()
272-
.map(|s| (s.0.party_id, s.0.stake))
273-
.collect::<HashMap<_, _>>();
262+
let fixture = MithrilFixtureBuilder::default()
263+
.with_signers(5)
264+
.disable_signers_certification()
265+
.build();
266+
let signer_to_register: Signer = fixture.signers()[0].to_owned();
267+
let stake_distribution = fixture.stake_distribution();
274268

275269
signer_registerer
276270
.open_registration_round(registration_epoch, stake_distribution)
@@ -305,8 +299,8 @@ mod tests {
305299
));
306300
let signer_registerer =
307301
MithrilSignerRegisterer::new(Arc::new(chain_observer), verification_key_store.clone());
308-
let signers = setup_signers(5, &fake_data::protocol_parameters().into());
309-
let signer_to_register: Signer = signers[1].0.clone().into();
302+
let fixture = MithrilFixtureBuilder::default().with_signers(5).build();
303+
let signer_to_register: Signer = fixture.signers()[0].to_owned();
310304

311305
signer_registerer
312306
.register_signer(&signer_to_register)

mithril-aggregator/src/tools/genesis.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -159,9 +159,10 @@ mod tests {
159159

160160
use mithril_common::{
161161
certificate_chain::MithrilCertificateVerifier,
162-
crypto_helper::{tests_setup, ProtocolClerk, ProtocolGenesisSigner},
162+
crypto_helper::{ProtocolClerk, ProtocolGenesisSigner},
163163
fake_data,
164164
store::adapter::MemoryAdapter,
165+
test_utils::MithrilFixtureBuilder,
165166
};
166167

167168
use super::*;
@@ -179,10 +180,9 @@ mod tests {
179180
}
180181

181182
fn create_fake_genesis_avk() -> ProtocolAggregateVerificationKey {
182-
let protocol_parameters = tests_setup::setup_protocol_parameters();
183-
let signers = tests_setup::setup_signers(5, &protocol_parameters);
184-
let first_signer = &signers.first().unwrap().1;
185-
let clerk = ProtocolClerk::from_signer(first_signer);
183+
let fixture = MithrilFixtureBuilder::default().with_signers(5).build();
184+
let first_signer = fixture.signers_fixture()[0].clone().protocol_signer;
185+
let clerk = ProtocolClerk::from_signer(&first_signer);
186186
clerk.compute_avk()
187187
}
188188

mithril-aggregator/tests/certificate_chain.rs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@ mod test_extensions;
33
use std::collections::BTreeMap;
44

55
use mithril_aggregator::VerificationKeyStorer;
6-
use mithril_common::chain_observer::ChainObserver;
7-
use mithril_common::crypto_helper::{tests_setup, ProtocolPartyId, ProtocolStake};
8-
use mithril_common::entities::{ProtocolParameters, SignerWithStake};
6+
use mithril_common::{
7+
chain_observer::ChainObserver,
8+
crypto_helper::{ProtocolPartyId, ProtocolStake},
9+
entities::ProtocolParameters,
10+
test_utils::MithrilFixtureBuilder,
11+
};
912
use test_extensions::RuntimeTester;
1013

1114
#[tokio::test]
@@ -18,18 +21,19 @@ async fn certificate_chain() {
1821
let mut tester = RuntimeTester::build(protocol_parameters.clone()).await;
1922

2023
comment!("Create signers & declare stake distribution");
21-
let signers = tests_setup::setup_signers(5, &protocol_parameters.clone().into());
22-
let mut signers_with_stake: Vec<SignerWithStake> = signers
23-
.iter()
24-
.map(|(signer_with_stake, _, _)| signer_with_stake.to_owned())
25-
.collect();
24+
let fixture = MithrilFixtureBuilder::default()
25+
.with_signers(5)
26+
.with_protocol_parameters(protocol_parameters.clone())
27+
.build();
28+
let signers = fixture.signers_fixture();
29+
let mut signers_with_stake = fixture.signers_with_stake();
2630
tester
2731
.chain_observer
2832
.set_signers(signers_with_stake.clone())
2933
.await;
3034
tester
3135
.deps
32-
.simulate_genesis(
36+
.prepare_for_genesis(
3337
signers_with_stake.clone(),
3438
signers_with_stake.clone(),
3539
&protocol_parameters,

0 commit comments

Comments
 (0)