Skip to content

Commit 8e94e50

Browse files
committed
Add test
Results on current `v0.41-dev` ---- test_load_headers_from_storage::genesis_1_block stdout ---- thread 'test_load_headers_from_storage::genesis_1_block' (8727544) panicked at dash-spv/tests/header_sync_test.rs:380:5: assertion `left == right` failed: Loaded count mismatch left: 0 right: 1 ---- test_load_headers_from_storage::checkpoint_1_block stdout ---- thread 'test_load_headers_from_storage::checkpoint_1_block' (8727541) panicked at dash-spv/tests/header_sync_test.rs:381:5: assertion `left == right` failed: Chain state count mismatch left: 1 right: 2 note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace ---- test_load_headers_from_storage::checkpoint_60000_blocks stdout ---- thread 'test_load_headers_from_storage::checkpoint_60000_blocks' (8727542) panicked at dash-spv/tests/header_sync_test.rs:381:5: assertion `left == right` failed: Chain state count mismatch left: 60000 right: 120000 ---- test_load_headers_from_storage::genesis_60000_blocks stdout ---- thread 'test_load_headers_from_storage::genesis_60000_blocks' (8727545) panicked at dash-spv/tests/header_sync_test.rs:380:5: assertion `left == right` failed: Loaded count mismatch left: 59999 right: 60000
1 parent 5d182ab commit 8e94e50

File tree

2 files changed

+50
-1
lines changed

2 files changed

+50
-1
lines changed

dash-spv/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ tempfile = "3.0"
6060
tokio-test = "0.4"
6161
env_logger = "0.10"
6262
hex = "0.4"
63+
test-case = "3.3"
6364

6465
[[bin]]
6566
name = "dash-spv"

dash-spv/tests/header_sync_test.rs

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,18 @@ use std::time::Duration;
55
use dash_spv::{
66
client::{ClientConfig, DashSpvClient},
77
network::PeerNetworkManager,
8-
storage::{MemoryStorageManager, StorageManager},
8+
storage::{DiskStorageManager, MemoryStorageManager, StorageManager},
9+
sync::{HeaderSyncManager, ReorgConfig},
910
types::{ChainState, ValidationMode},
1011
};
1112
use dashcore::{block::Header as BlockHeader, block::Version, Network};
1213
use dashcore_hashes::Hash;
1314
use key_wallet::wallet::managed_wallet_info::ManagedWalletInfo;
1415
use key_wallet_manager::wallet_manager::WalletManager;
1516
use log::{debug, info};
17+
use test_case::test_case;
1618
use std::sync::Arc;
19+
use tempfile::TempDir;
1720
use tokio::sync::RwLock;
1821

1922
#[tokio::test]
@@ -332,3 +335,48 @@ async fn test_header_storage_consistency() {
332335

333336
info!("Header storage consistency test completed");
334337
}
338+
339+
#[test_case(0, 0 ; "genesis_0_blocks")]
340+
#[test_case(0, 1 ; "genesis_1_block")]
341+
#[test_case(0, 60000 ; "genesis_60000_blocks")]
342+
#[test_case(0, 0 ; "checkpoint_0_blocks")]
343+
#[test_case(170000, 1 ; "checkpoint_1_block")]
344+
#[test_case(12345, 60000 ; "checkpoint_60000_blocks")]
345+
#[tokio::test]
346+
async fn test_load_headers_from_storage(
347+
sync_base_height: u32,
348+
header_count: usize,
349+
) {
350+
// Setup: Create storage with 100 headers
351+
let temp_dir = TempDir::new().expect("Failed to create temp dir");
352+
let mut storage = DiskStorageManager::new(temp_dir.path().to_path_buf())
353+
.await
354+
.expect("Failed to create storage");
355+
356+
let test_headers = create_test_header_chain(header_count);
357+
358+
// Store chain state
359+
let mut chain_state = ChainState::new_for_network(Network::Dash);
360+
chain_state.sync_base_height = sync_base_height;
361+
chain_state.headers = test_headers.clone();
362+
storage.store_chain_state(&chain_state).await.expect("Failed to store chain state");
363+
364+
// Create HeaderSyncManager and load headers
365+
let config = ClientConfig::new(Network::Dash);
366+
let chain_state = Arc::new(RwLock::new(ChainState::new_for_network(Network::Dash)));
367+
let mut header_sync = HeaderSyncManager::<DiskStorageManager, PeerNetworkManager>::new(
368+
&config,
369+
ReorgConfig::default(),
370+
chain_state.clone(),
371+
)
372+
.expect("Failed to create HeaderSyncManager");
373+
374+
// Load headers from storage
375+
let loaded_count =
376+
header_sync.load_headers_from_storage(&storage).await.expect("Failed to load headers");
377+
378+
let cs = chain_state.read().await;
379+
380+
assert_eq!(loaded_count as usize, header_count, "Loaded count mismatch");
381+
assert_eq!(header_count, cs.headers.len(), "Chain state count mismatch");
382+
}

0 commit comments

Comments
 (0)