#!/bin/bash # # This script builds tests, deploys them on one of the available test # servers and runs them. If deployment fails it will not return an error code. # If tests fail the script will return an error code. # It is done this way not to fail Travis build if one of the test servers is # down. # Test servers configuration TEST_SERVERS[0]="IP=195.138.84.66;User=pi;Type=solo" TEST_SERVERS[1]="IP=195.138.84.66;User=pi;Type=dual" # It will be populated in 'build' function FLASH_CMD= # Function doesn't accept any arguments. It builds the tests, # packages the binaries into the archive and populates FLASH_CMD variable. function build { echo "Building tests" make -C ./tests clean make -C ./tests -j8 FLASH_CMD=$(make -s -C ./tests print_flash_cmd) # Now we need to pack all files that are included in the flash cmd # so they can be transferred to the remote server and run there # Also we need to prepare flash command: # - remove firmware files path # - remove serial port parameter mkdir -p /tmp/firmware rm -rf /tmp/firmware/* params=($FLASH_CMD) pushd ./tests for param in "${params[@]}" do if [ -f ${param} ] then file_name=${param##*/} cp ${param} /tmp/firmware/ FLASH_CMD=${FLASH_CMD/${param}/${file_name}} fi # Removing port parameter from the cmd string if [[ "$param" == "-p" || "$param" == "--port" ]] then FLASH_CMD=${FLASH_CMD/${param}/} next_port=true else # Removing port value from the cmd string if [ "$next_port" ] then FLASH_CMD=${FLASH_CMD/${param} /} unset next_port fi fi done cp test_runner.py /tmp/firmware/ tar -czf /tmp/tests.tar.gz -C /tmp/firmware . popd } # $1 - Server IP # $2 - Login user name function deploy { echo "Deploying tests, server IP=${1}" scp /tmp/tests.tar.gz ${2}@${1}:/tmp/tests.tar.gz ssh ${2}@${1} mkdir -p /tmp/eor_test ssh ${2}@${1} rm -rf /tmp/eor_test/* ssh ${2}@${1} tar -xzf /tmp/tests.tar.gz -C /tmp/eor_test } # $1 - Server IP # $2 - Login user name # $3 - Type "solo" or "dual" function run_tests { echo "Running tests, server IP=${1}, type=${3}" echo "Flash cmd: ${FLASH_CMD}" # Run test runner on the remote server ssh ${2}@${1} "source ~/.profile; /tmp/eor_test/test_runner.py --type ${3} -f -c \"${FLASH_CMD}\"" } # First step is to build a firmware build failed=0 for server in "${TEST_SERVERS[@]}" do params=(${server//;/ }) ip=${params[0]#IP=} user=${params[1]#User=} type=${params[2]#Type=} deploy ${ip} ${user} if [ "$?" -eq "0" ] then run_tests ${ip} ${user} ${type} if [ "$?" -ne "0" ] then failed=$((failed+1)) fi else echo "Server ${ip} is not available" fi done exit $failed