|
1 | 1 | //! Integration tests for SPV wallet functionality |
2 | 2 |
|
| 3 | +use dashcore::bip158::{BlockFilter, BlockFilterWriter}; |
3 | 4 | use dashcore::blockdata::block::{Block, Header, Version}; |
4 | 5 | use dashcore::blockdata::script::ScriptBuf; |
5 | | -use dashcore::blockdata::transaction::{OutPoint, Transaction}; |
| 6 | +use dashcore::blockdata::transaction::Transaction; |
6 | 7 | use dashcore::pow::CompactTarget; |
7 | | -use dashcore::{BlockHash, Txid}; |
8 | | -use dashcore::{TxIn, TxOut}; |
| 8 | +use dashcore::{BlockHash, OutPoint, TxIn, TxOut, Txid}; |
9 | 9 | use dashcore_hashes::Hash; |
10 | | - |
11 | | -use dashcore::bip158::{BlockFilter, BlockFilterWriter}; |
| 10 | +use dashcore_test_utils::create_transaction_to_address; |
12 | 11 | use key_wallet::wallet::initialization::WalletAccountCreationOptions; |
13 | 12 | use key_wallet::wallet::managed_wallet_info::ManagedWalletInfo; |
14 | 13 | use key_wallet::Network; |
@@ -100,23 +99,61 @@ async fn test_filter_checking() { |
100 | 99 | #[tokio::test] |
101 | 100 | async fn test_block_processing() { |
102 | 101 | let mut manager = WalletManager::<ManagedWalletInfo>::new(); |
103 | | - |
104 | | - // Create a test wallet |
105 | 102 | let _wallet_id = manager |
106 | 103 | .create_wallet_with_random_mnemonic(WalletAccountCreationOptions::Default, Network::Testnet) |
107 | 104 | .expect("Failed to create wallet"); |
108 | 105 |
|
109 | | - // Create a transaction |
110 | | - let tx = create_test_transaction(100000); |
| 106 | + let addresses = manager.monitored_addresses(); |
| 107 | + assert!(!addresses.is_empty()); |
| 108 | + let external = dashcore::Address::p2pkh( |
| 109 | + &dashcore::PublicKey::from_slice(&[0x02; 33]).expect("valid pubkey"), |
| 110 | + Network::Testnet, |
| 111 | + ); |
| 112 | + |
| 113 | + let addresses_before = manager.monitored_addresses(); |
| 114 | + assert!(!addresses_before.is_empty()); |
| 115 | + |
| 116 | + let tx1 = create_transaction_to_address(&addresses[0], 100_000); |
| 117 | + let tx2 = create_transaction_to_address(&addresses[1], 200_000); |
| 118 | + let tx3 = create_transaction_to_address(&external, 300_000); |
| 119 | + |
| 120 | + let block = create_test_block(100, vec![tx1.clone(), tx2.clone(), tx3.clone()]); |
| 121 | + let result = manager.process_block(&block, 100, Network::Testnet).await; |
| 122 | + |
| 123 | + assert_eq!(result.relevant_txids.len(), 2); |
| 124 | + assert!(result.relevant_txids.contains(&tx1.txid())); |
| 125 | + assert!(result.relevant_txids.contains(&tx2.txid())); |
| 126 | + assert!(!result.relevant_txids.contains(&tx3.txid())); |
| 127 | + assert_eq!(result.new_addresses.len(), 2); |
| 128 | + |
| 129 | + let addresses_after = manager.monitored_addresses(); |
| 130 | + let actual_increase = addresses_after.len() - addresses_before.len(); |
| 131 | + assert_eq!(result.new_addresses.len(), actual_increase); |
| 132 | + |
| 133 | + for new_addr in &result.new_addresses { |
| 134 | + assert!(addresses_after.contains(new_addr)); |
| 135 | + } |
| 136 | +} |
| 137 | + |
| 138 | +#[tokio::test] |
| 139 | +async fn test_block_processing_result_empty() { |
| 140 | + let mut manager = WalletManager::<ManagedWalletInfo>::new(); |
| 141 | + let _wallet_id = manager |
| 142 | + .create_wallet_with_random_mnemonic(WalletAccountCreationOptions::Default, Network::Testnet) |
| 143 | + .expect("Failed to create wallet"); |
111 | 144 |
|
112 | | - // Create a block with this transaction |
113 | | - let block = create_test_block(100, vec![tx.clone()]); |
| 145 | + let external = dashcore::Address::p2pkh( |
| 146 | + &dashcore::PublicKey::from_slice(&[0x02; 33]).expect("valid pubkey"), |
| 147 | + Network::Testnet, |
| 148 | + ); |
| 149 | + let tx1 = create_transaction_to_address(&external, 100_000); |
| 150 | + let tx2 = create_transaction_to_address(&external, 200_000); |
114 | 151 |
|
115 | | - // Process the block |
| 152 | + let block = create_test_block(100, vec![tx1, tx2]); |
116 | 153 | let result = manager.process_block(&block, 100, Network::Testnet).await; |
117 | 154 |
|
118 | | - // Since we're not watching specific addresses, no transactions should be relevant |
119 | | - assert_eq!(result.len(), 0); |
| 155 | + assert!(result.relevant_txids.is_empty()); |
| 156 | + assert!(result.new_addresses.is_empty()); |
120 | 157 | } |
121 | 158 |
|
122 | 159 | #[tokio::test] |
|
0 commit comments