diff --git a/scripts/api_test.sh b/scripts/api_test.sh new file mode 100755 index 000000000..c33574cd5 --- /dev/null +++ b/scripts/api_test.sh @@ -0,0 +1,700 @@ +#!/bin/bash +# This Script is for Testing the API functionality on both local and betanet. +# -l to run localnet, -b to run betanet(mutually exclusive) +# -v to see returns from each request +# Right now only tests whether a response is recieved +# You must have properly cloned into the dapp-examples repo and have installed nodejs +VERBOSE="FALSE" +TESTS_RAN=0 +TESTS_PASSED=0 + +red=`tput setaf 1` +green=`tput setaf 2` +blue=`tput setaf 6` +white=`tput sgr0` +yellow=`tput setaf 11` +reset=`tput sgr0` + +function response_test() { + if [ "$1" != "" ]; then + echo "${green}RESPONSE RECIEVED${reset}" + return 1 + else + echo "${red}NO RESPONSE${reset}" + return 0 + fi +} + +function isHashTest() { + if [ "$TRANSACTION" != "null" ]; then + if [[ "$TRANSACTION_HASH" =~ ^0x[0-9a-f]{64}$ ]]; then + echo ${green}TRANSACTION HASH VALID${reset} + echo + return 1 + fi + fi + echo ${red}TRANSACTION HASH INVALID${reset} + return 0 +} + +function isHexTest() { + if [ "$1" != "null" ]; then + if [[ "$1" =~ ^0x[0-9a-f]+$ ]]; then + echo ${green}VALID HEX RECIEVED${reset} + echo + return 1 + fi + fi + echo ${red}INVALID HEX RECIEVED${reset} + return 0 +} + +### SETUP COMMANDLINE FLAGS ### +while getopts "lbvp" OPTION; do + case $OPTION in + b) + NETWORK="betanet" + declare -A PORT=( [POST]="http://s0.b.hmny.io:9500/" [GET]="http://e0.b.hmny.io:5000/" ) + BLOCK_0_HASH=$(curl --location --request POST "http://l0.b.hmny.io:9500" \ + --header "Content-Type: application/json" \ + --data "{\"jsonrpc\":\"2.0\",\"method\":\"hmy_getBlockByNumber\",\"params\":[\"0x1\", true],\"id\":1}" | jq -r '.result.hash') + echo "BLOCK0HASH:" + echo "$BLOCK_0_HASH" + + SIGNED_RAW_TRANSACTION=$(node ../dapp-examples/nodejs/apiTestSign.js) + echo "RAWTX" + echo "$SIGNED_RAW_TRANSACTION" + TRANSACTION_HASH=$(curl --location --request POST "http://l0.b.hmny.io:9500" \ + --header "Content-Type: application/json" \ + --data "{\"jsonrpc\":\"2.0\",\"method\":\"hmy_sendRawTransaction\",\"params\":[\""$SIGNED_RAW_TRANSACTION"\"],\"id\":1}" | jq -r '.result') + echo "TRANSACTION_HASH:" + echo $TRANSACTION_HASH + sleep 20s + TRANSACTION=$(curl --location --request POST "http://l0.b.hmny.io:9500" \ + --header "Content-Type: application/json" \ + --data "{\"jsonrpc\":\"2.0\",\"method\":\"hmy_getTransactionByHash\",\"params\":[\"$TRANSACTION_HASH\"],\"id\":1}") + + echo "TRANSACTION:" + echo "$TRANSACTION" + + TRANSACTION_BLOCK_HASH=$(echo $TRANSACTION | jq -r '.result.blockHash') + TRANSACTION_BLOCK_NUMBER=$(echo $TRANSACTION | jq -r '.result.blockNumber') + TRANSACTION_INDEX=$(echo $TRANSACTION | jq -r '.result.transactionIndex') #Needs to be get transaction Index + + + TRANSACTION_BLOCK_ID=$(( $TRANSACTION_BLOCK_NUMBER )) + echo TRANSACTION_BLOCK_ID + echo $TRANSACTION_BLOCK_ID + echo "TRANSACTION_BLOCK_HASH:" + echo $TRANSACTION_BLOCK_HASH + + echo "TRANSACTION_BLOCK_NUMBER:" + echo "$TRANSACTION_BLOCK_NUMBER" + + echo "TRANSACTION_INDEX:" + echo $TRANSACTION_INDEX + + ;; + l) + NETWORK="localnet" + declare -A PORT=( [POST]="localhost:9500/" [GET]="localhost:5099/" ) + BLOCK_0_HASH=$(curl -s --location --request POST "localhost:9500" \ + --header "Content-Type: application/json" \ + --data "{\"jsonrpc\":\"2.0\",\"method\":\"hmy_getBlockByNumber\",\"params\":[\"0x1\", true],\"id\":1}" | jq -r '.result.hash') + + echo "BLOCK0HASH:" + echo "$BLOCK_0_HASH" + + SIGNED_RAW_TRANSACTION=$(node ../dapp-examples/nodejs/apiTestSign.js localnet) + echo "RAWTX" + echo "$SIGNED_RAW_TRANSACTION" + TRANSACTION_HASH=$(curl --location --request POST "localhost:9500" \ + --header "Content-Type: application/json" \ + --data "{\"jsonrpc\":\"2.0\",\"method\":\"hmy_sendRawTransaction\",\"params\":[\""$SIGNED_RAW_TRANSACTION"\"],\"id\":1}" | jq -r '.result') + echo "TRANSACTION_HASH:" + echo $TRANSACTION_HASH + sleep 20s + TRANSACTION=$(curl --location --request POST "http://localhost:9500" \ + --header "Content-Type: application/json" \ + --data "{\"jsonrpc\":\"2.0\",\"method\":\"hmy_getTransactionByHash\",\"params\":[\"$TRANSACTION_HASH\"],\"id\":1}") + + echo "TRANSACTION:" + echo "$TRANSACTION" + + TRANSACTION_BLOCK_HASH=$(echo $TRANSACTION | jq -r '.result.blockHash') + TRANSACTION_BLOCK_NUMBER=$(echo $TRANSACTION | jq -r '.result.blockNumber') + TRANSACTION_INDEX=$(echo $TRANSACTION | jq -r '.result.transactionIndex') + + TRANSACTION_BLOCK_ID=$(( $TRANSACTION_BLOCK_NUMBER )) + echo TRANSACTION_BLOCK_ID + echo $TRANSACTION_BLOCK_ID + echo "TRANSACTION_BLOCK_HASH:" + echo $TRANSACTION_BLOCK_HASH + + echo "TRANSACTION_BLOCK_NUMBER:" + echo "$TRANSACTION_BLOCK_NUMBER" + + echo "TRANSACTION_INDEX:" + echo $TRANSACTION_INDEX + ;; + v) + VERBOSE="TRUE" + ;; + p) + PRETTY="TRUE" + ;; + esac + done + +if [ $OPTIND -eq 1 ]; then echo "No options were passed, -l for localnet, -b for betanet, -v to view logs of either"; exit; fi + +declare -A GETDATA=( [GET_blocks]="blocks?from=$TRANSACTION_BLOCK_ID&to=$TRANSACTION_BLOCK_ID" [GET_tx]="tx?id=0" [GET_address]="address?id=0" [GET_node-count]="node-count" [GET_shard]="shard?id=0" [GET_committee]="committee?shard_id=0&epoch=0" ) +declare -A POSTDATA + +if [ "$NETWORK" == "localnet" ]; then + POSTDATA[hmy_getBlockByHash]="hmy_getBlockByHash\",\"params\":[\"$TRANSACTION_BLOCK_HASH\", true]" + POSTDATA[hmy_getBlockByNumber]="hmy_getBlockByNumber\",\"params\":[\"$TRANSACTION_BLOCK_NUMBER\", true]" + POSTDATA[hmy_getBlockTransactionCountByHash]="hmy_getBlockTransactionCountByHash\",\"params\":[\"$TRANSACTION_BLOCK_HASH\"]" + POSTDATA[hmy_getBlockTransactionCountByNumber]="hmy_getBlockTransactionCountByNumber\",\"params\":[\"$TRANSACTION_BLOCK_NUMBER\"]" + POSTDATA[hmy_getCode]="hmy_getCode\",\"params\":[\"0x08AE1abFE01aEA60a47663bCe0794eCCD5763c19\", \"latest\"]" + POSTDATA[hmy_getTransactionByBlockHashAndIndex]="hmy_getTransactionByBlockHashAndIndex\",\"params\":[\"$TRANSACTION_BLOCK_HASH\", \"$TRANSACTION_INDEX\"]" + POSTDATA[hmy_getTransactionByBlockNumberAndIndex]="hmy_getTransactionByBlockNumberAndIndex\",\"params\":[\"$TRANSACTION_BLOCK_NUMBER\", \"$TRANSACTION_INDEX\"]" + POSTDATA[hmy_getTransactionByHash]="hmy_getTransactionByHash\",\"params\":[\"$TRANSACTION_HASH\"]" + POSTDATA[hmy_getTransactionReceipt]="hmy_getTransactionReceipt\",\"params\":[\"$TRANSACTION_HASH\"]" + POSTDATA[hmy_syncing]="hmy_syncing\",\"params\":[]" + POSTDATA[net_peerCount]="net_peerCount\",\"params\":[]" + POSTDATA[hmy_getBalance]="hmy_getBalance\",\"params\":[\"one18t4yj4fuutj83uwqckkvxp9gfa0568uc48ggj7\", \"latest\"]" + POSTDATA[hmy_getStorageAt]="hmy_getStorageAt\",\"params\":[\"0xD7Ff41CA29306122185A07d04293DdB35F24Cf2d\", \"0\", \"latest\"]" + POSTDATA[hmy_getTransactionCount]="hmy_getTransactionCount\",\"params\":[\"0x806171f95C5a74371a19e8a312c9e5Cb4E1D24f6\", \"latest\"]" # what is this + POSTDATA[hmy_sendRawTransaction]="hmy_sendRawTransaction\",\"params\":[\"$SIGNED_RAW_TRANSACTION\"]" + POSTDATA[hmy_getLogs]="hmy_getLogs\", \"params\":[{\"BlockHash\": \"$TRANSACTION_BLOCK_HASH\"}]" + POSTDATA[hmy_getFilterChanges]="hmy_getFilterChanges\", \"params\":[\"0x58010795a282878ed0d61da72a14b8b0\"]" + POSTDATA[hmy_newPendingTransactionFilter]="hmy_newPendingTransactionFilter\", \"params\":[]" + POSTDATA[hmy_newBlockFilter]="hmy_newBlockFilter\", \"params\":[]" + POSTDATA[hmy_newFilter]="hmy_newFilter\", \"params\":[{\"BlockHash\": \"0x5725b5b2ab28206e7256a78cda4f9050c2629fd85110ffa54eacd2a13ba68072\"}]" + POSTDATA[hmy_call]="hmy_call\", \"params\":[{\"to\": \"0x08AE1abFE01aEA60a47663bCe0794eCCD5763c19\"}, \"latest\"]" + POSTDATA[hmy_gasPrice]="hmy_gasPrice\",\"params\":[]" + POSTDATA[hmy_blockNumber]="hmy_blockNumber\",\"params\":[]" + POSTDATA[net_version]="net_version\",\"params\":[]" + POSTDATA[hmy_protocolVersion]="hmy_protocolVersion\",\"params\":[]" +fi + +if [ "$NETWORK" == "betanet" ]; then + POSTDATA[hmy_getBlockByHash]="hmy_getBlockByHash\",\"params\":[\"$TRANSACTION_BLOCK_HASH\", true]" + POSTDATA[hmy_getBlockByNumber]="hmy_getBlockByNumber\",\"params\":[\"$TRANSACTION_BLOCK_NUMBER\", true]" + POSTDATA[hmy_getBlockTransactionCountByHash]="hmy_getBlockTransactionCountByHash\",\"params\":[\"$TRANSACTION_BLOCK_HASH\"]" + POSTDATA[hmy_getBlockTransactionCountByNumber]="hmy_getBlockTransactionCountByNumber\",\"params\":[\"$TRANSACTION_BLOCK_NUMBER\"]" + POSTDATA[hmy_getCode]="hmy_getCode\",\"params\":[\"0x08AE1abFE01aEA60a47663bCe0794eCCD5763c19\", \"latest\"]" + POSTDATA[hmy_getTransactionByBlockHashAndIndex]="hmy_getTransactionByBlockHashAndIndex\",\"params\":[\"$TRANSACTION_BLOCK_HASH\", \"$TRANSACTION_INDEX\"]" + POSTDATA[hmy_getTransactionByBlockNumberAndIndex]="hmy_getTransactionByBlockNumberAndIndex\",\"params\":[\"$TRANSACTION_BLOCK_NUMBER\", \"$TRANSACTION_INDEX\"]" + POSTDATA[hmy_getTransactionByHash]="hmy_getTransactionByHash\",\"params\":[\"$TRANSACTION_HASH\"]" + POSTDATA[hmy_getTransactionReceipt]="hmy_getTransactionReceipt\",\"params\":[\"$TRANSACTION_HASH\"]" + POSTDATA[hmy_syncing]="hmy_syncing\",\"params\":[]" + POSTDATA[net_peerCount]="net_peerCount\",\"params\":[]" + POSTDATA[hmy_getBalance]="hmy_getBalance\",\"params\":[\"one18t4yj4fuutj83uwqckkvxp9gfa0568uc48ggj7\", \"latest\"]" + POSTDATA[hmy_getStorageAt]="hmy_getStorageAt\",\"params\":[\"0xD7Ff41CA29306122185A07d04293DdB35F24Cf2d\", \"0\", \"latest\"]" + POSTDATA[hmy_getTransactionCount]="hmy_getTransactionCount\",\"params\":[\"0x806171f95C5a74371a19e8a312c9e5Cb4E1D24f6\", \"latest\"]" # what is this + POSTDATA[hmy_sendRawTransaction]="hmy_sendRawTransaction\",\"params\":[\"$SIGNED_RAW_TRANSACTION\"]" + POSTDATA[hmy_getLogs]="hmy_getLogs\", \"params\":[{\"BlockHash\": \"$TRANSACTION_BLOCK_HASH\"}]" + POSTDATA[hmy_getFilterChanges]="hmy_getFilterChanges\", \"params\":[\"0x58010795a282878ed0d61da72a14b8b0\"]" + POSTDATA[hmy_newPendingTransactionFilter]="hmy_newPendingTransactionFilter\", \"params\":[]" + POSTDATA[hmy_newBlockFilter]="hmy_newBlockFilter\", \"params\":[]" + POSTDATA[hmy_newFilter]="hmy_newFilter\", \"params\":[{\"BlockHash\": \"0x5725b5b2ab28206e7256a78cda4f9050c2629fd85110ffa54eacd2a13ba68072\"}]" + POSTDATA[hmy_call]="hmy_call\", \"params\":[{\"to\": \"0x08AE1abFE01aEA60a47663bCe0794eCCD5763c19\"}, \"latest\"]" + POSTDATA[hmy_gasPrice]="hmy_gasPrice\",\"params\":[]" + POSTDATA[hmy_blockNumber]="hmy_blockNumber\",\"params\":[]" + POSTDATA[net_version]="net_version\",\"params\":[]" + POSTDATA[hmy_protocolVersion]="hmy_protocolVersion\",\"params\":[]" +fi + +declare -A RESPONSES + +RESPONSES[GET_blocks]="" +RESPONSES[GET_tx]="" +RESPONSES[GET_address]="" +RESPONSES[GET_node-count]="" +RESPONSES[GET_shard]="" +RESPONSES[GET_committee]="" +RESPONSES[hmy_getBlockByHash]="" +RESPONSES[hmy_getBlockByNumber]="" +RESPONSES[hmy_getBlockTransactionCountByHash]="" +RESPONSES[hmy_getBlockTransactionCountByNumber]="" +RESPONSES[hmy_getCode]="" +RESPONSES[hmy_getTransactionByBlockHashAndIndex]="" +RESPONSES[hmy_getTransactionByBlockNumberAndIndex]="" +RESPONSES[hmy_getTransactionByHash]="" +RESPONSES[hmy_getTransactionReceipt]="" +RESPONSES[hmy_syncing]="" +RESPONSES[net_peerCount]="" +RESPONSES[hmy_getBalance]="" +RESPONSES[hmy_getStorageAt]="" +RESPONSES[hmy_getTransactionCount]="" +RESPONSES[hmy_sendRawTransaction]="" +RESPONSES[hmy_getLogs]="" +RESPONSES[hmy_getFilterChanges]="" +RESPONSES[hmy_newPendingTransactionFilter]="" +RESPONSES[hmy_newBlockFilter]="" +RESPONSES[hmy_newFilter]="" +RESPONSES[hmy_call]="" +RESPONSES[hmy_gasPrice]="" +RESPONSES[hmy_blockNumber]="" +RESPONSES[net_version]="" +RESPONSES[hmy_protocolVersion]="" + +### Processes GET requests and stores reponses in RESPONSES ### +function GET_requests() { + for K in "${!GETDATA[@]}"; + do + RESPONSES[$K]=$(curl -s --location --request GET "${PORT[GET]}${GETDATA[$K]}" \ + --header "Content-Type: application/json" \ + --data "") + done +} + +### Processes POST requests and stores reponses in RESPONSES ### +function POST_requests() { + for K in "${!POSTDATA[@]}"; + do + RESPONSES[$K]="$(curl -s --location --request POST "${PORT[POST]}" \ + --header "Content-Type: application/json" \ + --data "{\"jsonrpc\":\"2.0\",\"method\":\"${POSTDATA[$K]},\"id\":1}")" + done +} + +function log_API_responses() { + for K in "${!GETDATA[@]}"; + do + echo "${yellow}$K" + echo "${blue}REQUEST:" + echo "${white}${GETDATA[$K]}" + echo "${blue}RESPONSE:" ${white} + echo ${RESPONSES[$K]} #| jq . + echo + echo + done + for K in "${!POSTDATA[@]}"; + do + echo "${yellow}$K" + echo "${blue}REQUEST:" + echo "${white}${POSTDATA[$K]}" + echo "${blue}RESPONSE: $white" + echo ${RESPONSES[$K]} #| jq . + echo + echo + done +} + +GET_requests +POST_requests +### BASIC QUERY TESTS ### + +function Explorer_getBlock_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "GET blocks(explorer) test:" + response_test ${RESPONSES[GET_blocks]} + if [ "$?" == "1" ]; then + BLOCKBYIDHASH=$(echo ${RESPONSES[GET_blocks]} | jq -r .[0].id) + if [ "$BLOCKBYIDHASH" != "null" ]; then + if [ "$BLOCKBYIDHASH" == "$TRANSACTION_BLOCK_HASH" ]; then + TESTS_PASSED=$(( TESTS_PASSED + 1 )) + echo ${green}BLOCK HASH MATCHES TX${reset} + echo + return + fi + fi + echo ${red}BLOCK HASH DOES NOT MATCH TX OR IS NULL${reset} + fi + echo +} + +#Needs updating - wtf does getTx do - no arguments? +function Explorer_getTx_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "GET tx(explorer) test:" + response_test ${RESPONSES[GET_tx]} + if [ "$?" == "1" ]; then + TX_HASH=$(echo ${RESPONSES[GET_tx]} | jq -r .id) # fix agrs to jq + if [ "$TX_HASH" != "null" ]; then + if [ "$TX_HASH" == "$TX_HASH" ]; then + TESTS_PASSED=$(( TESTS_PASSED + 1 )) + echo ${green}BLOCK HASH MATCHES TX${reset} + echo + return + fi + fi + echo ${red}BLOCK HASH DOES NOT MATCH TX OR IS NULL${reset} + fi + echo +} + +function Explorer_getExplorerNodeAdress_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "GET address(explorer) test:" + response_test ${RESPONSES[GET_address]} + [ "$?" == "1" ] && TESTS_PASSED=$(( TESTS_PASSED + 1 )) + echo +} + +function Explorer_getExplorerNode_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "GET node-count(explorer) test:" + response_test ${RESPONSES[GET_node-count]} + if [ ${RESPONSES[GET_node-count]}="2" ]; then + echo ${green}SANE VALUE, 2 explorer nodes reported $reset + TESTS_PASSED=$(( TESTS_PASSED + 1 )) + else + echo ${red}non 2 explorer nodes reported $reset + fi + echo +} + +function Explorer_getShard_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "GET shard(explorer) test:" + response_test ${RESPONSES[GET_shard]} + [ "$?" == "1" ] && TESTS_PASSED=$(( TESTS_PASSED + 1 )) + echo +} + +function Explorer_getCommitte_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "GET committe(explorer) test:" + response_test ${RESPONSES[GET_committee]} + [ "$?" == "1" ] && TESTS_PASSED=$(( TESTS_PASSED + 1 )) + echo +} + +### API POST REQUESTS ### + +function API_getBlockByNumber_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "POST hmy_getBlockByNumber test:" + response_test ${RESPONSES[hmy_getBlockByNumber]} + BLOCKBYNUMBERHASH=$(echo ${RESPONSES[hmy_getBlockByNumber]} | jq -r '.result.hash') + + if [ "$BLOCKBLOCKBYNUMBERHASH" != "null" ]; then + if [ "$BLOCKBYNUMBERHASH" == "$TRANSACTION_BLOCK_HASH" ]; then + TESTS_PASSED=$(( TESTS_PASSED + 1 )) + echo ${green}BLOCK HASH MATCHES TX${reset} + echo + return + fi + fi + echo ${red}BLOCK HASH DOES NOT MATCH TX OR IS NULL${reset} + echo +} + +function API_getBlockByHash_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "POST hmy_getBlockByHash test:" + response_test ${RESPONSES[hmy_getBlockByHash]} + BLOCKBYHASHHASH=$(echo ${RESPONSES[hmy_getBlockByHash]} | jq -r '.result.hash') + if [ "$BLOCKBYHASHBYHASH" != "null" ]; then + if [ "$BLOCKBYHASHHASH" == "$TRANSACTION_BLOCK_HASH" ]; then + TESTS_PASSED=$(( TESTS_PASSED + 1 )) + echo ${green}BLOCK HASH MATCHES TX${reset} + echo + return + fi + fi + echo ${red}BLOCK HASH DOES NOT MATCH TX OR IS NULL${reset} + echo +} + +function API_getBlockTransactionCountByHash_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "POST hmy_getBlockTransactionCountByHash test:" + response_test ${RESPONSES[hmy_getBlockTransactionCountByHash]} + TRANSACTIONCOUNTBYHASH=$(echo ${RESPONSES[hmy_getBlockTransactionCountByHash]} | jq -r '.result') + TRANSACTIONCOUNTBYHASH=$(( TRANSACTIONCOUNTBYHASH )) + if [ "$TRANSACTIONCOUNTBYHASH" != "null" ]; then + if [ $TRANSACTIONCOUNTBYHASH -gt 0 ]; then + TESTS_PASSED=$(( TESTS_PASSED + 1 )) + echo ${green}NON ZERO TRANSACTION COUNT IN BLOCK${reset} + echo + return + fi + fi + echo ${red}INVALID TRANSACTION COUNT IN BLOCK${reset} + echo +} + +function API_getBlockTransactionCountByNumber_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "POST hmy_getBlockTransactionCountByNumber test:" + response_test ${RESPONSES[hmy_getBlockTransactionCountByNumber]} + TRANSACTIONCOUNTBYNUMBER=$(echo ${RESPONSES[hmy_getBlockTransactionCountByNumber]} | jq -r '.result') + TRANSACTIONCOUNTBYNUMBER=$(( TRANSACTIONCOUNTBYNUMBER )) + if [ "$BLOCKBYHASH" != "null" ]; then + if [ $TRANSACTIONCOUNTBYNUMBER -gt 0 ]; then + TESTS_PASSED=$(( TESTS_PASSED + 1 )) + echo ${green}NON ZERO TRANSACTION COUNT IN BLOCK${reset} + echo + return + fi + fi + echo ${red}NON NATURAL TRANSACTION COUNT IN BLOCK${reset} + echo +} + +function API_getCode_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "POST hmy_getCode test:" + response_test ${RESPONSES[hmy_getCode]} + [ "$?" == "1" ] && TESTS_PASSED=$(( TESTS_PASSED + 1 )) + echo +} + +function API_getTransactionByBlockHashAndIndex_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "POST hmy_getTransactionByBlockHashAndIndex test:" + response_test ${RESPONSES[hmy_getTransactionByBlockHashAndIndex]} + TRANSACTIONHASHBYHASHANDINDEX=$(echo ${RESPONSES[hmy_getTransactionByBlockHashAndIndex]} | jq -r '.result.hash') + if [ "$TRANSACTIONHASHBYHASHANDINDEX" != "null" ]; then + if [ "$TRANSACTIONHASHBYHASHANDINDEX" == "$TRANSACTION_HASH" ]; then + TESTS_PASSED=$(( TESTS_PASSED + 1 )) + echo ${green}TRANSACTION FROM BLOCKHASH AND INDEX MATCH${reset} + echo + return + fi + fi + echo ${red} TRANSACTION FROM BLOCKHASH AND INDEX MATCH${reset} + echo +} + +function API_getTransactionByBlockNumberAndIndex_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "POST hmy_getTransactionByBlockNumberAndIndex test:" + response_test ${RESPONSES[hmy_getTransactionByBlockNumberAndIndex]} + TRANSACTIONHASHBYNUMBERANDINDEX=$(echo ${RESPONSES[hmy_getTransactionByBlockNumberAndIndex]} | jq -r '.result.hash') + if [ "$TRANSACTIONHASHBYNUMBERANDINDEX" != "null" ]; then + if [ "$TRANSACTIONHASHBYNUMBERANDINDEX" == "$TRANSACTION_HASH" ]; then + TESTS_PASSED=$(( TESTS_PASSED + 1 )) + echo ${green}TRANSACTION FROM BLOCKNUMBER AND INDEX MATCH${reset} + echo + return + fi + fi + echo ${red} TRANSACTION FROM BLOCKNUMBER AND INDEX MISMATCH${reset} + echo +} + +function API_getTransactionByHash_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "POST hmy_getTransactionByHash test:" + TX_HASH=$(echo ${RESPONSES[hmy_getTransactionByHash]} | jq -r '.result.hash') + response_test ${RESPONSES[hmy_getTransactionByHash]} + if [ "$TX_HASH" != "null" ]; then + if [ "$TX_HASH" == "$TRANSACTION_HASH" ]; then + TESTS_PASSED=$(( TESTS_PASSED + 1 )) + echo ${green}TRANSACTION HASH MATCH${reset} + echo + return + fi + fi + echo ${red} TRANSACTION HASH MISMATCH${reset} + echo +} + +function API_getTransactionReceipt_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "POST hmy_getTransactionReceipt test:" + TX_HASH=$(echo ${RESPONSES[hmy_getTransactionReceipt]} | jq -r '.result.transactionHash') + response_test ${RESPONSES[hmy_getTransactionReceipt]} + if [ "$TX_HASH" != "null" ]; then + if [ "$TX_HASH" == "$TRANSACTION_HASH" ]; then + TESTS_PASSED=$(( TESTS_PASSED + 1 )) + echo ${green}TRANSACTION HASH MATCH${reset} + echo + return + fi + fi + echo ${red} TRANSACTION HASH MISMATCH${reset} + echo +} + +function API_syncing_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "POST hmy_syncing test:" + response_test ${RESPONSES[hmy_syncing]} + [ "$?" == "1" ] && TESTS_PASSED=$(( TESTS_PASSED + 1 )) + echo +} + +function API_netPeerCount_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "POST net_peerCount test:" + response_test ${RESPONSES[net_peerCount]} + [ "$?" == "1" ] && TESTS_PASSED=$(( TESTS_PASSED + 1 )) + echo +} + +function API_getBalance_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "POST hmy_getBalance test:" + response_test ${RESPONSES[hmy_getBalance]} + [ "$?" == "1" ] && TESTS_PASSED=$(( TESTS_PASSED + 1 )) + echo +} + +function API_getStorageAt_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "POST hmy_getStorageAt test:" + response_test ${RESPONSES[hmy_getStorageAt]} + [ "$?" == "1" ] && TESTS_PASSED=$(( TESTS_PASSED + 1 )) + echo +} + +function API_getTransactionCount_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "POST hmy_getTransactionCount test:" + response_test ${RESPONSES[hmy_getTransactionCount]} + [ "$?" == "1" ] && TESTS_PASSED=$(( TESTS_PASSED + 1 )) + echo +} + +function API_sendRawTransaction_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "POST hmy_sendRawTransaction test:" + response_test ${RESPONSES[hmy_sendRawTransaction]} + [ "$?" == "1" ] && TESTS_PASSED=$(( TESTS_PASSED + 1 )) + echo +} + +function API_getLogs_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "POST hmy_getLogs test:" + response_test ${RESPONSES[hmy_getLogs]} + [ "$?" == "1" ] && TESTS_PASSED=$(( TESTS_PASSED + 1 )) + echo +} + +function API_getFilterChanges_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "POST hmy_getFilterChanges test:" + response_test ${RESPONSES[hmy_getFilterChanges]} + [ "$?" == "1" ] && TESTS_PASSED=$(( TESTS_PASSED + 1 )) + echo +} + +function API_newPendingTransactionFilter_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "POST hmy_sendRawTransaction test:" + response_test ${RESPONSES[hmy_newPendingTransactionFilter]} + [ "$?" == "1" ] && TESTS_PASSED=$(( TESTS_PASSED + 1 )) + echo +} + +function API_newBlockFilter_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "POST hmy_newBlockFilter test:" + response_test ${RESPONSES[hmy_newBlockFilter]} + [ "$?" == "1" ] && TESTS_PASSED=$(( TESTS_PASSED + 1 )) + echo +} + +function API_newFilter_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "POST hmy_newFilter test:" + response_test ${RESPONSES[hmy_newFilter]} + [ "$?" == "1" ] && TESTS_PASSED=$(( TESTS_PASSED + 1 )) + echo +} + +function API_call_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "POST hmy_call test:" + response_test ${RESPONSES[hmy_call]} + [ "$?" == "1" ] && TESTS_PASSED=$(( TESTS_PASSED + 1 )) + echo +} + +function API_gasPrice_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "POST hmy_gasPrice test:" + response_test ${RESPONSES[hmy_gasPrice]} + if [ "$?" == "1" ]; then + RESULT=$(echo ${RESPONSES[hmy_gasPrice]} | jq -r '.result') + isHexTest $RESULT + [ "$?" == "1" ] && TESTS_PASSED=$(( TESTS_PASSED + 1 )) + fi +} + +function API_blockNumber_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "POST hmy_blockNumber test:" + response_test ${RESPONSES[hmy_blockNumber]} + if [ "$?" == "1" ]; then + RESULT=$(echo ${RESPONSES[hmy_blockNumber]} | jq -r '.result') + isHexTest $RESULT + [ "$?" == "1" ] && TESTS_PASSED=$(( TESTS_PASSED + 1 )) + fi +} + +function API_net_version_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "POST net_version test:" + response_test ${RESPONSES[net_version]} + [ "$?" == "1" ] && TESTS_PASSED=$(( TESTS_PASSED + 1 )) + echo +} + +function API_protocolVersion_test() { + TESTS_RAN=$(( TESTS_RAN + 1 )) + echo "POST hmy_protocolVersion test:" + response_test ${RESPONSES[hmy_protocolVersion]} + [ "$?" == "1" ] && TESTS_PASSED=$(( TESTS_PASSED + 1 )) + echo +} + +function run_tests() { + echo "### TESTING RPC CALLS ###" + echo + ### Calls to the individual API method test ### + Explorer_getBlock_test + Explorer_getTx_test + Explorer_getExplorerNodeAdress_test + Explorer_getExplorerNode_test + Explorer_getShard_test + Explorer_getCommitte_test + API_getBlockByNumber_test + API_getBlockByHash_test + API_getBlockTransactionCountByHash_test + API_getBlockTransactionCountByNumber_test + API_getCode_test + API_getTransactionByBlockHashAndIndex_test + API_getTransactionByBlockNumberAndIndex_test + API_getTransactionByHash_test + API_getTransactionReceipt_test + API_syncing_test + API_netPeerCount_test + API_getBalance_test + API_getStorageAt_test + API_getTransactionCount_test + API_sendRawTransaction_test + API_getLogs_test + API_getFilterChanges_test + API_newPendingTransactionFilter_test + API_sendRawTransaction_test + API_newBlockFilter_test + API_newFilter_test + API_call_test + API_gasPrice_test + API_blockNumber_test + API_net_version_test + API_protocolVersion_test + + TESTS_FAILED=$(( $TESTS_RAN - $TESTS_PASSED )) + echo -n ${red} + [ $TESTS_FAILED -eq 0 ] && echo -n ${green} + echo "PASSED $TESTS_PASSED/$TESTS_RAN: $TESTS_FAILED TESTS FAILED"${reset} +} + + + +if [ "$VERBOSE" == "TRUE" ]; then + log_API_responses +fi +### BETANET TESTS ### + +run_tests