github.com/okex/exchain@v1.8.0/libs/tendermint/test/persist/test_failure_indices.sh (about) 1 #! /bin/bash 2 3 export PATH="$GOBIN:$PATH" 4 export TMHOME=$HOME/.tendermint_persist 5 6 rm -rf "$TMHOME" 7 tendermint init 8 9 # use a unix socket so we can remove it 10 RPC_ADDR="$(pwd)/rpc.sock" 11 12 TM_CMD="tendermint node --log_level=debug --rpc.laddr=unix://$RPC_ADDR" # &> tendermint_${name}.log" 13 DUMMY_CMD="abci-cli kvstore --persist $TMHOME/kvstore" # &> kvstore_${name}.log" 14 15 16 function start_procs(){ 17 name=$1 18 indexToFail=$2 19 echo "Starting persistent kvstore and tendermint" 20 if [[ "$CIRCLECI" == true ]]; then 21 $DUMMY_CMD & 22 else 23 $DUMMY_CMD &> "kvstore_${name}.log" & 24 fi 25 PID_DUMMY=$! 26 27 # before starting tendermint, remove the rpc socket 28 rm -f $RPC_ADDR 29 if [[ "$indexToFail" == "" ]]; then 30 # run in background, dont fail 31 if [[ "$CIRCLECI" == true ]]; then 32 $TM_CMD & 33 else 34 $TM_CMD &> "tendermint_${name}.log" & 35 fi 36 PID_TENDERMINT=$! 37 else 38 # run in foreground, fail 39 if [[ "$CIRCLECI" == true ]]; then 40 FAIL_TEST_INDEX=$indexToFail $TM_CMD 41 else 42 FAIL_TEST_INDEX=$indexToFail $TM_CMD &> "tendermint_${name}.log" 43 fi 44 PID_TENDERMINT=$! 45 fi 46 } 47 48 function kill_procs(){ 49 kill -9 "$PID_DUMMY" "$PID_TENDERMINT" 50 wait "$PID_DUMMY" 51 wait "$PID_TENDERMINT" 52 } 53 54 # wait for port to be available 55 function wait_for_port() { 56 port=$1 57 # this will succeed while port is bound 58 nc -z 127.0.0.1 $port 59 ERR=$? 60 i=0 61 while [ "$ERR" == 0 ]; do 62 echo "... port $port is still bound. waiting ..." 63 sleep 1 64 nc -z 127.0.0.1 $port 65 ERR=$? 66 i=$((i + 1)) 67 if [[ $i == 10 ]]; then 68 echo "Timed out waiting for port to be released" 69 exit 1 70 fi 71 done 72 echo "... port $port is free!" 73 } 74 75 76 failsStart=0 77 fails=$(grep -r "fail.Fail" --include \*.go . | wc -l) 78 failsEnd=$((fails-1)) 79 80 for failIndex in $(seq $failsStart $failsEnd); do 81 echo "" 82 echo "* Test FailIndex $failIndex" 83 # test failure at failIndex 84 85 bash $(dirname $0)/txs.sh "localhost:26657" & 86 start_procs 1 "$failIndex" 87 88 # tendermint should already have exited when it hits the fail index 89 # but kill -9 for good measure 90 kill_procs 91 92 start_procs 2 93 94 # wait for node to handshake and make a new block 95 # NOTE: --unix-socket is only available in curl v7.40+ 96 curl -s --unix-socket "$RPC_ADDR" http://localhost/status > /dev/null 97 ERR=$? 98 i=0 99 while [ "$ERR" != 0 ]; do 100 sleep 1 101 curl -s --unix-socket "$RPC_ADDR" http://localhost/status > /dev/null 102 ERR=$? 103 i=$((i + 1)) 104 if [[ $i == 20 ]]; then 105 echo "Timed out waiting for tendermint to start" 106 exit 1 107 fi 108 done 109 110 # wait for a new block 111 h1=$(curl -s --unix-socket "$RPC_ADDR" http://localhost/status | jq .result.sync_info.latest_block_height) 112 h2=$h1 113 while [ "$h2" == "$h1" ]; do 114 sleep 1 115 h2=$(curl -s --unix-socket "$RPC_ADDR" http://localhost/status | jq .result.sync_info.latest_block_height) 116 done 117 118 kill_procs 119 120 echo "* Passed Test for FailIndex $failIndex" 121 echo "" 122 done 123 124 echo "Passed Test: Persistence"