@@ -53,9 +53,6 @@ pub(crate) type ConfigOf<H> = <DbOf<H> as qmdb::sync::Database>::Config;
5353/// Type alias for the journal type of a harness.
5454pub ( crate ) type JournalOf < H > = <DbOf < H > as qmdb:: sync:: Database >:: Journal ;
5555
56- /// Type alias for the merkle family used by a harness.
57- pub ( crate ) type FamilyOf < H > = <DbOf < H > as qmdb:: sync:: Database >:: Family ;
58-
5956/// Trait for cleanup operations in tests.
6057pub ( crate ) trait Destructible {
6158 type Family : merkle:: Family ;
@@ -136,7 +133,7 @@ pub(crate) trait SyncTestHarness: Sized + 'static {
136133/// Test that empty operations arrays fetched do not cause panics when stored and applied
137134pub ( crate ) fn test_sync_empty_operations_no_panic < H : SyncTestHarness > ( )
138135where
139- Arc < DbOf < H > > : Resolver < Family = FamilyOf < H > , Op = OpOf < H > , Digest = Digest > ,
136+ Arc < DbOf < H > > : Resolver < Family = H :: Family , Op = OpOf < H > , Digest = Digest > ,
140137 OpOf < H > : Encode ,
141138 JournalOf < H > : Contiguous ,
142139{
@@ -181,14 +178,14 @@ where
181178/// Test that resolver failure is handled correctly
182179pub ( crate ) fn test_sync_resolver_fails < H : SyncTestHarness > ( )
183180where
184- resolver:: tests:: FailResolver < FamilyOf < H > , OpOf < H > , Digest > :
185- Resolver < Family = FamilyOf < H > , Op = OpOf < H > , Digest = Digest > ,
181+ resolver:: tests:: FailResolver < H :: Family , OpOf < H > , Digest > :
182+ Resolver < Family = H :: Family , Op = OpOf < H > , Digest = Digest > ,
186183 OpOf < H > : Encode ,
187184 JournalOf < H > : Contiguous ,
188185{
189186 let executor = deterministic:: Runner :: default ( ) ;
190187 executor. start ( |mut context| async move {
191- let resolver = resolver:: tests:: FailResolver :: < FamilyOf < H > , OpOf < H > , Digest > :: new ( ) ;
188+ let resolver = resolver:: tests:: FailResolver :: < H :: Family , OpOf < H > , Digest > :: new ( ) ;
192189 let target_root = Digest :: from ( [ 0 ; 32 ] ) ;
193190
194191 let db_config = H :: config ( & context. next_u64 ( ) . to_string ( ) , & context) ;
@@ -217,7 +214,7 @@ where
217214/// Test basic sync functionality with various batch sizes
218215pub ( crate ) fn test_sync < H : SyncTestHarness > ( target_db_ops : usize , fetch_batch_size : NonZeroU64 )
219216where
220- Arc < DbOf < H > > : Resolver < Family = FamilyOf < H > , Op = OpOf < H > , Digest = Digest > ,
217+ Arc < DbOf < H > > : Resolver < Family = H :: Family , Op = OpOf < H > , Digest = Digest > ,
221218 OpOf < H > : Encode ,
222219 JournalOf < H > : Contiguous ,
223220{
@@ -300,8 +297,8 @@ where
300297/// Test syncing to a subset of the target database (target has additional ops beyond sync range)
301298pub ( crate ) fn test_sync_subset_of_target_database < H : SyncTestHarness > ( target_db_ops : usize )
302299where
303- Arc < DbOf < H > > : Resolver < Family = FamilyOf < H > , Op = OpOf < H > , Digest = Digest > ,
304- OpOf < H > : Encode + Clone + OperationTrait < FamilyOf < H > , Key = Digest > ,
300+ Arc < DbOf < H > > : Resolver < Family = H :: Family , Op = OpOf < H > , Digest = Digest > ,
301+ OpOf < H > : Encode + Clone + OperationTrait < H :: Family , Key = Digest > ,
305302 JournalOf < H > : Contiguous ,
306303{
307304 let executor = deterministic:: Runner :: default ( ) ;
@@ -366,8 +363,8 @@ where
366363/// Tests the scenario where sync_db already has partial data and needs to sync additional ops.
367364pub ( crate ) fn test_sync_use_existing_db_partial_match < H : SyncTestHarness > ( original_ops : usize )
368365where
369- Arc < DbOf < H > > : Resolver < Family = FamilyOf < H > , Op = OpOf < H > , Digest = Digest > ,
370- OpOf < H > : Encode + Clone + OperationTrait < FamilyOf < H > , Key = Digest > ,
366+ Arc < DbOf < H > > : Resolver < Family = H :: Family , Op = OpOf < H > , Digest = Digest > ,
367+ OpOf < H > : Encode + Clone + OperationTrait < H :: Family , Key = Digest > ,
371368 JournalOf < H > : Contiguous ,
372369{
373370 let executor = deterministic:: Runner :: default ( ) ;
@@ -460,9 +457,9 @@ where
460457/// Uses FailResolver to verify that no network requests are made since data already exists.
461458pub ( crate ) fn test_sync_use_existing_db_exact_match < H : SyncTestHarness > ( num_ops : usize )
462459where
463- resolver:: tests:: FailResolver < FamilyOf < H > , OpOf < H > , Digest > :
464- Resolver < Family = FamilyOf < H > , Op = OpOf < H > , Digest = Digest > ,
465- OpOf < H > : Encode + Clone + OperationTrait < FamilyOf < H > , Key = Digest > ,
460+ resolver:: tests:: FailResolver < H :: Family , OpOf < H > , Digest > :
461+ Resolver < Family = H :: Family , Op = OpOf < H > , Digest = Digest > ,
462+ OpOf < H > : Encode + Clone + OperationTrait < H :: Family , Key = Digest > ,
466463 JournalOf < H > : Contiguous ,
467464{
468465 let executor = deterministic:: Runner :: default ( ) ;
@@ -501,7 +498,7 @@ where
501498 // sync_db should never ask the resolver for operations
502499 // because it is already complete. Use a resolver that always fails
503500 // to ensure that it's not being used.
504- let resolver = resolver:: tests:: FailResolver :: < FamilyOf < H > , OpOf < H > , Digest > :: new ( ) ;
501+ let resolver = resolver:: tests:: FailResolver :: < H :: Family , OpOf < H > , Digest > :: new ( ) ;
505502 let config = Config {
506503 db_config : sync_config, // Use same config to access same partitions
507504 fetch_batch_size : NZU64 ! ( 10 ) ,
@@ -546,7 +543,7 @@ where
546543/// Test that the client fails to sync if the lower bound is decreased via target update.
547544pub ( crate ) fn test_target_update_lower_bound_decrease < H : SyncTestHarness > ( )
548545where
549- Arc < DbOf < H > > : Resolver < Family = FamilyOf < H > , Op = OpOf < H > , Digest = Digest > ,
546+ Arc < DbOf < H > > : Resolver < Family = H :: Family , Op = OpOf < H > , Digest = Digest > ,
550547 OpOf < H > : Encode ,
551548 JournalOf < H > : Contiguous ,
552549{
@@ -621,7 +618,7 @@ where
621618/// Test that the client fails to sync if the upper bound is decreased via target update.
622619pub ( crate ) fn test_target_update_upper_bound_decrease < H : SyncTestHarness > ( )
623620where
624- Arc < DbOf < H > > : Resolver < Family = FamilyOf < H > , Op = OpOf < H > , Digest = Digest > ,
621+ Arc < DbOf < H > > : Resolver < Family = H :: Family , Op = OpOf < H > , Digest = Digest > ,
625622 OpOf < H > : Encode ,
626623 JournalOf < H > : Contiguous ,
627624{
@@ -690,7 +687,7 @@ where
690687/// Test that the client succeeds when bounds are updated (increased).
691688pub ( crate ) fn test_target_update_bounds_increase < H : SyncTestHarness > ( )
692689where
693- Arc < DbOf < H > > : Resolver < Family = FamilyOf < H > , Op = OpOf < H > , Digest = Digest > ,
690+ Arc < DbOf < H > > : Resolver < Family = H :: Family , Op = OpOf < H > , Digest = Digest > ,
694691 OpOf < H > : Encode + Clone ,
695692 JournalOf < H > : Contiguous ,
696693{
@@ -775,7 +772,7 @@ where
775772/// Test that target updates can be sent even after the client is done (no panic).
776773pub ( crate ) fn test_target_update_on_done_client < H : SyncTestHarness > ( )
777774where
778- Arc < DbOf < H > > : Resolver < Family = FamilyOf < H > , Op = OpOf < H > , Digest = Digest > ,
775+ Arc < DbOf < H > > : Resolver < Family = H :: Family , Op = OpOf < H > , Digest = Digest > ,
779776 OpOf < H > : Encode ,
780777 JournalOf < H > : Contiguous ,
781778{
@@ -844,7 +841,7 @@ where
844841/// Test that explicit finish control waits for a finish signal even after reaching target.
845842pub ( crate ) fn test_sync_waits_for_explicit_finish < H : SyncTestHarness > ( )
846843where
847- Arc < DbOf < H > > : Resolver < Family = FamilyOf < H > , Op = OpOf < H > , Digest = Digest > ,
844+ Arc < DbOf < H > > : Resolver < Family = H :: Family , Op = OpOf < H > , Digest = Digest > ,
848845 OpOf < H > : Encode ,
849846 JournalOf < H > : Contiguous ,
850847{
@@ -947,7 +944,7 @@ where
947944/// Test that a finish signal received before target completion still allows full sync.
948945pub ( crate ) fn test_sync_handles_early_finish_signal < H : SyncTestHarness > ( )
949946where
950- Arc < DbOf < H > > : Resolver < Family = FamilyOf < H > , Op = OpOf < H > , Digest = Digest > ,
947+ Arc < DbOf < H > > : Resolver < Family = H :: Family , Op = OpOf < H > , Digest = Digest > ,
951948 OpOf < H > : Encode ,
952949 JournalOf < H > : Contiguous ,
953950{
@@ -1010,7 +1007,7 @@ where
10101007/// Test that dropping finish sender without sending is treated as an error.
10111008pub ( crate ) fn test_sync_fails_when_finish_sender_dropped < H : SyncTestHarness > ( )
10121009where
1013- Arc < DbOf < H > > : Resolver < Family = FamilyOf < H > , Op = OpOf < H > , Digest = Digest > ,
1010+ Arc < DbOf < H > > : Resolver < Family = H :: Family , Op = OpOf < H > , Digest = Digest > ,
10141011 OpOf < H > : Encode ,
10151012 JournalOf < H > : Contiguous ,
10161013{
@@ -1059,7 +1056,7 @@ where
10591056/// Test that dropping reached-target receiver does not fail sync.
10601057pub ( crate ) fn test_sync_allows_dropped_reached_target_receiver < H : SyncTestHarness > ( )
10611058where
1062- Arc < DbOf < H > > : Resolver < Family = FamilyOf < H > , Op = OpOf < H > , Digest = Digest > ,
1059+ Arc < DbOf < H > > : Resolver < Family = H :: Family , Op = OpOf < H > , Digest = Digest > ,
10631060 OpOf < H > : Encode ,
10641061 JournalOf < H > : Contiguous ,
10651062{
@@ -1113,8 +1110,7 @@ pub(crate) fn test_target_update_during_sync<H: SyncTestHarness>(
11131110 initial_ops : usize ,
11141111 additional_ops : usize ,
11151112) where
1116- Arc < AsyncRwLock < Option < DbOf < H > > > > :
1117- Resolver < Family = FamilyOf < H > , Op = OpOf < H > , Digest = Digest > ,
1113+ Arc < AsyncRwLock < Option < DbOf < H > > > > : Resolver < Family = H :: Family , Op = OpOf < H > , Digest = Digest > ,
11181114 OpOf < H > : Encode + Clone ,
11191115 JournalOf < H > : Contiguous ,
11201116{
@@ -1225,7 +1221,7 @@ pub(crate) fn test_target_update_during_sync<H: SyncTestHarness>(
12251221/// Test demonstrating that a synced database can be reopened and retain its state.
12261222pub ( crate ) fn test_sync_database_persistence < H : SyncTestHarness > ( )
12271223where
1228- Arc < DbOf < H > > : Resolver < Family = FamilyOf < H > , Op = OpOf < H > , Digest = Digest > ,
1224+ Arc < DbOf < H > > : Resolver < Family = H :: Family , Op = OpOf < H > , Digest = Digest > ,
12291225 OpOf < H > : Encode + Clone ,
12301226 JournalOf < H > : Contiguous ,
12311227{
@@ -1299,7 +1295,7 @@ where
12991295/// Test post-sync usability: after syncing, the database supports normal operations.
13001296pub ( crate ) fn test_sync_post_sync_usability < H : SyncTestHarness > ( )
13011297where
1302- Arc < DbOf < H > > : Resolver < Family = FamilyOf < H > , Op = OpOf < H > , Digest = Digest > ,
1298+ Arc < DbOf < H > > : Resolver < Family = H :: Family , Op = OpOf < H > , Digest = Digest > ,
13031299 OpOf < H > : Encode ,
13041300 JournalOf < H > : Contiguous ,
13051301{
@@ -1639,7 +1635,7 @@ where
16391635/// succeeds on retry when the resolver returns correct data.
16401636pub ( crate ) fn test_sync_retries_bad_pinned_nodes < H : SyncTestHarness > ( )
16411637where
1642- Arc < DbOf < H > > : Resolver < Family = FamilyOf < H > , Op = OpOf < H > , Digest = Digest > ,
1638+ Arc < DbOf < H > > : Resolver < Family = H :: Family , Op = OpOf < H > , Digest = Digest > ,
16431639 OpOf < H > : Encode ,
16441640 JournalOf < H > : Contiguous ,
16451641{
@@ -1776,7 +1772,7 @@ impl<R: Resolver<Digest = Digest>> Resolver for ReplayFreshBoundaryResolver<R> {
17761772/// boundary retry is still outstanding.
17771773pub ( crate ) fn test_sync_waits_for_boundary_retry_after_target_update < H : SyncTestHarness > ( )
17781774where
1779- Arc < DbOf < H > > : Resolver < Family = FamilyOf < H > , Op = OpOf < H > , Digest = Digest > ,
1775+ Arc < DbOf < H > > : Resolver < Family = H :: Family , Op = OpOf < H > , Digest = Digest > ,
17801776 OpOf < H > : Encode ,
17811777 JournalOf < H > : Contiguous ,
17821778{
@@ -2349,6 +2345,8 @@ mod harnesses {
23492345 }
23502346 let merkleized = batch. merkleize ( & db, None :: < Digest > ) . await . unwrap ( ) ;
23512347 db. apply_batch ( merkleized) . await . unwrap ( ) ;
2348+ let merkleized = db. new_batch ( ) . merkleize ( & db, None :: < Digest > ) . await . unwrap ( ) ;
2349+ db. apply_batch ( merkleized) . await . unwrap ( ) ;
23522350 db
23532351 }
23542352 }
@@ -2429,6 +2427,12 @@ mod harnesses {
24292427 }
24302428 let merkleized = batch. merkleize ( & db, None :: < Vec < u8 > > ) . await . unwrap ( ) ;
24312429 db. apply_batch ( merkleized) . await . unwrap ( ) ;
2430+ let merkleized = db
2431+ . new_batch ( )
2432+ . merkleize ( & db, None :: < Vec < u8 > > )
2433+ . await
2434+ . unwrap ( ) ;
2435+ db. apply_batch ( merkleized) . await . unwrap ( ) ;
24322436 db
24332437 }
24342438 }
@@ -2506,6 +2510,8 @@ mod harnesses {
25062510 }
25072511 let merkleized = batch. merkleize ( & db, None :: < Digest > ) . await . unwrap ( ) ;
25082512 db. apply_batch ( merkleized) . await . unwrap ( ) ;
2513+ let merkleized = db. new_batch ( ) . merkleize ( & db, None :: < Digest > ) . await . unwrap ( ) ;
2514+ db. apply_batch ( merkleized) . await . unwrap ( ) ;
25092515 db
25102516 }
25112517 }
@@ -2589,6 +2595,12 @@ mod harnesses {
25892595 }
25902596 let merkleized = batch. merkleize ( & db, None :: < Vec < u8 > > ) . await . unwrap ( ) ;
25912597 db. apply_batch ( merkleized) . await . unwrap ( ) ;
2598+ let merkleized = db
2599+ . new_batch ( )
2600+ . merkleize ( & db, None :: < Vec < u8 > > )
2601+ . await
2602+ . unwrap ( ) ;
2603+ db. apply_batch ( merkleized) . await . unwrap ( ) ;
25922604 db
25932605 }
25942606 }
@@ -2720,6 +2732,11 @@ macro_rules! sync_tests_for_harness {
27202732 fn test_sync_retries_bad_pinned_nodes( ) {
27212733 super :: test_sync_retries_bad_pinned_nodes:: <$harness>( ) ;
27222734 }
2735+
2736+ #[ test_traced]
2737+ fn test_sync_waits_for_boundary_retry_after_target_update( ) {
2738+ super :: test_sync_waits_for_boundary_retry_after_target_update:: <$harness>( ) ;
2739+ }
27232740 }
27242741 } ;
27252742}
@@ -2732,11 +2749,6 @@ macro_rules! from_sync_result_tests_for_harness {
27322749 use super :: harnesses;
27332750 use commonware_macros:: test_traced;
27342751
2735- #[ test_traced]
2736- fn test_sync_waits_for_boundary_retry_after_target_update( ) {
2737- super :: test_sync_waits_for_boundary_retry_after_target_update:: <$harness>( ) ;
2738- }
2739-
27402752 #[ test_traced( "WARN" ) ]
27412753 fn test_from_sync_result_empty_to_empty( ) {
27422754 super :: test_from_sync_result_empty_to_empty:: <$harness>( ) ;
0 commit comments