Skip to content

Commit 5429040

Browse files
committed
Add restorewallet struct, macro and test
Add to the existing `backup_wallet` test, since the backup is needed before restoring. Split out the test into backup_and_restore_wallet() to make it clear this is for multiple RPCs. Add an empty test for restorewallet with a comment saying it is tested as part of backupwallet.
1 parent 6ffbf1d commit 5429040

File tree

17 files changed

+86
-14
lines changed

17 files changed

+86
-14
lines changed

client/src/client_sync/v23/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ crate::impl_client_v17__lock_unspent!();
172172
crate::impl_client_v21__psbt_bump_fee!();
173173
crate::impl_client_v17__remove_pruned_funds!();
174174
crate::impl_client_v17__rescan_blockchain!();
175+
crate::impl_client_v23__restore_wallet!();
175176
crate::impl_client_v21__send!();
176177
crate::impl_client_v17__send_many!();
177178
crate::impl_client_v17__send_to_address!();

client/src/client_sync/v23/wallet.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,22 @@ macro_rules! impl_client_v23__create_wallet {
5656
}
5757
};
5858
}
59+
60+
/// Implements Bitcoin Core JSON-RPC API method `restorewallet`.
61+
#[macro_export]
62+
macro_rules! impl_client_v23__restore_wallet {
63+
() => {
64+
impl Client {
65+
/// Calls `restorewallet` with required and optional arguments.
66+
///
67+
/// > restorewallet "wallet_name" "backup_file" ( load_on_startup )
68+
pub fn restore_wallet(
69+
&self,
70+
wallet_name: &str,
71+
backup_file: &Path,
72+
) -> Result<RestoreWallet> {
73+
self.call("restorewallet", &[wallet_name.into(), into_json(backup_file)?])
74+
}
75+
}
76+
};
77+
}

client/src/client_sync/v24/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ crate::impl_client_v17__lock_unspent!();
169169
crate::impl_client_v21__psbt_bump_fee!();
170170
crate::impl_client_v17__remove_pruned_funds!();
171171
crate::impl_client_v17__rescan_blockchain!();
172+
crate::impl_client_v23__restore_wallet!();
172173
crate::impl_client_v21__send!();
173174
crate::impl_client_v17__send_many!();
174175
crate::impl_client_v17__send_to_address!();

client/src/client_sync/v25/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ crate::impl_client_v17__lock_unspent!();
171171
crate::impl_client_v21__psbt_bump_fee!();
172172
crate::impl_client_v17__remove_pruned_funds!();
173173
crate::impl_client_v17__rescan_blockchain!();
174+
crate::impl_client_v23__restore_wallet!();
174175
crate::impl_client_v21__send!();
175176
crate::impl_client_v17__send_many!();
176177
crate::impl_client_v17__send_to_address!();

client/src/client_sync/v26/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ crate::impl_client_v17__lock_unspent!();
175175
crate::impl_client_v21__psbt_bump_fee!();
176176
crate::impl_client_v17__remove_pruned_funds!();
177177
crate::impl_client_v17__rescan_blockchain!();
178+
crate::impl_client_v23__restore_wallet!();
178179
crate::impl_client_v21__send!();
179180
crate::impl_client_v17__send_many!();
180181
crate::impl_client_v17__send_to_address!();

client/src/client_sync/v27/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ crate::impl_client_v17__lock_unspent!();
171171
crate::impl_client_v21__psbt_bump_fee!();
172172
crate::impl_client_v17__remove_pruned_funds!();
173173
crate::impl_client_v17__rescan_blockchain!();
174+
crate::impl_client_v23__restore_wallet!();
174175
crate::impl_client_v21__send!();
175176
crate::impl_client_v17__send_many!();
176177
crate::impl_client_v17__send_to_address!();

client/src/client_sync/v28/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ crate::impl_client_v17__lock_unspent!();
173173
crate::impl_client_v21__psbt_bump_fee!();
174174
crate::impl_client_v17__remove_pruned_funds!();
175175
crate::impl_client_v17__rescan_blockchain!();
176+
crate::impl_client_v23__restore_wallet!();
176177
crate::impl_client_v21__send!();
177178
crate::impl_client_v17__send_many!();
178179
crate::impl_client_v17__send_to_address!();

client/src/client_sync/v29/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ crate::impl_client_v17__lock_unspent!();
173173
crate::impl_client_v21__psbt_bump_fee!();
174174
crate::impl_client_v17__remove_pruned_funds!();
175175
crate::impl_client_v17__rescan_blockchain!();
176+
crate::impl_client_v23__restore_wallet!();
176177
crate::impl_client_v21__send!();
177178
crate::impl_client_v17__send_many!();
178179
crate::impl_client_v17__send_to_address!();

integration_test/tests/wallet.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,26 @@ fn wallet__add_multisig_address__modelled() {
6666

6767
#[test]
6868
fn wallet__backup_wallet() {
69+
backup_and_restore_wallet()
70+
}
71+
72+
fn backup_and_restore_wallet() {
6973
let node = Node::with_wallet(Wallet::Default, &[]);
7074
let file_path = integration_test::random_tmp_file();
7175

7276
let _: () = node.client.backup_wallet(&file_path).expect("backupwallet");
7377
assert!(file_path.exists(), "Backup file should exist at destination");
7478
assert!(file_path.is_file(), "Backup destination should be a file");
7579

80+
// Restore wallet only available for v23 and above.
81+
#[cfg(not(feature = "v22_and_below"))]
82+
{
83+
let wallet_name = "test_wallet";
84+
let node2 = Node::with_wallet(Wallet::None, &[]);
85+
let restored_wallet: RestoreWallet = node2.client.restore_wallet(wallet_name, &file_path).expect("restorewallet");
86+
assert_eq!(restored_wallet.name, wallet_name);
87+
}
88+
7689
fs::remove_file(&file_path).expect("removefile");
7790
}
7891

@@ -595,6 +608,11 @@ fn wallet__remove_pruned_funds() {
595608
let _: () = node.client.remove_pruned_funds(txid).expect("removeprunedfunds");
596609
}
597610

611+
// This is tested in `backup_and_restore_wallet()`, called by wallet__backup_wallet()
612+
#[cfg(not(feature = "v22_and_below"))]
613+
#[test]
614+
fn wallet__restore_wallet() {}
615+
598616
// This is tested in raw_transactions.rs `create_sign_send()`.
599617
#[test]
600618
fn wallet__sign_raw_transaction_with_wallet__modelled() {}

types/src/v23/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@
205205
//! | lockunspent | version | |
206206
//! | removeprunedfunds | returns nothing | |
207207
//! | rescanblockchain | version + model | UNTESTED |
208-
//! | restorewallet | version + model | TODO |
208+
//! | restorewallet | version | |
209209
//! | send | version + model | |
210210
//! | sendmany | version + model | UNTESTED |
211211
//! | sendtoaddress | version + model | |
@@ -253,7 +253,7 @@ pub use self::{
253253
PsbtInput, PsbtOutput,
254254
},
255255
util::CreateMultisig,
256-
wallet::{GetTransaction, GetTransactionError},
256+
wallet::{GetTransaction, GetTransactionError, RestoreWallet},
257257
};
258258
#[doc(inline)]
259259
pub use crate::{

0 commit comments

Comments
 (0)