1
1
use std:: sync:: Arc ;
2
2
3
3
use mithril_common:: {
4
- entities:: { Certificate , SignedEntityType } ,
5
- signable_builder:: { Artifact , DummyBeacon } ,
4
+ entities:: { Certificate , Epoch , SignedEntityType } ,
5
+ signable_builder:: Artifact ,
6
6
StdResult ,
7
7
} ;
8
8
9
- use crate :: artifact_builder:: { ArtifactBuilder , DummyArtifactBuilder } ;
9
+ use crate :: artifact_builder:: ArtifactBuilder ;
10
+
11
+ use super :: MithrilStakeDistribution ;
10
12
11
13
/// ArtifactBuilder Service
12
- // TODO: temporary implementation
13
14
pub struct ArtifactBuilderService {
14
- dummy_artifact_builder : DummyArtifactBuilder ,
15
+ mithril_stake_distribution_artifact_builder :
16
+ Arc < dyn ArtifactBuilder < Epoch , MithrilStakeDistribution > > ,
15
17
}
16
18
17
19
impl ArtifactBuilderService {
18
20
/// ArtifactBuilderService factory
19
21
#[ allow( dead_code) ]
20
- pub fn new ( dummy_artifact_builder : DummyArtifactBuilder ) -> Self {
22
+ pub fn new (
23
+ mithril_stake_distribution_artifact_builder : Arc <
24
+ dyn ArtifactBuilder < Epoch , MithrilStakeDistribution > ,
25
+ > ,
26
+ ) -> Self {
21
27
Self {
22
- dummy_artifact_builder ,
28
+ mithril_stake_distribution_artifact_builder ,
23
29
}
24
30
}
25
31
}
@@ -33,20 +39,11 @@ impl ArtifactBuilderService {
33
39
) -> StdResult < Arc < impl Artifact > > {
34
40
let artifact = match signed_entity_type {
35
41
SignedEntityType :: MithrilStakeDistribution ( e) => Arc :: new (
36
- self . dummy_artifact_builder
37
- . compute_artifact ( DummyBeacon { epoch : e } , certificate)
38
- . await ?,
39
- ) ,
40
- SignedEntityType :: CardanoStakeDistribution ( e) => Arc :: new (
41
- self . dummy_artifact_builder
42
- . compute_artifact ( DummyBeacon { epoch : e } , certificate)
43
- . await ?,
44
- ) ,
45
- SignedEntityType :: CardanoImmutableFilesFull ( b) => Arc :: new (
46
- self . dummy_artifact_builder
47
- . compute_artifact ( DummyBeacon { epoch : b. epoch } , certificate)
42
+ self . mithril_stake_distribution_artifact_builder
43
+ . compute_artifact ( e, certificate)
48
44
. await ?,
49
45
) ,
46
+ _ => todo ! ( ) ,
50
47
} ;
51
48
52
49
Ok ( artifact)
@@ -55,37 +52,36 @@ impl ArtifactBuilderService {
55
52
56
53
#[ cfg( test) ]
57
54
mod tests {
58
- use mithril_common:: entities:: { Beacon , Epoch } ;
55
+ use mithril_common:: { entities:: Epoch , test_utils :: fake_data } ;
59
56
60
57
use super :: * ;
61
58
62
- // TODO: temporary test
63
- #[ tokio:: test]
64
- async fn test_artifact_builder_service ( ) {
65
- let dummy_artifact_builder = DummyArtifactBuilder :: default ( ) ;
66
- let artifact_builder_service = ArtifactBuilderService :: new ( dummy_artifact_builder) ;
67
- let certificate = Certificate :: default ( ) ;
59
+ use crate :: artifact_builder:: MockArtifactBuilder ;
68
60
69
- let signed_entity_type_1 = SignedEntityType :: MithrilStakeDistribution ( Epoch ( 1 ) ) ;
70
- let artifact_1 = artifact_builder_service
71
- . compute_artifact ( signed_entity_type_1, & certificate)
72
- . await
73
- . unwrap ( ) ;
61
+ #[ tokio:: test]
62
+ async fn test_artifact_builder_service_mithril_stake_distribution ( ) {
63
+ let signers_with_stake = fake_data:: signers_with_stakes ( 5 ) ;
64
+ let mithril_stake_distribution_expected = MithrilStakeDistribution :: new ( signers_with_stake) ;
65
+ let mithril_stake_distribution_clone = mithril_stake_distribution_expected. clone ( ) ;
66
+ let mut mock_mithril_stake_distribution_artifact_builder =
67
+ MockArtifactBuilder :: < Epoch , MithrilStakeDistribution > :: new ( ) ;
68
+ mock_mithril_stake_distribution_artifact_builder
69
+ . expect_compute_artifact ( )
70
+ . once ( )
71
+ . return_once ( move |_, _| Ok ( mithril_stake_distribution_clone) ) ;
74
72
75
- let signed_entity_type_2 = SignedEntityType :: CardanoStakeDistribution ( Epoch ( 0 ) ) ;
76
- let artifact_2 = artifact_builder_service
77
- . compute_artifact ( signed_entity_type_2, & certificate)
78
- . await
79
- . unwrap ( ) ;
73
+ let artifact_builder_service =
74
+ ArtifactBuilderService :: new ( Arc :: new ( mock_mithril_stake_distribution_artifact_builder) ) ;
75
+ let certificate = Certificate :: default ( ) ;
80
76
81
- let signed_entity_type_3 = SignedEntityType :: CardanoImmutableFilesFull ( Beacon :: default ( ) ) ;
82
- let artifact_3 = artifact_builder_service
83
- . compute_artifact ( signed_entity_type_3 , & certificate)
77
+ let signed_entity_type = SignedEntityType :: MithrilStakeDistribution ( Epoch ( 1 ) ) ;
78
+ let artifact = artifact_builder_service
79
+ . compute_artifact ( signed_entity_type , & certificate)
84
80
. await
85
81
. unwrap ( ) ;
86
-
87
- assert_ne ! ( artifact_1 , artifact_2 ) ;
88
- assert_ne ! ( artifact_1 , artifact_3 ) ;
89
- assert_eq ! ( artifact_2 , artifact_3 ) ;
82
+ assert_eq ! (
83
+ serde_json :: to_string ( & mithril_stake_distribution_expected ) . unwrap ( ) ,
84
+ serde_json :: to_string ( & artifact ) . unwrap ( )
85
+ ) ;
90
86
}
91
87
}
0 commit comments