From 54d765757901672ba9ed28274d95db0e871e318c Mon Sep 17 00:00:00 2001 From: Andrew Poelstra Date: Mon, 3 Apr 2023 22:54:49 +0000 Subject: [PATCH 1/5] promote bitcoind-tests and fuzz to workspaces This lets you run all the tests with `cargo test --all`. It also causes all crates to share a lockfile, for better or worse. We cannot also bring 'embedded' as a workspace because it doesn't actually build on desktop CPUs. --- Cargo.toml | 4 ++++ bitcoind-tests/Cargo.toml | 3 ++- embedded/Cargo.toml | 3 ++- fuzz/Cargo.toml | 4 ---- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 26b894996..a45707ba7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -66,3 +66,7 @@ required-features = ["compiler","std"] [[example]] name = "psbt_sign_finalize" required-features = ["std", "base64"] + +[workspace] +members = ["bitcoind-tests", "fuzz"] +exclude = ["embedded"] diff --git a/bitcoind-tests/Cargo.toml b/bitcoind-tests/Cargo.toml index 829b61123..f91767896 100644 --- a/bitcoind-tests/Cargo.toml +++ b/bitcoind-tests/Cargo.toml @@ -3,6 +3,7 @@ name = "bitcoind-tests" version = "0.1.0" authors = ["sanket1729 "] edition = "2018" +publish = false # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html @@ -10,4 +11,4 @@ edition = "2018" miniscript = {path = "../"} bitcoind = { version = "0.29.3" } actual-rand = { package = "rand", version = "0.8.4"} -secp256k1 = {version = "0.27.0", features = ["rand-std"]} \ No newline at end of file +secp256k1 = {version = "0.27.0", features = ["rand-std"]} diff --git a/embedded/Cargo.toml b/embedded/Cargo.toml index 53a8338d3..744c51733 100644 --- a/embedded/Cargo.toml +++ b/embedded/Cargo.toml @@ -7,6 +7,7 @@ edition = "2018" readme = "README.md" name = "embedded" version = "0.1.0" +publish = false [dependencies] cortex-m = "0.6.0" @@ -25,4 +26,4 @@ bench = false codegen-units = 1 # better optimizations debug = true # symbols are nice and they don't increase the size on Flash lto = true # better optimizations -opt-level = "z" \ No newline at end of file +opt-level = "z" diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml index 9cc6f06a4..2bdd541c4 100644 --- a/fuzz/Cargo.toml +++ b/fuzz/Cargo.toml @@ -17,10 +17,6 @@ afl = { version = "0.8", optional = true } regex = { version = "1.4"} miniscript = { path = "..", features = ["compiler"] } -# Prevent this from interfering with workspaces -[workspace] -members = ["."] - [[bin]] name = "roundtrip_descriptor" path = "fuzz_targets/roundtrip_descriptor.rs" From bf98e2af91579dd59aad01d7ede0514015302706 Mon Sep 17 00:00:00 2001 From: Andrew Poelstra Date: Mon, 3 Apr 2023 22:55:02 +0000 Subject: [PATCH 2/5] bitcoind-tests: allow overriding the BITCOIND_EXE variable --- bitcoind-tests/tests/setup/mod.rs | 8 +++++--- contrib/test.sh | 1 + 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/bitcoind-tests/tests/setup/mod.rs b/bitcoind-tests/tests/setup/mod.rs index eb2de5b26..8ae9f8b98 100644 --- a/bitcoind-tests/tests/setup/mod.rs +++ b/bitcoind-tests/tests/setup/mod.rs @@ -10,9 +10,11 @@ pub mod test_util; pub fn setup() -> BitcoinD { // Create env var BITCOIND_EXE_PATH to point to the ../bitcoind/bin/bitcoind binary let key = "BITCOIND_EXE"; - let curr_dir_path = std::env::current_dir().unwrap(); - let bitcoind_path = curr_dir_path.join("bin").join("bitcoind"); - std::env::set_var(key, bitcoind_path); + if std::env::var(key).is_err() { + let curr_dir_path = std::env::current_dir().unwrap(); + let bitcoind_path = curr_dir_path.join("bin").join("bitcoind"); + std::env::set_var(key, bitcoind_path); + } let exe_path = bitcoind::exe_path().unwrap(); let bitcoind = bitcoind::BitcoinD::new(exe_path).unwrap(); diff --git a/contrib/test.sh b/contrib/test.sh index 079b2950f..edb530892 100755 --- a/contrib/test.sh +++ b/contrib/test.sh @@ -40,6 +40,7 @@ fi # Test bitcoind integration tests if told to (this only works with the stable toolchain) if [ "$DO_BITCOIND_TESTS" = true ]; then cd bitcoind-tests + BITCOIND_EXE="$(git rev-parse --show-toplevel)/bitcoind-tests/bin/bitcoind" \ cargo test --verbose # Exit integration tests, do not run other tests. From cd0abcdd042cfac1060218ebfa12ad65a932e8a8 Mon Sep 17 00:00:00 2001 From: Andrew Poelstra Date: Mon, 3 Apr 2023 23:12:42 +0000 Subject: [PATCH 3/5] bitcoind-tests: find the bitcoind executable no matter where we are running from --- bitcoind-tests/tests/setup/mod.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/bitcoind-tests/tests/setup/mod.rs b/bitcoind-tests/tests/setup/mod.rs index 8ae9f8b98..33cfdb45c 100644 --- a/bitcoind-tests/tests/setup/mod.rs +++ b/bitcoind-tests/tests/setup/mod.rs @@ -11,8 +11,14 @@ pub fn setup() -> BitcoinD { // Create env var BITCOIND_EXE_PATH to point to the ../bitcoind/bin/bitcoind binary let key = "BITCOIND_EXE"; if std::env::var(key).is_err() { - let curr_dir_path = std::env::current_dir().unwrap(); - let bitcoind_path = curr_dir_path.join("bin").join("bitcoind"); + let mut root_path = std::env::current_dir().unwrap(); + while std::fs::metadata(root_path.join("LICENSE")).is_err() { + if !root_path.pop() { + panic!("Could not find LICENSE file; do not know where repo root is."); + } + } + + let bitcoind_path = root_path.join("bitcoind-tests").join("bin").join("bitcoind"); std::env::set_var(key, bitcoind_path); } From 73bcffcdc917eb99d605e87a7ab43808692ef1da Mon Sep 17 00:00:00 2001 From: Andrew Poelstra Date: Tue, 4 Apr 2023 00:38:04 +0000 Subject: [PATCH 4/5] cargo fmt new workspaces (bitcoin-tests, fuzz) Also fmt embedded, since in an earlier iteration of this PR, it was a new workspace. (Total diff: 2 lines.) --- bitcoind-tests/tests/setup/mod.rs | 5 ++++- bitcoind-tests/tests/setup/test_util.rs | 5 ++--- bitcoind-tests/tests/test_cpp.rs | 3 +-- bitcoind-tests/tests/test_desc.rs | 7 +++---- embedded/src/main.rs | 4 +--- fuzz/fuzz_targets/compile_descriptor.rs | 12 +++++++----- fuzz/fuzz_targets/parse_descriptor.rs | 3 ++- fuzz/fuzz_targets/parse_descriptor_secret.rs | 3 ++- fuzz/fuzz_targets/roundtrip_concrete.rs | 3 ++- fuzz/fuzz_targets/roundtrip_descriptor.rs | 3 ++- fuzz/fuzz_targets/roundtrip_miniscript_script.rs | 3 +-- fuzz/fuzz_targets/roundtrip_miniscript_str.rs | 5 ++--- fuzz/fuzz_targets/roundtrip_semantic.rs | 3 ++- 13 files changed, 31 insertions(+), 28 deletions(-) diff --git a/bitcoind-tests/tests/setup/mod.rs b/bitcoind-tests/tests/setup/mod.rs index 33cfdb45c..c97187d72 100644 --- a/bitcoind-tests/tests/setup/mod.rs +++ b/bitcoind-tests/tests/setup/mod.rs @@ -18,7 +18,10 @@ pub fn setup() -> BitcoinD { } } - let bitcoind_path = root_path.join("bitcoind-tests").join("bin").join("bitcoind"); + let bitcoind_path = root_path + .join("bitcoind-tests") + .join("bin") + .join("bitcoind"); std::env::set_var(key, bitcoind_path); } diff --git a/bitcoind-tests/tests/setup/test_util.rs b/bitcoind-tests/tests/setup/test_util.rs index 9a3e1021f..7af2114b3 100644 --- a/bitcoind-tests/tests/setup/test_util.rs +++ b/bitcoind-tests/tests/setup/test_util.rs @@ -19,15 +19,14 @@ use std::str::FromStr; -use miniscript::bitcoin; use actual_rand as rand; use bitcoin::hashes::hex::ToHex; use bitcoin::hashes::{hash160, ripemd160, sha256, Hash}; use bitcoin::secp256k1; use miniscript::descriptor::{SinglePub, SinglePubKey}; use miniscript::{ - hash256, Descriptor, DescriptorPublicKey, Error, Miniscript, ScriptContext, TranslatePk, - Translator, + bitcoin, hash256, Descriptor, DescriptorPublicKey, Error, Miniscript, ScriptContext, + TranslatePk, Translator, }; use rand::RngCore; diff --git a/bitcoind-tests/tests/test_cpp.rs b/bitcoind-tests/tests/test_cpp.rs index ba9079dcd..876f891bc 100644 --- a/bitcoind-tests/tests/test_cpp.rs +++ b/bitcoind-tests/tests/test_cpp.rs @@ -15,9 +15,8 @@ use bitcoin::util::psbt; use bitcoin::util::psbt::PartiallySignedTransaction as Psbt; use bitcoin::{Amount, LockTime, OutPoint, Sequence, Transaction, TxIn, TxOut, Txid}; use bitcoind::bitcoincore_rpc::{json, Client, RpcApi}; -use miniscript::bitcoin; use miniscript::psbt::PsbtExt; -use miniscript::Descriptor; +use miniscript::{bitcoin, Descriptor}; mod setup; use setup::test_util::{self, PubData, TestData}; diff --git a/bitcoind-tests/tests/test_desc.rs b/bitcoind-tests/tests/test_desc.rs index a3b18232d..6c4a5246e 100644 --- a/bitcoind-tests/tests/test_desc.rs +++ b/bitcoind-tests/tests/test_desc.rs @@ -7,7 +7,6 @@ use std::collections::BTreeMap; use std::{error, fmt}; -use miniscript::bitcoin; use actual_rand as rand; use bitcoin::blockdata::witness::Witness; use bitcoin::hashes::{sha256d, Hash}; @@ -16,12 +15,12 @@ use bitcoin::util::sighash::SighashCache; use bitcoin::util::taproot::{LeafVersion, TapLeafHash}; use bitcoin::util::{psbt, sighash}; use bitcoin::{ - secp256k1, Amount, LockTime, OutPoint, SchnorrSig, Script, Sequence, Transaction, TxIn, - TxOut, Txid, + secp256k1, Amount, LockTime, OutPoint, SchnorrSig, Script, Sequence, Transaction, TxIn, TxOut, + Txid, }; use bitcoind::bitcoincore_rpc::{json, Client, RpcApi}; use miniscript::psbt::{PsbtExt, PsbtInputExt}; -use miniscript::{Descriptor, Miniscript, ScriptContext, ToPublicKey}; +use miniscript::{bitcoin, Descriptor, Miniscript, ScriptContext, ToPublicKey}; mod setup; use rand::RngCore; diff --git a/embedded/src/main.rs b/embedded/src/main.rs index d65204cfc..9957eea20 100644 --- a/embedded/src/main.rs +++ b/embedded/src/main.rs @@ -8,11 +8,9 @@ extern crate alloc; use alloc::string::ToString; use core::alloc::Layout; use core::panic::PanicInfo; - -use alloc_cortex_m::CortexMHeap; - use core::str::FromStr; +use alloc_cortex_m::CortexMHeap; use cortex_m::asm; use cortex_m_rt::entry; use cortex_m_semihosting::{debug, hprintln}; diff --git a/fuzz/fuzz_targets/compile_descriptor.rs b/fuzz/fuzz_targets/compile_descriptor.rs index 60e1ea894..add5a8670 100644 --- a/fuzz/fuzz_targets/compile_descriptor.rs +++ b/fuzz/fuzz_targets/compile_descriptor.rs @@ -1,11 +1,10 @@ extern crate miniscript; -use miniscript::Segwitv0; -use miniscript::{policy, Miniscript}; -use policy::Liftable; - use std::str::FromStr; +use miniscript::{policy, Miniscript, Segwitv0}; +use policy::Liftable; + type Script = Miniscript; type Policy = policy::Concrete; @@ -15,7 +14,10 @@ fn do_test(data: &[u8]) { // Compile if let Ok(desc) = pol.compile::() { // Lift - assert_eq!(desc.clone().lift().unwrap().sorted(), pol.clone().lift().unwrap().sorted()); + assert_eq!( + desc.clone().lift().unwrap().sorted(), + pol.clone().lift().unwrap().sorted() + ); // Try to roundtrip the output of the compiler let output = desc.to_string(); if let Ok(desc) = Script::from_str(&output) { diff --git a/fuzz/fuzz_targets/parse_descriptor.rs b/fuzz/fuzz_targets/parse_descriptor.rs index c6b3cb41e..63fb6f134 100644 --- a/fuzz/fuzz_targets/parse_descriptor.rs +++ b/fuzz/fuzz_targets/parse_descriptor.rs @@ -1,8 +1,9 @@ extern crate miniscript; -use miniscript::DescriptorPublicKey; use std::str::FromStr; +use miniscript::DescriptorPublicKey; + fn do_test(data: &[u8]) { let data_str = String::from_utf8_lossy(data); if let Ok(dpk) = DescriptorPublicKey::from_str(&data_str) { diff --git a/fuzz/fuzz_targets/parse_descriptor_secret.rs b/fuzz/fuzz_targets/parse_descriptor_secret.rs index a6054296f..951630e0e 100644 --- a/fuzz/fuzz_targets/parse_descriptor_secret.rs +++ b/fuzz/fuzz_targets/parse_descriptor_secret.rs @@ -1,8 +1,9 @@ extern crate miniscript; -use miniscript::descriptor::DescriptorSecretKey; use std::str::FromStr; +use miniscript::descriptor::DescriptorSecretKey; + fn do_test(data: &[u8]) { let data_str = String::from_utf8_lossy(data); if let Ok(dsk) = DescriptorSecretKey::from_str(&data_str) { diff --git a/fuzz/fuzz_targets/roundtrip_concrete.rs b/fuzz/fuzz_targets/roundtrip_concrete.rs index 763b0c620..d0ca6fd1b 100644 --- a/fuzz/fuzz_targets/roundtrip_concrete.rs +++ b/fuzz/fuzz_targets/roundtrip_concrete.rs @@ -1,8 +1,9 @@ extern crate miniscript; extern crate regex; +use std::str::FromStr; + use miniscript::policy; use regex::Regex; -use std::str::FromStr; type Policy = policy::Concrete; diff --git a/fuzz/fuzz_targets/roundtrip_descriptor.rs b/fuzz/fuzz_targets/roundtrip_descriptor.rs index 4c9f9d6a2..7ee6653b2 100644 --- a/fuzz/fuzz_targets/roundtrip_descriptor.rs +++ b/fuzz/fuzz_targets/roundtrip_descriptor.rs @@ -1,9 +1,10 @@ extern crate miniscript; extern crate regex; +use std::str::FromStr; + use miniscript::Descriptor; use regex::Regex; -use std::str::FromStr; fn do_test(data: &[u8]) { let s = String::from_utf8_lossy(data); diff --git a/fuzz/fuzz_targets/roundtrip_miniscript_script.rs b/fuzz/fuzz_targets/roundtrip_miniscript_script.rs index 67c087479..58b6c0fe8 100644 --- a/fuzz/fuzz_targets/roundtrip_miniscript_script.rs +++ b/fuzz/fuzz_targets/roundtrip_miniscript_script.rs @@ -1,8 +1,7 @@ extern crate miniscript; use miniscript::bitcoin::blockdata::script; -use miniscript::Miniscript; -use miniscript::Segwitv0; +use miniscript::{Miniscript, Segwitv0}; fn do_test(data: &[u8]) { // Try round-tripping as a script diff --git a/fuzz/fuzz_targets/roundtrip_miniscript_str.rs b/fuzz/fuzz_targets/roundtrip_miniscript_str.rs index 90246f434..b6b742c18 100644 --- a/fuzz/fuzz_targets/roundtrip_miniscript_str.rs +++ b/fuzz/fuzz_targets/roundtrip_miniscript_str.rs @@ -1,11 +1,10 @@ extern crate miniscript; extern crate regex; -use regex::Regex; use std::str::FromStr; -use miniscript::Miniscript; -use miniscript::Segwitv0; +use miniscript::{Miniscript, Segwitv0}; +use regex::Regex; fn do_test(data: &[u8]) { let s = String::from_utf8_lossy(data); diff --git a/fuzz/fuzz_targets/roundtrip_semantic.rs b/fuzz/fuzz_targets/roundtrip_semantic.rs index ccfaa7aa9..d363d7e44 100644 --- a/fuzz/fuzz_targets/roundtrip_semantic.rs +++ b/fuzz/fuzz_targets/roundtrip_semantic.rs @@ -1,8 +1,9 @@ extern crate miniscript; -use miniscript::policy; use std::str::FromStr; +use miniscript::policy; + type Policy = policy::Semantic; fn do_test(data: &[u8]) { From f50cbbb89b50212a5552a3727241bdb6f2c8ae05 Mon Sep 17 00:00:00 2001 From: Andrew Poelstra Date: Tue, 4 Apr 2023 03:50:26 +0000 Subject: [PATCH 5/5] set honggfuzz dependency to 0.5.55 0.5.0 doesn't work. --- fuzz/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml index 2bdd541c4..6f93ec66d 100644 --- a/fuzz/Cargo.toml +++ b/fuzz/Cargo.toml @@ -12,7 +12,7 @@ afl_fuzz = ["afl"] honggfuzz_fuzz = ["honggfuzz"] [dependencies] -honggfuzz = { version = "0.5", default-features = false, optional = true } +honggfuzz = { version = "0.5.55", default-features = false, optional = true } afl = { version = "0.8", optional = true } regex = { version = "1.4"} miniscript = { path = "..", features = ["compiler"] }