Skip to content

Commit f9234fd

Browse files
authored
chore: Remove MemoryStorageManager (#275)
* removed in memory storage manager * tests related to on memory storage removed, we understand that it taste the same operations as the diskstoragemanager. next time use generics pls * storage with tempo dir constructor renamed * using different storage folders in examples
1 parent 598ca66 commit f9234fd

36 files changed

+200
-946
lines changed

dash-spv/CLAUDE.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,9 +107,8 @@ The `SyncManager` coordinates all synchronization through a phase-based approach
107107
Each phase must complete before the next begins, ensuring consistency and simplifying error recovery.
108108

109109
### Storage Backends
110-
Two storage implementations via the `StorageManager` trait:
111-
- `MemoryStorageManager`: In-memory storage for testing
112-
- `DiskStorageManager`: Persistent disk storage for production
110+
One storage implementation via the `StorageManager` trait:
111+
- `DiskStorageManager`: Persistent disk storage
113112

114113
### Network Layer
115114
TCP-based networking with proper Dash protocol implementation:

dash-spv/CODE_ANALYSIS_SUMMARY.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@
215215
**Test Types:**
216216
- **Unit Tests**: Individual functions/modules (in-file with `#[cfg(test)]`)
217217
- **Integration Tests**: Cross-module interactions (`tests/` directory)
218-
- **Mock Tests**: Use MockNetworkManager, MemoryStorageManager
218+
- **Mock Tests**: Use MockNetworkManager, DiskStorageManager::new_tmp
219219
- **Property Tests**: Invariant testing (could add more with proptest)
220220

221221
---

dash-spv/examples/filter_sync.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//! BIP157 filter synchronization example.
22
33
use dash_spv::network::PeerNetworkManager;
4-
use dash_spv::storage::MemoryStorageManager;
4+
use dash_spv::storage::DiskStorageManager;
55
use dash_spv::{init_console_logging, ClientConfig, DashSpvClient, LevelFilter};
66
use dashcore::Address;
77
use key_wallet::wallet::managed_wallet_info::ManagedWalletInfo;
@@ -28,7 +28,8 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
2828
let network_manager = PeerNetworkManager::new(&config).await?;
2929

3030
// Create storage manager
31-
let storage_manager = MemoryStorageManager::new().await?;
31+
let storage_manager =
32+
DiskStorageManager::new("./.tmp/filter-sync-example-storage".into()).await?;
3233

3334
// Create wallet manager
3435
let wallet = Arc::new(RwLock::new(WalletManager::<ManagedWalletInfo>::new()));

dash-spv/examples/simple_sync.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//! Simple header synchronization example.
22
33
use dash_spv::network::PeerNetworkManager;
4-
use dash_spv::storage::MemoryStorageManager;
4+
use dash_spv::storage::DiskStorageManager;
55
use dash_spv::{init_console_logging, ClientConfig, DashSpvClient, LevelFilter};
66
use key_wallet::wallet::managed_wallet_info::ManagedWalletInfo;
77

@@ -24,7 +24,8 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
2424
let network_manager = PeerNetworkManager::new(&config).await?;
2525

2626
// Create storage manager
27-
let storage_manager = MemoryStorageManager::new().await?;
27+
let storage_manager =
28+
DiskStorageManager::new("./.tmp/simple-sync-example-storage".into()).await?;
2829

2930
// Create wallet manager
3031
let wallet = Arc::new(RwLock::new(WalletManager::<ManagedWalletInfo>::new()));

dash-spv/examples/spv_with_wallet.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
2626
let network_manager = PeerNetworkManager::new(&config).await?;
2727

2828
// Create storage manager - use disk storage for persistence
29-
let storage_manager = DiskStorageManager::new("/tmp/dash-spv-example".into()).await?;
29+
let storage_manager =
30+
DiskStorageManager::new("./.tmp/spv-with-wallet-example-storage".into()).await?;
3031

3132
// Create wallet manager
3233
let wallet = Arc::new(RwLock::new(WalletManager::<ManagedWalletInfo>::new()));

dash-spv/src/chain/chainlock_test.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
#[cfg(test)]
22
mod tests {
33
use super::super::*;
4-
use crate::storage::MemoryStorageManager;
5-
use crate::types::ChainState;
4+
use crate::{storage::DiskStorageManager, types::ChainState};
65
use dashcore::{BlockHash, ChainLock, Network};
76
use dashcore_hashes::Hash;
87

98
#[tokio::test]
109
async fn test_chainlock_processing() {
1110
// Create storage and ChainLock manager
1211
let mut storage =
13-
MemoryStorageManager::new().await.expect("Failed to create memory storage");
12+
DiskStorageManager::with_temp_dir().await.expect("Failed to create tmp storage");
1413
let chainlock_manager = ChainLockManager::new(true);
1514
let chain_state = ChainState::new_for_network(Network::Testnet);
1615

@@ -43,7 +42,7 @@ mod tests {
4342
#[tokio::test]
4443
async fn test_chainlock_superseding() {
4544
let mut storage =
46-
MemoryStorageManager::new().await.expect("Failed to create memory storage");
45+
DiskStorageManager::with_temp_dir().await.expect("Failed to create tmp storage");
4746
let chainlock_manager = ChainLockManager::new(true);
4847
let chain_state = ChainState::new_for_network(Network::Testnet);
4948

@@ -83,7 +82,7 @@ mod tests {
8382
let chainlock_manager = ChainLockManager::new(true);
8483
let chain_state = ChainState::new_for_network(Network::Testnet);
8584
let mut storage =
86-
MemoryStorageManager::new().await.expect("Failed to create memory storage");
85+
DiskStorageManager::with_temp_dir().await.expect("Failed to create tmp storage");
8786

8887
// Add ChainLocks at heights 1000, 2000, 3000
8988
for height in [1000, 2000, 3000] {

dash-spv/src/client/block_processor_test.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
mod tests {
55
use crate::client::block_processor::{BlockProcessingTask, BlockProcessor};
66

7-
use crate::storage::memory::MemoryStorageManager;
8-
use crate::storage::StorageManager;
7+
use crate::storage::DiskStorageManager;
98
use crate::types::{SpvEvent, SpvStats};
109
use dashcore::{blockdata::constants::genesis_block, Block, Network, Transaction};
1110

@@ -92,17 +91,19 @@ mod tests {
9291
}
9392

9493
async fn setup_processor() -> (
95-
BlockProcessor<MockWallet, MemoryStorageManager>,
94+
BlockProcessor<MockWallet, DiskStorageManager>,
9695
mpsc::UnboundedSender<BlockProcessingTask>,
9796
mpsc::UnboundedReceiver<SpvEvent>,
9897
Arc<RwLock<MockWallet>>,
99-
Arc<Mutex<MemoryStorageManager>>,
98+
Arc<Mutex<DiskStorageManager>>,
10099
) {
101100
let (task_tx, task_rx) = mpsc::unbounded_channel();
102101
let (event_tx, event_rx) = mpsc::unbounded_channel();
103102
let stats = Arc::new(RwLock::new(SpvStats::default()));
104103
let wallet = Arc::new(RwLock::new(MockWallet::new()));
105-
let storage = Arc::new(Mutex::new(MemoryStorageManager::new().await.unwrap()));
104+
let storage = Arc::new(Mutex::new(
105+
DiskStorageManager::with_temp_dir().await.expect("Failed to create tmp storage"),
106+
));
106107
let processor = BlockProcessor::new(
107108
task_rx,
108109
wallet.clone(),
@@ -305,7 +306,9 @@ mod tests {
305306
let (event_tx, mut event_rx) = mpsc::unbounded_channel();
306307
let stats = Arc::new(RwLock::new(SpvStats::default()));
307308
let wallet = Arc::new(RwLock::new(NonMatchingWallet {}));
308-
let storage = Arc::new(Mutex::new(MemoryStorageManager::new().await.unwrap()));
309+
let storage = Arc::new(Mutex::new(
310+
DiskStorageManager::with_temp_dir().await.expect("Failed to create tmp storage"),
311+
));
309312

310313
let processor =
311314
BlockProcessor::new(task_rx, wallet, storage, stats, event_tx, Network::Dash);

dash-spv/src/client/core.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ use super::{BlockProcessingTask, ClientConfig, StatusDisplay};
5252
/// - Essential for a reusable library
5353
///
5454
/// ### 4. **Testing Without Mocks** 🧪
55-
/// - Test implementations (`MockNetworkManager`, `MemoryStorageManager`) are
55+
/// - Test implementations (`MockNetworkManager`) are
5656
/// first-class types, not runtime injections
5757
/// - No conditional compilation or feature flags needed for tests
5858
/// - Type system ensures test and production code are compatible
@@ -84,7 +84,7 @@ use super::{BlockProcessingTask, ClientConfig, StatusDisplay};
8484
/// type TestSpvClient = DashSpvClient<
8585
/// WalletManager,
8686
/// MockNetworkManager,
87-
/// MemoryStorageManager,
87+
/// DiskStorageManager,
8888
/// >;
8989
/// ```
9090
///

dash-spv/src/client/message_handler_test.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ mod tests {
99
use crate::mempool_filter::MempoolFilter;
1010
use crate::network::mock::MockNetworkManager;
1111
use crate::network::NetworkManager;
12-
use crate::storage::memory::MemoryStorageManager;
1312
use crate::storage::StorageManager;
1413
use crate::sync::filters::FilterNotificationSender;
1514
use crate::sync::SyncManager;
@@ -41,11 +40,11 @@ mod tests {
4140
) {
4241
let network = Box::new(MockNetworkManager::new()) as Box<dyn NetworkManager>;
4342
let storage =
44-
Box::new(MemoryStorageManager::new().await.unwrap()) as Box<dyn StorageManager>;
43+
Box::new(DiskStorageManager::with_temp_dir().await.expect("Failed to create tmp storage")) as Box<dyn StorageManager>;
4544
let config = ClientConfig::default();
4645
let stats = Arc::new(RwLock::new(SpvStats::default()));
4746
let (block_tx, _block_rx) = mpsc::unbounded_channel();
48-
let wallet_storage = Arc::new(RwLock::new(MemoryStorageManager::new().await.unwrap()));
47+
let wallet_storage = Arc::new(RwLock::new(DiskStorageManager::with_temp_dir().await.expect("Failed to create tmp storage")));
4948
let wallet = Arc::new(RwLock::new(Wallet::new(wallet_storage)));
5049
let mempool_state = Arc::new(RwLock::new(MempoolState::default()));
5150
let (event_tx, _event_rx) = mpsc::unbounded_channel();

dash-spv/src/client/mod.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,8 @@ mod message_handler_test;
7070
#[cfg(test)]
7171
mod tests {
7272
use super::{ClientConfig, DashSpvClient};
73-
use crate::network::mock::MockNetworkManager;
74-
use crate::storage::MemoryStorageManager;
7573
use crate::types::UnconfirmedTransaction;
74+
use crate::{network::mock::MockNetworkManager, storage::DiskStorageManager};
7675
use dashcore::{Amount, Network, Transaction, TxOut};
7776
use key_wallet::wallet::managed_wallet_info::ManagedWalletInfo;
7877
use key_wallet_manager::wallet_manager::WalletManager;
@@ -96,7 +95,8 @@ mod tests {
9695
};
9796

9897
let network_manager = MockNetworkManager::new();
99-
let storage = MemoryStorageManager::new().await.expect("memory storage should initialize");
98+
let storage =
99+
DiskStorageManager::with_temp_dir().await.expect("Failed to create tmp storage");
100100
let wallet = Arc::new(RwLock::new(WalletManager::<ManagedWalletInfo>::new()));
101101

102102
let client = DashSpvClient::new(config, network_manager, storage, wallet)
@@ -123,7 +123,8 @@ mod tests {
123123
};
124124

125125
let network_manager = MockNetworkManager::new();
126-
let storage = MemoryStorageManager::new().await.expect("memory storage should initialize");
126+
let storage =
127+
DiskStorageManager::with_temp_dir().await.expect("Failed to create tmp storage");
127128
let wallet = Arc::new(RwLock::new(WalletManager::<ManagedWalletInfo>::new()));
128129

129130
let mut client = DashSpvClient::new(config, network_manager, storage, wallet)

0 commit comments

Comments
 (0)