[svn-r19599] Purpose:
Fix for bug# 2040 - h5copy should fail gracefully for expected failure copying to non-exist nested group without -p option. Description: Fixed h5copy to fail gracefully when copying object to non-exist group without -p option. This is expected to be failed. Merged from hdf5 trunk r19598. Tested: jam, amani
This commit is contained in:
1
MANIFEST
1
MANIFEST
@@ -1693,6 +1693,7 @@
|
||||
./tools/h5copy/testfiles/h5copy_extlinks_src.h5
|
||||
./tools/h5copy/testfiles/h5copy_extlinks_trg.h5
|
||||
./tools/h5copy/testfiles/h5copy_extlinks_src.out.ls
|
||||
./tools/h5copy/testfiles/h5copy_misc1.out
|
||||
|
||||
# test files for h5mkgrp
|
||||
./tools/testfiles/h5mkgrp_help.ls
|
||||
|
||||
@@ -106,7 +106,8 @@ Bug Fixes since HDF5-1.8.6
|
||||
|
||||
Tools
|
||||
-----
|
||||
- None
|
||||
- Fixed h5copy to fail gracefully when copying object to non-exist
|
||||
group without -p option. Bug#2040 (JKM 2010/10/14)
|
||||
|
||||
F90 API
|
||||
------
|
||||
|
||||
@@ -215,6 +215,8 @@ main (int argc, const char *argv[])
|
||||
int opt;
|
||||
int li_ret;
|
||||
h5tool_link_info_t linkinfo;
|
||||
int i, len;
|
||||
char *str_prt=NULL;
|
||||
|
||||
h5tools_setprogname(PROGRAMNAME);
|
||||
h5tools_setstatus(EXIT_SUCCESS);
|
||||
@@ -406,6 +408,23 @@ main (int argc, const char *argv[])
|
||||
if(verbose)
|
||||
printf("%s: Creating parent groups\n", h5tools_getprogname());
|
||||
} /* end if */
|
||||
else /* error, if parent groups doesn't already exist in destination file */
|
||||
{
|
||||
len = strlen(oname_dst);
|
||||
/* check if all the parents groups exist. skip root group */
|
||||
for (i = 1; i < len-1; i++)
|
||||
{
|
||||
if ('/'==oname_dst[i])
|
||||
{
|
||||
str_prt = strndup(oname_dst, (size_t)i);
|
||||
if (H5Lexists(fid_dst, str_prt, H5P_DEFAULT) <= 0)
|
||||
{
|
||||
error_msg("group <%s> doesn't exist. Use -p to create parent groups.\n");
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* do the copy
|
||||
@@ -459,6 +478,8 @@ main (int argc, const char *argv[])
|
||||
free(oname_dst);
|
||||
if (oname_src)
|
||||
free(oname_src);
|
||||
if (str_prt)
|
||||
free(str_prt);
|
||||
|
||||
h5tools_close();
|
||||
|
||||
@@ -485,6 +506,8 @@ error:
|
||||
free(oname_dst);
|
||||
if (oname_src)
|
||||
free(oname_src);
|
||||
if (str_prt)
|
||||
free(str_prt);
|
||||
|
||||
h5tools_close();
|
||||
|
||||
|
||||
5
tools/h5copy/testfiles/h5copy_misc1.out
Normal file
5
tools/h5copy/testfiles/h5copy_misc1.out
Normal file
@@ -0,0 +1,5 @@
|
||||
#############################
|
||||
output for 'h5copy -i ../../../hdf5/tools/h5copy/testfiles/h5copytst.h5 -o ./testfiles/h5copytst.out.h5 -v -s /simple -d /g1/g2/simple'
|
||||
#############################
|
||||
Copying file <../../../hdf5/tools/h5copy/testfiles/h5copytst.h5> and object </simple> to file <./testfiles/h5copytst.out.h5> and object </g1/g2/simple>
|
||||
Error in copy...Exiting
|
||||
@@ -91,6 +91,15 @@ VERIFY_H5LS()
|
||||
echo "Verifying h5ls file structure $* $SPACES" | cut -c1-70 | tr -d '\012'
|
||||
}
|
||||
|
||||
# Print a line-line message left justified in a field of 70 characters
|
||||
# beginning with the word "Verifying".
|
||||
#
|
||||
VERIFY_OUTPUT()
|
||||
{
|
||||
SPACES=" "
|
||||
echo "Verifying output files $* $SPACES" | cut -c1-70 | tr -d '\012'
|
||||
}
|
||||
|
||||
# Run a test and print PASS or *FAIL*. If h5copy can complete
|
||||
# with exit status 0, consider it pass. If a test fails then increment
|
||||
# the `nerrors' global variable.
|
||||
@@ -143,44 +152,70 @@ TOOLTEST()
|
||||
}
|
||||
|
||||
|
||||
# Compare the two text files
|
||||
# PASS if same
|
||||
# FAIL if different, and show the diff
|
||||
#
|
||||
# Assumed arguments:
|
||||
# $1 is text file1 (expected output)
|
||||
# $2 is text file2 (actual output)
|
||||
CMP_OUTPUT()
|
||||
{
|
||||
expectout=$1
|
||||
actualout=$2
|
||||
|
||||
VERIFY_OUTPUT $@
|
||||
if [ ! -f $expectout ]; then
|
||||
# Create the expect file if it doesn't yet exist.
|
||||
echo " CREATED"
|
||||
cp $actualout $expectout
|
||||
elif $CMP $expectout $actualout; then
|
||||
echo " PASSED"
|
||||
else
|
||||
echo "*FAILED*"
|
||||
echo " Expected output differs from actual output"
|
||||
nerrors="`expr $nerrors + 1`"
|
||||
test yes = "$verbose" && $DIFF $expectout $actualout |sed 's/^/ /'
|
||||
fi
|
||||
}
|
||||
|
||||
TOOLTEST_FAIL()
|
||||
{
|
||||
runh5diff=yes
|
||||
if [ "$1" = -i ]; then
|
||||
expectout="$INDIR/$1"
|
||||
actualout="$OUTDIR/$1.actual"
|
||||
shift
|
||||
if [ "$1" = -i ]; then
|
||||
inputfile=$2
|
||||
else
|
||||
runh5diff=no
|
||||
fi
|
||||
if [ "$3" = -o ]; then
|
||||
fi
|
||||
if [ "$3" = -o ]; then
|
||||
outputfile=$4
|
||||
else
|
||||
runh5diff=no
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
TESTING $H5COPY $@
|
||||
(
|
||||
echo "#############################"
|
||||
echo " output for '$H5COPY $@'"
|
||||
echo "#############################"
|
||||
$RUNSERIAL $H5COPY_BIN $@
|
||||
) > output.out
|
||||
) > $actualout 2> /dev/null
|
||||
RET=$?
|
||||
if [ $RET != 0 ]; then
|
||||
echo " PASSED"
|
||||
# Verifying output text from h5copy
|
||||
if [ "$expectout" != "SKIP" ]; then
|
||||
CMP_OUTPUT $expectout $actualout
|
||||
fi
|
||||
else
|
||||
echo "*FAILED*"
|
||||
echo "failed result is:"
|
||||
cat output.out
|
||||
cat $actualout
|
||||
nerrors="`expr $nerrors + 1`"
|
||||
else
|
||||
echo " PASSED"
|
||||
|
||||
# Clean up output file
|
||||
if test -z "$HDF5_NOCLEANUP"; then
|
||||
rm -f output.out
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ $runh5diff != no ]; then
|
||||
H5DIFFTEST_FAIL $inputfile $outputfile $7 $9
|
||||
|
||||
# Clean up output file
|
||||
if test -z "$HDF5_NOCLEANUP"; then
|
||||
rm -f $actualout
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -389,6 +424,28 @@ COPY_EXT_LINKS()
|
||||
fi
|
||||
}
|
||||
|
||||
# Test misc.
|
||||
#
|
||||
# Assumed arguments:
|
||||
# <none>
|
||||
TEST_MISC()
|
||||
{
|
||||
TESTFILE="$INDIR/$HDF_FILE1"
|
||||
FILEOUT="$OUTDIR/`basename $HDF_FILE1 .h5`.out.h5"
|
||||
|
||||
# Remove any output file left over from previous test run
|
||||
rm -f $FILEOUT
|
||||
|
||||
echo "Test copying object into group which doesn't exist, without -p"
|
||||
TOOLTEST_FAIL h5copy_misc1.out -i $TESTFILE -o $FILEOUT -v -s /simple -d /g1/g2/simple
|
||||
|
||||
# Remove output file created, if the "no cleanup" environment variable is
|
||||
# not defined
|
||||
if test -z "$HDF5_NOCLEANUP"; then
|
||||
rm -f $FILEOUT
|
||||
fi
|
||||
}
|
||||
|
||||
##############################################################################
|
||||
### T H E T E S T S ###
|
||||
##############################################################################
|
||||
@@ -396,6 +453,7 @@ COPY_EXT_LINKS()
|
||||
COPY_OBJECTS
|
||||
COPY_REFERENCES
|
||||
COPY_EXT_LINKS
|
||||
TEST_MISC
|
||||
|
||||
|
||||
if test $nerrors -eq 0 ; then
|
||||
|
||||
Reference in New Issue
Block a user