From 3f37f6648dcb868fdbd7f94658ad1cd965ae257c Mon Sep 17 00:00:00 2001 From: Quincey Koziol Date: Wed, 16 Dec 2020 21:36:13 -0600 Subject: Fix datatype lookup in named datatype flush/refresh code and detect more core dumps in test scripts (#193) * Detect coredumps, and avoid printing a warning when creating a directory that already exists * Retrieve the actual datatype object correctly, in the face of possible pass-through VOL connectors * Detect more core dumps, and tiny formatting cleanup * Revert error status checks for mirror VFD test script --- src/H5Tcommit.c | 4 ++-- test/testerror.sh.in | 6 ++++++ test/testexternal_env.sh.in | 8 ++++---- test/testflushrefresh.sh.in | 16 ++++++++++++++-- test/testlinks_env.sh.in | 4 ++-- test/testvds_env.sh.in | 4 ++-- 6 files changed, 30 insertions(+), 12 deletions(-) diff --git a/src/H5Tcommit.c b/src/H5Tcommit.c index b990e4a..3eacea3 100644 --- a/src/H5Tcommit.c +++ b/src/H5Tcommit.c @@ -1333,7 +1333,7 @@ H5T_save_refresh_state(hid_t tid, H5O_shared_t *cached_H5O_shared) if (NULL == (dt = (H5T_t *)H5I_object_verify(tid, H5I_DATATYPE))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "tid is not a datatype ID") - vol_dt = (H5T_t *)(dt->vol_obj->data); + vol_dt = H5T_get_actual_type(dt); if (NULL == vol_dt) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "tid is not not a named datatype ID") @@ -1373,7 +1373,7 @@ H5T_restore_refresh_state(hid_t tid, H5O_shared_t *cached_H5O_shared) if (NULL == (dt = (H5T_t *)H5I_object_verify(tid, H5I_DATATYPE))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "tid not a datatype ID") - vol_dt = (H5T_t *)(dt->vol_obj->data); + vol_dt = H5T_get_actual_type(dt); if (NULL == vol_dt) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "tid is not not a named datatype ID") diff --git a/test/testerror.sh.in b/test/testerror.sh.in index b5ec853..e4c6339 100644 --- a/test/testerror.sh.in +++ b/test/testerror.sh.in @@ -64,6 +64,12 @@ TEST() { # Skip the plugin for testing missing filter. $ENVCMD $RUNSERIAL $TEST_ERR_BIN ) >$actual 2>$actual_err + + # Check for core dump + if [ $? != 0 ]; then + nerrors=`expr $nerrors + 1` + fi + # Extract file name, line number, version and thread IDs because they may be different sed -e 's/thread [0-9]*/thread (IDs)/' -e 's/: .*\.c /: (file name) /' \ -e 's/line [0-9]*/line (number)/' \ diff --git a/test/testexternal_env.sh.in b/test/testexternal_env.sh.in index 3cc140d..1327c7d 100644 --- a/test/testexternal_env.sh.in +++ b/test/testexternal_env.sh.in @@ -34,9 +34,9 @@ ENVCMD="env HDF5_EXTFILE_PREFIX=\${ORIGIN}" # The environment variable & valu $ENVCMD $RUNSERIAL $TEST_BIN exitcode=$? if [ $exitcode -eq 0 ]; then - echo "Test prefix for HDF5_EXTFILE_PREFIX PASSED" - else - nerrors="`expr $nerrors + 1`" - echo "***Error encountered for HDF5_EXTFILE_PREFIX test***" + echo "Test prefix for HDF5_EXTFILE_PREFIX PASSED" +else + nerrors="`expr $nerrors + 1`" + echo "***Error encountered for HDF5_EXTFILE_PREFIX test***" fi exit $nerrors diff --git a/test/testflushrefresh.sh.in b/test/testflushrefresh.sh.in index 3cdf10f..be44a13 100644 --- a/test/testflushrefresh.sh.in +++ b/test/testflushrefresh.sh.in @@ -82,7 +82,7 @@ fi # different, occasionally the wrong file is deleted, interrupting the flow of # the test. Running each of these tests in its own directory should eliminate # the problem. -mkdir flushrefresh_test +mkdir -p flushrefresh_test cp flushrefresh flushrefresh_test # With the --disable-shared option, flushrefresh is built in the test directory, @@ -90,7 +90,7 @@ cp flushrefresh flushrefresh_test # the test directory. test/flushrefresh should always be copied, # .libs/flushrefresh should be copied only if it exists. if [ -f .libs/flushrefresh ]; then - mkdir flushrefresh_test/.libs + mkdir -p flushrefresh_test/.libs for FILE in .libs/flushrefresh*; do case "$FILE" in *.o) continue ;; ## don't copy the .o files @@ -156,6 +156,12 @@ until [ $verification_done -eq 1 ]; do echo "all flush verification complete" > $endsignal else ./flushrefresh $param1 $param2 + + # Check for core dump + if [ $? -gt 0 ]; then + nerrors=`expr $nerrors + 1` + fi + echo "verification flush process done" > $endsignal fi @@ -195,6 +201,12 @@ if [ $timedout -eq 0 ]; then echo "all refresh verification complete" > $endsignal else ./flushrefresh $param1 + + # Check for core dump + if [ $? -gt 0 ]; then + nerrors=`expr $nerrors + 1` + fi + echo "refresh verifiction process done" > $endsignal fi diff --git a/test/testlinks_env.sh.in b/test/testlinks_env.sh.in index 3d6b3ce..e61e057 100644 --- a/test/testlinks_env.sh.in +++ b/test/testlinks_env.sh.in @@ -34,8 +34,8 @@ echo "$ENVCMD $RUNSERIAL $TEST_BIN" $ENVCMD $RUNSERIAL $TEST_BIN exitcode=$? if [ $exitcode -eq 0 ]; then - echo "Test for HDF5_EXT_PREFIX PASSED" - else + echo "Test for HDF5_EXT_PREFIX PASSED" +else nerrors="`expr $nerrors + 1`" echo "***Error encountered for HDF5_EXT_PREFIX test***" fi diff --git a/test/testvds_env.sh.in b/test/testvds_env.sh.in index e9a27da..9577d7d 100644 --- a/test/testvds_env.sh.in +++ b/test/testvds_env.sh.in @@ -35,8 +35,8 @@ UNENVCMD="unset HDF5_VDS_PREFIX" # Unset the environment variable $ENVCMD $RUNSERIAL $TEST_BIN exitcode=$? if [ $exitcode -eq 0 ]; then - echo "Test prefix for HDF5_VDS_PREFIX PASSED" - else + echo "Test prefix for HDF5_VDS_PREFIX PASSED" +else nerrors="`expr $nerrors + 1`" echo "***Error encountered for HDF5_VDS_PREFIX test***" fi -- cgit v0.12