#!/bin/bash #set -eu shopt -s nullglob trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT # assuming that we'll be using native provide && all processes will be executing locally # (we need absolute paths here, because they're used when scripts are called by zombienet from tmp folders) export POLKADOT_SDK_FOLDER=`realpath $(dirname "$0")/../..` export BRIDGE_TESTS_FOLDER=$POLKADOT_SDK_FOLDER/bridges/zombienet/tests export POLKADOT_BINARY_PATH=$POLKADOT_SDK_FOLDER/target/release/polkadot export POLKADOT_PARACHAIN_BINARY_PATH=$POLKADOT_SDK_FOLDER/target/release/polkadot-parachain export POLKADOT_PARACHAIN_BINARY_PATH_FOR_ASSET_HUB_ROCOCO=$POLKADOT_PARACHAIN_BINARY_PATH export POLKADOT_PARACHAIN_BINARY_PATH_FOR_ASSET_HUB_WESTEND=$POLKADOT_PARACHAIN_BINARY_PATH export ZOMBIENET_BINARY_PATH=~/local_bridge_testing/bin/zombienet-linux # bridge configuration export LANE_ID="00000001" # tests configuration ALL_TESTS_FOLDER=`mktemp -d` function start_coproc() { local command=$1 local name=$2 local coproc_log=`mktemp -p $TEST_FOLDER` coproc COPROC { $command >$coproc_log 2>&1 } TEST_COPROCS[$COPROC_PID, 0]=$name TEST_COPROCS[$COPROC_PID, 1]=$coproc_log echo "Spawned $name coprocess. StdOut + StdErr: $coproc_log" return $COPROC_PID } # execute every test from tests folder TEST_INDEX=1 while true do declare -A TEST_COPROCS TEST_COPROCS_COUNT=0 TEST_PREFIX=$(printf "%04d" $TEST_INDEX) # it'll be used by the `sync-exit.sh` script export TEST_FOLDER=`mktemp -d -p $ALL_TESTS_FOLDER` # check if there are no more tests zndsl_files=($BRIDGE_TESTS_FOLDER/$TEST_PREFIX-*.zndsl) if [ ${#zndsl_files[@]} -eq 0 ]; then break fi # start relay if [ -f $BRIDGE_TESTS_FOLDER/$TEST_PREFIX-start-relay.sh ]; then start_coproc "${BRIDGE_TESTS_FOLDER}/${TEST_PREFIX}-start-relay.sh" "relay" RELAY_COPROC=$COPROC_PID ((TEST_COPROCS_COUNT++)) fi # start tests for zndsl_file in "${zndsl_files[@]}"; do start_coproc "$ZOMBIENET_BINARY_PATH --provider native test $zndsl_file" "$zndsl_file" echo -n "1">>$TEST_FOLDER/exit-sync ((TEST_COPROCS_COUNT++)) done # wait until all tests are completed relay_exited=0 for n in `seq 1 $TEST_COPROCS_COUNT`; do wait -n -p COPROC_PID exit_code=$? coproc_name=${TEST_COPROCS[$COPROC_PID, 0]} coproc_log=${TEST_COPROCS[$COPROC_PID, 1]} coproc_stdout=$(cat $coproc_log) relay_exited=$(expr "${coproc_name}" == "relay") echo "Process $coproc_name has finished with exit code: $exit_code" # if exit code is not zero, exit if [ $exit_code -ne 0 ]; then echo "=====================================================================" echo "=== Shutting down. Log of failed process below ===" echo "=====================================================================" echo $coproc_stdout exit 1 fi # if last test has exited, exit relay too if [ $n -eq $(($TEST_COPROCS_COUNT - 1)) ] && [ $relay_exited -eq 0 ]; then kill $RELAY_COPROC break fi done ((TEST_INDEX++)) done echo "=====================================================================" echo "=== All tests have completed successfully ===" echo "====================================================================="