@@ -1043,8 +1043,9 @@ mod tests {
10431043
10441044 // Create a genesis block with a seeded RNG to reproduce the same genesis private keys.
10451045 let seed: u64 = rng. r#gen ( ) ;
1046- let genesis_rng = & mut TestRng :: from_seed ( seed) ;
1047- let genesis = VM :: from ( store) . unwrap ( ) . genesis_beacon ( account. private_key ( ) , genesis_rng) . unwrap ( ) ;
1046+ let vm = VM :: from ( store) . unwrap ( ) ;
1047+ let genesis_pk = account. private_key ( ) . clone ( ) ;
1048+ let genesis = spawn_blocking ! ( vm. genesis_beacon( & genesis_pk, & mut TestRng :: from_seed( seed) ) ) . unwrap ( ) ;
10481049
10491050 // Extract the private keys from the genesis committee by using the same RNG to sample private keys.
10501051 let genesis_rng = & mut TestRng :: from_seed ( seed) ;
@@ -1170,10 +1171,13 @@ mod tests {
11701171 subdag_map. insert ( commit_round, leader_cert_map. clone ( ) ) ;
11711172 subdag_map. insert ( commit_round - 1 , previous_cert_map. clone ( ) ) ;
11721173 let subdag = Subdag :: from ( subdag_map. clone ( ) ) ?;
1173- core_ledger. prepare_advance_to_next_quorum_block ( subdag, Default :: default ( ) ) ?
1174+ let ledger = core_ledger. clone ( ) ;
1175+ spawn_blocking ! ( ledger. prepare_advance_to_next_quorum_block( subdag, Default :: default ( ) ) ) ?
11741176 } ;
11751177 // Insert block 1.
1176- core_ledger. advance_to_next_block ( & block_1) ?;
1178+ let ledger = core_ledger. clone ( ) ;
1179+ let block = block_1. clone ( ) ;
1180+ spawn_blocking ! ( ledger. advance_to_next_block( & block) ) ?;
11771181
11781182 // Create block 2.
11791183 let leader_round_2 = commit_round + 2 ;
@@ -1197,10 +1201,13 @@ mod tests {
11971201 subdag_map_2. insert ( leader_round_2 - 1 , previous_cert_map_2. clone ( ) ) ;
11981202 subdag_map_2. insert ( leader_round_2 - 2 , prev_commit_cert_map_2. clone ( ) ) ;
11991203 let subdag_2 = Subdag :: from ( subdag_map_2. clone ( ) ) ?;
1200- core_ledger. prepare_advance_to_next_quorum_block ( subdag_2, Default :: default ( ) ) ?
1204+ let ledger = core_ledger. clone ( ) ;
1205+ spawn_blocking ! ( ledger. prepare_advance_to_next_quorum_block( subdag_2, Default :: default ( ) ) ) ?
12011206 } ;
12021207 // Insert block 2.
1203- core_ledger. advance_to_next_block ( & block_2) ?;
1208+ let ledger = core_ledger. clone ( ) ;
1209+ let block = block_2. clone ( ) ;
1210+ spawn_blocking ! ( ledger. advance_to_next_block( & block) ) ?;
12041211
12051212 // Create block 3
12061213 let leader_round_3 = commit_round + 4 ;
@@ -1224,24 +1231,25 @@ mod tests {
12241231 subdag_map_3. insert ( leader_round_3 - 1 , previous_cert_map_3. clone ( ) ) ;
12251232 subdag_map_3. insert ( leader_round_3 - 2 , prev_commit_cert_map_3. clone ( ) ) ;
12261233 let subdag_3 = Subdag :: from ( subdag_map_3. clone ( ) ) ?;
1227- core_ledger. prepare_advance_to_next_quorum_block ( subdag_3, Default :: default ( ) ) ?
1234+ let ledger = core_ledger. clone ( ) ;
1235+ spawn_blocking ! ( ledger. prepare_advance_to_next_quorum_block( subdag_3, Default :: default ( ) ) ) ?
12281236 } ;
12291237 // Insert block 3.
1230- core_ledger. advance_to_next_block ( & block_3) ?;
1238+ let ledger = core_ledger. clone ( ) ;
1239+ let block = block_3. clone ( ) ;
1240+ spawn_blocking ! ( ledger. advance_to_next_block( & block) ) ?;
12311241
12321242 // Initialize the syncing ledger.
1233- let storage_mode = StorageMode :: new_test ( None ) ;
1234- let syncing_ledger = Arc :: new ( CoreLedgerService :: new (
1235- CurrentLedger :: load ( genesis, storage_mode. clone ( ) ) . unwrap ( ) ,
1236- Default :: default ( ) ,
1237- ) ) ;
1243+ let syncing_ledger = spawn_blocking ! ( CurrentLedger :: load( genesis, StorageMode :: new_test( None ) ) ) . unwrap ( ) ;
1244+ let syncing_ledger = Arc :: new ( CoreLedgerService :: new ( syncing_ledger, Default :: default ( ) ) ) ;
12381245 // Initialize the gateway.
1246+ let storage_mode = StorageMode :: new_test ( None ) ;
12391247 let gateway =
12401248 Gateway :: new ( account. clone ( ) , storage. clone ( ) , syncing_ledger. clone ( ) , None , & [ ] , storage_mode, None ) ?;
12411249 // Initialize the block synchronization logic.
12421250 let block_sync = Arc :: new ( BlockSync :: new ( syncing_ledger. clone ( ) ) ) ;
12431251 // Initialize the sync module.
1244- let sync = Sync :: new ( gateway. clone ( ) , storage. clone ( ) , syncing_ledger. clone ( ) , block_sync) ;
1252+ let sync = Sync :: new ( gateway, storage, syncing_ledger. clone ( ) , block_sync) ;
12451253 // Try to sync block 1.
12461254 sync. sync_storage_with_block ( block_1) . await ?;
12471255 assert_eq ! ( syncing_ledger. latest_block_height( ) , 1 ) ;
@@ -1255,6 +1263,12 @@ mod tests {
12551263 assert ! ( syncing_ledger. contains_block_height( 1 ) ) ;
12561264 assert ! ( syncing_ledger. contains_block_height( 2 ) ) ;
12571265
1266+ tokio:: task:: spawn_blocking ( move || {
1267+ drop ( core_ledger) ;
1268+ drop ( syncing_ledger) ;
1269+ drop ( sync) ;
1270+ } ) ;
1271+
12581272 Ok ( ( ) )
12591273 }
12601274
@@ -1272,8 +1286,9 @@ mod tests {
12721286
12731287 // Create a genesis block with a seeded RNG to reproduce the same genesis private keys.
12741288 let seed: u64 = rng. r#gen ( ) ;
1275- let genesis_rng = & mut TestRng :: from_seed ( seed) ;
1276- let genesis = VM :: from ( store) . unwrap ( ) . genesis_beacon ( account. private_key ( ) , genesis_rng) . unwrap ( ) ;
1289+ let vm = VM :: from ( store) . unwrap ( ) ;
1290+ let genesis_pk = account. private_key ( ) . clone ( ) ;
1291+ let genesis = spawn_blocking ! ( vm. genesis_beacon( & genesis_pk, & mut TestRng :: from_seed( seed) ) ) . unwrap ( ) ;
12771292
12781293 // Extract the private keys from the genesis committee by using the same RNG to sample private keys.
12791294 let genesis_rng = & mut TestRng :: from_seed ( seed) ;
@@ -1284,13 +1299,13 @@ mod tests {
12841299 PrivateKey :: new ( genesis_rng) ?,
12851300 ] ;
12861301 // Initialize the ledger with the genesis block.
1287- let ledger = spawn_blocking ! ( CurrentLedger :: load( genesis. clone ( ) , StorageMode :: new_test( None ) ) ) . unwrap ( ) ;
1302+ let ledger = spawn_blocking ! ( CurrentLedger :: load( genesis, StorageMode :: new_test( None ) ) ) . unwrap ( ) ;
12881303 // Initialize the ledger.
1289- let core_ledger = Arc :: new ( CoreLedgerService :: new ( ledger. clone ( ) , Default :: default ( ) ) ) ;
1304+ let core_ledger = Arc :: new ( CoreLedgerService :: new ( ledger, Default :: default ( ) ) ) ;
12901305 // Sample rounds of batch certificates starting at the genesis round from a static set of 4 authors.
12911306 let ( round_to_certificates_map, committee) = {
12921307 // Initialize the committee.
1293- let committee = ledger . latest_committee ( ) . unwrap ( ) ;
1308+ let committee = core_ledger . current_committee ( ) . unwrap ( ) ;
12941309 // Initialize a mapping from the round number to the set of batch certificates in the round.
12951310 let mut round_to_certificates_map: HashMap < u64 , IndexSet < BatchCertificate < CurrentNetwork > > > =
12961311 HashMap :: new ( ) ;
@@ -1359,10 +1374,13 @@ mod tests {
13591374 subdag_map. insert ( commit_round, leader_cert_map. clone ( ) ) ;
13601375 subdag_map. insert ( commit_round - 1 , previous_cert_map. clone ( ) ) ;
13611376 let subdag = Subdag :: from ( subdag_map. clone ( ) ) ?;
1362- core_ledger. prepare_advance_to_next_quorum_block ( subdag, Default :: default ( ) ) ?
1377+ let ledger = core_ledger. clone ( ) ;
1378+ spawn_blocking ! ( ledger. prepare_advance_to_next_quorum_block( subdag, Default :: default ( ) ) ) ?
13631379 } ;
13641380 // Insert block 1.
1365- core_ledger. advance_to_next_block ( & block_1) ?;
1381+ let ledger = core_ledger. clone ( ) ;
1382+ let block = block_1. clone ( ) ;
1383+ spawn_blocking ! ( ledger. advance_to_next_block( & block) ) ?;
13661384
13671385 // Create block 2.
13681386 let leader_round_2 = commit_round + 2 ;
@@ -1379,10 +1397,13 @@ mod tests {
13791397 subdag_map_2. insert ( leader_round_2, leader_cert_map_2. clone ( ) ) ;
13801398 subdag_map_2. insert ( leader_round_2 - 1 , previous_cert_map_2. clone ( ) ) ;
13811399 let subdag_2 = Subdag :: from ( subdag_map_2. clone ( ) ) ?;
1382- core_ledger. prepare_advance_to_next_quorum_block ( subdag_2, Default :: default ( ) ) ?
1400+ let ledger = core_ledger. clone ( ) ;
1401+ spawn_blocking ! ( ledger. prepare_advance_to_next_quorum_block( subdag_2, Default :: default ( ) ) ) ?
13831402 } ;
13841403 // Insert block 2.
1385- core_ledger. advance_to_next_block ( & block_2) ?;
1404+ let ledger = core_ledger. clone ( ) ;
1405+ let block = block_2. clone ( ) ;
1406+ spawn_blocking ! ( ledger. advance_to_next_block( & block) ) ?;
13861407
13871408 // Create block 3
13881409 let leader_round_3 = commit_round + 4 ;
@@ -1399,10 +1420,13 @@ mod tests {
13991420 subdag_map_3. insert ( leader_round_3, leader_cert_map_3. clone ( ) ) ;
14001421 subdag_map_3. insert ( leader_round_3 - 1 , previous_cert_map_3. clone ( ) ) ;
14011422 let subdag_3 = Subdag :: from ( subdag_map_3. clone ( ) ) ?;
1402- core_ledger. prepare_advance_to_next_quorum_block ( subdag_3, Default :: default ( ) ) ?
1423+ let ledger = core_ledger. clone ( ) ;
1424+ spawn_blocking ! ( ledger. prepare_advance_to_next_quorum_block( subdag_3, Default :: default ( ) ) ) ?
14031425 } ;
14041426 // Insert block 3.
1405- core_ledger. advance_to_next_block ( & block_3) ?;
1427+ let ledger = core_ledger. clone ( ) ;
1428+ let block = block_3. clone ( ) ;
1429+ spawn_blocking ! ( ledger. advance_to_next_block( & block) ) ?;
14061430
14071431 /*
14081432 Check that the pending certificates are computed correctly.
@@ -1433,6 +1457,13 @@ mod tests {
14331457 }
14341458 // Check that the set of pending certificates is equal to the set of candidate pending certificates.
14351459 assert_eq ! ( pending_certificates, candidate_pending_certificates) ;
1460+
1461+ println ! ( "1" ) ;
1462+ tokio:: task:: spawn_blocking ( move || {
1463+ drop ( core_ledger) ;
1464+ drop ( storage) ;
1465+ } ) ;
1466+
14361467 Ok ( ( ) )
14371468 }
14381469}
0 commit comments