Skip to content

Commit e016f94

Browse files
committed
Update Artifact Builder service in aggregator
1 parent cbdf37d commit e016f94

File tree

1 file changed

+56
-12
lines changed

1 file changed

+56
-12
lines changed

mithril-aggregator/src/artifact_builder/artifact_builder_service.rs

Lines changed: 56 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use async_trait::async_trait;
33
use std::sync::Arc;
44

55
use mithril_common::{
6-
entities::{Certificate, Epoch, SignedEntityType},
6+
entities::{Beacon, Certificate, Epoch, SignedEntityType, Snapshot},
77
signable_builder::Artifact,
88
StdResult,
99
};
@@ -31,6 +31,7 @@ pub trait ArtifactBuilderService: Send + Sync {
3131
pub struct MithrilArtifactBuilderService {
3232
mithril_stake_distribution_artifact_builder:
3333
Arc<dyn ArtifactBuilder<Epoch, MithrilStakeDistribution>>,
34+
cardano_immutable_files_full_artifact_builder: Arc<dyn ArtifactBuilder<Beacon, Snapshot>>,
3435
}
3536

3637
impl MithrilArtifactBuilderService {
@@ -40,9 +41,11 @@ impl MithrilArtifactBuilderService {
4041
mithril_stake_distribution_artifact_builder: Arc<
4142
dyn ArtifactBuilder<Epoch, MithrilStakeDistribution>,
4243
>,
44+
cardano_immutable_files_full_artifact_builder: Arc<dyn ArtifactBuilder<Beacon, Snapshot>>,
4345
) -> Self {
4446
Self {
4547
mithril_stake_distribution_artifact_builder,
48+
cardano_immutable_files_full_artifact_builder,
4649
}
4750
}
4851
}
@@ -55,16 +58,19 @@ impl ArtifactBuilderService for MithrilArtifactBuilderService {
5558
signed_entity_type: SignedEntityType,
5659
certificate: &Certificate,
5760
) -> StdResult<Arc<dyn Artifact>> {
58-
let artifact = match signed_entity_type {
59-
SignedEntityType::MithrilStakeDistribution(e) => Arc::new(
61+
match signed_entity_type {
62+
SignedEntityType::MithrilStakeDistribution(epoch) => Ok(Arc::new(
6063
self.mithril_stake_distribution_artifact_builder
61-
.compute_artifact(e, certificate)
64+
.compute_artifact(epoch, certificate)
6265
.await?,
63-
),
66+
)),
67+
SignedEntityType::CardanoImmutableFilesFull(beacon) => Ok(Arc::new(
68+
self.cardano_immutable_files_full_artifact_builder
69+
.compute_artifact(beacon, certificate)
70+
.await?,
71+
)),
6472
_ => todo!(),
65-
};
66-
67-
Ok(artifact)
73+
}
6874
}
6975
}
7076

@@ -77,7 +83,8 @@ mod tests {
7783
use crate::artifact_builder::MockArtifactBuilder;
7884

7985
#[tokio::test]
80-
async fn test_artifact_builder_service_mithril_stake_distribution() {
86+
async fn build_mithril_stake_distribution_artifact_when_given_mithril_stake_distribution_entity_type(
87+
) {
8188
let signers_with_stake = fake_data::signers_with_stakes(5);
8289
let mithril_stake_distribution_expected = MithrilStakeDistribution::new(signers_with_stake);
8390
let mithril_stake_distribution_clone = mithril_stake_distribution_expected.clone();
@@ -88,9 +95,13 @@ mod tests {
8895
.once()
8996
.return_once(move |_, _| Ok(mithril_stake_distribution_clone));
9097

91-
let artifact_builder_service = MithrilArtifactBuilderService::new(Arc::new(
92-
mock_mithril_stake_distribution_artifact_builder,
93-
));
98+
let mock_cardano_immutable_files_full_artifact_builder =
99+
MockArtifactBuilder::<Beacon, Snapshot>::new();
100+
101+
let artifact_builder_service = MithrilArtifactBuilderService::new(
102+
Arc::new(mock_mithril_stake_distribution_artifact_builder),
103+
Arc::new(mock_cardano_immutable_files_full_artifact_builder),
104+
);
94105
let certificate = Certificate::default();
95106

96107
let signed_entity_type = SignedEntityType::MithrilStakeDistribution(Epoch(1));
@@ -105,4 +116,37 @@ mod tests {
105116
serde_json::to_string(&mithril_stake_distribution_computed).unwrap()
106117
);
107118
}
119+
120+
#[tokio::test]
121+
async fn build_snapshot_artifact_when_given_cardano_immutable_files_full_entity_type() {
122+
let snapshot_expected = fake_data::snapshots(1).first().unwrap().to_owned();
123+
let snapshot_expected_clone = snapshot_expected.clone();
124+
let mock_mithril_stake_distribution_artifact_builder =
125+
MockArtifactBuilder::<Epoch, MithrilStakeDistribution>::new();
126+
127+
let mut mock_cardano_immutable_files_full_artifact_builder =
128+
MockArtifactBuilder::<Beacon, Snapshot>::new();
129+
mock_cardano_immutable_files_full_artifact_builder
130+
.expect_compute_artifact()
131+
.once()
132+
.return_once(move |_, _| Ok(snapshot_expected_clone));
133+
134+
let artifact_builder_service = MithrilArtifactBuilderService::new(
135+
Arc::new(mock_mithril_stake_distribution_artifact_builder),
136+
Arc::new(mock_cardano_immutable_files_full_artifact_builder),
137+
);
138+
let certificate = Certificate::default();
139+
140+
let signed_entity_type = SignedEntityType::CardanoImmutableFilesFull(Beacon::default());
141+
let artifact = artifact_builder_service
142+
.compute_artifact(signed_entity_type, &certificate)
143+
.await
144+
.unwrap();
145+
let snapshot_computed: Snapshot =
146+
serde_json::from_str(&serde_json::to_string(&artifact).unwrap()).unwrap();
147+
assert_eq!(
148+
serde_json::to_string(&snapshot_expected).unwrap(),
149+
serde_json::to_string(&snapshot_computed).unwrap()
150+
);
151+
}
108152
}

0 commit comments

Comments
 (0)