ligo/test/test_multinode.sh

104 lines
2.3 KiB
Bash
Raw Normal View History

2017-08-09 18:09:41 +04:00
#!/usr/bin/env bash
set -e
test_dir="$(cd "$(dirname "$0")" && echo "$(pwd -P)")"
source $test_dir/lib/test_lib.inc.sh
expected_connections=3
max_peer_id=8
for i in $(seq 1 $max_peer_id); do
echo
echo "## Starting node $i."
echo
start_node $i
echo
done
## waiting for the node to establich connections
sleep 2
for client in "${client_instances[@]}"; do
echo
echo "### $client network stat"
echo
$client network stat
echo
done
activate_alpha
sleep 5
2017-08-09 18:09:41 +04:00
assert_propagation_level() {
level=$1
printf "\n\nAsserting all nodes have reached level %s\n" "$level"
for client in "${client_instances[@]}"; do
( $client rpc call /blocks/head/proto/context/level \
| assert_in_output "\"level\": $level" ) \
|| exit 2
done
2017-08-09 18:09:41 +04:00
}
printf "\n\nAsserting protocol propagation\n"
for client in "${client_instances[@]}"; do
$client rpc call /blocks/head/protocol \
| assert_in_output "ProtoALphaALphaALphaALphaALphaALphaALphaALphaDdp3zK"
done
2017-08-09 18:09:41 +04:00
printf "\n\n"
retry() {
local timeout=$1
local attempts=$2
shift 2
sleep $timeout
while ! ( "$@" ) ; do
echo
echo "Will retry after $timeout seconds..."
echo
sleep $timeout
attempts=$(($attempts-1))
if [ "$attempts" -eq 0 ] ; then
echo
echo "Failed after too many retries" 1>&2
exit 1
fi
done
}
$client1 mine for bootstrap1
retry 2 15 assert_propagation_level 2
2017-08-09 18:09:41 +04:00
$client2 mine for bootstrap2
retry 2 15 assert_propagation_level 3
2017-08-09 18:09:41 +04:00
$client3 mine for bootstrap3
retry 2 15 assert_propagation_level 4
2017-08-09 18:09:41 +04:00
$client4 mine for bootstrap4
retry 2 15 assert_propagation_level 5
2017-08-09 18:09:41 +04:00
endorse_hash=$($client3 endorse for bootstrap3 | extract_operation_hash)
transfer_hash=$($client4 transfer 500 from bootstrap1 to bootstrap3 | extract_operation_hash)
2017-08-09 18:09:41 +04:00
retry 2 15 $client4 mine for bootstrap4
2017-08-09 18:09:41 +04:00
assert_contains_operation() {
hash="$1"
printf "Asserting operations list contains '$hash'\n"
for client in "${client_instances[@]}"; do
( $client rpc call /blocks/head/operations with {} \
| assert_in_output $hash ) \
|| exit 2
done
2017-08-09 18:09:41 +04:00
}
retry 2 15 assert_contains_operation $endorse_hash
2017-08-09 18:09:41 +04:00
assert_contains_operation $transfer_hash
echo
echo End of test
echo
show_logs="no"