- #! /bin/bash
-
- export PATH="$GOBIN:$PATH"
- export TMHOME=$HOME/.tendermint_persist
-
- rm -rf "$TMHOME"
- tendermint init
-
- # use a unix socket so we can remove it
- RPC_ADDR="$(pwd)/rpc.sock"
-
- TM_CMD="tendermint node --log_level=debug --rpc.laddr=unix://$RPC_ADDR" # &> tendermint_${name}.log"
- DUMMY_CMD="abci-cli kvstore --persist $TMHOME/kvstore" # &> kvstore_${name}.log"
-
-
- function start_procs(){
- name=$1
- indexToFail=$2
- echo "Starting persistent kvstore and tendermint"
- if [[ "$CIRCLECI" == true ]]; then
- $DUMMY_CMD &
- else
- $DUMMY_CMD &> "kvstore_${name}.log" &
- fi
- PID_DUMMY=$!
-
- # before starting tendermint, remove the rpc socket
- rm -f $RPC_ADDR
- if [[ "$indexToFail" == "" ]]; then
- # run in background, dont fail
- if [[ "$CIRCLECI" == true ]]; then
- $TM_CMD &
- else
- $TM_CMD &> "tendermint_${name}.log" &
- fi
- PID_TENDERMINT=$!
- else
- # run in foreground, fail
- if [[ "$CIRCLECI" == true ]]; then
- FAIL_TEST_INDEX=$indexToFail $TM_CMD
- else
- FAIL_TEST_INDEX=$indexToFail $TM_CMD &> "tendermint_${name}.log"
- fi
- PID_TENDERMINT=$!
- fi
- }
-
- function kill_procs(){
- kill -9 "$PID_DUMMY" "$PID_TENDERMINT"
- wait "$PID_DUMMY"
- wait "$PID_TENDERMINT"
- }
-
- # wait for port to be available
- function wait_for_port() {
- port=$1
- # this will succeed while port is bound
- nc -z 127.0.0.1 $port
- ERR=$?
- i=0
- while [ "$ERR" == 0 ]; do
- echo "... port $port is still bound. waiting ..."
- sleep 1
- nc -z 127.0.0.1 $port
- ERR=$?
- i=$((i + 1))
- if [[ $i == 10 ]]; then
- echo "Timed out waiting for port to be released"
- exit 1
- fi
- done
- echo "... port $port is free!"
- }
-
-
- failsStart=0
- fails=$(grep -r "fail.Fail" --include \*.go . | wc -l)
- failsEnd=$((fails-1))
-
- for failIndex in $(seq $failsStart $failsEnd); do
- echo ""
- echo "* Test FailIndex $failIndex"
- # test failure at failIndex
-
- bash $(dirname $0)/txs.sh "localhost:46657" &
- start_procs 1 "$failIndex"
-
- # tendermint should already have exited when it hits the fail index
- # but kill -9 for good measure
- kill_procs
-
- start_procs 2
-
- # wait for node to handshake and make a new block
- # NOTE: --unix-socket is only available in curl v7.40+
- curl -s --unix-socket "$RPC_ADDR" http://localhost/status > /dev/null
- ERR=$?
- i=0
- while [ "$ERR" != 0 ]; do
- sleep 1
- curl -s --unix-socket "$RPC_ADDR" http://localhost/status > /dev/null
- ERR=$?
- i=$((i + 1))
- if [[ $i == 20 ]]; then
- echo "Timed out waiting for tendermint to start"
- exit 1
- fi
- done
-
- # wait for a new block
- h1=$(curl -s --unix-socket "$RPC_ADDR" http://localhost/status | jq .result.sync_info.latest_block_height)
- h2=$h1
- while [ "$h2" == "$h1" ]; do
- sleep 1
- h2=$(curl -s --unix-socket "$RPC_ADDR" http://localhost/status | jq .result.sync_info.latest_block_height)
- done
-
- kill_procs
-
- echo "* Passed Test for FailIndex $failIndex"
- echo ""
- done
-
- echo "Passed Test: Persistence"
|