@@ -10,32 +10,14 @@ use dash_spv::{
1010} ;
1111use dashcore:: {
1212 block:: Header as BlockHeader , hash_types:: FilterHeader , network:: message:: NetworkMessage ,
13- BlockHash , Network ,
13+ Network ,
1414} ;
15- use dashcore_hashes:: Hash ;
1615use std:: collections:: HashSet ;
1716use std:: sync:: Arc ;
1817use tempfile:: TempDir ;
1918use tokio:: sync:: mpsc:: UnboundedReceiver ;
2019use tokio:: sync:: Mutex ;
2120
22- /// Create a mock block header
23- fn create_mock_header ( height : u32 , prev_hash : BlockHash ) -> BlockHeader {
24- BlockHeader {
25- version : dashcore:: block:: Version :: ONE ,
26- prev_blockhash : prev_hash,
27- merkle_root : dashcore:: hash_types:: TxMerkleNode :: all_zeros ( ) ,
28- time : 1234567890 + height,
29- bits : dashcore:: pow:: CompactTarget :: from_consensus ( 0x1d00ffff ) ,
30- nonce : height,
31- }
32- }
33-
34- /// Create a mock filter header
35- fn create_mock_filter_header ( height : u32 ) -> FilterHeader {
36- FilterHeader :: from_slice ( & [ height as u8 ; 32 ] ) . unwrap ( )
37- }
38-
3921/// Mock network manager that captures sent messages
4022struct MockNetworkManager {
4123 sent_messages : Arc < Mutex < Vec < NetworkMessage > > > ,
@@ -114,26 +96,18 @@ async fn test_filter_sync_at_tip_edge_case() {
11496 let mut network = MockNetworkManager :: new ( ) ;
11597
11698 // Set up storage with headers and filter headers at the same height (tip)
117- let height = 100 ;
118- let mut headers = Vec :: new ( ) ;
119- let mut filter_headers = Vec :: new ( ) ;
120- let mut prev_hash = BlockHash :: all_zeros ( ) ;
121-
122- for i in 1 ..=height {
123- let header = create_mock_header ( i, prev_hash) ;
124- prev_hash = header. block_hash ( ) ;
125- headers. push ( header) ;
126- filter_headers. push ( create_mock_filter_header ( i) ) ;
127- }
99+ const TIP_HEIGHT : u32 = 100 ;
100+ let headers = BlockHeader :: dummy_batch ( 0 ..TIP_HEIGHT + 1 ) ;
101+ let filter_headers = FilterHeader :: dummy_batch ( 0 ..TIP_HEIGHT + 1 ) ;
128102
129103 storage. store_headers ( & headers) . await . unwrap ( ) ;
130104 storage. store_filter_headers ( & filter_headers) . await . unwrap ( ) ;
131105
132106 // Verify initial state
133107 let tip_height = storage. get_tip_height ( ) . await . unwrap ( ) ;
134108 let filter_tip_height = storage. get_filter_tip_height ( ) . await . unwrap ( ) . unwrap ( ) ;
135- assert_eq ! ( tip_height, height - 1 ) ; // 0-indexed
136- assert_eq ! ( filter_tip_height, height - 1 ) ; // 0-indexed
109+ assert_eq ! ( tip_height, TIP_HEIGHT ) ; // 0-indexed
110+ assert_eq ! ( filter_tip_height, TIP_HEIGHT ) ; // 0-indexed
137111
138112 // Try to start filter sync when already at tip
139113 let result = filter_sync. start_sync_headers ( & mut network, & mut storage) . await ;
@@ -157,23 +131,11 @@ async fn test_no_invalid_getcfheaders_at_tip() {
157131 . expect ( "Failed to create tmp storage" ) ;
158132 let mut network = MockNetworkManager :: new ( ) ;
159133
160- // Create a scenario where we're one block behind
161- let height = 100 ;
162- let mut headers = Vec :: new ( ) ;
163- let mut filter_headers = Vec :: new ( ) ;
164- let mut prev_hash = BlockHash :: all_zeros ( ) ;
165-
166- // Store headers up to height
167- for i in 1 ..=height {
168- let header = create_mock_header ( i, prev_hash) ;
169- prev_hash = header. block_hash ( ) ;
170- headers. push ( header) ;
171- }
172-
173- // Store filter headers up to height - 1
174- for i in 1 ..=( height - 1 ) {
175- filter_headers. push ( create_mock_filter_header ( i) ) ;
176- }
134+ // Create a scenario where we're one filter header behind
135+ // FilterHeader at TIP_HEIGHT is the one missing
136+ const TIP_HEIGHT : u32 = 99 ;
137+ let headers = BlockHeader :: dummy_batch ( 0 ..TIP_HEIGHT + 1 ) ;
138+ let filter_headers = FilterHeader :: dummy_batch ( 0 ..TIP_HEIGHT ) ;
177139
178140 storage. store_headers ( & headers) . await . unwrap ( ) ;
179141 storage. store_filter_headers ( & filter_headers) . await . unwrap ( ) ;
@@ -191,10 +153,9 @@ async fn test_no_invalid_getcfheaders_at_tip() {
191153 NetworkMessage :: GetCFHeaders ( get_cf_headers) => {
192154 // The critical check: start_height must be <= height of stop_hash
193155 assert_eq ! (
194- get_cf_headers. start_height,
195- height - 1 ,
156+ get_cf_headers. start_height, TIP_HEIGHT ,
196157 "Start height should be {}" ,
197- height - 1
158+ TIP_HEIGHT
198159 ) ;
199160 // We can't easily verify the stop_hash height here, but the request should be valid
200161 println ! (
0 commit comments