github.com/pokt-network/tendermint@v0.32.11-0.20230426215212-59310158d3e9/test/app/counter_test.sh (about) 1 #! /bin/bash 2 3 export GO111MODULE=on 4 5 if [[ "$GRPC_BROADCAST_TX" == "" ]]; then 6 GRPC_BROADCAST_TX="" 7 fi 8 9 set -u 10 11 ##################### 12 # counter over socket 13 ##################### 14 TESTNAME=$1 15 16 # Send some txs 17 18 function getCode() { 19 set +u 20 R=$1 21 set -u 22 if [[ "$R" == "" ]]; then 23 echo -1 24 fi 25 26 if [[ $(echo $R | jq 'has("code")') == "true" ]]; then 27 # this wont actually work if theres an error ... 28 echo "$R" | jq ".code" 29 else 30 # protobuf auto adds `omitempty` to everything so code OK and empty data/log 31 # will not even show when marshalled into json 32 # apparently we can use github.com/golang/protobuf/jsonpb to do the marshalling ... 33 echo 0 34 fi 35 } 36 37 # build grpc client if needed 38 if [[ "$GRPC_BROADCAST_TX" != "" ]]; then 39 if [ -f test/app/grpc_client ]; then 40 rm test/app/grpc_client 41 fi 42 echo "... building grpc_client" 43 go build -mod=readonly -o test/app/grpc_client test/app/grpc_client.go 44 fi 45 46 function sendTx() { 47 TX=$1 48 set +u 49 SHOULD_ERR=$2 50 if [ "$SHOULD_ERR" == "" ]; then 51 SHOULD_ERR=false 52 fi 53 set -u 54 if [[ "$GRPC_BROADCAST_TX" == "" ]]; then 55 RESPONSE=$(curl -s localhost:26657/broadcast_tx_commit?tx=0x"$TX") 56 IS_ERR=$(echo "$RESPONSE" | jq 'has("error")') 57 ERROR=$(echo "$RESPONSE" | jq '.error') 58 ERROR=$(echo "$ERROR" | tr -d '"') # remove surrounding quotes 59 60 RESPONSE=$(echo "$RESPONSE" | jq '.result') 61 else 62 RESPONSE=$(./test/app/grpc_client "$TX") 63 IS_ERR=false 64 ERROR="" 65 fi 66 67 echo "RESPONSE" 68 echo "$RESPONSE" 69 70 echo "$RESPONSE" | jq . &> /dev/null 71 IS_JSON=$? 72 if [[ "$IS_JSON" != "0" ]]; then 73 IS_ERR=true 74 ERROR="$RESPONSE" 75 fi 76 APPEND_TX_RESPONSE=$(echo "$RESPONSE" | jq '.deliver_tx') 77 APPEND_TX_CODE=$(getCode "$APPEND_TX_RESPONSE") 78 CHECK_TX_RESPONSE=$(echo "$RESPONSE" | jq '.check_tx') 79 CHECK_TX_CODE=$(getCode "$CHECK_TX_RESPONSE") 80 81 echo "-------" 82 echo "TX $TX" 83 echo "RESPONSE $RESPONSE" 84 echo "ERROR $ERROR" 85 echo "IS_ERR $IS_ERR" 86 echo "----" 87 88 if $SHOULD_ERR; then 89 if [[ "$IS_ERR" != "true" ]]; then 90 echo "Expected error sending tx ($TX)" 91 exit 1 92 fi 93 else 94 if [[ "$IS_ERR" == "true" ]]; then 95 echo "Unexpected error sending tx ($TX)" 96 exit 1 97 fi 98 99 fi 100 } 101 102 echo "... sending tx. expect no error" 103 104 # 0 should pass once and get in block, with no error 105 TX=00 106 sendTx $TX 107 if [[ $APPEND_TX_CODE != 0 ]]; then 108 echo "Got non-zero exit code for $TX. $RESPONSE" 109 exit 1 110 fi 111 112 113 echo "... sending tx. expect error" 114 115 # second time should get rejected by the mempool (return error and non-zero code) 116 sendTx $TX true 117 118 119 echo "... sending tx. expect no error" 120 121 # now, TX=01 should pass, with no error 122 TX=01 123 sendTx $TX 124 if [[ $APPEND_TX_CODE != 0 ]]; then 125 echo "Got non-zero exit code for $TX. $RESPONSE" 126 exit 1 127 fi 128 129 echo "... sending tx. expect no error, but invalid" 130 131 # now, TX=03 should get in a block (passes CheckTx, no error), but is invalid 132 TX=03 133 sendTx $TX 134 if [[ "$CHECK_TX_CODE" != 0 ]]; then 135 echo "Got non-zero exit code for checktx on $TX. $RESPONSE" 136 exit 1 137 fi 138 if [[ $APPEND_TX_CODE == 0 ]]; then 139 echo "Got zero exit code for $TX. Should have been bad nonce. $RESPONSE" 140 exit 1 141 fi 142 143 echo "Passed Test: $TESTNAME"