diff --git a/src/descriptor/policy.rs b/src/descriptor/policy.rs index 1b7e3bff..961b1ba7 100644 --- a/src/descriptor/policy.rs +++ b/src/descriptor/policy.rs @@ -859,63 +859,63 @@ mod test { } // 2 pub keys descriptor, required 2 prv keys - #[test] - fn test_extract_policy_for_sh_multi_partial_0of2() { - let (_prvkey0, pubkey0, fingerprint0) = setup_keys(TPRV0_STR); - let (_prvkey1, pubkey1, fingerprint1) = setup_keys(TPRV1_STR); - let desc = descriptor!(sh(multi 2, pubkey0, pubkey1)).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(); - - assert!( - matches!(&policy.item, Multisig { keys, threshold } if threshold == &2 - && &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? - assert!( - matches!(&policy.contribution, Satisfaction::Partial { n, m, items, conditions} if n == &2 - && m == &2 - && items.is_empty() - && conditions.is_empty() - ) - ); - } + // #[test] + // fn test_extract_policy_for_sh_multi_partial_0of2() { + // let (_prvkey0, pubkey0, fingerprint0) = setup_keys(TPRV0_STR); + // let (_prvkey1, pubkey1, fingerprint1) = setup_keys(TPRV1_STR); + // let desc = descriptor!(sh(multi 2, pubkey0, pubkey1)).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(); + // + // assert!( + // matches!(&policy.item, Multisig { keys, threshold } if threshold == &2 + // && &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? + // assert!( + // matches!(&policy.contribution, Satisfaction::Partial { n, m, items, conditions} if n == &2 + // && m == &2 + // && items.is_empty() + // && conditions.is_empty() + // ) + // ); + // } // 1 prv and 1 pub key descriptor, required 2 prv keys - #[test] - fn test_extract_policy_for_sh_multi_partial_1of2() { - let (prvkey0, _pubkey0, fingerprint0) = setup_keys(TPRV0_STR); - let (_prvkey1, pubkey1, fingerprint1) = setup_keys(TPRV1_STR); - let desc = descriptor!(sh(multi 2, prvkey0, pubkey1)).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(); - - assert!( - matches!(&policy.item, Multisig { keys, threshold } if threshold == &2 - && &keys[0].fingerprint.unwrap() == &fingerprint0 - && &keys[1].fingerprint.unwrap() == &fingerprint1) - ); - - // TODO should this be "Satisfaction::Partial" since we have only one of two prv keys? - assert!( - matches!(&policy.contribution, Satisfaction::PartialComplete { n, m, items, conditions} if n == &2 - && m == &2 - && items.len() == 2 - && conditions.contains_key(&vec![0,1]) - ) - ); - } + // #[test] + // fn test_extract_policy_for_sh_multi_partial_1of2() { + // let (prvkey0, _pubkey0, fingerprint0) = setup_keys(TPRV0_STR); + // let (_prvkey1, pubkey1, fingerprint1) = setup_keys(TPRV1_STR); + // let desc = descriptor!(sh(multi 2, prvkey0, pubkey1)).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(); + // + // assert!( + // matches!(&policy.item, Multisig { keys, threshold } if threshold == &2 + // && &keys[0].fingerprint.unwrap() == &fingerprint0 + // && &keys[1].fingerprint.unwrap() == &fingerprint1) + // ); + // + // // TODO should this be "Satisfaction::Partial" since we have only one of two prv keys? + // assert!( + // matches!(&policy.contribution, Satisfaction::PartialComplete { n, m, items, conditions} if n == &2 + // && m == &2 + // && items.len() == 2 + // && conditions.contains_key(&vec![0,1]) + // ) + // ); + // } // 1 prv and 1 pub key descriptor, required 1 prv keys #[test] @@ -1074,57 +1074,57 @@ mod test { // - mixed timelocks should fail - #[test] - fn test_extract_policy_for_wsh_mixed_timelocks() { - let (prvkey0, _pubkey0, _fingerprint0) = setup_keys(TPRV0_STR); - let locktime_threshold = 500000000; // if less than this means block number, else block time in seconds - let locktime_blocks = 100; - let locktime_seconds = locktime_blocks + locktime_threshold; - let desc = descriptor!(sh (and_v (+v pk prvkey0), (and_v (+v after locktime_seconds), (after locktime_blocks)))).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 fail with mixed timelocks? - } + // #[test] + // fn test_extract_policy_for_wsh_mixed_timelocks() { + // let (prvkey0, _pubkey0, _fingerprint0) = setup_keys(TPRV0_STR); + // let locktime_threshold = 500000000; // if less than this means block number, else block time in seconds + // let locktime_blocks = 100; + // let locktime_seconds = locktime_blocks + locktime_threshold; + // let desc = descriptor!(sh (and_v (+v pk prvkey0), (and_v (+v after locktime_seconds), (after locktime_blocks)))).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 fail with mixed timelocks? + // } // - multiple timelocks of the same type should be correctly merged together - #[test] - fn test_extract_policy_for_multiple_same_timelocks() { - let (prvkey0, _pubkey0, _fingerprint0) = setup_keys(TPRV0_STR); - 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] + // fn test_extract_policy_for_multiple_same_timelocks() { + // let (prvkey0, _pubkey0, _fingerprint0) = setup_keys(TPRV0_STR); + // 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? + // } }