Skip to content

Commit ddcc565

Browse files
committed
feat: add utility to test multi-wallet persistence
1 parent 288485f commit ddcc565

1 file changed

Lines changed: 55 additions & 3 deletions

File tree

wallet/src/persist_test_utils.rs

Lines changed: 55 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#![allow(missing_docs)]
12
use crate::{
23
bitcoin::{
34
absolute, hashes::Hash, transaction, Amount, BlockHash, Network, OutPoint, ScriptBuf,
@@ -169,6 +170,60 @@ where
169170

170171
assert_eq!(changeset, changeset_read_new);
171172
}
173+
pub fn persist_multiple_wallet_changesets<Store, CreateStores>(
174+
filename: &str,
175+
create_dbs: CreateStores,
176+
) where
177+
CreateStores: Fn(&Path) -> anyhow::Result<(Store, Store)>,
178+
Store: WalletPersister,
179+
Store::Error: Debug,
180+
{
181+
let temp_dir = tempfile::tempdir().expect("must create tempdir");
182+
let file_path = temp_dir.path().join(filename);
183+
184+
let (mut store_first, mut store_sec) =
185+
create_dbs(&file_path).expect("store should get created");
186+
187+
let descriptor: Descriptor<DescriptorPublicKey> = DESCRIPTORS[0].parse().unwrap();
188+
let change_descriptor: Descriptor<DescriptorPublicKey> = DESCRIPTORS[1].parse().unwrap();
189+
190+
let changeset1 = ChangeSet {
191+
descriptor: Some(descriptor.clone()),
192+
change_descriptor: Some(change_descriptor.clone()),
193+
network: Some(Network::Bitcoin),
194+
..ChangeSet::default()
195+
};
196+
197+
let changeset =
198+
WalletPersister::initialize(&mut store_first).expect("should load empty changeset");
199+
assert_eq!(changeset, ChangeSet::default());
200+
201+
WalletPersister::persist(&mut store_first, &changeset1).expect("should persist changeset");
202+
203+
let descriptor: Descriptor<DescriptorPublicKey> = DESCRIPTORS[2].parse().unwrap();
204+
let change_descriptor: Descriptor<DescriptorPublicKey> = DESCRIPTORS[3].parse().unwrap();
205+
206+
let changeset2 = ChangeSet {
207+
descriptor: Some(descriptor.clone()),
208+
change_descriptor: Some(change_descriptor.clone()),
209+
network: Some(Network::Bitcoin),
210+
..ChangeSet::default()
211+
};
212+
213+
let changeset =
214+
WalletPersister::initialize(&mut store_sec).expect("should load empty changeset");
215+
assert_eq!(changeset, ChangeSet::default());
216+
217+
WalletPersister::persist(&mut store_sec, &changeset2).expect("should persist changeset");
218+
219+
let changeset_read =
220+
WalletPersister::initialize(&mut store_first).expect("should load persisted changeset1");
221+
assert_eq!(changeset_read, changeset1);
222+
223+
let changeset_read =
224+
WalletPersister::initialize(&mut store_sec).expect("should load persisted changeset2");
225+
assert_eq!(changeset_read, changeset2);
226+
}
172227

173228
pub fn persist_network<Db, CreateDb>(filename: &str, create_db: CreateDb)
174229
where
@@ -268,7 +323,6 @@ where
268323
assert_eq!(changeset_read.change_descriptor.unwrap(), change_descriptor);
269324
}
270325

271-
272326
pub fn persist_single_keychain<Db, CreateDb>(filename: &str, create_db: CreateDb)
273327
where
274328
CreateDb: Fn(&Path) -> anyhow::Result<Db>,
@@ -300,5 +354,3 @@ where
300354
assert_eq!(changeset_read.descriptor.unwrap(), descriptor);
301355
assert_eq!(changeset_read.change_descriptor, None);
302356
}
303-
304-

0 commit comments

Comments
 (0)