Skip to content

Commit e5ed39a

Browse files
committed
Add a busy waiting of signed entity type for integration tests
1 parent f0b53d9 commit e5ed39a

File tree

3 files changed

+66
-0
lines changed

3 files changed

+66
-0
lines changed

mithril-aggregator/tests/test_extensions/aggregator_observer.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,4 +112,34 @@ impl AggregatorObserver {
112112
.signed_entity_config
113113
.time_point_to_signed_entity(discriminant, &time_point))
114114
}
115+
116+
pub async fn is_last_signed_entity(
117+
&self,
118+
signed_entity_type_expected: &SignedEntityType,
119+
) -> StdResult<bool> {
120+
match signed_entity_type_expected {
121+
SignedEntityType::CardanoImmutableFilesFull(_) => Ok(Some(signed_entity_type_expected)
122+
== self
123+
.signed_entity_service
124+
.get_last_signed_snapshots(1)
125+
.await?
126+
.first()
127+
.map(|s| &s.signed_entity_type)),
128+
SignedEntityType::MithrilStakeDistribution(_) => Ok(Some(signed_entity_type_expected)
129+
== self
130+
.signed_entity_service
131+
.get_last_signed_mithril_stake_distributions(1)
132+
.await?
133+
.first()
134+
.map(|s| &s.signed_entity_type)),
135+
SignedEntityType::CardanoTransactions(_, _) => Ok(Some(signed_entity_type_expected)
136+
== self
137+
.signed_entity_service
138+
.get_last_cardano_transaction_snapshot()
139+
.await?
140+
.map(|s| s.signed_entity_type)
141+
.as_ref()),
142+
_ => Ok(false),
143+
}
144+
}
115145
}

mithril-aggregator/tests/test_extensions/expected_certificate.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,8 @@ impl ExpectedCertificate {
5050
pub fn genesis_identifier(beacon: &CardanoDbBeacon) -> String {
5151
format!("genesis-{:?}", beacon)
5252
}
53+
54+
pub fn get_signed_type(&self) -> Option<SignedEntityType> {
55+
self.signed_type.clone()
56+
}
5357
}

mithril-aggregator/tests/test_extensions/runtime_tester.rs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use mithril_aggregator::{
99
AggregatorRuntime, Configuration, DependencyContainer, DumbSnapshotUploader, DumbSnapshotter,
1010
SignerRegistrationError,
1111
};
12+
use mithril_common::entities::SignedEntityType;
1213
use mithril_common::{
1314
cardano_block_scanner::{DumbBlockScanner, ScannedBlock},
1415
chain_observer::{ChainObserver, FakeObserver},
@@ -51,6 +52,13 @@ macro_rules! cycle_err {
5152
#[macro_export]
5253
macro_rules! assert_last_certificate_eq {
5354
( $tester:expr, $expected_certificate:expr ) => {{
55+
if let Some(signed_type) = $expected_certificate.get_signed_type() {
56+
$tester
57+
.wait_until_signed_entity(&signed_type)
58+
.await
59+
.unwrap();
60+
}
61+
5462
let last_certificate = RuntimeTester::get_last_expected_certificate(&mut $tester)
5563
.await
5664
.unwrap();
@@ -568,4 +576,28 @@ impl RuntimeTester {
568576

569577
Ok(cert_identifier)
570578
}
579+
580+
/// Wait until the last stored signed entity of the given type
581+
/// corresponds to the expected signed entity type
582+
pub async fn wait_until_signed_entity(
583+
&self,
584+
signed_entity_type_expected: &SignedEntityType,
585+
) -> StdResult<()> {
586+
let mut max_iteration = 100;
587+
while !self
588+
.observer
589+
.is_last_signed_entity(signed_entity_type_expected)
590+
.await?
591+
{
592+
max_iteration -= 1;
593+
if max_iteration <= 0 {
594+
return Err(anyhow!(
595+
"Signed entity not found: {signed_entity_type_expected}"
596+
));
597+
}
598+
tokio::time::sleep(Duration::from_millis(1)).await;
599+
}
600+
601+
Ok(())
602+
}
571603
}

0 commit comments

Comments
 (0)