Skip to content

Commit 308e827

Browse files
authored
Merge pull request #2370 from input-output-hk/sfa/2360/reduce_flakiness_in_the_ci
Reduce flakiness in the ci
2 parents 224d552 + af37a52 commit 308e827

37 files changed

+365
-199
lines changed

Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mithril-aggregator/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "mithril-aggregator"
3-
version = "0.7.14"
3+
version = "0.7.15"
44
description = "A Mithril Aggregator server"
55
authors = { workspace = true }
66
edition = { workspace = true }

mithril-aggregator/src/commands/database_command.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ impl MigrateCommand {
4949
environment: ExecutionEnvironment::Production,
5050
data_stores_directory: self.stores_directory.clone(),
5151
// Temporary solution to avoid the need to provide a full configuration
52-
..Configuration::new_sample()
52+
..Configuration::new_sample(std::env::temp_dir())
5353
};
5454
debug!(root_logger, "DATABASE MIGRATE command"; "config" => format!("{config:?}"));
5555
println!(

mithril-aggregator/src/configuration.rs

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ impl Default for ZstandardCompressionParameters {
233233

234234
impl Configuration {
235235
/// Create a sample configuration mainly for tests
236-
pub fn new_sample() -> Self {
236+
pub fn new_sample(tmp_path: PathBuf) -> Self {
237237
let genesis_verification_key = ProtocolGenesisSigner::create_deterministic_genesis_signer()
238238
.create_genesis_verifier()
239239
.to_verification_key();
@@ -263,8 +263,9 @@ impl Configuration {
263263
// crate directory.
264264
// Know issue:
265265
// - There may be collision of the `snapshot_directory` between tests. Tests that
266-
// depend on the `snapshot_directory` should specify their own.
267-
snapshot_directory: std::env::temp_dir(),
266+
// depend on the `snapshot_directory` should specify their own,
267+
// and they can use the `temp_dir` macro for that.
268+
snapshot_directory: tmp_path,
268269
data_stores_directory: PathBuf::from(":memory:"),
269270
genesis_verification_key: genesis_verification_key.to_json_hex().unwrap(),
270271
reset_digests_cache: false,
@@ -592,14 +593,16 @@ impl Source for DefaultConfiguration {
592593

593594
#[cfg(test)]
594595
mod test {
596+
use mithril_common::temp_dir;
597+
595598
use super::*;
596599

597600
#[test]
598601
fn safe_epoch_retention_limit_wont_change_a_value_higher_than_three() {
599602
for limit in 4..=10u64 {
600603
let configuration = Configuration {
601604
store_retention_limit: Some(limit as usize),
602-
..Configuration::new_sample()
605+
..Configuration::new_sample(temp_dir!())
603606
};
604607
assert_eq!(configuration.safe_epoch_retention_limit(), Some(limit));
605608
}
@@ -609,7 +612,7 @@ mod test {
609612
fn safe_epoch_retention_limit_wont_change_a_none_value() {
610613
let configuration = Configuration {
611614
store_retention_limit: None,
612-
..Configuration::new_sample()
615+
..Configuration::new_sample(temp_dir!())
613616
};
614617
assert_eq!(configuration.safe_epoch_retention_limit(), None);
615618
}
@@ -619,7 +622,7 @@ mod test {
619622
for limit in 0..=3 {
620623
let configuration = Configuration {
621624
store_retention_limit: Some(limit),
622-
..Configuration::new_sample()
625+
..Configuration::new_sample(temp_dir!())
623626
};
624627
assert_eq!(configuration.safe_epoch_retention_limit(), Some(3));
625628
}
@@ -645,7 +648,7 @@ mod test {
645648
fn compute_allowed_signed_entity_types_discriminants_append_default_discriminants() {
646649
let config = Configuration {
647650
signed_entity_types: None,
648-
..Configuration::new_sample()
651+
..Configuration::new_sample(temp_dir!())
649652
};
650653

651654
assert_eq!(
@@ -660,14 +663,14 @@ mod test {
660663
fn allow_http_serve_directory() {
661664
let config = Configuration {
662665
snapshot_uploader_type: SnapshotUploaderType::Local,
663-
..Configuration::new_sample()
666+
..Configuration::new_sample(temp_dir!())
664667
};
665668

666669
assert!(config.allow_http_serve_directory());
667670

668671
let config = Configuration {
669672
snapshot_uploader_type: SnapshotUploaderType::Gcp,
670-
..Configuration::new_sample()
673+
..Configuration::new_sample(temp_dir!())
671674
};
672675

673676
assert!(!config.allow_http_serve_directory());
@@ -679,7 +682,7 @@ mod test {
679682
server_ip: "1.2.3.4".to_string(),
680683
server_port: 5678,
681684
public_server_url: None,
682-
..Configuration::new_sample()
685+
..Configuration::new_sample(temp_dir!())
683686
};
684687

685688
assert_eq!(
@@ -694,7 +697,7 @@ mod test {
694697
server_ip: "1.2.3.4".to_string(),
695698
server_port: 5678,
696699
public_server_url: Some("https://example.com".to_string()),
697-
..Configuration::new_sample()
700+
..Configuration::new_sample(temp_dir!())
698701
};
699702

700703
assert_eq!(
@@ -709,7 +712,7 @@ mod test {
709712
server_ip: "1.2.3.4".to_string(),
710713
server_port: 6789,
711714
public_server_url: None,
712-
..Configuration::new_sample()
715+
..Configuration::new_sample(temp_dir!())
713716
};
714717

715718
let joined_url = config
@@ -730,7 +733,7 @@ mod test {
730733
public_server_url: Some(format!(
731734
"https://example.com/{subpath_without_trailing_slash}"
732735
)),
733-
..Configuration::new_sample()
736+
..Configuration::new_sample(temp_dir!())
734737
};
735738

736739
let joined_url = config.get_server_url().unwrap().join("some/path").unwrap();
@@ -744,7 +747,7 @@ mod test {
744747
fn is_slave_aggregator_returns_true_when_in_slave_mode() {
745748
let config = Configuration {
746749
master_aggregator_endpoint: Some("some_endpoint".to_string()),
747-
..Configuration::new_sample()
750+
..Configuration::new_sample(temp_dir!())
748751
};
749752

750753
assert!(config.is_slave_aggregator());
@@ -754,7 +757,7 @@ mod test {
754757
fn is_slave_aggregator_returns_false_when_in_master_mode() {
755758
let config = Configuration {
756759
master_aggregator_endpoint: None,
757-
..Configuration::new_sample()
760+
..Configuration::new_sample(temp_dir!())
758761
};
759762

760763
assert!(!config.is_slave_aggregator());

mithril-aggregator/src/dependency_injection/builder/enablers/cardano_node.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ impl DependenciesBuilder {
184184

185185
#[cfg(test)]
186186
mod tests {
187-
use mithril_common::entities::SignedEntityTypeDiscriminants;
187+
use mithril_common::{entities::SignedEntityTypeDiscriminants, temp_dir};
188188

189189
use crate::Configuration;
190190

@@ -211,7 +211,7 @@ mod tests {
211211
) {
212212
let configuration = Configuration {
213213
signed_entity_types: Some(signed_entity_types),
214-
..Configuration::new_sample()
214+
..Configuration::new_sample(temp_dir!())
215215
};
216216
let mut dep_builder = DependenciesBuilder::new_with_stdout_logger(configuration);
217217

mithril-aggregator/src/dependency_injection/builder/protocol/artifacts.rs

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -409,7 +409,7 @@ impl DependenciesBuilder {
409409

410410
#[cfg(test)]
411411
mod tests {
412-
use mithril_common::test_utils::TempDir;
412+
use mithril_common::temp_dir_create;
413413
use mithril_persistence::sqlite::ConnectionBuilder;
414414

415415
use crate::dependency_injection::builder::CARDANO_DB_ARTIFACTS_DIR;
@@ -419,21 +419,17 @@ mod tests {
419419

420420
#[tokio::test]
421421
async fn if_not_local_uploader_create_cardano_database_immutable_dirs() {
422-
let snapshot_directory = TempDir::create(
423-
"builder",
424-
"if_not_local_uploader_create_cardano_database_immutable_dirs",
425-
);
422+
let snapshot_directory = temp_dir_create!();
426423
let cdb_dir = snapshot_directory.join(CARDANO_DB_ARTIFACTS_DIR);
427424
let ancillary_dir = cdb_dir.join("ancillary");
428425
let immutable_dir = cdb_dir.join("immutable");
429426
let digests_dir = cdb_dir.join("digests");
430427

431428
let mut dep_builder = {
432429
let config = Configuration {
433-
snapshot_directory,
434430
// Test environment yield dumb uploaders
435431
environment: ExecutionEnvironment::Test,
436-
..Configuration::new_sample()
432+
..Configuration::new_sample(snapshot_directory)
437433
};
438434

439435
DependenciesBuilder::new_with_stdout_logger(config)
@@ -455,22 +451,18 @@ mod tests {
455451

456452
#[tokio::test]
457453
async fn if_local_uploader_creates_all_cardano_database_subdirs() {
458-
let snapshot_directory = TempDir::create(
459-
"builder",
460-
"if_local_uploader_creates_all_cardano_database_subdirs",
461-
);
454+
let snapshot_directory = temp_dir_create!();
462455
let cdb_dir = snapshot_directory.join(CARDANO_DB_ARTIFACTS_DIR);
463456
let ancillary_dir = cdb_dir.join("ancillary");
464457
let immutable_dir = cdb_dir.join("immutable");
465458
let digests_dir = cdb_dir.join("digests");
466459

467460
let mut dep_builder = {
468461
let config = Configuration {
469-
snapshot_directory,
470462
// Must use production environment to make `snapshot_uploader_type` effective
471463
environment: ExecutionEnvironment::Production,
472464
snapshot_uploader_type: SnapshotUploaderType::Local,
473-
..Configuration::new_sample()
465+
..Configuration::new_sample(snapshot_directory)
474466
};
475467

476468
DependenciesBuilder::new_with_stdout_logger(config)

mithril-aggregator/src/dependency_injection/containers.rs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -310,10 +310,23 @@ impl DependencyContainer {
310310

311311
#[cfg(test)]
312312
pub(crate) mod tests {
313+
314+
use std::path::PathBuf;
315+
313316
use crate::{dependency_injection::DependenciesBuilder, Configuration, DependencyContainer};
314317

315-
pub async fn initialize_dependencies() -> DependencyContainer {
316-
let config = Configuration::new_sample();
318+
/// Initialize dependency container with a unique temporary snapshot directory build from test path.
319+
/// This macro should used directly in a function test to be able to retrieve the function name.
320+
#[macro_export]
321+
macro_rules! initialize_dependencies {
322+
() => {{
323+
initialize_dependencies(mithril_common::temp_dir!())
324+
}};
325+
}
326+
327+
pub async fn initialize_dependencies(tmp_path: PathBuf) -> DependencyContainer {
328+
let config = Configuration::new_sample(tmp_path);
329+
317330
let mut builder = DependenciesBuilder::new_with_stdout_logger(config);
318331

319332
builder.build_dependency_container().await.unwrap()

mithril-aggregator/src/http_server/routes/artifact_routes/cardano_database.rs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,9 @@ mod tests {
202202
.expect_get_cardano_database_list_message()
203203
.return_once(|_| Ok(vec![CardanoDatabaseSnapshotListItemMessage::dummy()]))
204204
.once();
205-
let mut dependency_manager = initialize_dependencies().await;
205+
206+
let mut dependency_manager = initialize_dependencies!().await;
207+
206208
dependency_manager.message_service = Arc::new(mock_http_message_service);
207209

208210
let method = Method::GET.as_str();
@@ -235,7 +237,7 @@ mod tests {
235237
.expect_get_cardano_database_list_message()
236238
.return_once(|_| Err(HydrationError::InvalidData("invalid data".to_string()).into()))
237239
.once();
238-
let mut dependency_manager = initialize_dependencies().await;
240+
let mut dependency_manager = initialize_dependencies!().await;
239241
dependency_manager.message_service = Arc::new(mock_http_message_service);
240242

241243
let method = Method::GET.as_str();
@@ -266,7 +268,7 @@ mod tests {
266268
) {
267269
let method = Method::GET.as_str();
268270
let path = "/artifact/cardano-database/{hash}";
269-
let dependency_manager = Arc::new(initialize_dependencies().await);
271+
let dependency_manager = Arc::new(initialize_dependencies!().await);
270272
let initial_counter_value = dependency_manager
271273
.metrics_service
272274
.get_artifact_detail_cardano_database_total_served_since_startup()
@@ -296,7 +298,7 @@ mod tests {
296298
.expect_get_cardano_database_message()
297299
.return_once(|_| Ok(Some(CardanoDatabaseSnapshotMessage::dummy())))
298300
.once();
299-
let mut dependency_manager = initialize_dependencies().await;
301+
let mut dependency_manager = initialize_dependencies!().await;
300302
dependency_manager.message_service = Arc::new(mock_http_message_service);
301303

302304
let method = Method::GET.as_str();
@@ -330,7 +332,7 @@ mod tests {
330332
.expect_get_cardano_database_message()
331333
.return_once(|_| Ok(None))
332334
.once();
333-
let mut dependency_manager = initialize_dependencies().await;
335+
let mut dependency_manager = initialize_dependencies!().await;
334336
dependency_manager.message_service = Arc::new(mock_http_message_service);
335337

336338
let method = Method::GET.as_str();
@@ -363,7 +365,7 @@ mod tests {
363365
.expect_get_cardano_database_message()
364366
.return_once(|_| Err(HydrationError::InvalidData("invalid data".to_string()).into()))
365367
.once();
366-
let mut dependency_manager = initialize_dependencies().await;
368+
let mut dependency_manager = initialize_dependencies!().await;
367369
dependency_manager.message_service = Arc::new(mock_http_message_service);
368370

369371
let method = Method::GET.as_str();
@@ -396,7 +398,7 @@ mod tests {
396398
.expect_get_cardano_database_digest_list_message()
397399
.return_once(|| Ok(vec![CardanoDatabaseDigestListItemMessage::dummy()]))
398400
.once();
399-
let mut dependency_manager = initialize_dependencies().await;
401+
let mut dependency_manager = initialize_dependencies!().await;
400402
dependency_manager.message_service = Arc::new(mock_http_message_service);
401403

402404
let method = Method::GET.as_str();
@@ -429,7 +431,7 @@ mod tests {
429431
.expect_get_cardano_database_digest_list_message()
430432
.return_once(|| Err(HydrationError::InvalidData("invalid data".to_string()).into()))
431433
.once();
432-
let mut dependency_manager = initialize_dependencies().await;
434+
let mut dependency_manager = initialize_dependencies!().await;
433435
dependency_manager.message_service = Arc::new(mock_http_message_service);
434436

435437
let method = Method::GET.as_str();

0 commit comments

Comments
 (0)