aboutsummaryrefslogtreecommitdiff
path: root/qa/rpc-tests/util.sh
diff options
context:
space:
mode:
authorGavin Andresen <gavinandresen@gmail.com>2013-11-21 16:57:25 +1000
committerGavin Andresen <gavinandresen@gmail.com>2013-11-27 14:21:05 +1000
commit9e7776bf1f1aebbd6e1ef21a4144ba72a54985de (patch)
treee4dd613a97637419dd0013fd7e95827cfd2167cf /qa/rpc-tests/util.sh
parent03b6a1cee4fe7f38ca16c0bc2d08d8d4d1288f2f (diff)
downloadbitcoin-9e7776bf1f1aebbd6e1ef21a4144ba72a54985de.tar.xz
Integration tests via RPC calls
qa/rpc-tests/wallet.sh runs a three-node -regtest network, generates a fresh blockchain, and then exercises basic wallet sending/receiving functionality using command-line RPC.
Diffstat (limited to 'qa/rpc-tests/util.sh')
-rw-r--r--qa/rpc-tests/util.sh84
1 files changed, 84 insertions, 0 deletions
diff --git a/qa/rpc-tests/util.sh b/qa/rpc-tests/util.sh
new file mode 100644
index 0000000000..dc2a319970
--- /dev/null
+++ b/qa/rpc-tests/util.sh
@@ -0,0 +1,84 @@
+#!/usr/bin/env bash
+
+# Functions used by more than one test
+
+function echoerr {
+ echo "$@" 1>&2;
+}
+
+# Usage: ExtractKey <key> "<json_object_string>"
+# Warning: this will only work for the very-well-behaved
+# JSON produced by bitcoind, do NOT use it to try to
+# parse arbitrary/nested/etc JSON.
+function ExtractKey {
+ echo $2 | tr -d ' "{}\n' | awk -v RS=',' -F: "\$1 ~ /$1/ { print \$2}"
+}
+
+function CreateDataDir {
+ DIR=$1
+ mkdir -p $DIR
+ CONF=$DIR/bitcoin.conf
+ echo "regtest=1" >> $CONF
+ echo "keypool=2" >> $CONF
+ echo "rpcuser=rt" >> $CONF
+ echo "rpcpassword=rt" >> $CONF
+ echo "rpcwait=1" >> $CONF
+ shift
+ while (( "$#" )); do
+ echo $1 >> $CONF
+ shift
+ done
+}
+
+function AssertEqual {
+ if (( $( echo "$1 == $2" | bc ) == 0 ))
+ then
+ echoerr "AssertEqual: $1 != $2"
+ exit 1
+ fi
+}
+
+# CheckBalance -datadir=... amount account minconf
+function CheckBalance {
+ B=$( $CLI $1 getbalance $3 $4 )
+ if (( $( echo "$B == $2" | bc ) == 0 ))
+ then
+ echoerr "bad balance: $B (expected $2)"
+ exit 1
+ fi
+}
+
+# Use: Address <datadir> [account]
+function Address {
+ $CLI $1 getnewaddress $2
+}
+
+# Send from to amount
+function Send {
+ from=$1
+ to=$2
+ amount=$3
+ address=$(Address $to)
+ txid=$( $CLI $from sendtoaddress $address $amount )
+}
+
+# Use: Unspent <datadir> <n'th-last-unspent> <var>
+function Unspent {
+ local r=$( $CLI $1 listunspent | awk -F'[ |:,"]+' "\$2 ~ /$3/ { print \$3 }" | tail -n $2 | head -n 1)
+ echo $r
+}
+
+# Use: CreateTxn1 <datadir> <n'th-last-unspent> <destaddress>
+# produces hex from signrawtransaction
+function CreateTxn1 {
+ TXID=$(Unspent $1 $2 txid)
+ AMOUNT=$(Unspent $1 $2 amount)
+ VOUT=$(Unspent $1 $2 vout)
+ RAWTXN=$( $CLI $1 createrawtransaction "[{\"txid\":\"$TXID\",\"vout\":$VOUT}]" "{\"$3\":$AMOUNT}")
+ ExtractKey hex "$( $CLI $1 signrawtransaction $RAWTXN )"
+}
+
+# Use: SendRawTxn <datadir> <hex_txn_data>
+function SendRawTxn {
+ $CLI $1 sendrawtransaction $2
+}