Skip to content

Commit c859e42

Browse files
committed
fixed: use a separate valgrind log for tests with IFEM_USE_MEMCHECK
to allow parallel execution
1 parent 9193bef commit c859e42

File tree

2 files changed

+65
-37
lines changed

2 files changed

+65
-37
lines changed

Apps/Common/scripts/regtest.sh.in

Lines changed: 53 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,12 @@
44
# It is used by the 'make test' target in the buildsystems
55
# Usually you should use 'make test' rather than calling this script directly
66
#
7-
# Parameters: $1 = Application binary
8-
# $2 = Regression test file
9-
# $3 = If given, number of MPI nodes
7+
# Parameters: -a = Application binary
8+
# -r = Regression test file
9+
# Optional parameters:
10+
# -v = Valgrind binary
11+
# -m = Number of MPI nodes
12+
# -s = Restart step
1013
# A regression test file is of the format:
1114
# parameters to application
1215
# blank line
@@ -29,43 +32,67 @@ function atomic_log_file {
2932
) 200>/var/lock/ifemloglock
3033
}
3134

32-
mysim=$1
35+
OPTIND=1
36+
while getopts "a:r:m:v:s:" OPT
37+
do
38+
case "${OPT}" in
39+
a) MYSIM=${OPTARG} ;;
40+
r) REG_FILE=${OPTARG} ;;
41+
m) MPI_NODES=${OPTARG} ;;
42+
v) VALGRIND=${OPTARG} ;;
43+
s) RSTEP=${OPTARG};;
44+
esac
45+
done
3346

34-
cd `dirname $2`
35-
MAPFILE=`head -n1 $2`
36-
test $? -eq 0 || exit 1
37-
if test -z "$4"
47+
if test -z ${MYSIM} || test -z ${REG_FILE}
3848
then
39-
test -n "$3" && mysim="mpirun -n $3 $mysim"
40-
else
41-
test -n "$5" && mysim="mpirun -n $5 $mysim"
49+
echo "Need simulator and regression file"
50+
exit 1
4251
fi
52+
53+
cd `dirname ${REG_FILE}`
54+
MAPFILE=`head -n1 ${REG_FILE}`
55+
test $? -eq 0 || exit 1
4356
hdf5=""
4457
tmplog=`mktemp -t ifemlogXXXXXX`
4558
faillog=`mktemp -t ifemfailXXXXXX`
46-
if test -n "$4"
59+
if test -n "${RSTEP}"
4760
then
48-
hdf5="-hdf5 @CMAKE_BINARY_DIR@/Testing/$3"
49-
rm -f @CMAKE_BINARY_DIR@/Testing/$3.hdf5
50-
rm -f @CMAKE_BINARY_DIR@/Testing/$3_restart.hdf5
61+
REG_NAME=`head -n1 $REG_FILE | awk -F '.xinp' '{print $1}'`
62+
if grep -q "../" <<< $REG_NAME
63+
then
64+
REG_NAME=`echo $REG_NAME | awk -F '../' '{print $2}'`
65+
fi
66+
h5file=`mktemp -t ${REG_NAME}_XXXXXX`
67+
hdf5="-hdf5 ${h5file}"
5168
fi
52-
$mysim $hdf5 $MAPFILE 2>&1 | tee $tmplog
69+
if test -n "${VALGRIND}"
70+
then
71+
vallog=`mktemp -t ifemvallogXXXXXX`
72+
MYSIM="${VALGRIND} --log-file=${vallog} ${MYSIM}"
73+
fi
74+
test -n "${MPI_NODES}" && MYSIM="mpirun -n ${MPI_NODES} ${MYSIM}"
75+
76+
${MYSIM} ${hdf5} ${MAPFILE} 2>&1 | tee ${tmplog}
5377
retcode=$?
54-
if test $retcode -ne 0
78+
if test ${retcode} -ne 0
5579
then
5680
atomic_log "Application returned error code: $retcode"
5781
echo Application returned error code: $retcode >> /dev/stderr
5882
exit 1
5983
fi
60-
if test -n "$4"
84+
if test -n "${RSTEP}"
6185
then
62-
MAPFILE=`echo $MAPFILE | sed 's/ -restartInc [1-9][0-9]*//'`
63-
$mysim $MAPFILE -restart @CMAKE_BINARY_DIR@/Testing/$3_restart.hdf5 $4 2>&1 | tee $tmplog
86+
MAPFILE=`echo ${MAPFILE} | sed 's/ -restartInc [1-9][0-9]*//'`
87+
${MYSIM} ${MAPFILE} -restart ${h5file}_restart.hdf5 ${RSTEP} 2>&1 | tee $tmplog
88+
rm -f ${h5file}.hdf5
89+
rm -f ${h5file}_restart.hdf5
6490
fi
6591
appres=$?
6692
globres=1
6793
IFS=$'\n'
68-
for line in `cat $2`
94+
echo $REG_FILE
95+
for line in `cat $REG_FILE`
6996
do
7097
test -z "$line" && continue
7198
echo "$line" | grep -q ".inp" && continue
@@ -77,7 +104,7 @@ do
77104
then
78105
if test $globres -eq 1
79106
then
80-
echo "-------- $2 --------" > $faillog
107+
echo "-------- ${REG_FILE} --------" > $faillog
81108
fi
82109
globres=0
83110
echo "Failed to find output: $line" >> $faillog
@@ -86,14 +113,14 @@ do
86113
done
87114
cat $tmplog >> $faillog
88115

