[svn-r20168] BZ2048: Add -E --enable-error-stack option to h5dump.

Tested: local linux, heiwa, windows
This commit is contained in:
Allen Byrne 2011-02-28 15:25:25 -05:00
parent 600bcf0dc3
commit c6382f50c5
8 changed files with 122 additions and 4 deletions

View File

@ -1166,6 +1166,8 @@
./tools/testfiles/family_file00015.h5
./tools/testfiles/family_file00016.h5
./tools/testfiles/family_file00017.h5
./tools/testfiles/filter_fail.h5
./tools/testfiles/filter_fail.ddl
./tools/testfiles/packedbits.h5
./tools/testfiles/packedbits.ddl
./tools/testfiles/file_space.h5

View File

@ -77,7 +77,7 @@ IF (TEST_MASK_ERROR)
FILE (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM)
STRING(REGEX REPLACE "thread [0-9]*:" "thread (IDs):" TEST_STREAM "${TEST_STREAM}")
STRING(REGEX REPLACE ": ([^\n]*)[.]c " ": (file name) " TEST_STREAM "${TEST_STREAM}")
STRING(REGEX REPLACE "line [0-9]*" "line (number)" TEST_STREAM "${TEST_STREAM}")
STRING(REGEX REPLACE " line [0-9]*" " line (number)" TEST_STREAM "${TEST_STREAM}")
STRING(REGEX REPLACE "v[1-9]*[.][0-9]*[.]" "version (number)." TEST_STREAM "${TEST_STREAM}")
STRING(REGEX REPLACE "[1-9]*[.][0-9]*[.][0-9]*[^)]*" "version (number)" TEST_STREAM "${TEST_STREAM}")
STRING(REGEX REPLACE "H5Eget_auto[1-2]*" "H5Eget_auto(1 or 2)" TEST_STREAM "${TEST_STREAM}")

View File

