Skip to content

Commit 9f02c0f

Browse files
committed
Add OpenMessageObserver to aggregator integration tests
1 parent d0b9ae9 commit 9f02c0f

File tree

5 files changed

+92
-28
lines changed

5 files changed

+92
-28
lines changed

mithril-aggregator/tests/certificate_chain.rs

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,11 @@ async fn certificate_chain() {
6060
cycle!(tester, "signing");
6161
tester.register_signers(&signers).await.unwrap();
6262
cycle_err!(tester, "signing");
63-
let signed_entity_type = tester.retrieve_signed_entity_type().await;
63+
let signed_entity_type = tester
64+
.open_message_observer
65+
.get_current_immutable_entity_type()
66+
.await
67+
.unwrap();
6468
tester
6569
.send_single_signatures(&signed_entity_type, &signers)
6670
.await
@@ -80,7 +84,11 @@ async fn certificate_chain() {
8084
tester.increase_immutable_number().await.unwrap();
8185
cycle!(tester, "ready");
8286
cycle!(tester, "signing");
83-
let signed_entity_type = tester.retrieve_signed_entity_type().await;
87+
let signed_entity_type = tester
88+
.open_message_observer
89+
.get_current_immutable_entity_type()
90+
.await
91+
.unwrap();
8492
tester
8593
.send_single_signatures(&signed_entity_type, &signers)
8694
.await
@@ -143,7 +151,11 @@ async fn certificate_chain() {
143151
"Signers register & send signatures, the new certificate should be link to the first of the previous epoch"
144152
);
145153
tester.register_signers(&new_signers).await.unwrap();
146-
let signed_entity_type = tester.retrieve_signed_entity_type().await;
154+
let signed_entity_type = tester
155+
.open_message_observer
156+
.get_current_immutable_entity_type()
157+
.await
158+
.unwrap();
147159
tester
148160
.send_single_signatures(&signed_entity_type, &signers)
149161
.await
@@ -183,7 +195,11 @@ async fn certificate_chain() {
183195
cycle!(tester, "ready");
184196
cycle!(tester, "signing");
185197

186-
let signed_entity_type = tester.retrieve_signed_entity_type().await;
198+
let signed_entity_type = tester
199+
.open_message_observer
200+
.get_current_immutable_entity_type()
201+
.await
202+
.unwrap();
187203
tester
188204
.send_single_signatures(&signed_entity_type, &signers)
189205
.await
@@ -199,7 +215,11 @@ async fn certificate_chain() {
199215
tester.increase_immutable_number().await.unwrap();
200216
cycle!(tester, "ready");
201217
cycle!(tester, "signing");
202-
let signed_entity_type = tester.retrieve_signed_entity_type().await;
218+
let signed_entity_type = tester
219+
.open_message_observer
220+
.get_current_immutable_entity_type()
221+
.await
222+
.unwrap();
203223

204224
tester
205225
.send_single_signatures(&signed_entity_type, &new_signers)

mithril-aggregator/tests/create_certificate.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,11 @@ async fn create_certificate() {
6767
cycle!(tester, "signing");
6868

6969
comment!("signers send their single signature");
70-
let signed_entity_type = tester.retrieve_signed_entity_type().await;
70+
let signed_entity_type = tester
71+
.open_message_observer
72+
.get_current_immutable_entity_type()
73+
.await
74+
.unwrap();
7175
let signers_who_sign = &signers[0..=6];
7276
tester
7377
.send_single_signatures(&signed_entity_type, signers_who_sign)

mithril-aggregator/tests/test_extensions/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
pub mod runtime_tester;
77
#[macro_use]
88
pub mod utilities;
9+
pub mod open_message_observer;
910

1011
//pub use dependency::initialize_dependencies;
1112
pub use runtime_tester::RuntimeTester;
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
use mithril_aggregator::{
2+
certifier_service::CertifierService, database::provider::OpenMessageWithSingleSignatures,
3+
};
4+
use mithril_common::{entities::SignedEntityType, BeaconProvider};
5+
use std::sync::Arc;
6+
7+
// An observer that allow to inspect currently available open messages.
8+
pub struct OpenMessageObserver {
9+
pub beacon_provider: Arc<dyn BeaconProvider>,
10+
pub certifier_service: Arc<dyn CertifierService>,
11+
}
12+
13+
impl OpenMessageObserver {
14+
// [OpenMessageObserver] factory
15+
pub fn new(
16+
beacon_provider: Arc<dyn BeaconProvider>,
17+
certifier_service: Arc<dyn CertifierService>,
18+
) -> Self {
19+
Self {
20+
beacon_provider,
21+
certifier_service,
22+
}
23+
}
24+
25+
// Get the current [open message][OpenMessageWithSingleSignatures] for [cardano immutables][SignedEntityType::CardanoImmutableFilesFull]
26+
pub async fn get_current_immutable_message(
27+
&self,
28+
) -> Result<Option<OpenMessageWithSingleSignatures>, String> {
29+
let immutable_signer_entity_type = SignedEntityType::CardanoImmutableFilesFull(
30+
self.beacon_provider
31+
.get_current_beacon()
32+
.await
33+
.map_err(|e| format!("Querying the current beacon should not fail: {e:?}"))?,
34+
);
35+
36+
self.certifier_service
37+
.get_open_message(&immutable_signer_entity_type)
38+
.await
39+
.map_err(|e| {
40+
format!(
41+
"Requesting current open message of type CardanoImmutableFilesFull should be not fail: {e:?}"
42+
)
43+
})
44+
}
45+
46+
// Get the [entity type][SignedEntityType::CardanoImmutableFilesFull] of the current current open message
47+
pub async fn get_current_immutable_entity_type(&self) -> Result<SignedEntityType, String> {
48+
match self.get_current_immutable_message().await? {
49+
None => Err("An open message should be available for cardano immutables".to_string()),
50+
Some(message) => Ok(message.signed_entity_type),
51+
}
52+
}
53+
}

mithril-aggregator/tests/test_extensions/runtime_tester.rs

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@ use mithril_common::era::{EraMarker, EraReader, SupportedEra};
66
use mithril_common::test_utils::{
77
MithrilFixtureBuilder, SignerFixture, StakeDistributionGenerationMethod,
88
};
9+
use semver::Op;
910
use slog::Drain;
1011
use std::sync::Arc;
1112
use tokio::sync::mpsc::UnboundedReceiver;
1213

14+
use crate::test_extensions::open_message_observer::OpenMessageObserver;
1315
use mithril_aggregator::{
1416
AggregatorRuntime, Configuration, DumbSnapshotUploader, DumbSnapshotter,
1517
ProtocolParametersStorer, SignerRegisterer,
@@ -52,6 +54,7 @@ pub struct RuntimeTester {
5254
pub runtime: AggregatorRuntime,
5355
pub receiver: UnboundedReceiver<EventMessage>,
5456
pub era_reader_adapter: Arc<EraReaderDummyAdapter>,
57+
pub open_message_observer: OpenMessageObserver,
5558
_logs_guard: slog_scope::GlobalLoggerGuard,
5659
}
5760

@@ -82,6 +85,10 @@ impl RuntimeTester {
8285
let drain = slog_async::Async::new(drain).build().fuse();
8386
let log = slog_scope::set_global_logger(slog::Logger::root(Arc::new(drain), slog::o!()));
8487
let receiver = deps_builder.get_event_transmitter_receiver().await.unwrap();
88+
let open_message_observer = OpenMessageObserver::new(
89+
deps_builder.get_beacon_provider().await.unwrap(),
90+
deps_builder.get_certifier_service().await.unwrap(),
91+
);
8592

8693
Self {
8794
snapshot_uploader,
@@ -94,6 +101,7 @@ impl RuntimeTester {
94101
runtime,
95102
receiver,
96103
era_reader_adapter,
104+
open_message_observer,
97105
_logs_guard: log,
98106
}
99107
}
@@ -390,26 +398,4 @@ impl RuntimeTester {
390398
pub async fn set_era_markers(&self, markers: Vec<EraMarker>) {
391399
self.era_reader_adapter.set_markers(markers)
392400
}
393-
394-
/// Retrieve signed entity type
395-
pub async fn retrieve_signed_entity_type(&mut self) -> SignedEntityType {
396-
let signer_entity_type_default = SignedEntityType::CardanoImmutableFilesFull(
397-
self.deps_builder
398-
.get_beacon_provider()
399-
.await
400-
.unwrap()
401-
.get_current_beacon()
402-
.await
403-
.unwrap(),
404-
);
405-
self.deps_builder
406-
.get_certifier_service()
407-
.await
408-
.unwrap()
409-
.get_open_message(&signer_entity_type_default)
410-
.await
411-
.unwrap()
412-
.map(|om| om.signed_entity_type)
413-
.unwrap()
414-
}
415401
}

0 commit comments

Comments
 (0)