@@ -80,8 +80,6 @@ impl MithrilEpochService {
80
80
}
81
81
}
82
82
83
- // TODO do it in EpochService and store SignerWithStack
84
- // Inject stake_store in EpochService (epoch + current protocol parameters)
85
83
async fn associate_signers_with_stake (
86
84
& self ,
87
85
epoch : Epoch ,
@@ -162,24 +160,20 @@ impl EpochService for MithrilEpochService {
162
160
163
161
async fn current_signers_with_stake ( & self ) -> StdResult < Vec < SignerWithStake > > {
164
162
let current_epoch = self . epoch_of_current_data ( ) ?;
165
- let ( retrieval_epoch , _next_retrieval_epoch ) = (
163
+ self . associate_signers_with_stake (
166
164
current_epoch. offset_to_signer_retrieval_epoch ( ) ?,
167
- current_epoch. offset_to_next_signer_retrieval_epoch ( ) ,
168
- ) ;
169
- let current_signers = self . current_signers ( ) ?;
170
- self . associate_signers_with_stake ( retrieval_epoch, current_signers)
171
- . await
165
+ self . current_signers ( ) ?,
166
+ )
167
+ . await
172
168
}
173
169
174
170
async fn next_signers_with_stake ( & self ) -> StdResult < Vec < SignerWithStake > > {
175
171
let current_epoch = self . epoch_of_current_data ( ) ?;
176
- let ( _retrieval_epoch, _next_retrieval_epoch) = (
177
- current_epoch. offset_to_signer_retrieval_epoch ( ) ?,
172
+ self . associate_signers_with_stake (
178
173
current_epoch. offset_to_next_signer_retrieval_epoch ( ) ,
179
- ) ;
180
- let next_signers = self . next_signers ( ) ?;
181
- self . associate_signers_with_stake ( _next_retrieval_epoch, next_signers)
182
- . await
174
+ self . next_signers ( ) ?,
175
+ )
176
+ . await
183
177
}
184
178
}
185
179
@@ -191,12 +185,15 @@ mod tests {
191
185
192
186
use mithril_common:: {
193
187
entities:: { Epoch , EpochSettings , StakeDistribution } ,
194
- test_utils:: fake_data,
188
+ test_utils:: fake_data:: { self } ,
189
+ } ;
190
+ use mithril_persistence:: store:: {
191
+ adapter:: { DumbStoreAdapter , MemoryAdapter } ,
192
+ StakeStore , StakeStorer ,
195
193
} ;
196
- use mithril_persistence:: store:: { adapter:: DumbStoreAdapter , StakeStore , StakeStorer } ;
197
194
198
195
#[ tokio:: test]
199
- async fn test_signers_are_not_available_before_register_epoch_settings_was_call ( ) {
196
+ async fn test_retrieve_data_return_error_before_register_epoch_settings_was_call ( ) {
200
197
let epoch = Epoch ( 12 ) ;
201
198
// Signers and stake distribution
202
199
let signers = fake_data:: signers ( 10 ) ;
@@ -215,12 +212,16 @@ mod tests {
215
212
216
213
// Build service and register epoch settings
217
214
let service = MithrilEpochService :: new ( stake_store) ;
215
+ assert ! ( service. epoch_of_current_data( ) . is_err( ) ) ;
216
+ assert ! ( service. next_protocol_parameters( ) . is_err( ) ) ;
218
217
assert ! ( service. current_signers( ) . is_err( ) ) ;
219
218
assert ! ( service. next_signers( ) . is_err( ) ) ;
219
+ assert ! ( service. current_signers_with_stake( ) . await . is_err( ) ) ;
220
+ assert ! ( service. next_signers_with_stake( ) . await . is_err( ) ) ;
220
221
}
221
222
222
223
#[ tokio:: test]
223
- async fn test_signers_are_available_after_register_epoch_settings_call ( ) {
224
+ async fn test_data_are_available_after_register_epoch_settings_call ( ) {
224
225
let epoch = Epoch ( 12 ) ;
225
226
// Signers and stake distribution
226
227
let signers = fake_data:: signers ( 10 ) ;
@@ -245,15 +246,19 @@ mod tests {
245
246
. unwrap ( ) ;
246
247
247
248
// Check current_signers
248
- let current_signers = service. current_signers ( ) . unwrap ( ) ;
249
- let expected_current_signers = epoch_settings. current_signers . clone ( ) ;
250
- assert_eq ! ( expected_current_signers, * current_signers) ;
251
-
249
+ {
250
+ let current_signers = service. current_signers ( ) . unwrap ( ) ;
251
+ let expected_current_signers = epoch_settings. current_signers . clone ( ) ;
252
+ assert_eq ! ( expected_current_signers, * current_signers) ;
253
+ }
252
254
// Check next_signers
253
- let next_signers = service. next_signers ( ) . unwrap ( ) ;
254
- let expected_next_signers = epoch_settings. next_signers . clone ( ) ;
255
- assert_eq ! ( expected_next_signers, * next_signers) ;
255
+ {
256
+ let next_signers = service. next_signers ( ) . unwrap ( ) ;
257
+ let expected_next_signers = epoch_settings. next_signers . clone ( ) ;
258
+ assert_eq ! ( expected_next_signers, * next_signers) ;
259
+ }
256
260
261
+ // Check other data
257
262
assert_eq ! (
258
263
epoch_settings. epoch,
259
264
service. epoch_of_current_data( ) . unwrap( )
@@ -264,78 +269,75 @@ mod tests {
264
269
) ;
265
270
}
266
271
267
- // TODO try to simplify this test
268
272
#[ tokio:: test]
269
273
async fn test_signers_with_stake_are_available_after_register_epoch_settings_call ( ) {
274
+ fn build_stake_distribution ( signers : & Vec < Signer > , first_stake : u64 ) -> StakeDistribution {
275
+ signers
276
+ . iter ( )
277
+ . enumerate ( )
278
+ . map ( |( i, signer) | ( signer. party_id . clone ( ) , first_stake + i as u64 ) )
279
+ . collect ( )
280
+ }
281
+
270
282
let epoch = Epoch ( 12 ) ;
283
+
271
284
// Signers and stake distribution
272
285
let signers = fake_data:: signers ( 10 ) ;
273
-
274
- // Init stake_store
275
- let stake_store = Arc :: new ( StakeStore :: new ( Box :: new ( DumbStoreAdapter :: new ( ) ) , None ) ) ;
286
+ let stake_distribution: StakeDistribution = build_stake_distribution ( & signers, 100 ) ;
287
+ let next_stake_distribution: StakeDistribution = build_stake_distribution ( & signers, 500 ) ;
288
+
289
+ let stake_store = Arc :: new ( StakeStore :: new (
290
+ Box :: new (
291
+ MemoryAdapter :: < Epoch , StakeDistribution > :: new ( Some ( vec ! [
292
+ (
293
+ epoch. offset_to_signer_retrieval_epoch( ) . unwrap( ) ,
294
+ stake_distribution. clone( ) ,
295
+ ) ,
296
+ (
297
+ epoch. offset_to_next_signer_retrieval_epoch( ) ,
298
+ next_stake_distribution. clone( ) ,
299
+ ) ,
300
+ ] ) )
301
+ . unwrap ( ) ,
302
+ ) ,
303
+ None ,
304
+ ) ) ;
276
305
277
306
// Epoch settings
278
- let epoch_settings = fake_data:: epoch_settings ( ) ;
279
307
let epoch_settings = EpochSettings {
280
308
epoch,
281
309
current_signers : signers[ 2 ..5 ] . to_vec ( ) ,
282
310
next_signers : signers[ 3 ..7 ] . to_vec ( ) ,
283
- ..epoch_settings. clone ( )
311
+ ..fake_data :: epoch_settings ( ) . clone ( )
284
312
} ;
313
+
285
314
// Build service and register epoch settings
286
- let mut service = MithrilEpochService :: new ( stake_store. clone ( ) ) ;
315
+ let mut service = MithrilEpochService :: new ( stake_store) ;
287
316
service
288
317
. inform_epoch_settings ( epoch_settings. clone ( ) )
289
318
. await
290
319
. unwrap ( ) ;
291
320
292
- // Check current_signers
293
- let stake_distribution: StakeDistribution = signers
294
- . iter ( )
295
- . enumerate ( )
296
- . map ( |( i, signer) | ( signer. party_id . clone ( ) , ( i + 1 ) as u64 * 100 ) )
297
- . collect ( ) ;
298
- stake_store
299
- . save_stakes (
300
- epoch. offset_to_signer_retrieval_epoch ( ) . unwrap ( ) ,
301
- stake_distribution. clone ( ) ,
302
- )
303
- . await
304
- . expect ( "save_stakes should not fail" ) ;
305
- let current_signers = service. current_signers_with_stake ( ) . await . unwrap ( ) ;
306
- let expected_current_signers = epoch_settings. current_signers . clone ( ) ;
307
- assert_eq ! ( expected_current_signers. len( ) , current_signers. len( ) ) ;
308
- for signer in current_signers {
309
- assert_eq ! (
310
- stake_distribution. get( & signer. party_id) . unwrap( ) ,
311
- & signer. stake
312
- ) ;
321
+ // Check current signers with stake
322
+ {
323
+ let current_signers = service. current_signers_with_stake ( ) . await . unwrap ( ) ;
324
+
325
+ assert_eq ! ( epoch_settings. current_signers. len( ) , current_signers. len( ) ) ;
326
+ for signer in current_signers {
327
+ let expected_stake = stake_distribution. get ( & signer. party_id ) . unwrap ( ) ;
328
+ assert_eq ! ( expected_stake, & signer. stake) ;
329
+ }
313
330
}
314
331
315
- // Check next_signers
316
- let next_stake_distribution: StakeDistribution = signers
317
- . iter ( )
318
- . enumerate ( )
319
- . map ( |( i, signer) | ( signer. party_id . clone ( ) , ( i + 1 ) as u64 * 1000 ) )
320
- . collect ( ) ;
321
- stake_store
322
- . save_stakes (
323
- epoch. offset_to_next_signer_retrieval_epoch ( ) ,
324
- next_stake_distribution. clone ( ) ,
325
- )
326
- . await
327
- . expect ( "save_stakes should not fail" ) ;
328
- let next_signers = service. next_signers_with_stake ( ) . await . unwrap ( ) ;
329
- let expected_next_signers = epoch_settings. next_signers . clone ( ) ;
330
- assert_eq ! ( expected_next_signers. len( ) , next_signers. len( ) ) ;
331
- for signer in next_signers {
332
- assert_eq ! (
333
- next_stake_distribution. get( & signer. party_id) . unwrap( ) ,
334
- & signer. stake
335
- ) ;
332
+ // Check next signers with stake
333
+ {
334
+ let next_signers = service. next_signers_with_stake ( ) . await . unwrap ( ) ;
335
+
336
+ assert_eq ! ( epoch_settings. next_signers. len( ) , next_signers. len( ) ) ;
337
+ for signer in next_signers {
338
+ let expected_stake = next_stake_distribution. get ( & signer. party_id ) . unwrap ( ) ;
339
+ assert_eq ! ( expected_stake, & signer. stake) ;
340
+ }
336
341
}
337
342
}
338
-
339
- // TODO check update of signer after register_epoch_settings call
340
- // TODO should we provide a "reset" function ?
341
343
}
0 commit comments