Skip to content

Commit c108a63

Browse files
committed
Add tests
1 parent 1ddf293 commit c108a63

File tree

3 files changed

+59
-14
lines changed

3 files changed

+59
-14
lines changed

key-wallet-manager/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ bincode = { version = "=2.0.0-rc.3", optional = true }
2626
zeroize = { version = "1.8", features = ["derive"] }
2727

2828
[dev-dependencies]
29+
dashcore-test-utils = { path = "../test-utils" }
2930
hex = "0.4"
3031
serde_json = "1.0"
3132
tokio = { version = "1.32", features = ["full"] }

key-wallet-manager/tests/spv_integration_tests.rs

Lines changed: 51 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
//! Integration tests for SPV wallet functionality
22
3+
use dashcore::bip158::{BlockFilter, BlockFilterWriter};
34
use dashcore::blockdata::block::{Block, Header, Version};
45
use dashcore::blockdata::script::ScriptBuf;
5-
use dashcore::blockdata::transaction::{OutPoint, Transaction};
6+
use dashcore::blockdata::transaction::Transaction;
67
use dashcore::pow::CompactTarget;
7-
use dashcore::{BlockHash, Txid};
8-
use dashcore::{TxIn, TxOut};
8+
use dashcore::{BlockHash, OutPoint, TxIn, TxOut, Txid};
99
use dashcore_hashes::Hash;
10-
11-
use dashcore::bip158::{BlockFilter, BlockFilterWriter};
10+
use dashcore_test_utils::create_transaction_to_address;
1211
use key_wallet::wallet::initialization::WalletAccountCreationOptions;
1312
use key_wallet::wallet::managed_wallet_info::ManagedWalletInfo;
1413
use key_wallet::Network;
@@ -100,23 +99,61 @@ async fn test_filter_checking() {
10099
#[tokio::test]
101100
async fn test_block_processing() {
102101
let mut manager = WalletManager::<ManagedWalletInfo>::new();
103-
104-
// Create a test wallet
105102
let _wallet_id = manager
106103
.create_wallet_with_random_mnemonic(WalletAccountCreationOptions::Default, Network::Testnet)
107104
.expect("Failed to create wallet");
108105

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");
111144

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);
114151

115-
// Process the block
152+
let block = create_test_block(100, vec![tx1, tx2]);
116153
let result = manager.process_block(&block, 100, Network::Testnet).await;
117154

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());
120157
}
121158

122159
#[tokio::test]

test-utils/src/builders.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,13 @@ impl TestTransactionBuilder {
161161
}
162162
}
163163

164+
pub fn create_transaction_to_address(address: &dashcore::Address, value: u64) -> Transaction {
165+
TestTransactionBuilder::new()
166+
.add_input(random_txid(), 0)
167+
.add_output(value, address.script_pubkey())
168+
.build()
169+
}
170+
164171
/// Create a chain of test headers
165172
pub fn create_header_chain(count: usize, start_height: u32) -> Vec<Header> {
166173
let mut headers = Vec::with_capacity(count);

0 commit comments

Comments
 (0)