From e3316aee4cda749c9a3b9bb1d666c84492882efe Mon Sep 17 00:00:00 2001 From: Steve Myers Date: Fri, 11 Jun 2021 16:03:01 -0700 Subject: [PATCH] [ci] Change blockchain tests to use bitcoind rpc cookie authentication --- .github/workflows/cont_integration.yml | 19 +++++++++---------- ci/start-core.sh | 11 ++++++----- run_blockchain_tests.sh | 25 ++++++++++++------------- 3 files changed, 27 insertions(+), 28 deletions(-) diff --git a/.github/workflows/cont_integration.yml b/.github/workflows/cont_integration.yml index de4c96bd..c79632ed 100644 --- a/.github/workflows/cont_integration.yml +++ b/.github/workflows/cont_integration.yml @@ -81,19 +81,18 @@ jobs: matrix: blockchain: - name: electrum - container: bitcoindevkit/electrs - start: /root/electrs --network regtest --jsonrpc-import + container: bitcoindevkit/electrs:0.4.0 + start: /root/electrs --network regtest --cookie-file $GITHUB_WORKSPACE/.bitcoin/regtest/.cookie --jsonrpc-import - name: esplora - container: bitcoindevkit/esplora - start: /root/electrs --network regtest -vvv --cookie admin:passw --jsonrpc-import --electrum-rpc-addr=0.0.0.0:60401 --http-addr 0.0.0.0:3002 + container: bitcoindevkit/esplora:0.4.0 + start: /root/electrs --network regtest -vvv --daemon-dir $GITHUB_WORKSPACE/.bitcoin --jsonrpc-import --electrum-rpc-addr=0.0.0.0:60401 --http-addr 0.0.0.0:3002 - name: rpc - container: bitcoindevkit/electrs - start: /root/electrs --network regtest --jsonrpc-import + container: bitcoindevkit/electrs:0.4.0 + start: /root/electrs --network regtest --cookie-file $GITHUB_WORKSPACE/.bitcoin/regtest/.cookie --jsonrpc-import container: ${{ matrix.blockchain.container }} env: - BDK_RPC_AUTH: USER_PASS - BDK_RPC_USER: admin - BDK_RPC_PASS: passw + BDK_RPC_AUTH: COOKIEFILE + BDK_RPC_COOKIEFILE: ${{ github.workspace }}/.bitcoin/regtest/.cookie BDK_RPC_URL: 127.0.0.1:18443 BDK_RPC_WALLET: bdk-test BDK_ELECTRUM_URL: tcp://127.0.0.1:60401 @@ -109,7 +108,7 @@ jobs: ~/.cargo/git target key: ${{ runner.os }}-cargo-${{ github.job }}-${{ hashFiles('**/Cargo.toml','**/Cargo.lock') }} - - name: get pkg-config # running eslpora tests seems to need this + - name: get pkg-config # running esplora tests seems to need this run: apt update && apt install -y --fix-missing pkg-config libssl-dev - name: Install rustup run: curl https://sh.rustup.rs -sSf | sh -s -- -y diff --git a/ci/start-core.sh b/ci/start-core.sh index 455442b4..4c0bb699 100755 --- a/ci/start-core.sh +++ b/ci/start-core.sh @@ -1,13 +1,14 @@ #!/usr/bin/env sh echo "Starting bitcoin node." -/root/bitcoind -regtest -server -daemon -fallbackfee=0.0002 -rpcuser=$BDK_RPC_USER -rpcpassword=$BDK_RPC_PASS -rpcallowip=0.0.0.0/0 -rpcbind=0.0.0.0 -blockfilterindex=1 -peerblockfilters=1 +mkdir $GITHUB_WORKSPACE/.bitcoin +/root/bitcoind -regtest -server -daemon -datadir=$GITHUB_WORKSPACE/.bitcoin -fallbackfee=0.0002 -rpcallowip=0.0.0.0/0 -rpcbind=0.0.0.0 -blockfilterindex=1 -peerblockfilters=1 echo "Waiting for bitcoin node." -until /root/bitcoin-cli -regtest -rpcuser=$BDK_RPC_USER -rpcpassword=$BDK_RPC_PASS getblockchaininfo; do +until /root/bitcoin-cli -regtest -datadir=$GITHUB_WORKSPACE/.bitcoin getblockchaininfo; do sleep 1 done -/root/bitcoin-cli -regtest -rpcuser=$BDK_RPC_USER -rpcpassword=$BDK_RPC_PASS createwallet $BDK_RPC_WALLET +/root/bitcoin-cli -regtest -datadir=$GITHUB_WORKSPACE/.bitcoin createwallet $BDK_RPC_WALLET echo "Generating 150 bitcoin blocks." -ADDR=$(/root/bitcoin-cli -regtest -rpcuser=$BDK_RPC_USER -rpcpassword=$BDK_RPC_PASS -rpcwallet=$BDK_RPC_WALLET getnewaddress) -/root/bitcoin-cli -regtest -rpcuser=$BDK_RPC_USER -rpcpassword=$BDK_RPC_PASS generatetoaddress 150 $ADDR +ADDR=$(/root/bitcoin-cli -regtest -datadir=$GITHUB_WORKSPACE/.bitcoin -rpcwallet=$BDK_RPC_WALLET getnewaddress) +/root/bitcoin-cli -regtest -datadir=$GITHUB_WORKSPACE/.bitcoin generatetoaddress 150 $ADDR diff --git a/run_blockchain_tests.sh b/run_blockchain_tests.sh index cd094f5c..74af6a89 100755 --- a/run_blockchain_tests.sh +++ b/run_blockchain_tests.sh @@ -14,10 +14,7 @@ eprintln(){ } cleanup() { - if test "$id"; then - eprintln "cleaning up $blockchain docker container $id"; - docker rm -fv "$id" > /dev/null; - fi + docker kill test_container trap - EXIT INT } @@ -30,16 +27,16 @@ test_name="$2" case "$blockchain" in electrum) eprintln "starting electrs docker container" - id="$(docker run -d -p 127.0.0.1:18443-18444:18443-18444/tcp -p 127.0.0.1:60401:60401/tcp bitcoindevkit/electrs)" + docker run --detach --rm -p 127.0.0.1:18443-18444:18443-18444/tcp -p 127.0.0.1:60401:60401/tcp --name test_container bitcoindevkit/electrs:0.4.0 ;; esplora) eprintln "starting esplora docker container" - id="$(docker run -d -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)" + docker run --detach --rm -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 --name test_container bitcoindevkit/esplora:0.4.0 export BDK_ESPLORA_URL=http://127.0.0.1:3002 ;; rpc) - eprintln "starting electrs docker container" - id="$(docker run -d -p 127.0.0.1:18443-18444:18443-18444/tcp -p 127.0.0.1:60401:60401/tcp bitcoindevkit/electrs)" + eprintln "starting bitcoind docker container (via electrs container)" + docker run --detach --rm -p 127.0.0.1:18443-18444:18443-18444/tcp -p 127.0.0.1:60401:60401/tcp --name test_container bitcoindevkit/electrs:0.4.0 ;; *) usage; @@ -48,21 +45,23 @@ case "$blockchain" in esac # taken from https://github.com/bitcoindevkit/bitcoin-regtest-box -export BDK_RPC_AUTH=USER_PASS -export BDK_RPC_USER=admin -export BDK_RPC_PASS=passw +export BDK_RPC_AUTH=COOKIEFILE +export BDK_RPC_COOKIEFILE=/tmp/regtest.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 -rpcuser=admin -rpcpassword=passw $@ + docker exec -it test_container /root/bitcoin-cli -regtest -datadir=/root/.bitcoin $@ } -eprintln "running getwalletinfo until bitcoind seems to be alive" +#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 test_container:/root/.bitcoin/regtest/.cookie /tmp/regtest.cookie + cargo test --features "test-blockchains,test-$blockchain" --no-default-features "$blockchain::bdk_blockchain_tests::$test_name"