@@ -37,6 +37,63 @@ pub struct MithrilInfrastructureConfig {
37
37
pub use_era_specific_work_dir : bool ,
38
38
}
39
39
40
+ impl MithrilInfrastructureConfig {
41
+ pub fn is_master_aggregator ( & self , index : usize ) -> bool {
42
+ assert ! (
43
+ index < self . number_of_aggregators as usize ,
44
+ "Aggregator index out of bounds"
45
+ ) ;
46
+
47
+ if self . relay_signer_registration_mode == SignerRelayMode :: Passthrough {
48
+ self . number_of_aggregators > 1 && index == 0
49
+ } else {
50
+ false
51
+ }
52
+ }
53
+
54
+ pub fn aggregator_name_suffix ( & self , index : usize ) -> String {
55
+ assert ! (
56
+ index < self . number_of_aggregators as usize ,
57
+ "Aggregator index out of bounds"
58
+ ) ;
59
+
60
+ if self . is_master_aggregator ( 0 ) {
61
+ if self . is_master_aggregator ( index) {
62
+ "master" . to_string ( )
63
+ } else {
64
+ format ! ( "slave-{index}" )
65
+ }
66
+ } else {
67
+ format ! ( "{}" , index + 1 )
68
+ }
69
+ }
70
+
71
+ #[ cfg( test) ]
72
+ pub fn dummy ( ) -> Self {
73
+ Self {
74
+ number_of_aggregators : 1 ,
75
+ number_of_signers : 1 ,
76
+ server_port : 8080 ,
77
+ devnet : Devnet :: default ( ) ,
78
+ work_dir : PathBuf :: from ( "/tmp/work" ) ,
79
+ store_dir : PathBuf :: from ( "/tmp/store" ) ,
80
+ artifacts_dir : PathBuf :: from ( "/tmp/artifacts" ) ,
81
+ bin_dir : PathBuf :: from ( "/tmp/bin" ) ,
82
+ cardano_node_version : "1.0.0" . to_string ( ) ,
83
+ mithril_run_interval : 10 ,
84
+ mithril_era : "era1" . to_string ( ) ,
85
+ mithril_era_reader_adapter : "adapter1" . to_string ( ) ,
86
+ signed_entity_types : vec ! [ "type1" . to_string( ) ] ,
87
+ run_only_mode : false ,
88
+ use_relays : false ,
89
+ relay_signer_registration_mode : SignerRelayMode :: Passthrough ,
90
+ relay_signature_registration_mode : SignerRelayMode :: Passthrough ,
91
+ use_p2p_passive_relays : false ,
92
+ use_era_specific_work_dir : false ,
93
+ }
94
+ }
95
+ }
96
+
40
97
pub struct MithrilInfrastructure {
41
98
artifacts_dir : PathBuf ,
42
99
bin_dir : PathBuf ,
@@ -186,7 +243,8 @@ impl MithrilInfrastructure {
186
243
} ;
187
244
188
245
let aggregator = Aggregator :: new ( & AggregatorConfig {
189
- index,
246
+ is_master : config. is_master_aggregator ( index) ,
247
+ name : & config. aggregator_name_suffix ( index) ,
190
248
server_port : config. server_port + index as u64 ,
191
249
pool_node,
192
250
cardano_cli_path : & config. devnet . cardano_cli_path ( ) ,
@@ -246,7 +304,7 @@ impl MithrilInfrastructure {
246
304
let mut bootstrap_peer_addr = None ;
247
305
for ( index, aggregator_endpoint) in aggregator_endpoints. iter ( ) . enumerate ( ) {
248
306
let mut relay_aggregator = RelayAggregator :: new (
249
- index,
307
+ config . aggregator_name_suffix ( index) ,
250
308
config. server_port + index as u64 + 100 ,
251
309
bootstrap_peer_addr. clone ( ) ,
252
310
aggregator_endpoint,
@@ -424,10 +482,9 @@ impl MithrilInfrastructure {
424
482
425
483
pub async fn build_client ( & self , aggregator : & Aggregator ) -> StdResult < Client > {
426
484
let work_dir = {
427
- let mut artifacts_dir = self . artifacts_dir . join ( format ! (
428
- "mithril-client-aggregator-{}" ,
429
- Aggregator :: name_suffix( aggregator. index( ) )
430
- ) ) ;
485
+ let mut artifacts_dir = self
486
+ . artifacts_dir
487
+ . join ( format ! ( "mithril-client-aggregator-{}" , aggregator. name( ) ) ) ;
431
488
if self . use_era_specific_work_dir {
432
489
let current_era = self . current_era . read ( ) . await ;
433
490
artifacts_dir = artifacts_dir. join ( format ! ( "era.{}" , current_era) ) ;
@@ -479,3 +536,93 @@ impl MithrilInfrastructure {
479
536
Ok ( ( ) )
480
537
}
481
538
}
539
+
540
+ #[ cfg( test) ]
541
+ mod tests {
542
+ use crate :: MithrilInfrastructureConfig ;
543
+
544
+ use super :: * ;
545
+
546
+ #[ test]
547
+ fn is_master_aggregator_succeeds ( ) {
548
+ let config = MithrilInfrastructureConfig {
549
+ use_relays : true ,
550
+ relay_signer_registration_mode : SignerRelayMode :: Passthrough ,
551
+ number_of_aggregators : 2 ,
552
+ ..MithrilInfrastructureConfig :: dummy ( )
553
+ } ;
554
+
555
+ assert ! ( config. is_master_aggregator( 0 ) ) ;
556
+ assert ! ( !config. is_master_aggregator( 1 ) ) ;
557
+
558
+ let config = MithrilInfrastructureConfig {
559
+ use_relays : true ,
560
+ relay_signer_registration_mode : SignerRelayMode :: P2P ,
561
+ number_of_aggregators : 2 ,
562
+ ..MithrilInfrastructureConfig :: dummy ( )
563
+ } ;
564
+
565
+ assert ! ( !config. is_master_aggregator( 0 ) ) ;
566
+ assert ! ( !config. is_master_aggregator( 1 ) ) ;
567
+
568
+ let config = MithrilInfrastructureConfig {
569
+ use_relays : false ,
570
+ number_of_aggregators : 1 ,
571
+ ..MithrilInfrastructureConfig :: dummy ( )
572
+ } ;
573
+
574
+ assert ! ( !config. is_master_aggregator( 0 ) ) ;
575
+ }
576
+
577
+ #[ test]
578
+ #[ should_panic]
579
+ fn is_master_aggregator_fails ( ) {
580
+ let config = MithrilInfrastructureConfig {
581
+ number_of_aggregators : 1 ,
582
+ ..MithrilInfrastructureConfig :: dummy ( )
583
+ } ;
584
+
585
+ config. is_master_aggregator ( 2 ) ;
586
+ }
587
+
588
+ #[ test]
589
+ fn aggregator_name_suffix_succeeds ( ) {
590
+ let config = MithrilInfrastructureConfig {
591
+ relay_signer_registration_mode : SignerRelayMode :: Passthrough ,
592
+ number_of_aggregators : 3 ,
593
+ ..MithrilInfrastructureConfig :: dummy ( )
594
+ } ;
595
+
596
+ assert_eq ! ( config. aggregator_name_suffix( 0 ) , "master" ) ;
597
+ assert_eq ! ( config. aggregator_name_suffix( 1 ) , "slave-1" ) ;
598
+ assert_eq ! ( config. aggregator_name_suffix( 2 ) , "slave-2" ) ;
599
+
600
+ let config = MithrilInfrastructureConfig {
601
+ number_of_aggregators : 3 ,
602
+ relay_signer_registration_mode : SignerRelayMode :: P2P ,
603
+ ..MithrilInfrastructureConfig :: dummy ( )
604
+ } ;
605
+
606
+ assert_eq ! ( config. aggregator_name_suffix( 0 ) , "1" ) ;
607
+ assert_eq ! ( config. aggregator_name_suffix( 1 ) , "2" ) ;
608
+ assert_eq ! ( config. aggregator_name_suffix( 2 ) , "3" ) ;
609
+
610
+ let config = MithrilInfrastructureConfig {
611
+ number_of_aggregators : 1 ,
612
+ ..MithrilInfrastructureConfig :: dummy ( )
613
+ } ;
614
+
615
+ assert_eq ! ( config. aggregator_name_suffix( 0 ) , "1" ) ;
616
+ }
617
+
618
+ #[ test]
619
+ #[ should_panic]
620
+ fn aggregator_name_suffix_fails ( ) {
621
+ let config = MithrilInfrastructureConfig {
622
+ number_of_aggregators : 1 ,
623
+ ..MithrilInfrastructureConfig :: dummy ( )
624
+ } ;
625
+
626
+ config. aggregator_name_suffix ( 2 ) ;
627
+ }
628
+ }
0 commit comments