diff --git a/.gitignore b/.gitignore index c4d0f06dc1264b66780e2091644783b3f1d5af15..5c45268686b2e1c0841af0a95d36fc05b4a4e745 100644 --- a/.gitignore +++ b/.gitignore @@ -6,5 +6,9 @@ /mnh_expand/** !/mnh_expand/.gitkeep +# Ignore the content of testprogs_data but not the directory itself +/testprogs_data/** +!/testprogs_data/.gitkeep + # Ignore vim swapp files .*.swp diff --git a/INSTALL_testprogs b/INSTALL_testprogs new file mode 100644 index 0000000000000000000000000000000000000000..bbeb43f462ab8a910d9ae24de76b918840768c84 --- /dev/null +++ b/INSTALL_testprogs @@ -0,0 +1,8 @@ +Testprogs data on sxphynh + +cd testprogs_data +mkdir ice_adjust +cd ice_adjust +git clone git@github.com:pmarguinaud/ice_adjust.git +mv ice_adjust/data/* . +rm -rf ice_adjust/ diff --git a/check_commit_ial.sh b/check_commit_ial.sh index 52d8b0b9cc9a96ad7a1ea4aa858886a7d41d28bd..193dd313e2a2880f6ae3cc440f9971661c8a70a6 100755 --- a/check_commit_ial.sh +++ b/check_commit_ial.sh @@ -65,7 +65,7 @@ function usage { echo echo "With the special reference REF commit, a suitable reference is guessed" echo - echo "If no test is aked for, the default on ($defaultTest) is executed" + echo "If no test is aked for, the default one ($defaultTest) is executed" echo echo "The directory (for commit only, not ref) can take the form server:directory" echo diff --git a/check_commit_testprogs.sh b/check_commit_testprogs.sh new file mode 100755 index 0000000000000000000000000000000000000000..ec7c0c10015d0c34b913dde1e782adef91aa07f9 --- /dev/null +++ b/check_commit_testprogs.sh @@ -0,0 +1,254 @@ +#!/bin/bash + +set -x +set -e + +#This script: +# - compiles the PHYEX package using a specific commit +# - runs the different test progs and checks if results are identical to a given version + +#ice_adjust: the ice adjust test case + +specialName="ref" +availTests="ice_adjust" +defaultTest='ALL' +separator='_' #- seprator must be in sync with prep_code.sh separator + +PHYEXTOOLSDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +dirdata=$PHYEXTOOLSDIR/testprogs_data +if [ $(hostname | cut -c 1-7) == 'belenos' -o $(hostname | cut -c 1-7) == 'taranis' ]; then + HPC=1 + archfile=MIMPIIFC1805.EPONA +else + HPC=0 + archfile=gnu +fi +defaultRef=ref + +function usage { + echo "Usage: $0 [-h] [-c] [-r] [-C] [-s] [-f] [--noexpand] [-t test] commit reference" + echo "commit commit hash (or a directory, or among $specialName) to test" + echo "reference commit hash (or a directory, or among $specialName) REF to use as a reference" + echo "-s suppress compilation pack" + echo "-c performs compilation" + echo "-r runs the tests" + echo "-C checks the result against the reference" + echo "-t comma separated list of tests to execute" + echo " or ALL to execute all tests" + echo "--noexpand do not use mnh_expand (code will be in array-syntax)" + echo "" + echo "If nothing is asked (compilation, running, check) everything is done" + echo + echo "With the special reference REF commit, a suitable reference is guessed" + echo + echo "If no test is aked for, the default one ($defaultTest) is executed" + echo + echo "The directory (for commit only, not ref) can take the form server:directory" + echo + echo "If using a directory (for commit or reference) it must contain at least one '/'" +} + +compilation=0 +run=0 +check=0 +commit="" +reference="" +tests="" +suppress=0 +useexpand=1 + +while [ -n "$1" ]; do + case "$1" in + '-h') usage;; + '-s') suppress=1;; + '-c') compilation=1;; + '-r') run=$(($run+1));; + '-C') check=1;; + '-t') tests="$2"; shift;; + '--noexpand') useexpand=0;; + #--) shift; break ;; + *) if [ -z "${commit-}" ]; then + commit=$1 + else + if [ -z "${reference-}" ]; then + reference=$1 + else + echo "Only two commit hash allowed on command line" + exit 1 + fi + fi;; + esac + shift +done + +TESTDIR=${TESTDIR:=$HOME/TESTPROGS} + +function exescript () { + #usage: exescript <output file> <script> [arg [arg ...]] + output=$1 + shift + if [ $HPC -eq 1 ]; then + sbatch --wait -o $output $@ + cat $output + else + $@ 2>&1 | tee $output + fi +} + +if [ -z "${tests-}" ]; then + tests=$defaultTest +fi +if [ $tests == 'ALL' ]; then + tests=$availTests +fi + +if [ $compilation -eq 0 -a \ + $run -eq 0 -a \ + $check -eq 0 ]; then + compilation=1 + run=1 + check=1 +fi + +if [ -z "${commit-}" ]; then + echo "At least one commit hash must be provided on command line" + exit 2 +fi + +if [ $check -eq 1 -a -z "${reference-}" ]; then + echo "To perform a comparison two commit hashes are mandatory on the command line" + exit 3 +fi + +#Name is choosen such as it can be produced with a main pack: PHYEX/48t1_XXXXXXXXX.01.${gmkpack_l}.${gmkpack_o} +fromdir='' +if echo $commit | grep '/' > /dev/null; then + fromdir=$commit + name=$(echo $commit | sed 's/\//'${separator}'/g' | sed 's/:/'${separator}'/g' | sed 's/\./'${separator}'/g') + [ $suppress -eq 1 -a -d $TESTDIR/$name ] && rm -rf $TESTDIR/$name +elif echo $specialName | grep -w $commit > /dev/null; then + name="$commit" +else + name="COMMIT$commit" + [ $suppress -eq 1 -a -d $TESTDIR/$name ] && rm -rf $TESTDIR/$name +fi +if [ ! -z "${reference-}" ]; then + [ $reference == 'REF' ] && reference=$defaultRef + reffromdir='' + if echo $reference | grep '/' > /dev/null; then + reffromdir=$reference + refname=$(echo $reference | sed 's/\//'${separator}'/g' | sed 's/:/'${separator}'/g' | sed 's/\./'${separator}'/g') + elif echo $specialName | grep -w $reference > /dev/null; then + refname="$reference" + else + refname="COMMIT${reference}" + fi +fi + +if [ $compilation -eq 1 ]; then + echo "### Compilation of commit $commit" + + if echo $specialName | grep -w $commit > /dev/null; then + echo "Special commit '$commit' cannot be compiled with this script" + exit 4 + fi + + if [ -d $TESTDIR/$name ]; then + echo "Pack already exists ($TESTDIR/$name), suppress it to be able to compile it again (or use the -s option to automatically suppress it)" + exit 5 + fi + mkdir $TESTDIR/$name + cd $TESTDIR/$name/ + + MNH_EXPAND_DIR=$PHYEXTOOLSDIR/mnh_expand + export PATH=$MNH_EXPAND_DIR/filepp:$MNH_EXPAND_DIR/MNH_Expand_Array:$PATH + + if [ $useexpand == 1 ]; then + expand_options="-D MNH_EXPAND -D MNH_EXPAND_LOOP" + else + expand_options="" + fi + subs="$subs -s turb -s micro -s aux -s ice_adjust" + prep_code=$PHYEXTOOLSDIR/prep_code.sh + if [ "$fromdir" == '' ]; then + echo "Clone repository, and checkout commit $commit (using prep_code.sh)" + $prep_code -c $commit $expand_options $subs src + else + echo "Copy $fromdir" + scp -q -r $fromdir src + $prep_code $expand_options $subs src + fi + + cd $TESTDIR/$name/src/build/with_fcm/ + rm -rf arch_* + ./make_fcm.sh --arch $archfile 2>&1 | tee Output_compilation +fi + +if [ $run -ge 1 ]; then + echo "### Running of commit $commit" + + for t in $(echo $tests | sed 's/,/ /g'); do + if [ ! -f $TESTDIR/$name/src/build/with_fcm/arch_${archfile}/build/bin/main_${t}.exe ]; then + echo "Pack does not exist ($TESTDIR/$name) or compilation has failed, please check" + exit 6 + fi + done + + #Cleaning to suppress old results that may be confusing in case of a crash during the run + for t in $(echo $tests | sed 's/,/ /g'); do + cd $TESTDIR/$name + if [ -d tests/$t ]; then + rm -rf tests/$t + fi + done + + #Run the tests one after the other + for t in $(echo $tests | sed 's/,/ /g'); do + cd $TESTDIR/$name + mkdir -p tests/$t + cd tests/$t + ln -s $dirdata/$t data + $TESTDIR/$name/src/build/with_fcm/arch_${archfile}/build/bin/main_${t}.exe --check 2>&1 > Output_run + done +fi + +if [ $check -eq 1 ]; then + echo "### Check commit $commit against commit $reference" + + alltests=0 + message="" + for t in $(echo $tests | sed 's/,/ /g'); do + file1=$TESTDIR/$name/tests/$t/Output_run + file2=$TESTDIR/$refname/tests/$t/Output_run + mess="" + te=0 + if [ ! -f "$file1" ]; then + mess="Result ($file1) for commit $commit does not exist, please run the simulation" + te=1 + fi + if [ ! -f "$file2" ]; then + mess2="Result ($file2) for commit $reference does not exist, please run the simulation" + te=1 + if [ "$mess" = "" ]; then + mess=$mess2 + else + mess="$mess and $mess2" + fi + fi + if [ $te -eq 0 ]; then + set +e + mess=$(cmp $file1 $file2 246 246 2>&1) + te=$? + set -e + fi + [ $te -ne 0 ] && message="$message $mess \n" + alltests=$(($alltests+$te)) + done + if [ $alltests -eq 0 ]; then + echo "SUCCESS, files are identical" + else + echo "*************** Files are different *******************" + echo -e "$message" + fi +fi