Files
EPANET/tools/before-test.sh
2019-03-07 08:40:37 -05:00

106 lines
2.7 KiB
Bash
Executable File

#! /bin/bash
#
# before-test.sh - Prepares Travis CI worker to run epanet regression tests
#
# Date Created: 04/04/2018
#
# Author: Michael E. Tryby
# US EPA - ORD/NRMRL
#
# Arguments:
# 1 - (platform)
# 2 - (build id for reference)
# 3 - (build id for software under test)
# 4 - (version id for software under test)
# 5 - (relative path regression test file staging location)
#
# Note:
# Tests and benchmark files are stored in the epanet-example-networks repo.
# This script retreives them using a stable URL associated with a release on
# GitHub and stages the files for nrtest to run. The script assumes that
# before-test.sh and gen-config.sh are located together in the same folder.
if [ -z $1 ]; then
unset PLATFORM;
else
PLATFORM=$1;
fi
if [ -z $2 ]; then
echo "ERROR: REF_BUILD_ID must be defined"; exit 1;
else
REF_BUILD_ID=$2;
fi
if [ -z $3 ]; then
SUT_BUILD_ID="local";
else
SUT_BUILD_ID=$3;
fi
if [ -z $4 ]; then
SUT_VERSION="unknown";
else
SUT_VERSION=$4; fi
if [ -z $5 ]; then
TEST_HOME="nrtestsuite";
else
TEST_HOME=$5; fi
echo INFO: Staging files for regression testing
SCRIPT_HOME="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
BUILD_HOME="$(dirname "$SCRIPT_HOME")"
SUT_PATH=(`find $BUILD_HOME -name "bin" -type d`)
# TODO: determine platform
# determine latest tag from GitHub API
LATEST_URL="https://api.github.com/repos/openwateranalytics/epanet-example-networks/releases/latest"
LATEST_TAG=(`curl ${LATEST_URL} | jq -r .tag_name`)
if [ ${LATEST_TAG} == 'null' ]; then
echo "ERROR: curl | jq - ${LATEST_URL}"
exit 1
fi
TEST_URL="https://github.com/OpenWaterAnalytics/epanet-example-networks/archive/${LATEST_TAG}.tar.gz"
BENCH_URL="https://github.com/OpenWaterAnalytics/epanet-example-networks/releases/download/${LATEST_TAG}/benchmark-${PLATFORM}-${REF_BUILD_ID}.tar.gz"
# create a clean directory for staging regression tests
if [ -d ${TEST_HOME} ]; then
rm -rf ${TEST_HOME}
fi
mkdir ${TEST_HOME}
cd ${TEST_HOME}
# retrieve epanet-examples for regression testing
if ! curl -fsSL -o examples.tar.gz ${TEST_URL}; then
echo "ERROR: curl - ${TEST_URL}"
fi
# retrieve epanet benchmark results
if ! curl -fsSL -o benchmark.tar.gz ${BENCH_URL}; then
echo "ERROR: curl - ${BENCH_URL}"
fi
# extract tests, benchmarks, and manifest
tar xzf examples.tar.gz
ln -s epanet-example-networks-${LATEST_TAG:1}/epanet-tests tests
mkdir benchmark
tar xzf benchmark.tar.gz -C benchmark
tar xzf benchmark.tar.gz --wildcards --no-anchored --strip-components=1 '*/manifest.json' -C .
# generate json configuration file for software under test
mkdir apps
${SCRIPT_HOME}/gen-config.sh ${SUT_PATH} ${PLATFORM} ${SUT_BUILD_ID} ${SUT_VERSION} > apps/epanet-${SUT_BUILD_ID}.json