Skip to content

Commit 41ff97b

Browse files
authored
Merge pull request #298 from LimpSquid/master
Add wait for (new) block, get descriptorinfo and derive addresses integration tests.
2 parents f664315 + 77f47ec commit 41ff97b

File tree

2 files changed

+54
-5
lines changed

2 files changed

+54
-5
lines changed

integration_test/src/main.rs

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -209,12 +209,12 @@ fn main() {
209209
test_unloadwallet(&cl);
210210
test_loadwallet(&cl);
211211
test_backupwallet(&cl);
212+
test_wait_for_new_block(&cl);
213+
test_wait_for_block(&cl);
214+
test_get_descriptor_info(&cl);
215+
test_derive_addresses(&cl);
212216
//TODO import_multi(
213217
//TODO verify_message(
214-
//TODO wait_for_new_block(&self, timeout: u64) -> Result<json::BlockRef> {
215-
//TODO wait_for_block(
216-
//TODO get_descriptor_info(&self, desc: &str) -> Result<json::GetDescriptorInfoResult> {
217-
//TODO derive_addresses(&self, descriptor: &str, range: Option<[u32; 2]>) -> Result<Vec<Address>> {
218218
//TODO encrypt_wallet(&self, passphrase: &str) -> Result<()> {
219219
//TODO get_by_id<T: queryable::Queryable<Self>>(
220220
//TODO add_multisig_address(
@@ -1311,6 +1311,55 @@ fn test_backupwallet(_: &Client) {
13111311
assert!(wallet_client.backup_wallet(Some(&backup_path)).is_ok());
13121312
}
13131313

1314+
fn test_wait_for_new_block(cl: &Client) {
1315+
let height = cl.get_block_count().unwrap();
1316+
let hash = cl.get_block_hash(height).unwrap();
1317+
1318+
assert!(cl.wait_for_new_block(std::u64::MAX).is_err()); // JSON integer out of range
1319+
assert_eq!(cl.wait_for_new_block(100).unwrap(), json::BlockRef{hash, height});
1320+
}
1321+
1322+
fn test_wait_for_block(cl: &Client) {
1323+
let height = cl.get_block_count().unwrap();
1324+
let hash = cl.get_block_hash(height).unwrap();
1325+
1326+
assert!(cl.wait_for_block(&hash, std::u64::MAX).is_err()); // JSON integer out of range
1327+
assert_eq!(cl.wait_for_block(&hash, 0).unwrap(), json::BlockRef{hash, height});
1328+
}
1329+
1330+
fn test_get_descriptor_info(cl: &Client) {
1331+
let res = cl.get_descriptor_info(r"pkh(cSQPHDBwXGjVzWRqAHm6zfvQhaTuj1f2bFH58h55ghbjtFwvmeXR)").unwrap();
1332+
assert_eq!(res.descriptor, r"pkh(02e96fe52ef0e22d2f131dd425ce1893073a3c6ad20e8cac36726393dfb4856a4c)#62k9sn4x");
1333+
assert_eq!(res.is_range, false);
1334+
assert_eq!(res.is_solvable, true);
1335+
assert_eq!(res.has_private_keys, true);
1336+
1337+
// Checksum introduced in: https://github.com/bitcoin/bitcoin/commit/26d3fad1093dfc697048313be7a96c9adf723654
1338+
if version() >= 190000 {
1339+
assert_eq!(res.checksum, Some("37v3lm8x".to_string()));
1340+
} else {
1341+
assert!(res.checksum.is_none());
1342+
}
1343+
1344+
assert!(cl.get_descriptor_info("abcdef").is_err());
1345+
}
1346+
1347+
fn test_derive_addresses(cl: &Client) {
1348+
let descriptor = r"pkh(02e96fe52ef0e22d2f131dd425ce1893073a3c6ad20e8cac36726393dfb4856a4c)#62k9sn4x";
1349+
assert_eq!(cl.derive_addresses(descriptor, None).unwrap(), vec!["mrkwtj5xpYQjHeJe5wsweNjVeTKkvR5fCr".parse().unwrap()]);
1350+
assert!(cl.derive_addresses(descriptor, Some([0, 1])).is_err()); // Range should not be specified for an unranged descriptor
1351+
1352+
let descriptor = std::concat!(
1353+
r"wpkh([1004658e/84'/1'/0']tpubDCBEcmVKbfC9KfdydyLbJ2gfNL88grZu1XcWSW9ytTM6fi",
1354+
r"tvaRmVyr8Ddf7SjZ2ZfMx9RicjYAXhuh3fmLiVLPodPEqnQQURUfrBKiiVZc8/0/*)#g8l47ngv",
1355+
);
1356+
assert_eq!(cl.derive_addresses(descriptor, Some([0, 1])).unwrap(), vec![
1357+
"bcrt1q5n5tjkpva8v5s0uadu2y5f0g7pn4h5eqaq2ux2".parse().unwrap(),
1358+
"bcrt1qcgl303ht03ja2e0hudpwk7ypcxk5t478wspzlt".parse().unwrap(),
1359+
]);
1360+
assert!(cl.derive_addresses(descriptor, None).is_err()); // Range must be specified for a ranged descriptor
1361+
}
1362+
13141363
fn test_get_index_info(cl: &Client) {
13151364
if version() >= 210000 {
13161365
let gii = cl.get_index_info().unwrap();

json/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1501,7 +1501,7 @@ pub struct BlockRef {
15011501
#[derive(Clone, PartialEq, Eq, Debug, Deserialize, Serialize)]
15021502
pub struct GetDescriptorInfoResult {
15031503
pub descriptor: String,
1504-
pub checksum: String,
1504+
pub checksum: Option<String>,
15051505
#[serde(rename = "isrange")]
15061506
pub is_range: bool,
15071507
#[serde(rename = "issolvable")]

0 commit comments

Comments
 (0)