#! /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
|
|
# hack to determine latest tag from GitHub
|
LATEST_URL="https://github.com/OpenWaterAnalytics/epanet-example-networks/releases/latest"
|
LATEST_TAG="$(curl -sI "${LATEST_URL}" | grep -Po 'tag\/\K(v\S+)')"
|
|
TEST_URL="https://codeload.github.com/OpenWaterAnalytics/epanet-example-networks/tar.gz/${LATEST_TAG}"
|
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
|
# create a clean directory for staging regression tests
|
if [ -d "${TEST_HOME}" ]; then
|
rm -rf "${TEST_HOME}"
|
fi
|
mkdir "${TEST_HOME}"
|
cd "${TEST_HOME}" || exit 1
|
|
|
# retrieve epanet-examples for regression testing
|
if ! curl -fsSL -o examples.tar.gz "${TEST_URL}"; then
|
echo "ERROR: curl - ${TEST_URL}" & exit 2
|
fi
|
|
# retrieve epanet benchmark results
|
if ! curl -fsSL -o benchmark.tar.gz "${BENCH_URL}"; then
|
echo "ERROR: curl - ${BENCH_URL}" & exit 3
|
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
|