@ -38,6 +38,7 @@ IF (BUILD_TESTING)
# Copy all the HDF5 files from the test directory into the source directory
# --------------------------------------------------------------------
SET (HDF5_REFERENCE_FILES
filter_fail.ddl
packedbits.ddl
tall-1.ddl
tall-2.ddl
@ -220,6 +221,7 @@ IF (BUILD_TESTING)
tbin3.ddl
tbin4.ddl
out3.h5import
filter_fail.h5
packedbits.h5
taindices.h5
tall.h5
@ -440,6 +442,25 @@ IF (BUILD_TESTING)
SET (last_test "H5DUMP-output-cmp-${resultfile}")
ENDMACRO (ADD_H5_EXPORT_TEST file)
MACRO (ADD_H5_MASK_TEST resultfile resultcode)
ADD_TEST (
NAME H5DUMP-${resultfile}
COMMAND "${CMAKE_COMMAND}"
-D "TEST_PROGRAM=$<TARGET_FILE:h5dump>"
-D "TEST_ARGS:STRING=${ARGN}"
-D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
-D "TEST_OUTPUT=${resultfile}.out"
-D "TEST_EXPECT=${resultcode}"
-D "TEST_REFERENCE=${resultfile}.ddl"
-D "TEST_MASK_ERROR=true"
-P "${HDF5_RESOURCES_DIR}/runTest.cmake"
)
IF (NOT "${last_test}" STREQUAL "")
SET_TESTS_PROPERTIES (H5DUMP-${resultfile} PROPERTIES DEPENDS ${last_test})
ENDIF (NOT "${last_test}" STREQUAL "")
SET (last_test "H5DUMP-${resultfile}")
ENDMACRO (ADD_H5_MASK_TEST file)
MACRO (ADD_XML_SKIP_H5_TEST skipresultfile skipresultcode testtype)
IF (${testtype} STREQUAL "SKIP")
ADD_TEST (
@ -495,6 +516,8 @@ IF (BUILD_TESTING)
NAME H5DUMP-clearall-objects
COMMAND ${CMAKE_COMMAND}
-E remove
filter_fail.out
filter_fail.out.err
packedbits.out
packedbits.out.err
tall-1.out
@ -1048,6 +1071,9 @@ IF (BUILD_TESTING)
# test for dangling external links
ADD_H5_TEST (textlink 0 textlink.h5)
# test for error stack display (BZ2048)
ADD_H5_MASK_TEST (filter_fail 1 -E filter_fail.h5)
####### test for dataset packed bits ######
IF (HDF5_USE_H5DUMP_PACKED_BITS)
# Remove any output file left over from previous test run

View File

@ -92,6 +92,7 @@ static int display_fi = FALSE; /*file index */
static int display_ai = TRUE; /*array index */
static int display_escape = FALSE; /*escape non printable characters */
static int display_region = FALSE; /*print region reference data */
static int enable_error_stack= FALSE; /* re-enable error stack */
/* sort parameters */
static H5_index_t sort_by = H5_INDEX_NAME; /*sort_by [creation_order | name] */
@ -386,7 +387,7 @@ struct handler_t {
* parameters. The long-named ones can be partially spelled. When
* adding more, make sure that they don't clash with each other.
*/
static const char *s_opts = "hnpeyBHirVa:c:d:f:g:k:l:t:w:xD:uX:o:b*F:s:S:Aq:z:m:R";
static const char *s_opts = "hnpeyBHirVa:c:d:f:g:k:l:t:w:xD:uX:o:b*F:s:S:Aq:z:m:RE";
static struct long_options l_opts[] = {
{ "help", no_arg, 'h' },
{ "hel", no_arg, 'h' },
@ -499,6 +500,7 @@ static struct long_options l_opts[] = {
{ "sort_order", require_arg, 'z' },
{ "format", require_arg, 'm' },
{ "region", no_arg, 'R' },
{ "enable-error-stack", no_arg, 'E' },
{ NULL, 0, '\0' }
};
@ -661,6 +663,7 @@ usage(const char *prog)
fprintf(stdout, " -X S, --xml-ns=S (XML Schema) Use qualified names n the XML\n");
fprintf(stdout, " \":\": no namespace, default: \"hdf5:\"\n");
fprintf(stdout, " E.g., to dump a file called `-f', use h5dump -- -f\n");
fprintf(stdout, " -E, --enable-error-stack Show all HDF5 error reporting\n");
fprintf(stdout, "\n");
fprintf(stdout, " Subsetting is available by using the following options with a dataset\n");
fprintf(stdout, " attribute. Subsetting is done by selecting a hyperslab from the data.\n");
@ -4221,6 +4224,9 @@ end_collect:
}
/** end subsetting parameters **/
case 'E':
enable_error_stack = TRUE;
break;
case 'h':
usage(h5tools_getprogname());
leave(EXIT_SUCCESS);
@ -4342,12 +4348,14 @@ main(int argc, const char *argv[])
h5tools_init();
hand = parse_command_line(argc, argv);
if ( bin_output && outfname == NULL )
{
if (bin_output && outfname == NULL) {
error_msg("binary output requires a file name, use -o <filename>\n");
leave(EXIT_FAILURE);
}
if (enable_error_stack)
H5Eset_auto2(H5E_DEFAULT, func, edata);
/* Check for conflicting options */
if (doxml) {
if (!display_all) {

View File

@ -196,6 +196,55 @@ TOOLTEST2() {
}
# same as TOOLTEST but filters error stack outp
# Extract file name, line number, version and thread IDs because they may be different
TOOLTEST3() {
expect="$srcdir/../testfiles/$1"
actual="../testfiles/`basename $1 .ddl`.out"
actual_err="../testfiles/`basename $1 .ddl`.err"
actual_ext="../testfiles/`basename $1 .ddl`.ext"
shift
# Run test.
TESTING $DUMPER $@
(
echo "#############################"
echo "Expected output for '$DUMPER $@'"
echo "#############################"
cd $srcdir/../testfiles
$RUNSERIAL $DUMPER_BIN $@
) >$actual 2>$actual_err
# 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)/' \
-e 's/v[1-9]*\.[0-9]*\./version (number)\./' \
-e 's/[1-9]*\.[0-9]*\.[0-9]*[^)]*/version (number)/' \
-e 's/H5Eget_auto[1-2]*/H5Eget_auto(1 or 2)/' \
-e 's/H5Eset_auto[1-2]*/H5Eset_auto(1 or 2)/' \
$actual_err > $actual_ext
cat $actual_ext >> $actual
if [ ! -f $expect ]; then
# Create the expect file if it doesn't yet exist.
echo " CREATED"
cp $actual $expect
elif $CMP $expect $actual; then
echo " PASSED"
else
echo "*FAILED*"
echo " Expected result (*.ddl) differs from actual result (*.out)"
nerrors="`expr $nerrors + 1`"
test yes = "$verbose" && $DIFF $expect $actual |sed 's/^/ /'
fi
# Clean up output file
if test -z "$HDF5_NOCLEANUP"; then
rm -f $actual $actual_err
fi
}
# Print a "SKIP" message
SKIP() {
@ -581,6 +630,8 @@ TOOLTEST textlinkfar.ddl textlinkfar.h5
# test for dangling external links
TOOLTEST textlink.ddl textlink.h5
# test for error stack display (BZ2048)
TOOLTEST3 filter_fail.ddl -E filter_fail.h5
# Report test results and exit
if test $nerrors -eq 0 ; then

View File

@ -0,0 +1,30 @@
#############################
Expected output for 'h5dump -E filter_fail.h5'
#############################
HDF5 "filter_fail.h5" {
GROUP "/" {
DATASET "dset_fail" {
DATATYPE H5T_STD_I32LE
DATASPACE SIMPLE { ( 10 ) / ( 10 ) }
DATA {
}
}
}
}
HDF5-DIAG: Error detected in HDF5 (version (number)) thread (IDs):
#000: (file name) line (number) in H5Dread(): can't read data
major: Dataset
minor: Read failed
#001: (file name) line (number) in H5D_read(): can't read data
major: Dataset
minor: Read failed
#002: (file name) line (number) in H5D_chunk_read(): unable to read raw data chunk
major: Low-level I/O
minor: Read failed
#003: (file name) line (number) in H5D_chunk_lock(): data pipeline read failed
major: Data filters
minor: Filter operation failed
#004: (file name) line (number) in H5Z_pipeline(): required filter is not registered
major: Data filters
minor: Read failed
h5dump error: unable to print data

Binary file not shown.

View File

@ -35,6 +35,7 @@ usage: h5dump [OPTIONS] file
-X S, --xml-ns=S (XML Schema) Use qualified names n the XML
":": no namespace, default: "hdf5:"
E.g., to dump a file called `-f', use h5dump -- -f
-E, --enable-error-stack Show all HDF5 error reporting
Subsetting is available by using the following options with a dataset
attribute. Subsetting is done by selecting a hyperslab from the data.