@@ -1054,8 +1054,9 @@ mod tests {
10541054
10551055 // Create a genesis block with a seeded RNG to reproduce the same genesis private keys.
10561056 let seed: u64 = rng. r#gen ( ) ;
1057- let genesis_rng = & mut TestRng :: from_seed ( seed) ;
1058- let genesis = VM :: from ( store) . unwrap ( ) . genesis_beacon ( account. private_key ( ) , genesis_rng) . unwrap ( ) ;
1057+ let vm = VM :: from ( store) . unwrap ( ) ;
1058+ let genesis_pk = * account. private_key ( ) ;
1059+ let genesis = spawn_blocking ! ( vm. genesis_beacon( & genesis_pk, & mut TestRng :: from_seed( seed) ) ) . unwrap ( ) ;
10591060
10601061 // Extract the private keys from the genesis committee by using the same RNG to sample private keys.
10611062 let genesis_rng = & mut TestRng :: from_seed ( seed) ;
@@ -1067,7 +1068,8 @@ mod tests {
10671068 ] ;
10681069
10691070 // Initialize the ledger with the genesis block.
1070- let ledger = CurrentLedger :: load ( genesis. clone ( ) , StorageMode :: new_test ( None ) ) . unwrap ( ) ;
1071+ let genesis_clone = genesis. clone ( ) ;
1072+ let ledger = spawn_blocking ! ( CurrentLedger :: load( genesis_clone, StorageMode :: new_test( None ) ) ) . unwrap ( ) ;
10711073 // Initialize the ledger.
10721074 let core_ledger = Arc :: new ( CoreLedgerService :: new ( ledger. clone ( ) , Default :: default ( ) ) ) ;
10731075
@@ -1180,10 +1182,13 @@ mod tests {
11801182 subdag_map. insert ( commit_round, leader_cert_map. clone ( ) ) ;
11811183 subdag_map. insert ( commit_round - 1 , previous_cert_map. clone ( ) ) ;
11821184 let subdag = Subdag :: from ( subdag_map. clone ( ) ) ?;
1183- core_ledger. prepare_advance_to_next_quorum_block ( subdag, Default :: default ( ) ) ?
1185+ let ledger = core_ledger. clone ( ) ;
1186+ spawn_blocking ! ( ledger. prepare_advance_to_next_quorum_block( subdag, Default :: default ( ) ) ) ?
11841187 } ;
11851188 // Insert block 1.
1186- core_ledger. advance_to_next_block ( & block_1) ?;
1189+ let ledger = core_ledger. clone ( ) ;
1190+ let block = block_1. clone ( ) ;
1191+ spawn_blocking ! ( ledger. advance_to_next_block( & block) ) ?;
11871192
11881193 // Create block 2.
11891194 let leader_round_2 = commit_round + 2 ;
@@ -1207,10 +1212,13 @@ mod tests {
12071212 subdag_map_2. insert ( leader_round_2 - 1 , previous_cert_map_2. clone ( ) ) ;
12081213 subdag_map_2. insert ( leader_round_2 - 2 , prev_commit_cert_map_2. clone ( ) ) ;
12091214 let subdag_2 = Subdag :: from ( subdag_map_2. clone ( ) ) ?;
1210- core_ledger. prepare_advance_to_next_quorum_block ( subdag_2, Default :: default ( ) ) ?
1215+ let ledger = core_ledger. clone ( ) ;
1216+ spawn_blocking ! ( ledger. prepare_advance_to_next_quorum_block( subdag_2, Default :: default ( ) ) ) ?
12111217 } ;
12121218 // Insert block 2.
1213- core_ledger. advance_to_next_block ( & block_2) ?;
1219+ let ledger = core_ledger. clone ( ) ;
1220+ let block = block_2. clone ( ) ;
1221+ spawn_blocking ! ( ledger. advance_to_next_block( & block) ) ?;
12141222
12151223 // Create block 3
12161224 let leader_round_3 = commit_round + 4 ;
@@ -1234,24 +1242,25 @@ mod tests {
12341242 subdag_map_3. insert ( leader_round_3 - 1 , previous_cert_map_3. clone ( ) ) ;
12351243 subdag_map_3. insert ( leader_round_3 - 2 , prev_commit_cert_map_3. clone ( ) ) ;
12361244 let subdag_3 = Subdag :: from ( subdag_map_3. clone ( ) ) ?;
1237- core_ledger. prepare_advance_to_next_quorum_block ( subdag_3, Default :: default ( ) ) ?
1245+ let ledger = core_ledger. clone ( ) ;
1246+ spawn_blocking ! ( ledger. prepare_advance_to_next_quorum_block( subdag_3, Default :: default ( ) ) ) ?
12381247 } ;
12391248 // Insert block 3.
1240- core_ledger. advance_to_next_block ( & block_3) ?;
1249+ let ledger = core_ledger. clone ( ) ;
1250+ let block = block_3. clone ( ) ;
1251+ spawn_blocking ! ( ledger. advance_to_next_block( & block) ) ?;
12411252
12421253 // Initialize the syncing ledger.
1243- let storage_mode = StorageMode :: new_test ( None ) ;
1244- let syncing_ledger = Arc :: new ( CoreLedgerService :: new (
1245- CurrentLedger :: load ( genesis, storage_mode. clone ( ) ) . unwrap ( ) ,
1246- Default :: default ( ) ,
1247- ) ) ;
1254+ let syncing_ledger = spawn_blocking ! ( CurrentLedger :: load( genesis, StorageMode :: new_test( None ) ) ) . unwrap ( ) ;
1255+ let syncing_ledger = Arc :: new ( CoreLedgerService :: new ( syncing_ledger, Default :: default ( ) ) ) ;
12481256 // Initialize the gateway.
1257+ let storage_mode = StorageMode :: new_test ( None ) ;
12491258 let gateway =
12501259 Gateway :: new ( account. clone ( ) , storage. clone ( ) , syncing_ledger. clone ( ) , None , & [ ] , storage_mode, None ) ?;
12511260 // Initialize the block synchronization logic.
12521261 let block_sync = Arc :: new ( BlockSync :: new ( syncing_ledger. clone ( ) ) ) ;
12531262 // Initialize the sync module.
1254- let sync = Sync :: new ( gateway. clone ( ) , storage. clone ( ) , syncing_ledger. clone ( ) , block_sync) ;
1263+ let sync = Sync :: new ( gateway, storage, syncing_ledger. clone ( ) , block_sync) ;
12551264 // Try to sync block 1.
12561265 sync. sync_storage_with_block ( block_1) . await ?;
12571266 assert_eq ! ( syncing_ledger. latest_block_height( ) , 1 ) ;
@@ -1282,8 +1291,9 @@ mod tests {
12821291
12831292 // Create a genesis block with a seeded RNG to reproduce the same genesis private keys.
12841293 let seed: u64 = rng. r#gen ( ) ;
1285- let genesis_rng = & mut TestRng :: from_seed ( seed) ;
1286- let genesis = VM :: from ( store) . unwrap ( ) . genesis_beacon ( account. private_key ( ) , genesis_rng) . unwrap ( ) ;
1294+ let vm = VM :: from ( store) . unwrap ( ) ;
1295+ let genesis_pk = * account. private_key ( ) ;
1296+ let genesis = spawn_blocking ! ( vm. genesis_beacon( & genesis_pk, & mut TestRng :: from_seed( seed) ) ) . unwrap ( ) ;
12871297
12881298 // Extract the private keys from the genesis committee by using the same RNG to sample private keys.
12891299 let genesis_rng = & mut TestRng :: from_seed ( seed) ;
@@ -1294,13 +1304,13 @@ mod tests {
12941304 PrivateKey :: new ( genesis_rng) ?,
12951305 ] ;
12961306 // Initialize the ledger with the genesis block.
1297- let ledger = CurrentLedger :: load ( genesis. clone ( ) , StorageMode :: new_test ( None ) ) . unwrap ( ) ;
1307+ let ledger = spawn_blocking ! ( CurrentLedger :: load( genesis, StorageMode :: new_test( None ) ) ) . unwrap ( ) ;
12981308 // Initialize the ledger.
1299- let core_ledger = Arc :: new ( CoreLedgerService :: new ( ledger. clone ( ) , Default :: default ( ) ) ) ;
1309+ let core_ledger = Arc :: new ( CoreLedgerService :: new ( ledger, Default :: default ( ) ) ) ;
13001310 // Sample rounds of batch certificates starting at the genesis round from a static set of 4 authors.
13011311 let ( round_to_certificates_map, committee) = {
13021312 // Initialize the committee.
1303- let committee = ledger . latest_committee ( ) . unwrap ( ) ;
1313+ let committee = core_ledger . current_committee ( ) . unwrap ( ) ;
13041314 // Initialize a mapping from the round number to the set of batch certificates in the round.
13051315 let mut round_to_certificates_map: HashMap < u64 , IndexSet < BatchCertificate < CurrentNetwork > > > =
13061316 HashMap :: new ( ) ;
@@ -1369,10 +1379,13 @@ mod tests {
13691379 subdag_map. insert ( commit_round, leader_cert_map. clone ( ) ) ;
13701380 subdag_map. insert ( commit_round - 1 , previous_cert_map. clone ( ) ) ;
13711381 let subdag = Subdag :: from ( subdag_map. clone ( ) ) ?;
1372- core_ledger. prepare_advance_to_next_quorum_block ( subdag, Default :: default ( ) ) ?
1382+ let ledger = core_ledger. clone ( ) ;
1383+ spawn_blocking ! ( ledger. prepare_advance_to_next_quorum_block( subdag, Default :: default ( ) ) ) ?
13731384 } ;
13741385 // Insert block 1.
1375- core_ledger. advance_to_next_block ( & block_1) ?;
1386+ let ledger = core_ledger. clone ( ) ;
1387+ let block = block_1. clone ( ) ;
1388+ spawn_blocking ! ( ledger. advance_to_next_block( & block) ) ?;
13761389
13771390 // Create block 2.
13781391 let leader_round_2 = commit_round + 2 ;
@@ -1389,10 +1402,13 @@ mod tests {
13891402 subdag_map_2. insert ( leader_round_2, leader_cert_map_2. clone ( ) ) ;
13901403 subdag_map_2. insert ( leader_round_2 - 1 , previous_cert_map_2. clone ( ) ) ;
13911404 let subdag_2 = Subdag :: from ( subdag_map_2. clone ( ) ) ?;
1392- core_ledger. prepare_advance_to_next_quorum_block ( subdag_2, Default :: default ( ) ) ?
1405+ let ledger = core_ledger. clone ( ) ;
1406+ spawn_blocking ! ( ledger. prepare_advance_to_next_quorum_block( subdag_2, Default :: default ( ) ) ) ?
13931407 } ;
13941408 // Insert block 2.
1395- core_ledger. advance_to_next_block ( & block_2) ?;
1409+ let ledger = core_ledger. clone ( ) ;
1410+ let block = block_2. clone ( ) ;
1411+ spawn_blocking ! ( ledger. advance_to_next_block( & block) ) ?;
13961412
13971413 // Create block 3
13981414 let leader_round_3 = commit_round + 4 ;
@@ -1409,10 +1425,13 @@ mod tests {
14091425 subdag_map_3. insert ( leader_round_3, leader_cert_map_3. clone ( ) ) ;
14101426 subdag_map_3. insert ( leader_round_3 - 1 , previous_cert_map_3. clone ( ) ) ;
14111427 let subdag_3 = Subdag :: from ( subdag_map_3. clone ( ) ) ?;
1412- core_ledger. prepare_advance_to_next_quorum_block ( subdag_3, Default :: default ( ) ) ?
1428+ let ledger = core_ledger. clone ( ) ;
1429+ spawn_blocking ! ( ledger. prepare_advance_to_next_quorum_block( subdag_3, Default :: default ( ) ) ) ?
14131430 } ;
14141431 // Insert block 3.
1415- core_ledger. advance_to_next_block ( & block_3) ?;
1432+ let ledger = core_ledger. clone ( ) ;
1433+ let block = block_3. clone ( ) ;
1434+ spawn_blocking ! ( ledger. advance_to_next_block( & block) ) ?;
14161435
14171436 /*
14181437 Check that the pending certificates are computed correctly.
@@ -1443,6 +1462,7 @@ mod tests {
14431462 }
14441463 // Check that the set of pending certificates is equal to the set of candidate pending certificates.
14451464 assert_eq ! ( pending_certificates, candidate_pending_certificates) ;
1465+
14461466 Ok ( ( ) )
14471467 }
14481468}
0 commit comments