[policy] uncomment and update 4 tests: 2 ignored and 2 restored

This commit is contained in:
Riccardo Casatta 2021-02-22 15:20:09 +01:00
parent 37fa35b24a
commit 48215675b0
No known key found for this signature in database
GPG Key ID: FD986A969E450397

View File

@ -703,7 +703,6 @@ impl Policy {
_ => Ok(Condition::default()), _ => Ok(Condition::default()),
} }
} }
} }
impl From<SatisfiableItem> for Policy { impl From<SatisfiableItem> for Policy {
@ -896,7 +895,7 @@ mod test {
use crate::descriptor::policy::SatisfiableItem::{Multisig, Signature, Thresh}; use crate::descriptor::policy::SatisfiableItem::{Multisig, Signature, Thresh};
use crate::keys::{DescriptorKey, IntoDescriptorKey}; use crate::keys::{DescriptorKey, IntoDescriptorKey};
use crate::wallet::signer::SignersContainer; use crate::wallet::signer::SignersContainer;
use bitcoin::secp256k1::{All, Secp256k1}; use bitcoin::secp256k1::Secp256k1;
use bitcoin::util::bip32; use bitcoin::util::bip32;
use bitcoin::Network; use bitcoin::Network;
use std::str::FromStr; use std::str::FromStr;
@ -962,63 +961,66 @@ mod test {
} }
// 2 pub keys descriptor, required 2 prv keys // 2 pub keys descriptor, required 2 prv keys
// #[test] #[test]
// fn test_extract_policy_for_sh_multi_partial_0of2() { fn test_extract_policy_for_sh_multi_partial_0of2() {
// let (_prvkey0, pubkey0, fingerprint0) = setup_keys(TPRV0_STR); let secp = Secp256k1::new();
// let (_prvkey1, pubkey1, fingerprint1) = setup_keys(TPRV1_STR); let (_prvkey0, pubkey0, fingerprint0) = setup_keys(TPRV0_STR, &secp);
// let desc = descriptor!(sh(multi 2, pubkey0, pubkey1)).unwrap(); let (_prvkey1, pubkey1, fingerprint1) = setup_keys(TPRV1_STR, &secp);
// let (wallet_desc, keymap) = desc.to_wallet_descriptor(Network::Testnet).unwrap(); let desc = descriptor!(sh(multi(2, pubkey0, pubkey1))).unwrap();
// let signers_container = Arc::new(SignersContainer::from(keymap)); let (wallet_desc, keymap) = desc
// let policy = wallet_desc .into_wallet_descriptor(&secp, Network::Testnet)
// .extract_policy(signers_container) .unwrap();
// .unwrap() let signers_container = Arc::new(SignersContainer::from(keymap));
// .unwrap(); let policy = wallet_desc
// .extract_policy(&signers_container, &secp)
// assert!( .unwrap()
// matches!(&policy.item, Multisig { keys, threshold } if threshold == &2 .unwrap();
// && &keys[0].fingerprint.unwrap() == &fingerprint0 assert!(
// && &keys[1].fingerprint.unwrap() == &fingerprint1) matches!(&policy.item, Multisig { keys, threshold } if threshold == &2usize
// ); && &keys[0].fingerprint.unwrap() == &fingerprint0
// && &keys[1].fingerprint.unwrap() == &fingerprint1)
// // TODO should this be "Satisfaction::None" since we have no prv keys? );
// // TODO should items and conditions not be empty? // TODO should this be "Satisfaction::None" since we have no prv keys?
// assert!( // TODO should items and conditions not be empty?
// matches!(&policy.contribution, Satisfaction::Partial { n, m, items, conditions} if n == &2 assert!(
// && m == &2 matches!(&policy.contribution, Satisfaction::Partial { n, m, items, conditions, ..} if n == &2usize
// && items.is_empty() && m == &2usize
// && conditions.is_empty() && items.is_empty()
// ) && conditions.is_empty()
// ); )
// } );
}
// 1 prv and 1 pub key descriptor, required 2 prv keys // 1 prv and 1 pub key descriptor, required 2 prv keys
// #[test] #[test]
// fn test_extract_policy_for_sh_multi_partial_1of2() { fn test_extract_policy_for_sh_multi_partial_1of2() {
// let (prvkey0, _pubkey0, fingerprint0) = setup_keys(TPRV0_STR); let secp = Secp256k1::new();
// let (_prvkey1, pubkey1, fingerprint1) = setup_keys(TPRV1_STR); let (prvkey0, _pubkey0, fingerprint0) = setup_keys(TPRV0_STR, &secp);
// let desc = descriptor!(sh(multi 2, prvkey0, pubkey1)).unwrap(); let (_prvkey1, pubkey1, fingerprint1) = setup_keys(TPRV1_STR, &secp);
// let (wallet_desc, keymap) = desc.to_wallet_descriptor(Network::Testnet).unwrap(); let desc = descriptor!(sh(multi(2, prvkey0, pubkey1))).unwrap();
// let signers_container = Arc::new(SignersContainer::from(keymap)); let (wallet_desc, keymap) = desc
// let policy = wallet_desc .into_wallet_descriptor(&secp, Network::Testnet)
// .extract_policy(signers_container) .unwrap();
// .unwrap() let signers_container = Arc::new(SignersContainer::from(keymap));
// .unwrap(); let policy = wallet_desc
// .extract_policy(&signers_container, &secp)
// assert!( .unwrap()
// matches!(&policy.item, Multisig { keys, threshold } if threshold == &2 .unwrap();
// && &keys[0].fingerprint.unwrap() == &fingerprint0
// && &keys[1].fingerprint.unwrap() == &fingerprint1) assert!(
// ); matches!(&policy.item, Multisig { keys, threshold } if threshold == &2usize
// && &keys[0].fingerprint.unwrap() == &fingerprint0
// // TODO should this be "Satisfaction::Partial" since we have only one of two prv keys? && &keys[1].fingerprint.unwrap() == &fingerprint1)
// assert!( );
// matches!(&policy.contribution, Satisfaction::PartialComplete { n, m, items, conditions} if n == &2
// && m == &2 assert!(
// && items.len() == 2 matches!(&policy.contribution, Satisfaction::Partial { n, m, items, conditions, ..} if n == &2usize
// && conditions.contains_key(&vec![0,1]) && m == &2usize
// ) && items.len() == 1
// ); && conditions.contains_key(&0)
// } )
);
}
// 1 prv and 1 pub key descriptor, required 1 prv keys // 1 prv and 1 pub key descriptor, required 1 prv keys
#[test] #[test]
@ -1206,59 +1208,75 @@ mod test {
// - mixed timelocks should fail // - mixed timelocks should fail
// #[test] #[test]
// fn test_extract_policy_for_wsh_mixed_timelocks() { #[ignore]
// let (prvkey0, _pubkey0, _fingerprint0) = setup_keys(TPRV0_STR); fn test_extract_policy_for_wsh_mixed_timelocks() {
// let locktime_threshold = 500000000; // if less than this means block number, else block time in seconds let secp = Secp256k1::new();
// let locktime_blocks = 100; let (prvkey0, _pubkey0, _fingerprint0) = setup_keys(TPRV0_STR, &secp);
// let locktime_seconds = locktime_blocks + locktime_threshold; let locktime_threshold = 500000000; // if less than this means block number, else block time in seconds
// let desc = descriptor!(sh (and_v (+v pk prvkey0), (and_v (+v after locktime_seconds), (after locktime_blocks)))).unwrap(); let locktime_blocks = 100;
// let (wallet_desc, keymap) = desc.to_wallet_descriptor(Network::Testnet).unwrap(); let locktime_seconds = locktime_blocks + locktime_threshold;
// let signers_container = Arc::new(SignersContainer::from(keymap)); let desc = descriptor!(sh(and_v(
// let policy = wallet_desc v: pk(prvkey0),
// .extract_policy(signers_container) and_v(v: after(locktime_seconds), after(locktime_blocks))
// .unwrap() )))
// .unwrap(); .unwrap();
// let (wallet_desc, keymap) = desc
// println!("desc policy = {:?}", policy); // TODO remove .into_wallet_descriptor(&secp, Network::Testnet)
// .unwrap();
// // TODO how should this fail with mixed timelocks? let signers_container = Arc::new(SignersContainer::from(keymap));
// } let policy = wallet_desc
.extract_policy(&signers_container, &secp)
.unwrap()
.unwrap();
println!("desc policy = {:?}", policy); // TODO remove
// TODO how should this fail with mixed timelocks?
}
// - multiple timelocks of the same type should be correctly merged together // - multiple timelocks of the same type should be correctly merged together
#[test]
#[ignore]
fn test_extract_policy_for_multiple_same_timelocks() {
let secp = Secp256k1::new();
let (prvkey0, _pubkey0, _fingerprint0) = setup_keys(TPRV0_STR, &secp);
let locktime_blocks0 = 100;
let locktime_blocks1 = 200;
let desc = descriptor!(sh(and_v(
v: pk(prvkey0),
and_v(v: after(locktime_blocks0), after(locktime_blocks1))
)))
.unwrap();
let (wallet_desc, keymap) = desc
.into_wallet_descriptor(&secp, Network::Testnet)
.unwrap();
let signers_container = Arc::new(SignersContainer::from(keymap));
let policy = wallet_desc
.extract_policy(&signers_container, &secp)
.unwrap()
.unwrap();
println!("desc policy = {:?}", policy); // TODO remove
// TODO how should this merge timelocks?
let (prvkey1, _pubkey1, _fingerprint1) = setup_keys(TPRV0_STR, &secp);
let locktime_seconds0 = 500000100;
let locktime_seconds1 = 500000200;
let desc = descriptor!(sh(and_v(
v: pk(prvkey1),
and_v(v: after(locktime_seconds0), after(locktime_seconds1))
)))
.unwrap();
let (wallet_desc, keymap) = desc
.into_wallet_descriptor(&secp, Network::Testnet)
.unwrap();
let signers_container = Arc::new(SignersContainer::from(keymap));
let policy = wallet_desc
.extract_policy(&signers_container, &secp)
.unwrap()
.unwrap();
// #[test] println!("desc policy = {:?}", policy); // TODO remove
// fn test_extract_policy_for_multiple_same_timelocks() {
// let (prvkey0, _pubkey0, _fingerprint0) = setup_keys(TPRV0_STR); // TODO how should this merge timelocks?
// let locktime_blocks0 = 100; }
// let locktime_blocks1 = 200;
// let desc = descriptor!(sh (and_v (+v pk prvkey0), (and_v (+v after locktime_blocks0), (after locktime_blocks1)))).unwrap();
// let (wallet_desc, keymap) = desc.to_wallet_descriptor(Network::Testnet).unwrap();
// let signers_container = Arc::new(SignersContainer::from(keymap));
// let policy = wallet_desc
// .extract_policy(signers_container)
// .unwrap()
// .unwrap();
//
// println!("desc policy = {:?}", policy); // TODO remove
//
// // TODO how should this merge timelocks?
//
// let (prvkey1, _pubkey1, _fingerprint1) = setup_keys(TPRV0_STR);
// let locktime_seconds0 = 500000100;
// let locktime_seconds1 = 500000200;
// let desc = descriptor!(sh (and_v (+v pk prvkey1), (and_v (+v after locktime_seconds0), (after locktime_seconds1)))).unwrap();
// let (wallet_desc, keymap) = desc.to_wallet_descriptor(Network::Testnet).unwrap();
// let signers_container = Arc::new(SignersContainer::from(keymap));
// let policy = wallet_desc
// .extract_policy(signers_container)
// .unwrap()
// .unwrap();
//
// println!("desc policy = {:?}", policy); // TODO remove
//
// // TODO how should this merge timelocks?
// }
#[test] #[test]
fn test_get_condition_multisig() { fn test_get_condition_multisig() {