use electrsd with feature to download the binary
This commit is contained in:
parent
8e41c4587d
commit
a6be470fe4
@ -60,16 +60,16 @@ rpc = ["bitcoincore-rpc"]
|
|||||||
|
|
||||||
# Debug/Test features
|
# Debug/Test features
|
||||||
test-blockchains = ["bitcoincore-rpc", "electrum-client"]
|
test-blockchains = ["bitcoincore-rpc", "electrum-client"]
|
||||||
test-electrum = ["electrum"]
|
test-electrum = ["electrum", "electrsd/electrs_0_8_10", "test-blockchains"]
|
||||||
test-rpc = ["rpc"]
|
test-rpc = ["rpc", "electrsd/electrs_0_8_10", "test-blockchains"]
|
||||||
test-esplora = ["esplora", "electrsd/legacy"]
|
test-esplora = ["esplora", "electrsd/legacy", "electrsd/esplora_a33e97e1", "test-blockchains"]
|
||||||
test-md-docs = ["electrum"]
|
test-md-docs = ["electrum"]
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
lazy_static = "1.4"
|
lazy_static = "1.4"
|
||||||
env_logger = "0.7"
|
env_logger = "0.7"
|
||||||
clap = "2.33"
|
clap = "2.33"
|
||||||
electrsd = { version="0.5", features = ["trigger", "bitcoind_0_21_1"] }
|
electrsd = { version= "0.6", features = ["trigger", "bitcoind_0_21_1"] }
|
||||||
|
|
||||||
[[example]]
|
[[example]]
|
||||||
name = "address_validator"
|
name = "address_validator"
|
||||||
|
19
README.md
19
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
|
## License
|
||||||
|
|
||||||
Licensed under either of
|
Licensed under either of
|
||||||
|
@ -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"
|
|
@ -170,7 +170,7 @@ impl ConfigurableBlockchain for ElectrumBlockchain {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
#[cfg(feature = "test-blockchains")]
|
#[cfg(feature = "test-electrum")]
|
||||||
crate::bdk_blockchain_tests! {
|
crate::bdk_blockchain_tests! {
|
||||||
fn test_instance(test_client: &TestClient) -> ElectrumBlockchain {
|
fn test_instance(test_client: &TestClient) -> ElectrumBlockchain {
|
||||||
ElectrumBlockchain::from(Client::new(&test_client.electrsd.electrum_url).unwrap())
|
ElectrumBlockchain::from(Client::new(&test_client.electrsd.electrum_url).unwrap())
|
||||||
|
@ -416,7 +416,7 @@ impl_error!(consensus::encode::Error, BitcoinEncoding, EsploraError);
|
|||||||
impl_error!(bitcoin::hashes::hex::Error, Hex, EsploraError);
|
impl_error!(bitcoin::hashes::hex::Error, Hex, EsploraError);
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
#[cfg(feature = "test-blockchains")]
|
#[cfg(feature = "test-esplora")]
|
||||||
crate::bdk_blockchain_tests! {
|
crate::bdk_blockchain_tests! {
|
||||||
fn test_instance(test_client: &TestClient) -> EsploraBlockchain {
|
fn test_instance(test_client: &TestClient) -> EsploraBlockchain {
|
||||||
EsploraBlockchain::new(&format!("http://{}",test_client.electrsd.esplora_url.as_ref().unwrap()), None)
|
EsploraBlockchain::new(&format!("http://{}",test_client.electrsd.esplora_url.as_ref().unwrap()), None)
|
||||||
|
@ -420,7 +420,7 @@ fn list_wallet_dir(client: &Client) -> Result<Vec<String>, Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
#[cfg(feature = "test-blockchains")]
|
#[cfg(feature = "test-rpc")]
|
||||||
crate::bdk_blockchain_tests! {
|
crate::bdk_blockchain_tests! {
|
||||||
|
|
||||||
fn test_instance(test_client: &TestClient) -> RpcBlockchain {
|
fn test_instance(test_client: &TestClient) -> RpcBlockchain {
|
||||||
|
@ -6,8 +6,8 @@ use bitcoin::{Address, Amount, Script, Transaction, Txid};
|
|||||||
pub use bitcoincore_rpc::bitcoincore_rpc_json::AddressType;
|
pub use bitcoincore_rpc::bitcoincore_rpc_json::AddressType;
|
||||||
pub use bitcoincore_rpc::{Auth, Client as RpcClient, RpcApi};
|
pub use bitcoincore_rpc::{Auth, Client as RpcClient, RpcApi};
|
||||||
use core::str::FromStr;
|
use core::str::FromStr;
|
||||||
use electrsd::bitcoind::{downloaded_exe_path, BitcoinD};
|
use electrsd::bitcoind::BitcoinD;
|
||||||
use electrsd::ElectrsD;
|
use electrsd::{bitcoind, ElectrsD};
|
||||||
pub use electrum_client::{Client as ElectrumClient, ElectrumApi};
|
pub use electrum_client::{Client as ElectrumClient, ElectrumApi};
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
use log::{debug, error, info, trace};
|
use log::{debug, error, info, trace};
|
||||||
@ -311,11 +311,16 @@ impl Default for TestClient {
|
|||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
let bitcoind_exe = env::var("BITCOIND_EXE")
|
let bitcoind_exe = env::var("BITCOIND_EXE")
|
||||||
.ok()
|
.ok()
|
||||||
.or(downloaded_exe_path())
|
.or(bitcoind::downloaded_exe_path())
|
||||||
.expect(
|
.expect(
|
||||||
"you should provide env var BITCOIND_EXE or specifiy a bitcoind version feature",
|
"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)
|
Self::new(bitcoind_exe, electrs_exe)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user