|
| 1 | +#![allow(missing_docs)] |
1 | 2 | use crate::{ |
2 | 3 | bitcoin::{ |
3 | 4 | absolute, hashes::Hash, transaction, Amount, BlockHash, Network, OutPoint, ScriptBuf, |
@@ -169,6 +170,60 @@ where |
169 | 170 |
|
170 | 171 | assert_eq!(changeset, changeset_read_new); |
171 | 172 | } |
| 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 | +} |
172 | 227 |
|
173 | 228 | pub fn persist_network<Db, CreateDb>(filename: &str, create_db: CreateDb) |
174 | 229 | where |
@@ -268,7 +323,6 @@ where |
268 | 323 | assert_eq!(changeset_read.change_descriptor.unwrap(), change_descriptor); |
269 | 324 | } |
270 | 325 |
|
271 | | - |
272 | 326 | pub fn persist_single_keychain<Db, CreateDb>(filename: &str, create_db: CreateDb) |
273 | 327 | where |
274 | 328 | CreateDb: Fn(&Path) -> anyhow::Result<Db>, |
@@ -300,5 +354,3 @@ where |
300 | 354 | assert_eq!(changeset_read.descriptor.unwrap(), descriptor); |
301 | 355 | assert_eq!(changeset_read.change_descriptor, None); |
302 | 356 | } |
303 | | - |
304 | | - |
|
0 commit comments