From a6be470fe4ae9f12747cdbee21b3fb498c9b09f8 Mon Sep 17 00:00:00 2001 From: Riccardo Casatta Date: Mon, 28 Jun 2021 15:04:17 +0200 Subject: [PATCH] use electrsd with feature to download the binary --- Cargo.toml | 8 ++-- README.md | 19 +++++++++ run_blockchain_tests.sh | 71 ------------------------------- src/blockchain/electrum.rs | 2 +- src/blockchain/esplora.rs | 2 +- src/blockchain/rpc.rs | 2 +- src/testutils/blockchain_tests.rs | 13 ++++-- 7 files changed, 35 insertions(+), 82 deletions(-) delete mode 100755 run_blockchain_tests.sh diff --git a/Cargo.toml b/Cargo.toml index ebfff97f..8a5bfb96 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -60,16 +60,16 @@ rpc = ["bitcoincore-rpc"] # Debug/Test features test-blockchains = ["bitcoincore-rpc", "electrum-client"] -test-electrum = ["electrum"] -test-rpc = ["rpc"] -test-esplora = ["esplora", "electrsd/legacy"] +test-electrum = ["electrum", "electrsd/electrs_0_8_10", "test-blockchains"] +test-rpc = ["rpc", "electrsd/electrs_0_8_10", "test-blockchains"] +test-esplora = ["esplora", "electrsd/legacy", "electrsd/esplora_a33e97e1", "test-blockchains"] test-md-docs = ["electrum"] [dev-dependencies] lazy_static = "1.4" env_logger = "0.7" clap = "2.33" -electrsd = { version="0.5", features = ["trigger", "bitcoind_0_21_1"] } +electrsd = { version= "0.6", features = ["trigger", "bitcoind_0_21_1"] } [[example]] name = "address_validator" diff --git a/README.md b/README.md index 2d8c3c21..0181e775 100644 --- a/README.md +++ b/README.md @@ -151,6 +151,25 @@ fn main() -> Result<(), bdk::Error> { } ``` +## Testing + +### Unit testing + +``` +cargo test +``` + +### Integration testing + +Integration testing require testing features, for example: + +``` +cargo test --features test-electrum +``` + +The other options are `test-esplora` or `test-rpc`. +Note that `electrs` and `bitcoind` binaries are automatically downloaded (on mac and linux), to specify your own one must use `--no-default-features` and provide `BITCOIND_EXE` and `ELECTRS_EXE` as environment variables. + ## License Licensed under either of diff --git a/run_blockchain_tests.sh b/run_blockchain_tests.sh deleted file mode 100755 index 646e79cd..00000000 --- a/run_blockchain_tests.sh +++ /dev/null @@ -1,71 +0,0 @@ -#!/bin/sh - -usage() { - cat <<'EOF' -Script for running the bdk blockchain tests for a specific blockchain by starting up the backend in docker. - -Usage: ./run_blockchain_tests.sh [esplora|electrum|rpc] [test name]. - -EOF -} - -eprintln(){ - echo "$@" >&2 -} - -cleanup() { - if test "$id"; then - eprintln "cleaning up $blockchain docker container $id"; - docker rm -fv "$id" > /dev/null; - rm /tmp/regtest-"$id".cookie; - fi - trap - EXIT INT -} - -# Makes sure we clean up the container at the end or if ^C -trap 'rc=$?; cleanup; exit $rc' EXIT INT - -blockchain="$1" -test_name="$2" - -case "$blockchain" in - electrum) - eprintln "starting electrs docker container" - id="$(docker run --detach -p 127.0.0.1:18443-18444:18443-18444/tcp -p 127.0.0.1:60401:60401/tcp bitcoindevkit/electrs:0.4.0)" - ;; - esplora) - eprintln "starting esplora docker container" - id="$(docker run --detach -p 127.0.0.1:18443-18444:18443-18444/tcp -p 127.0.0.1:60401:60401/tcp -p 127.0.0.1:3002:3002/tcp bitcoindevkit/esplora:0.4.0)" - export BDK_ESPLORA_URL=http://127.0.0.1:3002 - ;; - rpc) - eprintln "starting bitcoind docker container (via electrs container)" - id="$(docker run --detach -p 127.0.0.1:18443-18444:18443-18444/tcp -p 127.0.0.1:60401:60401/tcp bitcoindevkit/electrs:0.4.0)" - ;; - *) - usage; - exit 1; - ;; - esac - -# taken from https://github.com/bitcoindevkit/bitcoin-regtest-box -export BDK_RPC_AUTH=COOKIEFILE -export BDK_RPC_COOKIEFILE=/tmp/regtest-"$id".cookie -export BDK_RPC_URL=127.0.0.1:18443 -export BDK_RPC_WALLET=bdk-test -export BDK_ELECTRUM_URL=tcp://127.0.0.1:60401 - -cli(){ - docker exec -it "$id" /root/bitcoin-cli -regtest -datadir=/root/.bitcoin $@ -} - -#eprintln "running getwalletinfo until bitcoind seems to be alive" -while ! cli getwalletinfo >/dev/null; do sleep 1; done - -# sleep again for good measure! -sleep 1; - -# copy bitcoind cookie file to /tmp -docker cp "$id":/root/.bitcoin/regtest/.cookie /tmp/regtest-"$id".cookie - -cargo test --features "test-blockchains,test-$blockchain" --no-default-features "$blockchain::bdk_blockchain_tests::$test_name" diff --git a/src/blockchain/electrum.rs b/src/blockchain/electrum.rs index 45deb3f7..cba210a9 100644 --- a/src/blockchain/electrum.rs +++ b/src/blockchain/electrum.rs @@ -170,7 +170,7 @@ impl ConfigurableBlockchain for ElectrumBlockchain { } #[cfg(test)] -#[cfg(feature = "test-blockchains")] +#[cfg(feature = "test-electrum")] crate::bdk_blockchain_tests! { fn test_instance(test_client: &TestClient) -> ElectrumBlockchain { ElectrumBlockchain::from(Client::new(&test_client.electrsd.electrum_url).unwrap()) diff --git a/src/blockchain/esplora.rs b/src/blockchain/esplora.rs index dce7f836..7f49fd83 100644 --- a/src/blockchain/esplora.rs +++ b/src/blockchain/esplora.rs @@ -416,7 +416,7 @@ impl_error!(consensus::encode::Error, BitcoinEncoding, EsploraError); impl_error!(bitcoin::hashes::hex::Error, Hex, EsploraError); #[cfg(test)] -#[cfg(feature = "test-blockchains")] +#[cfg(feature = "test-esplora")] crate::bdk_blockchain_tests! { fn test_instance(test_client: &TestClient) -> EsploraBlockchain { EsploraBlockchain::new(&format!("http://{}",test_client.electrsd.esplora_url.as_ref().unwrap()), None) diff --git a/src/blockchain/rpc.rs b/src/blockchain/rpc.rs index 0165313c..276d23d4 100644 --- a/src/blockchain/rpc.rs +++ b/src/blockchain/rpc.rs @@ -420,7 +420,7 @@ fn list_wallet_dir(client: &Client) -> Result, Error> { } #[cfg(test)] -#[cfg(feature = "test-blockchains")] +#[cfg(feature = "test-rpc")] crate::bdk_blockchain_tests! { fn test_instance(test_client: &TestClient) -> RpcBlockchain { diff --git a/src/testutils/blockchain_tests.rs b/src/testutils/blockchain_tests.rs index 85cc0194..abde5877 100644 --- a/src/testutils/blockchain_tests.rs +++ b/src/testutils/blockchain_tests.rs @@ -6,8 +6,8 @@ use bitcoin::{Address, Amount, Script, Transaction, Txid}; pub use bitcoincore_rpc::bitcoincore_rpc_json::AddressType; pub use bitcoincore_rpc::{Auth, Client as RpcClient, RpcApi}; use core::str::FromStr; -use electrsd::bitcoind::{downloaded_exe_path, BitcoinD}; -use electrsd::ElectrsD; +use electrsd::bitcoind::BitcoinD; +use electrsd::{bitcoind, ElectrsD}; pub use electrum_client::{Client as ElectrumClient, ElectrumApi}; #[allow(unused_imports)] use log::{debug, error, info, trace}; @@ -311,11 +311,16 @@ impl Default for TestClient { fn default() -> Self { let bitcoind_exe = env::var("BITCOIND_EXE") .ok() - .or(downloaded_exe_path()) + .or(bitcoind::downloaded_exe_path()) .expect( "you should provide env var BITCOIND_EXE or specifiy a bitcoind version feature", ); - let electrs_exe = env::var("ELECTRS_EXE").unwrap_or_else(|_| "/root/electrs".to_string()); + let electrs_exe = env::var("ELECTRS_EXE") + .ok() + .or(electrsd::downloaded_exe_path()) + .expect( + "you should provide env var ELECTRS_EXE or specifiy a electrsd version feature", + ); Self::new(bitcoind_exe, electrs_exe) } }