89-
if [ "@IFEM_TEST_MEMCHECK@" == "1" ] || [ "@IFEM_TEST_MEMCHECK@" == "ON" ]
116+
if test -n "$VALGRIND"
90117
then
91-
if ! grep -q "ERROR SUMMARY: 0 errors" @CMAKE_BINARY_DIR@/valgrindlog
118+
if ! grep -q "ERROR SUMMARY: 0 errors" $vallog
92119
then
93-
cat @CMAKE_BINARY_DIR@/valgrindlog >> $faillog
94-
rm -f @CMAKE_BINARY_DIR@/valgrindlog
120+
cat $vallog >> $faillog
95121
appres=1
96122
fi
123+
rm -f $vallog
97124
fi
98125

99126
if test $globres -eq 0 || test $appres -ne 0

cmake/Scripts/IFEMTesting.cmake

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -101,11 +101,13 @@ function(IFEM_add_test name binary)
101101
else()
102102
set(test-name "${binary}+${name}")
103103
endif()
104+
if(ARGN)
105+
set(ARGN "-m ${ARGN}")
106+
endif()
104107
if(IFEM_TEST_MEMCHECK)
105-
add_test("${test-name}" regtest.sh "${MEMCHECK_COMMAND} --log-file=${CMAKE_BINARY_DIR}/valgrindlog ${EXECUTABLE_OUTPUT_PATH}/${binary}" ${PROJECT_SOURCE_DIR}/${TEST_SUBDIR}/Test/${name} ${ARGN})
106-
else(IFEM_TEST_MEMCHECK)
107-
add_test("${test-name}" regtest.sh ${EXECUTABLE_OUTPUT_PATH}/${binary} ${PROJECT_SOURCE_DIR}/${TEST_SUBDIR}/Test/${name} ${ARGN})
108-
endif(IFEM_TEST_MEMCHECK)
108+
set(VALGRIND "-v ${MEMCHECK_COMMAND}")
109+
endif()
110+
add_test("${test-name}" regtest.sh ${VALGRIND} -a ${EXECUTABLE_OUTPUT_PATH}/${binary} -r ${PROJECT_SOURCE_DIR}/${TEST_SUBDIR}/Test/${name} ${ARGN})
109111
endfunction()
110112

111113
function(IFEM_add_restart_test name binary rlevel)
@@ -115,14 +117,13 @@ function(IFEM_add_restart_test name binary rlevel)
115117
else()
116118
set(test-name "restart+${binary}+${name}")
117119
endif()
118-
string(REGEX MATCH "^(.*)\\.[^.]*$" dummy ${name})
119-
set(rfile ${CMAKE_MATCH_1})
120-
get_filename_component(rfile ${rfile} NAME)
120+
if(ARGN)
121+
set(ARGN "-m ${ARGN}")
122+
endif()
121123
if(IFEM_TEST_MEMCHECK)
122-
add_test("${test-name}" regtest.sh "${MEMCHECK_COMMAND} --log-file=${CMAKE_BINARY_DIR}/valgrindlog ${EXECUTABLE_OUTPUT_PATH}/${binary}" ${PROJECT_SOURCE_DIR}/${TEST_SUBDIR}/Test/${name} ${rfile} ${rlevel} ${ARGN})
123-
else(IFEM_TEST_MEMCHECK)
124-
add_test("${test-name}" regtest.sh ${EXECUTABLE_OUTPUT_PATH}/${binary} ${PROJECT_SOURCE_DIR}/${TEST_SUBDIR}/Test/${name} ${rfile} ${rlevel} ${ARGN})
125-
endif(IFEM_TEST_MEMCHECK)
124+
set(VALGRIND "-v ${MEMCHECK_COMMAND}")
125+
endif()
126+
add_test("${test-name}" regtest.sh ${VALGRIND} -a ${EXECUTABLE_OUTPUT_PATH}/${binary} -r ${PROJECT_SOURCE_DIR}/${TEST_SUBDIR}/Test/${name} -s ${rlevel} ${ARGN})
126127
endfunction()
127128

128129
function(IFEM_add_vtf_test name binary)

0 commit comments

Comments
 (0)