#! /bin/bash


export TMHOME=$HOME/.tendermint_persist

rm -rf $TMHOME
tendermint init

function start_procs(){
    name=$1
    echo "Starting persistent kvstore and tendermint"
    abci-cli kvstore --persist $TMHOME/kvstore &> "kvstore_${name}.log" &
    PID_DUMMY=$!
    tendermint node &> tendermint_${name}.log &
    PID_TENDERMINT=$!
    sleep 5
}

function kill_procs(){
    kill -9 $PID_DUMMY $PID_TENDERMINT
}


function send_txs(){
    # send a bunch of txs over a few blocks
    echo "Sending txs"
    for i in `seq 1 5`; do
        for j in `seq 1 100`; do
            tx=`head -c 8 /dev/urandom | hexdump -ve '1/1 "%.2X"'`
            curl -s 127.0.0.1:26657/broadcast_tx_async?tx=0x$tx &> /dev/null
        done
        sleep 1
    done
}


start_procs 1
send_txs
kill_procs

start_procs 2

# wait for node to handshake and make a new block
addr="localhost:26657"
curl -s $addr/status > /dev/null
ERR=$?
i=0
while [ "$ERR" != 0 ]; do
    sleep 1
    curl -s $addr/status > /dev/null
    ERR=$?
    i=$(($i + 1))
    if [[ $i == 10 ]]; then
        echo "Timed out waiting for tendermint to start"
        exit 1
    fi
done

# wait for a new block
h1=`curl -s $addr/status | jq .result.sync_info.latest_block_height`
h2=$h1
while [ "$h2" == "$h1" ]; do
    sleep 1
    h2=`curl -s $addr/status | jq .result.sync_info.latest_block_height`
done

kill_procs
sleep 2

echo "Passed Test: Persistence"
