diff --git a/src/bin_client/test/test_mempool.sh b/src/bin_client/test/test_mempool.sh new file mode 100755 index 000000000..b4225db2e --- /dev/null +++ b/src/bin_client/test/test_mempool.sh @@ -0,0 +1,170 @@ +#! /usr/bin/env bash + +set -e + +#test_dir="$(cd "$(dirname "$0")" && echo "$(pwd -P)")" +source src/bin_client/test/test_lib.inc.sh "$@" + +empty_mempool='{ "applied": [], "refused": [], "branch_refused": [], "branch_delayed": [], + "unprocessed": [] }' + +rpc_not_found='Unregistred error: + { "kind": "generic", + "error": "Prevalidator is not running, cannot inject the operation" } +Fatal error: transfer simulation failed.' + +prev_not_running='[]' + +assert_mempool_not_empty() { + local expected=$empty_mempool + local result="$(cat)" + if [ "${result}" = "${expected}" ]; then + echo "Unexpected result: \"${result}\"" + echo "Should be different than: \"${expected}\"" + exit 2 + fi +} + +assert_mempool_empty() { + local expected=$empty_mempool + local result="$(cat)" + if [ "${result}" != "${expected}" ]; then + echo "Unexpected result: \"${result}\"" + echo "Expected: \"${expected}\"" + exit 2 + fi +} + +assert_rpc_not_exist() { + local expected=$rpc_not_found + local result="$(cat)" + if [ "${result}" != "${expected}" ]; then + echo "Unexpected result: \"${result}\"" + echo "Expected: \"${expected}\"" + exit 2 + fi +} + +assert_rpc_exists() { + local expected=$rpc_not_found + local result="$(cat)" + if [ "${result}" = "${expected}" ]; then + echo "Unexpected result: \"${result}\"" + echo "Should be different than: \"${expected}\"" + exit 2 + fi +} + +assert_prev_not_running() { + local expected=$prev_not_running + local result="$(cat)" + if [ "${result}" != "${expected}" ]; then + echo "Unexpected result: \"${result}\"" + echo "Expected: \"${expected}\"" + exit 2 + fi +} + +assert_prev_running() { + local expected=$prev_not_running + local result="$(cat)" + if [ "${result}" = "${expected}" ]; then + echo "Unexpected result: \"${result}\"" + echo "Should be different than: \"${expected}\"" + exit 2 + fi +} + +echo +echo Starting 1st node +echo + +start_node 1 + +echo +echo Starting 2nd node +echo + +start_node 3 + +echo +echo Starting 3rd node +echo + +start_node 9 --disable-mempool + +echo +echo Activating Alpha protocol +echo + +activate_alpha + +sleep 1 + +echo +$client3 rpc call '/network/peers' with '{}' +echo + +#tests for the prevalidator state +$client1 rpc call '/workers/prevalidators' | assert_prev_running +echo 1st node prevalidator is running +$client3 rpc call '/workers/prevalidators' | assert_prev_running +echo 2nd node prevalidator is running +$client9 rpc call '/workers/prevalidators' | assert_prev_not_running +echo 3dr node prevalidator is not running + +#checks that mempools are empty +$client1 rpc call '/mempool/pending_operations' | assert_mempool_empty +echo 1st node mempool is empty + +$client3 rpc call '/mempool/pending_operations' | assert_mempool_empty +echo 2nd node mempool is empty + +$client9 rpc call '/mempool/pending_operations' | assert_mempool_empty +echo 3rd node mempool is empty + +#inject a transaction through the 1st node +$client1 transfer 1,000 from bootstrap1 to bootstrap2 & + +sleep 3 + +#checks that mempools are not empty for enable-mempool nodes and +#empty for the disable-mempool node +$client1 rpc call '/mempool/pending_operations' | assert_mempool_not_empty +echo 1st node mempool is not empty + +$client3 rpc call '/mempool/pending_operations' | assert_mempool_not_empty +echo 2nd node mempool is not empty + +$client9 rpc call '/mempool/pending_operations' | assert_mempool_empty +echo 3rd node mempool is empty + +$client1 bake for bootstrap1 + +sleep 1 + +#checks that all mempool are empty after baking a block which contains the +#transaction +$client1 rpc call '/mempool/pending_operations' | assert_mempool_empty +echo 1st node mempool is empty + +$client3 rpc call '/mempool/pending_operations' | assert_mempool_empty +echo 2nd node mempool is empty + +$client9 rpc call '/mempool/pending_operations' | assert_mempool_empty +echo 3rd node mempool is empty + +#checks that trying to inject an operation through a disable-mempool node fails +{ + $client9 transfer 2,000 from bootstrap2 to bootstrap3 2> /dev/null && + if [ $? = 0 ]; then + echo "This should have failed... exit code:" $? + exit 2 + fi +} || + +echo +echo End of test +echo + +show_logs="no"