Skip to content

Commit 3314ff6

Browse files
committed
fix tests
1 parent a58a9af commit 3314ff6

File tree

10 files changed

+142
-400
lines changed

10 files changed

+142
-400
lines changed

mithril-aggregator/src/configuration.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ pub const LIST_SNAPSHOTS_MAX_ITEMS: usize = 20;
1818
const SQLITE_FILE: &str = "aggregator.sqlite3";
1919

2020
/// Different kinds of execution environments
21-
#[derive(Debug, Serialize, Deserialize, Clone)]
21+
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
2222
pub enum ExecutionEnvironment {
2323
/// Test environment, maximum logging, memory stores etc.
2424
Test,
@@ -133,7 +133,7 @@ impl Default for Configuration {
133133
cardano_cli_path: PathBuf::new(),
134134
cardano_node_socket_path: PathBuf::new(),
135135
network_magic: Some(42),
136-
network: "whatever".to_string(),
136+
network: "devnet".to_string(),
137137
protocol_parameters: ProtocolParameters {
138138
k: 5,
139139
m: 100,

mithril-aggregator/src/dependency.rs

Lines changed: 6 additions & 144 deletions
Original file line numberDiff line numberDiff line change
@@ -283,153 +283,15 @@ impl DependencyManager {
283283
#[cfg(test)]
284284
pub mod tests {
285285
use crate::{
286-
configuration::ExecutionEnvironment, database::provider::StakePoolStore,
287-
event_store::TransmitterService,
288-
stake_distribution_service::MithrilStakeDistributionService, AggregatorConfig,
289-
CertificatePendingStore, CertificateStore, Configuration, DependencyManager,
290-
DumbSnapshotUploader, DumbSnapshotter, LocalSnapshotStore, MithrilSignerRegisterer,
291-
MultiSignerImpl, ProtocolParametersStore, SingleSignatureStore, SnapshotUploaderType,
292-
VerificationKeyStore,
293-
};
294-
use mithril_common::{
295-
api_version::APIVersionProvider,
296-
certificate_chain::MithrilCertificateVerifier,
297-
chain_observer::FakeObserver,
298-
crypto_helper::{key_encode_hex, ProtocolGenesisSigner},
299-
digesters::{DumbImmutableDigester, DumbImmutableFileObserver},
300-
era::{
301-
adapters::{EraReaderAdapterType, EraReaderBootstrapAdapter},
302-
EraChecker, EraReader,
303-
},
304-
store::adapter::MemoryAdapter,
305-
test_utils::fake_data,
306-
BeaconProvider, BeaconProviderImpl, CardanoNetwork,
307-
};
308-
use sqlite::Connection;
309-
use std::{path::PathBuf, sync::Arc};
310-
use tokio::sync::{
311-
mpsc::{self},
312-
Mutex, RwLock,
286+
dependency_injection::DependenciesBuilder, AggregatorConfig, Configuration,
287+
DependencyManager,
313288
};
289+
use mithril_common::CardanoNetwork;
314290

315291
pub async fn initialize_dependencies() -> (DependencyManager, AggregatorConfig) {
316-
let genesis_signer = ProtocolGenesisSigner::create_deterministic_genesis_signer();
317-
let genesis_verifier = Arc::new(genesis_signer.create_genesis_verifier());
318-
let genesis_verification_key = genesis_verifier.to_verification_key();
319-
let config = Configuration {
320-
environment: ExecutionEnvironment::Test,
321-
cardano_cli_path: PathBuf::new(),
322-
cardano_node_socket_path: PathBuf::new(),
323-
network_magic: Some(42),
324-
network: "whatever".to_string(),
325-
protocol_parameters: fake_data::protocol_parameters(),
326-
url_snapshot_manifest: "https://storage.googleapis.com/cardano-testnet/snapshots.json"
327-
.to_string(),
328-
snapshot_uploader_type: SnapshotUploaderType::Local,
329-
snapshot_bucket_name: None,
330-
server_ip: "0.0.0.0".to_string(),
331-
server_port: 8000,
332-
run_interval: 5000,
333-
db_directory: PathBuf::new(),
334-
snapshot_directory: PathBuf::new(),
335-
data_stores_directory: PathBuf::new(),
336-
genesis_verification_key: key_encode_hex(genesis_verification_key).unwrap(),
337-
store_retention_limit: None,
338-
era_reader_adapter_type: EraReaderAdapterType::Bootstrap,
339-
era_reader_adapter_params: None,
340-
reset_digests_cache: Some(true),
341-
};
342-
let connection = Arc::new(Mutex::new(Connection::open(":memory:").unwrap()));
343-
let snapshot_store = Arc::new(LocalSnapshotStore::new(
344-
Box::new(MemoryAdapter::new(None).unwrap()),
345-
20,
346-
));
347-
let snapshot_uploader = Arc::new(DumbSnapshotUploader::new());
348-
let certificate_pending_store = Arc::new(CertificatePendingStore::new(Box::new(
349-
MemoryAdapter::new(None).unwrap(),
350-
)));
351-
let certificate_store = Arc::new(CertificateStore::new(Box::new(
352-
MemoryAdapter::new(None).unwrap(),
353-
)));
354-
let verification_key_store = Arc::new(VerificationKeyStore::new(
355-
Box::new(MemoryAdapter::new(None).unwrap()),
356-
config.store_retention_limit,
357-
));
358-
let single_signature_store = Arc::new(SingleSignatureStore::new(
359-
Box::new(MemoryAdapter::new(None).unwrap()),
360-
config.store_retention_limit,
361-
));
362-
let protocol_parameters_store = Arc::new(ProtocolParametersStore::new(
363-
Box::new(MemoryAdapter::new(None).unwrap()),
364-
None,
365-
));
366-
let stake_pool_store = Arc::new(StakePoolStore::new(connection.clone()));
367-
let multi_signer = MultiSignerImpl::new(
368-
verification_key_store.clone(),
369-
stake_pool_store.clone(),
370-
single_signature_store.clone(),
371-
protocol_parameters_store.clone(),
372-
);
373-
let multi_signer = Arc::new(RwLock::new(multi_signer));
374-
let immutable_file_observer = Arc::new(DumbImmutableFileObserver::default());
375-
let chain_observer = Arc::new(FakeObserver::default());
376-
let beacon_provider = Arc::new(BeaconProviderImpl::new(
377-
chain_observer.clone(),
378-
immutable_file_observer.clone(),
379-
CardanoNetwork::TestNet(42),
380-
));
381-
let stake_distribution_service = Arc::new(MithrilStakeDistributionService::new(
382-
stake_pool_store.clone(),
383-
chain_observer.clone(),
384-
));
385-
let certificate_verifier = Arc::new(MithrilCertificateVerifier::new(slog_scope::logger()));
386-
let signer_registerer = Arc::new(MithrilSignerRegisterer::new(
387-
chain_observer.clone(),
388-
verification_key_store.clone(),
389-
));
390-
let era_reader = Arc::new(EraReader::new(Arc::new(EraReaderBootstrapAdapter)));
391-
let era_epoch_token = era_reader
392-
.read_era_epoch_token(beacon_provider.get_current_beacon().await.unwrap().epoch)
393-
.await
394-
.unwrap();
395-
let era_checker = Arc::new(EraChecker::new(
396-
era_epoch_token.get_current_supported_era().unwrap(),
397-
era_epoch_token.get_current_epoch(),
398-
));
399-
let event_transmitter = {
400-
let (tx, mut _rx) = mpsc::unbounded_channel();
401-
Arc::new(TransmitterService::new(tx))
402-
};
403-
404-
let api_version_provider = Arc::new(APIVersionProvider::new(era_checker.clone()));
405-
406-
let dependency_manager = DependencyManager {
407-
sqlite_connection: connection,
408-
stake_store: stake_pool_store,
409-
config,
410-
snapshot_store,
411-
snapshot_uploader,
412-
multi_signer,
413-
certificate_pending_store,
414-
certificate_store,
415-
verification_key_store,
416-
single_signature_store,
417-
protocol_parameters_store,
418-
chain_observer,
419-
beacon_provider,
420-
immutable_file_observer,
421-
digester: Arc::new(DumbImmutableDigester::new("digest", true)),
422-
snapshotter: Arc::new(DumbSnapshotter::new()),
423-
certificate_verifier,
424-
genesis_verifier,
425-
signer_registerer: signer_registerer.clone(),
426-
signer_registration_round_opener: signer_registerer,
427-
era_checker,
428-
era_reader,
429-
event_transmitter,
430-
api_version_provider,
431-
stake_distribution_service,
432-
};
292+
let config = Configuration::default();
293+
let mut builder = DependenciesBuilder::new(config);
294+
let dependency_manager = builder.build_dependency_container().await.unwrap();
433295

434296
let config = AggregatorConfig::new(
435297
dependency_manager.config.run_interval,

mithril-aggregator/src/dependency_injection/builder.rs

Lines changed: 40 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,11 @@ use crate::{
4242
stake_distribution_service::{MithrilStakeDistributionService, StakeDistributionService},
4343
tools::{GcpFileUploader, GenesisToolsDependency},
4444
AggregatorConfig, AggregatorRunner, AggregatorRuntime, CertificatePendingStore,
45-
CertificateStore, Configuration, DependencyManager, DumbSnapshotter, GzipSnapshotter,
46-
LocalSnapshotStore, LocalSnapshotUploader, MithrilSignerRegisterer, MultiSigner,
47-
MultiSignerImpl, ProtocolParametersStore, ProtocolParametersStorer, RemoteSnapshotUploader,
48-
SingleSignatureStore, SnapshotStore, SnapshotUploader, SnapshotUploaderType, Snapshotter,
49-
VerificationKeyStore,
45+
CertificateStore, Configuration, DependencyManager, DumbSnapshotUploader, DumbSnapshotter,
46+
GzipSnapshotter, LocalSnapshotStore, LocalSnapshotUploader, MithrilSignerRegisterer,
47+
MultiSigner, MultiSignerImpl, ProtocolParametersStore, ProtocolParametersStorer,
48+
RemoteSnapshotUploader, SingleSignatureStore, SnapshotStore, SnapshotUploader,
49+
SnapshotUploaderType, Snapshotter, VerificationKeyStore,
5050
};
5151

5252
use super::{DependenciesBuilderError, Result};
@@ -123,6 +123,9 @@ pub struct DependenciesBuilder {
123123
/// Era checker service
124124
pub era_checker: Option<Arc<EraChecker>>,
125125

126+
/// Adapter for [EraReader]
127+
pub era_reader_adapter: Option<Arc<dyn EraReaderAdapter>>,
128+
126129
/// Era reader service
127130
pub era_reader: Option<Arc<EraReader>>,
128131

@@ -168,6 +171,7 @@ impl DependenciesBuilder {
168171
certificate_verifier: None,
169172
genesis_verifier: None,
170173
mithril_registerer: None,
174+
era_reader_adapter: None,
171175
era_checker: None,
172176
era_reader: None,
173177
event_transmitter: None,
@@ -270,27 +274,31 @@ impl DependenciesBuilder {
270274
}
271275

272276
async fn build_snapshot_uploader(&mut self) -> Result<Arc<dyn SnapshotUploader>> {
273-
match self.configuration.snapshot_uploader_type {
274-
SnapshotUploaderType::Gcp => {
275-
let bucket = self
276-
.configuration
277-
.snapshot_bucket_name
278-
.to_owned()
279-
.ok_or_else(|| {
280-
DependenciesBuilderError::MissingConfiguration(
281-
"snapshot_bucket_name".to_string(),
282-
)
283-
})?;
277+
if self.configuration.environment == ExecutionEnvironment::Production {
278+
match self.configuration.snapshot_uploader_type {
279+
SnapshotUploaderType::Gcp => {
280+
let bucket = self
281+
.configuration
282+
.snapshot_bucket_name
283+
.to_owned()
284+
.ok_or_else(|| {
285+
DependenciesBuilderError::MissingConfiguration(
286+
"snapshot_bucket_name".to_string(),
287+
)
288+
})?;
284289

285-
Ok(Arc::new(RemoteSnapshotUploader::new(
286-
Box::new(GcpFileUploader::new(bucket.clone())),
287-
bucket,
288-
)))
290+
Ok(Arc::new(RemoteSnapshotUploader::new(
291+
Box::new(GcpFileUploader::new(bucket.clone())),
292+
bucket,
293+
)))
294+
}
295+
SnapshotUploaderType::Local => Ok(Arc::new(LocalSnapshotUploader::new(
296+
self.configuration.get_server_url(),
297+
&self.configuration.snapshot_directory,
298+
))),
289299
}
290-
SnapshotUploaderType::Local => Ok(Arc::new(LocalSnapshotUploader::new(
291-
self.configuration.get_server_url(),
292-
&self.configuration.snapshot_directory,
293-
))),
300+
} else {
301+
Ok(Arc::new(DumbSnapshotUploader::new()))
294302
}
295303
}
296304

@@ -591,7 +599,7 @@ impl DependenciesBuilder {
591599
ExecutionEnvironment::Production => Arc::new(ImmutableFileSystemObserver::new(
592600
&self.configuration.db_directory,
593601
)),
594-
_ => Arc::new(DumbImmutableFileObserver::new()),
602+
_ => Arc::new(DumbImmutableFileObserver::default()),
595603
};
596604

597605
Ok(immutable_file_observer)
@@ -937,7 +945,8 @@ impl DependenciesBuilder {
937945
Ok(self.stake_distribution_service.as_ref().cloned().unwrap())
938946
}
939947

940-
async fn build_dependency_container(&mut self) -> Result<DependencyManager> {
948+
/// Return an unconfigured [DependencyManager]
949+
pub async fn build_dependency_container(&mut self) -> Result<DependencyManager> {
941950
let dependency_manager = DependencyManager {
942951
config: self.configuration.clone(),
943952
sqlite_connection: self.get_sqlite_connection().await?,
@@ -979,20 +988,21 @@ impl DependenciesBuilder {
979988
pub async fn create_aggregator_runner(&mut self) -> Result<AggregatorRuntime> {
980989
// initialize ProtocolParameters store if needed
981990
{
982-
let (work_epoch, epoch_to_sign, next_epoch_to_sign) = match self
991+
let current_epoch = self
983992
.get_chain_observer()
984993
.await?
985994
.get_current_epoch()
986995
.await
987996
.map_err(|e| DependenciesBuilderError::Initialization {
988-
message: "cannot create aggrgator runner".to_string(),
997+
message: "cannot create aggregator runner".to_string(),
989998
error: Some(e.into()),
990999
})?
9911000
.ok_or(DependenciesBuilderError::Initialization {
9921001
message: "cannot build aggrgator runner: impossible to retrieve current epoch"
9931002
.to_string(),
9941003
error: None,
995-
})? {
1004+
})?;
1005+
let (work_epoch, epoch_to_sign, next_epoch_to_sign) = match current_epoch {
9961006
Epoch(0) => (Epoch(0), Epoch(1), Epoch(2)),
9971007
epoch => (
9981008
epoch.offset_to_signer_retrieval_epoch().unwrap(),
@@ -1001,6 +1011,7 @@ impl DependenciesBuilder {
10011011
),
10021012
};
10031013
let protocol_parameters_store = self.get_protocol_parameters_store().await?;
1014+
10041015
if protocol_parameters_store
10051016
.get_protocol_parameters(work_epoch)
10061017
.await

mithril-aggregator/src/stake_distribution_service.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ mod tests {
238238
Arc::new(chain_observer),
239239
);
240240
let query =
241-
format!("insert into stake_pool (stake_pool_id, epoch, stake) values (?1, ?2, ?3)");
241+
"insert into stake_pool (stake_pool_id, epoch, stake) values (?1, ?2, ?3)".to_string();
242242
let stake_distribution: &[(&str, i64, i64); 9] = &[
243243
("pool1", 1, 1000),
244244
("pool2", 1, 1100),

mithril-aggregator/tests/certificate_chain.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@ async fn certificate_chain() {
2727
.set_signers(signers_with_stake.clone())
2828
.await;
2929
tester
30-
.deps
30+
.deps_builder
31+
.build_dependency_container()
32+
.await
33+
.unwrap()
3134
.prepare_for_genesis(
3235
signers_with_stake.clone(),
3336
signers_with_stake.clone(),
@@ -111,8 +114,10 @@ async fn certificate_chain() {
111114
"Checking that no signers are registered for the next epoch since they did not register"
112115
);
113116
let next_epoch_verification_keys = tester
114-
.deps
115-
.verification_key_store
117+
.deps_builder
118+
.get_verification_key_store()
119+
.await
120+
.unwrap()
116121
.get_verification_keys(new_epoch + 1)
117122
.await
118123
.expect("get_verification_keys should not fail");

mithril-aggregator/tests/create_certificate.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,10 @@ async fn create_certificate() {
2929
.set_signers(signers_with_stake.clone())
3030
.await;
3131
tester
32-
.deps
32+
.deps_builder
33+
.build_dependency_container()
34+
.await
35+
.unwrap()
3336
.prepare_for_genesis(
3437
signers_with_stake.clone(),
3538
signers_with_stake,

mithril-aggregator/tests/era_checker.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,10 @@ async fn testing_eras() {
5858
.set_signers(signers_with_stake.clone())
5959
.await;
6060
tester
61-
.deps
61+
.deps_builder
62+
.build_dependency_container()
63+
.await
64+
.unwrap()
6265
.prepare_for_genesis(
6366
signers_with_stake.clone(),
6467
signers_with_stake.clone(),

mithril-aggregator/tests/simple.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@ async fn simple_scenario() {
2727
.set_signers(signers_with_stake.clone())
2828
.await;
2929
tester
30-
.deps
30+
.deps_builder
31+
.build_dependency_container()
32+
.await
33+
.unwrap()
3134
.prepare_for_genesis(
3235
signers_with_stake.clone(),
3336
signers_with_stake.clone(),

0 commit comments

Comments
 (0)