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"