#!/bin/sh #------------------------------------------------------------------------------ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | www.openfoam.com # \\/ M anipulation | #------------------------------------------------------------------------------ # Copyright (C) 2020 OpenCFD Ltd. #------------------------------------------------------------------------------ # License # This file is part of OpenFOAM, distributed under GPL-3.0-or-later. # # Script # tutorials/AutoTest dir [.. dirN] # # Description # Run foamRunTutorials with specified tutorial directories # Creates/destroys a temporary directory for each test. # # Environment # Requires an initialized OpenFOAM environment. # # Note # Potentially useful for debian autopkgtest # #------------------------------------------------------------------------------ # Auto-detect from location #Unused# projectDir="$(\cd "$(dirname "${0%/*}")" && \pwd -L)" #------------------------------------------------------------------------------ printHelp() { cat<&2 echo echo "Error encountered:" while [ "$#" -ge 1 ]; do echo " $1"; shift; done echo echo "See '${0##*/} -help' for usage" echo exit 1 } #------------------------------------------------------------------------------ unset optDebian optVerbose optRunLimit=1 # Parse options while [ "$#" -gt 0 ] do case "$1" in -h*) printHelp ;; -1) optRunLimit="${1#-}" ;; -full) unset optRunLimit ;; -debian) # Redirect stderr to stdout, if autopkgtest (tests/control) # does NOT use "Restrictions: allow-stderr" exec 2>&1 ;; --) break ;; -*) die "unknown option $1" ;; *) break ;; esac shift done #------------------------------------------------------------------------------ # Basic sanity checks [ -n "$FOAM_TUTORIALS" ] || export FOAM_TUTORIALS="$WM_PROJECT_DIR"/tutorials [ -d "${WM_PROJECT_DIR:?}" ] || die "No OpenFOAM environment: $WM_PROJECT_DIR" [ -d "$FOAM_TUTORIALS" ] || die "No OpenFOAM tutorials : $FOAM_TUTORIALS" #------------------------------------------------------------------------------ # # Modify case controlDicts to run only one time step # modifyCaseControlDict() { for dict in $(find . -name "controlDict*" -type f) do cp -f "${dict}" "${dict}.orig" sed \ -e 's/\(startFrom[ \t]*\)\([A-Za-z]*\);/\1 latestTime;/' \ -e 's/\(stopAt[ \t]*\)\([A-Za-z]*\);/\1 nextWrite;/' \ -e 's/\(writeControl[ \t]*\)\([A-Za-z]*\);/\1 timeStep;/' \ -e 's/\(writeInterval[ \t]*\)\([-.0-9A-Za-z]*\);/\1 '"$optRunLimit"';/' \ "${dict}.orig" > "${dict}" done } #------------------------------------------------------------------------------ nTests="$#" nPassed=0 for testdir in "$@" do testdir="${testdir#tutorials/}" testdir="$(echo "$testdir" | sed -e 's@^//*@@; s@//*$@@;')" suffix="$(echo "$testdir" | sed -e 's@//*@_@g')" if [ -n "$testdir" ] && [ -d "$FOAM_TUTORIALS/$testdir" ] then ( echo "Run test: $testdir" set -e TESTDIR="$(mktemp --directory --suffix=".$suffix")" trap 'rm -rf $TESTDIR' 0 INT QUIT ABRT PIPE TERM cp -r "$FOAM_TUTORIALS/$testdir"/* "$TESTDIR"/ cd "$TESTDIR" if [ -n "$optRunLimit" ] then set +e modifyCaseControlDict set -e fi nInput="$(ls | wc -l)" foamRunTutorials nOutput="$(ls | wc -l)" if [ "$nInput" = 0 ] then echo "No input for $testdir" 1>&2 exit 1 elif [ "$nOutput" = "$nInput" ] then echo "Run failure for $testdir" 1>&2 exit 1 else echo "run: OK" fi ) && nPassed=$((nPassed + 1)) else echo "No tutorial: $testdir" 1>&2 fi done if [ "$nTests" = 0 ] then die "No tests specified" elif [ "$nPassed" = "$nTests" ] then echo "Passed all $nTests tests" else echo "Passed $nPassed/$nTests tests" 1>&2 exit 1 fi #------------------------------------------------------------------------------