#! /bin/bash
|
|
|
|
###################################################################
|
|
# wait for all peers to come online
|
|
# for each peer:
|
|
# wait to have 3 peers
|
|
# wait to be at height > 1
|
|
# send a tx, wait for commit
|
|
# assert app hash on every peer reflects the post tx state
|
|
###################################################################
|
|
|
|
N=4
|
|
|
|
# wait for everyone to come online
|
|
echo "Waiting for nodes to come online"
|
|
for i in `seq 1 $N`; do
|
|
addr=$(test/p2p/ip.sh $i):46657
|
|
curl -s $addr/status > /dev/null
|
|
ERR=$?
|
|
while [ "$ERR" != 0 ]; do
|
|
sleep 1
|
|
curl -s $addr/status > /dev/null
|
|
ERR=$?
|
|
done
|
|
echo "... node $i is up"
|
|
done
|
|
|
|
echo ""
|
|
# run the test on each of them
|
|
for i in `seq 1 $N`; do
|
|
addr=$(test/p2p/ip.sh $i):46657
|
|
|
|
# - assert everyone has 3 other peers
|
|
N_PEERS=`curl -s $addr/net_info | jq '.result[1].peers | length'`
|
|
while [ "$N_PEERS" != 3 ]; do
|
|
echo "Waiting for node $i to connect to all peers ..."
|
|
sleep 1
|
|
N_PEERS=`curl -s $addr/net_info | jq '.result[1].peers | length'`
|
|
done
|
|
|
|
# - assert block height is greater than 1
|
|
BLOCK_HEIGHT=`curl -s $addr/status | jq .result[1].latest_block_height`
|
|
while [ "$BLOCK_HEIGHT" -le 1 ]; do
|
|
echo "Waiting for node $i to commit a block ..."
|
|
sleep 1
|
|
BLOCK_HEIGHT=`curl -s $addr/status | jq .result[1].latest_block_height`
|
|
done
|
|
echo "Node $i is connected to all peers and at block $BLOCK_HEIGHT"
|
|
|
|
# current state
|
|
HASH1=`curl -s $addr/status | jq .result[1].latest_app_hash`
|
|
|
|
# - send a tx
|
|
TX=\"aadeadbeefbeefbeef0$i\"
|
|
echo "Broadcast Tx $TX"
|
|
curl -s $addr/broadcast_tx_commit?tx=$TX
|
|
echo ""
|
|
|
|
# we need to wait another block to get the new app_hash
|
|
h1=`curl -s $addr/status | jq .result[1].latest_block_height`
|
|
h2=$h1
|
|
while [ "$h2" == "$h1" ]; do
|
|
sleep 1
|
|
h2=`curl -s $addr/status | jq .result[1].latest_block_height`
|
|
done
|
|
|
|
# check that hash was updated
|
|
HASH2=`curl -s $addr/status | jq .result[1].latest_app_hash`
|
|
if [[ "$HASH1" == "$HASH2" ]]; then
|
|
echo "Expected state hash to update from $HASH1. Got $HASH2"
|
|
exit 1
|
|
fi
|
|
|
|
# check we get the same new hash on all other nodes
|
|
for j in `seq 1 $N`; do
|
|
if [[ "$i" != "$j" ]]; then
|
|
addrJ=$(test/p2p/ip.sh $j):46657
|
|
HASH3=`curl -s $addrJ/status | jq .result[1].latest_app_hash`
|
|
|
|
if [[ "$HASH2" != "$HASH3" ]]; then
|
|
echo "App hash for node $j doesn't match. Got $HASH3, expected $HASH2"
|
|
exit 1
|
|
fi
|
|
fi
|
|
done
|
|
|
|
echo "All nodes are up to date"
|
|
done
|
|
|
|
echo ""
|
|
echo "PASS"
|
|
echo ""
|